blob: 75b9d2e6c5b332f7196a96c15f171a1f5559745b [file] [log] [blame]
/*
* $Header: /cvshome/build/org.osgi.service.monitor/src/org/osgi/service/monitor/MonitoringJob.java,v 1.14 2006/06/16 16:31:25 hargrave Exp $
*
* Copyright (c) OSGi Alliance (2004, 2006). All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.osgi.service.monitor;
/**
* A Monitoring Job is a request for scheduled or event based notifications on
* update of a set of <code>StatusVariable</code>s. The job is a data
* structure that holds a non-empty list of <code>StatusVariable</code> names,
* an identification of the initiator of the job, and the sampling parameters.
* There are two kinds of monitoring jobs: time based and change based. Time
* based jobs take samples of all <code>StatusVariable</code>s with a
* specified frequency. The number of samples to be taken before the job
* finishes may be specified. Change based jobs are only interested in the
* changes of the monitored <code>StatusVariable</code>s. In this case, the
* number of changes that must take place between two notifications can be
* specified.
* <p>
* The job can be started on the <code>MonitorAdmin</code> interface. Running
* the job (querying the <code>StatusVariable</code>s, listening to changes,
* and sending out notifications on updates) is the task of the
* <code>MonitorAdmin</code> implementation.
* <p>
* Whether a monitoring job keeps track dynamically of the
* <code>StatusVariable</code>s it monitors is not specified. This means that
* if we monitor a <code>StatusVariable</code> of a <code>Monitorable</code>
* service which disappears and later reappears then it is implementation
* specific whether we still receive updates of the <code>StatusVariable</code>
* changes or not.
*/
public interface MonitoringJob {
/**
* Stops a Monitoring Job. Note that a time based job can also stop
* automatically if the specified number of samples have been taken.
*/
public void stop();
/**
* Returns the identitifier of the principal who initiated the job. This is
* set at the time when
* {@link MonitorAdmin#startJob MonitorAdmin.startJob()} method is called.
* This string holds the ServerID if the operation was initiated from a
* remote manager, or an arbitrary ID of the initiator entity in the local
* case (used for addressing notification events).
*
* @return the ID of the initiator, cannot be <code>null</code>
*/
public String getInitiator();
/**
* Returns the list of <code>StatusVariable</code> names that are the
* targets of this measurement job. For time based jobs, the
* <code>MonitorAdmin</code> will iterate through this list and query all
* <code>StatusVariable</code>s when its timer set by the job's frequency
* rate expires.
*
* @return the target list of the measurement job in
* [Monitorable_ID]/[StatusVariable_ID] format, cannot be
* <code>null</code>
*/
public String[] getStatusVariableNames();
/**
* Returns the delay (in seconds) between two samples. If this call returns
* N (greater than 0) then the <code>MonitorAdmin</code> queries each
* <code>StatusVariable</code> that belongs to this job every N seconds.
* The value 0 means that the job is not scheduled but event based: in this
* case instant notification on changes is requested (at every nth change of
* the value, as specified by the report count parameter).
*
* @return the delay (in seconds) between samples, or 0 for change based
* jobs
*/
public int getSchedule();
/**
* Returns the number of times <code>MonitorAdmin</code> will query the
* <code>StatusVariable</code>s (for time based jobs), or the number of
* changes of a <code>StatusVariable</code> between notifications (for
* change based jobs). Time based jobs with non-zero report count will take
* <code>getReportCount()</code>*<code>getSchedule()</code> time to
* finish. Time based jobs with 0 report count and change based jobs do not
* stop automatically, but all jobs can be stopped with the {@link #stop}
* method.
*
* @return the number of measurements to be taken, or the number of changes
* between notifications
*/
public int getReportCount();
/**
* Returns whether the job was started locally or remotely. Jobs started by
* the clients of this API are always local, remote jobs can only be started
* using the Device Management Tree.
*
* @return <code>true</code> if the job was started from the local device,
* <code>false</code> if the job was initiated from a management
* server through the device management tree
*/
public boolean isLocal();
/**
* Returns whether the job is running. A job is running until it is
* explicitely stopped, or, in case of time based jobs with a finite report
* count, until the given number of measurements have been made.
*
* @return <code>true</code> if the job is still running, <code>false</code>
* if it has finished
*/
public boolean isRunning();
}