graylog2_exceptions 0.5.3 → 1.0.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 ADDED
@@ -0,0 +1,3 @@
1
+ pkg/
2
+ coverage/
3
+ Manifest
data/README ADDED
@@ -0,0 +1 @@
1
+ See http://www.graylog2.org/ for more information. Use gem as installation source. This is just the development repository.
data/Rakefile CHANGED
@@ -1,11 +1,42 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
- require 'echoe'
4
-
5
- Echoe.new('graylog2_exceptions', '0.5.3') do |p|
6
- p.description = "A Rack middleware that sends every Exception as GELF message to your Graylog2 server"
7
- p.url = 'http://www.graylog2.org/'
8
- p.author = 'Lennart Koopmann'
9
- p.email = 'lennart@socketfeed.com'
10
- p.runtime_dependencies = ["gelf"]
3
+
4
+ task :default => :test
5
+
6
+ begin
7
+ require 'jeweler'
8
+ Jeweler::Tasks.new do |gem|
9
+ gem.name = "graylog2_exceptions"
10
+ gem.summary = 'Graylog2 exception notifier'
11
+ gem.description = 'A Rack middleware that sends every Exception as GELF message to your Graylog2 server'
12
+ gem.email = "lennart@socketfeed.com"
13
+ gem.homepage = "http://www.graylog2.org/"
14
+ gem.authors = "Lennart Koopmann"
15
+ gem.add_dependency "gelf", "= 1.0.0"
16
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
17
+ end
18
+ Jeweler::GemcutterTasks.new
19
+ rescue LoadError
20
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
21
+ end
22
+
23
+ require 'rake/testtask'
24
+ Rake::TestTask.new(:test) do |test|
25
+ test.libs << 'lib' << 'test'
26
+ test.pattern = 'test/**/test_*.rb'
27
+ test.verbose = true
28
+ end
29
+
30
+ begin
31
+ require 'rcov/rcovtask'
32
+ Rcov::RcovTask.new do |test|
33
+ test.libs << 'test'
34
+ test.pattern = 'test/**/test_*.rb'
35
+ test.rcov_opts << '--exclude gem'
36
+ test.verbose = true
37
+ end
38
+ rescue LoadError
39
+ task :rcov do
40
+ abort "RCov is not available. In order to run rcov, you must: gem install rcov"
41
+ end
11
42
  end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.0
@@ -3,11 +3,17 @@ require 'gelf'
3
3
  require 'socket'
4
4
 
5
5
  class Graylog2Exceptions
6
- def initialize(app, options)
7
- @gl2_hostname = options[:host] || "localhost"
8
- @gl2_port = options[:port] || 12201
9
- @local_app_name = options[:local_app_name] || Socket::gethostname
6
+ attr_reader :args
10
7
 
8
+ def initialize(app, args = {})
9
+ standard_args = {
10
+ :hostname => "localhost",
11
+ :port => 12201,
12
+ :local_app_name => Socket::gethostname,
13
+ :level => 3
14
+ }
15
+
16
+ @args = standard_args.merge(args)
11
17
  @app = app
12
18
  end
13
19
 
@@ -20,7 +26,7 @@ class Graylog2Exceptions
20
26
  begin
21
27
  # Call the app we are monitoring
22
28
  @app.call(env)
23
- rescue StandardError, SyntaxError, LoadError => err
29
+ rescue => err
24
30
  # An exception has been raised. Send to Graylog2!
25
31
  send_to_graylog2(err)
26
32
 
@@ -31,14 +37,15 @@ class Graylog2Exceptions
31
37
 
32
38
  def send_to_graylog2 err
33
39
  begin
34
- gelf = Gelf.new @gl2_hostname, @gl2_port
35
- gelf.short_message = err.message
36
- gelf.full_message = err.backtrace.join("\n")
37
- gelf.level = @level
38
- gelf.host = @local_app_name
39
- gelf.file = err.backtrace[0].split(":")[0]
40
- gelf.line = err.backtrace[0].split(":")[1]
41
- gelf.send
40
+ notifier = GELF::Notifier.new(@args[:hostname], @args[:port])
41
+ notifier.notify!(
42
+ :short_message => err.message,
43
+ :full_message => err.backtrace.join("\n"),
44
+ :level => @args[:level],
45
+ :host => @args[:local_app_name],
46
+ :file => err.backtrace[0].split(":")[0],
47
+ :line => err.backtrace[0].split(":")[1]
48
+ )
42
49
  rescue => i_err
