]> sjero.net Git - linphone/blob - p2pproxy/dependencies-src/jxse-src-2.5/impl/src/net/jxta/impl/rendezvous/rendezvousMeter/RendezvousServiceMonitor.java
07e2cc93fd4b9f4e2d182b8097c0fe8ace3f3d89
[linphone] / p2pproxy / dependencies-src / jxse-src-2.5 / impl / src / net / jxta / impl / rendezvous / rendezvousMeter / RendezvousServiceMonitor.java
1 /*
2  * Copyright (c) 2001-2007 Sun Microsystems, Inc.  All rights reserved.
3  *  
4  *  The Sun Project JXTA(TM) Software License
5  *  
6  *  Redistribution and use in source and binary forms, with or without 
7  *  modification, are permitted provided that the following conditions are met:
8  *  
9  *  1. Redistributions of source code must retain the above copyright notice,
10  *     this list of conditions and the following disclaimer.
11  *  
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.
15  *  
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.
21  *  
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.
26  *  
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.
29  *  
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.
40  *  
41  *  JXTA is a registered trademark of Sun Microsystems, Inc. in the United 
42  *  States and other countries.
43  *  
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.
47  *  
48  *  ====================================================================
49  *  
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.
53  *  
54  *  This license is based on the BSD license adopted by the Apache Foundation. 
55  */
56
57 package net.jxta.impl.rendezvous.rendezvousMeter;
58
59
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;
66
67 import java.util.Enumeration;
68 import java.util.Hashtable;
69 import java.util.LinkedList;
70
71
72 /**
73  * The Service Monitor for the standard Rendezvous Service
74  */
75 public class RendezvousServiceMonitor extends GenericServiceMonitor {
76     private Hashtable<PeerID, ClientConnectionMeter> clientConnectionMeters = new Hashtable<PeerID, ClientConnectionMeter>();
77     private LinkedList<RendezvousConnectionMeter> rendezvousConnectionMeters = new LinkedList<RendezvousConnectionMeter>();
78
79     private RendezvousMeter rendezvousMeter = new RendezvousMeter();
80
81     private RendezvousServiceMetric cumulativeRendezvousServiceMetric;
82
83     /**
84      * {@inheritDoc}
85      */
86     @Override
87     protected void init() {
88         cumulativeRendezvousServiceMetric = (RendezvousServiceMetric) getCumulativeServiceMetric();
89         cumulativeRendezvousServiceMetric.setRendezvousMetric(rendezvousMeter.getCumulativeMetrics());
90     }
91
92     /**
93      * Get the General RendezvousMeter
94      * @return client RendezvousMeter
95      */
96     public RendezvousMeter getRendezvousMeter() {
97         return rendezvousMeter;
98     }
99
100     /**
101      * Get a Client Connection Meter
102      *
103      * @param endpointAddress containing Peer Id for the Meter
104      * @return client connection meter
105      */
106     public synchronized ClientConnectionMeter getClientConnectionMeter(EndpointAddress endpointAddress) {
107         PeerID peerID = MetricUtilities.getPeerIdFromEndpointAddress(endpointAddress);
108
109         return getClientConnectionMeter(peerID);
110     }
111
112     /**
113      * Get a Client Connection Meter
114      *
115      * @param peerId Peer Id for the Meter
116      * @return client connection meter
117      */
118     public synchronized ClientConnectionMeter getClientConnectionMeter(PeerID peerId) {
119         ClientConnectionMeter clientConnectionMeter = clientConnectionMeters.get(peerId);
120
121         if (clientConnectionMeter == null) {
122             clientConnectionMeter = new ClientConnectionMeter(peerId);
123             clientConnectionMeters.put(peerId, clientConnectionMeter);
124             cumulativeRendezvousServiceMetric.addClientConnectionMetric(clientConnectionMeter.getCumulativeMetrics());
125         }
126
127         return clientConnectionMeter;
128     }
129
130     /**
131      * Get a Client Connection Meter
132      *
133      * @param peerIdString Peer Id as a String
134      * @return client connection meter
135      */
136     public synchronized ClientConnectionMeter getClientConnectionMeter(String peerIdString) {
137         PeerID peerID = MetricUtilities.getPeerIdFromString(peerIdString);
138
139         return getClientConnectionMeter(peerID);
140     }
141
142     /*
143      public synchronized void removeClientConnectionMeter(String peerId) {
144      clientConnectionMeters.remove(peerId);
145      }
146      */
147
148     /**
149      * Get a Rendezvous Connection Meter
150      *
151      * @param peerIdStr Peer Id for the Meter as a String
152      * @return  the Rendezvous Connection Meter
153      */
154     public synchronized RendezvousConnectionMeter getRendezvousConnectionMeter(String peerIdStr) {
155         PeerID peerID = MetricUtilities.getPeerIdFromString(peerIdStr);
156
157         return getRendezvousConnectionMeter(peerID);
158     }
159
160     /**
161      * Get a Rendezvous Connection Meter
162      *
163      * @param peerID Peer Id for the Meter
164      * @return  the Rendezvous Connection Meter
165      */
166     public synchronized RendezvousConnectionMeter getRendezvousConnectionMeter(PeerID peerID) {
167         if (peerID == null) {
168             peerID = MetricUtilities.BAD_PEERID;
169         }
170
171         for (Object rendezvousConnectionMeter1 : rendezvousConnectionMeters) {
172             RendezvousConnectionMeter rendezvousConnectionMeter = (RendezvousConnectionMeter) rendezvousConnectionMeter1;
173
174             if (peerID.equals(rendezvousConnectionMeter.getPeerID())) {
175                 return rendezvousConnectionMeter;
176             }
177         }
178
179         RendezvousConnectionMeter rendezvousConnectionMeter = new RendezvousConnectionMeter(peerID);
180
181         rendezvousConnectionMeters.add(rendezvousConnectionMeter);
182         cumulativeRendezvousServiceMetric.addRendezvousConnectionMetric(rendezvousConnectionMeter.getCumulativeMetrics());
183
184         return rendezvousConnectionMeter;
185     }
186
187     /*
188      public synchronized void removeRendezvousConnectionMeter(PeerID peerID) {
189      if (peerID == null)
190      return;
191      
192      for (Iterator i = rendezvousConnectionMeters.iterator(); i.hasNext(); ) {
193      RendezvousConnectionMeter rendezvousConnectionMeter = (RendezvousConnectionMeter)i.next();
194      if (peerID.equals(rendezvousConnectionMeter.getPeerID())) {
195      i.remove();
196      return;
197      }
198      }
199      }
200      */
201
202     /**
203      * {@inheritDoc}
204      */
205     @Override
206     protected synchronized ServiceMetric collectServiceMetrics() {
207         RendezvousServiceMetric rendezvousServiceMetric = (RendezvousServiceMetric) createServiceMetric();
208
209         boolean anyData = false;
210
211         for (Enumeration<ClientConnectionMeter> e = clientConnectionMeters.elements(); e.hasMoreElements();) {
212             ClientConnectionMeter clientConnectionMeter = e.nextElement();
213             ClientConnectionMetric clientConnectionMetric = clientConnectionMeter.collectMetrics(); // clears delta from meter
214
215             if (clientConnectionMetric != null) {
216                 rendezvousServiceMetric.addClientConnectionMetric(clientConnectionMetric);
217                 anyData = true;
218             }
219         }
220
221         for (RendezvousConnectionMeter rendezvousConnectionMeter : rendezvousConnectionMeters) {
222             RendezvousConnectionMetric rendezvousConnectionMetric = rendezvousConnectionMeter.collectMetrics(); // clears delta from meter
223
224             if (rendezvousConnectionMetric != null) {
225                 rendezvousServiceMetric.addRendezvousConnectionMetric(rendezvousConnectionMetric);
226                 anyData = true;
227             }
228         }
229
230         RendezvousMetric rendezvousMetric = rendezvousMeter.collectMetrics();
231
232         if (rendezvousMetric != null) {
233             rendezvousServiceMetric.setRendezvousMetric(rendezvousMetric);
234             anyData = true;
235         }
236
237         if (anyData) {
238             return rendezvousServiceMetric;
239         } else {
240             return null;
241         }
242     }
243
244     /**
245      * {@inheritDoc}
246      */
247     @Override
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];
251
252         if (origMetric == null) {
253             return null;
254         }
255
256         RendezvousServiceMonitorFilter rendezvousServiceMonitorFilter = (RendezvousServiceMonitorFilter) serviceMonitorFilter;
257
258         return origMetric.shallowCopy(rendezvousServiceMonitorFilter);
259     }
260
261     /**
262      * {@inheritDoc}
263      */
264     @Override
265     public ServiceMetric getCumulativeServiceMetric(ServiceMonitorFilter serviceMonitorFilter, long fromTime, long toTime) {
266         RendezvousServiceMonitorFilter rendezvousServiceMonitorFilter = (RendezvousServiceMonitorFilter) serviceMonitorFilter;
267         RendezvousServiceMetric origMetric = (RendezvousServiceMetric) getCumulativeServiceMetric();
268
269         return origMetric.deepCopy(rendezvousServiceMonitorFilter);
270     }
271
272 }