JAMES-1950 Enable metrics reporting with DNS service
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/5d3bedee Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/5d3bedee Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/5d3bedee Branch: refs/heads/master Commit: 5d3bedee1898ea446650a794beaba4e60f7988d5 Parents: cca0f39 Author: benwa <btell...@linagora.com> Authored: Fri Mar 31 19:41:04 2017 +0700 Committer: benwa <btell...@linagora.com> Committed: Mon Apr 3 15:33:38 2017 +0700 ---------------------------------------------------------------------- server/dns-service/dnsservice-dnsjava/pom.xml | 4 ++ .../dnsservice/dnsjava/DNSJavaService.java | 53 +++++++++++++++----- .../dnsservice/dnsjava/DNSJavaServiceTest.java | 6 +++ 3 files changed, 51 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/5d3bedee/server/dns-service/dnsservice-dnsjava/pom.xml ---------------------------------------------------------------------- diff --git a/server/dns-service/dnsservice-dnsjava/pom.xml b/server/dns-service/dnsservice-dnsjava/pom.xml index b15d23e..6a27d3f 100644 --- a/server/dns-service/dnsservice-dnsjava/pom.xml +++ b/server/dns-service/dnsservice-dnsjava/pom.xml @@ -42,6 +42,10 @@ <artifactId>james-server-lifecycle-api</artifactId> </dependency> <dependency> + <groupId>org.apache.james</groupId> + <artifactId>metrics-api</artifactId> + </dependency> + <dependency> <groupId>commons-configuration</groupId> <artifactId>commons-configuration</artifactId> </dependency> http://git-wip-us.apache.org/repos/asf/james-project/blob/5d3bedee/server/dns-service/dnsservice-dnsjava/src/main/java/org/apache/james/dnsservice/dnsjava/DNSJavaService.java ---------------------------------------------------------------------- diff --git a/server/dns-service/dnsservice-dnsjava/src/main/java/org/apache/james/dnsservice/dnsjava/DNSJavaService.java b/server/dns-service/dnsservice-dnsjava/src/main/java/org/apache/james/dnsservice/dnsjava/DNSJavaService.java index fbb44f0..80b4703 100644 --- a/server/dns-service/dnsservice-dnsjava/src/main/java/org/apache/james/dnsservice/dnsjava/DNSJavaService.java +++ b/server/dns-service/dnsservice-dnsjava/src/main/java/org/apache/james/dnsservice/dnsjava/DNSJavaService.java @@ -25,6 +25,8 @@ import org.apache.james.dnsservice.api.DNSServiceMBean; import org.apache.james.dnsservice.api.TemporaryResolutionException; import org.apache.james.lifecycle.api.Configurable; import org.apache.james.lifecycle.api.LogEnabled; +import org.apache.james.metrics.api.MetricFactory; +import org.apache.james.metrics.api.TimeMetric; import org.slf4j.Logger; import org.xbill.DNS.ARecord; import org.xbill.DNS.Cache; @@ -44,6 +46,8 @@ import org.xbill.DNS.TextParseException; import org.xbill.DNS.Type; import javax.annotation.PostConstruct; +import javax.inject.Inject; + import java.net.InetAddress; import java.net.UnknownHostException; import java.util.ArrayList; @@ -85,6 +89,8 @@ public class DNSJavaService implements DNSService, DNSServiceMBean, LogEnabled, */ private final List<String> dnsServers = new ArrayList<String>(); + private final MetricFactory metricFactory; + /** * The search paths to be used */ @@ -113,6 +119,11 @@ public class DNSJavaService implements DNSService, DNSServiceMBean, LogEnabled, this.logger = logger; } + @Inject + public DNSJavaService(MetricFactory metricFactory) { + this.metricFactory = metricFactory; + } + @Override public void configure(HierarchicalConfiguration configuration) throws ConfigurationException { @@ -306,6 +317,7 @@ public class DNSJavaService implements DNSService, DNSServiceMBean, LogEnabled, @Override public Collection<String> findMXRecords(String hostname) throws TemporaryResolutionException { + TimeMetric timeMetric = metricFactory.timer("findMXRecords"); List<String> servers = new ArrayList<String>(); try { servers = findMXRecordsRaw(hostname); @@ -327,6 +339,7 @@ public class DNSJavaService implements DNSService, DNSServiceMBean, LogEnabled, logger.error(logBuffer.toString()); } } + timeMetric.stopAndPublish(); } } @@ -424,6 +437,7 @@ public class DNSJavaService implements DNSService, DNSServiceMBean, LogEnabled, @Override public InetAddress getByName(String host) throws UnknownHostException { + TimeMetric timeMetric = metricFactory.timer("getByName"); String name = allowIPLiteral(host); try { @@ -441,11 +455,14 @@ public class DNSJavaService implements DNSService, DNSServiceMBean, LogEnabled, return InetAddress.getByAddress(name, a.getAddress().getAddress()); } else throw e; + } finally { + timeMetric.stopAndPublish(); } } @Override public InetAddress[] getAllByName(String host) throws UnknownHostException { + TimeMetric timeMetric = metricFactory.timer("getAllByName"); String name = allowIPLiteral(host); try { // Check if its local @@ -467,37 +484,49 @@ public class DNSJavaService implements DNSService, DNSServiceMBean, LogEnabled, return addrs; } else throw e; + } finally { + timeMetric.stopAndPublish(); } } @Override public Collection<String> findTXTRecords(String hostname) { + TimeMetric timeMetric = metricFactory.timer("findTXTRecords"); List<String> txtR = new ArrayList<String>(); Record[] records = lookupNoException(hostname, Type.TXT, "TXT"); - if (records != null) { - for (Record record : records) { - TXTRecord txt = (TXTRecord) record; - txtR.add(txt.rdataToString()); - } + try { + if (records != null) { + for (Record record : records) { + TXTRecord txt = (TXTRecord) record; + txtR.add(txt.rdataToString()); + } + } + return txtR; + } finally { + timeMetric.stopAndPublish(); } - return txtR; } @Override public String getHostName(InetAddress addr) { + TimeMetric timeMetric = metricFactory.timer("getHostName"); String result; Name name = ReverseMap.fromAddress(addr); Record[] records = lookupNoException(name.toString(), Type.PTR, "PTR"); - if (records == null) { - result = addr.getHostAddress(); - } else { - PTRRecord ptr = (PTRRecord) records[0]; - result = ptr.getTarget().toString(); + try { + if (records == null) { + result = addr.getHostAddress(); + } else { + PTRRecord ptr = (PTRRecord) records[0]; + result = ptr.getTarget().toString(); + } + return result; + } finally { + timeMetric.stopAndPublish(); } - return result; } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/5d3bedee/server/dns-service/dnsservice-dnsjava/src/test/java/org/apache/james/dnsservice/dnsjava/DNSJavaServiceTest.java ---------------------------------------------------------------------- diff --git a/server/dns-service/dnsservice-dnsjava/src/test/java/org/apache/james/dnsservice/dnsjava/DNSJavaServiceTest.java b/server/dns-service/dnsservice-dnsjava/src/test/java/org/apache/james/dnsservice/dnsjava/DNSJavaServiceTest.java index 7c6842d..70eb870 100644 --- a/server/dns-service/dnsservice-dnsjava/src/test/java/org/apache/james/dnsservice/dnsjava/DNSJavaServiceTest.java +++ b/server/dns-service/dnsservice-dnsjava/src/test/java/org/apache/james/dnsservice/dnsjava/DNSJavaServiceTest.java @@ -20,6 +20,8 @@ package org.apache.james.dnsservice.dnsjava; import com.google.common.io.Resources; import org.apache.commons.configuration.DefaultConfigurationBuilder; +import org.apache.james.metrics.api.MetricFactory; +import org.apache.james.metrics.api.NoopMetricFactory; import org.junit.After; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -225,6 +227,10 @@ public class DNSJavaServiceTest { private final class TestableDNSServer extends DNSJavaService { + public TestableDNSServer() { + super(new NoopMetricFactory()); + } + public void setResolver(Resolver r) { resolver = r; } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org