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

# User Rev Content
1 tdb 1.1 //---PACKAGE DECLARATION---
2 tdb 1.7 package uk.org.iscream.client;
3 tdb 1.1
4     //---IMPORTS---
5 tdb 1.7 import uk.org.iscream.componentmanager.*;
6     import uk.org.iscream.core.*;
7     import uk.org.iscream.util.*;
8 tdb 1.2 import java.io.*;
9 tdb 1.1
10     /**
11     * Provides a feed to the webpage system.
12     *
13 tdb 1.9 * !! still needs a routine to "maintain" alerts !!
14     *
15 tdb 1.2 * @author $Author: tdb1 $
16 tdb 1.10 * @version $Id: WebFeeder.java,v 1.9 2001/03/15 04:03:24 tdb1 Exp $
17 tdb 1.1 */
18     public class WebFeeder {
19    
20     //---FINAL ATTRIBUTES---
21    
22     /**
23     * The current CVS revision of this class
24     */
25 tdb 1.10 public static final String REVISION = "$Revision: 1.9 $";
26 tdb 1.1
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 tdb 1.8 // don't need to cleanup latest data
45 tdb 1.9
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 tdb 1.10 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 tdb 1.9 }
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 tdb 1.1 }
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 tdb 1.4 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 tdb 1.2 // 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 tdb 1.3 String hostname = packet.getParam("packet.attributes.machine_name");
102 tdb 1.2 // set paths
103     String destDir = rootPath+"/"+latestSubDir+"/"+hostname;
104     String destFile = destDir+"/"+latestFileName;
105 tdb 1.3 // try to create directory
106 tdb 1.2 File outDir = new File(destDir);
107 tdb 1.3 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 tdb 1.2 }
114 tdb 1.3 }
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 tdb 1.2 }
136     }
137     else {
138 tdb 1.3 _logger.write(this.toString(), Logger.ERROR, "File not writeable: "+outFile.getPath());
139 tdb 1.2 }
140 tdb 1.1 }
141    
142     public void receiveAlert(Alert alert) {
143 tdb 1.5 // 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 tdb 1.9 File outDir = new File(destDir);
162 tdb 1.8 String destFile = destDir+"/"+alertFileName+"."+String.valueOf(alert.getInitialAlertTime());
163 tdb 1.9 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 tdb 1.10 outFile = new File(destFile+"."+Alert.alertLevels[alert.getLevel()]);
168 tdb 1.9 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 tdb 1.5 // 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 tdb 1.8 out = new PrintWriter(new FileWriter(outFile));
198 tdb 1.5 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 tdb 1.1 }
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 tdb 1.7 * This uses the uk.org.iscream.util.FormatName class
214 tdb 1.1 * 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 tdb 1.10
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 tdb 1.1 //---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     }