justlogging-rails 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +28 -0
- data/Gemfile.lock +35 -36
- data/README.md +14 -1
- data/config/justlogging.yml +4 -2
- data/gemfiles/3.0.gemfile +6 -0
- data/gemfiles/3.1.gemfile +6 -0
- data/gemfiles/3.2.gemfile +6 -0
- data/gemfiles/edge.gemfile +6 -0
- data/justlogging-rails.gemspec +2 -3
- data/lib/justlogging.rb +6 -6
- data/lib/justlogging/agent.rb +8 -27
- data/lib/justlogging/exception_notification.rb +1 -3
- data/lib/justlogging/middleware.rb +8 -1
- data/lib/justlogging/railtie.rb +2 -1
- data/lib/justlogging/transaction.rb +16 -8
- data/lib/justlogging/transmitter.rb +51 -0
- data/lib/justlogging/version.rb +1 -1
- data/spec/justlogging/agent_spec.rb +19 -40
- data/spec/justlogging/exception_notification_spec.rb +1 -1
- data/spec/justlogging/middleware_spec.rb +1 -3
- data/spec/justlogging/railtie_spec.rb +11 -15
- data/spec/justlogging/transaction_spec.rb +67 -24
- data/spec/justlogging/transmitter_spec.rb +60 -0
- data/spec/justlogging_spec.rb +1 -2
- data/spec/spec_helper.rb +1 -1
- metadata +20 -18
data/.travis.yml
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
language: ruby
|
2
|
+
|
3
|
+
rvm:
|
4
|
+
# - 1.9.2
|
5
|
+
- 1.9.3
|
6
|
+
- 1.8.7
|
7
|
+
- ree
|
8
|
+
# - ruby-head
|
9
|
+
# - jruby-18mode
|
10
|
+
- jruby-19mode
|
11
|
+
# - jruby-head
|
12
|
+
# - rbx-18mode
|
13
|
+
- rbx-19mode
|
14
|
+
|
15
|
+
gemfile:
|
16
|
+
- gemfiles/3.0.gemfile
|
17
|
+
- gemfiles/3.1.gemfile
|
18
|
+
- gemfiles/3.2.gemfile
|
19
|
+
- gemfiles/edge.gemfile
|
20
|
+
|
21
|
+
matrix:
|
22
|
+
exclude:
|
23
|
+
- rvm: 1.8.7
|
24
|
+
gemfile: gemfiles/edge.gemfile
|
25
|
+
allow_failures:
|
26
|
+
- gemfile: gemfiles/edge.gemfile
|
27
|
+
|
28
|
+
script: RAILS_ENV=test bundle exec rspec spec
|
data/Gemfile.lock
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
justlogging-rails (0.0.
|
5
|
-
activesupport
|
4
|
+
justlogging-rails (0.0.5)
|
6
5
|
rails
|
7
6
|
rake
|
8
7
|
rspec
|
@@ -10,31 +9,31 @@ PATH
|
|
10
9
|
GEM
|
11
10
|
remote: https://rubygems.org/
|
12
11
|
specs:
|
13
|
-
actionmailer (3.2.
|
14
|
-
actionpack (= 3.2.
|
12
|
+
actionmailer (3.2.6)
|
13
|
+
actionpack (= 3.2.6)
|
15
14
|
mail (~> 2.4.4)
|
16
|
-
actionpack (3.2.
|
17
|
-
activemodel (= 3.2.
|
18
|
-
activesupport (= 3.2.
|
15
|
+
actionpack (3.2.6)
|
16
|
+
activemodel (= 3.2.6)
|
17
|
+
activesupport (= 3.2.6)
|
19
18
|
builder (~> 3.0.0)
|
20
19
|
erubis (~> 2.7.0)
|
21
|
-
journey (~> 1.0.
|
20
|
+
journey (~> 1.0.1)
|
22
21
|
rack (~> 1.4.0)
|
23
22
|
rack-cache (~> 1.2)
|
24
23
|
rack-test (~> 0.6.1)
|
25
24
|
sprockets (~> 2.1.3)
|
26
|
-
activemodel (3.2.
|
27
|
-
activesupport (= 3.2.
|
25
|
+
activemodel (3.2.6)
|
26
|
+
activesupport (= 3.2.6)
|
28
27
|
builder (~> 3.0.0)
|
29
|
-
activerecord (3.2.
|
30
|
-
activemodel (= 3.2.
|
31
|
-
activesupport (= 3.2.
|
28
|
+
activerecord (3.2.6)
|
29
|
+
activemodel (= 3.2.6)
|
30
|
+
activesupport (= 3.2.6)
|
32
31
|
arel (~> 3.0.2)
|
33
32
|
tzinfo (~> 0.3.29)
|
34
|
-
activeresource (3.2.
|
35
|
-
activemodel (= 3.2.
|
36
|
-
activesupport (= 3.2.
|
37
|
-
activesupport (3.2.
|
33
|
+
activeresource (3.2.6)
|
34
|
+
activemodel (= 3.2.6)
|
35
|
+
activesupport (= 3.2.6)
|
36
|
+
activesupport (3.2.6)
|
38
37
|
i18n (~> 0.6)
|
39
38
|
multi_json (~> 1.0)
|
40
39
|
arel (3.0.2)
|
@@ -44,7 +43,7 @@ GEM
|
|
44
43
|
hike (1.2.1)
|
45
44
|
i18n (0.6.0)
|
46
45
|
journey (1.0.4)
|
47
|
-
json (1.7.
|
46
|
+
json (1.7.3)
|
48
47
|
mail (2.4.4)
|
49
48
|
i18n (>= 0.4.0)
|
50
49
|
mime-types (~> 1.16)
|
@@ -59,17 +58,17 @@ GEM
|
|
59
58
|
rack
|
60
59
|
rack-test (0.6.1)
|
61
60
|
rack (>= 1.0)
|
62
|
-
rails (3.2.
|
63
|
-
actionmailer (= 3.2.
|
64
|
-
actionpack (= 3.2.
|
65
|
-
activerecord (= 3.2.
|
66
|
-
activeresource (= 3.2.
|
67
|
-
activesupport (= 3.2.
|
61
|
+
rails (3.2.6)
|
62
|
+
actionmailer (= 3.2.6)
|
63
|
+
actionpack (= 3.2.6)
|
64
|
+
activerecord (= 3.2.6)
|
65
|
+
activeresource (= 3.2.6)
|
66
|
+
activesupport (= 3.2.6)
|
68
67
|
bundler (~> 1.0)
|
69
|
-
railties (= 3.2.
|
70
|
-
railties (3.2.
|
71
|
-
actionpack (= 3.2.
|
72
|
-
activesupport (= 3.2.
|
68
|
+
railties (= 3.2.6)
|
69
|
+
railties (3.2.6)
|
70
|
+
actionpack (= 3.2.6)
|
71
|
+
activesupport (= 3.2.6)
|
73
72
|
rack-ssl (~> 1.3.2)
|
74
73
|
rake (>= 0.8.7)
|
75
74
|
rdoc (~> 3.4)
|
@@ -77,19 +76,19 @@ GEM
|
|
77
76
|
rake (0.9.2.2)
|
78
77
|
rdoc (3.12)
|
79
78
|
json (~> 1.4)
|
80
|
-
rspec (2.
|
81
|
-
rspec-core (~> 2.
|
82
|
-
rspec-expectations (~> 2.
|
83
|
-
rspec-mocks (~> 2.
|
84
|
-
rspec-core (2.
|
85
|
-
rspec-expectations (2.
|
79
|
+
rspec (2.10.0)
|
80
|
+
rspec-core (~> 2.10.0)
|
81
|
+
rspec-expectations (~> 2.10.0)
|
82
|
+
rspec-mocks (~> 2.10.0)
|
83
|
+
rspec-core (2.10.1)
|
84
|
+
rspec-expectations (2.10.0)
|
86
85
|
diff-lcs (~> 1.1.3)
|
87
|
-
rspec-mocks (2.
|
86
|
+
rspec-mocks (2.10.1)
|
88
87
|
sprockets (2.1.3)
|
89
88
|
hike (~> 1.2)
|
90
89
|
rack (~> 1.0)
|
91
90
|
tilt (~> 1.1, != 1.3.0)
|
92
|
-
thor (0.
|
91
|
+
thor (0.15.3)
|
93
92
|
tilt (1.3.3)
|
94
93
|
treetop (1.4.10)
|
95
94
|
polyglot
|
data/README.md
CHANGED
data/config/justlogging.yml
CHANGED
data/justlogging-rails.gemspec
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
require File.expand_path('../lib/justlogging/version', __FILE__)
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
|
-
gem.authors = ["Robert Beekman"]
|
6
|
-
gem.email = ["robert@80beans.com"]
|
5
|
+
gem.authors = ["Robert Beekman", "Steven Weller"]
|
6
|
+
gem.email = ["robert@80beans.com", "steven@80beans.com"]
|
7
7
|
gem.description = %q{The official justlogging.com gem}
|
8
8
|
gem.summary = %q{Logs rails's notifications to justlogging.com}
|
9
9
|
gem.homepage = "http://github.com/80beans/justlogging-rails"
|
@@ -17,6 +17,5 @@ Gem::Specification.new do |gem|
|
|
17
17
|
|
18
18
|
gem.add_dependency 'rails'
|
19
19
|
gem.add_dependency 'rspec'
|
20
|
-
gem.add_dependency 'activesupport'
|
21
20
|
gem.add_dependency 'rake'
|
22
21
|
end
|
data/lib/justlogging.rb
CHANGED
@@ -1,11 +1,8 @@
|
|
1
1
|
raise 'This justlogging gem only works with rails' unless defined?(Rails)
|
2
|
-
require 'net/http'
|
3
|
-
require 'net/https'
|
4
|
-
require 'uri'
|
5
2
|
|
6
3
|
module Justlogging
|
7
|
-
|
8
4
|
class << self
|
5
|
+
|
9
6
|
attr_accessor :subscriber
|
10
7
|
|
11
8
|
def transactions
|
@@ -17,12 +14,15 @@ module Justlogging
|
|
17
14
|
end
|
18
15
|
|
19
16
|
def config
|
20
|
-
@config ||= {:ignore_exceptions => []}.merge(
|
17
|
+
@config ||= {:ignore_exceptions => []}.merge(
|
18
|
+
YAML.load_file("#{Rails.root}/config/justlogging.yml")[Rails.env].
|
19
|
+
symbolize_keys)
|
21
20
|
end
|
22
|
-
end
|
23
21
|
|
22
|
+
end
|
24
23
|
end
|
25
24
|
|
25
|
+
require 'justlogging/transmitter'
|
26
26
|
require 'justlogging/agent'
|
27
27
|
require 'justlogging/middleware'
|
28
28
|
require 'justlogging/transaction'
|
data/lib/justlogging/agent.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module Justlogging
|
2
|
-
|
3
2
|
class Agent
|
4
3
|
|
5
|
-
attr_reader :queue, :active, :sleep_time
|
4
|
+
attr_reader :queue, :active, :sleep_time, :transmitter
|
5
|
+
ACTION = 'log_entries'
|
6
6
|
|
7
7
|
def initialize
|
8
8
|
@sleep_time = 5
|
@@ -16,37 +16,19 @@ module Justlogging
|
|
16
16
|
sleep @sleep_time
|
17
17
|
end
|
18
18
|
end
|
19
|
+
@transmitter = Transmitter.new(
|
20
|
+
Justlogging.config[:endpoint],
|
21
|
+
ACTION,
|
22
|
+
Justlogging.config[:api_key]
|
23
|
+
)
|
19
24
|
end
|
20
25
|
|
21
26
|
def add_to_queue(transaction)
|
22
27
|
@queue << transaction
|
23
28
|
end
|
24
29
|
|
25
|
-
def uri
|
26
|
-
URI(Justlogging.config[:endpoint])
|
27
|
-
end
|
28
|
-
|
29
|
-
def http_client
|
30
|
-
Net::HTTP.new(uri.host, uri.port).tap do |http|
|
31
|
-
if uri.scheme == 'https'
|
32
|
-
http.use_ssl = true
|
33
|
-
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
30
|
def send_queue
|
39
|
-
|
40
|
-
request = Net::HTTP::Post.new(uri.request_uri)
|
41
|
-
request.set_form_data('api_key' => Justlogging.config[:api_key], 'log_entries' => json)
|
42
|
-
|
43
|
-
begin
|
44
|
-
result = http_client.request(request)
|
45
|
-
code = result.code
|
46
|
-
rescue => error
|
47
|
-
code = nil
|
48
|
-
end
|
49
|
-
handle_result(code)
|
31
|
+
handle_result transmitter.transmit(:log_entries => queue)
|
50
32
|
end
|
51
33
|
|
52
34
|
# Empty queue is result is 200 ok.
|
@@ -64,5 +46,4 @@ module Justlogging
|
|
64
46
|
end
|
65
47
|
|
66
48
|
end
|
67
|
-
|
68
49
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
module Justlogging
|
2
2
|
class MissingController
|
3
|
+
|
3
4
|
def method_missing(*args, &block)
|
4
5
|
end
|
5
6
|
end
|
@@ -9,10 +10,7 @@ module Justlogging
|
|
9
10
|
attr_reader :env, :exception, :kontroller, :request, :backtrace
|
10
11
|
|
11
12
|
def initialize(env, exception)
|
12
|
-
#@env = env
|
13
13
|
@exception = exception
|
14
|
-
#@kontroller = env['action_controller.instance'] || Justlogging::MissingController.new
|
15
|
-
#@request = ActionDispatch::Request.new(env)
|
16
14
|
@backtrace = Rails.respond_to?(:backtrace_cleaner) ?
|
17
15
|
Rails.backtrace_cleaner.send(:filter, exception.backtrace) :
|
18
16
|
exception.backtrace
|
@@ -11,7 +11,7 @@ module Justlogging
|
|
11
11
|
Justlogging::Transaction.create(env['action_dispatch.request_id'], env)
|
12
12
|
@app.call(env)
|
13
13
|
rescue Exception => exception
|
14
|
-
unless
|
14
|
+
unless includes_exception?(exception)
|
15
15
|
Justlogging::Transaction.current.add_exception(
|
16
16
|
Justlogging::ExceptionNotification.new(env, exception)
|
17
17
|
)
|
@@ -21,5 +21,12 @@ module Justlogging
|
|
21
21
|
Justlogging::Transaction.current.complete!
|
22
22
|
end
|
23
23
|
|
24
|
+
private
|
25
|
+
|
26
|
+
def includes_exception?(exception)
|
27
|
+
Array.wrap(Justlogging.config[:ignore_exceptions]).
|
28
|
+
include?(exception.class.name)
|
29
|
+
end
|
30
|
+
|
24
31
|
end
|
25
32
|
end
|
data/lib/justlogging/railtie.rb
CHANGED
@@ -4,7 +4,8 @@ module Justlogging
|
|
4
4
|
class Railtie < Rails::Railtie
|
5
5
|
|
6
6
|
initializer "justlogging.configure_rails_initialization" do |app|
|
7
|
-
app.middleware.
|
7
|
+
app.middleware.insert_before ActionDispatch::RemoteIp,
|
8
|
+
Justlogging::Middleware
|
8
9
|
|
9
10
|
Justlogging.subscriber = ActiveSupport::Notifications.subscribe do |*args|
|
10
11
|
if Justlogging::Transaction.current
|
@@ -36,6 +36,10 @@ module Justlogging
|
|
36
36
|
@exception = ex
|
37
37
|
end
|
38
38
|
|
39
|
+
def exception?
|
40
|
+
!! @exception
|
41
|
+
end
|
42
|
+
|
39
43
|
def formatted_exception
|
40
44
|
return {} unless @exception
|
41
45
|
{
|
@@ -58,15 +62,20 @@ module Justlogging
|
|
58
62
|
end
|
59
63
|
|
60
64
|
def formatted_log_entry
|
61
|
-
|
62
|
-
:duration => @log_entry.duration,
|
63
|
-
:time => @log_entry.time,
|
64
|
-
:end => @log_entry.end,
|
65
|
+
{
|
65
66
|
:name => request.fullpath,
|
66
67
|
:environment => Rails.env,
|
67
68
|
:server => @env['SERVER_NAME'],
|
68
69
|
:kind => 'http_request'
|
69
|
-
)
|
70
|
+
}.tap { |o| o.merge!(formatted_payload) unless exception? }
|
71
|
+
end
|
72
|
+
|
73
|
+
def formatted_payload
|
74
|
+
@log_entry.payload.merge(
|
75
|
+
:duration => @log_entry.duration,
|
76
|
+
:time => @log_entry.time,
|
77
|
+
:end => @log_entry.end
|
78
|
+
).tap { |o| o[:action] = "#{o.delete(:controller)}##{o[:action]}" }
|
70
79
|
end
|
71
80
|
|
72
81
|
def to_hash
|
@@ -83,10 +92,9 @@ module Justlogging
|
|
83
92
|
Thread.current[:justlogging_transaction_id] = nil
|
84
93
|
current_transaction = Justlogging.transactions.delete(@id)
|
85
94
|
if @events.any? || @exception.present?
|
86
|
-
Justlogging.agent.add_to_queue(
|
87
|
-
current_transaction.to_hash
|
88
|
-
)
|
95
|
+
Justlogging.agent.add_to_queue(current_transaction.to_hash)
|
89
96
|
end
|
90
97
|
end
|
98
|
+
|
91
99
|
end
|
92
100
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'net/https'
|
3
|
+
require 'uri'
|
4
|
+
|
5
|
+
module Justlogging
|
6
|
+
class Transmitter
|
7
|
+
|
8
|
+
attr_accessor :endpoint, :action, :api_key
|
9
|
+
|
10
|
+
def initialize(endpoint, action, api_key)
|
11
|
+
@endpoint = endpoint
|
12
|
+
@action = action
|
13
|
+
@api_key = api_key
|
14
|
+
end
|
15
|
+
|
16
|
+
def uri
|
17
|
+
URI("#{@endpoint}/#{@action}")
|
18
|
+
end
|
19
|
+
|
20
|
+
def transmit(payload)
|
21
|
+
begin
|
22
|
+
result = http_client.request(encoded_message(payload))
|
23
|
+
result.code
|
24
|
+
rescue
|
25
|
+
nil
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def encoded_message(payload)
|
30
|
+
message(ActiveSupport::JSON.encode(payload))
|
31
|
+
end
|
32
|
+
|
33
|
+
def message(json)
|
34
|
+
Net::HTTP::Post.new(uri.request_uri).tap do |post|
|
35
|
+
post.set_form_data(json.reverse_merge('api_key' => api_key))
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
protected
|
40
|
+
|
41
|
+
def http_client
|
42
|
+
Net::HTTP.new(uri.host, uri.port).tap do |http|
|
43
|
+
if uri.scheme == 'https'
|
44
|
+
http.use_ssl = true
|
45
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
data/lib/justlogging/version.rb
CHANGED
@@ -1,79 +1,58 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Justlogging::Agent do
|
4
|
-
before :each do
|
5
|
-
Thread.stub(:new)
|
6
|
-
end
|
7
|
-
|
8
|
-
let(:agent) { Justlogging::Agent.new }
|
9
4
|
let(:event) { stub(:name => 'event') }
|
5
|
+
before(:each) { Thread.stub(:new) }
|
10
6
|
|
11
7
|
describe '#add_to_queue' do
|
12
8
|
it 'should add the event to the queue' do
|
13
9
|
expect {
|
14
|
-
|
15
|
-
}.to change(
|
10
|
+
subject.add_to_queue(event)
|
11
|
+
}.to change(subject, :queue).to([event])
|
16
12
|
end
|
17
13
|
end
|
18
14
|
|
19
|
-
describe
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
agent.add_to_queue(event)
|
24
|
-
ActiveSupport::JSON.stub(:encode => '{"abc":"def"}')
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'should call Net::HTTP.post_form with the correct params' do
|
28
|
-
post = stub
|
29
|
-
post.should_receive(:set_form_data).with(
|
30
|
-
'api_key' => 'abc',
|
31
|
-
'log_entries' => '{"abc":"def"}'
|
32
|
-
)
|
33
|
-
|
34
|
-
Net::HTTP::Post.should_receive(:new).with(
|
35
|
-
'/api/1/log_entries'
|
36
|
-
).and_return(post)
|
15
|
+
describe "#send_queue" do
|
16
|
+
it "transmits" do
|
17
|
+
subject.stub(:queue => 'foo')
|
18
|
+
subject.transmitter.should_receive(:transmit).with(:log_entries => 'foo')
|
37
19
|
end
|
38
20
|
|
39
|
-
it "
|
40
|
-
|
21
|
+
it "handles the return code" do
|
22
|
+
subject.transmitter.stub(:transmit => '200')
|
23
|
+
subject.should_receive(:handle_result).with('200')
|
41
24
|
end
|
42
25
|
|
43
|
-
after {
|
26
|
+
after { subject.send_queue }
|
44
27
|
end
|
45
28
|
|
46
29
|
describe '#handle_result' do
|
47
|
-
before
|
48
|
-
agent.add_to_queue(event)
|
49
|
-
end
|
30
|
+
before { subject.add_to_queue(event) }
|
50
31
|
|
51
32
|
it "should empty the queue for 200" do
|
52
33
|
expect {
|
53
|
-
|
54
|
-
}.to change(
|
34
|
+
subject.handle_result('200')
|
35
|
+
}.to change(subject, :queue).to([])
|
55
36
|
end
|
56
37
|
|
57
38
|
it "should raise the sleep_time time for 403" do
|
58
39
|
expect {
|
59
|
-
|
60
|
-
}.to change(
|
40
|
+
subject.handle_result('403')
|
41
|
+
}.to change(subject, :sleep_time).to(7.5)
|
61
42
|
end
|
62
43
|
|
63
44
|
context "any other response" do
|
64
45
|
|
65
46
|
it "should deactivate for any other response code" do
|
66
47
|
expect {
|
67
|
-
|
68
|
-
}.to change(
|
48
|
+
subject.handle_result('500')
|
49
|
+
}.to change(subject, :active).to(false)
|
69
50
|
end
|
70
51
|
|
71
52
|
it "should unsubscribe from the justlogging subscriber" do
|
72
53
|
ActiveSupport::Notifications.should_receive(:unsubscribe)
|
73
|
-
|
54
|
+
subject.handle_result('500')
|
74
55
|
end
|
75
56
|
end
|
76
|
-
|
77
57
|
end
|
78
|
-
|
79
58
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Justlogging::ExceptionNotification do
|
4
|
-
before { Rails.stub(:respond_to? => false) }
|
5
4
|
let(:error) { StandardError.new('moo') }
|
6
5
|
let(:notification) { Justlogging::ExceptionNotification.new({}, error) }
|
7
6
|
subject { notification }
|
7
|
+
before { Rails.stub(:respond_to? => false) }
|
8
8
|
|
9
9
|
its(:exception) { should == error }
|
10
10
|
its(:name) { should == 'StandardError' }
|
@@ -1,8 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
module Justlogging
|
4
|
-
|
5
|
-
end
|
4
|
+
IgnoreMeError = Class.new(StandardError)
|
6
5
|
end
|
7
6
|
|
8
7
|
class AppWithError
|
@@ -75,6 +74,5 @@ describe Justlogging::Middleware do
|
|
75
74
|
after { middleware.call(env) rescue nil }
|
76
75
|
end
|
77
76
|
end
|
78
|
-
|
79
77
|
end
|
80
78
|
end
|
@@ -3,17 +3,15 @@ require 'action_controller/railtie'
|
|
3
3
|
require 'justlogging/railtie'
|
4
4
|
|
5
5
|
describe Justlogging::Railtie do
|
6
|
-
|
7
|
-
before :all do
|
8
|
-
MyApp::Application.initialize!
|
9
|
-
end
|
6
|
+
before(:all) { MyApp::Application.initialize! }
|
10
7
|
|
11
8
|
it "should have set the justlogging subscriber" do
|
12
|
-
Justlogging.subscriber.
|
9
|
+
Justlogging.subscriber.
|
10
|
+
should be_a ActiveSupport::Notifications::Fanout::Subscriber
|
13
11
|
end
|
14
12
|
|
15
13
|
it "should have added the middleware for exceptions" do
|
16
|
-
MyApp::Application.middleware.
|
14
|
+
MyApp::Application.middleware.to_a.should include Justlogging::Middleware
|
17
15
|
end
|
18
16
|
|
19
17
|
context "non action_controller event" do
|
@@ -21,13 +19,11 @@ describe Justlogging::Railtie do
|
|
21
19
|
it "should call add_event for non action_controller event" do
|
22
20
|
current = stub
|
23
21
|
current.should_receive(:add_event)
|
24
|
-
Justlogging::Transaction.should_receive(:current).twice.
|
25
|
-
|
26
|
-
|
27
|
-
after do
|
28
|
-
ActiveSupport::Notifications.instrument 'query.mongoid'
|
22
|
+
Justlogging::Transaction.should_receive(:current).twice.
|
23
|
+
and_return(current)
|
29
24
|
end
|
30
25
|
|
26
|
+
after { ActiveSupport::Notifications.instrument 'query.mongoid' }
|
31
27
|
end
|
32
28
|
|
33
29
|
context "action_controller event" do
|
@@ -35,13 +31,13 @@ describe Justlogging::Railtie do
|
|
35
31
|
it "should call set_log_entry for action_controller event" do
|
36
32
|
current = stub
|
37
33
|
current.should_receive(:set_log_entry)
|
38
|
-
Justlogging::Transaction.should_receive(:current).twice.
|
34
|
+
Justlogging::Transaction.should_receive(:current).twice.
|
35
|
+
and_return(current)
|
39
36
|
end
|
40
37
|
|
41
38
|
after do
|
42
|
-
ActiveSupport::Notifications.
|
39
|
+
ActiveSupport::Notifications.
|
40
|
+
instrument 'process_action.action_controller'
|
43
41
|
end
|
44
|
-
|
45
42
|
end
|
46
|
-
|
47
43
|
end
|
@@ -25,7 +25,9 @@ describe Justlogging::Transaction do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
describe 'transaction instance' do
|
28
|
-
let(:transaction)
|
28
|
+
let(:transaction) do
|
29
|
+
Justlogging::Transaction.create('1', {'SERVER_NAME' => 'localhost'})
|
30
|
+
end
|
29
31
|
|
30
32
|
describe '#request' do
|
31
33
|
subject { transaction.request }
|
@@ -64,10 +66,14 @@ describe Justlogging::Transaction do
|
|
64
66
|
end
|
65
67
|
|
66
68
|
describe '#formatted_exception' do
|
67
|
-
let(:exception)
|
68
|
-
|
69
|
+
let(:exception) do
|
70
|
+
stub({
|
71
|
+
:backtrace => ['test'],
|
72
|
+
:name => 'Justlogging::Error',
|
73
|
+
:message => 'nooo'
|
74
|
+
})
|
75
|
+
end
|
69
76
|
before { transaction.add_exception(exception) }
|
70
|
-
|
71
77
|
subject { transaction.formatted_exception }
|
72
78
|
|
73
79
|
it 'should return a formatted exception' do
|
@@ -82,43 +88,84 @@ describe Justlogging::Transaction do
|
|
82
88
|
describe '#formatted_events' do
|
83
89
|
let(:start_time) { Time.parse('01-01-2001 10:00:00') }
|
84
90
|
let(:end_time) { Time.parse('01-01-2001 10:00:01') }
|
85
|
-
let(:
|
91
|
+
let(:payload) do
|
92
|
+
{
|
93
|
+
:name => 'name',
|
94
|
+
:duration => 2,
|
95
|
+
:time => start_time,
|
96
|
+
:end => end_time,
|
97
|
+
:payload => {}
|
98
|
+
}
|
99
|
+
end
|
100
|
+
let(:event) { stub(payload) }
|
86
101
|
|
87
102
|
before { transaction.add_event(event) }
|
88
103
|
|
89
104
|
subject { transaction.formatted_events }
|
90
105
|
|
91
106
|
it 'should return formatted events' do
|
92
|
-
should == [
|
107
|
+
should == [payload]
|
93
108
|
end
|
94
109
|
end
|
95
110
|
|
96
111
|
describe '#formatted_log_entry' do
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
112
|
+
subject { transaction.formatted_log_entry }
|
113
|
+
before { transaction.stub(:request => mock(:fullpath => '/blog')) }
|
114
|
+
before { Rails.stub(:env => 'care about it') }
|
115
|
+
|
116
|
+
context "successfully handled request" do
|
117
|
+
before { transaction.stub(:exception? => false) }
|
118
|
+
before { transaction.stub(:formatted_payload => {:foo => :bar}) }
|
119
|
+
|
120
|
+
it 'returns a formatted log_entry' do
|
121
|
+
should == {
|
122
|
+
:name => '/blog',
|
123
|
+
:environment => 'care about it',
|
124
|
+
:server => 'localhost',
|
125
|
+
:kind => 'http_request',
|
126
|
+
:foo => :bar
|
127
|
+
}
|
128
|
+
end
|
129
|
+
end
|
101
130
|
|
102
|
-
|
103
|
-
|
131
|
+
context "exception" do
|
132
|
+
before { transaction.stub(:exception? => true) }
|
104
133
|
|
105
|
-
|
134
|
+
it 'returns a formatted log_entry' do
|
135
|
+
should == {
|
136
|
+
:name => '/blog',
|
137
|
+
:environment => 'care about it',
|
138
|
+
:server => 'localhost',
|
139
|
+
:kind => 'http_request'
|
140
|
+
}
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
describe '#formatted_payload' do
|
146
|
+
let(:start_time) { Time.parse('01-01-2001 10:00:00') }
|
147
|
+
let(:end_time) { Time.parse('01-01-2001 10:00:01') }
|
148
|
+
subject { transaction.formatted_payload }
|
149
|
+
before do
|
150
|
+
transaction.set_log_entry(mock(
|
151
|
+
:name => 'name', :duration => 2, :time => start_time,
|
152
|
+
:end => end_time,
|
153
|
+
:payload => {:controller => 'controller', :action => 'action'}
|
154
|
+
))
|
155
|
+
end
|
106
156
|
|
107
|
-
it '
|
157
|
+
it 'returns the formatted payload of the log entry' do
|
108
158
|
should == {
|
109
|
-
:
|
159
|
+
:action => 'controller#action',
|
110
160
|
:duration => 2,
|
111
161
|
:time => start_time,
|
112
|
-
:end => end_time
|
113
|
-
:name => '/blog',
|
114
|
-
:environment => "development",
|
115
|
-
:server => 'localhost',
|
116
|
-
:kind => "http_request"
|
162
|
+
:end => end_time
|
117
163
|
}
|
118
164
|
end
|
119
165
|
end
|
120
166
|
|
121
167
|
describe '#to_hash' do
|
168
|
+
subject { transaction.to_hash }
|
122
169
|
before { transaction.stub(
|
123
170
|
:formatted_log_entry => {:name => 'log_entry'},
|
124
171
|
:formatted_events => [{:name => 'event'}],
|
@@ -126,8 +173,6 @@ describe Justlogging::Transaction do
|
|
126
173
|
:failed => false
|
127
174
|
)}
|
128
175
|
|
129
|
-
subject { transaction.to_hash }
|
130
|
-
|
131
176
|
it 'should return a formatted hash of the transaction data' do
|
132
177
|
should == {
|
133
178
|
:request_id => '1',
|
@@ -184,8 +229,6 @@ describe Justlogging::Transaction do
|
|
184
229
|
Thread.current[:justlogging_transaction_id].should be_nil
|
185
230
|
end
|
186
231
|
end
|
187
|
-
|
188
232
|
end
|
189
233
|
end
|
190
|
-
|
191
234
|
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Justlogging::Transmitter do
|
4
|
+
let(:_80beans_) { 'http://www.80beans.com' }
|
5
|
+
let(:action) { 'action' }
|
6
|
+
let(:klass) { Justlogging::Transmitter }
|
7
|
+
let(:instance) { klass.new(_80beans_, action, :the_api_key) }
|
8
|
+
subject { instance }
|
9
|
+
|
10
|
+
describe "#uri" do
|
11
|
+
it "returns uri" do
|
12
|
+
subject.uri.should == URI("http://www.80beans.com/action")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#transmit" do
|
17
|
+
subject { instance.transmit(:shipit => :payload) }
|
18
|
+
|
19
|
+
context "without exception" do
|
20
|
+
let(:http_client) { stub(:request => stub(:code => '200')) }
|
21
|
+
before { instance.stub(:encoded_message => :the_message) }
|
22
|
+
before { instance.stub(:http_client => http_client) }
|
23
|
+
|
24
|
+
it { should == '200' }
|
25
|
+
end
|
26
|
+
|
27
|
+
context "with exception" do
|
28
|
+
let(:http_client) { stub(:request) }
|
29
|
+
before { instance.stub(:http_client).and_raise(Net::HTTPGatewayTimeOut) }
|
30
|
+
|
31
|
+
it { should == nil }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#encoded_message" do
|
36
|
+
it "calls message" do
|
37
|
+
ActiveSupport::JSON.stub(:encode => :json)
|
38
|
+
subject.should_receive(:message).with(:json)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "encodes the payload using json" do
|
42
|
+
subject.stub(:message)
|
43
|
+
ActiveSupport::JSON.should_receive(:encode).with(:payload)
|
44
|
+
end
|
45
|
+
|
46
|
+
after { subject.encoded_message(:payload) }
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "#message" do
|
50
|
+
it "calls Net::HTTP.post_form with the correct params" do
|
51
|
+
post = stub
|
52
|
+
post.should_receive(:set_form_data).with(
|
53
|
+
'api_key' => :the_api_key,
|
54
|
+
:the => :payload
|
55
|
+
)
|
56
|
+
Net::HTTP::Post.should_receive(:new).with('/action').and_return(post)
|
57
|
+
instance.message(:the => :payload)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
data/spec/justlogging_spec.rb
CHANGED
@@ -20,7 +20,7 @@ describe Justlogging do
|
|
20
20
|
subject { Justlogging.config }
|
21
21
|
|
22
22
|
it 'should return the endpoint' do
|
23
|
-
subject[:endpoint].should eq 'http://localhost:3000/api/1
|
23
|
+
subject[:endpoint].should eq 'http://localhost:3000/api/1'
|
24
24
|
end
|
25
25
|
|
26
26
|
it 'should return the api key' do
|
@@ -31,5 +31,4 @@ describe Justlogging do
|
|
31
31
|
subject[:ignore_exceptions].should eq []
|
32
32
|
end
|
33
33
|
end
|
34
|
-
|
35
34
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: justlogging-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Robert Beekman
|
9
|
+
- Steven Weller
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2012-
|
13
|
+
date: 2012-09-07 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: rails
|
@@ -43,22 +44,6 @@ dependencies:
|
|
43
44
|
- - ! '>='
|
44
45
|
- !ruby/object:Gem::Version
|
45
46
|
version: '0'
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: activesupport
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
|
-
requirements:
|
51
|
-
- - ! '>='
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '0'
|
54
|
-
type: :runtime
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ! '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
47
|
- !ruby/object:Gem::Dependency
|
63
48
|
name: rake
|
64
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -78,6 +63,7 @@ dependencies:
|
|
78
63
|
description: The official justlogging.com gem
|
79
64
|
email:
|
80
65
|
- robert@80beans.com
|
66
|
+
- steven@80beans.com
|
81
67
|
executables: []
|
82
68
|
extensions: []
|
83
69
|
extra_rdoc_files: []
|
@@ -86,6 +72,8 @@ files:
|
|
86
72
|
LmdpdGlnbm9yZQ==
|
87
73
|
- !binary |-
|
88
74
|
LnJ2bXJj
|
75
|
+
- !binary |-
|
76
|
+
LnRyYXZpcy55bWw=
|
89
77
|
- !binary |-
|
90
78
|
R2VtZmlsZQ==
|
91
79
|
- !binary |-
|
@@ -96,6 +84,14 @@ files:
|
|
96
84
|
Y29uZmlnL2p1c3Rsb2dnaW5nLnltbA==
|
97
85
|
- !binary |-
|
98
86
|
ZG9jL2p1c3Rsb2dnaW5nLW1vbmdvLm1hcmtkb3du
|
87
|
+
- !binary |-
|
88
|
+
Z2VtZmlsZXMvMy4wLmdlbWZpbGU=
|
89
|
+
- !binary |-
|
90
|
+
Z2VtZmlsZXMvMy4xLmdlbWZpbGU=
|
91
|
+
- !binary |-
|
92
|
+
Z2VtZmlsZXMvMy4yLmdlbWZpbGU=
|
93
|
+
- !binary |-
|
94
|
+
Z2VtZmlsZXMvZWRnZS5nZW1maWxl
|
99
95
|
- !binary |-
|
100
96
|
anVzdGxvZ2dpbmctcmFpbHMuZ2Vtc3BlYw==
|
101
97
|
- !binary |-
|
@@ -110,6 +106,8 @@ files:
|
|
110
106
|
bGliL2p1c3Rsb2dnaW5nL3JhaWx0aWUucmI=
|
111
107
|
- !binary |-
|
112
108
|
bGliL2p1c3Rsb2dnaW5nL3RyYW5zYWN0aW9uLnJi
|
109
|
+
- !binary |-
|
110
|
+
bGliL2p1c3Rsb2dnaW5nL3RyYW5zbWl0dGVyLnJi
|
113
111
|
- !binary |-
|
114
112
|
bGliL2p1c3Rsb2dnaW5nL3ZlcnNpb24ucmI=
|
115
113
|
- !binary |-
|
@@ -123,6 +121,8 @@ files:
|
|
123
121
|
c3BlYy9qdXN0bG9nZ2luZy9yYWlsdGllX3NwZWMucmI=
|
124
122
|
- !binary |-
|
125
123
|
c3BlYy9qdXN0bG9nZ2luZy90cmFuc2FjdGlvbl9zcGVjLnJi
|
124
|
+
- !binary |-
|
125
|
+
c3BlYy9qdXN0bG9nZ2luZy90cmFuc21pdHRlcl9zcGVjLnJi
|
126
126
|
- !binary |-
|
127
127
|
c3BlYy9qdXN0bG9nZ2luZ19zcGVjLnJi
|
128
128
|
- !binary |-
|
@@ -163,6 +163,8 @@ test_files:
|
|
163
163
|
c3BlYy9qdXN0bG9nZ2luZy9yYWlsdGllX3NwZWMucmI=
|
164
164
|
- !binary |-
|
165
165
|
c3BlYy9qdXN0bG9nZ2luZy90cmFuc2FjdGlvbl9zcGVjLnJi
|
166
|
+
- !binary |-
|
167
|
+
c3BlYy9qdXN0bG9nZ2luZy90cmFuc21pdHRlcl9zcGVjLnJi
|
166
168
|
- !binary |-
|
167
169
|
c3BlYy9qdXN0bG9nZ2luZ19zcGVjLnJi
|
168
170
|
- !binary |-
|