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/WebFeeder.java
Revision: 1.10
Committed: Thu Mar 15 04:42:13 2001 UTC (23 years, 2 months ago) by tdb
Branch: MAIN
Changes since 1.9: +38 -9 lines
Log Message:
Now properly cleans up files, and fixed the filename extension.

File Contents

# Content
1 //---PACKAGE DECLARATION---
2 package uk.org.iscream.client;
3
4 //---IMPORTS---
5 import uk.org.iscream.componentmanager.*;
6 import uk.org.iscream.core.*;
7 import uk.org.iscream.util.*;
8 import java.io.*;
9
10 /**
11 * Provides a feed to the webpage system.
12 *
13 * !! still needs a routine to "maintain" alerts !!
14 *
15 * @author $Author: tdb1 $
16 * @version $Id: WebFeeder.java,v 1.9 2001/03/15 04:03:24 tdb1 Exp $
17 */
18 public class WebFeeder {
19
20 //---FINAL ATTRIBUTES---
21
22 /**
23 * The current CVS revision of this class
24 */
25 public static final String REVISION = "$Revision: 1.9 $";
26
27 //---STATIC METHODS---
28
29 /**
30 * Return a reference to the single class.
31 * Construct it if it does not already exist, otherwise just return the reference.
32 */
33 public static WebFeeder getInstance() {
34 if (_instance == null){
35 _instance = new WebFeeder();
36 }
37 return _instance;
38 }
39
40 //---CONSTRUCTORS---
41
42 private WebFeeder() {
43 // do something, or nothing.. but must be private
44 // don't need to cleanup latest data
45
46 // -- cleanup old alerts
47 // get config proxy
48 ConfigurationProxy cp = ConfigurationProxy.getInstance();
49 // get file locations
50 String rootPath, alertSubDir, alertFileName;
51 try {
52 // work out where things are
53 rootPath = cp.getProperty("WebFeeder", "WebFeeder.rootPath");
54 alertSubDir = cp.getProperty("WebFeeder", "WebFeeder.alertSubDir");
55 File alertsDir = new File(rootPath+"/"+alertSubDir);
56 if(deleteContents(alertsDir)) {
57 _logger.write(this.toString(), Logger.DEBUG, "Deleted all files and directories from: "+rootPath+"/"+alertSubDir);
58 } else {
59 _logger.write(this.toString(), Logger.WARNING, "Failed to delete all files and directories from: "+rootPath+"/"+alertSubDir);
60 }
61 // cleanup complete
62 } catch (PropertyNotFoundException e) {
63 _logger.write(this.toString(), Logger.ERROR, "Failed to cleanup on construction, due to failing to get config for Alert Data: "+e);
64 // just leave it at that
65 }
66 }
67
68 //---PUBLIC METHODS---
69
70 // TO BE COMPLETED
71 // The following two methods should process and save
72 // XMLPackets and Alerts, in a directory structure that
73 // has been defined by the web page designer.
74
75 // There may also be need to have a Thread to grab any
76 // required config (groups, "nice names, etc) and dump
77 // that to a file.
78
79 public void receiveXMLPacket(XMLPacket packet) {
80 String packetType = packet.getParam("packet.attributes.type");
81 if(packetType == null || !packetType.equals("data")) {
82 // bail out, without warning
83 // this is probably a heartbeat or similar
84 return;
85 }
86 // get config proxy
87 ConfigurationProxy cp = ConfigurationProxy.getInstance();
88 // get file locations
89 String rootPath, latestSubDir, latestFileName;
90 try {
91 rootPath = cp.getProperty("WebFeeder", "WebFeeder.rootPath");
92 latestSubDir = cp.getProperty("WebFeeder", "WebFeeder.latestSubDir");
93 latestFileName = cp.getProperty("WebFeeder", "WebFeeder.latestFileName");
94 } catch (PropertyNotFoundException e) {
95 _logger.write(this.toString(), Logger.ERROR, "Failed to get config for Latest Data: "+e);
96 // bail out
97 return;
98 }
99 // get raw data
100 String data = packet.printAll();
101 String hostname = packet.getParam("packet.attributes.machine_name");
102 // set paths
103 String destDir = rootPath+"/"+latestSubDir+"/"+hostname;
104 String destFile = destDir+"/"+latestFileName;
105 // try to create directory
106 File outDir = new File(destDir);
107 if(!outDir.exists()) {
108 if(!outDir.mkdirs()) {
109 // didn't exist, and we couldn't make it
110 _logger.write(this.toString(), Logger.ERROR, "Failed to create directory: "+outDir.getPath());
111 // bail out
112 return;
113 }
114 }
115 // directory has been made, check file exists
116 File outFile = new File(destFile);
117 if(!outFile.exists()) {
118 try {
119 outFile.createNewFile();
120 } catch (IOException e) {
121 _logger.write(this.toString(), Logger.ERROR, "Failed to create file: "+e);
122 // bail out
123 return;
124 }
125 }
126 // file should now exist
127 if(outFile.canWrite()) {
128 PrintWriter out;
129 try {
130 out = new PrintWriter(new FileWriter(outFile));
131 out.println(data);
132 out.close();
133 } catch (IOException e) {
134 _logger.write(this.toString(), Logger.ERROR, "Failed to write file: "+e);
135 }
136 }
137 else {
138 _logger.write(this.toString(), Logger.ERROR, "File not writeable: "+outFile.getPath());
139 }
140 }
141
142 public void receiveAlert(Alert alert) {
143 // get config proxy
144 ConfigurationProxy cp = ConfigurationProxy.getInstance();
145 // get file locations
146 String rootPath, alertSubDir, alertFileName;
147 try {
148 rootPath = cp.getProperty("WebFeeder", "WebFeeder.rootPath");
149 alertSubDir = cp.getProperty("WebFeeder", "WebFeeder.alertSubDir");
150 alertFileName = cp.getProperty("WebFeeder", "WebFeeder.alertFileName");
151 } catch (PropertyNotFoundException e) {
152 _logger.write(this.toString(), Logger.ERROR, "Failed to get config for Alert Data: "+e);
153 // bail out
154 return;
155 }
156 // get raw data
157 String data = alert.printAll();
158 String hostname = alert.getSource();
159 // set paths
160 String destDir = rootPath+"/"+alertSubDir+"/"+hostname;
161 File outDir = new File(destDir);
162 String destFile = destDir+"/"+alertFileName+"."+String.valueOf(alert.getInitialAlertTime());
163 File outFile;
164 // check if we're at a special "end case" (OK or FINAL)
165 if(alert.getLevel()==0 || alert.getLevel()==Alert.alertLevels.length-1) {
166 File oldFile = new File(destFile);
167 outFile = new File(destFile+"."+Alert.alertLevels[alert.getLevel()]);
168 if(!oldFile.renameTo(outFile)) {
169 _logger.write(this.toString(), Logger.WARNING, "Failed to rename old file, "+oldFile.getPath()+" to new file, "+outFile.getPath());
170 }
171 } else {
172 outFile = new File(destFile);
173 }
174 // try to create directory
175 if(!outDir.exists()) {
176 if(!outDir.mkdirs()) {
177 // didn't exist, and we couldn't make it
178 _logger.write(this.toString(), Logger.ERROR, "Failed to create directory: "+outDir.getPath());
179 // bail out
180 return;
181 }
182 }
183 // directory has been made, check file exists
184 if(!outFile.exists()) {
185 try {
186 outFile.createNewFile();
187 } catch (IOException e) {
188 _logger.write(this.toString(), Logger.ERROR, "Failed to create file: "+e);
189 // bail out
190 return;
191 }
192 }
193 // file should now exist
194 if(outFile.canWrite()) {
195 PrintWriter out;
196 try {
197 out = new PrintWriter(new FileWriter(outFile));
198 out.println(data);
199 out.close();
200 } catch (IOException e) {
201 _logger.write(this.toString(), Logger.ERROR, "Failed to write file: "+e);
202 }
203 }
204 else {
205 _logger.write(this.toString(), Logger.ERROR, "File not writeable: "+outFile.getPath());
206 }
207 }
208
209 /**
210 * Overrides the {@link java.lang.Object#toString() Object.toString()}
211 * method to provide clean logging (every class should have this).
212 *
213 * This uses the uk.org.iscream.util.FormatName class
214 * to format the toString()
215 *
216 * @return the name of this class and its CVS revision
217 */
218 public String toString() {
219 return FormatName.getName(
220 _name,
221 getClass().getName(),
222 REVISION);
223 }
224
225 //---PRIVATE METHODS---
226
227 /**
228 * Iterates through dir (a directory) and deletes
229 * all files and subdirectories.
230 *
231 * @param dir the directory to clear
232 * @return true if it succeeded
233 */
234 private boolean deleteContents(File dir) {
235 boolean success = true;
236 if(dir.isDirectory()) {
237 // is a directory
238 File[] contents = dir.listFiles();
239 for(int i=0; i < contents.length; i++) {
240 File sub = contents[i];
241 if(sub.isDirectory()) {
242 // lets get recursive
243 success = success & deleteContents(sub);
244 }
245 // it's a file or empty dir
246 success = success & sub.delete();
247 }
248 }
249 else {
250 // not a directory?
251 success=false;
252 }
253 return success;
254 }
255
256 //---ACCESSOR/MUTATOR METHODS---
257
258 //---ATTRIBUTES---
259
260 /**
261 * This is the friendly identifier of the
262 * component this class is running in.
263 * eg, a Filter may be called "filter1",
264 * If this class does not have an owning
265 * component, a name from the configuration
266 * can be placed here. This name could also
267 * be changed to null for utility classes.
268 */
269 private String _name = ClientMain.NAME;
270
271 /**
272 * This holds a reference to the
273 * system logger that is being used.
274 */
275 private Logger _logger = ReferenceManager.getInstance().getLogger();
276
277 //---STATIC ATTRIBUTES---
278
279 /**
280 * A reference to the single instance of this class
281 */
282 private static WebFeeder _instance;
283
284 }