ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/server/uk/org/iscream/cms/server/filter/TCPReaderInit.java
Revision: 1.20
Committed: Sun Mar 4 05:24:08 2001 UTC (23 years, 2 months ago) by tdb
Branch: MAIN
Changes since 1.19: +3 -3 lines
Log Message:
Seem to be getting a lot of ERROR logs from this class. Maybe this will help
us identify exactly what is happening.

File Contents

# User Rev Content
1 tdb 1.1 //---PACKAGE DECLARATION---
2 tdb 1.5 package uk.ac.ukc.iscream.filter;
3 tdb 1.1
4     //---IMPORTS---
5     import uk.ac.ukc.iscream.core.*;
6     import uk.ac.ukc.iscream.filter.*;
7 tdb 1.12 import uk.ac.ukc.iscream.componentmanager.*;
8 tdb 1.1 import java.net.Socket;
9     import java.io.InputStream;
10     import java.io.OutputStream;
11     import java.io.IOException;
12     import java.io.*;
13 ajm 1.9 import uk.ac.ukc.iscream.util.*;
14 tdb 1.1
15     /**
16 ajm 1.10 * This provides Host heartbeat functionality
17 tdb 1.1 *
18 tdb 1.19 * @author $Author: tdb1 $
19 tdb 1.20 * @version $Id: TCPReaderInit.java,v 1.19 2001/02/28 11:12:56 tdb1 Exp $
20 tdb 1.1 */
21     class TCPReaderInit extends Thread {
22    
23     //---FINAL ATTRIBUTES---
24    
25     /**
26     * The current CVS revision of this class
27     */
28 tdb 1.20 public final String REVISION = "$Revision: 1.19 $";
29 tdb 1.1
30     //---STATIC METHODS---
31    
32     //---CONSTRUCTORS---
33 tdb 1.13
34     /**
35     * Construct a new TCPReaderInit.
36     *
37     * @param socket the Socket to which the host is connected
38     * @param queue the Queue to which we'll add data
39     * @throws IOException if something goes badly wrong
40     */
41 tdb 1.11 public TCPReaderInit(Socket socket, Queue queue) throws IOException {
42 tdb 1.1 _socket = socket;
43 tdb 1.11 _queue = queue;
44 tdb 1.13 // setup the reader & writer
45 tdb 1.1 _socketIn = new BufferedReader(new InputStreamReader(_socket.getInputStream()));
46 tdb 1.15 _socketOut = new PrintWriter(_socket.getOutputStream(), true);
47 tdb 1.8 _logger.write(toString(), Logger.SYSINIT, "created");
48 tdb 1.1 }
49    
50     //---PUBLIC METHODS---
51 tdb 1.13
52     /**
53     * Main run method. Will communicate with the host, inform it
54     * if any updates to it's configuration are needed, and send
55     * a heartbeat packet into the system.
56     */
57 tdb 1.1 public void run() {
58     try {
59 tdb 1.3 //variables
60     String filelist = "";
61     String lastModified = "";
62     String inBound = "";
63 tdb 1.2
64 tdb 1.3 inBound = _socketIn.readLine();
65     if(!inBound.equals("HEARTBEAT")) {
66     _socketOut.println("ERROR");
67     throw new IOException("protocol error - expecting:HEARTBEAT got:" + inBound);
68     } else {
69     _socketOut.println("OK");
70     }
71    
72     inBound = _socketIn.readLine();
73     if(!inBound.equals("CONFIG")) {
74     _socketOut.println("ERROR");
75     throw new IOException("protocol error - expecting:CONFIG got:" + inBound);
76     } else {
77     _socketOut.println("OK");
78     }
79    
80     inBound = _socketIn.readLine();
81     filelist = inBound;
82     _socketOut.println("OK");
83    
84     inBound = _socketIn.readLine();
85     lastModified = inBound;
86    
87     boolean newConfig = _configManager.isModified(filelist, Long.parseLong(lastModified));
88    
89     if(newConfig) {
90     _socketOut.println("ERROR");
91     }
92     else {
93     _socketOut.println("OK");
94     }
95    
96     inBound = _socketIn.readLine();
97     if(!inBound.equals("ENDHEARTBEAT")) {
98     _socketOut.println("ERROR");
99     throw new IOException("protocol error - expecting:ENDHEARTBEAT got:" + inBound);
100     } else {
101     _socketOut.println("OK");
102     }
103 tdb 1.4
104 tdb 1.18 String date = new Long(System.currentTimeMillis()/((long) 1000)).toString();
105 tdb 1.19 String hostname = _socket.getInetAddress().getHostName().toLowerCase();
106 tdb 1.6 String ipadd = _socket.getInetAddress().getHostAddress();
107    
108 ajm 1.16 // run the service checks for this host
109 ajm 1.17 _logger.write(toString(), Logger.DEBUG, "Running service checks");
110 ajm 1.16 String checks = PluginServiceCheckManager.getInstance().runServiceChecks(hostname);
111    
112     // build the heartbeat packet
113     String xml = "<packet type=\"heartbeat\" machine_name=\""+hostname+"\" date=\""+date+"\" ip=\""+ipadd+"\">" + checks + "</packet>";
114    
115     // get it to be sent on
116 tdb 1.11 _queue.add(xml);
117 tdb 1.1
118     } catch (Exception e) {
119 tdb 1.20 _logger.write(toString(), Logger.ERROR, "ERROR: " + e);
120 tdb 1.1 }
121    
122     // Disconnect streams & socket
123     try {
124     _socketIn.close();
125     _socketOut.close();
126     _socket.close();
127     } catch (IOException e) {
128 tdb 1.8 _logger.write(toString(), Logger.ERROR, "exception on socket close");
129 tdb 1.1 }
130 tdb 1.14 _logger.write(toString(), Logger.DEBUG, "finished");
131 tdb 1.1 }
132    
133     /**
134     * Overrides the {@link java.lang.Object#toString() Object.toString()}
135     * method to provide clean logging (every class should have this).
136     *
137 ajm 1.10 * This uses the uk.ac.ukc.iscream.util.NameFormat class
138     * to format the toString()
139     *
140 tdb 1.1 * @return the name of this class and its CVS revision
141     */
142     public String toString() {
143 ajm 1.10 return FormatName.getName(
144     _name,
145     getClass().getName(),
146     REVISION);
147 tdb 1.1 }
148    
149     //---PRIVATE METHODS---
150    
151     //---ACCESSOR/MUTATOR METHODS---
152    
153     //---ATTRIBUTES---
154    
155 ajm 1.10 /**
156     * A reference to the configuration manager
157     */
158 tdb 1.8 ConfigurationManager _configManager = ReferenceManager.getInstance().getCM();
159 ajm 1.10
160     /**
161     * This is the friendly identifier of the
162     * component this class is running in.
163     * eg, a Filter may be called "filter1",
164     * If this class does not have an owning
165     * component, a name from the configuration
166     * can be placed here. This name could also
167     * be changed to null for utility classes.
168     */
169     private String _name = FilterMain.NAME;
170    
171     /**
172     * This holds a reference to the
173     * system logger that is being used.
174     */
175     private Logger _logger = ReferenceManager.getInstance().getLogger();
176    
177     /**
178     * The socket we are talking on
179     */
180 tdb 1.1 Socket _socket;
181 ajm 1.10
182     /**
183     * The input from the socket
184     */
185 tdb 1.1 BufferedReader _socketIn;
186 ajm 1.10
187     /**
188     * The output from the socket
189     */
190 tdb 1.1 PrintWriter _socketOut;
191 ajm 1.10
192     /**
193 tdb 1.11 * A reference to our Queue
194 ajm 1.10 */
195 tdb 1.11 Queue _queue;
196 tdb 1.1 //---STATIC ATTRIBUTES---
197    
198     }