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.meter;
60 import net.jxta.document.Advertisement;
61 import net.jxta.exception.JxtaException;
62 import net.jxta.id.ID;
63 import net.jxta.meter.MonitorResources;
64 import net.jxta.meter.ServiceMetric;
65 import net.jxta.meter.ServiceMonitorFilter;
66 import net.jxta.peergroup.PeerGroup;
67 import net.jxta.platform.Module;
68 import net.jxta.platform.ModuleClassID;
69 import net.jxta.protocol.ModuleImplAdvertisement;
72 public abstract class GenericServiceMonitor implements ServiceMonitorImpl, Module {
73 private ModuleClassID moduleClassID;
74 protected MonitorManager monitorManager;
76 protected long reportRate;
77 protected int reportRateIndex;
78 protected ServiceMetric cumulativeServiceMetric;
79 protected ServiceMetric deltaServiceMetrics[];
80 protected ModuleImplAdvertisement implAdvertisement;
82 public GenericServiceMonitor() {}
84 // public void init(MonitorManager monitorManager, ModuleClassID moduleClassID) {
86 public void init(PeerGroup group, ID assignedID, Advertisement advertisement) {
87 group.unref(); // We do not use the group. These are not quite real modules.
88 this.implAdvertisement = (ModuleImplAdvertisement) advertisement;
89 this.moduleClassID = (ModuleClassID) assignedID;
92 public void init(MonitorManager monitorManager) {
93 this.monitorManager = monitorManager;
95 if (MeterBuildSettings.METERING) {
96 cumulativeServiceMetric = createServiceMetric();
97 deltaServiceMetrics = new ServiceMetric[monitorManager.getReportRatesCount()];
103 public void init(MonitorManager monitorManager) {
104 this.monitorManager = monitorManager;
108 public int startApp(java.lang.String[] args) {
110 } // fix-me: what's the right return?
112 public void stopApp() {}
114 protected void init() {}
116 public ModuleClassID getModuleClassID() {
117 return moduleClassID;
120 public PeerGroup getPeerGroup() {
121 return monitorManager.getPeerGroup();
124 protected ServiceMetric getCumulativeServiceMetric() {
125 return cumulativeServiceMetric;
128 public void resetPulseRate(ServiceMonitorPulseInfo pulseInfo, int oldPulseRateIndex) {
129 this.reportRate = pulseInfo.getPulseRate();
130 this.reportRateIndex = pulseInfo.getPulseRateIndex();
133 public void validateCumulativeServiceMonitorFilter(ServiceMonitorFilter serviceMonitorFilter) {// base implementation is to accept
136 public ServiceMonitorFilter createSupportedCumulativeServiceMonitorFilter(ServiceMonitorFilter serviceMonitorFilter) {
137 // base implementation is to accept
138 return serviceMonitorFilter;
141 public void validateServiceMonitorFilter(ServiceMonitorFilter serviceMonitorFilter, long reportRate) {// base implementation is to accept
144 public ServiceMonitorFilter createSupportedServiceMonitorFilter(ServiceMonitorFilter serviceMonitorFilter, long reportRate) {
145 // base implementation is to accept
146 return serviceMonitorFilter;
149 protected ServiceMetric createServiceMetric() {
151 return MonitorResources.createServiceMetric(moduleClassID);
152 } catch (JxtaException e) { // this will always succeed since we were able to lad the monitor
158 * Get the service metrics accrued since the last pulse
160 * @return null if there were no metrices since the last call
162 protected abstract ServiceMetric collectServiceMetrics();
164 public synchronized void beginPulse(ServiceMonitorPulseInfo pulseInfo) {
165 ServiceMetric baseDeltaServiceMetric = collectServiceMetrics();
167 deltaServiceMetrics[reportRateIndex] = baseDeltaServiceMetric;
169 if (baseDeltaServiceMetric != null) {
170 for (int reportRate = reportRateIndex + 1; reportRate < deltaServiceMetrics.length; reportRate++) {
172 if (pulseInfo.isRegisteredFilterForRate(reportRate)) {
174 if (deltaServiceMetrics[reportRate] == null) {
175 deltaServiceMetrics[reportRate] = createServiceMetric();
178 deltaServiceMetrics[reportRate].mergeMetrics(baseDeltaServiceMetric);
184 public void endPulse(ServiceMonitorPulseInfo pulseInfo) {
185 for (int reportRateIndex = 0; reportRateIndex < monitorManager.getReportRatesCount(); reportRateIndex++) {
186 if (pulseInfo.isEvenPulseForRateIndex(reportRateIndex)) {
187 deltaServiceMetrics[reportRateIndex] = null;
192 public void beginCumulativeReport() {}
194 public void endCumulativeReport() {}
196 public ServiceMetric getServiceMetric(ServiceMonitorFilter serviceMonitorFilter, long fromTime, long toTime, int reportIndex, long reportRate) {
197 int deltaReportRateIndex = monitorManager.getReportRateIndex(reportRate);
199 // Fix-Me: For now we are not yet supporting filters
201 return deltaServiceMetrics[deltaReportRateIndex];
204 public ServiceMetric getCumulativeServiceMetric(ServiceMonitorFilter serviceMonitorFilter, long fromTime, long toTime) {
205 // Fix-Me: For now we are not yet supporting filters
207 return cumulativeServiceMetric;
210 public void serviceMonitorFilterRegistered(ServiceMonitorFilter serviceMonitorFilter, int reportRateIndex, long reportRate, boolean newRate) {
212 deltaServiceMetrics[reportRateIndex] = createServiceMetric();
216 public void serviceMonitorFilterDeregistered(ServiceMonitorFilter serviceMonitorFilter, int reportRateIndex, long reportRate, boolean retiredRate) {
218 deltaServiceMetrics[reportRateIndex] = null;
222 public void destroy() {}