ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/server/build/etc/system.conf
(Generate patch)

Comparing projects/cms/source/server/build/etc/system.conf (file contents):
Revision 1.38 by tdb, Fri Mar 16 05:28:00 2001 UTC vs.
Revision 1.73 by tdb, Fri Feb 28 15:19:09 2003 UTC

# Line 5 | Line 5
5   # configuration system has this file as its
6   # root of configuration
7   #
8 + # This is a working sample configuration, which
9 + # aims to provide a working "out of the box"
10 + # setup, aswell as a some example configuration.
11 + #
12   # $Author$
13   # $Id$
14   #
15 + # http://www.i-scream.org.uk/
16 + #
17 +
18   ############################################################
19   #### Configuration Files & Groups
20   ############################################################
21  
22 < # for computing machines
23 < group.computing=Host.129.12.4.*;
24 < config.computing=computing.conf
22 > # All components, such as hosts, will take their configuration
23 > # as given in this file. Unless, that is, they have an extra
24 > # configuration file specified here, or they're in a group
25 > # that has a configuration file. If this is the case the extra
26 > # configuration will override what is given in this file.
27  
28 < # for library machines
29 < group.library=Host.129.12.58.*;
30 < config.library=library.conf
28 > # We can define an extra configuration file for any component
29 > # of the system. This is done by specifying the following:
30 > #
31 > # config.component=someconfigfile.conf
32 > #
33 > # Component names will be defined in the documentation for
34 > # the component. An example is that a host component is
35 > # known by the name "Host.hostname" or "Host.ip".
36 > # It is also possible to use the wildcard "*" in a
37 > # hostname or IP address.
38  
39 < # for SSB machines
40 < group.ssb=Host.stue*.ukc.ac.uk;
41 < config.ssb=ssb.conf
39 > # This defines that server.example.com has some extra
40 > # configuration in the file 'server.conf'.
41 > config.Host.server.example.com=exserver.conf
42  
43 < # mySQL configuration
44 < config.mySQL=mySQL.conf
43 > # All webservers are placed in a group named 'www'.
44 > group.www=Host.www1.example.com;Host.www2.example.com
45 > # Then we define some extra config for them.
46 > config.www=webservers.conf
47  
48 + # Our workstations are in their own subnet.
49 + group.workstations=Host.192.168.10.*;
50 + # They can have their own config too.
51 + config.workstations=workstations.conf
52 +
53 + # Any hosts not specified by now have the default
54 + # config as given in this file.
55 +
56 + # Another component of the system is the mySQL
57 + # database part of the server call the DBInterface.
58 + # This has it's own config so the passwords for the
59 + # mySQL database can be kept seperate.
60 + #config.mySQL=mySQL.conf
61 +
62 +
63   ############################################################
64   #### Misc system-wide configuration
65   ############################################################
66  
67 < # the time (in seconds) that checks should be made for
68 < # changes in configuration
67 > # The ConfigurationProxy caches configuration for various
68 > # parts of the server. This setting defines how often, in
69 > # seconds, the proxy will check if the data it contains
70 > # is still valid.
71   ConfigurationProxy.updateTime=60
72  
73 < # The time interval at which the Queue's should be monitored
74 < Queue.MonitorInterval=15
73 > # The internal Queue's can be monitored. This specifies
74 > # the interval, in seconds, at which their state should
75 > # be monitored.
76 > Queue.MonitorInterval=300
77 > # The maximum size a Queue can be before items are
78 > # dropped when new ones arrive.
79 > Queue.SizeLimit=1000
80 > # And which items we should drop when the queue is full
81 > # and new items arrive. Choices are:
82 > # RANDOM - drop a random item from the queue
83 > # FIRST  - drop the first item from the queue
84 > # LAST   - drop the last item from the queue
85 > # DROP   - drop the new item from the queue
86 > Queue.RemoveAlgorithm=FIRST
87  
88 + # The XMLCache caches data passing through the system.
89 + # This setting specifies the time, in seconds, at which
90 + # the caches contents will be rotated. In real terms
91 + # this means the minimum age at which an XMLPacket can
92 + # be before it is up for deletion from the cache.
93 + XMLCache.cleanupPeriod=30
94  
95  
96   ############################################################
97   #### FilterManager configuration
98   ############################################################
99  
100 < # The default port to listen for new host connections
100 > # The FilterManager accepts connections from hosts
101 > # upon startup. It provides them with configuration
102 > # and details of which filter to talk to. This setting
103 > # specifies which port (TCP) it listens on.
104   FilterManager.listenPort=4567
105  
106 + # An Access Control List for the FilterManager. One
107 + # might consider something like this:
108 + #
109 + # FilterManager.ACL=DEFAULT:DENY;*.example.com:ALLOW
110 + FilterManager.ACL=DEFAULT:ALLOW
111  
112  
113   ############################################################
114   #### Filter configuration
115   ############################################################
116  
117 < # The default port for Filter's to listen on
117 > # A Filter accepts data from hosts on a UDP port. It is
118 > # specified here.
119   Filter.UDPListenPort=4589
58 Filter.TCPListenPort=4589
120  
121 < # Plugin Information
122 < Filter.PluginsPackage=uk.org.iscream.filter.plugins
123 < Filter.Plugins=TypeChecker;EnforceEssentialData
121 > # Filters contain plugins for checking the data passing
122 > # through them. This plugins do the job of "filtering".
123 > # This setting specifies the java package they're
124 > # contained in.
125 > Filter.PluginsPackage=uk.org.iscream.cms.server.filter.plugins
126 > # And the names of the plugins to be loaded.
127 > Filter.Plugins=TypeChecker;EnforceEssentialData;SourceChecker
128  
129 < # The name for the root filter
129 > # The special filter known as the "Root Filter" needs
130 > # a name within the system.
131   RootFilter.name=root
132  
133 < # The default parent filter (should almost always be the same as Filter.rootFilter)
133 > # Every Filter, except the root, needs a parent to
134 > # send their data to. This is usually the root filter,
135 > # although in more complex setups it might be another
136 > # filter - giving a tree structure.
137   Filter.parentFilter=root
138  
139 + # A Filter can accept data through UDP, or from
140 + # an upstream Filter (CORBA). These methods can be
141 + # individually turned of on a filter. The default
142 + # is to have them all on.
143 + # (comment or set to 0 to disable)
144 + Filter.ActivateUDPReader=1
145 + Filter.ActivateCORBAReader=1
146  
147 + # We can also specify Access Control Lists for the
148 + # UDP input of the Filters. One might want something
149 + # restrictive like this:
150 + #
151 + # Filter.UDPACL=DEFAULT:DENY;*.example.com:ALLOW
152 + Filter.UDPACL=DEFAULT:ALLOW
153  
154 + # A Filter plugin called the SourceChecker verifies
155 + # that packets come from permitted hosts. It is
156 + # given an ACL to check the hosts against. A possible
157 + # ACL might be:
158 + #
159 + # Filter.SourceCheckerPluginACL=DEFAULT:DENY;*.example.com:ALLOW
160 + Filter.SourceCheckerPluginACL=DEFAULT:ALLOW
161 +
162 +
163   ############################################################
164   #### Root filter interfaces configuration
165   ############################################################
166  
167 < # Comment either of these (or delete them) and
168 < # that interface won't be started
167 > # The Root FIlter can send data to various upstream
168 > # data processors. There are two of these at present
169 > # in the server - the DBInterface and the ClientInterface.
170 > # Their component names are given here as defined below.
171 > # (the DBInterface is switched off - commented - by default)
172 > #RootFilter.dbInterfaceName=database
173   RootFilter.realtimeInterfaceName=realtimeclients
79 RootFilter.dbInterfaceName=database
174  
175  
82
176   ############################################################
177   #### Client interface configuration
178   ############################################################
179  
180 < # The port for the client interface to listen on
180 > # The client interface listens for connections from clients
181 > # on a TCP port. It is specified here.
182   ClientInterface.listenPort=4510
183 + # The component name for the Client Interface. This should
184 + # match the name specified to the Root Filter above.
185 + ClientInterface.name=realtimeclients
186  
187 + # The Client Interface has two channels, control and data.
188 + # Each of these can have an ACL for allowing connections.
189 + # As per previous examples in this configuration file they
190 + # could be set restrictively, but we'll leave them open
191 + # by default
192 + ClientInterface.TCPControlChannelACL=DEFAULT:ALLOW
193 + ClientInterface.TCPDataChannelACL=DEFAULT:ALLOW
194  
195  
196   ############################################################
197 + #### Database interface configuration
198 + ############################################################
199 +
200 + # The name for the Database Interface. This should match
201 + # the name given to the Root Filter.
202 + DBInterface.name=database
203 +
204 +
205 + ############################################################
206   #### Host Configuration
207   ############################################################
208  
209 < # The default filter for a new host
210 < Host.filter=computingFilter;
209 > # A host can use any filter. We'll set the default filter
210 > # for all hosts to be 'filter1'. This can be a list.
211 > Host.filter=filter1;
212  
213 < # The default update times for a new host
214 < Host.UDPUpdateTime=10
101 < Host.TCPUpdateTime=60
102 < Host.AveragerUpdateTime=5
213 > # Hosts send data every UDPUpdateTime, in seconds.
214 > Host.UDPUpdateTime=60
215  
216 < # The services checks to run on a host
217 < Host.serviceChecksPackage=uk.org.iscream.filter.plugins
218 < Host.serviceChecks=HTTP;SMTP;POP3;SSH;FTP;IMAP;Telnet
216 > # How long a hosts config is valid for (a TTL effectively)
217 > # after this time, in seconds, has passed a host should
218 > # consider it's configuration invalid and check for a new
219 > # configuration as soon as it can.
220 > Host.ConfigTTL=3600
221  
222 + # We can run service checks on a host. The java package
223 + # which contains them is specified here.
224 + Host.serviceChecksPackage=uk.org.iscream.cms.server.filter.plugins
225  
226  
227   ############################################################
228   #### Monitor Configuration
229   ############################################################
230  
231 < # the monitors to run
232 < Monitor.PluginsPackage=uk.org.iscream.client.monitors
233 < Monitor.Plugins=CPU;Disk;Memory;Swap;Services;Heartbeat;WebFeeder;
231 > # Monitors allow data to be watched for possible problems.
232 > # This setting specifies which java package they're in.
233 > Monitor.PluginsPackage=uk.org.iscream.cms.server.client.monitors
234 > # And which ones should be loaded.
235 > Monitor.Plugins=CPU;Load;Process;Disk;Memory;Swap;Services;\
236 >                Heartbeat;Queue;UserCount;WebFeeder;
237  
238 + # Alerts timeout after a given time in seconds and go up
239 + # to the next level. These can be overridden for monitors
240 + # on an individual basis.
241 + Monitor.alertTimeout.NOTICE=60
242 + Monitor.alertTimeout.WARNING=900
243 + Monitor.alertTimeout.CAUTION=1800
244 + Monitor.alertTimeout.CRITICAL=3600
245  
246 < ## CPU monitor configuration
247 < # threshold values
248 < #
249 < # note: if the UPPER threshold is broken,
250 < # the alertTimeout values are halved.
251 < # This is to escalate the alert quicker.
246 > ## Threshold values
247 > #
248 > # Here we specify the threshold for each monitor. When
249 > # a threshold is broken an alert is raised. If the
250 > # UPPER threshold is broken the alertTimeout values
251 > # given above are halved to make the alert escalate
252 > # quicker.
253 >
254 > # CPU monitor threshold values
255   Monitor.CPU.threshold.LOWER=90
256 < Monitor.CPU.threshold.UPPER=99
256 > Monitor.CPU.threshold.UPPER=95
257  
258 < # timings of the alerts (in seconds)
259 < Monitor.CPU.alertTimeout.NOTICE=60
260 < Monitor.CPU.alertTimeout.WARNING=900
131 < Monitor.CPU.alertTimeout.CAUTION=1800
132 < Monitor.CPU.alertTimeout.CRITICAL=3600
258 > # Load monitor threshold values
259 > Monitor.Load.threshold.LOWER=10.0
260 > Monitor.Load.threshold.UPPER=20.0
261  
262 + # Process Count threshold values
263 + Monitor.Process.threshold.LOWER=500
264 + Monitor.Process.threshold.UPPER=1000
265  
266 < ## Memory monitor configuration
136 < # threshold values
137 < #
138 < # note: if the UPPER threshold is broken,
139 < # the alertTimeout values are halved.
140 < # This is to escalate the alert quicker.
266 > # Memory monitor threshold values
267   Monitor.Memory.threshold.LOWER=80
268   Monitor.Memory.threshold.UPPER=90
269 + # Whether to include 'cache' in the 'free' value
270 + # (1 is true, anything else is false)
271 + Monitor.Memory.useCacheAsFree=1
272  
273 < # timings of the alerts (in seconds)
145 < Monitor.Memory.alertTimeout.NOTICE=60
146 < Monitor.Memory.alertTimeout.WARNING=900
147 < Monitor.Memory.alertTimeout.CAUTION=1800
148 < Monitor.Memory.alertTimeout.CRITICAL=3600
149 <
150 <
151 < ## Swap monitor configuration
152 < # threshold values
153 < #
154 < # note: if the UPPER threshold is broken,
155 < # the alertTimeout values are halved.
156 < # This is to escalate the alert quicker.
273 > # Swap monitor threshold values
274   Monitor.Swap.threshold.LOWER=80
275   Monitor.Swap.threshold.UPPER=90
276  
277 < # timings of the alerts (in seconds)
278 < Monitor.Swap.alertTimeout.NOTICE=60
279 < Monitor.Swap.alertTimeout.WARNING=900
163 < Monitor.Swap.alertTimeout.CAUTION=1800
164 < Monitor.Swap.alertTimeout.CRITICAL=3600
277 > # UserCount monitor threshold values
278 > Monitor.UserCount.threshold.LOWER=100
279 > Monitor.UserCount.threshold.UPPER=200
280  
281 + # Disk monitor threshold values
282 + Monitor.Disk.threshold.LOWER=90
283 + Monitor.Disk.threshold.UPPER=95
284 + # Thresholds given are PERCENTAGE or VALUE
285 + # where PERCENTAGE is a percentage of disk in use
286 + # and VALUE is an absolute value of space free
287 + Monitor.Disk.thresholdMeasure=PERCENTAGE
288  
289 < ## Disk monitor configuration
290 < # threshold values
291 < #
292 < # note: if the UPPER threshold is broken,
293 < # the alertTimeout values are halved.
294 < # This is to escalate the alert quicker.
295 < Monitor.Disk.threshold.LOWER=80
174 < Monitor.Disk.threshold.UPPER=90
289 > # Queue monitor threshold values
290 > Monitor.Queue.threshold.LOWER=50
291 > Monitor.Queue.threshold.UPPER=80
292 > # Thresholds given are PERCENTAGE or VALUE
293 > # where PERCENTAGE is a percentage of the queue in use
294 > # and VALUE is an absolute value of free space
295 > Monitor.Queue.thresholdMeasure=PERCENTAGE
296  
297 < # timings of the alerts (in seconds)
177 < Monitor.Disk.alertTimeout.NOTICE=60
178 < Monitor.Disk.alertTimeout.WARNING=900
179 < Monitor.Disk.alertTimeout.CAUTION=1800
180 < Monitor.Disk.alertTimeout.CRITICAL=3600
181 <
182 <
183 < ## Services monitor configuration
184 < # threshold values
297 > # Services monitor threshold values
298   #
299   # THE SERVICES MONITOR USES A HACK
300   # WHEREBY IT USES THE SERVICE STATUS
301 < # AS THE THRESHOLD LEVEL.  THIS SHOULD
301 > # AS THE THRESHOLD LEVEL. THIS SHOULD
302   # BE LOOKED AT!
303   #
304 < # note: if the UPPER threshold is broken,
305 < # the alertTimeout values are halved.
193 < # This is to escalate the alert quicker.
194 < #Monitor.Services.threshold.LOWER=120
195 < #Monitor.Services.threshold.LOWER=300
196 <
197 < # timings of the alerts (in seconds)
198 < Monitor.Services.alertTimeout.NOTICE=60
199 < Monitor.Services.alertTimeout.WARNING=900
200 < Monitor.Services.alertTimeout.CAUTION=1800
201 < Monitor.Services.alertTimeout.CRITICAL=3600
202 <
203 < # Make sure we shut up eventually
304 > # how many times we should be at the highest level before
305 > # we go to a FINAL alert
306   Monitor.Services.reachFINALcount=5
307  
308 <
207 < ## Heartbeat monitor configuration
208 < # threshold values
209 < #
210 < # note: if the UPPER threshold is broken,
211 < # the alertTimeout values are halved.
212 < # This is to escalate the alert quicker.
213 < Monitor.Heartbeat.checkPeriod=50
308 > # Heartbeat threshold values
309   # these are values in seconds from when the heartbeat
310   # was *expected* to arrive (ie. last + hearbeat period)
311 < Monitor.Heartbeat.threshold.LOWER=120
311 > Monitor.Heartbeat.threshold.LOWER=180
312   Monitor.Heartbeat.threshold.UPPER=300
313 <
314 < # timings of the alerts (in seconds)
315 < Monitor.Heartbeat.alertTimeout.NOTICE=60
316 < Monitor.Heartbeat.alertTimeout.WARNING=900
222 < Monitor.Heartbeat.alertTimeout.CAUTION=1800
223 < Monitor.Heartbeat.alertTimeout.CRITICAL=3600
224 <
225 < # this means it will reach a FINAL level,
226 < # and thus the host will be removed from the monitor list,
227 < # if the highest level alert is reached and occours this
228 < # number of times.
229 < #
230 < # int this setup, that means 5 CRITICAL alerts would occour
231 < # on a Heartbeat before reaching FINAL.
232 < # If this value is wrong or not present, FINAL is never reached
233 < #
313 > # this is how often we will run a "check" of heartbeats
314 > Monitor.Heartbeat.checkPeriod=50
315 > # how many times we should be at the highest level before
316 > # we go to a FINAL alert
317   Monitor.Heartbeat.reachFINALcount=5
318 + # list of hosts we expect to have at startup
319 + # this ensures we notice hosts that aren't running, not
320 + # just those that have gone down recently.
321 + #Monitor.Heartbeat.initialHosts=importantserver.example.com;myserver.example.com
322  
323 +
324   ############################################################
325   #### Alerter Configuration
326   ############################################################
327 < # The following var's are understood by ALL alerters for messages
327 > # The following variables are understood by ALL alerters
328 > # for messages. They will be substituted for their
329 > # appropriate value.
330   #
331   # %level%               - the alert level (eg, WARNING)
332   # %threshold%           - the threshold broken (eg, LOWER)
# Line 249 | Line 339 | Monitor.Heartbeat.reachFINALcount=5
339   # %timeOfFirstAlert%    - the time the first alert was sent
340   #
341  
342 < # alerters to run
343 < Alerter.PluginsPackage=uk.org.iscream.client.alerters
344 < Alerter.Plugins=EMail;IRC;WebFeeder;
342 > # The java package containing the alerters
343 > Alerter.PluginsPackage=uk.org.iscream.cms.server.client.alerters
344 > # And the names of the ones to activate
345 > # You might want to turn them all on, but we only activate
346 > # two basic ones by default.
347 > # Alerter.Plugins=EMail;IRC;WebFeeder;Logging;
348 > Alerter.Plugins=WebFeeder;Logging;
349  
350 < # EMail alerter configuration
350 > # Configuration for the EMail alerter
351 > # The level alerts have to bypass to be e-mailed out
352   Alerter.EMail.level = WARNING
353 < Alerter.EMail.destList = dev@i-scream.org.uk
354 < Alerter.EMail.sender = dev@i-scream.org.uk
355 < Alerter.EMail.smtpServer = mercury.ukc.ac.uk
353 > # A list of people to send alerts to
354 > Alerter.EMail.destList = me@example.com
355 > # The sender of the e-mail
356 > Alerter.EMail.sender = me@example.com
357 > # The SMTP server to send alerts to
358 > Alerter.EMail.smtpServer = smtp.example.com
359 > # The subject line of the e-mail
360   Alerter.EMail.subject = i-scream alert: %level% alert on %source% for %attributeName%
361 + # The message in the e-mail
362   Alerter.EMail.message = The i-scream distributed central monitoring system has\nraised a %level% alert for the host %source%.\n\nThe value for %attributeName% of %value% has exceeded the\n%threshold% threshold value of %thresholdValue%.\n\nThis alert was originally raised at %timeOfFirstAlert%,\nwhich was %timeSinceFirstAlert% ago.\n\nThe next alert (should one occur) will be sent in %timeTillNextAlert%.
363  
364 <
365 < # IRC alerter configuration
364 > # Configuration for the IRC alerter
365 > # The level alerts have to bypass to be sent
366   Alerter.IRC.level = OK
367 < Alerter.IRC.IRCServer = killigrew.ukc.ac.uk
367 > # The IRC server name
368 > Alerter.IRC.IRCServer = irc.example.com
369 > # and it's port
370   Alerter.IRC.IRCPort = 6667
371 + # A list of nicks to try and be
372   Alerter.IRC.nickList = iscreamBot;_iscreamBot;i-screamBot
373 + # Username to be
374   Alerter.IRC.user = i-scream
375 < Alerter.IRC.comment = i-scream alerting bot
375 > # Responses to CTCP prods
376 > Alerter.IRC.comment = i-scream alerting bot (based on PircBot)
377 > Alerter.IRC.finger = i-scream alerting bot (based on PircBot)
378 > # Channel to join
379   Alerter.IRC.channel = #i-scream
380 + # Message to use when sending an alert
381   Alerter.IRC.message = %level%: %attributeName% on %source% has passed %threshold%(%thresholdValue%) threshold with %value% - time till next alert (should one occur), %timeTillNextAlert%
382 + # How long to wait before reconnecting
383   Alerter.IRC.reconnectDelay = 30
384 + # Notice to send when starting up
385   Alerter.IRC.startupNotice = i-scream alerting bot activated
386 + # Commands the bot will recognise
387   Alerter.IRC.stopCommand = stop alerts
388   Alerter.IRC.startCommand = start alerts
389   Alerter.IRC.lastAlertCommand = last alert
# Line 283 | Line 394 | Alerter.IRC.uptimeCommand = uptime
394   Alerter.IRC.timeSinceLastAlertCommand = time since last alert
395   Alerter.IRC.versionCommand = version
396   Alerter.IRC.helpCommand = help
397 + # Message to send when the bot is addressed and
398 + # doesn't understand the command
399   Alerter.IRC.rejectMessage = sorry, I don't understand your request
400  
401 + # Configuration for the Logging Alerter
402 + # This alerter writes alerts to the i-scream logfile.
403 + # The level alerts have to bypass to be logged
404 + Alerter.Logging.level = WARNING
405 + # The message to use when logging the alert
406 + Alerter.Logging.message = %level%: %attributeName% on %source% has passed %threshold%(%thresholdValue%) threshold with %value%
407 +
408 +
409   ############################################################
410   #### WebFeeder Configuration
411   ############################################################
412  
413 < # Define these (one or both_ to turn on the WebFeeder's,
414 < # comment it to turn them off
413 > # The WebFeeder drops alerts and latest data in to a
414 > # directory for the web interface to use. It is essentially
415 > # the link between the web interface and the server.
416 >
417 > # Set these to something to tell the WebFeeder to drop
418 > # latest data, alerts, or both. Comment themt o disable.
419   WebFeeder.latestActive = true
420   WebFeeder.alertActive = true
421  
422 < # Check period in seconds (for cleaning stale/old alerts)
423 < WebFeeder.checkPeriod = 1800
422 > # We can make the WebFeeder only drop alerts that go
423 > # past a certain level. The default is "OK", which makes
424 > # all alerts get passed on.
425 > Alerter.WebFeeder.level = OK
426  
427 + # The WebFeeder cleans out old and stale alerts when it
428 + # performs a check. This setting is the period, in seconds,
429 + # at which a check happens.
430 + WebFeeder.checkPeriod = 120
431 +
432   # Delete alerts older than this, in seconds.
433 < # Files are only check every WebFeeder.checkPeriod seconds.
302 < WebFeeder.alertDeleteOlderThan = 3600
433 > WebFeeder.alertDeleteOlderThan = 300
434  
435 < # Root Path
436 < WebFeeder.rootPath = /usr/local/proj/co600_10/webroot
435 > # Data will be dropped to a subdirectory (specified
436 > # below) of this directory.
437 > WebFeeder.rootPath = /web/i-scream
438  
439 < # Latest Data
439 > # SubDir is the directory below rootPath which latest
440 > # data will be placed in. Below that a directory will
441 > # be created with the machine name, and a file named
442 > # FileName (specified here) will be created containg
443 > # the data.
444   WebFeeder.latestSubDir = latest
445   WebFeeder.latestFileName = latest_data
446  
447 < # Alert Data
447 > # As above, but for the alerts.
448   WebFeeder.alertSubDir = alert
449   WebFeeder.alertFileName = alert_data
450  
315 ############################################################
451  
452 + ############################################################

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines