2 * Copyright (c) 2001-2007 Sun Micro//Systems, 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.resolver.*;
61 import net.jxta.util.documentSerializable.*;
62 import net.jxta.document.*;
63 import net.jxta.endpoint.EndpointAddress;
64 import net.jxta.peer.*;
65 import net.jxta.impl.meter.*;
70 public class SrdiHandlerMetric implements DocumentSerializable {
71 private String handlerName;
72 private boolean registered = true;
73 private int numProcessed = 0;
74 private int numErrorsWhileProcessing = 0;
75 private int numToUnregisteredHandler = 0;
77 private long totalProcessTime = 0;
79 private int numMessagesSentViaWalker = 0;
80 private int numMessagesSentViaUnicast = 0;
81 private int numErrorsSendingMessages = 0;
82 private int numErrorsPropagatingMessages = 0;
84 private HashMap destinationMetrics = new HashMap();
86 public SrdiHandlerMetric(String handlerName) {
87 this.handlerName = handlerName;
90 public SrdiHandlerMetric() {}
92 public SrdiHandlerMetric(SrdiHandlerMetric prototype) {
93 this.handlerName = prototype.handlerName;
96 public void setRegistered(boolean registered) {
97 this.registered = registered;
100 public String getHandlerName() {
104 public boolean getRegistered() {
108 public int getNumProcessed() {
112 public int getNumErrorsWhileProcessing() {
113 return numErrorsWhileProcessing;
116 public long getTotalProcessTime() {
117 return totalProcessTime;
120 public int getNumMessagesSentViaWalker() {
121 return numMessagesSentViaWalker;
124 public int getNumMessagesSentViaUnicast() {
125 return numMessagesSentViaUnicast;
128 public int getNumErrorsSendingMessages() {
129 return numErrorsSendingMessages;
132 public int getNumErrorsPropagatingMessages() {
133 return numErrorsPropagatingMessages;
137 public boolean equals(Object obj) {
138 if (obj instanceof SrdiHandlerMetric) {
139 SrdiHandlerMetric otherSrdiHandlerMetric = (SrdiHandlerMetric) obj;
141 return handlerName.equals((otherSrdiHandlerMetric.handlerName));
148 public int hashCode() {
149 return handlerName.hashCode();
152 public void messageProcessed(long processTime) {
154 totalProcessTime += processTime;
157 public void errorWhileProcessing() {
158 numErrorsWhileProcessing++;
161 public void srdiToUnregisteredHandler() {
162 numToUnregisteredHandler++;
165 public void messageSentViaWalker() {
166 numMessagesSentViaWalker++;
169 public void messageSentViaUnicast() {
170 numMessagesSentViaUnicast++;
173 public void errorSendingMessage() {
174 numErrorsSendingMessages++;
177 public void errorPropagatingMessage() {
178 numErrorsPropagatingMessages++;
181 SrdiDestinationMetric getSrdiDestinationMetric(EndpointAddress endpointAddress) {
182 PeerID peerID = MetricUtilities.getPeerIdFromEndpointAddress(endpointAddress);
184 return getSrdiDestinationMetric(peerID);
187 SrdiDestinationMetric getSrdiDestinationMetric(PeerID peerID) {
189 SrdiDestinationMetric destinationMetric = (SrdiDestinationMetric) destinationMetrics.get(peerID);
191 if (destinationMetric == null) {
192 destinationMetric = new SrdiDestinationMetric(peerID);
193 destinationMetrics.put(peerID, destinationMetric);
195 return destinationMetric;
198 public Iterator getDestinationMetrics() {
200 return destinationMetrics.values().iterator();
203 public void addSrdiDestinationMetric(SrdiDestinationMetric srdiDestinationMetric) {
204 destinationMetrics.put(srdiDestinationMetric.getPeerID(), srdiDestinationMetric);
207 public void serializeTo(Element element) throws DocumentSerializationException {
208 if (handlerName != null) {
209 DocumentSerializableUtilities.addString(element, "handlerName", handlerName);
211 DocumentSerializableUtilities.addBoolean(element, "registered", registered);
212 if (numProcessed != 0) {
213 DocumentSerializableUtilities.addInt(element, "numProcessed", numProcessed);
215 if (numErrorsWhileProcessing != 0) {
216 DocumentSerializableUtilities.addInt(element, "numErrorsWhileProcessing", numErrorsWhileProcessing);
218 if (numToUnregisteredHandler != 0) {
219 DocumentSerializableUtilities.addInt(element, "numToUnregisteredHandler", numToUnregisteredHandler);
221 if (totalProcessTime != 0) {
222 DocumentSerializableUtilities.addLong(element, "totalProcessTime", totalProcessTime);
224 if (numMessagesSentViaWalker != 0) {
225 DocumentSerializableUtilities.addInt(element, "numMessagesSentViaWalker", numMessagesSentViaWalker);
227 if (numMessagesSentViaUnicast != 0) {
228 DocumentSerializableUtilities.addInt(element, "numMessagesSentViaUnicast", numMessagesSentViaUnicast);
230 if (numErrorsSendingMessages != 0) {
231 DocumentSerializableUtilities.addInt(element, "numErrorsSendingMessages", numErrorsSendingMessages);
233 if (numErrorsPropagatingMessages != 0) {
234 DocumentSerializableUtilities.addInt(element, "numErrorsPropagatingMessages", numErrorsPropagatingMessages);
237 for (Iterator i = destinationMetrics.values().iterator(); i.hasNext();) {
238 Element srdiDestinationElement = DocumentSerializableUtilities.createChildElement(element, "destination");
239 SrdiDestinationMetric srdiDestinationMetric = (SrdiDestinationMetric) i.next();
241 srdiDestinationMetric.serializeTo(srdiDestinationElement);
245 public void initializeFrom(Element element) throws DocumentSerializationException {
246 for (Enumeration e = element.getChildren(); e.hasMoreElements();) {
247 Element childElement = (TextElement) e.nextElement();
248 String tagName = (String) childElement.getKey();
250 if (tagName.equals("handlerName")) {
251 handlerName = DocumentSerializableUtilities.getString(childElement);
252 } else if (tagName.equals("registered")) {
253 registered = DocumentSerializableUtilities.getBoolean(childElement);
254 } else if (tagName.equals("numProcessed")) {
255 numProcessed = DocumentSerializableUtilities.getInt(childElement);
256 } else if (tagName.equals("numErrorsWhileProcessing")) {
257 numErrorsWhileProcessing = DocumentSerializableUtilities.getInt(childElement);
258 } else if (tagName.equals("numToUnregisteredHandler")) {
259 numToUnregisteredHandler = DocumentSerializableUtilities.getInt(childElement);
260 } else if (tagName.equals("totalProcessTime")) {
261 totalProcessTime = DocumentSerializableUtilities.getLong(childElement);
262 } else if (tagName.equals("numMessagesSentViaWalker")) {
263 numMessagesSentViaWalker = DocumentSerializableUtilities.getInt(childElement);
264 } else if (tagName.equals("numMessagesSentViaUnicast")) {
265 numMessagesSentViaUnicast = DocumentSerializableUtilities.getInt(childElement);
266 } else if (tagName.equals("numErrorsSendingMessages")) {
267 numErrorsSendingMessages = DocumentSerializableUtilities.getInt(childElement);
268 } else if (tagName.equals("numErrorsPropagatingMessages")) {
269 numErrorsPropagatingMessages = DocumentSerializableUtilities.getInt(childElement);
270 } else if (tagName.equals("destination")) {
271 SrdiDestinationMetric srdiDestinationMetric = new SrdiDestinationMetric();
273 srdiDestinationMetric.initializeFrom(childElement);
274 addSrdiDestinationMetric(srdiDestinationMetric);
279 public void mergeMetrics(SrdiHandlerMetric otherSrdiHandlerMetric) {
280 numProcessed += otherSrdiHandlerMetric.numProcessed;
281 numErrorsWhileProcessing += otherSrdiHandlerMetric.numErrorsWhileProcessing;
282 totalProcessTime += otherSrdiHandlerMetric.totalProcessTime;
283 numMessagesSentViaWalker += otherSrdiHandlerMetric.numMessagesSentViaWalker;
284 numMessagesSentViaUnicast += otherSrdiHandlerMetric.numMessagesSentViaUnicast;
285 numErrorsSendingMessages += otherSrdiHandlerMetric.numErrorsSendingMessages;
286 numErrorsPropagatingMessages += otherSrdiHandlerMetric.numErrorsPropagatingMessages;
287 for (Iterator i = otherSrdiHandlerMetric.getDestinationMetrics(); i.hasNext();) {
288 SrdiDestinationMetric otherSrdiDestinationMetric = (SrdiDestinationMetric) i.next();
289 SrdiDestinationMetric ourSrdiDestinationMetric = getSrdiDestinationMetric(otherSrdiDestinationMetric.getPeerID());
291 if (ourSrdiDestinationMetric == null) {
292 ourSrdiDestinationMetric = new SrdiDestinationMetric(otherSrdiDestinationMetric);
293 addSrdiDestinationMetric(ourSrdiDestinationMetric);
296 ourSrdiDestinationMetric.mergeMetrics(otherSrdiDestinationMetric);