ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/server/uk/org/iscream/cms/server/client/ClientMain.java
Revision: 1.21
Committed: Sat May 18 18:16:00 2002 UTC (22 years ago) by tdb
Branch: MAIN
Changes since 1.20: +22 -3 lines
Log Message:
i-scream is now licensed under the GPL. I've added the GPL headers to every
source file, and put a full copy of the license in the appropriate places.
I think I've covered everything. This is going to be a mad commit ;)

File Contents

# User Rev Content
1 tdb 1.21 /*
2     * i-scream central monitoring system
3     * Copyright (C) 2000-2002 i-scream
4     *
5     * This program is free software; you can redistribute it and/or
6     * modify it under the terms of the GNU General Public License
7     * as published by the Free Software Foundation; either version 2
8     * of the License, or (at your option) any later version.
9     *
10     * This program is distributed in the hope that it will be useful,
11     * but WITHOUT ANY WARRANTY; without even the implied warranty of
12     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13     * GNU General Public License for more details.
14     *
15     * You should have received a copy of the GNU General Public License
16     * along with this program; if not, write to the Free Software
17     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18     */
19    
20 tdb 1.5 //---PACKAGE DECLARATION---
21 tdb 1.20 package uk.org.iscream.cms.server.client;
22 tdb 1.1
23 tdb 1.5 //---IMPORTS---
24 tdb 1.20 import uk.org.iscream.cms.server.clientinterface.*;
25     import uk.org.iscream.cms.server.componentmanager.*;
26     import uk.org.iscream.cms.server.core.*;
27     import uk.org.iscream.cms.server.util.*;
28 tdb 1.5
29     /**
30     * A startup component for the Local Clients.
31 ajm 1.19 * This class starts the CORBA client used for alerting
32     * purposes. It reads data using the ClientServant from CORBA
33     * calls by the i-scream client interface. This data is then
34     * used by the MonitorManager to pass to Monitors. Monitors then
35     * analyse the data and raise alerts if needed, these are passed to
36     * the Alerters, which send out alerts. They are looked after by
37     * the AlerterManager.
38 tdb 1.5 *
39 tdb 1.21 * @author $Author: tdb $
40     * @version $Id: ClientMain.java,v 1.20 2001/05/29 17:02:34 tdb Exp $
41 tdb 1.5 */
42     public class ClientMain implements Component {
43    
44     //---FINAL ATTRIBUTES---
45    
46     /**
47     * The current CVS revision of this class
48     */
49 tdb 1.21 public static final String REVISION = "$Revision: 1.20 $";
50 tdb 1.5
51     /**
52     * The friendly name for this component, used by
53     * all related classes.
54     */
55     public static final String NAME = "LocalClient";
56    
57     //---STATIC METHODS---
58    
59     //---CONSTRUCTORS---
60    
61     //---PUBLIC METHODS---
62    
63     /**
64 ajm 1.19 * This starts the Local Client component.
65     * This starts the ClientServant, the MonitorManager and
66     * the AlerterManager, aswell as initialising any queues
67     * and obtaining any initial configuration.
68     *
69     * @throws ComponentStartException if the component fails to start
70 tdb 1.5 */
71     public void start() throws ComponentStartException {
72 tdb 1.6 // get references to key objects
73 tdb 1.13 _logger = _refman.getLogger();
74 tdb 1.5
75     _logger.write(toString(), Logger.SYSINIT, "coming up");
76    
77 tdb 1.17 // get a reference to the configuration proxy
78     ConfigurationProxy cp = ConfigurationProxy.getInstance();
79    
80     // see if these Queue's need a size limit
81     try {
82     int queueSizeLimit = Integer.parseInt(cp.getProperty(NAME, "Queue.SizeLimit"));
83     String queueRemoveAlgorithm = cp.getProperty(NAME, "Queue.RemoveAlgorithm");
84     int algorithm = StringUtils.getStringPos(queueRemoveAlgorithm, Queue.algorithms);
85     if(algorithm != -1) {
86     _logger.write(toString(), Logger.DEBUG, "Starting 2 Queues with size limit of "+queueSizeLimit+", using remove algorithm "+queueRemoveAlgorithm);
87     // we have valid values, so lets start it.
88     _alerterQueue = new Queue(queueSizeLimit, algorithm);
89     _monitorQueue = new Queue(queueSizeLimit, algorithm);
90     }
91     else {
92     _logger.write(toString(), Logger.WARNING, "Bad Queue Algorithm configuration, not known: "+queueRemoveAlgorithm);
93     // just don't activate a limit
94     _alerterQueue = new Queue();
95     _monitorQueue = new Queue();
96     }
97     } catch (PropertyNotFoundException e) {
98     _logger.write(toString(), Logger.DEBUG, "Optional config not set: "+e);
99     // just don't activate a limit
100     _alerterQueue = new Queue();
101     _monitorQueue = new Queue();
102     } catch (NumberFormatException e) {
103     _logger.write(toString(), Logger.WARNING, "Bad Queue SizeLimit configuration: "+e);
104     // just don't activate a limit
105     _alerterQueue = new Queue();
106     _monitorQueue = new Queue();
107     }
108    
109     // startup monitors on these queues
110     try {
111     // try to get the interval, if this fails, we won't start up the monitor
112     int queueMonitorInterval = Integer.parseInt(cp.getProperty(NAME, "Queue.MonitorInterval"));
113 tdb 1.18 _alerterQueue.startMonitor(queueMonitorInterval*1000, _monitorQueue, NAME + " Alerter");
114     _monitorQueue.startMonitor(queueMonitorInterval*1000, _monitorQueue, NAME + " Monitor");
115 tdb 1.17 } catch (PropertyNotFoundException e) {
116     _logger.write(toString(), Logger.WARNING, "failed to find queue monitor config, disabling. " + e);
117     }
118 tdb 1.5
119 tdb 1.7 // setup the servant and connect
120     _logger.write(toString(), Logger.SYSINIT, "starting servant and connecting");
121 tdb 1.1 try {
122 ajm 1.9 ClientServant ref = new ClientServant(_monitorQueue);
123 tdb 1.5 org.omg.CORBA.Object objRef = _refman.getRootPOA().servant_to_reference(ref);
124 tdb 1.7 Client client = ClientHelper.narrow(objRef);
125 tdb 1.5
126     // this name maybe shouldn't be static
127     objRef = _refman.getCORBARef("iscream.ClientInterface.CorbaListener");
128     CorbaClientListener listener = CorbaClientListenerHelper.narrow(objRef);
129    
130     _logger.write(toString(), Logger.SYSINIT, "connecting");
131 tdb 1.8 CorbaControlHandler handler = listener.connect(client, NAME);
132 tdb 1.5 handler.startData();
133 tdb 1.1 }
134 tdb 1.5 catch(Exception e) {
135     // not sure what to do here
136     // so we just log the error
137     _logger.write(toString(), Logger.ERROR, "ERROR - " + e.getMessage());
138 tdb 1.1 }
139 tdb 1.7
140     // setup the MonitorManager
141 ajm 1.9 MonitorManager monMan = MonitorManager.getInstance();
142     monMan.start();
143    
144     // setup the AlerterManager
145     AlerterManager alertMan = AlerterManager.getInstance();
146     alertMan.start();
147    
148 tdb 1.5 _logger.write(toString(), Logger.SYSINIT, "started");
149     }
150 tdb 1.12
151     /**
152     * Does a dependency check. Used mainly at startup to
153     * see if the required dependencies (components) are up
154     * and running.
155     *
156     * @return a boolean value, true if the depdencies are satisfied
157     */
158     public boolean depCheck() {
159     try {
160     org.omg.CORBA.Object obj;
161     // first check the ConfigurationManager is alive
162     obj = _refman.getCORBARef("iscream.ConfigurationManager");
163     // then get some info on the CLI
164     ConfigurationProxy cp = ConfigurationProxy.getInstance();
165     String cli = cp.getProperty("RootFilter", "RootFilter.realtimeInterfaceName");
166     // finally check the CLI is alive
167     obj = _refman.getCORBARef("iscream.ClientInterface." + cli);
168     } catch(ComponentCORBAException e) {
169 tdb 1.14 System.err.println(toString() + ": Dependency Failure: "+e);
170 tdb 1.12 return false;
171     } catch(PropertyNotFoundException e) {
172 tdb 1.14 System.err.println(toString() + ": Unable to obtain configuration: "+e);
173 tdb 1.12 return false;
174     }
175     // dependency check suceeded
176     return true;
177     }
178    
179 tdb 1.5 /**
180     * Overrides the {@link java.lang.Object#toString() Object.toString()}
181     * method to provide clean logging (every class should have this).
182     *
183 tdb 1.20 * This uses the uk.org.iscream.cms.server.util.FormatName class
184 tdb 1.5 * to format the toString()
185     *
186     * @return the name of this class and its CVS revision
187     */
188     public String toString() {
189     return FormatName.getName(
190     NAME,
191     getClass().getName(),
192     REVISION);
193 tdb 1.1 }
194 tdb 1.5
195     //---PRIVATE METHODS---
196    
197     //---ACCESSOR/MUTATOR METHODS---
198    
199     //---ATTRIBUTES---
200    
201     /**
202     * This holds a reference to the
203     * system logger that is being used.
204     */
205 tdb 1.6 private Logger _logger;
206 tdb 1.5
207     /**
208     * A reference to the reference manager in use
209     */
210 tdb 1.13 private ReferenceManager _refman = ReferenceManager.getInstance();
211 tdb 1.5
212     //---STATIC ATTRIBUTES---
213 ajm 1.9
214     /**
215     * A queue for the alerter manager
216     */
217     public static Queue _alerterQueue;
218    
219     /**
220     * A queue for the monitor manager
221     */
222     public static Queue _monitorQueue;
223 tdb 1.1
224     }