1*7c478bd9Sstevel@tonic-gate /*
2*7c478bd9Sstevel@tonic-gate  * CDDL HEADER START
3*7c478bd9Sstevel@tonic-gate  *
4*7c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*7c478bd9Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
6*7c478bd9Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
7*7c478bd9Sstevel@tonic-gate  * with the License.
8*7c478bd9Sstevel@tonic-gate  *
9*7c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*7c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
11*7c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
12*7c478bd9Sstevel@tonic-gate  * and limitations under the License.
13*7c478bd9Sstevel@tonic-gate  *
14*7c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
15*7c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*7c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
17*7c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
18*7c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
19*7c478bd9Sstevel@tonic-gate  *
20*7c478bd9Sstevel@tonic-gate  * CDDL HEADER END
21*7c478bd9Sstevel@tonic-gate  */
22*7c478bd9Sstevel@tonic-gate /*
23*7c478bd9Sstevel@tonic-gate  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
24*7c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
25*7c478bd9Sstevel@tonic-gate  *
26*7c478bd9Sstevel@tonic-gate  *ident	"%Z%%M%	%I%	%E% SMI"
27*7c478bd9Sstevel@tonic-gate  */
28*7c478bd9Sstevel@tonic-gate 
29*7c478bd9Sstevel@tonic-gate package com.sun.solaris.domain.pools;
30*7c478bd9Sstevel@tonic-gate 
31*7c478bd9Sstevel@tonic-gate import java.util.Map;
32*7c478bd9Sstevel@tonic-gate 
33*7c478bd9Sstevel@tonic-gate import com.sun.solaris.service.pools.Configuration;
34*7c478bd9Sstevel@tonic-gate import com.sun.solaris.service.pools.Resource;
35*7c478bd9Sstevel@tonic-gate import com.sun.solaris.service.pools.PoolsException;
36*7c478bd9Sstevel@tonic-gate 
37*7c478bd9Sstevel@tonic-gate /**
38*7c478bd9Sstevel@tonic-gate  * A monitoring class. The user of this interface can retrieve
39*7c478bd9Sstevel@tonic-gate  * monitoring information related to the configuration which is
40*7c478bd9Sstevel@tonic-gate  * examined.
41*7c478bd9Sstevel@tonic-gate  */
42*7c478bd9Sstevel@tonic-gate 
43*7c478bd9Sstevel@tonic-gate public interface Monitor {
44*7c478bd9Sstevel@tonic-gate 	/**
45*7c478bd9Sstevel@tonic-gate 	 * Initialize the monitoring object using details from the
46*7c478bd9Sstevel@tonic-gate 	 * supplied configuration.
47*7c478bd9Sstevel@tonic-gate 	 *
48*7c478bd9Sstevel@tonic-gate 	 * @param conf The configuration to be monitored.
49*7c478bd9Sstevel@tonic-gate 	 * @throws PoolsException If the initialize fails.
50*7c478bd9Sstevel@tonic-gate 	 * @throws StaleMonitorException If the resource monitors
51*7c478bd9Sstevel@tonic-gate 	 * cannot be accessed.
52*7c478bd9Sstevel@tonic-gate 	 */
initialize(Configuration conf)53*7c478bd9Sstevel@tonic-gate 	public void initialize(Configuration conf) throws PoolsException,
54*7c478bd9Sstevel@tonic-gate 	    StaleMonitorException;
55*7c478bd9Sstevel@tonic-gate 
56*7c478bd9Sstevel@tonic-gate 	/**
57*7c478bd9Sstevel@tonic-gate 	 * Return the next sample.
58*7c478bd9Sstevel@tonic-gate 	 *
59*7c478bd9Sstevel@tonic-gate 	 * This call is a blocking call. The sample will only be
60*7c478bd9Sstevel@tonic-gate 	 * returned after pausing the invoking thread for the "sample
61*7c478bd9Sstevel@tonic-gate 	 * interval".
62*7c478bd9Sstevel@tonic-gate 	 *
63*7c478bd9Sstevel@tonic-gate 	 * @throws StaleMonitorException If the sample fails.
64*7c478bd9Sstevel@tonic-gate 	 * @throws PoolsException If there is an error manipulating the
65*7c478bd9Sstevel@tonic-gate 	 * pools configuration.
66*7c478bd9Sstevel@tonic-gate 	 * @throws InterruptedException If the thread is interrupted
67*7c478bd9Sstevel@tonic-gate 	 * while waiting for the sampling time to arrive.  The caller
68*7c478bd9Sstevel@tonic-gate 	 * may wish to check other conditions before possibly
69*7c478bd9Sstevel@tonic-gate 	 * reinitiating the sample.
70*7c478bd9Sstevel@tonic-gate 	 */
getNext()71*7c478bd9Sstevel@tonic-gate 	public void getNext() throws StaleMonitorException, PoolsException,
72*7c478bd9Sstevel@tonic-gate 	    InterruptedException;
73*7c478bd9Sstevel@tonic-gate 
74*7c478bd9Sstevel@tonic-gate 	/**
75*7c478bd9Sstevel@tonic-gate 	 * Return the number of samples taken.  This is the number of
76*7c478bd9Sstevel@tonic-gate 	 * successful calls to <code>getNext()</code>.
77*7c478bd9Sstevel@tonic-gate 	 */
getSampleCount()78*7c478bd9Sstevel@tonic-gate 	public int getSampleCount();
79*7c478bd9Sstevel@tonic-gate 
80*7c478bd9Sstevel@tonic-gate 	/**
81*7c478bd9Sstevel@tonic-gate 	 * Return the utilization for supplied resource.
82*7c478bd9Sstevel@tonic-gate 	 *
83*7c478bd9Sstevel@tonic-gate 	 * @param res The resource to be examined.
84*7c478bd9Sstevel@tonic-gate 	 *
85*7c478bd9Sstevel@tonic-gate 	 * @throws StaleMonitorException if the resource cannot be accessed.
86*7c478bd9Sstevel@tonic-gate 	 */
getUtilization(Resource res)87*7c478bd9Sstevel@tonic-gate 	public double getUtilization(Resource res) throws StaleMonitorException;
isValid()88*7c478bd9Sstevel@tonic-gate 	public boolean isValid();
get(Resource res)89*7c478bd9Sstevel@tonic-gate 	public ResourceMonitor get(Resource res) throws StaleMonitorException;
90*7c478bd9Sstevel@tonic-gate }
91*7c478bd9Sstevel@tonic-gate 
92*7c478bd9Sstevel@tonic-gate /**
93*7c478bd9Sstevel@tonic-gate  * Indicates that a monitor must be re-initialized. This can occur
94*7c478bd9Sstevel@tonic-gate  * for a number of reasons, including:
95*7c478bd9Sstevel@tonic-gate  *
96*7c478bd9Sstevel@tonic-gate  * <ul>
97*7c478bd9Sstevel@tonic-gate  * <li><p>
98*7c478bd9Sstevel@tonic-gate  * Resources created, modified, destroyed whilst sampling
99*7c478bd9Sstevel@tonic-gate  * </ul>
100*7c478bd9Sstevel@tonic-gate  */
101*7c478bd9Sstevel@tonic-gate class StaleMonitorException extends Exception {
102*7c478bd9Sstevel@tonic-gate }
103