resque-logstash 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3b18485e48d33c757334ae4e942731d81d8aee89
4
- data.tar.gz: 39750b6d4041405197fe1c13dc0cb9de91bb679c
3
+ metadata.gz: 8d7683274d9a2840ce11a0c75b7ccd636deed5f1
4
+ data.tar.gz: 2c06920d8aa5ef793360abc0d65d117ad0638466
5
5
  SHA512:
6
- metadata.gz: 0cee284bd671941f94e7d5bade7d0c064a7336550f013925ce029e1923b08807f4eee0899f391f2c0e1658c7a5721357d57eace9cf3c8ac7b4b00bc9dbe7ce5e
7
- data.tar.gz: 6a0840047311870353ad81c89d88efe03dc111f36f4e41a40bc48a6da4d506486e7eff907e1aeff1f7ddb0f6c9bd0566436b0e402ef4af8f53237aa57d6f1a6f
6
+ metadata.gz: 45f909fdba3149e175c47eb371444816e79a97bfaca0a2b533f6d79455781c3eda46289cd5e7cee91ea4a02a2733ae871ddd66446e727d2febd34b0886b99084
7
+ data.tar.gz: a527be77f93cc7bc6b9f746277d482ef139ccbc1f6c3cefede2e1cac616d67e271a450b3eabe8f6c01c50f047cfe7dde2172fdd08d961e95463e9cff928dede7
@@ -27,21 +27,36 @@ module Resque::Plugins
27
27
  def around_perform_logstash_measure(*args)
28
28
  started_at = Time.now
29
29
  yield
30
+ rescue Exception => e
31
+ raise
30
32
  ensure
31
- logstash_push_duration Time.now - started_at, args
33
+ logstash_push_duration Time.now - started_at, args, e
32
34
  end
33
35
 
34
- def logstash_push_duration(duration, args)
36
+ def logstash_push_duration(duration, args, exception)
35
37
  return if Logstash.config.disabled?
36
- Logstash.config.transport.push logstash_create_event(duration, args)
38
+ Logstash.config.transport.push logstash_create_event(duration, args, exception)
37
39
  end
38
40
 
39
- def logstash_create_event(duration, args)
40
- LogStash::Event.new "message" => "Job #{self.name} finished in #{duration}s",
41
+ def logstash_create_event(duration, args, exception)
42
+ if exception.nil?
43
+ params = {'status' => 'success'}
44
+ verb = 'finished'
45
+ else
46
+ params = {
47
+ 'status' => 'failure',
48
+ 'exception' => "#{exception.class}: #{exception.message}"
49
+ }
50
+ verb = 'failed'
51
+ end
52
+
53
+ params = params.merge "message" => "Job #{self.name} #{verb} in #{duration}s",
41
54
  "job" => self.name,
42
55
  "duration" => duration,
43
56
  "job_arguments" => args.map { |a| a.to_s },
44
57
  "tags" => Logstash.config.tags
58
+
59
+ LogStash::Event.new params
45
60
  end
46
61
  end
47
62
  end
@@ -2,16 +2,37 @@ module Resque::Plugins
2
2
  module Logstash
3
3
  module Transport
4
4
  class Redis
5
- def initialize(host, port, key = 'logstash')
6
- @host = host
7
- @port = port
5
+ def initialize(host, port = nil, key = 'logstash')
6
+ if host.is_a?(Hash)
7
+ initialize_with_keyword_arguments(host)
8
+ else
9
+ @redis_options = { host: host, port: port }
10
+ @key = key
11
+ end
12
+ end
13
+
14
+ def initialize_with_keyword_arguments(key: 'logstash', redis: nil, **redis_options)
8
15
  @key = key
16
+
17
+ if redis
18
+ @redis = redis
19
+ else
20
+ @redis_options = redis_options
21
+ end
9
22
  end
10
23
 
11
- attr_accessor :host, :port, :key
24
+ attr_reader :key
12
25
 
13
26
  def redis
14
- @redis ||= ::Redis.new(host: host, port: port)
27
+ @redis ||= ::Redis.new(@redis_options)
28
+ end
29
+
30
+ def host
31
+ @redis_options[:host]
32
+ end
33
+
34
+ def port
35
+ @redis_options[:port]
15
36
  end
16
37
 
17
38
  def push(value)
@@ -1,7 +1,7 @@
1
1
  module Resque
2
2
  module Plugins
3
3
  module Logstash
4
- VERSION = "0.0.2"
4
+ VERSION = "0.0.3"
5
5
  end
6
6
  end
7
7
  end
@@ -17,19 +17,24 @@ describe Resque::Plugins::Logstash do
17
17
 
18
18
  describe '#around_perform_logstash_measure' do
19
19
  it 'calls logstash_push_time with the duration' do
20
- expect(job).to receive(:logstash_push_duration).with(be_within(0.01).of(0.3), [])
20
+ expect(job).to receive(:logstash_push_duration).with(be_within(0.01).of(0.3), [], nil)
21
21
 
22
22
  job.around_perform_logstash_measure { sleep 0.3 }
23
23
  end
24
24
 
25
25
  it 'logs job arguments' do
26
- expect(job).to receive(:logstash_push_duration).with(kind_of(Numeric), [:test, "blah"])
26
+ expect(job).to receive(:logstash_push_duration).with(kind_of(Numeric), [:test, "blah"], nil)
27
27
  expect { job.around_perform_logstash_measure(:test, "blah") {} }.not_to raise_error
