001    /** 
002     * 
003     * Copyright 2004 Protique Ltd
004     * 
005     * Licensed under the Apache License, Version 2.0 (the "License"); 
006     * you may not use this file except in compliance with the License. 
007     * You may obtain a copy of the License at 
008     * 
009     * http://www.apache.org/licenses/LICENSE-2.0
010     * 
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS, 
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
014     * See the License for the specific language governing permissions and 
015     * limitations under the License. 
016     * 
017     **/
018    package org.activemq.management;
019    
020    import javax.jms.Message;
021    
022    /**
023     * Statistics for a {@link javax.jms.Queue}
024     *
025     * @version $Revision: 1.1.1.1 $
026     */
027    public class JMSQueueStatsImpl extends JMSEndpointStatsImpl implements JMSDestinationStats {
028        protected TimeStatisticImpl sendMessageRateTime;
029    
030        public JMSQueueStatsImpl() {
031            this.sendMessageRateTime = new TimeStatisticImpl("sendMessageRateTime", "Time taken to send a message (publish thoughtput rate)");
032            addStatistic("sendMessageRateTime", sendMessageRateTime);
033        }
034    
035        public JMSQueueStatsImpl(CountStatisticImpl messageCount, CountStatisticImpl pendingMessageCount, CountStatisticImpl expiredMessageCount, TimeStatisticImpl messageWaitTime, TimeStatisticImpl messageRateTime, TimeStatisticImpl sendMessageRateTime) {
036            super(messageCount, pendingMessageCount, expiredMessageCount, messageWaitTime, messageRateTime);
037            this.sendMessageRateTime = sendMessageRateTime;
038            addStatistic("sendMessageRateTime", sendMessageRateTime);
039        }
040    
041        public void setPendingMessageCountOnStartup(long count) {
042            CountStatisticImpl messageCount = (CountStatisticImpl) getPendingMessageCount();
043            messageCount.setCount(count);
044        }
045    
046        public void onMessageSend(Message message) {
047            long start = pendingMessageCount.getLastSampleTime();
048            pendingMessageCount.increment();
049            long end = pendingMessageCount.getLastSampleTime();
050            sendMessageRateTime.addTime(end - start);
051        }
052    
053        public void onMessageAck() {
054            long start = messageCount.getLastSampleTime();
055            messageCount.increment();
056            long end = messageCount.getLastSampleTime();
057            messageRateTime.addTime(end - start);
058        }
059    }