errplane 0.3.7 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|