log_master 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +41 -2
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/bin/log_master +32 -0
- data/lib/log_master/director.rb +22 -3
- data/log_master.gemspec +9 -8
- data/spec/director_spec.rb +2 -3
- metadata +7 -8
- data/lib/log_master/rake/log_task.rb +0 -20
- data/tasks/log_master.rake +0 -18
data/README.rdoc
CHANGED
@@ -1,6 +1,45 @@
|
|
1
|
-
|
1
|
+
== log_master
|
2
2
|
|
3
|
-
|
3
|
+
A simple library for mailing log (or whatever) files back to you!
|
4
|
+
|
5
|
+
This was written as a failsafe for cron tasks who's output we wanted conditionally sent to
|
6
|
+
one email address or another. The idea is that under normal conditions you don't want to spam
|
7
|
+
your inbox with emails stating 'everything is fine.' Instead you can have it go directly into
|
8
|
+
archive unless it has some idea that something is going wrong.
|
9
|
+
|
10
|
+
== Installation
|
11
|
+
$ sudo gem install log_master
|
12
|
+
|
13
|
+
== Instructions
|
14
|
+
$ log_master -p [--log-pattern] PATTERN [-c | --config PATH]
|
15
|
+
|
16
|
+
Where PATTERN is a glob representing the files you would like to email and PATH is the path to
|
17
|
+
a configuration file (defaults to config/log_master.rb)
|
18
|
+
|
19
|
+
== Configuration
|
20
|
+
|
21
|
+
You should put something like the following in config/log_master.rb
|
22
|
+
|
23
|
+
LogMaster::Configuration.configure do |config|
|
24
|
+
config.title = "Cron Update Notice"
|
25
|
+
config.reporting = {:warn => /error/i, :error => /aborted/i}
|
26
|
+
config.failure_conditions = [:error]
|
27
|
+
|
28
|
+
config.recipients = {:success => 'success@example.com', :failure => 'failure@example.com' }
|
29
|
+
|
30
|
+
config.reply_to = "no-reply@likeassets.com"
|
31
|
+
config.from = "mail@likeassets.com"
|
32
|
+
end
|
33
|
+
|
34
|
+
I only provided direct ActionMailer setters for from and reply_to as the intention is to let LogMaster
|
35
|
+
determine via failure_conditions and its recipients attribute where the email should go. Feel free to fork
|
36
|
+
and change this if it leaves something to be desired.
|
37
|
+
|
38
|
+
== Customization
|
39
|
+
|
40
|
+
The 'reporting' attribute can take a completely custom hash of 'name' => 'regexp' so you can define your
|
41
|
+
own warning, failure, info or debug conditions. Only if it contains anything specified in 'failure_conditions'
|
42
|
+
will it consider it a failure.
|
4
43
|
|
5
44
|
== Note on Patches/Pull Requests
|
6
45
|
|
data/Rakefile
CHANGED
@@ -15,7 +15,7 @@ begin
|
|
15
15
|
gem.email = "zbelzer@gmail.com"
|
16
16
|
gem.homepage = "http://github.com/moneypools/log_master"
|
17
17
|
gem.authors = ["Zachary Belzer"]
|
18
|
-
gem.add_dependency "actionmailer"
|
18
|
+
gem.add_dependency "actionmailer", ">= 2.2.2"
|
19
19
|
gem.add_development_dependency "rspec"
|
20
20
|
gem.add_development_dependency "email_spec", " >= 0.3.5"
|
21
21
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/bin/log_master
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'optparse'
|
5
|
+
require 'log_master'
|
6
|
+
|
7
|
+
options = Hash.new
|
8
|
+
log_pattern = nil
|
9
|
+
|
10
|
+
OptionParser.new do |opts|
|
11
|
+
opts.banner = "Usage: log_master [options]"
|
12
|
+
|
13
|
+
opts.on('-p', '--log-pattern PATTERN', "A globbing pattern designating files to email") do |pattern|
|
14
|
+
log_pattern = pattern
|
15
|
+
end
|
16
|
+
|
17
|
+
opts.on('-c', '--config [FILE]', 'A configuration file. Default: config/log_master.rb') do |file|
|
18
|
+
options[:file] = file if file
|
19
|
+
end
|
20
|
+
end.parse!
|
21
|
+
|
22
|
+
if log_pattern.nil? || log_pattern == ""
|
23
|
+
$stderr.puts "You must supply a log-pattern. See --help"
|
24
|
+
exit(1)
|
25
|
+
end
|
26
|
+
|
27
|
+
if files = Dir[log_pattern] and files.empty?
|
28
|
+
$stderr.puts "No files were found matching pattern '#{log_pattern}'"
|
29
|
+
exit(1)
|
30
|
+
else
|
31
|
+
LogMaster::Director.execute(files, options)
|
32
|
+
end
|
data/lib/log_master/director.rb
CHANGED
@@ -5,11 +5,17 @@ module LogMaster
|
|
5
5
|
|
6
6
|
attr_accessor :reports, :logs
|
7
7
|
|
8
|
-
def
|
9
|
-
|
10
|
-
|
8
|
+
def self.execute(files, options={})
|
9
|
+
new(files, options).run
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(files, options={})
|
13
|
+
@options = options
|
14
|
+
@options[:file] ||= 'config/log_master.rb'
|
15
|
+
|
11
16
|
@reports = {}
|
12
17
|
|
18
|
+
load_configuration
|
13
19
|
create_log_files(files)
|
14
20
|
end
|
15
21
|
|
@@ -17,6 +23,19 @@ module LogMaster
|
|
17
23
|
aggregate!
|
18
24
|
send_email
|
19
25
|
end
|
26
|
+
|
27
|
+
def load_configuration
|
28
|
+
require @options[:file] if File.exists?(@options[:file])
|
29
|
+
|
30
|
+
# config = File.read(@options[:file])
|
31
|
+
# eval(config)
|
32
|
+
|
33
|
+
if Configuration.configured?
|
34
|
+
@configuration = Configuration.instance
|
35
|
+
else
|
36
|
+
raise "[fail] LogMaster is not configured"
|
37
|
+
end
|
38
|
+
end
|
20
39
|
|
21
40
|
def aggregate!
|
22
41
|
logs.each do |l|
|
data/log_master.gemspec
CHANGED
@@ -5,13 +5,15 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{log_master}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Zachary Belzer"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2010-01-15}
|
13
|
+
s.default_executable = %q{log_master}
|
13
14
|
s.description = %q{Creates and emails a simple report for a set of log (or text) files. Useful for aggretating small log files.}
|
14
15
|
s.email = %q{zbelzer@gmail.com}
|
16
|
+
s.executables = ["log_master"]
|
15
17
|
s.extra_rdoc_files = [
|
16
18
|
"LICENSE",
|
17
19
|
"README.rdoc"
|
@@ -23,6 +25,7 @@ Gem::Specification.new do |s|
|
|
23
25
|
"README.rdoc",
|
24
26
|
"Rakefile",
|
25
27
|
"VERSION",
|
28
|
+
"bin/log_master",
|
26
29
|
"features/log_master.feature",
|
27
30
|
"features/step_definitions/email_steps.rb",
|
28
31
|
"features/step_definitions/log_master_steps.rb",
|
@@ -33,7 +36,6 @@ Gem::Specification.new do |s|
|
|
33
36
|
"lib/log_master/director.rb",
|
34
37
|
"lib/log_master/log_file.rb",
|
35
38
|
"lib/log_master/notifier.rb",
|
36
|
-
"lib/log_master/rake/log_task.rb",
|
37
39
|
"lib/templates/log_master/notifier/update_notification.html.erb",
|
38
40
|
"log_master.gemspec",
|
39
41
|
"spec/configuration_spec.rb",
|
@@ -43,8 +45,7 @@ Gem::Specification.new do |s|
|
|
43
45
|
"spec/fixtures/log_without_errors.log",
|
44
46
|
"spec/log_file_spec.rb",
|
45
47
|
"spec/notification_spec.rb",
|
46
|
-
"spec/spec_helper.rb"
|
47
|
-
"tasks/log_master.rake"
|
48
|
+
"spec/spec_helper.rb"
|
48
49
|
]
|
49
50
|
s.homepage = %q{http://github.com/moneypools/log_master}
|
50
51
|
s.rdoc_options = ["--charset=UTF-8"]
|
@@ -64,16 +65,16 @@ Gem::Specification.new do |s|
|
|
64
65
|
s.specification_version = 3
|
65
66
|
|
66
67
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
67
|
-
s.add_runtime_dependency(%q<actionmailer>, [">=
|
68
|
+
s.add_runtime_dependency(%q<actionmailer>, [">= 2.2.2"])
|
68
69
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
69
70
|
s.add_development_dependency(%q<email_spec>, [">= 0.3.5"])
|
70
71
|
else
|
71
|
-
s.add_dependency(%q<actionmailer>, [">=
|
72
|
+
s.add_dependency(%q<actionmailer>, [">= 2.2.2"])
|
72
73
|
s.add_dependency(%q<rspec>, [">= 0"])
|
73
74
|
s.add_dependency(%q<email_spec>, [">= 0.3.5"])
|
74
75
|
end
|
75
76
|
else
|
76
|
-
s.add_dependency(%q<actionmailer>, [">=
|
77
|
+
s.add_dependency(%q<actionmailer>, [">= 2.2.2"])
|
77
78
|
s.add_dependency(%q<rspec>, [">= 0"])
|
78
79
|
s.add_dependency(%q<email_spec>, [">= 0.3.5"])
|
79
80
|
end
|
data/spec/director_spec.rb
CHANGED
@@ -3,6 +3,7 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
3
3
|
module LogMaster
|
4
4
|
describe "Director" do
|
5
5
|
before do
|
6
|
+
Configuration.stub!(:configured?).and_return(true)
|
6
7
|
@files = %w(log_without_errors.log log_with_errors.log).map {|f| log_file_path(f) }
|
7
8
|
end
|
8
9
|
|
@@ -11,9 +12,8 @@ module LogMaster
|
|
11
12
|
end
|
12
13
|
|
13
14
|
it "should raise error if not configured" do
|
14
|
-
Configuration.
|
15
|
+
Configuration.stub!(:configured?).and_return(false)
|
15
16
|
lambda {Director.new(@files)}.should raise_error
|
16
|
-
Configuration.configure {|c|} # Reset configured state
|
17
17
|
end
|
18
18
|
|
19
19
|
describe "aggregate" do
|
@@ -24,7 +24,6 @@ module LogMaster
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
|
28
27
|
describe "successful?" do
|
29
28
|
it "should be true when no aggregate count for failure_conditions" do
|
30
29
|
log_master = Director.new(log_file_path('log_without_errors.log'))
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: log_master
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zachary Belzer
|
@@ -9,8 +9,8 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
13
|
-
default_executable:
|
12
|
+
date: 2010-01-15 00:00:00 -06:00
|
13
|
+
default_executable: log_master
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: actionmailer
|
@@ -20,7 +20,7 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version:
|
23
|
+
version: 2.2.2
|
24
24
|
version:
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
@@ -44,8 +44,8 @@ dependencies:
|
|
44
44
|
version:
|
45
45
|
description: Creates and emails a simple report for a set of log (or text) files. Useful for aggretating small log files.
|
46
46
|
email: zbelzer@gmail.com
|
47
|
-
executables:
|
48
|
-
|
47
|
+
executables:
|
48
|
+
- log_master
|
49
49
|
extensions: []
|
50
50
|
|
51
51
|
extra_rdoc_files:
|
@@ -58,6 +58,7 @@ files:
|
|
58
58
|
- README.rdoc
|
59
59
|
- Rakefile
|
60
60
|
- VERSION
|
61
|
+
- bin/log_master
|
61
62
|
- features/log_master.feature
|
62
63
|
- features/step_definitions/email_steps.rb
|
63
64
|
- features/step_definitions/log_master_steps.rb
|
@@ -68,7 +69,6 @@ files:
|
|
68
69
|
- lib/log_master/director.rb
|
69
70
|
- lib/log_master/log_file.rb
|
70
71
|
- lib/log_master/notifier.rb
|
71
|
-
- lib/log_master/rake/log_task.rb
|
72
72
|
- lib/templates/log_master/notifier/update_notification.html.erb
|
73
73
|
- log_master.gemspec
|
74
74
|
- spec/configuration_spec.rb
|
@@ -79,7 +79,6 @@ files:
|
|
79
79
|
- spec/log_file_spec.rb
|
80
80
|
- spec/notification_spec.rb
|
81
81
|
- spec/spec_helper.rb
|
82
|
-
- tasks/log_master.rake
|
83
82
|
has_rdoc: true
|
84
83
|
homepage: http://github.com/moneypools/log_master
|
85
84
|
licenses: []
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'log_master'
|
2
|
-
|
3
|
-
module LogMaster
|
4
|
-
module Rake
|
5
|
-
class LogTask < ::Rake::Task
|
6
|
-
attr_accessor :log_pattern
|
7
|
-
|
8
|
-
protected
|
9
|
-
def execute(*args)
|
10
|
-
super
|
11
|
-
run_log_master
|
12
|
-
end
|
13
|
-
|
14
|
-
def run_log_master
|
15
|
-
files = Dir[log_pattern]
|
16
|
-
LogMaster::Director.new(files).run
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
data/tasks/log_master.rake
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
namespace :log_master do
|
2
|
-
task :configure do
|
3
|
-
require 'actionmailer'
|
4
|
-
ActionMailer::Base.delivery_method = :sendmail
|
5
|
-
|
6
|
-
LogMaster::Configuration.configure do |config|
|
7
|
-
config.title = "This is a sample email"
|
8
|
-
config.recipients = {:success => 'localhost', :failure => 'localhost' }
|
9
|
-
config.reporting = {:warn => /WARN/, :error => /ERROR/, :fatal => /FATAL/}
|
10
|
-
config.reply_to = "sender@example.com"
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
desc "Runs log master on specified log file"
|
15
|
-
LogMaster::Rake::LogTask.define_task "test" => :configure do |t|
|
16
|
-
t.log_pattern = ENV['log_pattern'] || "spec/fixtures/log_with_errors.log"
|
17
|
-
end
|
18
|
-
end
|