2 * Copyright (c) 2001-2007 Sun Microsystems, Inc. All rights reserved.
4 * The Sun Project JXTA(TM) Software License
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
9 * 1. Redistributions of source code must retain the above copyright notice,
10 * this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright notice,
13 * this list of conditions and the following disclaimer in the documentation
14 * and/or other materials provided with the distribution.
16 * 3. The end-user documentation included with the redistribution, if any, must
17 * include the following acknowledgment: "This product includes software
18 * developed by Sun Microsystems, Inc. for JXTA(TM) technology."
19 * Alternately, this acknowledgment may appear in the software itself, if
20 * and wherever such third-party acknowledgments normally appear.
22 * 4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA" must
23 * not be used to endorse or promote products derived from this software
24 * without prior written permission. For written permission, please contact
25 * Project JXTA at http://www.jxta.org.
27 * 5. Products derived from this software may not be called "JXTA", nor may
28 * "JXTA" appear in their name, without prior written permission of Sun.
30 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
31 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
32 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SUN
33 * MICROSYSTEMS OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
34 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
35 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
36 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
37 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
38 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
39 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
41 * JXTA is a registered trademark of Sun Microsystems, Inc. in the United
42 * States and other countries.
44 * Please see the license information page at :
45 * <http://www.jxta.org/project/www/license.html> for instructions on use of
46 * the license in source files.
48 * ====================================================================
50 * This software consists of voluntary contributions made by many individuals
51 * on behalf of Project JXTA. For more information on Project JXTA, please see
52 * http://www.jxta.org.
54 * This license is based on the BSD license adopted by the Apache Foundation.
57 package net.jxta.impl.resolver.resolverMeter;
60 import net.jxta.meter.*;
61 import net.jxta.impl.meter.*;
66 * The Service Monitor Metric for the standard Resolver Service
68 public class ResolverServiceMonitor extends GenericServiceMonitor {
69 public static final String UNKNOWN_HANDLER = "--UNKNOWN-HANDLER--";
71 private Hashtable queryHandlerMeters = new Hashtable();
72 private Hashtable srdiHandlerMeters = new Hashtable();
73 private Hashtable destinationMeters = new Hashtable();
74 private Hashtable sourceMeters = new Hashtable();
76 private ResolverMeter resolverMeter = new ResolverMeter(this);
78 private ResolverServiceMetric cumulativeResolverServiceMetric;
81 protected void init() {
82 cumulativeResolverServiceMetric = (ResolverServiceMetric) getCumulativeServiceMetric();
83 cumulativeResolverServiceMetric.setResolverMetric(resolverMeter.getCumulativeMetrics());
86 public ResolverMeter getResolverMeter() {
90 public synchronized QueryHandlerMeter registerQueryHandlerMeter(String handlerName) {
91 QueryHandlerMeter queryHandlerMeter = (QueryHandlerMeter) queryHandlerMeters.get(handlerName);
93 if (queryHandlerMeter == null) {
94 queryHandlerMeter = addQueryHandlerMeter(handlerName, true);
97 queryHandlerMeter.setRegistered(true);
99 return queryHandlerMeter;
102 public synchronized QueryHandlerMeter addQueryHandlerMeter(String handlerName, boolean registered) {
103 QueryHandlerMeter queryHandlerMeter = new QueryHandlerMeter(handlerName, this);
105 queryHandlerMeters.put(handlerName, queryHandlerMeter);
106 cumulativeResolverServiceMetric.addQueryHandlerMetric(queryHandlerMeter.getCumulativeMetrics());
107 queryHandlerMeter.setRegistered(registered);
109 return queryHandlerMeter;
112 public synchronized QueryHandlerMeter unregisterQueryHandlerMeter(String handlerName) {
113 QueryHandlerMeter queryHandlerMeter = getQueryHandlerMeter(handlerName);
115 queryHandlerMeter.setRegistered(false);
117 return queryHandlerMeter;
120 public QueryHandlerMeter getQueryHandlerMeter(String handlerName) {
121 QueryHandlerMeter queryHandlerMeter = (QueryHandlerMeter) queryHandlerMeters.get(handlerName);
123 if (queryHandlerMeter == null) {
124 queryHandlerMeter = addQueryHandlerMeter(handlerName, false);
127 return queryHandlerMeter;
130 public synchronized SrdiHandlerMeter registerSrdiHandlerMeter(String handlerName) {
131 SrdiHandlerMeter srdiHandlerMeter = (SrdiHandlerMeter) srdiHandlerMeters.get(handlerName);
133 if (srdiHandlerMeter == null) {
134 srdiHandlerMeter = addSrdiHandlerMeter(handlerName, true);
137 srdiHandlerMeter.setRegistered(true);
139 return srdiHandlerMeter;
142 public synchronized SrdiHandlerMeter addSrdiHandlerMeter(String handlerName, boolean registered) {
143 SrdiHandlerMeter srdiHandlerMeter = new SrdiHandlerMeter(handlerName);
145 srdiHandlerMeters.put(handlerName, srdiHandlerMeter);
146 cumulativeResolverServiceMetric.addSrdiHandlerMetric(srdiHandlerMeter.getCumulativeMetrics());
147 srdiHandlerMeter.setRegistered(registered);
149 return srdiHandlerMeter;
152 public synchronized SrdiHandlerMeter unregisterSrdiHandlerMeter(String handlerName) {
153 SrdiHandlerMeter srdiHandlerMeter = getSrdiHandlerMeter(handlerName);
155 srdiHandlerMeter.setRegistered(false);
157 return srdiHandlerMeter;
160 public SrdiHandlerMeter getSrdiHandlerMeter(String handlerName) {
161 SrdiHandlerMeter srdiHandlerMeter = (SrdiHandlerMeter) srdiHandlerMeters.get(handlerName);
163 if (srdiHandlerMeter == null) {
164 srdiHandlerMeter = addSrdiHandlerMeter(handlerName, false);
167 return srdiHandlerMeter;
171 protected ServiceMetric collectServiceMetrics() {
172 ResolverServiceMetric resolverServiceMetric = (ResolverServiceMetric) createServiceMetric();
174 boolean anyData = false;
176 for (Enumeration e = queryHandlerMeters.elements(); e.hasMoreElements();) {
177 QueryHandlerMeter queryHandlerMeter = (QueryHandlerMeter) e.nextElement();
178 QueryHandlerMetric queryHandlerMetric = queryHandlerMeter.collectMetrics(); // clears delta from meter
180 if (queryHandlerMetric != null) {
181 resolverServiceMetric.addQueryHandlerMetric(queryHandlerMetric);
186 for (Enumeration e = srdiHandlerMeters.elements(); e.hasMoreElements();) {
187 SrdiHandlerMeter srdiHandlerMeter = (SrdiHandlerMeter) e.nextElement();
188 SrdiHandlerMetric srdiHandlerMetric = srdiHandlerMeter.collectMetrics(); // clears delta from meter
190 if (srdiHandlerMetric != null) {
191 resolverServiceMetric.addSrdiHandlerMetric(srdiHandlerMetric);
196 ResolverMetric resolverMetric = resolverMeter.collectMetrics();
198 if (resolverMetric != null) {
199 resolverServiceMetric.setResolverMetric(resolverMetric);
204 return resolverServiceMetric;
211 public ServiceMetric getServiceMetric(ServiceMonitorFilter serviceMonitorFilter, long fromTime, long toTime, int pulseIndex, long reportRate) {
212 int deltaReportRateIndex = monitorManager.getReportRateIndex(reportRate);
213 ResolverServiceMetric origMetric = (ResolverServiceMetric) deltaServiceMetrics[deltaReportRateIndex];
215 if (origMetric == null) {
219 ResolverServiceMonitorFilter resolverServiceMonitorFilter = (ResolverServiceMonitorFilter) serviceMonitorFilter;
221 return origMetric.shallowCopy(resolverServiceMonitorFilter);
225 public ServiceMetric getCumulativeServiceMetric(ServiceMonitorFilter serviceMonitorFilter, long fromTime, long toTime) {
226 ResolverServiceMonitorFilter resolverServiceMonitorFilter = (ResolverServiceMonitorFilter) serviceMonitorFilter;
227 ResolverServiceMetric origMetric = (ResolverServiceMetric) cumulativeServiceMetric;
229 return origMetric.deepCopy(resolverServiceMonitorFilter);
233 private ResolverServiceMetric copy(ResolverServiceMetric origMetric) {
234 ResolverServiceMetric resolverServiceMetric = new ResolverServiceMetric();
236 for (Iterator i = origMetric.getQueryHandlerMetrics(); i.hasNext(); ) {
237 QueryHandlerMetric queryHandlerMetric = (QueryHandlerMetric)i.next();
238 resolverServiceMetric.addQueryHandlerMetric(queryHandlerMetric);
241 for (Iterator i = origMetric.getSrdiHandlerMetrics(); i.hasNext(); ) {
242 SrdiHandlerMetric srdiHandlerMetric = (SrdiHandlerMetric)i.next();
243 resolverServiceMetric.addSrdiHandlerMetric(srdiHandlerMetric);
246 return resolverServiceMetric;