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.rendezvous.rendezvousMeter;
60 import net.jxta.endpoint.EndpointAddress;
61 import net.jxta.impl.meter.GenericServiceMonitor;
62 import net.jxta.impl.meter.MetricUtilities;
63 import net.jxta.meter.ServiceMetric;
64 import net.jxta.meter.ServiceMonitorFilter;
65 import net.jxta.peer.PeerID;
67 import java.util.Enumeration;
68 import java.util.Hashtable;
69 import java.util.LinkedList;
73 * The Service Monitor for the standard Rendezvous Service
75 public class RendezvousServiceMonitor extends GenericServiceMonitor {
76 private Hashtable<PeerID, ClientConnectionMeter> clientConnectionMeters = new Hashtable<PeerID, ClientConnectionMeter>();
77 private LinkedList<RendezvousConnectionMeter> rendezvousConnectionMeters = new LinkedList<RendezvousConnectionMeter>();
79 private RendezvousMeter rendezvousMeter = new RendezvousMeter();
81 private RendezvousServiceMetric cumulativeRendezvousServiceMetric;
87 protected void init() {
88 cumulativeRendezvousServiceMetric = (RendezvousServiceMetric) getCumulativeServiceMetric();
89 cumulativeRendezvousServiceMetric.setRendezvousMetric(rendezvousMeter.getCumulativeMetrics());
93 * Get the General RendezvousMeter
94 * @return client RendezvousMeter
96 public RendezvousMeter getRendezvousMeter() {
97 return rendezvousMeter;
101 * Get a Client Connection Meter
103 * @param endpointAddress containing Peer Id for the Meter
104 * @return client connection meter
106 public synchronized ClientConnectionMeter getClientConnectionMeter(EndpointAddress endpointAddress) {
107 PeerID peerID = MetricUtilities.getPeerIdFromEndpointAddress(endpointAddress);
109 return getClientConnectionMeter(peerID);
113 * Get a Client Connection Meter
115 * @param peerId Peer Id for the Meter
116 * @return client connection meter
118 public synchronized ClientConnectionMeter getClientConnectionMeter(PeerID peerId) {
119 ClientConnectionMeter clientConnectionMeter = clientConnectionMeters.get(peerId);
121 if (clientConnectionMeter == null) {
122 clientConnectionMeter = new ClientConnectionMeter(peerId);
123 clientConnectionMeters.put(peerId, clientConnectionMeter);
124 cumulativeRendezvousServiceMetric.addClientConnectionMetric(clientConnectionMeter.getCumulativeMetrics());
127 return clientConnectionMeter;
131 * Get a Client Connection Meter
133 * @param peerIdString Peer Id as a String
134 * @return client connection meter
136 public synchronized ClientConnectionMeter getClientConnectionMeter(String peerIdString) {
137 PeerID peerID = MetricUtilities.getPeerIdFromString(peerIdString);
139 return getClientConnectionMeter(peerID);
143 public synchronized void removeClientConnectionMeter(String peerId) {
144 clientConnectionMeters.remove(peerId);
149 * Get a Rendezvous Connection Meter
151 * @param peerIdStr Peer Id for the Meter as a String
152 * @return the Rendezvous Connection Meter
154 public synchronized RendezvousConnectionMeter getRendezvousConnectionMeter(String peerIdStr) {
155 PeerID peerID = MetricUtilities.getPeerIdFromString(peerIdStr);
157 return getRendezvousConnectionMeter(peerID);
161 * Get a Rendezvous Connection Meter
163 * @param peerID Peer Id for the Meter
164 * @return the Rendezvous Connection Meter
166 public synchronized RendezvousConnectionMeter getRendezvousConnectionMeter(PeerID peerID) {
167 if (peerID == null) {
168 peerID = MetricUtilities.BAD_PEERID;
171 for (Object rendezvousConnectionMeter1 : rendezvousConnectionMeters) {
172 RendezvousConnectionMeter rendezvousConnectionMeter = (RendezvousConnectionMeter) rendezvousConnectionMeter1;
174 if (peerID.equals(rendezvousConnectionMeter.getPeerID())) {
175 return rendezvousConnectionMeter;
179 RendezvousConnectionMeter rendezvousConnectionMeter = new RendezvousConnectionMeter(peerID);
181 rendezvousConnectionMeters.add(rendezvousConnectionMeter);
182 cumulativeRendezvousServiceMetric.addRendezvousConnectionMetric(rendezvousConnectionMeter.getCumulativeMetrics());
184 return rendezvousConnectionMeter;
188 public synchronized void removeRendezvousConnectionMeter(PeerID peerID) {
192 for (Iterator i = rendezvousConnectionMeters.iterator(); i.hasNext(); ) {
193 RendezvousConnectionMeter rendezvousConnectionMeter = (RendezvousConnectionMeter)i.next();
194 if (peerID.equals(rendezvousConnectionMeter.getPeerID())) {
206 protected synchronized ServiceMetric collectServiceMetrics() {
207 RendezvousServiceMetric rendezvousServiceMetric = (RendezvousServiceMetric) createServiceMetric();
209 boolean anyData = false;
211 for (Enumeration<ClientConnectionMeter> e = clientConnectionMeters.elements(); e.hasMoreElements();) {
212 ClientConnectionMeter clientConnectionMeter = e.nextElement();
213 ClientConnectionMetric clientConnectionMetric = clientConnectionMeter.collectMetrics(); // clears delta from meter
215 if (clientConnectionMetric != null) {
216 rendezvousServiceMetric.addClientConnectionMetric(clientConnectionMetric);
221 for (RendezvousConnectionMeter rendezvousConnectionMeter : rendezvousConnectionMeters) {
222 RendezvousConnectionMetric rendezvousConnectionMetric = rendezvousConnectionMeter.collectMetrics(); // clears delta from meter
224 if (rendezvousConnectionMetric != null) {
225 rendezvousServiceMetric.addRendezvousConnectionMetric(rendezvousConnectionMetric);
230 RendezvousMetric rendezvousMetric = rendezvousMeter.collectMetrics();
232 if (rendezvousMetric != null) {
233 rendezvousServiceMetric.setRendezvousMetric(rendezvousMetric);
238 return rendezvousServiceMetric;
248 public ServiceMetric getServiceMetric(ServiceMonitorFilter serviceMonitorFilter, long fromTime, long toTime, int pulseIndex, long reportRate) {
249 int deltaReportRateIndex = monitorManager.getReportRateIndex(reportRate);
250 RendezvousServiceMetric origMetric = (RendezvousServiceMetric) deltaServiceMetrics[deltaReportRateIndex];
252 if (origMetric == null) {
256 RendezvousServiceMonitorFilter rendezvousServiceMonitorFilter = (RendezvousServiceMonitorFilter) serviceMonitorFilter;
258 return origMetric.shallowCopy(rendezvousServiceMonitorFilter);
265 public ServiceMetric getCumulativeServiceMetric(ServiceMonitorFilter serviceMonitorFilter, long fromTime, long toTime) {
266 RendezvousServiceMonitorFilter rendezvousServiceMonitorFilter = (RendezvousServiceMonitorFilter) serviceMonitorFilter;
267 RendezvousServiceMetric origMetric = (RendezvousServiceMetric) getCumulativeServiceMetric();
269 return origMetric.deepCopy(rendezvousServiceMonitorFilter);