You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by em...@apache.org on 2014/07/07 08:44:09 UTC

[4/6] git commit: [CXF-5843]:Add operation to enable/disable ResponseTimeCounter

[CXF-5843]:Add operation to enable/disable ResponseTimeCounter


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/828d7e51
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/828d7e51
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/828d7e51

Branch: refs/heads/master
Commit: 828d7e5172162481ca361f8461a0e20ee30b53b0
Parents: 2d2a45a
Author: Jim Ma <em...@apache.org>
Authored: Mon Jul 7 11:30:19 2014 +0800
Committer: Jim Ma <em...@apache.org>
Committed: Mon Jul 7 14:43:39 2014 +0800

----------------------------------------------------------------------
 .../AbstractMessageResponseTimeInterceptor.java | 148 ++++++++++++-------
 1 file changed, 94 insertions(+), 54 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/828d7e51/rt/management/src/main/java/org/apache/cxf/management/interceptor/AbstractMessageResponseTimeInterceptor.java
----------------------------------------------------------------------
diff --git a/rt/management/src/main/java/org/apache/cxf/management/interceptor/AbstractMessageResponseTimeInterceptor.java b/rt/management/src/main/java/org/apache/cxf/management/interceptor/AbstractMessageResponseTimeInterceptor.java
index 20d1925..71dffb0 100644
--- a/rt/management/src/main/java/org/apache/cxf/management/interceptor/AbstractMessageResponseTimeInterceptor.java
+++ b/rt/management/src/main/java/org/apache/cxf/management/interceptor/AbstractMessageResponseTimeInterceptor.java
@@ -18,10 +18,10 @@
  */
 package org.apache.cxf.management.interceptor;
 
-
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import javax.management.MalformedObjectNameException;
 import javax.management.ObjectName;
 
 import org.apache.cxf.Bus;
@@ -32,6 +32,7 @@ import org.apache.cxf.management.ManagementConstants;
 import org.apache.cxf.management.counters.Counter;
 import org.apache.cxf.management.counters.CounterRepository;
 import org.apache.cxf.management.counters.MessageHandlingTimeRecorder;
+import org.apache.cxf.management.counters.ResponseTimeCounter;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.FaultMode;
 import org.apache.cxf.message.Message;
@@ -43,29 +44,29 @@ public abstract class AbstractMessageResponseTimeInterceptor extends AbstractPha
     private static final Logger LOG = LogUtils.getL7dLogger(AbstractMessageResponseTimeInterceptor.class);
     private static final String QUESTION_MARK = "?";
     private static final String ESCAPED_QUESTION_MARK = "\\?";
-    
+
     AbstractMessageResponseTimeInterceptor(String phase) {
         super(phase);
     }
-    
+
     protected boolean isClient(Message msg) {
-        return msg == null ? false : Boolean.TRUE.equals(msg.get(Message.REQUESTOR_ROLE));        
+        return msg == null ? false : Boolean.TRUE.equals(msg.get(Message.REQUESTOR_ROLE));
     }
-   
+
     protected void beginHandlingMessage(Exchange ex) {
         if (null == ex) {
             return;
         }
-        MessageHandlingTimeRecorder mhtr = ex.get(MessageHandlingTimeRecorder.class);        
+        MessageHandlingTimeRecorder mhtr = ex.get(MessageHandlingTimeRecorder.class);
         if (null != mhtr) {
             mhtr.beginHandling();
         } else {
             mhtr = new MessageHandlingTimeRecorder(ex);
             mhtr.beginHandling();
-        }        
+        }
     }
-    
-    protected void endHandlingMessage(Exchange ex) {                
+
+    protected void endHandlingMessage(Exchange ex) {
         if (null == ex) {
             return;
         }
@@ -74,82 +75,121 @@ public abstract class AbstractMessageResponseTimeInterceptor extends AbstractPha
             mhtr.endHandling();
             mhtr.setFaultMode(ex.get(FaultMode.class));
             increaseCounter(ex, mhtr);
-                        
-        } // else can't get the MessageHandling Infor  
+
+        } // else can't get the MessageHandling Infor
     }
