wcc 2.0.2 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/assets/conf.yml +1 -2
- data/assets/filter.d/changes_of.rb +1 -0
- data/assets/filter.d/matches.rb +1 -1
- data/assets/filter.d/rel_changes_of.rb +2 -1
- data/lib/wcc.rb +87 -24
- data/lib/wcc/diff.rb +1 -1
- data/lib/wcc/mail.rb +1 -0
- data/lib/wcc/version.rb +1 -1
- metadata +5 -7
- data/assets/filter.d/arg-test.rb +0 -9
- data/assets/filter.d/test.rb +0 -4
data/assets/conf.yml
CHANGED
@@ -6,6 +6,7 @@ conf:
|
|
6
6
|
# tag: wcc
|
7
7
|
# filterd: ./filter.d
|
8
8
|
# templated: ./template.d
|
9
|
+
# # default config assuming local mail server
|
9
10
|
# email:
|
10
11
|
# smtp:
|
11
12
|
# from: root@localhost
|
@@ -47,8 +48,6 @@ sites:
|
|
47
48
|
# These filters will be executed and every single one has to
|
48
49
|
# return 'true' for the user to be notified
|
49
50
|
filters:
|
50
|
-
- test
|
51
|
-
- arg-test: {number: 5, hello: world}
|
52
51
|
- only_changes_of: {at_least: 4, t: lines}
|
53
52
|
# Regex filter that performs matching against <scope> (one of full or diff)
|
54
53
|
- matches: {regex: '(normal|regex)[!]+', flags: i, scope: diff}
|
data/assets/filter.d/matches.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
|
2
2
|
# NOTE: the percentage may easily go above 100% when there are more
|
3
|
-
# changes than the whole site
|
3
|
+
# changes than the whole site had lines before.
|
4
4
|
|
5
5
|
WCC::Filters.add 'rel_changes_of' do |data,args|
|
6
|
+
next true if data.diffnil?
|
6
7
|
case args['percent_of']
|
7
8
|
when 'all_lines',nil
|
8
9
|
percent = data.diff.nlinesc.to_f / data.site.content.count("\n").+(1).to_f * 100
|
data/lib/wcc.rb
CHANGED
@@ -129,29 +129,57 @@ module WCC
|
|
129
129
|
|
130
130
|
if !File.exists?(self[:conf])
|
131
131
|
WCC.logger.fatal "Config file '#{self[:conf]}' does not exist!"
|
132
|
-
exit 1
|
132
|
+
Prog.exit 1
|
133
133
|
end
|
134
134
|
|
135
|
+
# register standard notificators - these are already loaded
|
136
|
+
Notificators.map 'email', MailNotificator
|
137
|
+
Notificators.map 'jabber', XMPPNotificator
|
138
|
+
Notificators.map 'syslog', SyslogNotificator
|
139
|
+
|
135
140
|
WCC.logger.debug "Load config from '#{self[:conf]}'"
|
136
141
|
|
137
142
|
# may be false if file is empty
|
138
143
|
yaml = YAML.load_file(self[:conf])
|
139
|
-
if yaml.is_a?(Hash) and
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
+
if yaml.is_a?(Hash) and yaml['conf'].is_a?(Hash)
|
145
|
+
|
146
|
+
# load MailNotificator and it's defaults even if the key is missing
|
147
|
+
# since email has always been the backbone of wcc
|
148
|
+
if not yaml['conf'].key?('email')
|
149
|
+
yaml['conf']['email'] = nil
|
150
|
+
end
|
144
151
|
|
145
|
-
|
146
|
-
|
147
|
-
|
152
|
+
yaml['conf'].each do |key,val|
|
153
|
+
case key
|
154
|
+
when 'cache_dir'
|
155
|
+
@options[:cache_dir] ||= val
|
156
|
+
when 'tag'
|
157
|
+
@options[:tag] ||= val
|
158
|
+
when 'filterd'
|
159
|
+
@options[:filter_dir] ||= val
|
160
|
+
when 'templated'
|
161
|
+
@options[:template_dir] ||= val
|
162
|
+
else
|
163
|
+
if not Notificators.mappings.include?(key)
|
164
|
+
plugin_name = "wcc-#{key}-notificator"
|
165
|
+
WCC.logger.info "Trying to load plugin #{plugin_name}..."
|
166
|
+
begin
|
167
|
+
require plugin_name
|
168
|
+
rescue LoadError
|
169
|
+
WCC.logger.error "Plugin #{plugin_name} not found - maybe try `gem install #{plugin_name}`"
|
170
|
+
next
|
171
|
+
end
|
172
|
+
end
|
173
|
+
Notificators.mappings[key].parse_conf(val).each { |k,v| @options[k] ||= v }
|
174
|
+
end
|
175
|
+
end
|
148
176
|
end
|
149
177
|
|
150
178
|
if self[:show_config]
|
151
179
|
Conf.default.merge(@options).each do |k,v|
|
152
180
|
puts " #{k.to_s} => #{self[k]}"
|
153
181
|
end
|
154
|
-
exit 0
|
182
|
+
Prog.exit 0
|
155
183
|
end
|
156
184
|
|
157
185
|
@recipients = {}
|
@@ -167,10 +195,20 @@ module WCC
|
|
167
195
|
yaml_rec[name].to_a.each do |yaml_way|
|
168
196
|
# TODO: find options and pass them to every notificator
|
169
197
|
if yaml_way.is_a?(Hash)
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
198
|
+
prim_key = yaml_way.keys.first # and only!
|
199
|
+
klass = Notificators.mappings[prim_key]
|
200
|
+
if klass.nil?
|
201
|
+
WCC.logger.error "Referenced notificator '#{prim_key}' not found!"
|
202
|
+
else
|
203
|
+
rec << klass.new(yaml_way[prim_key])
|
204
|
+
end
|
205
|
+
else
|
206
|
+
klass = Notificators.mappings[yaml_way]
|
207
|
+
if klass.nil?
|
208
|
+
WCC.logger.error "Referenced notificator '#{yaml_way}' not found!"
|
209
|
+
else
|
210
|
+
rec << klass.new
|
211
|
+
end
|
174
212
|
end
|
175
213
|
end
|
176
214
|
@recipients[name] = rec
|
@@ -214,7 +252,6 @@ module WCC
|
|
214
252
|
cookie = File.open(yaml_site['cookie'], 'r') { |f| f.read }
|
215
253
|
end
|
216
254
|
|
217
|
-
|
218
255
|
@sites << Site.new(
|
219
256
|
yaml_site['url'],
|
220
257
|
yaml_site['strip_html'] || true,
|
@@ -222,7 +259,8 @@ module WCC
|
|
222
259
|
frefs,
|
223
260
|
yaml_site['auth'] || {},
|
224
261
|
cookie,
|
225
|
-
yaml_site['check_interval'] || 5
|
262
|
+
yaml_site['check_interval'] || 5
|
263
|
+
)
|
226
264
|
end
|
227
265
|
|
228
266
|
WCC.logger.debug @sites.length.to_s + (@sites.length == 1 ? ' site' : ' sites') + " loaded\n" +
|
@@ -239,6 +277,20 @@ module WCC
|
|
239
277
|
def self.simulate?; self[:simulate] end
|
240
278
|
def self.[](key); Conf.instance[key] end
|
241
279
|
end
|
280
|
+
|
281
|
+
class Notificators
|
282
|
+
@@mappings = {}
|
283
|
+
|
284
|
+
# API method - add a mapping from conf string to class object
|
285
|
+
# @param [String] name the string to be used in conf.yml's conf entry
|
286
|
+
# @param [Class] klass the associated notifier class
|
287
|
+
def self.map(name, klass)
|
288
|
+
WCC.logger.debug "Register notificator #{klass.inspect} for #{name}"
|
289
|
+
@@mappings[name] = klass
|
290
|
+
end
|
291
|
+
|
292
|
+
def self.mappings; @@mappings end
|
293
|
+
end
|
242
294
|
|
243
295
|
class LogFormatter
|
244
296
|
def initialize(use_color = true)
|
@@ -362,11 +414,14 @@ module WCC
|
|
362
414
|
Dir.mkdir(Conf[:cache_dir]) unless File.directory?(Conf[:cache_dir])
|
363
415
|
|
364
416
|
if(Conf[:clean])
|
365
|
-
WCC.logger.warn "
|
417
|
+
WCC.logger.warn "Removing hash and diff files..."
|
366
418
|
Dir.foreach(Conf[:cache_dir]) do |f|
|
367
419
|
File.delete(Conf.file(f)) if f =~ /^.*\.(md5|site)$/
|
368
420
|
end
|
369
|
-
|
421
|
+
cache_file = Conf.file('cache.yml')
|
422
|
+
WCC.logger.warn "Removing timestamp cache..."
|
423
|
+
File.delete(cache_file) if File.exists?(cache_file)
|
424
|
+
Prog.exit 1
|
370
425
|
end
|
371
426
|
|
372
427
|
# read filter.d
|
@@ -409,16 +464,24 @@ module WCC
|
|
409
464
|
File.open(cache_file, 'w+') do |f| YAML.dump({"timestamps" => @@timestamps}, f) end
|
410
465
|
|
411
466
|
# shut down notificators
|
412
|
-
|
413
|
-
|
414
|
-
|
467
|
+
Notificators.mappings.each do |name,klass|
|
468
|
+
WCC.logger.debug "Shut down #{klass}"
|
469
|
+
klass.shut_down
|
470
|
+
end
|
415
471
|
end
|
416
472
|
|
417
473
|
def self.load_template(name)
|
418
474
|
t_path = File.join(Conf[:template_dir], name)
|
419
|
-
|
420
|
-
|
421
|
-
|
475
|
+
if File.exists?(t_path)
|
476
|
+
t = File.open(t_path, 'r') { |f| f.read }
|
477
|
+
# <> omit newline for lines starting with <% and ending in %>
|
478
|
+
return ERB.new(t, 0, "<>")
|
479
|
+
end
|
480
|
+
nil
|
481
|
+
end
|
482
|
+
|
483
|
+
def self.exit(errno)
|
484
|
+
Kernel::exit errno
|
422
485
|
end
|
423
486
|
|
424
487
|
private
|
data/lib/wcc/diff.rb
CHANGED
data/lib/wcc/mail.rb
CHANGED
data/lib/wcc/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wcc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 9
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 2.0.
|
9
|
+
- 3
|
10
|
+
version: 2.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Christian Nicolai
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-11-05 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: htmlentities
|
@@ -75,13 +75,11 @@ extra_rdoc_files:
|
|
75
75
|
files:
|
76
76
|
- assets/conf.yml
|
77
77
|
- assets/filter.d/and.rb
|
78
|
-
- assets/filter.d/arg-test.rb
|
79
78
|
- assets/filter.d/changes_of.rb
|
80
79
|
- assets/filter.d/matches.rb
|
81
80
|
- assets/filter.d/not.rb
|
82
81
|
- assets/filter.d/or.rb
|
83
82
|
- assets/filter.d/rel_changes_of.rb
|
84
|
-
- assets/filter.d/test.rb
|
85
83
|
- assets/template.d/mail.alt.erb
|
86
84
|
- assets/template.d/mail-body.html.erb
|
87
85
|
- assets/template.d/mail-body.plain.erb
|
@@ -104,7 +102,7 @@ files:
|
|
104
102
|
homepage: https://github.com/cmur2/wcc
|
105
103
|
licenses:
|
106
104
|
- Apache License Version 2.0
|
107
|
-
post_install_message: "NOTE: Remember to
|
105
|
+
post_install_message: "NOTE: Remember to `wcc-upgrade` your conf.yml directory!"
|
108
106
|
rdoc_options: []
|
109
107
|
|
110
108
|
require_paths:
|
data/assets/filter.d/arg-test.rb
DELETED
data/assets/filter.d/test.rb
DELETED