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.17
Committed: Sun Feb 11 20:35:26 2001 UTC (23 years, 3 months ago) by ajm
Branch: MAIN
Changes since 1.16: +4 -3 lines
Log Message:
added a line of logging

File Contents

# Content
1 //---PACKAGE DECLARATION---
2 package uk.ac.ukc.iscream.filter;
3
4 //---IMPORTS---
5 import uk.ac.ukc.iscream.core.*;
6 import uk.ac.ukc.iscream.filter.*;
7 import uk.ac.ukc.iscream.componentmanager.*;
8 import java.net.Socket;
9 import java.io.InputStream;
10 import java.io.OutputStream;
11 import java.io.IOException;
12 import java.io.*;
13 import uk.ac.ukc.iscream.util.*;
14
15 /**
16 * This provides Host heartbeat functionality
17 *
18 * @author $Author: ajm4 $
19 * @version $Id: TCPReaderInit.java,v 1.16 2001/02/11 18:01:43 ajm4 Exp $
20 */
21 class TCPReaderInit extends Thread {
22
23 //---FINAL ATTRIBUTES---
24
25 /**
26 * The current CVS revision of this class
27 */
28 public final String REVISION = "$Revision: 1.16 $";
29
30 //---STATIC METHODS---
31
32 //---CONSTRUCTORS---
33
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 public TCPReaderInit(Socket socket, Queue queue) throws IOException {
42 _socket = socket;
43 _queue = queue;
44 // setup the reader & writer
45 _socketIn = new BufferedReader(new InputStreamReader(_socket.getInputStream()));
46 _socketOut = new PrintWriter(_socket.getOutputStream(), true);
47 _logger.write(toString(), Logger.SYSINIT, "created");
48 }
49
50 //---PUBLIC METHODS---
51
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 public void run() {
58 try {
59 //variables
60 String filelist = "";
61 String lastModified = "";
62 String inBound = "";
63
64 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
104 String date = new Long(System.currentTimeMillis()).toString();
105 String hostname = _socket.getInetAddress().getHostName();
106 String ipadd = _socket.getInetAddress().getHostAddress();
107
108 // run the service checks for this host
109 _logger.write(toString(), Logger.DEBUG, "Running service checks");
110 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 _queue.add(xml);
117
118 } catch (Exception e) {
119 _logger.write(toString(), Logger.ERROR, "ERROR: " + e.getMessage());
120 }
121
122 // Disconnect streams & socket
123 try {
124 _socketIn.close();
125 _socketOut.close();
126 _socket.close();
127 } catch (IOException e) {
128 _logger.write(toString(), Logger.ERROR, "exception on socket close");
129 }
130 _logger.write(toString(), Logger.DEBUG, "finished");
131 }
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 * This uses the uk.ac.ukc.iscream.util.NameFormat class
138 * to format the toString()
139 *
140 * @return the name of this class and its CVS revision
141 */
142 public String toString() {
143 return FormatName.getName(
144 _name,
145 getClass().getName(),
146 REVISION);
147 }
148
149 //---PRIVATE METHODS---
150
151 //---ACCESSOR/MUTATOR METHODS---
152
153 //---ATTRIBUTES---
154
155 /**
156 * A reference to the configuration manager
157 */
158 ConfigurationManager _configManager = ReferenceManager.getInstance().getCM();
159
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 Socket _socket;
181
182 /**
183 * The input from the socket
184 */
185 BufferedReader _socketIn;
186
187 /**
188 * The output from the socket
189 */
190 PrintWriter _socketOut;
191
192 /**
193 * A reference to our Queue
194 */
195 Queue _queue;
196 //---STATIC ATTRIBUTES---
197
198 }