43
50
  puts "Graylog2 Exception logger. Could not send message: " + i_err.message
44
51
  end
data/test/helper.rb ADDED
@@ -0,0 +1,6 @@
1
+ require 'test/unit'
2
+ require 'zlib'
3
+
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
6
+ require 'graylog2_exceptions.rb'
@@ -0,0 +1,86 @@
1
+ require 'helper'
2
+
3
+ class TestGraylog2Exceptions < Test::Unit::TestCase
4
+
5
+ # Exceptions raised in the app should be thrown back
6
+ # to the app after handling. Simulating this by giving
7
+ # a nil app and expecting the caused exceptions.
8
+ def test_should_rethrow_exception
9
+ c = Graylog2Exceptions.new(nil, {})
10
+ assert_raise NoMethodError do
11
+ c.call nil
12
+ end
13
+ end
14
+
15
+ def test_correct_parameters_when_custom_set
16
+ c = Graylog2Exceptions.new(nil, {:host => "localhost", :port => 1337, :local_app_name => "yomama", :level => 1})
17
+
18
+ assert_equal "yomama", c.args[:local_app_name]
19
+ assert_equal "localhost", c.args[:hostname]
20
+ assert_equal 1337, c.args[:port]
21
+ assert_equal 1, c.args[:level]
22
+ end
23
+
24
+ def test_correct_parameters_when_not_custom_set
25
+ c = Graylog2Exceptions.new(nil, {})
26
+
27
+ assert_equal Socket.gethostname, c.args[:local_app_name]
28
+ assert_equal "localhost", c.args[:hostname]
29
+ assert_equal 12201, c.args[:port]
30
+ assert_equal 3, c.args[:level]
31
+ end
32
+
33
+ def test_send_exception_to_graylog2_without_custom_parameters
34
+ ex = build_exception
35
+
36
+ c = Graylog2Exceptions.new(nil, {})
37
+ sent = Zlib::Inflate.inflate(c.send_to_graylog2(ex).join)
38
+ json = JSON.parse(sent)
39
+
40
+ assert json["short_message"].include?('undefined method `klopfer!')
41
+ assert json["full_message"].include?('in `build_exception')
42
+ assert_equal 3, json["level"]
43
+ assert_equal Socket.gethostname, json["host"]
44
+ assert_equal ex.backtrace[0].split(":")[1], json["line"]
45
+ assert_equal ex.backtrace[0].split(":")[0], json["file"]
46
+ end
47
+
48
+ def test_send_exception_to_graylog2_with_custom_parameters
49
+ ex = build_exception
50
+
51
+ c = Graylog2Exceptions.new(nil, {:local_app_name => "machinexx", :level => 1})
52
+ sent = Zlib::Inflate.inflate(c.send_to_graylog2(ex).join)
53
+ json = JSON.parse(sent)
54
+
55
+ assert json["short_message"].include?('undefined method `klopfer!')
56
+ assert json["full_message"].include?('in `build_exception')
57
+ assert_equal 1, json["level"]
58
+ assert_equal "machinexx", json["host"]
59
+ assert_equal ex.backtrace[0].split(":")[1], json["line"]
60
+ assert_equal ex.backtrace[0].split(":")[0], json["file"]
61
+ end
62
+
63
+ def test_invalid_port_detection
64
+ ex = build_exception
65
+
66
+ c = Graylog2Exceptions.new(nil, {:port => 0})
67
+
68
+ # send_to_graylog2 returns nil when nothing was sent
69
+ # the test is fine when the message is just not sent
70
+ # and there are no exceptions. the method informs
71
+ # the user via puts
72
+ assert_nil c.send_to_graylog2(ex)
73
+ end
74
+
75
+ private
76
+
77
+ # Returns a self-caused exception we can send.
78
+ def build_exception
79
+ begin
80
+ klopfer!
81
+ rescue => e
82
+ return e
83
+ end
84
+ end
85
+
86
+ end
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graylog2_exceptions
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
5
4
  prerelease: false
6
5
  segments:
6
+ - 1
7
7
  - 0
8
- - 5
9
- - 3
10
- version: 0.5.3
8
+ - 0
9
+ version: 1.0.0
11
10
  platform: ruby
12
11
  authors:
13
12
  - Lennart Koopmann
