Skip to content
This repository has been archived by the owner on Sep 26, 2019. It is now read-only.

Commit

Permalink
Convert MetricsConfigiguration to use a builder instead of being muta…
Browse files Browse the repository at this point in the history
…ble. (#1572)
  • Loading branch information
ajsutton authored Jun 18, 2019
1 parent b05179f commit 34c4887
Show file tree
Hide file tree
Showing 8 changed files with 176 additions and 145 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public class PantheonFactoryConfigurationBuilder {
private PrivacyParameters privacyParameters = PrivacyParameters.DEFAULT;
private JsonRpcConfiguration jsonRpcConfiguration = JsonRpcConfiguration.createDefault();
private WebSocketConfiguration webSocketConfiguration = WebSocketConfiguration.createDefault();
private MetricsConfiguration metricsConfiguration = MetricsConfiguration.createDefault();
private MetricsConfiguration metricsConfiguration = MetricsConfiguration.builder().build();
private Optional<PermissioningConfiguration> permissioningConfiguration = Optional.empty();
private Optional<String> keyFilePath = Optional.empty();
private boolean devMode = true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -250,9 +250,7 @@ private P2PNetwork createP2pNetwork() {
}

private MetricsConfiguration createMetricsConfiguration() {
final MetricsConfiguration config = MetricsConfiguration.createDefault();
config.setEnabled(true);
return config;
return MetricsConfiguration.builder().enabled(true).build();
}

private JsonRpcHttpService createJsonRpcHttpService(
Expand Down Expand Up @@ -375,7 +373,7 @@ public JsonRpcHttpService getJsonRpcHttpService(final boolean[] enabledNetServic
JsonRpcConfiguration jsonRpcConfiguration = JsonRpcConfiguration.createDefault();
WebSocketConfiguration webSocketConfiguration = WebSocketConfiguration.createDefault();
P2PNetwork p2pNetwork = mock(P2PNetwork.class);
MetricsConfiguration metricsConfiguration = MetricsConfiguration.createDefault();
MetricsConfiguration metricsConfiguration = MetricsConfiguration.builder().build();

if (enabledNetServices[netServices.indexOf("jsonrpc")]) {
jsonRpcConfiguration = createJsonRpcConfiguration();
Expand Down Expand Up @@ -403,7 +401,7 @@ public void netServicesTestWhenJsonrpcWebsocketP2pNetworkAndMatricesIsDisabled()
JsonRpcConfiguration.createDefault(),
WebSocketConfiguration.createDefault(),
mock(P2PNetwork.class),
MetricsConfiguration.createDefault());
MetricsConfiguration.builder().build());
final RequestBody body = createNetServicesRequestBody();

try (final Response resp = client.newCall(buildRequest(body)).execute()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,162 +23,125 @@
import java.util.Objects;
import java.util.Set;

import com.google.common.base.MoreObjects;

public class MetricsConfiguration {
private static final String DEFAULT_METRICS_HOST = "127.0.0.1";
public static final int DEFAULT_METRICS_PORT = 9545;

private static final String DEFAULT_METRICS_PUSH_HOST = "127.0.0.1";
public static final int DEFAULT_METRICS_PUSH_PORT = 9001;

private boolean enabled;
private int port;
private String host;
private Set<MetricCategory> metricCategories;
private boolean pushEnabled;
private int pushPort;
private String pushHost;
private int pushInterval;
private String prometheusJob;
private List<String> hostsWhitelist = Arrays.asList("localhost", "127.0.0.1");

public static MetricsConfiguration createDefault() {
final MetricsConfiguration metricsConfiguration = new MetricsConfiguration();
metricsConfiguration.setEnabled(false);
metricsConfiguration.setPort(DEFAULT_METRICS_PORT);
metricsConfiguration.setHost(DEFAULT_METRICS_HOST);
metricsConfiguration.setMetricCategories(DEFAULT_METRIC_CATEGORIES);
metricsConfiguration.setPushEnabled(false);
metricsConfiguration.setPushPort(DEFAULT_METRICS_PUSH_PORT);
metricsConfiguration.setPushHost(DEFAULT_METRICS_PUSH_HOST);
metricsConfiguration.setPushInterval(15);
metricsConfiguration.setPrometheusJob("pantheon-client");

return metricsConfiguration;
}

private MetricsConfiguration() {}
private final boolean enabled;
private final int port;
private final String host;
private final Set<MetricCategory> metricCategories;
private final boolean pushEnabled;
private final int pushPort;
private final String pushHost;
private final int pushInterval;
private final String prometheusJob;
private final List<String> hostsWhitelist;

public static Builder builder() {
return new Builder();
}

private MetricsConfiguration(
final boolean enabled,
final int port,
final String host,
final Set<MetricCategory> metricCategories,
final boolean pushEnabled,
final int pushPort,
final String pushHost,
final int pushInterval,
final String prometheusJob,
final List<String> hostsWhitelist) {
this.enabled = enabled;
this.port = port;
this.host = host;
this.metricCategories = metricCategories;
this.pushEnabled = pushEnabled;
this.pushPort = pushPort;
this.pushHost = pushHost;
this.pushInterval = pushInterval;
this.prometheusJob = prometheusJob;
this.hostsWhitelist = hostsWhitelist;
}

public boolean isEnabled() {
return enabled;
}

public void setEnabled(final boolean enabled) {
this.enabled = enabled;
}

public int getPort() {
return port;
}

public void setPort(final int port) {
this.port = port;
}

public String getHost() {
return host;
}

public void setHost(final String host) {
this.host = host;
}

public Set<MetricCategory> getMetricCategories() {
return metricCategories;
}

public void setMetricCategories(final Set<MetricCategory> metricCategories) {
this.metricCategories = metricCategories;
}

public int getPushPort() {
return pushPort;
}

public void setPushPort(final int pushPort) {
this.pushPort = pushPort;
}

public String getPushHost() {
return pushHost;
}

public void setPushHost(final String pushHost) {
this.pushHost = pushHost;
}

public boolean isPushEnabled() {
return pushEnabled;
}

public void setPushEnabled(final boolean pushEnabled) {
this.pushEnabled = pushEnabled;
}

public int getPushInterval() {
return pushInterval;
}

public void setPushInterval(final int pushInterval) {
this.pushInterval = pushInterval;
}

public String getPrometheusJob() {
return prometheusJob;
}

public void setPrometheusJob(final String prometheusJob) {
this.prometheusJob = prometheusJob;
}

Collection<String> getHostsWhitelist() {
return Collections.unmodifiableCollection(this.hostsWhitelist);
}

public void setHostsWhitelist(final List<String> hostsWhitelist) {
this.hostsWhitelist = hostsWhitelist;
}

@Override
public String toString() {
return "MetricsConfiguration{"
+ "enabled="
+ enabled
+ ", port="
+ port
+ ", host='"
+ host
+ '\''
+ ", categories="
+ metricCategories.toString()
+ ", pushEnabled="
+ pushEnabled
+ ", pushPort="
+ pushPort
+ ", pushHost='"
+ pushHost
+ '\''
+ ", pushInterval="
+ pushInterval
+ ", prometheusJob='"
+ prometheusJob
+ '\''
+ ", hostsWhitelist="
+ hostsWhitelist
+ '}';
return MoreObjects.toStringHelper(this)
.add("enabled", enabled)
.add("port", port)
.add("host", host)
.add("metricCategories", metricCategories)
.add("pushEnabled", pushEnabled)
.add("pushPort", pushPort)
.add("pushHost", pushHost)
.add("pushInterval", pushInterval)
.add("prometheusJob", prometheusJob)
.add("hostsWhitelist", hostsWhitelist)
.toString();
}

@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 MetricsConfiguration that = (MetricsConfiguration) o;
return enabled == that.enabled
&& port == that.port
&& Objects.equals(metricCategories, that.metricCategories)
&& pushEnabled == that.pushEnabled
&& pushPort == that.pushPort
&& pushInterval == that.pushInterval
&& Objects.equals(host, that.host)
&& Objects.equals(metricCategories, that.metricCategories)
&& Objects.equals(pushHost, that.pushHost)
&& Objects.equals(prometheusJob, that.prometheusJob)
&& Objects.equals(hostsWhitelist, that.hostsWhitelist);
Expand All @@ -198,4 +161,83 @@ public int hashCode() {
prometheusJob,
hostsWhitelist);
}

public static class Builder {
private boolean enabled = false;
private int port = DEFAULT_METRICS_PORT;
private String host = DEFAULT_METRICS_HOST;
private Set<MetricCategory> metricCategories = DEFAULT_METRIC_CATEGORIES;
private boolean pushEnabled = false;
private int pushPort = DEFAULT_METRICS_PUSH_PORT;
private String pushHost = DEFAULT_METRICS_PUSH_HOST;
private int pushInterval = 15;
private String prometheusJob = "pantheon-client";
private List<String> hostsWhitelist = Arrays.asList("localhost", "127.0.0.1");

private Builder() {}

public Builder enabled(final boolean enabled) {
this.enabled = enabled;
return this;
}

public Builder port(final int port) {
this.port = port;
return this;
}

public Builder host(final String host) {
this.host = host;
return this;
}

public Builder metricCategories(final Set<MetricCategory> metricCategories) {
this.metricCategories = metricCategories;
return this;
}

public Builder pushEnabled(final boolean pushEnabled) {
this.pushEnabled = pushEnabled;
return this;
}

public Builder pushPort(final int pushPort) {
this.pushPort = pushPort;
return this;
}

public Builder pushHost(final String pushHost) {
this.pushHost = pushHost;
return this;
}

public Builder pushInterval(final int pushInterval) {
this.pushInterval = pushInterval;
return this;
}

public Builder prometheusJob(final String prometheusJob) {
this.prometheusJob = prometheusJob;
return this;
}

public Builder hostsWhitelist(final List<String> hostsWhitelist) {
this.hostsWhitelist = hostsWhitelist;
return this;
}

public MetricsConfiguration build() {
return new MetricsConfiguration(
enabled,
port,
host,
metricCategories,
pushEnabled,
pushPort,
pushHost,
pushInterval,
prometheusJob,
hostsWhitelist);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@
*/
package tech.pegasys.pantheon.metrics.prometheus;

import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.assertThat;

import java.net.InetSocketAddress;
import java.util.Collections;
import java.util.Properties;

import io.vertx.core.Vertx;
Expand Down Expand Up @@ -54,17 +54,16 @@ private static MetricsHttpService createMetricsHttpService(final MetricsConfigur

private static MetricsHttpService createMetricsHttpService() {
final MetricsConfiguration metricsConfiguration = createMetricsConfig();
metricsConfiguration.setEnabled(true);
return new MetricsHttpService(
vertx, metricsConfiguration, PrometheusMetricsSystem.init(metricsConfiguration));
}

private static MetricsConfiguration createMetricsConfig() {
final MetricsConfiguration config = MetricsConfiguration.createDefault();
config.setEnabled(true);
config.setPort(0);
config.setHostsWhitelist(Collections.singletonList("*"));
return config;
return createMetricsConfigBuilder().build();
}

private static MetricsConfiguration.Builder createMetricsConfigBuilder() {
return MetricsConfiguration.builder().enabled(true).port(0).hostsWhitelist(singletonList("*"));
}

/** Tears down the HTTP server. */
Expand Down Expand Up @@ -114,8 +113,7 @@ public void getSocketAddressWhenStoppedIsEmpty() {

@Test
public void getSocketAddressWhenBindingToAllInterfaces() {
final MetricsConfiguration config = createMetricsConfig();
config.setHost("0.0.0.0");
final MetricsConfiguration config = createMetricsConfigBuilder().host("0.0.0.0").build();
final MetricsHttpService service = createMetricsHttpService(config);
service.start().join();

Expand Down
Loading

0 comments on commit 34c4887

Please sign in to comment.