summaryrefslogtreecommitdiffstats
path: root/branches/sca-java-1.x/modules/binding-ws-axis2-jms/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/transport/base/MetricsCollector.java
diff options
context:
space:
mode:
Diffstat (limited to 'branches/sca-java-1.x/modules/binding-ws-axis2-jms/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/transport/base/MetricsCollector.java')
-rw-r--r--branches/sca-java-1.x/modules/binding-ws-axis2-jms/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/transport/base/MetricsCollector.java315
1 files changed, 315 insertions, 0 deletions
diff --git a/branches/sca-java-1.x/modules/binding-ws-axis2-jms/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/transport/base/MetricsCollector.java b/branches/sca-java-1.x/modules/binding-ws-axis2-jms/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/transport/base/MetricsCollector.java
new file mode 100644
index 0000000000..45dcde944c
--- /dev/null
+++ b/branches/sca-java-1.x/modules/binding-ws-axis2-jms/src/main/java/org/apache/tuscany/sca/binding/ws/axis2/transport/base/MetricsCollector.java
@@ -0,0 +1,315 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.binding.ws.axis2.transport.base;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.axis2.context.MessageContext;
+
+/**
+ * Collects metrics related to a transport that has metrics support enabled
+ */
+public class MetricsCollector {
+
+ public static final int LEVEL_NONE = 0;
+ public static final int LEVEL_TRANSPORT = 1;
+ public static final int LEVEL_FULL = 2;
+ private static final Long ONE = (long) 1;
+
+ /** By default, full metrics collection is enabled */
+ private int level = LEVEL_FULL;
+
+ private long messagesReceived;
+ private long faultsReceiving;
+ private long timeoutsReceiving;
+ private long bytesReceived;
+ private long minSizeReceived;
+ private long maxSizeReceived;
+ private double avgSizeReceived;
+
+ private long messagesSent;
+ private long faultsSending;
+ private long timeoutsSending;
+ private long bytesSent;
+ private long minSizeSent;
+ private long maxSizeSent;
+ private double avgSizeSent;
+
+ private final Map<Integer, Long> responseCodeTable =
+ Collections.synchronizedMap(new HashMap<Integer, Long>());
+
+ private long lastResetTime = System.currentTimeMillis();
+
+ public void reset() {
+ messagesReceived = 0;
+ faultsReceiving = 0;
+ timeoutsReceiving = 0;
+ bytesReceived = 0;
+ minSizeReceived = 0;
+ maxSizeReceived = 0;
+ avgSizeReceived = 0;
+
+ messagesSent = 0;
+ faultsSending = 0;
+ timeoutsSending = 0;
+ bytesSent = 0;
+ minSizeSent = 0;
+ maxSizeSent = 0;
+ avgSizeSent = 0;
+
+ responseCodeTable.clear();
+ lastResetTime = System.currentTimeMillis();
+ }
+
+ public int getLevel() {
+ return level;
+ }
+
+ public void setLevel(int level) {
+ this.level = level;
+ }
+
+ public long getLastResetTime() {
+ return lastResetTime;
+ }
+
+ public long getMessagesReceived() {
+ return messagesReceived;
+ }
+
+ public long getFaultsReceiving() {
+ return faultsReceiving;
+ }
+
+ public long getTimeoutsReceiving() {
+ return timeoutsReceiving;
+ }
+
+ public long getBytesReceived() {
+ return bytesReceived;
+ }
+
+ public long getMessagesSent() {
+ return messagesSent;
+ }
+
+ public long getFaultsSending() {
+ return faultsSending;
+ }
+
+ public long getTimeoutsSending() {
+ return timeoutsSending;
+ }
+
+ public long getBytesSent() {
+ return bytesSent;
+ }
+
+ public long getMinSizeReceived() {
+ return minSizeReceived;
+ }
+
+ public long getMaxSizeReceived() {
+ return maxSizeReceived;
+ }
+
+ public long getMinSizeSent() {
+ return minSizeSent;
+ }
+
+ public long getMaxSizeSent() {
+ return maxSizeSent;
+ }
+
+ public double getAvgSizeReceived() {
+ return avgSizeReceived;
+ }
+
+ public double getAvgSizeSent() {
+ return avgSizeSent;
+ }
+
+ public Map<Integer, Long> getResponseCodeTable() {
+ return responseCodeTable;
+ }
+
+ public synchronized void incrementMessagesReceived() {
+ messagesReceived++;
+ }
+
+ public synchronized void incrementFaultsReceiving() {
+ faultsReceiving++;
+ }
+
+ public synchronized void incrementTimeoutsReceiving() {
+ timeoutsReceiving++;
+ }
+
+ public synchronized void incrementBytesReceived(long size) {
+ bytesReceived += size;
+ }
+
+ public synchronized void incrementMessagesSent() {
+ messagesSent++;
+ }
+
+ public synchronized void incrementFaultsSending() {
+ faultsSending++;
+ }
+
+ public synchronized void incrementTimeoutsSending() {
+ timeoutsSending++;
+ }
+
+ public synchronized void incrementBytesSent(long size) {
+ bytesSent += size;
+ }
+
+ public synchronized void notifyReceivedMessageSize(long size) {
+ if (minSizeReceived == 0 || size < minSizeReceived) {
+ minSizeReceived = size;
+ }
+ if (size > maxSizeReceived) {
+ maxSizeReceived = size;
+ }
+ avgSizeReceived = (avgSizeReceived == 0 ? size : (avgSizeReceived + size) / 2);
+ }
+
+ public synchronized void notifySentMessageSize(long size) {
+ if (minSizeSent == 0 || size < minSizeSent) {
+ minSizeSent = size;
+ }
+ if (size > maxSizeSent) {
+ maxSizeSent = size;
+ }
+ avgSizeSent = (avgSizeSent == 0 ? size : (avgSizeSent + size) / 2);
+ }
+
+ public void reportResponseCode(int respCode) {
+ synchronized(responseCodeTable) {
+ Object o = responseCodeTable.get(respCode);
+ if (o == null) {
+ responseCodeTable.put(respCode, ONE);
+ } else {
+ responseCodeTable.put(respCode, (Long) o + 1);
+ }
+ }
+ }
+
+ // --- enhanced methods ---
+ private MessageLevelMetricsCollector getMsgLevelMetrics(MessageContext mc) {
+ if (mc != null && level == LEVEL_FULL) {
+ return (MessageLevelMetricsCollector) mc.getProperty(BaseConstants.METRICS_COLLECTOR);
+ }
+ return null;
+ }
+
+ public void incrementMessagesReceived(MessageContext mc) {
+ incrementMessagesReceived();
+ MessageLevelMetricsCollector m = getMsgLevelMetrics(mc);
+ if (m != null) {
+ m.incrementMessagesReceived();
+ }
+ }
+
+ public void incrementFaultsReceiving(int errorCode, MessageContext mc) {
+ incrementFaultsReceiving();
+ MessageLevelMetricsCollector m = getMsgLevelMetrics(mc);
+ if (m != null) {
+ m.incrementFaultsReceiving(errorCode);
+ }
+ }
+
+ public void incrementTimeoutsReceiving(MessageContext mc) {
+ incrementTimeoutsReceiving();
+ MessageLevelMetricsCollector m = getMsgLevelMetrics(mc);
+ if (m != null) {
+ m.incrementTimeoutsReceiving();
+ }
+ }
+
+ public void incrementBytesReceived(MessageContext mc, long size) {
+ incrementBytesReceived(size);
+ MessageLevelMetricsCollector m = getMsgLevelMetrics(mc);
+ if (m != null) {
+ m.incrementBytesReceived(size);
+ }
+ }
+
+ public void incrementMessagesSent(MessageContext mc) {
+ incrementMessagesSent();
+ MessageLevelMetricsCollector m = getMsgLevelMetrics(mc);
+ if (m != null) {
+ m.incrementMessagesSent();
+ }
+ }
+
+ public void incrementFaultsSending(int errorCode, MessageContext mc) {
+ incrementFaultsSending();
+ MessageLevelMetricsCollector m = getMsgLevelMetrics(mc);
+ if (m != null) {
+ m.incrementFaultsSending(errorCode);
+ }
+ }
+
+ public void incrementTimeoutsSending(MessageContext mc) {
+ incrementTimeoutsSending();
+ MessageLevelMetricsCollector m = getMsgLevelMetrics(mc);
+ if (m != null) {
+ m.incrementTimeoutsSending();
+ }
+ }
+
+ public void incrementBytesSent(MessageContext mc, long size) {
+ incrementBytesSent(size);
+ MessageLevelMetricsCollector m = getMsgLevelMetrics(mc);
+ if (m != null) {
+ m.incrementBytesSent(size);
+ }
+ }
+
+ public void notifyReceivedMessageSize(MessageContext mc, long size) {
+ notifyReceivedMessageSize(size);
+
+ MessageLevelMetricsCollector m = getMsgLevelMetrics(mc);
+ if (m != null) {
+ m.notifyReceivedMessageSize(size);
+ }
+ }
+
+ public void notifySentMessageSize(MessageContext mc, long size) {
+ notifySentMessageSize(size);
+
+ MessageLevelMetricsCollector m = getMsgLevelMetrics(mc);
+ if (m != null) {
+ m.notifySentMessageSize(size);
+ }
+ }
+
+ public void reportResponseCode(MessageContext mc, int respCode) {
+ reportResponseCode(respCode);
+
+ MessageLevelMetricsCollector m = getMsgLevelMetrics(mc);
+ if (m != null) {
+ m.reportResponseCode(respCode);
+ }
+ }
+}