001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. 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.apache.geronimo.management.stats; 019 020 import javax.management.j2ee.statistics.CountStatistic; 021 import javax.management.j2ee.statistics.RangeStatistic; 022 import javax.management.j2ee.statistics.TimeStatistic; 023 024 import org.apache.geronimo.management.geronimo.stats.WebConnectorStats; 025 026 /** 027 * Geronimo implementation of the JSR-77 style WebConnectorStats interface. This 028 * is not required by JSR-77, but provides useful statistics. This will be 029 * discovered by mejb using 'stats' attribute. 030 * 031 * @version $Revision: 503534 $ $Date: 2007-02-04 22:00:28 -0500 (Sun, 04 Feb 2007) $ 032 */ 033 034 public class WebConnectorStatsImpl extends StatsImpl implements WebConnectorStats { 035 private TimeStatisticImpl requestTime; // total, max, count 036 037 private CountStatisticImpl activeRequestCount; 038 039 private CountStatisticImpl errorCount; 040 041 private CountStatisticImpl bytesSentCount; 042 043 private CountStatisticImpl bytesReceivedCount; 044 045 // these come from ThreadPool 046 private RangeStatisticImpl openConnectionCount; 047 048 private CountStatistic busyThreadCount; 049 050 // TODO - change the name to BoundedRangeStatisticsImpl 051 private BoundedRangeStatisticImpl busyThreads; 052 // TODO - spareThreads metrics = current - busy, maxSpareThreads, minSpareThreads 053 054 public WebConnectorStatsImpl() { 055 requestTime = new TimeStatisticImpl("Request Time", StatisticImpl.UNIT_TIME_MILLISECOND, 056 "The time to process all requests"); 057 activeRequestCount = new CountStatisticImpl("Active Request Count", StatisticImpl.UNIT_COUNT, 058 "currently active requests ", 0); 059 errorCount = new CountStatisticImpl("Error Count", StatisticImpl.UNIT_COUNT, 060 "The numbet of Errors during the observed period", 0); 061 bytesSentCount = new CountStatisticImpl("Bytes Sent", StatisticImpl.UNIT_COUNT, 062 "The number of bytes sent during the observerd period", 0); 063 bytesReceivedCount = new CountStatisticImpl("Bytes Received", StatisticImpl.UNIT_COUNT, 064 "The number of bytes received during the observerd period", 0); 065 openConnectionCount = new RangeStatisticImpl("" + "Open Connections", StatisticImpl.UNIT_COUNT, 066 "Range for connections opened during the observed period", 0); // all 0's 067 busyThreads = new BoundedRangeStatisticImpl("Busy Threads", StatisticImpl.UNIT_COUNT, 068 "BoundedRange for Threads currently busy serving requests", 0, 0, 0); 069 addStat("RequestTime", requestTime); // better name 070 addStat("activeRequestCount", activeRequestCount); 071 addStat("errorCount", errorCount); 072 addStat("bytesSent", bytesSentCount); 073 addStat("bytesReceived", bytesReceivedCount); 074 addStat("openConnectionCount", openConnectionCount); 075 addStat("busyThreads", busyThreads); 076 } 077 078 public RangeStatistic getActiveRequestCount() { 079 // TODO 080 return null; 081 } 082 083 public TimeStatistic getRequestTime() { 084 return requestTime; 085 } 086 087 public CountStatistic getErrorCount() { 088 return errorCount; 089 } 090 091 public CountStatistic getBytesSentCount() { 092 return bytesSentCount; 093 } 094 095 public CountStatistic getBytesReceivedCount() { 096 return bytesReceivedCount; 097 } 098 099 public RangeStatistic getOpenConnectionCount() { 100 return openConnectionCount; 101 } 102 103 // TODO - Move this to container statistics 104 public RangeStatistic getSpareThreadCount() { 105 return null; 106 } 107 108 /** 109 * These setters are used by native implementation 110 */ 111 public void setBytesReceivedCount(long bytesReceived) { 112 this.bytesReceivedCount.setCount(bytesReceived); 113 } 114 115 public void setBytesSentCount(long bytesSent) { 116 this.bytesSentCount.setCount(bytesSent); 117 } 118 119 public void setActiveRequestCount(int activeRequestCount) { 120 this.activeRequestCount.setCount(activeRequestCount); 121 } 122 123 public void setErrorCount(int errorCount) { 124 this.errorCount.setCount(errorCount); 125 } 126 127 public void setRequestTime(int count, long minTime, long maxTime, long totalTime) { 128 this.requestTime.setCount(count); 129 this.requestTime.setMinTime(minTime); 130 this.requestTime.setMaxTime(maxTime); 131 this.requestTime.setTotalTime(totalTime); 132 } 133 134 public void setOpenConnection(long current, long highMark, long lowMark) { 135 openConnectionCount.setCurrent(current); 136 openConnectionCount.setHighWaterMark(highMark); 137 openConnectionCount.setLowWaterMark(lowMark); 138 } 139 140 public void setBusyThreads(long current, long highWaterMark, long lowWaterMark, 141 long upperBound, long lowerBound) { 142 busyThreads.setCurrent(current); 143 busyThreads.setHighWaterMark(highWaterMark); 144 busyThreads.setLowWaterMark(lowWaterMark); //0? 145 busyThreads.setLowerBound(lowerBound); //0? 146 busyThreads.setUpperBound(upperBound); // always maxThreads 147 } 148 149 /** 150 * Used to access the native implementation in order to call setters 151 * TODO implement these if needed by console 152 */ 153 public RangeStatisticImpl getActiveRequestCountImpl() { 154 return null; 155 } 156 157 public TimeStatisticImpl getRequestDurationImpl() { 158 return null; 159 } 160 161 public CountStatisticImpl getTotalErrorCountImpl() { 162 return null; 163 } 164 165 public CountStatistic getTotalRequestCountImpl() { 166 return null; 167 } 168 169 }