errplane 0.3.7 → 0.4.0
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/.gitignore +2 -1
- data/.rspec +2 -0
- data/.travis.yml +22 -0
- data/README.md +2 -10
- data/Rakefile +19 -31
- data/errplane.gemspec +5 -9
- data/gemfiles/Gemfile.rails-2.3.x +8 -0
- data/gemfiles/Gemfile.rails-2.3.x.lock +60 -0
- data/gemfiles/{rails_3.2.gemfile → Gemfile.rails-3.0.x} +2 -2
- data/gemfiles/Gemfile.rails-3.0.x.lock +82 -0
- data/gemfiles/{rails_3.1.gemfile → Gemfile.rails-3.1.x} +2 -1
- data/gemfiles/Gemfile.rails-3.1.x.lock +94 -0
- data/gemfiles/{rails_3.0.gemfile → Gemfile.rails-3.2.x} +2 -1
- data/gemfiles/Gemfile.rails-3.2.x.lock +92 -0
- data/lib/errplane.rb +15 -10
- data/lib/errplane/backtrace.rb +38 -0
- data/lib/errplane/black_box.rb +8 -5
- data/lib/errplane/capistrano.rb +0 -1
- data/lib/errplane/configuration.rb +30 -22
- data/lib/errplane/errplane_chef_handler.rb +2 -4
- data/lib/errplane/logger.rb +11 -0
- data/lib/errplane/rails/air_traffic_controller.rb +2 -1
- data/lib/errplane/rails/middleware/hijack_render_exception.rb +5 -2
- data/lib/errplane/railtie.rb +0 -9
- data/lib/errplane/transmitter.rb +19 -11
- data/lib/errplane/version.rb +1 -1
- data/lib/rails/generators/errplane/templates/initializer.rb +0 -3
- data/spec/app/rails2.rb +38 -0
- data/spec/app/{rails.rb → rails3.rb} +0 -3
- data/spec/integration/exceptions_spec.rb +27 -9
- data/spec/rails2/README +243 -0
- data/spec/rails2/Rakefile +10 -0
- data/spec/rails2/app/controllers/application_controller.rb +10 -0
- data/spec/rails2/app/controllers/widgets_controller.rb +5 -0
- data/spec/rails2/app/helpers/application_helper.rb +3 -0
- data/spec/rails2/app/helpers/widgets_helper.rb +1 -0
- data/spec/rails2/config/boot.rb +114 -0
- data/spec/rails2/config/database.yml +3 -0
- data/spec/rails2/config/environment.rb +33 -0
- data/spec/rails2/config/environments/development.rb +17 -0
- data/spec/rails2/config/environments/production.rb +28 -0
- data/spec/{internal/public/favicon.ico → rails2/config/environments/test.rb} +0 -0
- data/spec/rails2/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/rails2/config/initializers/cookie_verification_secret.rb +7 -0
- data/spec/{internal → rails2}/config/initializers/errplane.rb +0 -0
- data/spec/rails2/config/initializers/inflections.rb +10 -0
- data/spec/rails2/config/initializers/mime_types.rb +5 -0
- data/spec/rails2/config/initializers/new_rails_defaults.rb +21 -0
- data/spec/rails2/config/initializers/session_store.rb +15 -0
- data/spec/rails2/config/locales/en.yml +5 -0
- data/spec/rails2/config/routes.rb +3 -0
- data/spec/rails2/lib/tasks/rspec.rake +144 -0
- data/spec/rails2/log/development.log +0 -0
- data/spec/rails2/log/production.log +0 -0
- data/spec/rails2/log/server.log +0 -0
- data/spec/rails2/log/test.log +785 -0
- data/spec/rails2/public/404.html +30 -0
- data/spec/rails2/public/422.html +30 -0
- data/spec/rails2/public/500.html +30 -0
- data/spec/rails2/public/favicon.ico +0 -0
- data/spec/rails2/public/images/rails.png +0 -0
- data/spec/rails2/public/index.html +275 -0
- data/spec/rails2/public/javascripts/application.js +2 -0
- data/spec/rails2/public/javascripts/controls.js +963 -0
- data/spec/rails2/public/javascripts/dragdrop.js +973 -0
- data/spec/rails2/public/javascripts/effects.js +1128 -0
- data/spec/rails2/public/javascripts/prototype.js +4320 -0
- data/spec/rails2/public/robots.txt +5 -0
- data/spec/rails2/script/about +4 -0
- data/spec/rails2/script/autospec +6 -0
- data/spec/rails2/script/console +3 -0
- data/spec/rails2/script/dbconsole +3 -0
- data/spec/rails2/script/destroy +3 -0
- data/spec/rails2/script/generate +3 -0
- data/spec/rails2/script/performance/benchmarker +3 -0
- data/spec/rails2/script/performance/profiler +3 -0
- data/spec/rails2/script/plugin +3 -0
- data/spec/rails2/script/runner +3 -0
- data/spec/rails2/script/server +3 -0
- data/spec/rails2/script/spec +10 -0
- data/spec/rails2/test/performance/browsing_test.rb +9 -0
- data/spec/rails2/test/test_helper.rb +38 -0
- data/spec/spec_helper.rb +27 -16
- data/spec/suite.sh +39 -0
- data/spec/unit/backtrace_spec.rb +62 -0
- data/spec/unit/black_box_spec.rb +3 -3
- data/spec/unit/configuration_spec.rb +29 -0
- data/spec/unit/errplane_spec.rb +24 -15
- data/specs.watchr +21 -0
- metadata +194 -90
- data/gemfiles/rails_2.3.gemfile +0 -6
- data/gemfiles/rails_2.3.gemfile.lock +0 -148
- data/gemfiles/rails_3.0.gemfile.lock +0 -148
- data/gemfiles/rails_3.1.gemfile.lock +0 -148
- data/gemfiles/rails_3.2.gemfile.lock +0 -121
- data/lib/errplane/rails/udp_logger.rb +0 -54
- data/lib/errplane/syslogproto.rb +0 -7
- data/lib/errplane/syslogproto/common.rb +0 -81
- data/lib/errplane/syslogproto/logger.rb +0 -24
- data/lib/errplane/syslogproto/packet.rb +0 -107
- data/lib/errplane/syslogproto/parser.rb +0 -51
- data/spec/internal/app/controllers/application_controller.rb +0 -2
- data/spec/internal/app/controllers/widgets_controller.rb +0 -9
- data/spec/internal/config/database.yml +0 -3
- data/spec/internal/config/routes.rb +0 -3
- data/spec/internal/db/combustion_test.sqlite +0 -0
- data/spec/internal/db/schema.rb +0 -3
- data/spec/internal/log/.gitignore +0 -1
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
module Errplane
|
|
2
|
-
class UdpLogger
|
|
3
|
-
def initialize(port)
|
|
4
|
-
@host = "syslogd.errplane.com"
|
|
5
|
-
@port = port
|
|
6
|
-
|
|
7
|
-
@syslog_p = SyslogProto::Packet.new
|
|
8
|
-
|
|
9
|
-
local_hostname = (Socket.gethostname rescue `hostname`.chomp)
|
|
10
|
-
local_hostname = 'localhost' if local_hostname.nil? || local_hostname.empty?
|
|
11
|
-
@syslog_p.hostname = local_hostname
|
|
12
|
-
|
|
13
|
-
@syslog_p.facility = 'user'
|
|
14
|
-
@syslog_p.severity = 'notice'
|
|
15
|
-
@udpsocket = UDPSocket.new
|
|
16
|
-
puts "Setting up Errplane remote logger on port -#{@host}:#{@port}"
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def write(message)
|
|
20
|
-
message.split(/\r?\n/).each do |line|
|
|
21
|
-
begin
|
|
22
|
-
next if line =~ /^\s*$/
|
|
23
|
-
pak = @syslog_p.dup
|
|
24
|
-
pak.msg = line
|
|
25
|
-
@udpsocket.send(pak.assemble, 0, @host, @port)
|
|
26
|
-
rescue => e
|
|
27
|
-
puts e
|
|
28
|
-
puts e.backtrace
|
|
29
|
-
#ignore errors
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def close
|
|
35
|
-
@udpsocket.close
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
begin
|
|
41
|
-
if( Errplane.configuration.syslogd_port && Errplane.configuration.syslogd_port != "")
|
|
42
|
-
require "uri"
|
|
43
|
-
require 'socket'
|
|
44
|
-
require 'errplane/syslogproto'
|
|
45
|
-
|
|
46
|
-
logger = Logger.new(Errplane::UdpLogger.new( Errplane.configuration.syslogd_port.to_i))
|
|
47
|
-
logger.level = Logger::INFO
|
|
48
|
-
|
|
49
|
-
logger.error "TEST"
|
|
50
|
-
Rails.logger = Rails.application.config.logger = ActionController::Base.logger = Rails.cache.logger = logger
|
|
51
|
-
end
|
|
52
|
-
rescue => e
|
|
53
|
-
puts "Failed to setup remote logger for Errplane! -#{e}"
|
|
54
|
-
end
|
data/lib/errplane/syslogproto.rb
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
module SyslogProto
|
|
2
|
-
|
|
3
|
-
# These hashes stolen from Syslog.pm
|
|
4
|
-
|
|
5
|
-
FACILITIES = {
|
|
6
|
-
'kern' => 0,
|
|
7
|
-
'user' => 1,
|
|
8
|
-
'mail' => 2,
|
|
9
|
-
'daemon' => 3,
|
|
10
|
-
'auth' => 4,
|
|
11
|
-
'syslog' => 5,
|
|
12
|
-
'lpr' => 6,
|
|
13
|
-
'news' => 7,
|
|
14
|
-
'uucp' => 8,
|
|
15
|
-
'cron' => 9,
|
|
16
|
-
'authpriv' => 10,
|
|
17
|
-
'ftp' => 11,
|
|
18
|
-
'ntp' => 12,
|
|
19
|
-
'audit' => 13,
|
|
20
|
-
'alert' => 14,
|
|
21
|
-
'at' => 15,
|
|
22
|
-
'local0' => 16,
|
|
23
|
-
'local1' => 17,
|
|
24
|
-
'local2' => 18,
|
|
25
|
-
'local3' => 19,
|
|
26
|
-
'local4' => 20,
|
|
27
|
-
'local5' => 21,
|
|
28
|
-
'local6' => 22,
|
|
29
|
-
'local7' => 23
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
FACILITY_INDEX = {
|
|
33
|
-
0 => 'kern',
|
|
34
|
-
1 => 'user',
|
|
35
|
-
2 => 'mail',
|
|
36
|
-
3 => 'daemon',
|
|
37
|
-
4 => 'auth',
|
|
38
|
-
5 => 'syslog',
|
|
39
|
-
6 => 'lpr',
|
|
40
|
-
7 => 'news',
|
|
41
|
-
8 => 'uucp',
|
|
42
|
-
9 => 'cron',
|
|
43
|
-
10 => 'authpriv',
|
|
44
|
-
11 => 'ftp',
|
|
45
|
-
12 => 'ntp',
|
|
46
|
-
13 => 'audit',
|
|
47
|
-
14 => 'alert',
|
|
48
|
-
15 => 'at',
|
|
49
|
-
16 => 'local0',
|
|
50
|
-
17 => 'local1',
|
|
51
|
-
18 => 'local2',
|
|
52
|
-
19 => 'local3',
|
|
53
|
-
20 => 'local4',
|
|
54
|
-
21 => 'local5',
|
|
55
|
-
22 => 'local6',
|
|
56
|
-
23 => 'local7'
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
SEVERITIES = {
|
|
60
|
-
'emerg' => 0,
|
|
61
|
-
'alert' => 1,
|
|
62
|
-
'crit' => 2,
|
|
63
|
-
'err' => 3,
|
|
64
|
-
'warn' => 4,
|
|
65
|
-
'notice' => 5,
|
|
66
|
-
'info' => 6,
|
|
67
|
-
'debug' => 7
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
SEVERITY_INDEX = {
|
|
71
|
-
0 => 'emerg',
|
|
72
|
-
1 => 'alert',
|
|
73
|
-
2 => 'crit',
|
|
74
|
-
3 => 'err',
|
|
75
|
-
4 => 'warn',
|
|
76
|
-
5 => 'notice',
|
|
77
|
-
6 => 'info',
|
|
78
|
-
7 => 'debug'
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
end
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
module SyslogProto
|
|
2
|
-
|
|
3
|
-
class Logger
|
|
4
|
-
|
|
5
|
-
def initialize(hostname, facility)
|
|
6
|
-
@packet = Packet.new
|
|
7
|
-
@packet.hostname = hostname
|
|
8
|
-
@packet.facility = facility
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
SEVERITIES.each do |k,v|
|
|
12
|
-
define_method(k) do |*args|
|
|
13
|
-
msg = args.shift
|
|
14
|
-
raise ArgumentError.new "MSG may not be omitted" unless msg and msg.length > 0
|
|
15
|
-
p = @packet.dup
|
|
16
|
-
p.severity = k
|
|
17
|
-
p.msg = msg
|
|
18
|
-
p.assemble
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
end
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
module SyslogProto
|
|
2
|
-
|
|
3
|
-
class Packet
|
|
4
|
-
|
|
5
|
-
attr_reader :facility, :severity, :hostname
|
|
6
|
-
attr_accessor :time, :msg
|
|
7
|
-
|
|
8
|
-
def to_s
|
|
9
|
-
assemble
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def assemble
|
|
13
|
-
unless @hostname and @facility and @severity
|
|
14
|
-
return "I AM A JUNK PACKET CUZ MY USER DIDNT SET ME"
|
|
15
|
-
end
|
|
16
|
-
data = "<#{pri}>#{generate_timestamp} #{@hostname} #{@msg}"
|
|
17
|
-
while data.bytesize > 1024
|
|
18
|
-
data = data[0..(data.length-2)]
|
|
19
|
-
end
|
|
20
|
-
data
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
def facility=(f)
|
|
24
|
-
if f.is_a? Integer
|
|
25
|
-
if (0..23).include?(f)
|
|
26
|
-
@facility = f
|
|
27
|
-
else
|
|
28
|
-
raise ArgumentError.new "Facility must be within 0-23"
|
|
29
|
-
end
|
|
30
|
-
elsif f.is_a? String
|
|
31
|
-
if facility = FACILITIES[f]
|
|
32
|
-
@facility = facility
|
|
33
|
-
else
|
|
34
|
-
raise ArgumentError.new "'#{f}' is not a designated facility"
|
|
35
|
-
end
|
|
36
|
-
else
|
|
37
|
-
raise ArgumentError.new "Facility must be a designated number or string"
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def severity=(s)
|
|
42
|
-
if s.is_a? Integer
|
|
43
|
-
if (0..7).include?(s)
|
|
44
|
-
@severity = s
|
|
45
|
-
else
|
|
46
|
-
raise ArgumentError.new "Severity must be within 0-7"
|
|
47
|
-
end
|
|
48
|
-
elsif s.is_a? String
|
|
49
|
-
if severity = SEVERITIES[s]
|
|
50
|
-
@severity = severity
|
|
51
|
-
else
|
|
52
|
-
raise ArgumentError.new "'#{s}' is not a designated severity"
|
|
53
|
-
end
|
|
54
|
-
else
|
|
55
|
-
raise ArgumentError.new "Severity must be a designated number or string"
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def hostname=(h)
|
|
60
|
-
unless h and h.is_a? String and h.length > 0
|
|
61
|
-
raise ArgumentError.new("Hostname may not be omitted")
|
|
62
|
-
end
|
|
63
|
-
if h =~ /\s/
|
|
64
|
-
raise ArgumentError.new("Hostname may not contain spaces")
|
|
65
|
-
end
|
|
66
|
-
if h =~ /[^\x21-\x7E]/
|
|
67
|
-
raise ArgumentError.new("Hostname may only contain ASCII characters 33-126")
|
|
68
|
-
end
|
|
69
|
-
@hostname = h
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def facility_name
|
|
73
|
-
FACILITY_INDEX[@facility]
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
def severity_name
|
|
77
|
-
SEVERITY_INDEX[@severity]
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
def pri
|
|
81
|
-
(@facility * 8) + @severity
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
def pri=(p)
|
|
85
|
-
unless p.is_a? Integer and (0..191).include?(p)
|
|
86
|
-
raise ArgumentError.new "PRI must be a number between 0 and 191"
|
|
87
|
-
end
|
|
88
|
-
@facility = p / 8
|
|
89
|
-
@severity = p - (@facility * 8)
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def generate_timestamp
|
|
93
|
-
time = @time || Time.now
|
|
94
|
-
# The timestamp format requires that a day with fewer than 2 digits have
|
|
95
|
-
# what would normally be a preceding zero, be instead an extra space.
|
|
96
|
-
day = time.strftime("%d")
|
|
97
|
-
day = day.sub(/^0/, ' ') if day =~ /^0\d/
|
|
98
|
-
time.strftime("%b #{day} %H:%M:%S")
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
SEVERITIES.each do |k,v|
|
|
102
|
-
define_method("#{k}?") {SEVERITIES[k] == @severity}
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
end
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
require 'time'
|
|
2
|
-
|
|
3
|
-
module SyslogProto
|
|
4
|
-
|
|
5
|
-
def self.parse(msg, origin=nil)
|
|
6
|
-
packet = Packet.new
|
|
7
|
-
original_msg = msg.dup
|
|
8
|
-
pri = parse_pri(msg)
|
|
9
|
-
if pri and (pri = pri.to_i).is_a? Integer and (0..191).include?(pri)
|
|
10
|
-
packet.pri = pri
|
|
11
|
-
else
|
|
12
|
-
# If there isn't a valid PRI, treat the entire message as content
|
|
13
|
-
packet.pri = 13
|
|
14
|
-
packet.time = Time.now
|
|
15
|
-
packet.hostname = origin || 'unknown'
|
|
16
|
-
packet.msg = original_msg
|
|
17
|
-
return packet
|
|
18
|
-
end
|
|
19
|
-
time = parse_time(msg)
|
|
20
|
-
if time
|
|
21
|
-
packet.time = Time.parse(time)
|
|
22
|
-
else
|
|
23
|
-
packet.time = Time.now
|
|
24
|
-
end
|
|
25
|
-
hostname = parse_hostname(msg)
|
|
26
|
-
packet.hostname = hostname || origin
|
|
27
|
-
packet.msg = msg
|
|
28
|
-
packet
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
private
|
|
32
|
-
|
|
33
|
-
def self.parse_pri(msg)
|
|
34
|
-
pri = msg.slice!(/<(\d\d?\d?)>/)
|
|
35
|
-
pri = pri.slice(/\d\d?\d?/) if pri
|
|
36
|
-
if !pri or (pri =~ /^0/ and pri !~ /^0$/)
|
|
37
|
-
return nil
|
|
38
|
-
else
|
|
39
|
-
return pri
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def self.parse_time(msg)
|
|
44
|
-
msg.slice!(/(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\s|[1-9])\d\s\d\d:\d\d:\d\d\s/)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def self.parse_hostname(msg)
|
|
48
|
-
msg.slice!(/^[\x21-\x7E]+\s/).rstrip
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
end
|
|
Binary file
|
data/spec/internal/db/schema.rb
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
*.log
|