| /** |
| * 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.activemq.management; |
| |
| import java.util.List; |
| |
| import org.apache.activemq.ActiveMQMessageConsumer; |
| import org.apache.activemq.ActiveMQMessageProducer; |
| import org.apache.activemq.util.IndentPrinter; |
| |
| /** |
| * Statistics for a JMS session |
| * |
| * |
| */ |
| public class JMSSessionStatsImpl extends StatsImpl { |
| private List producers; |
| private List consumers; |
| private CountStatisticImpl messageCount; |
| private CountStatisticImpl pendingMessageCount; |
| private CountStatisticImpl expiredMessageCount; |
| private TimeStatisticImpl messageWaitTime; |
| private CountStatisticImpl durableSubscriptionCount; |
| |
| private TimeStatisticImpl messageRateTime; |
| |
| public JMSSessionStatsImpl(List producers, List consumers) { |
| this.producers = producers; |
| this.consumers = consumers; |
| this.messageCount = new CountStatisticImpl("messageCount", "Number of messages exchanged"); |
| this.pendingMessageCount = new CountStatisticImpl("pendingMessageCount", "Number of pending messages"); |
| this.expiredMessageCount = new CountStatisticImpl("expiredMessageCount", "Number of expired messages"); |
| this.messageWaitTime = new TimeStatisticImpl("messageWaitTime", |
| "Time spent by a message before being delivered"); |
| this.durableSubscriptionCount = new CountStatisticImpl("durableSubscriptionCount", |
| "The number of durable subscriptions"); |
| this.messageWaitTime = new TimeStatisticImpl("messageWaitTime", |
| "Time spent by a message before being delivered"); |
| this.messageRateTime = new TimeStatisticImpl("messageRateTime", |
| "Time taken to process a message (thoughtput rate)"); |
| |
| // lets add named stats |
| addStatistic("messageCount", messageCount); |
| addStatistic("pendingMessageCount", pendingMessageCount); |
| addStatistic("expiredMessageCount", expiredMessageCount); |
| addStatistic("messageWaitTime", messageWaitTime); |
| addStatistic("durableSubscriptionCount", durableSubscriptionCount); |
| addStatistic("messageRateTime", messageRateTime); |
| } |
| |
| public JMSProducerStatsImpl[] getProducers() { |
| // lets make a snapshot before we process them |
| Object[] producerArray = producers.toArray(); |
| int size = producerArray.length; |
| JMSProducerStatsImpl[] answer = new JMSProducerStatsImpl[size]; |
| for (int i = 0; i < size; i++) { |
| ActiveMQMessageProducer producer = (ActiveMQMessageProducer)producerArray[i]; |
| answer[i] = producer.getProducerStats(); |
| } |
| return answer; |
| } |
| |
| public JMSConsumerStatsImpl[] getConsumers() { |
| // lets make a snapshot before we process them |
| Object[] consumerArray = consumers.toArray(); |
| int size = consumerArray.length; |
| JMSConsumerStatsImpl[] answer = new JMSConsumerStatsImpl[size]; |
| for (int i = 0; i < size; i++) { |
| ActiveMQMessageConsumer consumer = (ActiveMQMessageConsumer)consumerArray[i]; |
| answer[i] = consumer.getConsumerStats(); |
| } |
| return answer; |
| } |
| |
| public void reset() { |
| super.reset(); |
| JMSConsumerStatsImpl[] cstats = getConsumers(); |
| int size = cstats.length; |
| for (int i = 0; i < size; i++) { |
| cstats[i].reset(); |
| } |
| JMSProducerStatsImpl[] pstats = getProducers(); |
| size = pstats.length; |
| for (int i = 0; i < size; i++) { |
| pstats[i].reset(); |
| } |
| } |
| |
| /** |
| * @param enabled the enabled to set |
| */ |
| public void setEnabled(boolean enabled) { |
| super.setEnabled(enabled); |
| JMSConsumerStatsImpl[] cstats = getConsumers(); |
| int size = cstats.length; |
| for (int i = 0; i < size; i++) { |
| cstats[i].setEnabled(enabled); |
| } |
| JMSProducerStatsImpl[] pstats = getProducers(); |
| size = pstats.length; |
| for (int i = 0; i < size; i++) { |
| pstats[i].setEnabled(enabled); |
| } |
| |
| } |
| |
| public CountStatisticImpl getMessageCount() { |
| return messageCount; |
| } |
| |
| public CountStatisticImpl getPendingMessageCount() { |
| return pendingMessageCount; |
| } |
| |
| public CountStatisticImpl getExpiredMessageCount() { |
| return expiredMessageCount; |
| } |
| |
| public TimeStatisticImpl getMessageWaitTime() { |
| return messageWaitTime; |
| } |
| |
| public CountStatisticImpl getDurableSubscriptionCount() { |
| return durableSubscriptionCount; |
| } |
| |
| public TimeStatisticImpl getMessageRateTime() { |
| return messageRateTime; |
| } |
| |
| public String toString() { |
| StringBuffer buffer = new StringBuffer(" "); |
| buffer.append(messageCount); |
| buffer.append(" "); |
| buffer.append(messageRateTime); |
| buffer.append(" "); |
| buffer.append(pendingMessageCount); |
| buffer.append(" "); |
| buffer.append(expiredMessageCount); |
| buffer.append(" "); |
| buffer.append(messageWaitTime); |
| buffer.append(" "); |
| buffer.append(durableSubscriptionCount); |
| |
| buffer.append(" producers{ "); |
| JMSProducerStatsImpl[] producerArray = getProducers(); |
| for (int i = 0; i < producerArray.length; i++) { |
| if (i > 0) { |
| buffer.append(", "); |
| } |
| buffer.append(Integer.toString(i)); |
| buffer.append(" = "); |
| buffer.append(producerArray[i]); |
| } |
| buffer.append(" } consumers{ "); |
| JMSConsumerStatsImpl[] consumerArray = getConsumers(); |
| for (int i = 0; i < consumerArray.length; i++) { |
| if (i > 0) { |
| buffer.append(", "); |
| } |
| buffer.append(Integer.toString(i)); |
| buffer.append(" = "); |
| buffer.append(consumerArray[i]); |
| } |
| buffer.append(" }"); |
| return buffer.toString(); |
| } |
| |
| public void dump(IndentPrinter out) { |
| out.printIndent(); |
| out.println(messageCount); |
| out.printIndent(); |
| out.println(messageRateTime); |
| out.printIndent(); |
| out.println(pendingMessageCount); |
| out.printIndent(); |
| out.println(expiredMessageCount); |
| out.printIndent(); |
| out.println(messageWaitTime); |
| out.printIndent(); |
| out.println(durableSubscriptionCount); |
| out.println(); |
| |
| out.printIndent(); |
| out.println("producers {"); |
| out.incrementIndent(); |
| JMSProducerStatsImpl[] producerArray = getProducers(); |
| for (int i = 0; i < producerArray.length; i++) { |
| JMSProducerStatsImpl producer = (JMSProducerStatsImpl)producerArray[i]; |
| producer.dump(out); |
| } |
| out.decrementIndent(); |
| out.printIndent(); |
| out.println("}"); |
| |
| out.printIndent(); |
| out.println("consumers {"); |
| out.incrementIndent(); |
| JMSConsumerStatsImpl[] consumerArray = getConsumers(); |
| for (int i = 0; i < consumerArray.length; i++) { |
| JMSConsumerStatsImpl consumer = (JMSConsumerStatsImpl)consumerArray[i]; |
| consumer.dump(out); |
| } |
| out.decrementIndent(); |
| out.printIndent(); |
| out.println("}"); |
| } |
| |
| public void onCreateDurableSubscriber() { |
| durableSubscriptionCount.increment(); |
| } |
| |
| public void onRemoveDurableSubscriber() { |
| durableSubscriptionCount.decrement(); |
| } |
| } |