diff options
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.java | 315 |
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); + } + } +} |