syslog_protocol 0.9.0 → 0.9.1
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/lib/syslog_protocol.rb +1 -1
- data/lib/syslog_protocol/packet.rb +22 -9
- data/syslog_protocol.gemspec +1 -1
- data/test/helper.rb +1 -1
- data/test/test_logger.rb +6 -6
- data/test/test_packet.rb +24 -20
- data/test/test_parser.rb +10 -10
- metadata +3 -10
data/lib/syslog_protocol.rb
CHANGED
@@ -2,7 +2,7 @@ module SyslogProtocol
|
|
2
2
|
class Packet
|
3
3
|
attr_reader :facility, :severity, :hostname, :tag
|
4
4
|
attr_accessor :time, :content
|
5
|
-
|
5
|
+
|
6
6
|
def to_s
|
7
7
|
assemble
|
8
8
|
end
|
@@ -12,12 +12,17 @@ module SyslogProtocol
|
|
12
12
|
raise "Could not assemble packet without hostname, tag, facility, and severity"
|
13
13
|
end
|
14
14
|
data = "<#{pri}>#{generate_timestamp} #{@hostname} #{@tag}: #{@content}"
|
15
|
-
|
16
|
-
|
15
|
+
|
16
|
+
if string_bytesize(data) > 1024
|
17
|
+
data = data.slice(0, 1024)
|
18
|
+
while string_bytesize(data) > 1024
|
19
|
+
data = data.slice(0, data.length - 1)
|
20
|
+
end
|
17
21
|
end
|
22
|
+
|
18
23
|
data
|
19
24
|
end
|
20
|
-
|
25
|
+
|
21
26
|
def facility=(f)
|
22
27
|
if f.is_a? Integer
|
23
28
|
if (0..23).include?(f)
|
@@ -103,7 +108,7 @@ module SyslogProtocol
|
|
103
108
|
@facility = p / 8
|
104
109
|
@severity = p - (@facility * 8)
|
105
110
|
end
|
106
|
-
|
111
|
+
|
107
112
|
def generate_timestamp
|
108
113
|
time = @time || Time.now
|
109
114
|
# The timestamp format requires that a day with fewer than 2 digits have
|
@@ -112,11 +117,19 @@ module SyslogProtocol
|
|
112
117
|
day = day.sub(/^0/, ' ') if day =~ /^0\d/
|
113
118
|
time.strftime("%b #{day} %H:%M:%S")
|
114
119
|
end
|
115
|
-
|
120
|
+
|
121
|
+
if "".respond_to?(:bytesize)
|
122
|
+
def string_bytesize(string)
|
123
|
+
string.bytesize
|
124
|
+
end
|
125
|
+
else
|
126
|
+
def string_bytesize(string)
|
127
|
+
string.length
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
116
131
|
SEVERITIES.each do |k,v|
|
117
|
-
define_method("#{k}?") {SEVERITIES[k] == @severity}
|
132
|
+
define_method("#{k}?") { SEVERITIES[k] == @severity }
|
118
133
|
end
|
119
|
-
|
120
134
|
end
|
121
|
-
|
122
135
|
end
|
data/syslog_protocol.gemspec
CHANGED
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
|
|
13
13
|
## If your rubyforge_project name is different, then edit it and comment out
|
14
14
|
## the sub! line in the Rakefile
|
15
15
|
s.name = 'syslog_protocol'
|
16
|
-
s.version = '0.9.
|
16
|
+
s.version = '0.9.1'
|
17
17
|
s.date = "2009-08-01"
|
18
18
|
# s.rubyforge_project = 'syslog_protocol'
|
19
19
|
|
data/test/helper.rb
CHANGED
data/test/test_logger.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
require File.expand_path('../helper', __FILE__)
|
2
2
|
|
3
3
|
describe "syslog logger" do
|
4
|
-
|
4
|
+
|
5
5
|
it "create a new logger with hostname and facility" do
|
6
|
-
lambda {@logger =
|
6
|
+
lambda {@logger = SyslogProtocol::Logger.new("space_station", 'test', "local0")}.should.not.raise
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
it "hostname and facility must conform to the requirements of a Packet" do
|
10
|
-
lambda {
|
10
|
+
lambda {SyslogProtocol::Logger.new("space station", "some shit", 'test test')}.should.raise ArgumentError
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
it "generates packets" do
|
14
14
|
# We have to set a time so we have a consistant timestamp to check against..
|
15
15
|
p = @logger.instance_variable_get("@packet")
|
@@ -24,5 +24,5 @@ describe "syslog logger" do
|
|
24
24
|
@logger.alert("LEAKING ATMOSPHERE").should.equal "<129>#{ts} space_station test: LEAKING ATMOSPHERE"
|
25
25
|
@logger.emerg("LEAKING ASTRONAUTS WE ARE DONE").should.equal "<128>#{ts} space_station test: LEAKING ASTRONAUTS WE ARE DONE"
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
end
|
data/test/test_packet.rb
CHANGED
@@ -1,23 +1,23 @@
|
|
1
1
|
require File.expand_path('../helper', __FILE__)
|
2
2
|
|
3
3
|
describe "a syslog packet" do
|
4
|
-
|
5
|
-
@p =
|
6
|
-
|
4
|
+
|
5
|
+
@p = SyslogProtocol::Packet.new
|
6
|
+
|
7
7
|
it "should embarrass a person who does not set the fields" do
|
8
8
|
lambda { @p.to_s }.should.raise RuntimeError
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
it "hostname may not be omitted" do
|
12
12
|
lambda {@p.hostname = ""}.should.raise ArgumentError
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
it "hostname may only contain ASCII characters 33-126 (no spaces!)" do
|
16
16
|
lambda {@p.hostname = "linux box"}.should.raise ArgumentError
|
17
17
|
lambda {@p.hostname = "\000" + "linuxbox"}.should.raise ArgumentError
|
18
18
|
lambda {@p.hostname = "space_station"}.should.not.raise
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
it 'tag may only contain ASCII characters 33-126 (no spaces!)' do
|
22
22
|
lambda {@p.tag = "linux box"}.should.raise ArgumentError
|
23
23
|
lambda {@p.tag = "\000" + "linuxbox"}.should.raise ArgumentError
|
@@ -27,66 +27,70 @@ describe "a syslog packet" do
|
|
27
27
|
it "facility may only be set within 0-23 or with a proper string name" do
|
28
28
|
lambda {@p.facility = 666}.should.raise ArgumentError
|
29
29
|
lambda {@p.facility = "mir space station"}.should.raise ArgumentError
|
30
|
-
|
30
|
+
|
31
31
|
lambda {@p.facility = 16}.should.not.raise
|
32
32
|
@p.facility.should.equal 16
|
33
33
|
lambda {@p.facility = 'local0'}.should.not.raise
|
34
34
|
@p.facility.should.equal 16
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
it "severity may only be set within 0-7 or with a proper string name" do
|
38
38
|
lambda {@p.severity = 9876}.should.raise ArgumentError
|
39
39
|
lambda {@p.severity = "omgbroken"}.should.raise ArgumentError
|
40
|
-
|
40
|
+
|
41
41
|
lambda {@p.severity = 6}.should.not.raise
|
42
42
|
@p.severity.should.equal 6
|
43
43
|
lambda {@p.severity = 'info'}.should.not.raise
|
44
44
|
@p.severity.should.equal 6
|
45
45
|
end
|
46
|
-
|
46
|
+
|
47
47
|
it "severity can be checked using 'some_severity?' methods" do
|
48
48
|
@p.info?.should.equal true
|
49
49
|
@p.alert?.should.equal false
|
50
50
|
@p.emerg?.should.equal false
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
it "PRI is calculated from the facility and severity" do
|
54
54
|
@p.pri.should.equal 134
|
55
55
|
end
|
56
|
-
|
56
|
+
|
57
57
|
it "PRI may only be within 0-191" do
|
58
58
|
lambda {@p.pri = 22331}.should.raise ArgumentError
|
59
59
|
lambda {@p.pri = "foo"}.should.raise ArgumentError
|
60
60
|
end
|
61
|
-
|
61
|
+
|
62
62
|
it "facility and severity are deduced and set from setting a valid PRI" do
|
63
63
|
@p.pri = 165
|
64
64
|
@p.severity.should.equal 5
|
65
65
|
@p.facility.should.equal 20
|
66
66
|
end
|
67
|
-
|
67
|
+
|
68
68
|
it "return the proper names for facility and severity" do
|
69
69
|
@p.severity_name.should.equal 'notice'
|
70
70
|
@p.facility_name.should.equal 'local4'
|
71
71
|
end
|
72
|
-
|
72
|
+
|
73
73
|
it "set a message, which apparently can be anything" do
|
74
74
|
@p.content = "exploring ze black hole"
|
75
75
|
@p.content.should.equal "exploring ze black hole"
|
76
76
|
end
|
77
|
-
|
77
|
+
|
78
78
|
it "timestamp must conform to the retarded format" do
|
79
79
|
@p.generate_timestamp.should.match /(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\s|[1-9])\d\s\d\d:\d\d:\d\d/
|
80
80
|
end
|
81
|
-
|
81
|
+
|
82
82
|
it "use the current time and assemble the packet" do
|
83
83
|
timestamp = @p.generate_timestamp
|
84
84
|
@p.to_s.should.equal "<165>#{timestamp} space_station test: exploring ze black hole"
|
85
85
|
end
|
86
|
-
|
86
|
+
|
87
87
|
it "packets larger than 1024 will be truncated" do
|
88
88
|
@p.content = "space warp" * 1000
|
89
|
-
|
89
|
+
if "".respond_to?(:bytesize)
|
90
|
+
@p.to_s.bytesize.should.equal 1024
|
91
|
+
else
|
92
|
+
@p.to_s.size.should.equal 1024
|
93
|
+
end
|
90
94
|
end
|
91
|
-
|
95
|
+
|
92
96
|
end
|
data/test/test_parser.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require File.expand_path('../helper', __FILE__)
|
2
2
|
|
3
3
|
describe "syslog packet parser" do
|
4
|
-
|
4
|
+
|
5
5
|
it "parse some valid packets" do
|
6
|
-
p =
|
6
|
+
p = SyslogProtocol.parse("<34>Oct 11 22:14:15 mymachine su: 'su root' failed for lonvick on /dev/pts/8")
|
7
7
|
p.facility.should.equal 4
|
8
8
|
p.severity.should.equal 2
|
9
9
|
p.pri.should.equal 34
|
@@ -11,8 +11,8 @@ describe "syslog packet parser" do
|
|
11
11
|
p.tag.should.equal 'su'
|
12
12
|
p.content.should.equal "'su root' failed for lonvick on /dev/pts/8"
|
13
13
|
p.time.should.equal Time.parse("Oct 11 22:14:15")
|
14
|
-
|
15
|
-
p =
|
14
|
+
|
15
|
+
p = SyslogProtocol.parse("<13>Feb 5 17:32:18 10.0.0.99 test: Use the BFG!")
|
16
16
|
p.facility.should.equal 1
|
17
17
|
p.severity.should.equal 5
|
18
18
|
p.pri.should.equal 13
|
@@ -21,27 +21,27 @@ describe "syslog packet parser" do
|
|
21
21
|
p.content.should.equal "Use the BFG!"
|
22
22
|
p.time.should.equal Time.parse("Feb 5 17:32:18")
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
it "treat a packet with no valid PRI as all content, setting defaults" do
|
26
|
-
p =
|
26
|
+
p = SyslogProtocol.parse("nomnom")
|
27
27
|
p.facility.should.equal 1
|
28
28
|
p.severity.should.equal 5
|
29
29
|
p.pri.should.equal 13
|
30
30
|
p.hostname.should.equal 'unknown'
|
31
31
|
p.content.should.equal "nomnom"
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
it "PRI with preceding 0's shall be considered invalid" do
|
35
|
-
p =
|
35
|
+
p = SyslogProtocol.parse("<045>Oct 11 22:14:15 space_station my PRI is not valid")
|
36
36
|
p.facility.should.equal 1
|
37
37
|
p.severity.should.equal 5
|
38
38
|
p.pri.should.equal 13
|
39
39
|
p.hostname.should.equal 'unknown'
|
40
40
|
p.content.should.equal "<045>Oct 11 22:14:15 space_station my PRI is not valid"
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
it "allow the user to pass an origin to be used as the hostname if packet is invalid" do
|
44
|
-
p =
|
44
|
+
p = SyslogProtocol.parse("<045>Oct 11 22:14:15 space_station my PRI is not valid", '127.0.0.1')
|
45
45
|
p.facility.should.equal 1
|
46
46
|
p.severity.should.equal 5
|
47
47
|
p.pri.should.equal 13
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: syslog_protocol
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 59
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
7
|
- 9
|
9
|
-
-
|
10
|
-
version: 0.9.
|
8
|
+
- 1
|
9
|
+
version: 0.9.1
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Jake Douglas
|
@@ -23,11 +22,9 @@ dependencies:
|
|
23
22
|
name: bacon
|
24
23
|
prerelease: false
|
25
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
25
|
requirements:
|
28
26
|
- - ~>
|
29
27
|
- !ruby/object:Gem::Version
|
30
|
-
hash: 19
|
31
28
|
segments:
|
32
29
|
- 1
|
33
30
|
- 1
|
@@ -69,27 +66,23 @@ rdoc_options:
|
|
69
66
|
require_paths:
|
70
67
|
- lib
|
71
68
|
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
-
none: false
|
73
69
|
requirements:
|
74
70
|
- - ">="
|
75
71
|
- !ruby/object:Gem::Version
|
76
|
-
hash: 3
|
77
72
|
segments:
|
78
73
|
- 0
|
79
74
|
version: "0"
|
80
75
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
76
|
requirements:
|
83
77
|
- - ">="
|
84
78
|
- !ruby/object:Gem::Version
|
85
|
-
hash: 3
|
86
79
|
segments:
|
87
80
|
- 0
|
88
81
|
version: "0"
|
89
82
|
requirements: []
|
90
83
|
|
91
84
|
rubyforge_project:
|
92
|
-
rubygems_version: 1.3.
|
85
|
+
rubygems_version: 1.3.6
|
93
86
|
signing_key:
|
94
87
|
specification_version: 2
|
95
88
|
summary: Syslog protocol parser and generator
|