]> sjero.net Git - linphone/blob - p2pproxy/dependencies-src/jxse-src-2.5/impl/src/net/jxta/impl/rendezvous/rendezvousMeter/RendezvousMeter.java
4059bba4e4cd027064926b4420067de2ca92b0c2
[linphone] / p2pproxy / dependencies-src / jxse-src-2.5 / impl / src / net / jxta / impl / rendezvous / rendezvousMeter / RendezvousMeter.java
1 /*
2  * Copyright (c) 2001-2007 Sun Micro//Systems, 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.peer.*;
61 import net.jxta.peergroup.*;
62 import net.jxta.rendezvous.*;
63 import net.jxta.impl.rendezvous.*;
64 import java.net.*;
65 import java.util.*;
66
67
68 /**
69  The Meter corresponding to the state and aggregate information of a Rendezvous Service
70  **/
71 public class RendezvousMeter {
72     private RendezvousMetric cumulativeMetrics;
73     private RendezvousMetric deltaMetrics;
74
75     private long transitionTime = System.currentTimeMillis();
76
77     public RendezvousMeter() {
78         cumulativeMetrics = new RendezvousMetric(null);
79     }
80
81     public RendezvousMetric getCumulativeMetrics() { 
82         return cumulativeMetrics; 
83     }
84
85     public synchronized RendezvousMetric collectMetrics() {     
86         RendezvousMetric prevDelta = deltaMetrics;
87
88         deltaMetrics = null;
89
90         return prevDelta;
91     }
92
93     private void createDeltaMetric() {
94         deltaMetrics = new RendezvousMetric(cumulativeMetrics);
95     }
96
97     @Override
98     public String toString() {
99         return "RendezvousMeter";
100     }
101
102     public void startEdge() {
103         if (deltaMetrics == null) {     
104             createDeltaMetric();
105         }
106
107         transitionTime = System.currentTimeMillis();
108         deltaMetrics.startEdge(transitionTime);
109         cumulativeMetrics.startEdge(transitionTime);
110     }
111         
112     public void stopEdge() {
113         if (deltaMetrics == null) {     
114             createDeltaMetric();
115         }
116
117         long now = System.currentTimeMillis();
118         long timeAsEdge = now - transitionTime;
119                 
120         transitionTime = now;
121
122         if (!cumulativeMetrics.isEdge()) {
123             timeAsEdge = 0;
124         }
125                 
126         deltaMetrics.stopEdge(now, timeAsEdge);
127         cumulativeMetrics.stopEdge(now, timeAsEdge);
128     }
129
130     public void startRendezvous() {
131         if (deltaMetrics == null) {     
132             createDeltaMetric();
133         }
134
135         transitionTime = System.currentTimeMillis();
136         deltaMetrics.startRendezvous(transitionTime);
137         cumulativeMetrics.startRendezvous(transitionTime);
138     }
139
140     public void stopRendezvous() {
141         if (deltaMetrics == null) {     
142             createDeltaMetric();
143         }
144
145         long now = System.currentTimeMillis();
146         long timeAsRendezvous = cumulativeMetrics.isRendezvous() ? (now - transitionTime) : 0;
147                 
148         transitionTime = now;
149
150         deltaMetrics.stopRendezvous(now, timeAsRendezvous);
151         cumulativeMetrics.stopRendezvous(now, timeAsRendezvous);
152     }
153
154     public void invalidMessageReceived() {
155         if (deltaMetrics == null) {     
156             createDeltaMetric();
157         }
158
159         deltaMetrics.invalidMessageReceived();
160         cumulativeMetrics.invalidMessageReceived();
161     }
162
163     public void receivedMessageProcessedLocally() {
164         if (deltaMetrics == null) {     
165             createDeltaMetric();
166         }
167
168         deltaMetrics.receivedMessageProcessedLocally();
169         cumulativeMetrics.receivedMessageProcessedLocally();
170     }
171
172     public void receivedMessageRepropagatedInGroup() {
173         if (deltaMetrics == null) {     
174             createDeltaMetric();
175         }
176
177         deltaMetrics.receivedMessageRepropagatedInGroup();
178         cumulativeMetrics.receivedMessageRepropagatedInGroup();
179     }
180
181     public void receivedDeadMessage() {
182         if (deltaMetrics == null) {     
183             createDeltaMetric();
184         }
185
186         deltaMetrics.receivedDeadMessage();
187         cumulativeMetrics.receivedDeadMessage();
188     }
189
190     public void receivedLoopbackMessage() {
191         if (deltaMetrics == null) {     
192             createDeltaMetric();
193         }
194
195         deltaMetrics.receivedLoopbackMessage();
196         cumulativeMetrics.receivedLoopbackMessage();
197     }
198
199     public void receivedDuplicateMessage() {
200         if (deltaMetrics == null) {     
201             createDeltaMetric();
202         }
203
204         deltaMetrics.receivedDuplicateMessage();
205         cumulativeMetrics.receivedDuplicateMessage();
206     }
207
208     public void propagateToPeers(int numPeers) {
209         if (deltaMetrics == null) {     
210             createDeltaMetric();
211         }
212
213         deltaMetrics.propagateToPeers(numPeers);
214         cumulativeMetrics.propagateToPeers(numPeers);
215     }
216
217     public void propagateToNeighbors() {
218         if (deltaMetrics == null) {     
219             createDeltaMetric();
220         }
221
222         deltaMetrics.propagateToNeighbors();
223         cumulativeMetrics.propagateToNeighbors();
224     }
225         
226     public void propagateToNeighborsFailed() {
227         if (deltaMetrics == null) {     
228             createDeltaMetric();
229         }
230
231         deltaMetrics.propagateToNeighborsFailed();
232         cumulativeMetrics.propagateToNeighborsFailed();
233     }
234
235     public void propagateToGroup() {
236         if (deltaMetrics == null) {     
237             createDeltaMetric();
238         }
239
240         deltaMetrics.propagateToGroup();
241         cumulativeMetrics.propagateToGroup();
242     }
243
244     public void walk() {
245         if (deltaMetrics == null) {     
246             createDeltaMetric();
247         }
248
249         deltaMetrics.walk();
250         cumulativeMetrics.walk();
251     }
252
253     public void walkFailed() {
254         if (deltaMetrics == null) {     
255             createDeltaMetric();
256         }
257
258         deltaMetrics.walkFailed();
259         cumulativeMetrics.walkFailed();
260     }
261
262     public void walkToPeers(int numPeers) {
263         if (deltaMetrics == null) {     
264             createDeltaMetric();
265         }
266
267         deltaMetrics.walkToPeers(numPeers);
268         cumulativeMetrics.walkToPeers(numPeers);
269     }
270
271     public void walkToPeersFailed() {
272         if (deltaMetrics == null) {     
273             createDeltaMetric();
274         }
275
276         deltaMetrics.walkToPeersFailed();
277         cumulativeMetrics.walkToPeersFailed();
278     }
279 }