Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion gearman-server/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,11 @@
<artifactId>metrics-servlets</artifactId>
<version>${metrics.version}</version>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-graphite</artifactId>
<version>${metrics.version}</version>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-annotation</artifactId>
Expand Down Expand Up @@ -201,4 +206,4 @@
</plugins>
</build>

</project>
</project>
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package net.johnewart.gearman.server;

import net.johnewart.gearman.server.net.GearmanGraphiteReporter;
import net.johnewart.gearman.server.config.DefaultServerConfiguration;
import net.johnewart.gearman.server.config.GearmanServerConfiguration;
import net.johnewart.gearman.server.net.ServerListener;
Expand All @@ -18,19 +19,21 @@ public static void main(String... args)
{
final String configFile;

if (args.length != 1) {
if (args.length < 1) {
configFile = "config.yml";
} else {
configFile = args[0];
configFile = args[args.length - 1];
}


final GearmanServerConfiguration serverConfiguration = loadFromConfigOrGenerateDefaultConfig(configFile);
final ServerListener serverListener = new ServerListener(serverConfiguration);
final WebListener webListener = new WebListener(serverConfiguration);
final GearmanGraphiteReporter gearmanGraphiteReporter = new GearmanGraphiteReporter(serverConfiguration);

try {
webListener.start();
gearmanGraphiteReporter.start();
serverListener.start();
} catch (Exception e) {
e.printStackTrace();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package net.johnewart.gearman.server.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.concurrent.TimeUnit;

public class GearmanGraphiteReporterConfiguration {

private static final Logger LOG = LoggerFactory.getLogger(GearmanGraphiteReporterConfiguration.class);

private Integer port;
private Long period;
private String host;
private String prefix;
private TimeUnit durations;
private TimeUnit rates;

public String getHost() {
return host == null ? "localhost" : host;
}

@SuppressWarnings("unused")
public void setHost(String host) {
this.host = host;
}

public int getPort() {
return port == null ? 2003 : port;
}

@SuppressWarnings("unused")
public void setPort(int port) {
this.port = port;
}

public String getPrefix() {
return prefix == null ? "" : prefix;
}

@SuppressWarnings("unused")
public void setPrefix(String prefix) {
this.prefix = prefix;
}

public TimeUnit getRates() {
return rates == null ? TimeUnit.SECONDS : rates;
}

@SuppressWarnings("unused")
public void setRates(String rates) {
if (rates != null) {
try {
this.rates = TimeUnit.valueOf(rates.toUpperCase());
} catch (IllegalArgumentException e) {
LOG.warn("Got illegal rates value : {}", rates);
}
}
}

public TimeUnit getDurations() {
return durations == null ? TimeUnit.SECONDS : durations;
}

@SuppressWarnings("unused")
public void setDurations(String durations) {
if (durations != null) {
try {
this.durations = TimeUnit.valueOf(durations.toUpperCase());
} catch (IllegalArgumentException e) {
LOG.warn("Got illegal durations value : {}", durations);
}
}
}

public long getPeriod() {
return period == null ? 60 : period;
}

@SuppressWarnings("unused")
public void setPeriod(long period) {
this.period = period;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ public class GearmanServerConfiguration implements ServerConfiguration {
private JobQueueMonitor jobQueueMonitor;
private ExceptionStorageEngine exceptionStorageEngine;
private PersistenceEngineConfiguration persistenceEngine;
private GearmanGraphiteReporterConfiguration graphite;
private ClusterConfiguration clusterConfiguration;
private ExceptionStoreConfiguration exceptionStoreConfiguration;
private JobHandleFactory jobHandleFactory;
Expand Down Expand Up @@ -239,4 +240,12 @@ public HealthCheckRegistry getHealthCheckRegistry()
}
return healthCheckRegistry;
}

public GearmanGraphiteReporterConfiguration getGraphite() {
return graphite;
}

public void setGraphite(GearmanGraphiteReporterConfiguration graphite) {
this.graphite = graphite;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package net.johnewart.gearman.server.net;

import com.codahale.metrics.MetricFilter;
import com.codahale.metrics.graphite.Graphite;
import com.codahale.metrics.graphite.GraphiteReporter;
import net.johnewart.gearman.server.config.GearmanGraphiteReporterConfiguration;
import net.johnewart.gearman.server.config.GearmanServerConfiguration;

import java.util.concurrent.TimeUnit;

public class GearmanGraphiteReporter {

private final boolean enabled;
private final GraphiteReporter reporter;
private final long period;

public GearmanGraphiteReporter(GearmanServerConfiguration configuration) {
GearmanGraphiteReporterConfiguration graphiteConfiguration = configuration.getGraphite();
if (graphiteConfiguration != null) {
enabled = true;
final Graphite graphite = new Graphite(graphiteConfiguration.getHost(), graphiteConfiguration.getPort());
period = graphiteConfiguration.getPeriod();

reporter = GraphiteReporter.forRegistry(configuration.getMetricRegistry())
.prefixedWith(graphiteConfiguration.getPrefix())
.convertRatesTo(graphiteConfiguration.getRates())
.convertDurationsTo(graphiteConfiguration.getDurations())
.filter(MetricFilter.ALL)
.build(graphite);
} else {
reporter = null;
period = 0L;
enabled = false;
}
}

public void start() {
if (enabled) {
reporter.start(period, TimeUnit.SECONDS);
}
}

boolean isEnabled() {
return enabled;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package net.johnewart.gearman.server.net;

import net.johnewart.gearman.server.config.GearmanGraphiteReporterConfiguration;
import net.johnewart.gearman.server.config.GearmanServerConfiguration;
import org.junit.Test;

import static org.junit.Assert.*;

/**
* Created by genus on 08.12.2016.
*/
public class GearmanGraphiteReporterTest {

@Test
public void disabled() throws Exception {
final GearmanServerConfiguration configuration = new GearmanServerConfiguration();
final GearmanGraphiteReporter gearmanGraphiteReporter = new GearmanGraphiteReporter(configuration);

assertFalse(gearmanGraphiteReporter.isEnabled());
}

@Test
public void enabled() throws Exception {
final GearmanServerConfiguration configuration = new GearmanServerConfiguration();
configuration.setGraphite(new GearmanGraphiteReporterConfiguration());
final GearmanGraphiteReporter gearmanGraphiteReporter = new GearmanGraphiteReporter(configuration);

assertTrue(gearmanGraphiteReporter.isEnabled());

}
}