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

Reply via email to