ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/host/java/Config.java
Revision: 1.11
Committed: Mon Jun 10 14:10:46 2002 UTC (22 years, 3 months ago) by tdb
Branch: MAIN
CVS Tags: HEAD
Changes since 1.10: +1 -1 lines
State: FILE REMOVED
Log Message:
Tidy up of files. These are all old things that are not only no longer used
but are also probably useless to anyone other than us. This saves checking
them out all the time, and makes the "cms/source" tree contain only current
stuff. They'll still exist in the attic's though :)

File Contents

# User Rev Content
1 tdb 1.9 /*
2     * i-scream central monitoring system
3 tdb 1.10 * http://www.i-scream.org.uk
4 tdb 1.9 * Copyright (C) 2000-2002 i-scream
5     *
6     * This program is free software; you can redistribute it and/or
7     * modify it under the terms of the GNU General Public License
8     * as published by the Free Software Foundation; either version 2
9     * of the License, or (at your option) any later version.
10     *
11     * This program is distributed in the hope that it will be useful,
12     * but WITHOUT ANY WARRANTY; without even the implied warranty of
13     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     * GNU General Public License for more details.
15     *
16     * You should have received a copy of the GNU General Public License
17     * along with this program; if not, write to the Free Software
18     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19     */
20    
21 ab11 1.2 //---PACKAGE DECLARATION---
22    
23     //---IMPORTS---
24    
25 ab11 1.1 import java.net.*;
26     import java.util.*;
27     import java.io.*;
28    
29 ab11 1.2 /**
30     * Configurator object for the JavaHost
31 tdb 1.5 * Will connect to the filter manager and collect its specific
32 ab11 1.2 * configuration
33     *
34 tdb 1.10 * @author $Author: tdb $
35 tdb 1.11 * @version $Id: Config.java,v 1.10 2002/05/21 16:47:12 tdb Exp $
36 ab11 1.2 */
37 ab11 1.1 class Config {
38    
39 ab11 1.2 //---FINAL ATTRIBUTES---
40    
41     //---STATIC METHODS---
42    
43     //---CONSTRUCTORS---
44    
45     public Config( String serverName, int serverPort ){
46     // takes in the master config settings and creates a connection with
47     // this computer, and downloads all the values listed in config.values.txt
48     // which should be in the local directory
49    
50     // read in from the file.
51     try {
52 ab11 1.3 System.out.println("Reading Config file");
53 ab11 1.2 BufferedReader inFile = new BufferedReader(new FileReader("config.values.txt"));
54     aList = new ArrayList();
55     numProperties = 0;
56     String tmpIn = inFile.readLine();
57     while ( tmpIn != null ){
58 ab11 1.3 aList.add(numProperties, tmpIn);
59 ab11 1.2 numProperties++;
60     tmpIn = inFile.readLine();
61     }
62 ab11 1.3 System.out.println("Added "+numProperties+" properties");
63 ab11 1.2 }
64     catch ( FileNotFoundException e ){
65     // do something
66 ab11 1.3 System.out.println("Config file not found");
67 ab11 1.2 }
68     catch ( IOException e ){
69     // do something
70     }
71    
72 ab11 1.3 myProperties = new HashMap();
73     configChanged = false;
74    
75 ab11 1.4 // time in seconds before first retry
76     filterManagerRetryTime = 10;
77 ab11 1.3
78 ab11 1.2 // do the funky jibble
79     connect(serverName, serverPort);
80     }
81    
82     //---PUBLIC METHODS---
83    
84     public InetAddress getFilterName(){
85 tdb 1.6 // will return the most recent IP address (if it is dynamic for whatever reason)
86 ab11 1.2 try {
87     return InetAddress.getByName(filterName);
88     }
89     catch ( UnknownHostException e ){
90     // do something
91     return null;
92     }
93    
94     }
95    
96     /**
97     * Used to retrieve the port to send UDP packets to on the filter
98     *
99 tdb 1.6 * @return an integer corresponding to the UDP port of the filter
100 ab11 1.2 */
101     public int getFilterUDPPort(){
102    
103     return filterUDPPort;
104     }
105    
106     /**
107     * Used to retrieve the port to send TCP heartbeats to on the filter
108     *
109 tdb 1.6 * @return an integer corresponding to the TCP of the filter
110 ab11 1.2 */
111     public int getFilterTCPPort(){
112    
113     return filterTCPPort;
114     }
115    
116     /**
117     * Used to get the hostname of the filter we are to talk to.
118     *
119     * @return a string representing the hostname of the filter
120     */
121     public String getProperty( String name ){
122    
123     if ( myProperties.containsKey(name) ){
124     // its in there, may return ERROR
125     return (String) myProperties.get(name);
126     }
127     else
128     {
129     // can't have been in the config.values.txt file!
130     return "ERROR";
131     }
132     }
133    
134    
135     //---PRIVATE METHODS---
136    
137     private void connect( String serverName, int serverPort ){
138     Socket mySocket;
139 ab11 1.3 configChanged = false;
140    
141 tdb 1.5 System.out.println("Establishing connection with filter manager");
142 ab11 1.2
143     // might throw a UnknownHostException
144     try {
145 ab11 1.3 mySocket = new Socket( serverName, serverPort );
146     // ok we have our socket connected ok. grab their input and output streams
147 ab11 1.2 socketIn = new BufferedReader(new InputStreamReader(mySocket.getInputStream()));
148     socketOut = new PrintWriter(mySocket.getOutputStream());
149 ab11 1.3
150     if (sendCommand("STARTCONFIG").equals("OK")){
151 ab11 1.2 // everything is fine
152 ab11 1.3 // sendCommand("LASTMODIFIED");
153     lastModified = sendCommand("LASTMODIFIED");
154 ab11 1.8
155     fileList = sendCommand("FILELIST");
156 ab11 1.2
157 ab11 1.8 fQDN = sendCommand("FQDN");
158 ab11 1.2 // get all the properties
159 ab11 1.3 if ( numProperties > 0 ){
160     // sendCommand("CONFIG");
161     for ( int i = 0; i < numProperties; i++ ){
162     String property = (String) aList.get(i);
163     myProperties.put(property, sendCommand(property));
164     }
165 ab11 1.2 }
166    
167     sendCommand("ENDCONFIG");
168     String filter_data = sendCommand("FILTER");
169     StringTokenizer tok = new StringTokenizer(filter_data,";");
170     filterName = tok.nextToken();
171     filterUDPPort = Integer.parseInt(tok.nextToken());
172     filterTCPPort = Integer.parseInt(tok.nextToken());
173 ab11 1.4
174 ab11 1.2 sendCommand("END");
175 ab11 1.3
176 ab11 1.2 }
177 ab11 1.3
178 ab11 1.2
179     // close the socket
180     mySocket.close();
181 tdb 1.5 System.out.println("Completed communication with filter manager");
182 ab11 1.2
183     }
184     catch ( UnknownHostException e ){
185 ab11 1.3 // what to do
186     System.out.println("Host not found");
187 ab11 1.2 }
188     catch ( IOException e ){
189     // what to do
190 ab11 1.3 System.out.println("Unable to read from socket, might not be open");
191 ab11 1.4 System.out.println("Retrying in "+filterManagerRetryTime+" seconds");
192     configChanged = true;
193     try {
194     Thread.sleep(filterManagerRetryTime*1000);
195     }
196     catch( InterruptedException f ){
197     System.out.println("Sleep interrupted");
198     }
199     filterManagerRetryTime = filterManagerRetryTime * 2;
200     // warning this WILL cause a stack overflow after a while..
201     // need to fix it.
202     connect(serverName, serverPort);
203 ab11 1.2 }
204    
205     } // connect
206    
207    
208 ab11 1.3 public void sendHeartBeat(){
209    
210     Socket mySocket;
211     try {
212    
213     mySocket = new Socket( filterName, filterTCPPort );
214     // ok we have our socket connected ok. grab their input and output streams
215     socketIn = new BufferedReader(new InputStreamReader(mySocket.getInputStream()));
216     socketOut = new PrintWriter(mySocket.getOutputStream());
217    
218    
219     if ( sendCommand("HEARTBEAT").equals("OK") ){
220     if ( sendCommand("CONFIG").equals("OK") ){
221     sendCommand(fileList);
222     if ( sendCommand(lastModified).equals("ERROR") ){
223     // config has changed
224     configChanged = true;
225     }
226     sendCommand("ENDHEARTBEAT");
227     }
228     }
229     }
230     catch ( UnknownHostException e ){
231     // what to do
232     System.out.println("Host not found");
233     }
234     catch ( IOException e ){
235     // what to do
236     System.out.println("Unable to read from socket, might not be open");
237 ab11 1.4 System.out.println("Re-establishing contact with filter manager");
238     configChanged = true;
239 ab11 1.3 }
240     }
241    
242 ab11 1.2 private String sendCommand(String command){
243    
244 ab11 1.3 // System.out.println("Writing command: "+command);
245 ab11 1.2 socketOut.println(command);
246 ab11 1.3 socketOut.flush();
247 ab11 1.2 try {
248 ab11 1.3 String response = socketIn.readLine();
249     // System.out.println("Got: "+response);
250     return response;
251 ab11 1.2 }
252     catch ( IOException e ){
253     // something went wrong
254 ab11 1.3 System.out.println("Error recieving response");
255 ab11 1.2 return "ERROR";
256     }
257     }
258    
259     //---ACCESSOR/MUTATOR METHODS---
260    
261 ab11 1.3 public boolean reloadConfig(){
262     return configChanged;
263     }
264    
265 ab11 1.2 //---ATTRIBUTES---
266    
267 ab11 1.3 private boolean configChanged;
268 ab11 1.2 private String lastModified;
269 ab11 1.3 private String fileList;
270 ab11 1.8 private String fQDN;
271 ab11 1.2 private int numProperties;
272 ab11 1.3 private HashMap myProperties;
273 ab11 1.2 private String filterName;
274     private int filterUDPPort;
275     private int filterTCPPort;
276     private ArrayList aList;
277     private BufferedReader socketIn;
278     private PrintWriter socketOut;
279 ab11 1.4 private int filterManagerRetryTime;
280 ab11 1.2
281    
282    
283     //---STATIC ATTRIBUTES---
284 ab11 1.1
285 tdb 1.7 } // class