package com.cyngn.vertx.opentsdb; import com.cyngn.vertx.opentsdb.spi.SpiOptions; import io.vertx.core.json.JsonArray; import io.vertx.core.json.JsonObject; import io.vertx.core.metrics.MetricsOptions; /** * The options for OpenTsDb * * @author truelove@cyngn.com (Jeremy Truelove) 9/22/15 */ public class OpenTsDbOptions extends MetricsOptions implements SpiOptions { public static final int OPENTSDB_DEFAULT_MAX_TAGS = 8; public final static String DEFAULT_ADDRESS = "vertx.opentsdb-reporter"; private final int DEFAULT_MTU = 1500; private final int defaultTagCount; private final String defaultTags; private JsonArray hosts; private int maxBufferBytes; private String address; private String prefix; private int flushInterval; private int maxBacklog; private int maxTags; private int spiPublishInterval; // flags for enabling/disabling various metrics private boolean eventBusEnabled = true; private boolean httpClientEnabled = true; private boolean httpServerEnabled = true; private boolean tcpClientEnabled = true; private boolean tcpServerEnabled = true; public OpenTsDbOptions() { hosts = new JsonArray("[{ \"host\" : \"localhost\", \"port\" : 4242}]"); maxBufferBytes = DEFAULT_MTU; prefix = null; maxTags = OPENTSDB_DEFAULT_MAX_TAGS; address = DEFAULT_ADDRESS; flushInterval = 1000; maxBacklog = Integer.MIN_VALUE; defaultTagCount = 0; spiPublishInterval = flushInterval; defaultTags = ""; } public OpenTsDbOptions(OpenTsDbOptions other) { super(other); address = other.address; hosts = other.hosts; maxBufferBytes = other.maxBufferBytes; prefix = other.prefix; maxTags = other.maxTags; flushInterval = other.flushInterval; maxBacklog = other.maxBacklog; defaultTagCount = other.defaultTagCount; defaultTags = other.defaultTags; spiPublishInterval = other.spiPublishInterval; } public OpenTsDbOptions(JsonObject config) { super(config); hosts = config.getJsonArray("hosts", new JsonArray("[{ \"host\" : \"localhost\", \"port\" : 4242}]")); maxBufferBytes = config.getInteger("max_buffer_bytes", DEFAULT_MTU); prefix = config.getString("prefix", null); maxTags = config.getInteger("max_tags", OPENTSDB_DEFAULT_MAX_TAGS); flushInterval = config.getInteger("flush_interval_milli", 1000); maxBacklog = config.getInteger("max_metric_backlog", Integer.MIN_VALUE); address = config.getString("address", DEFAULT_ADDRESS); spiPublishInterval = config.getInteger("spi_publish_interval", 1000); final JsonObject configuredTags = config.getJsonObject("tags"); if (configuredTags != null && configuredTags.size() > maxTags) { throw new IllegalArgumentException("Found more default tags than the max (" + maxTags + ")"); } defaultTagCount = configuredTags != null ? configuredTags.size() : 0; defaultTags = Util.createTagsFromJson(configuredTags); } public String getAddress() { return address; } public int getDefaultTagCount() { return defaultTagCount; } public String getDefaultTags() { return defaultTags; } public JsonArray getHosts() { return hosts; } public int getMaxBufferBytes() { return maxBufferBytes; } public String getPrefix() { return prefix; } public int getFlushInterval() { return flushInterval; } public int getMaxBacklog() { return maxBacklog; } public int getMaxTags() { return maxTags; } public int getSpiPublishInterval() { return spiPublishInterval; } public boolean isEventBusEnabled() { return eventBusEnabled; } public OpenTsDbOptions disableEventBus() { eventBusEnabled = false; return this; } public boolean isHttpClientEnabled() { return httpClientEnabled; } public OpenTsDbOptions disableHttpClient() { httpClientEnabled = false; return this; } public boolean isHttpServerEnabled() { return httpServerEnabled; } public OpenTsDbOptions disableHttpServer() { httpServerEnabled = false; return this; } public boolean isTcpClientEnabled() { return tcpClientEnabled; } public OpenTsDbOptions disableTcpClient() { tcpClientEnabled = false; return this; } public boolean isTcpServerEnabled() { return tcpServerEnabled; } public OpenTsDbOptions disableTcpServer() { tcpServerEnabled = false; return this; } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("OpenTsDbOptions[maxBufferSize=").append(maxBufferBytes).append(", address=").append(address) .append(", maxTags=").append(maxTags).append(", flushInterval=").append(flushInterval) .append("(ms), maxBacklog=").append(maxBacklog == Integer.MIN_VALUE ? "INFINITY" : maxBacklog); if (defaultTagCount > 0) { builder.append(", tags='").append(defaultTags).append("'"); } builder.append(", eventBusEnabled=").append(eventBusEnabled).append(", httpClientEnabled=") .append(httpClientEnabled).append(", httpServerEnabled=").append(httpServerEnabled) .append(", tcpClientEnabled").append(tcpClientEnabled).append(", tcpServerEnabled") .append(tcpServerEnabled).append(", hosts='").append(hosts.encode()).append("']"); return builder.toString(); } @Override public OpenTsDbOptions setEnabled(boolean enable) { return (OpenTsDbOptions) super.setEnabled(enable); } }