-    
+
     protected void setOneWayMessage(Exchange ex) {
-        MessageHandlingTimeRecorder mhtr = ex.get(MessageHandlingTimeRecorder.class);        
+        MessageHandlingTimeRecorder mhtr = ex.get(MessageHandlingTimeRecorder.class);
         if (null == mhtr) {
-            mhtr = new MessageHandlingTimeRecorder(ex);            
+            mhtr = new MessageHandlingTimeRecorder(ex);
         } else {
             mhtr.endHandling();
         }
         mhtr.setOneWay(true);
         increaseCounter(ex, mhtr);
-    }    
-    
+    }
+
     private void increaseCounter(Exchange ex, MessageHandlingTimeRecorder mhtr) {
         Bus bus = ex.get(Bus.class);
         if (null == bus) {
             LOG.log(Level.INFO, "CAN_NOT_GET_BUS_FROM_EXCHANGE");
             bus = BusFactory.getThreadDefaultBus();
         }
-        
-        Message message = ex.getOutMessage();
-        
         CounterRepository cr = bus.getExtension(CounterRepository.class);
-        
+
         if (null == cr) {
             LOG.log(Level.WARNING, "NO_COUNTER_REPOSITORY");
             return;
         } else {
-            Service service = ex.get(Service.class);            
+            ObjectName serviceCountername = this.getServiceCounterName(ex);
+            cr.increaseCounter(serviceCountername, mhtr);
+
+            ObjectName operationCounter = this.getOperationCounterName(ex, serviceCountername);
+            cr.increaseCounter(operationCounter, mhtr);
+        }
+    }
+    
+    protected ObjectName getServiceCounterName(Exchange ex) {
+        Bus bus = ex.get(Bus.class);
+        StringBuilder buffer = new StringBuilder();
+        if (ex.get("org.apache.cxf.management.service.counter.name") != null) {
+            buffer.append((String)ex.get("org.apache.cxf.management.service.counter.name"));
+        } else {
+            Service service = ex.get(Service.class);
             Endpoint endpoint = ex.get(Endpoint.class);
-            
-            String serviceName = "\"" + escapePatternChars(service.getName().toString()) + "\"";            
+
+            String serviceName = "\"" + escapePatternChars(service.getName().toString()) + "\"";
             String portName = "\"" + endpoint.getEndpointInfo().getName().getLocalPart() + "\"";
-            
-            OperationInfo opInfo = ex.get(OperationInfo.class);
-            String operationName = opInfo == null ? null : "\"" + opInfo.getName().getLocalPart() + "\"";
-            
-            if (operationName == null) {
-                Object nameProperty = ex.get("org.apache.cxf.resource.operation.name");
-                if (nameProperty != null) {
-                    operationName = "\"" + escapePatternChars(nameProperty.toString()) + "\"";
-                }
-            }
-            
-            StringBuilder buffer = new StringBuilder();
+
             buffer.append(ManagementConstants.DEFAULT_DOMAIN_NAME + ":");
             buffer.append(ManagementConstants.BUS_ID_PROP + "=" + bus.getId() + ",");
+            Message message = ex.getOutMessage();
             if (isClient(message)) {
-                buffer.append(ManagementConstants.TYPE_PROP + "=" + Counter.PERFORMANCE_COUNTER + ".Client,");
+                buffer.append(ManagementConstants.TYPE_PROP + "=" + Counter.PERFORMANCE_COUNTER
+                              + ".Client,");
             } else {
-                buffer.append(ManagementConstants.TYPE_PROP + "=" + Counter.PERFORMANCE_COUNTER + ".Server,");
+                buffer.append(ManagementConstants.TYPE_PROP + "=" + Counter.PERFORMANCE_COUNTER
+                              + ".Server,");
             }
             buffer.append(ManagementConstants.SERVICE_NAME_PROP + "=" + serviceName + ",");
-           
+
             buffer.append(ManagementConstants.PORT_NAME_PROP + "=" + portName);
-            String serviceCounterName = buffer.toString();
-            
-            try {           
-                ObjectName serviceCounter = 
-                    new ObjectName(serviceCounterName);                
-                cr.increaseCounter(serviceCounter, mhtr);
-                if (operationName != null) {
-                    buffer.append("," + ManagementConstants.OPERATION_NAME_PROP + "=" + operationName);
-                    String operationCounterName = buffer.toString();
-                    ObjectName operationCounter = new ObjectName(operationCounterName);
-                    cr.increaseCounter(operationCounter, mhtr);                
-                }
-            } catch (Exception exception) {
-                LOG.log(Level.WARNING, "CREATE_COUNTER_OBJECTNAME_FAILED", exception);
-            }
         }
+        ObjectName serviceCounterName = null;
+        try {
+            serviceCounterName = new ObjectName(buffer.toString());
+        } catch (MalformedObjectNameException e) {
+            LOG.log(Level.WARNING, "CREATE_COUNTER_OBJECTNAME_FAILED", e);
+        }
+        return serviceCounterName;
+        
     }
+  
+    protected boolean isServiceCounterEnabled(Exchange ex) {
+        Bus bus = ex.get(Bus.class);
+        CounterRepository counterRepo = bus.getExtension(CounterRepository.class);
+        if (counterRepo == null) {
+            return false;
+        }
+        ObjectName serviceCounterName = getServiceCounterName(ex);
+        ResponseTimeCounter serviceCounter = (ResponseTimeCounter)counterRepo.getCounter(serviceCounterName);
+        //If serviceCounter is null, we need to wait ResponseTimeOutInterceptor to create it , hence set to true
+        if (serviceCounter == null || serviceCounter.isEnabled()) {
+            return true;
+        }
+        return false;   
+    }
+    
+    protected ObjectName getOperationCounterName(Exchange ex, ObjectName sericeCounterName) {
+        OperationInfo opInfo = ex.get(OperationInfo.class);
+        String operationName = opInfo == null ? null : "\"" + opInfo.getName().getLocalPart() + "\"";
+
+        if (operationName == null) {
+            Object nameProperty = ex.get("org.apache.cxf.resource.operation.name");
+            if (nameProperty != null) {
+                operationName = "\"" + escapePatternChars(nameProperty.toString()) + "\"";
+            }
+        }
+        StringBuffer buffer = new StringBuffer(sericeCounterName.toString());
+        if (operationName != null) {
+            buffer.append("," + ManagementConstants.OPERATION_NAME_PROP + "=" + operationName);
+        }
+        String operationCounterName = buffer.toString();
+        ObjectName operationCounter = null;
+        try {
+            operationCounter = new ObjectName(operationCounterName);
+            
+        } catch (MalformedObjectNameException e) {
+            LOG.log(Level.WARNING, "CREATE_COUNTER_OBJECTNAME_FAILED", e);
+        }
+        return operationCounter;
         
-    protected String escapePatternChars(String value) {  
+    }
+    
+    
+
+    protected String escapePatternChars(String value) {
         // This can be replaced if really needed with pattern-based matching
         if (value.lastIndexOf(QUESTION_MARK) != -1) {
             value = value.replace(QUESTION_MARK, ESCAPED_QUESTION_MARK);