Add a hostname-aware reporter factory.
This commit is contained in:
		
							parent
							
								
									c634185b6f
								
							
						
					
					
						commit
						eb1b073385
					
				
							
								
								
									
										6
									
								
								pom.xml
								
								
								
								
							
							
						
						
									
										6
									
								
								pom.xml
								
								
								
								
							| 
						 | 
				
			
			@ -35,6 +35,7 @@
 | 
			
		|||
    <commons-csv.version>1.8</commons-csv.version>
 | 
			
		||||
    <commons-io.version>2.9.0</commons-io.version>
 | 
			
		||||
    <dropwizard.version>2.0.22</dropwizard.version>
 | 
			
		||||
    <dropwizard-metrics-datadog.version>1.1.13</dropwizard-metrics-datadog.version>
 | 
			
		||||
    <guava.version>30.1.1-jre</guava.version>
 | 
			
		||||
    <jaxb.version>2.3.1</jaxb.version>
 | 
			
		||||
    <jedis.version>2.9.0</jedis.version>
 | 
			
		||||
| 
						 | 
				
			
			@ -171,6 +172,11 @@
 | 
			
		|||
        <artifactId>commons-csv</artifactId>
 | 
			
		||||
        <version>${commons-csv.version}</version>
 | 
			
		||||
      </dependency>
 | 
			
		||||
      <dependency>
 | 
			
		||||
        <groupId>org.coursera</groupId>
 | 
			
		||||
        <artifactId>dropwizard-metrics-datadog</artifactId>
 | 
			
		||||
        <version>${dropwizard-metrics-datadog.version}</version>
 | 
			
		||||
      </dependency>
 | 
			
		||||
      <dependency>
 | 
			
		||||
        <groupId>org.glassfish.jaxb</groupId>
 | 
			
		||||
        <artifactId>jaxb-runtime</artifactId>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -226,7 +226,10 @@
 | 
			
		|||
      <groupId>io.micrometer</groupId>
 | 
			
		||||
      <artifactId>micrometer-registry-datadog</artifactId>
 | 
			
		||||
    </dependency>
 | 
			
		||||
 | 
			
		||||
    <dependency>
 | 
			
		||||
      <groupId>org.coursera</groupId>
 | 
			
		||||
      <artifactId>dropwizard-metrics-datadog</artifactId>
 | 
			
		||||
    </dependency>
 | 
			
		||||
    <dependency>
 | 
			
		||||
      <groupId>com.fasterxml.jackson.core</groupId>
 | 
			
		||||
      <artifactId>jackson-core</artifactId>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,74 @@
 | 
			
		|||
/*
 | 
			
		||||
 * This is derived from Coursera's dropwizard datadog reporter.
 | 
			
		||||
 * https://github.com/coursera/metrics-datadog
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
package org.whispersystems.textsecuregcm.metrics;
 | 
			
		||||
 | 
			
		||||
import com.codahale.metrics.MetricRegistry;
 | 
			
		||||
import com.codahale.metrics.ScheduledReporter;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonProperty;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonTypeName;
 | 
			
		||||
import io.dropwizard.metrics.BaseReporterFactory;
 | 
			
		||||
import java.util.EnumSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.validation.Valid;
 | 
			
		||||
import javax.validation.constraints.NotNull;
 | 
			
		||||
import org.coursera.metrics.datadog.DatadogReporter;
 | 
			
		||||
import org.coursera.metrics.datadog.DatadogReporter.Expansion;
 | 
			
		||||
import org.coursera.metrics.datadog.DefaultMetricNameFormatterFactory;
 | 
			
		||||
import org.coursera.metrics.datadog.DynamicTagsCallbackFactory;
 | 
			
		||||
import org.coursera.metrics.datadog.MetricNameFormatterFactory;
 | 
			
		||||
import org.coursera.metrics.datadog.transport.AbstractTransportFactory;
 | 
			
		||||
import org.whispersystems.textsecuregcm.util.HostnameUtil;
 | 
			
		||||
 | 
			
		||||
@JsonTypeName("signal-datadog")
 | 
			
		||||
public class SignalDatadogReporterFactory extends BaseReporterFactory {
 | 
			
		||||
 | 
			
		||||
  @JsonProperty
 | 
			
		||||
  private List<String> tags = null;
 | 
			
		||||
 | 
			
		||||
  @Valid
 | 
			
		||||
  @JsonProperty
 | 
			
		||||
  private DynamicTagsCallbackFactory dynamicTagsCallback = null;
 | 
			
		||||
 | 
			
		||||
  @JsonProperty
 | 
			
		||||
  private String prefix = null;
 | 
			
		||||
 | 
			
		||||
  @Valid
 | 
			
		||||
  @NotNull
 | 
			
		||||
  @JsonProperty
 | 
			
		||||
  private MetricNameFormatterFactory metricNameFormatter = new DefaultMetricNameFormatterFactory();
 | 
			
		||||
 | 
			
		||||
  @Valid
 | 
			
		||||
  @NotNull
 | 
			
		||||
  @JsonProperty
 | 
			
		||||
  private AbstractTransportFactory transport = null;
 | 
			
		||||
 | 
			
		||||
  private static final EnumSet<Expansion> EXPANSIONS = EnumSet.of(
 | 
			
		||||
      Expansion.COUNT,
 | 
			
		||||
      Expansion.MIN,
 | 
			
		||||
      Expansion.MAX,
 | 
			
		||||
      Expansion.MEAN,
 | 
			
		||||
      Expansion.MEDIAN,
 | 
			
		||||
      Expansion.P75,
 | 
			
		||||
      Expansion.P95,
 | 
			
		||||
      Expansion.P99,
 | 
			
		||||
      Expansion.P999
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  public ScheduledReporter build(MetricRegistry registry) {
 | 
			
		||||
    return DatadogReporter.forRegistry(registry)
 | 
			
		||||
        .withTransport(transport.build())
 | 
			
		||||
        .withHost(HostnameUtil.getLocalHostname())
 | 
			
		||||
        .withTags(tags)
 | 
			
		||||
        .withPrefix(prefix)
 | 
			
		||||
        .withExpansions(EXPANSIONS)
 | 
			
		||||
        .withMetricNameFormatter(metricNameFormatter.build())
 | 
			
		||||
        .withDynamicTagCallback(dynamicTagsCallback != null ? dynamicTagsCallback.build() : null)
 | 
			
		||||
        .filter(getFilter())
 | 
			
		||||
        .convertDurationsTo(getDurationUnit())
 | 
			
		||||
        .convertRatesTo(getRateUnit())
 | 
			
		||||
        .build();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +1,2 @@
 | 
			
		|||
org.whispersystems.textsecuregcm.metrics.JsonMetricsReporterFactory
 | 
			
		||||
org.whispersystems.textsecuregcm.metrics.SignalDatadogReporterFactory
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue