From fd18bd2694ae0a44507a50a937a185cdc25ea766 Mon Sep 17 00:00:00 2001 From: Jonathan Shook Date: Wed, 31 Jul 2024 14:22:05 -0500 Subject: [PATCH] attach http adapter metrics directly to adapter instance --- .../adapter/http/HttpDriverAdapter.java | 17 ++++++++++++----- .../adapter/http/core/HttpMetrics.java | 19 +++++++++---------- .../adapter/http/core/HttpSpace.java | 9 +++++---- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/nb-adapters/adapter-http/src/main/java/io/nosqlbench/adapter/http/HttpDriverAdapter.java b/nb-adapters/adapter-http/src/main/java/io/nosqlbench/adapter/http/HttpDriverAdapter.java index b443117fa..adec22ea8 100644 --- a/nb-adapters/adapter-http/src/main/java/io/nosqlbench/adapter/http/HttpDriverAdapter.java +++ b/nb-adapters/adapter-http/src/main/java/io/nosqlbench/adapter/http/HttpDriverAdapter.java @@ -16,16 +16,16 @@ package io.nosqlbench.adapter.http; -import io.nosqlbench.adapter.http.core.HttpFormatParser; -import io.nosqlbench.adapter.http.core.HttpOp; -import io.nosqlbench.adapter.http.core.HttpOpMapper; -import io.nosqlbench.adapter.http.core.HttpSpace; +import io.nosqlbench.adapter.http.core.*; +import io.nosqlbench.nb.api.components.core.NBComponentProps; import io.nosqlbench.nb.api.config.standard.ConfigModel; import io.nosqlbench.nb.api.config.standard.Param; import io.nosqlbench.adapters.api.activityimpl.OpMapper; import io.nosqlbench.adapters.api.activityimpl.uniform.BaseDriverAdapter; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverAdapter; import io.nosqlbench.adapters.api.activityimpl.uniform.DriverSpaceCache; +import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory; +import io.nosqlbench.nb.api.engine.metrics.instruments.NBMetricHistogram; import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.components.core.NBComponent; import io.nosqlbench.nb.annotations.Service; @@ -41,8 +41,11 @@ import java.util.function.Function; @Service(value = DriverAdapter.class, selector = "http") public class HttpDriverAdapter extends BaseDriverAdapter { + private final HttpMetrics httpMetrics; + public HttpDriverAdapter(NBComponent parent, NBLabels labels) { super(parent, labels); + this.httpMetrics=new HttpMetrics(this); } @Override @@ -54,7 +57,7 @@ public class HttpDriverAdapter extends BaseDriverAdapter { @Override public Function getSpaceInitializer(NBConfiguration cfg) { - return spaceName -> new HttpSpace(getParent(), spaceName, cfg); + return spaceName -> new HttpSpace(this, spaceName, cfg); } @Override @@ -84,4 +87,8 @@ public class HttpDriverAdapter extends BaseDriverAdapter { return super.getConfigModel().add(HttpSpace.getConfigModel()).add(thisCfgModel); } + + public HttpMetrics getHttpMetrics() { + return this.httpMetrics; + } } diff --git a/nb-adapters/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpMetrics.java b/nb-adapters/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpMetrics.java index 8cd4a301a..f7d4848cf 100644 --- a/nb-adapters/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpMetrics.java +++ b/nb-adapters/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpMetrics.java @@ -17,33 +17,32 @@ package io.nosqlbench.adapter.http.core; import com.codahale.metrics.Histogram; +import io.nosqlbench.adapter.http.HttpDriverAdapter; +import io.nosqlbench.nb.api.components.core.NBComponentProps; import io.nosqlbench.nb.api.engine.metrics.instruments.MetricCategory; import io.nosqlbench.nb.api.labels.NBLabeledElement; import io.nosqlbench.nb.api.labels.NBLabels; -import io.nosqlbench.nb.api.components.core.NBComponent; public class HttpMetrics implements NBLabeledElement { - private final NBComponent parent; - private final HttpSpace space; + private final HttpDriverAdapter parentAdapter; final Histogram statusCodeHistogram; - public HttpMetrics(NBComponent parent, HttpSpace space) { - this.parent = parent; - this.space = space; - statusCodeHistogram = parent.create().histogram( + public HttpMetrics(HttpDriverAdapter parentAdapter) { + this.parentAdapter = parentAdapter; + statusCodeHistogram = parentAdapter.create().histogram( "statuscode", - space.getHdrDigits(), + Integer.parseInt(parentAdapter.getComponentProp(NBComponentProps.HDRDIGITS).orElse("3")), MetricCategory.Payload, "A histogram of status codes received by the HTTP client" ); } public String getName() { - return "http"+("default".equals(this.space.getSpaceName())?"": '-' + space.getSpaceName()); + return parentAdapter.getAdapterName() + "-metrics"; } @Override public NBLabels getLabels() { - return space.getLabels(); + return parentAdapter.getLabels(); } } diff --git a/nb-adapters/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpSpace.java b/nb-adapters/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpSpace.java index 63cffd03f..7997ebf9b 100644 --- a/nb-adapters/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpSpace.java +++ b/nb-adapters/adapter-http/src/main/java/io/nosqlbench/adapter/http/core/HttpSpace.java @@ -16,6 +16,7 @@ package io.nosqlbench.adapter.http.core; +import io.nosqlbench.adapter.http.HttpDriverAdapter; import io.nosqlbench.nb.api.labels.NBLabeledElement; import io.nosqlbench.nb.api.labels.NBLabels; import io.nosqlbench.nb.api.config.standard.ConfigModel; @@ -39,7 +40,7 @@ import java.util.Locale; public class HttpSpace implements NBLabeledElement { private final static Logger logger = LogManager.getLogger(HttpSpace.class); - private final NBComponent parent; + private final HttpDriverAdapter parentAdapter; private final String name; private final NBConfiguration cfg; private HttpConsoleFormats console; @@ -52,8 +53,8 @@ public class HttpSpace implements NBLabeledElement { private boolean diagnosticsEnabled; - public HttpSpace(NBComponent parent, String spaceName, NBConfiguration cfg) { - this.parent = parent; + public HttpSpace(HttpDriverAdapter parentAdapter, String spaceName, NBConfiguration cfg) { + this.parentAdapter = parentAdapter; this.name = spaceName; this.cfg = cfg; applyConfig(cfg); @@ -79,7 +80,7 @@ public class HttpSpace implements NBLabeledElement { ); this.timeout = Duration.ofMillis(cfg.get("timeout", long.class)); this.timeoutMillis = cfg.get("timeout", long.class); - this.httpMetrics = new HttpMetrics(parent, this); + this.httpMetrics = parentAdapter.getHttpMetrics(); this.console = cfg.getOptional("diag").map(s -> HttpConsoleFormats.apply(s, this.console)) .orElseGet(() -> HttpConsoleFormats.apply(null,null));