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.6
Committed: Thu Mar 8 23:26:03 2001 UTC (23 years, 2 months ago) by tdb
Branch: MAIN
Changes since 1.5: +3 -3 lines
Log Message:
Alert data is appended. This is not currently the best way to do it, as we have
no way of "cleaning" up. This will be discussed and resolved later on.

File Contents

# Content
1 //---PACKAGE DECLARATION---
2 package uk.ac.ukc.iscream.client;
3
4 //---IMPORTS---
5 import uk.ac.ukc.iscream.componentmanager.*;
6 import uk.ac.ukc.iscream.core.*;
7 import uk.ac.ukc.iscream.util.*;
8 import java.io.*;
9
10 /**
11 * Provides a feed to the webpage system.
12 *
13 * @author $Author: tdb1 $
14 * @version $Id: WebFeeder.java,v 1.5 2001/03/08 23:20:06 tdb1 Exp $
15 */
16 public class WebFeeder {
17
18 //---FINAL ATTRIBUTES---
19
20 /**
21 * The current CVS revision of this class
22 */
23 public static final String REVISION = "$Revision: 1.5 $";
24
25 //---STATIC METHODS---
26
27 /**
28 * Return a reference to the single class.
29 * Construct it if it does not already exist, otherwise just return the reference.
30 */
31 public static WebFeeder getInstance() {
32 if (_instance == null){
33 _instance = new WebFeeder();
34 }
35 return _instance;
36 }
37
38 //---CONSTRUCTORS---
39
40 private WebFeeder() {
41 // do something, or nothing.. but must be private
42 }
43
44 //---PUBLIC METHODS---
45
46 // TO BE COMPLETED
47 // The following two methods should process and save
48 // XMLPackets and Alerts, in a directory structure that
49 // has been defined by the web page designer.
50
51 // There may also be need to have a Thread to grab any
52 // required config (groups, "nice names, etc) and dump
53 // that to a file.
54
55 public void receiveXMLPacket(XMLPacket packet) {
56 String packetType = packet.getParam("packet.attributes.type");
57 if(packetType == null || !packetType.equals("data")) {
58 // bail out, without warning
59 // this is probably a heartbeat or similar
60 return;
61 }
62 // get config proxy
63 ConfigurationProxy cp = ConfigurationProxy.getInstance();
64 // get file locations
65 String rootPath, latestSubDir, latestFileName;
66 try {
67 rootPath = cp.getProperty("WebFeeder", "WebFeeder.rootPath");
68 latestSubDir = cp.getProperty("WebFeeder", "WebFeeder.latestSubDir");
69 latestFileName = cp.getProperty("WebFeeder", "WebFeeder.latestFileName");
70 } catch (PropertyNotFoundException e) {
71 _logger.write(this.toString(), Logger.ERROR, "Failed to get config for Latest Data: "+e);
72 // bail out
73 return;
74 }
75 // get raw data
76 String data = packet.printAll();
77 String hostname = packet.getParam("packet.attributes.machine_name");
78 // set paths
79 String destDir = rootPath+"/"+latestSubDir+"/"+hostname;
80 String destFile = destDir+"/"+latestFileName;
81 // try to create directory
82 File outDir = new File(destDir);
83 if(!outDir.exists()) {
84 if(!outDir.mkdirs()) {
85 // didn't exist, and we couldn't make it
86 _logger.write(this.toString(), Logger.ERROR, "Failed to create directory: "+outDir.getPath());
87 // bail out
88 return;
89 }
90 }
91 // directory has been made, check file exists
92 File outFile = new File(destFile);
93 if(!outFile.exists()) {
94 try {
95 outFile.createNewFile();
96 } catch (IOException e) {
97 _logger.write(this.toString(), Logger.ERROR, "Failed to create file: "+e);
98 // bail out
99 return;
100 }
101 }
102 // file should now exist
103 if(outFile.canWrite()) {
104 PrintWriter out;
105 try {
106 out = new PrintWriter(new FileWriter(outFile));
107 out.println(data);
108 out.close();
109 } catch (IOException e) {
110 _logger.write(this.toString(), Logger.ERROR, "Failed to write file: "+e);
111 }
112 }
113 else {
114 _logger.write(this.toString(), Logger.ERROR, "File not writeable: "+outFile.getPath());
115 }
116 }
117
118 public void receiveAlert(Alert alert) {
119 // get config proxy
120 ConfigurationProxy cp = ConfigurationProxy.getInstance();
121 // get file locations
122 String rootPath, alertSubDir, alertFileName;
123 try {
124 rootPath = cp.getProperty("WebFeeder", "WebFeeder.rootPath");
125 alertSubDir = cp.getProperty("WebFeeder", "WebFeeder.alertSubDir");
126 alertFileName = cp.getProperty("WebFeeder", "WebFeeder.alertFileName");
127 } catch (PropertyNotFoundException e) {
128 _logger.write(this.toString(), Logger.ERROR, "Failed to get config for Alert Data: "+e);
129 // bail out
130 return;
131 }
132 // get raw data
133 String data = alert.printAll();
134 String hostname = alert.getSource();
135 // set paths
136 String destDir = rootPath+"/"+alertSubDir+"/"+hostname;
137 String destFile = destDir+"/"+alertFileName;
138 // try to create directory
139 File outDir = new File(destDir);
140 if(!outDir.exists()) {
141 if(!outDir.mkdirs()) {
142 // didn't exist, and we couldn't make it
143 _logger.write(this.toString(), Logger.ERROR, "Failed to create directory: "+outDir.getPath());
144 // bail out
145 return;
146 }
147 }
148 // directory has been made, check file exists
149 File outFile = new File(destFile);
150 if(!outFile.exists()) {
151 try {
152 outFile.createNewFile();
153 } catch (IOException e) {
154 _logger.write(this.toString(), Logger.ERROR, "Failed to create file: "+e);
155 // bail out
156 return;
157 }
158 }
159 // file should now exist
160 if(outFile.canWrite()) {
161 PrintWriter out;
162 try {
163 out = new PrintWriter(new FileWriter(outFile.getPath(), true));
164 out.println(data);
165 out.close();
166 } catch (IOException e) {
167 _logger.write(this.toString(), Logger.ERROR, "Failed to write file: "+e);
168 }
169 }
170 else {
171 _logger.write(this.toString(), Logger.ERROR, "File not writeable: "+outFile.getPath());
172 }
173 }
174
175 /**
176 * Overrides the {@link java.lang.Object#toString() Object.toString()}
177 * method to provide clean logging (every class should have this).
178 *
179 * This uses the uk.ac.ukc.iscream.util.FormatName class
180 * to format the toString()
181 *
182 * @return the name of this class and its CVS revision
183 */
184 public String toString() {
185 return FormatName.getName(
186 _name,
187 getClass().getName(),
188 REVISION);
189 }
190
191 //---PRIVATE METHODS---
192
193 //---ACCESSOR/MUTATOR METHODS---
194
195 //---ATTRIBUTES---
196
197 /**
198 * This is the friendly identifier of the
199 * component this class is running in.
200 * eg, a Filter may be called "filter1",
201 * If this class does not have an owning
202 * component, a name from the configuration
203 * can be placed here. This name could also
204 * be changed to null for utility classes.
205 */
206 private String _name = ClientMain.NAME;
207
208 /**
209 * This holds a reference to the
210 * system logger that is being used.
211 */
212 private Logger _logger = ReferenceManager.getInstance().getLogger();
213
214 //---STATIC ATTRIBUTES---
215
216 /**
217 * A reference to the single instance of this class
218 */
219 private static WebFeeder _instance;
220
221 }