gelf 1.1.0.beta3 → 1.1.0.beta4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +8 -1
- data/Rakefile +4 -4
- data/VERSION +1 -1
- data/benchmarks/notifier.rb +16 -9
- data/gelf.gemspec +6 -6
- data/lib/gelf/deprecations.rb +1 -1
- data/lib/gelf/logger.rb +2 -2
- data/lib/gelf/notifier.rb +29 -16
- data/lib/gelf.rb +4 -0
- data/test/test_logger.rb +18 -18
- data/test/test_notifier.rb +57 -31
- metadata +8 -8
data/CHANGELOG
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
-
1.1.0 (not yet released), 2010-
|
1
|
+
1.1.0 (not yet released), 2010-12-xx:
|
2
|
+
+ compatibility with GELF specification 1.0:
|
3
|
+
* requires graylog2-server version 0.9.XXXXXXXXXXXX or graylog2-server-twisted;
|
2
4
|
+ Notifier#default_options;
|
3
5
|
+ severity (level) threshold;
|
6
|
+
+ automatically set 'file' and 'line' fields;
|
4
7
|
+ wrappers for GELF::Notifier#notify with severity:
|
5
8
|
+ GELF::Notifier.debug
|
6
9
|
+ GELF::Notifier.info
|
@@ -16,6 +19,10 @@
|
|
16
19
|
+ GELF::Logger#close
|
17
20
|
+ GELF::Logger#level = GELF::INFO
|
18
21
|
|
22
|
+
1.0.2, 2010-11-29:
|
23
|
+
1.0.1, 2010-11-29:
|
24
|
+
- added more tests for chunking in attempt to locate not existing bug.
|
25
|
+
|
19
26
|
1.0.0, 2010-11-10:
|
20
27
|
+ initial stable version;
|
21
28
|
* deprecated Gelf class is still there.
|
data/Rakefile
CHANGED
@@ -6,11 +6,11 @@ begin
|
|
6
6
|
require 'jeweler'
|
7
7
|
Jeweler::Tasks.new do |gem|
|
8
8
|
gem.name = "gelf"
|
9
|
-
gem.summary = 'Library to send GELF messages to Graylog2 logging server'
|
10
|
-
gem.description = '
|
11
|
-
gem.email = "
|
9
|
+
gem.summary = 'Library to send GELF messages to Graylog2 logging server.'
|
10
|
+
gem.description = 'Library to send GELF messages to Graylog2 logging server. Supports plain-text, GELF messages and exceptions.'
|
11
|
+
gem.email = "aleksey.palazhchenko@gmail.com"
|
12
12
|
gem.homepage = "http://github.com/Graylog2/gelf-rb"
|
13
|
-
gem.authors = ["
|
13
|
+
gem.authors = ["Aleksey Palazhchenko", "Lennart Koopmann"]
|
14
14
|
gem.add_dependency "json"
|
15
15
|
gem.add_development_dependency "shoulda"
|
16
16
|
gem.add_development_dependency "mocha"
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.1.0.
|
1
|
+
1.1.0.beta4
|
data/benchmarks/notifier.rb
CHANGED
@@ -1,15 +1,17 @@
|
|
1
1
|
#! /usr/bin/env ruby
|
2
2
|
|
3
|
-
|
3
|
+
puts "Loading..."
|
4
4
|
|
5
|
+
require 'benchmark'
|
5
6
|
require 'rubygems'
|
6
7
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
7
8
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
8
9
|
require 'gelf'
|
9
10
|
|
11
|
+
puts "Generating random data..."
|
10
12
|
srand(1)
|
11
13
|
RANDOM_DATA = ('A'..'z').to_a
|
12
|
-
|
14
|
+
k3_message = (1..3*1024).map { RANDOM_DATA[rand(RANDOM_DATA.count)] }.join
|
13
15
|
|
14
16
|
TARGET_HOST = 'localhost'
|
15
17
|
TARGET_PORT = 12201
|
@@ -17,16 +19,21 @@ DEFAULT_OPTIONS = { 'host' => 'localhost' }
|
|
17
19
|
TIMES = 5000
|
18
20
|
|
19
21
|
SHORT_HASH = { 'short_message' => 'message' }
|
20
|
-
LONG_HASH
|
22
|
+
LONG_HASH = { 'short_message' => 'message', 'long_message' => k3_message }
|
21
23
|
|
22
24
|
|
23
25
|
notifier_lan = GELF::Notifier.new(TARGET_HOST, TARGET_PORT, 'LAN', DEFAULT_OPTIONS)
|
24
26
|
notifier_wan = GELF::Notifier.new(TARGET_HOST, TARGET_PORT, 'WAN', DEFAULT_OPTIONS)
|
25
27
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
# to create mongo collections, etc.
|
29
|
+
notifier_lan.notify!(LONG_HASH)
|
30
|
+
sleep(5)
|
31
|
+
|
32
|
+
puts "Sending #{TIMES} notifications...\n"
|
33
|
+
tms = Benchmark.bm(25) do |b|
|
34
|
+
b.report('lan, short data, 1 chunk ') { TIMES.times { notifier_lan.notify!(SHORT_HASH) } }
|
35
|
+
sleep(5)
|
36
|
+
b.report('lan, long data, 1 chunk ') { TIMES.times { notifier_lan.notify!(LONG_HASH) } }
|
37
|
+
sleep(5)
|
38
|
+
b.report('wan, long data, 2 chunks') { TIMES.times { notifier_wan.notify!(LONG_HASH) } }
|
32
39
|
end
|
data/gelf.gemspec
CHANGED
@@ -5,13 +5,13 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{gelf}
|
8
|
-
s.version = "1.1.0.
|
8
|
+
s.version = "1.1.0.beta4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["
|
12
|
-
s.date = %q{2010-
|
13
|
-
s.description = %q{
|
14
|
-
s.email = %q{
|
11
|
+
s.authors = ["Aleksey Palazhchenko", "Lennart Koopmann"]
|
12
|
+
s.date = %q{2010-12-02}
|
13
|
+
s.description = %q{Library to send GELF messages to Graylog2 logging server. Supports plain-text, GELF messages and exceptions.}
|
14
|
+
s.email = %q{aleksey.palazhchenko@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
17
17
|
"README.rdoc"
|
@@ -43,7 +43,7 @@ Gem::Specification.new do |s|
|
|
43
43
|
s.rdoc_options = ["--charset=UTF-8"]
|
44
44
|
s.require_paths = ["lib"]
|
45
45
|
s.rubygems_version = %q{1.3.7}
|
46
|
-
s.summary = %q{Library to send GELF messages to Graylog2 logging server}
|
46
|
+
s.summary = %q{Library to send GELF messages to Graylog2 logging server.}
|
47
47
|
s.test_files = [
|
48
48
|
"test/helper.rb",
|
49
49
|
"test/test_deprecations.rb",
|
data/lib/gelf/deprecations.rb
CHANGED
@@ -8,7 +8,7 @@ class Gelf
|
|
8
8
|
attr_reader :notifier, :message
|
9
9
|
|
10
10
|
def initialize(hostname, port)
|
11
|
-
deprecate('GELF::Notifier.new(hostname, port)
|
11
|
+
deprecate('GELF::Notifier.new(hostname, port)')
|
12
12
|
@notifier = GELF::Notifier.new(hostname, port)
|
13
13
|
@message = {}
|
14
14
|
end
|
data/lib/gelf/logger.rb
CHANGED
@@ -20,7 +20,7 @@ module GELF
|
|
20
20
|
[args[0], nil]
|
21
21
|
end
|
22
22
|
|
23
|
-
hash = {'
|
23
|
+
hash = {'gelf_short_message' => message, 'gelf_facility' => facility}
|
24
24
|
hash.merge!(self.class.extract_hash_from_exception(message)) if message.is_a?(Exception)
|
25
25
|
notify_with_level(level, hash)
|
26
26
|
end
|
@@ -39,7 +39,7 @@ module GELF
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def <<(message)
|
42
|
-
notify('
|
42
|
+
notify('gelf_short_message' => message, 'gelf_level' => GELF::UNKNOWN)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
data/lib/gelf/notifier.rb
CHANGED
@@ -21,9 +21,10 @@ module GELF
|
|
21
21
|
|
22
22
|
@default_options = {}
|
23
23
|
self.default_options = default_options
|
24
|
-
self.default_options['
|
25
|
-
self.default_options['
|
26
|
-
self.default_options['
|
24
|
+
self.default_options['gelf_version'] = SPEC_VERSION
|
25
|
+
self.default_options['gelf_host'] ||= Socket.gethostname
|
26
|
+
self.default_options['gelf_level'] ||= GELF::DEBUG
|
27
|
+
self.default_options['gelf_facility'] ||= 'gelf-rb'
|
27
28
|
|
28
29
|
@sender = RubySender.new(host, port)
|
29
30
|
end
|
@@ -95,8 +96,8 @@ module GELF
|
|
95
96
|
def notify_with_level!(message_level, *args)
|
96
97
|
return unless @enabled
|
97
98
|
extract_hash(*args)
|
98
|
-
@hash['
|
99
|
-
if @hash['
|
99
|
+
@hash['gelf_level'] = message_level unless message_level.nil?
|
100
|
+
if @hash['gelf_level'] >= level
|
100
101
|
@sender.send_datagrams(datagrams_from_hash)
|
101
102
|
end
|
102
103
|
end
|
@@ -105,40 +106,53 @@ module GELF
|
|
105
106
|
primary_data = if object.respond_to?(:to_hash)
|
106
107
|
object.to_hash
|
107
108
|
elsif object.is_a?(Exception)
|
108
|
-
args['
|
109
|
+
args['gelf_level'] ||= GELF::ERROR
|
109
110
|
self.class.extract_hash_from_exception(object)
|
110
111
|
else
|
111
|
-
args['
|
112
|
-
{ '
|
112
|
+
args['gelf_level'] ||= GELF::INFO
|
113
|
+
{ 'gelf_short_message' => object.to_s }
|
113
114
|
end
|
114
115
|
|
115
116
|
@hash = default_options.merge(args.merge(primary_data))
|
116
117
|
stringify_hash_keys
|
117
118
|
convert_hoptoad_keys_to_graylog2
|
119
|
+
set_file_and_line
|
118
120
|
check_presence_of_mandatory_attributes
|
119
121
|
@hash
|
120
122
|
end
|
121
123
|
|
122
124
|
def self.extract_hash_from_exception(exception)
|
123
125
|
bt = exception.backtrace || ["Backtrace is not available."]
|
124
|
-
{ '
|
126
|
+
{ 'gelf_short_message' => "#{exception.class}: #{exception.message}", 'gelf_full_message' => "Backtrace:\n" + bt.join("\n") }
|
125
127
|
end
|
126
128
|
|
127
129
|
# Converts Hoptoad-specific keys in +@hash+ to Graylog2-specific.
|
128
130
|
def convert_hoptoad_keys_to_graylog2
|
129
|
-
if @hash['
|
131
|
+
if @hash['gelf_short_message'].to_s.empty?
|
130
132
|
if @hash.has_key?('error_class') && @hash.has_key?('error_message')
|
131
|
-
@hash['
|
133
|
+
@hash['gelf_short_message'] = "#{@hash['error_class']}: #{@hash['error_message']}"
|
132
134
|
@hash.delete('error_class')
|
133
135
|
@hash.delete('error_message')
|
134
136
|
end
|
135
137
|
end
|
136
138
|
end
|
137
139
|
|
140
|
+
CALLER_REGEXP = /^(.*):(\d+):.*/
|
141
|
+
|
142
|
+
def set_file_and_line
|
143
|
+
stack = caller
|
144
|
+
begin
|
145
|
+
frame = stack.shift
|
146
|
+
end while frame.include?(__FILE__)
|
147
|
+
match = CALLER_REGEXP.match(frame)
|
148
|
+
@hash['gelf_file'] = match[1]
|
149
|
+
@hash['gelf_line'] = match[2].to_i
|
150
|
+
end
|
151
|
+
|
138
152
|
def check_presence_of_mandatory_attributes
|
139
|
-
%w(
|
153
|
+
%w(gelf_version gelf_short_message gelf_host).each do |attribute|
|
140
154
|
if @hash[attribute].to_s.empty?
|
141
|
-
raise ArgumentError.new("Options
|
155
|
+
raise ArgumentError.new("#{attribute} is missing. Options gelf_version, gelf_short_message and gelf_host must be set.")
|
142
156
|
end
|
143
157
|
end
|
144
158
|
end
|
@@ -146,7 +160,7 @@ module GELF
|
|
146
160
|
def datagrams_from_hash
|
147
161
|
raise ArgumentError.new("Hash is empty.") if @hash.nil? || @hash.empty?
|
148
162
|
|
149
|
-
@hash['
|
163
|
+
@hash['gelf_level'] = GELF::LEVELS_MAPPING[@hash['gelf_level']]
|
150
164
|
|
151
165
|
data = Zlib::Deflate.deflate(@hash.to_json).bytes
|
152
166
|
datagrams = []
|
@@ -168,8 +182,7 @@ module GELF
|
|
168
182
|
end
|
169
183
|
|
170
184
|
def self.chunk_data(data, msg_id, num, count)
|
171
|
-
|
172
|
-
return "\036\017" + msg_id + [num, count].pack('nn') + data.map(&:chr).join
|
185
|
+
return "\x1e\x0f" + msg_id + [num, count, *data].pack('nnC*')
|
173
186
|
end
|
174
187
|
|
175
188
|
def stringify_hash_keys
|
data/lib/gelf.rb
CHANGED
data/test/test_logger.rb
CHANGED
@@ -18,7 +18,7 @@ class TestLogger < Test::Unit::TestCase
|
|
18
18
|
should "implement add method with level and message from parameters" do
|
19
19
|
@notifier.expects(:notify_with_level!).with do |level, hash|
|
20
20
|
level == GELF::INFO &&
|
21
|
-
hash['
|
21
|
+
hash['gelf_short_message'] == 'Message'
|
22
22
|
end
|
23
23
|
@notifier.add(GELF::INFO, 'Message')
|
24
24
|
end
|
@@ -27,8 +27,8 @@ class TestLogger < Test::Unit::TestCase
|
|
27
27
|
should "implement add method with level and exception from parameters" do
|
28
28
|
@notifier.expects(:notify_with_level!).with do |level, hash|
|
29
29
|
level == GELF::INFO &&
|
30
|
-
hash['
|
31
|
-
hash['
|
30
|
+
hash['gelf_short_message'] == 'RuntimeError: Boom!' &&
|
31
|
+
hash['gelf_full_message'] =~ /^Backtrace/
|
32
32
|
end
|
33
33
|
@notifier.add(GELF::INFO, RuntimeError.new('Boom!'))
|
34
34
|
end
|
@@ -37,7 +37,7 @@ class TestLogger < Test::Unit::TestCase
|
|
37
37
|
should "implement add method with level from parameter and message from block" do
|
38
38
|
@notifier.expects(:notify_with_level!).with do |level, hash|
|
39
39
|
level == GELF::INFO &&
|
40
|
-
hash['
|
40
|
+
hash['gelf_short_message'] == 'Message'
|
41
41
|
end
|
42
42
|
@notifier.add(GELF::INFO) { 'Message' }
|
43
43
|
end
|
@@ -46,8 +46,8 @@ class TestLogger < Test::Unit::TestCase
|
|
46
46
|
should "implement add method with level from parameter and exception from block" do
|
47
47
|
@notifier.expects(:notify_with_level!).with do |level, hash|
|
48
48
|
level == GELF::INFO &&
|
49
|
-
hash['
|
50
|
-
hash['
|
49
|
+
hash['gelf_short_message'] == 'RuntimeError: Boom!' &&
|
50
|
+
hash['gelf_full_message'] =~ /^Backtrace/
|
51
51
|
end
|
52
52
|
@notifier.add(GELF::INFO) { RuntimeError.new('Boom!') }
|
53
53
|
end
|
@@ -56,8 +56,8 @@ class TestLogger < Test::Unit::TestCase
|
|
56
56
|
should "implement add method with level, message and facility from parameters" do
|
57
57
|
@notifier.expects(:notify_with_level!).with do |level, hash|
|
58
58
|
level == GELF::INFO &&
|
59
|
-
hash['
|
60
|
-
hash['
|
59
|
+
hash['gelf_short_message'] == 'Message' &&
|
60
|
+
hash['gelf_facility'] == 'Facility'
|
61
61
|
end
|
62
62
|
@notifier.add(GELF::INFO, 'Message', 'Facility')
|
63
63
|
end
|
@@ -66,9 +66,9 @@ class TestLogger < Test::Unit::TestCase
|
|
66
66
|
should "implement add method with level, exception and facility from parameters" do
|
67
67
|
@notifier.expects(:notify_with_level!).with do |level, hash|
|
68
68
|
level == GELF::INFO &&
|
69
|
-
hash['
|
70
|
-
hash['
|
71
|
-
hash['
|
69
|
+
hash['gelf_short_message'] == 'RuntimeError: Boom!' &&
|
70
|
+
hash['gelf_full_message'] =~ /^Backtrace/ &&
|
71
|
+
hash['gelf_facility'] == 'Facility'
|
72
72
|
end
|
73
73
|
@notifier.add(GELF::INFO, RuntimeError.new('Boom!'), 'Facility')
|
74
74
|
end
|
@@ -77,8 +77,8 @@ class TestLogger < Test::Unit::TestCase
|
|
77
77
|
should "implement add method with level and facility from parameters and message from block" do
|
78
78
|
@notifier.expects(:notify_with_level!).with do |level, hash|
|
79
79
|
level == GELF::INFO &&
|
80
|
-
hash['
|
81
|
-
hash['
|
80
|
+
hash['gelf_short_message'] == 'Message' &&
|
81
|
+
hash['gelf_facility'] == 'Facility'
|
82
82
|
end
|
83
83
|
@notifier.add(GELF::INFO, 'Facility') { 'Message' }
|
84
84
|
end
|
@@ -87,9 +87,9 @@ class TestLogger < Test::Unit::TestCase
|
|
87
87
|
should "implement add method with level and facility from parameters and exception from block" do
|
88
88
|
@notifier.expects(:notify_with_level!).with do |level, hash|
|
89
89
|
level == GELF::INFO &&
|
90
|
-
hash['
|
91
|
-
hash['
|
92
|
-
hash['
|
90
|
+
hash['gelf_short_message'] == 'RuntimeError: Boom!' &&
|
91
|
+
hash['gelf_full_message'] =~ /^Backtrace/ &&
|
92
|
+
hash['gelf_facility'] == 'Facility'
|
93
93
|
end
|
94
94
|
@notifier.add(GELF::INFO, 'Facility') { RuntimeError.new('Boom!') }
|
95
95
|
end
|
@@ -126,8 +126,8 @@ class TestLogger < Test::Unit::TestCase
|
|
126
126
|
|
127
127
|
should "support Notifier#<<" do
|
128
128
|
@notifier.expects(:notify_with_level!).with do |nil_, hash|
|
129
|
-
hash['
|
130
|
-
hash['
|
129
|
+
hash['gelf_short_message'] == "Message" &&
|
130
|
+
hash['gelf_level'] == GELF::UNKNOWN
|
131
131
|
end
|
132
132
|
@notifier << "Message"
|
133
133
|
end
|
data/test/test_notifier.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
-
HASH = {
|
3
|
+
HASH = { 'gelf_version' => '1.0',
|
4
|
+
'gelf_short_message' => 'message',
|
5
|
+
'gelf_host' => 'somehost',
|
6
|
+
'gelf_level' => GELF::WARN,
|
7
|
+
'gelf_facility' => 'test' }
|
4
8
|
|
5
9
|
RANDOM_DATA = ('A'..'Z').to_a
|
6
10
|
|
@@ -9,10 +13,12 @@ class TestNotifier < Test::Unit::TestCase
|
|
9
13
|
Socket.expects(:gethostname).returns('default_hostname')
|
10
14
|
n = GELF::Notifier.new
|
11
15
|
assert_equal ['localhost', 12201, 1420], [n.host, n.port, n.max_chunk_size]
|
12
|
-
assert_equal({
|
13
|
-
|
16
|
+
assert_equal( { 'gelf_version' => '1.0', 'gelf_level' => GELF::DEBUG,
|
17
|
+
'gelf_host' => 'default_hostname', 'gelf_facility' => 'gelf-rb' },
|
18
|
+
n.default_options )
|
19
|
+
n.host, n.port, n.max_chunk_size, n.default_options = 'graylog2.org', 7777, :lan, {'gelf_host' => 'grayhost'}
|
14
20
|
assert_equal ['graylog2.org', 7777, 8154], [n.host, n.port, n.max_chunk_size]
|
15
|
-
assert_equal({'
|
21
|
+
assert_equal({'gelf_host' => 'grayhost'}, n.default_options)
|
16
22
|
|
17
23
|
n.max_chunk_size = 1337.1
|
18
24
|
assert_equal 1337, n.max_chunk_size
|
@@ -33,71 +39,84 @@ class TestNotifier < Test::Unit::TestCase
|
|
33
39
|
end
|
34
40
|
|
35
41
|
should "work with hash" do
|
36
|
-
|
42
|
+
hash = @notifier.__send__(:extract_hash, HASH)
|
43
|
+
hash.delete('gelf_file')
|
44
|
+
hash.delete('gelf_line')
|
45
|
+
assert_equal HASH, hash
|
37
46
|
end
|
38
47
|
|
39
48
|
should "work with any object which responds to #to_hash" do
|
40
49
|
o = Object.new
|
41
50
|
o.expects(:to_hash).returns(HASH)
|
42
|
-
|
51
|
+
hash = @notifier.__send__(:extract_hash, o)
|
52
|
+
hash.delete('gelf_file')
|
53
|
+
hash.delete('gelf_line')
|
54
|
+
assert_equal HASH, hash
|
43
55
|
end
|
44
56
|
|
45
57
|
should "work with exception with backtrace" do
|
46
58
|
e = RuntimeError.new('message')
|
47
59
|
e.set_backtrace(caller)
|
48
60
|
hash = @notifier.__send__(:extract_hash, e)
|
49
|
-
assert_equal 'RuntimeError: message', hash['
|
50
|
-
assert_match /Backtrace/, hash['
|
51
|
-
assert_equal GELF::ERROR, hash['
|
61
|
+
assert_equal 'RuntimeError: message', hash['gelf_short_message']
|
62
|
+
assert_match /Backtrace/, hash['gelf_full_message']
|
63
|
+
assert_equal GELF::ERROR, hash['gelf_level']
|
52
64
|
end
|
53
65
|
|
54
66
|
should "work with exception without backtrace" do
|
55
67
|
e = RuntimeError.new('message')
|
56
68
|
hash = @notifier.__send__(:extract_hash, e)
|
57
|
-
assert_match /Backtrace is not available/, hash['
|
69
|
+
assert_match /Backtrace is not available/, hash['gelf_full_message']
|
58
70
|
end
|
59
71
|
|
60
72
|
should "work with exception and hash" do
|
61
|
-
e, h = RuntimeError.new('message'), {'param' => 1, '
|
73
|
+
e, h = RuntimeError.new('message'), {'param' => 1, 'gelf_level' => GELF::FATAL, 'gelf_short_message' => 'will be hidden by exception'}
|
62
74
|
hash = @notifier.__send__(:extract_hash, e, h)
|
63
|
-
assert_equal 'RuntimeError: message', hash['
|
64
|
-
assert_equal GELF::FATAL, hash['
|
75
|
+
assert_equal 'RuntimeError: message', hash['gelf_short_message']
|
76
|
+
assert_equal GELF::FATAL, hash['gelf_level']
|
65
77
|
assert_equal 1, hash['param']
|
66
78
|
end
|
67
79
|
|
68
80
|
should "work with plain text" do
|
69
81
|
hash = @notifier.__send__(:extract_hash, 'message')
|
70
|
-
assert_equal 'message', hash['
|
71
|
-
assert_equal GELF::INFO, hash['
|
82
|
+
assert_equal 'message', hash['gelf_short_message']
|
83
|
+
assert_equal GELF::INFO, hash['gelf_level']
|
72
84
|
end
|
73
85
|
|
74
86
|
should "work with plain text and hash" do
|
75
|
-
hash = @notifier.__send__(:extract_hash, 'message', '
|
76
|
-
assert_equal 'message', hash['
|
77
|
-
assert_equal GELF::WARN, hash['
|
87
|
+
hash = @notifier.__send__(:extract_hash, 'message', 'gelf_level' => GELF::WARN)
|
88
|
+
assert_equal 'message', hash['gelf_short_message']
|
89
|
+
assert_equal GELF::WARN, hash['gelf_level']
|
78
90
|
end
|
79
91
|
|
80
92
|
should "covert hash keys to strings" do
|
81
|
-
hash = @notifier.__send__(:extract_hash, :
|
82
|
-
assert hash.has_key?('
|
83
|
-
assert !hash.has_key?(:
|
93
|
+
hash = @notifier.__send__(:extract_hash, :gelf_short_message => :message)
|
94
|
+
assert hash.has_key?('gelf_short_message')
|
95
|
+
assert !hash.has_key?(:gelf_short_message)
|
84
96
|
end
|
85
97
|
|
86
98
|
should "not overwrite keys on convert" do
|
87
|
-
assert_raise(ArgumentError) { @notifier.__send__(:extract_hash, :
|
99
|
+
assert_raise(ArgumentError) { @notifier.__send__(:extract_hash, :gelf_short_message => :message1, 'gelf_short_message' => 'message2') }
|
88
100
|
end
|
89
101
|
|
90
102
|
should "use default_options" do
|
91
|
-
@notifier.default_options = {:
|
103
|
+
@notifier.default_options = {:foo => 'bar', 'gelf_short_message' => 'will be hidden by explicit argument'}
|
92
104
|
hash = @notifier.__send__(:extract_hash, HASH)
|
93
|
-
assert_equal '
|
94
|
-
assert_not_equal 'will be hidden by explicit argument', hash['
|
105
|
+
assert_equal 'bar', hash['foo']
|
106
|
+
assert_not_equal 'will be hidden by explicit argument', hash['gelf_short_message']
|
95
107
|
end
|
96
108
|
|
97
109
|
should "be compatible with HoptoadNotifier" do
|
98
110
|
# https://github.com/thoughtbot/hoptoad_notifier/blob/master/README.rdoc, section Going beyond exceptions
|
99
111
|
hash = @notifier.__send__(:extract_hash, :error_class => 'Class', :error_message => 'Message')
|
100
|
-
assert_equal 'Class: Message', hash['
|
112
|
+
assert_equal 'Class: Message', hash['gelf_short_message']
|
113
|
+
end
|
114
|
+
|
115
|
+
should "set file and line" do
|
116
|
+
line = __LINE__
|
117
|
+
hash = @notifier.__send__(:extract_hash, HASH)
|
118
|
+
assert_match /test_notifier.rb/, hash['gelf_file']
|
119
|
+
assert_equal line + 1, hash['gelf_line']
|
101
120
|
end
|
102
121
|
end
|
103
122
|
|
@@ -106,7 +125,7 @@ class TestNotifier < Test::Unit::TestCase
|
|
106
125
|
@notifier.instance_variable_set('@hash', HASH)
|
107
126
|
datagrams = @notifier.__send__(:datagrams_from_hash)
|
108
127
|
assert_equal 1, datagrams.count
|
109
|
-
assert_equal "\
|
128
|
+
assert_equal "\x78\x9c", datagrams[0][0..1] # zlib header
|
110
129
|
end
|
111
130
|
|
112
131
|
should "split long data" do
|
@@ -115,8 +134,15 @@ class TestNotifier < Test::Unit::TestCase
|
|
115
134
|
@notifier.instance_variable_set('@hash', hash)
|
116
135
|
datagrams = @notifier.__send__(:datagrams_from_hash)
|
117
136
|
assert_equal 2, datagrams.count
|
118
|
-
|
119
|
-
|
137
|
+
datagrams.each_index do |i|
|
138
|
+
datagram = datagrams[i]
|
139
|
+
assert datagram[0..1] == "\x1e\x0f" # chunked GELF magic number
|
140
|
+
# datagram[2..33] is a message id
|
141
|
+
assert_equal 0, datagram[34].ord
|
142
|
+
assert_equal i, datagram[35].ord
|
143
|
+
assert_equal 0, datagram[36].ord
|
144
|
+
assert_equal datagrams.count, datagram[37].ord
|
145
|
+
end
|
120
146
|
end
|
121
147
|
end
|
122
148
|
|
@@ -134,12 +160,12 @@ class TestNotifier < Test::Unit::TestCase
|
|
134
160
|
|
135
161
|
should "not send notifications with level below threshold" do
|
136
162
|
@sender.expects(:send_datagrams).never
|
137
|
-
@notifier.notify!(HASH.merge('
|
163
|
+
@notifier.notify!(HASH.merge('gelf_level' => GELF::DEBUG))
|
138
164
|
end
|
139
165
|
|
140
166
|
should "not notifications with level equal or above threshold" do
|
141
167
|
@sender.expects(:send_datagrams).once
|
142
|
-
@notifier.notify!(HASH.merge('
|
168
|
+
@notifier.notify!(HASH.merge('gelf_level' => GELF::WARN))
|
143
169
|
end
|
144
170
|
end
|
145
171
|
|
metadata
CHANGED
@@ -1,23 +1,23 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gelf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: -
|
4
|
+
hash: -1848230064
|
5
5
|
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 1
|
9
9
|
- 0
|
10
|
-
-
|
11
|
-
version: 1.1.0.
|
10
|
+
- beta4
|
11
|
+
version: 1.1.0.beta4
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
|
-
-
|
14
|
+
- Aleksey Palazhchenko
|
15
15
|
- Lennart Koopmann
|
16
16
|
autorequire:
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
19
|
|
20
|
-
date: 2010-
|
20
|
+
date: 2010-12-02 00:00:00 +03:00
|
21
21
|
default_executable:
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|
@@ -62,8 +62,8 @@ dependencies:
|
|
62
62
|
version: "0"
|
63
63
|
type: :development
|
64
64
|
version_requirements: *id003
|
65
|
-
description:
|
66
|
-
email:
|
65
|
+
description: Library to send GELF messages to Graylog2 logging server. Supports plain-text, GELF messages and exceptions.
|
66
|
+
email: aleksey.palazhchenko@gmail.com
|
67
67
|
executables: []
|
68
68
|
|
69
69
|
extensions: []
|
@@ -128,7 +128,7 @@ rubyforge_project:
|
|
128
128
|
rubygems_version: 1.3.7
|
129
129
|
signing_key:
|
130
130
|
specification_version: 3
|
131
|
-
summary: Library to send GELF messages to Graylog2 logging server
|
131
|
+
summary: Library to send GELF messages to Graylog2 logging server.
|
132
132
|
test_files:
|
133
133
|
- test/helper.rb
|
134
134
|
- test/test_deprecations.rb
|