diff --git a/build.gradle.kts b/build.gradle.kts index 8ca626362..6bd6ee04e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { java signing - kotlin("jvm") version "1.9.21" + kotlin("jvm") version "1.9.23" id("com.adarshr.test-logger") version "3.2.0" id("nebula.release") version "17.1.0" id("maven-publish") @@ -26,7 +26,7 @@ dependencies { api("com.google.code.gson:gson:2.10") api("org.apache.httpcomponents:httpclient:4.5.13") - api("io.prometheus:simpleclient:0.16.0") + api("io.prometheus:prometheus-metrics-core:1.1.0") testImplementation(kotlin("test")) testImplementation("org.junit.jupiter:junit-jupiter:5.9.1") diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/dto/subscriptions/request/SubscriptionsSearchRequest.kt b/src/main/kotlin/com/ecwid/apiclient/v3/dto/subscriptions/request/SubscriptionsSearchRequest.kt index 32134343b..6ea70aad7 100644 --- a/src/main/kotlin/com/ecwid/apiclient/v3/dto/subscriptions/request/SubscriptionsSearchRequest.kt +++ b/src/main/kotlin/com/ecwid/apiclient/v3/dto/subscriptions/request/SubscriptionsSearchRequest.kt @@ -65,8 +65,8 @@ data class SubscriptionsSearchRequest( orderTotal?.let { put("orderTotal", it.toString()) } orderCreatedFrom?.let { put("orderCreatedFrom", TimeUnit.MILLISECONDS.toSeconds(it.time).toString()) } orderCreatedTo?.let { put("orderCreatedTo", TimeUnit.MILLISECONDS.toSeconds(it.time).toString()) } - offset?.let { put("offset", it.toString()) } - limit?.let { put("limit", it.toString()) } + put("offset", offset.toString()) + put("limit", limit.toString()) put("sortBy", sortBy.name) lang?.let { put("lang", it) } }.toMap() diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/metric/RequestRetrySleepMetric.kt b/src/main/kotlin/com/ecwid/apiclient/v3/metric/RequestRetrySleepMetric.kt index 502723c5f..b621e3239 100644 --- a/src/main/kotlin/com/ecwid/apiclient/v3/metric/RequestRetrySleepMetric.kt +++ b/src/main/kotlin/com/ecwid/apiclient/v3/metric/RequestRetrySleepMetric.kt @@ -1,13 +1,11 @@ package com.ecwid.apiclient.v3.metric -import io.prometheus.client.Counter +import io.prometheus.metrics.core.metrics.Counter object RequestRetrySleepMetric { - private val metric: Counter = Counter - .build( - "ecwid_api_client_retry_sleep_seconds", - "Ecwid API client sleep during retries as result of rate limits (429 http)", - ) + private val metric: Counter = Counter.builder() + .name("ecwid_api_client_retry_sleep_seconds_total") + .help("Ecwid API client sleep during retries as result of rate limits (429 http)") .register() fun inc() { diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/metric/RequestSizeMetric.kt b/src/main/kotlin/com/ecwid/apiclient/v3/metric/RequestSizeMetric.kt index 44e8efb21..d075f39e7 100644 --- a/src/main/kotlin/com/ecwid/apiclient/v3/metric/RequestSizeMetric.kt +++ b/src/main/kotlin/com/ecwid/apiclient/v3/metric/RequestSizeMetric.kt @@ -5,7 +5,8 @@ import com.ecwid.apiclient.v3.httptransport.HttpRequest import com.ecwid.apiclient.v3.httptransport.HttpResponse import com.ecwid.apiclient.v3.httptransport.TransportHttpBody import com.ecwid.apiclient.v3.impl.RequestInfo -import io.prometheus.client.Histogram +import io.prometheus.metrics.core.metrics.Histogram +import io.prometheus.metrics.model.snapshots.Unit import java.util.concurrent.atomic.AtomicLong import java.util.logging.Level import java.util.logging.Logger @@ -13,9 +14,11 @@ import java.util.logging.Logger private val log = Logger.getLogger(RequestSizeMetric::class.qualifiedName) object RequestSizeMetric { - private val metric: Histogram = Histogram - .build("ecwid_api_client_request_size_bytes", "Ecwid API client request size of parameters & body in bytes") - .buckets( + private val metric = Histogram.builder() + .name("ecwid_api_client_request_size_bytes") + .help("Ecwid API client request size of parameters & body in bytes") + .classicOnly() + .classicUpperBounds( 100.0, 500.0, 1_000.0, @@ -32,6 +35,7 @@ object RequestSizeMetric { 100_000_000.0, ) .labelNames("request_type", "path", "method", "status") + .unit(Unit.BYTES) .register() fun observeRequest( @@ -41,7 +45,7 @@ object RequestSizeMetric { httpResponse: HttpResponse, ) { metric - .labels( + .labelValues( apiRequest.javaClass.simpleName, requestInfo.getFirstPathSegment(), requestInfo.method.name, diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/metric/RequestTimeMetric.kt b/src/main/kotlin/com/ecwid/apiclient/v3/metric/RequestTimeMetric.kt index 2029a9f2f..c68de0d5b 100644 --- a/src/main/kotlin/com/ecwid/apiclient/v3/metric/RequestTimeMetric.kt +++ b/src/main/kotlin/com/ecwid/apiclient/v3/metric/RequestTimeMetric.kt @@ -3,14 +3,17 @@ package com.ecwid.apiclient.v3.metric import com.ecwid.apiclient.v3.dto.ApiRequest import com.ecwid.apiclient.v3.httptransport.HttpResponse import com.ecwid.apiclient.v3.impl.RequestInfo -import io.prometheus.client.Collector -import io.prometheus.client.Histogram +import io.prometheus.metrics.core.metrics.Histogram +import io.prometheus.metrics.model.snapshots.Unit object RequestTimeMetric { - private val metric: Histogram = Histogram - .build("ecwid_api_client_request_latency", "Ecwid API client request latency") - .buckets(0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1.0, 2.5, 5.0, 7.5, 10.0, 25.0, 50.0, 100.0, 200.0) + private val metric = Histogram.builder() + .name("ecwid_api_client_request_latency") + .help("Ecwid API client request latency") + .classicOnly() + .classicUpperBounds(0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1.0, 2.5, 5.0, 7.5, 10.0, 25.0, 50.0, 100.0, 200.0) .labelNames("request_type", "path", "method", "status") + .unit(Unit.SECONDS) .register() fun observeRequest( @@ -20,12 +23,12 @@ object RequestTimeMetric { httpResponse: HttpResponse, ) { metric - .labels( + .labelValues( apiRequest.javaClass.simpleName, requestInfo.getFirstPathSegment(), requestInfo.method.name, extractStatusFromHttpResponse(httpResponse), ) - .observe(requestTimeMs / Collector.MILLISECONDS_PER_SECOND) + .observe(Unit.millisToSeconds(requestTimeMs)) } } diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/metric/ResponseSizeMetric.kt b/src/main/kotlin/com/ecwid/apiclient/v3/metric/ResponseSizeMetric.kt index 5b83bdfd2..801d8b077 100644 --- a/src/main/kotlin/com/ecwid/apiclient/v3/metric/ResponseSizeMetric.kt +++ b/src/main/kotlin/com/ecwid/apiclient/v3/metric/ResponseSizeMetric.kt @@ -3,12 +3,15 @@ package com.ecwid.apiclient.v3.metric import com.ecwid.apiclient.v3.dto.ApiRequest import com.ecwid.apiclient.v3.httptransport.HttpResponse import com.ecwid.apiclient.v3.impl.RequestInfo -import io.prometheus.client.Histogram +import io.prometheus.metrics.core.metrics.Histogram +import io.prometheus.metrics.model.snapshots.Unit object ResponseSizeMetric { - private val metric: Histogram = Histogram - .build("ecwid_api_client_response_size_bytes", "Ecwid API client response size in bytes") - .buckets( + private val metric = Histogram.builder() + .name("ecwid_api_client_response_size_bytes") + .help("Ecwid API client response size in bytes") + .classicOnly() + .classicUpperBounds( 100.0, 500.0, 1_000.0, @@ -25,6 +28,7 @@ object ResponseSizeMetric { 100_000_000.0, ) .labelNames("request_type", "path", "method", "status") + .unit(Unit.BYTES) .register() fun observeResponse( @@ -33,7 +37,7 @@ object ResponseSizeMetric { httpResponse: HttpResponse, ) { metric - .labels( + .labelValues( apiRequest.javaClass.simpleName, requestInfo.getFirstPathSegment(), requestInfo.method.name,