28
28
  end
29
+
30
+ it 'logs errors' do
31
+ expect(job).to receive(:logstash_push_duration).with(anything, anything, kind_of(Exception))
32
+ expect { job.around_perform_logstash_measure { raise "hello" } }.to raise_error
33
+ end
29
34
  end
30
35
 
31
36
  describe '#logstash_create_event' do
32
- let(:event) { job.logstash_create_event 0.3, [:arg1, "arg2"] }
37
+ let(:event) { job.logstash_create_event 0.3, [:arg1, "arg2"], nil }
33
38
 
34
39
  it 'puts classname as the job field' do
35
40
  expect(event.fields['job']).to eq('JobLike')
@@ -52,6 +57,30 @@ describe Resque::Plugins::Logstash do
52
57
  it 'adds job arguments as Strings' do
53
58
  expect(event.fields['job_arguments']).to eq(%w{arg1 arg2})
54
59
  end
60
+
61
+ it 'includes status' do
62
+ expect(event.fields['status']).to eq('success')
63
+ end
64
+
65
+ it 'does not include exception key' do
66
+ expect(event.fields).not_to include('exception')
67
+ end
68
+
69
+ context 'when called with an exception' do
70
+ let(:event) { job.logstash_create_event 0.3, [:arg1, "arg2"], ArgumentError.new("test") }
71
+
72
+ it 'includes status' do
73
+ expect(event.fields['status']).to eq('failure')
74
+ end
75
+
76
+ it 'includes the exception' do
77
+ expect(event.fields['exception']).to eq("ArgumentError: test")
78
+ end
79
+
80
+ it 'provides a nice message' do
81
+ expect(event['message']).to eq("Job JobLike failed in 0.3s")
82
+ end
83
+ end
55
84
  end
56
85
 
57
86
  describe '#logstash_push_duration' do
@@ -59,14 +88,14 @@ describe Resque::Plugins::Logstash do
59
88
  Resque::Plugins::Logstash.transport = double
60
89
  expect(Resque::Plugins::Logstash.transport).to receive(:push)
61
90
 
62
- job.logstash_push_duration(0.3, [])
91
+ job.logstash_push_duration(0.3, [], nil)
63
92
  end
64
93
 
65
94
  it 'does not push if disabled' do
66
95
  Resque::Plugins::Logstash.configure { |c| c.disabled = true }
67
96
 
68
97
  expect(Resque::Plugins::Logstash.transport).not_to receive(:push)
69
- job.logstash_push_duration(0.3, [])
98
+ job.logstash_push_duration(0.3, [], nil)
70
99
 
71
100
  Resque::Plugins::Logstash.configure { |c| c.disabled = false }
72
101
  end
@@ -76,7 +105,7 @@ describe Resque::Plugins::Logstash do
76
105
  it 'yields' do
77
106
  yielded = false
78
107
  Resque::Plugins::Logstash.configure { yielded = true }
79
- expect(yielded).to be_true
108
+ expect(yielded).to be true
80
109
  end
81
110
 
82
111
  it 'yield config object' do
@@ -10,6 +10,20 @@ describe Resque::Plugins::Logstash::Transport::Redis do
10
10
  expect(transport.port).to eq(42)
11
11
  expect(transport.key).to eq('key')
12
12
  end
13
+
14
+ it 'accepts host, port and the key as keyword arguments' do
15
+ transport = Resque::Plugins::Logstash::Transport::Redis.new(host: 'host', port: 42, key: 'key')
16
+ expect(transport.host).to eq('host')
17
+ expect(transport.port).to eq(42)
18
+ expect(transport.key).to eq('key')
19
+ end
20
+
21
+ it 'accepts redis and key as the parameters' do
22
+ transport = Resque::Plugins::Logstash::Transport::Redis.new(redis: double(rpush: 1), key: 'key')
23
+ expect(transport.key).to eq('key')
24
+
25
+ transport.push(a: 1)
26
+ end
13
27
  end
14
28
 
15
29
  describe '#push' do
metadata CHANGED
@@ -1,83 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: resque-logstash
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eugene Pimenov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-13 00:00:00.000000000 Z
11
+ date: 2015-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.3'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: resque
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '1.24'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.24'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: logstash-event
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '1.2'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '1.2'
83
83
  description: Measure duration of a resque job and log it in the logstash
@@ -87,8 +87,8 @@ executables: []
87
87
  extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
- - .gitignore
91
- - .rspec
90
+ - ".gitignore"
91
+ - ".rspec"
92
92
  - Gemfile
93
93
  - LICENSE.txt
94
94
  - README.md
@@ -111,17 +111,17 @@ require_paths:
111
111
  - lib
112
112
  required_ruby_version: !ruby/object:Gem::Requirement
113
113
  requirements:
114
- - - '>='
114
+ - - ">="
115
115
  - !ruby/object:Gem::Version
116
116
  version: '0'
117
117
  required_rubygems_version: !ruby/object:Gem::Requirement
118
118
  requirements:
119
- - - '>='
119
+ - - ">="
120
120
  - !ruby/object:Gem::Version
121
121
  version: '0'
122
122
  requirements: []
123
123
  rubyforge_project:
124
- rubygems_version: 2.0.3
124
+ rubygems_version: 2.4.5
125
125
  signing_key:
126
126
  specification_version: 4
127
127
  summary: A really simple logstash logger for resque