@@ -15,7 +14,7 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-10-08 00:00:00 +02:00
17
+ date: 2010-11-19 00:00:00 +01:00
19
18
  default_executable:
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
@@ -24,12 +23,13 @@ dependencies:
24
23
  requirement: &id001 !ruby/object:Gem::Requirement
25
24
  none: false
26
25
  requirements:
27
- - - ">="
26
+ - - "="
28
27
  - !ruby/object:Gem::Version
29
- hash: 3
30
28
  segments:
29
+ - 1
30
+ - 0
31
31
  - 0
32
- version: "0"
32
+ version: 1.0.0
33
33
  type: :runtime
34
34
  version_requirements: *id001
35
35
  description: A Rack middleware that sends every Exception as GELF message to your Graylog2 server
@@ -39,22 +39,22 @@ executables: []
39
39
  extensions: []
40
40
 
41
41
  extra_rdoc_files:
42
- - lib/graylog2_exceptions.rb
42
+ - README
43
43
  files:
44
- - Manifest
44
+ - .gitignore
45
+ - README
45
46
  - Rakefile
46
- - graylog2_exceptions.gemspec
47
+ - VERSION
47
48
  - lib/graylog2_exceptions.rb
49
+ - test/helper.rb
50
+ - test/test_graylog2_exceptions.rb
48
51
  has_rdoc: true
49
52
  homepage: http://www.graylog2.org/
50
53
  licenses: []
51
54
 
52
55
  post_install_message:
53
56
  rdoc_options:
54
- - --line-numbers
55
- - --inline-source
56
- - --title
57
- - Graylog2_exceptions
57
+ - --charset=UTF-8
58
58
  require_paths:
59
59
  - lib
60
60
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -62,7 +62,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
62
62
  requirements:
63
63
  - - ">="
64
64
  - !ruby/object:Gem::Version
65
- hash: 3
66
65
  segments:
67
66
  - 0
68
67
  version: "0"
@@ -71,17 +70,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
71
70
  requirements:
72
71
  - - ">="
73
72
  - !ruby/object:Gem::Version
74
- hash: 11
75
73
  segments:
76
- - 1
77
- - 2
78
- version: "1.2"
74
+ - 0
75
+ version: "0"
79
76
  requirements: []
80
77
 
81
- rubyforge_project: graylog2_exceptions
78
+ rubyforge_project:
82
79
  rubygems_version: 1.3.7
83
80
  signing_key:
84
81
  specification_version: 3
85
- summary: A Rack middleware that sends every Exception as GELF message to your Graylog2 server
86
- test_files: []
87
-
82
+ summary: Graylog2 exception notifier
83
+ test_files:
84
+ - test/helper.rb
85
+ - test/test_graylog2_exceptions.rb
data/Manifest DELETED
@@ -1,4 +0,0 @@
1
- Manifest
2
- Rakefile
3
- graylog2_exceptions.gemspec
4
- lib/graylog2_exceptions.rb
@@ -1,33 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
- Gem::Specification.new do |s|
4
- s.name = %q{graylog2_exceptions}
5
- s.version = "0.5.3"
6
-
7
- s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
- s.authors = ["Lennart Koopmann"]
9
- s.date = %q{2010-10-08}
10
- s.description = %q{A Rack middleware that sends every Exception as GELF message to your Graylog2 server}
11
- s.email = %q{lennart@socketfeed.com}
12
- s.extra_rdoc_files = ["lib/graylog2_exceptions.rb"]
13
- s.files = ["Manifest", "Rakefile", "graylog2_exceptions.gemspec", "lib/graylog2_exceptions.rb"]
14
- s.homepage = %q{http://www.graylog2.org/}
15
- s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Graylog2_exceptions"]
16
- s.require_paths = ["lib"]
17
- s.rubyforge_project = %q{graylog2_exceptions}
18
- s.rubygems_version = %q{1.3.7}
19
- s.summary = %q{A Rack middleware that sends every Exception as GELF message to your Graylog2 server}
20
-
21
- if s.respond_to? :specification_version then
22
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
23
- s.specification_version = 3
24
-
25
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
26
- s.add_runtime_dependency(%q<gelf>, [">= 0"])
27
- else
28
- s.add_dependency(%q<gelf>, [">= 0"])
29
- end
30
- else
31
- s.add_dependency(%q<gelf>, [">= 0"])
32
- end
33
- end