timber 2.0.24 → 2.1.0.rc1

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.
Files changed (97) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -2
  3. data/CHANGELOG +3 -0
  4. data/README.md +314 -59
  5. data/bin/timber +11 -2
  6. data/lib/timber.rb +2 -7
  7. data/lib/timber/cli.rb +16 -28
  8. data/lib/timber/cli/api.rb +80 -14
  9. data/lib/timber/cli/api/application.rb +30 -0
  10. data/lib/timber/cli/config_file.rb +66 -0
  11. data/lib/timber/cli/file_helper.rb +43 -0
  12. data/lib/timber/cli/installer.rb +58 -0
  13. data/lib/timber/cli/installers.rb +37 -0
  14. data/lib/timber/cli/installers/other.rb +47 -0
  15. data/lib/timber/cli/installers/rails.rb +255 -0
  16. data/lib/timber/cli/installers/root.rb +189 -0
  17. data/lib/timber/cli/io.rb +97 -0
  18. data/lib/timber/cli/io/ansi.rb +22 -0
  19. data/lib/timber/cli/io/messages.rb +213 -0
  20. data/lib/timber/cli/os_helper.rb +53 -0
  21. data/lib/timber/config.rb +97 -43
  22. data/lib/timber/config/integrations.rb +63 -0
  23. data/lib/timber/config/integrations/rack.rb +74 -0
  24. data/lib/timber/context.rb +13 -10
  25. data/lib/timber/contexts.rb +1 -0
  26. data/lib/timber/contexts/custom.rb +16 -3
  27. data/lib/timber/contexts/http.rb +10 -3
  28. data/lib/timber/contexts/organization.rb +4 -0
  29. data/lib/timber/contexts/release.rb +46 -0
  30. data/lib/timber/contexts/runtime.rb +7 -1
  31. data/lib/timber/contexts/session.rb +8 -1
  32. data/lib/timber/contexts/system.rb +5 -1
  33. data/lib/timber/contexts/user.rb +9 -2
  34. data/lib/timber/current_context.rb +43 -11
  35. data/lib/timber/events/controller_call.rb +4 -0
  36. data/lib/timber/events/custom.rb +13 -5
  37. data/lib/timber/events/exception.rb +4 -0
  38. data/lib/timber/events/http_client_request.rb +4 -0
  39. data/lib/timber/events/http_client_response.rb +4 -0
  40. data/lib/timber/events/http_server_request.rb +5 -0
  41. data/lib/timber/events/http_server_response.rb +15 -3
  42. data/lib/timber/events/sql_query.rb +3 -0
  43. data/lib/timber/events/template_render.rb +3 -0
  44. data/lib/timber/integration.rb +40 -0
  45. data/lib/timber/integrations.rb +21 -14
  46. data/lib/timber/integrations/action_controller.rb +18 -0
  47. data/lib/timber/integrations/action_controller/log_subscriber.rb +2 -0
  48. data/lib/timber/integrations/action_controller/log_subscriber/timber_log_subscriber.rb +6 -0
  49. data/lib/timber/integrations/action_dispatch.rb +23 -0
  50. data/lib/timber/integrations/action_dispatch/debug_exceptions.rb +2 -0
  51. data/lib/timber/integrations/action_view.rb +18 -0
  52. data/lib/timber/integrations/action_view/log_subscriber.rb +2 -0
  53. data/lib/timber/integrations/action_view/log_subscriber/timber_log_subscriber.rb +10 -0
  54. data/lib/timber/integrations/active_record.rb +18 -0
  55. data/lib/timber/integrations/active_record/log_subscriber.rb +2 -0
  56. data/lib/timber/integrations/active_record/log_subscriber/timber_log_subscriber.rb +8 -0
  57. data/lib/timber/integrations/rack.rb +12 -2
  58. data/lib/timber/integrations/rack/exception_event.rb +38 -5
  59. data/lib/timber/integrations/rack/http_context.rb +4 -6
  60. data/lib/timber/integrations/rack/http_events.rb +177 -27
  61. data/lib/timber/integrations/rack/middleware.rb +28 -0
  62. data/lib/timber/integrations/rack/session_context.rb +5 -6
  63. data/lib/timber/integrations/rack/user_context.rb +90 -43
  64. data/lib/timber/integrations/rails.rb +22 -0
  65. data/lib/timber/integrations/rails/rack_logger.rb +2 -0
  66. data/lib/timber/integrator.rb +18 -3
  67. data/lib/timber/log_devices/http.rb +107 -99
  68. data/lib/timber/log_devices/http/dropping_sized_queue.rb +26 -0
  69. data/lib/timber/log_devices/http/flushable_sized_queue.rb +42 -0
  70. data/lib/timber/log_entry.rb +14 -2
  71. data/lib/timber/logger.rb +51 -36
  72. data/lib/timber/overrides.rb +2 -0
  73. data/lib/timber/overrides/active_support_3_tagged_logging.rb +103 -0
  74. data/lib/timber/overrides/active_support_tagged_logging.rb +53 -90
  75. data/lib/timber/timer.rb +21 -0
  76. data/lib/timber/util/hash.rb +1 -1
  77. data/lib/timber/util/http_event.rb +16 -3
  78. data/lib/timber/version.rb +1 -1
  79. data/spec/support/timber.rb +2 -3
  80. data/spec/timber/cli/installers/rails_spec.rb +160 -0
  81. data/spec/timber/cli/installers/root_spec.rb +100 -0
  82. data/spec/timber/config_spec.rb +28 -0
  83. data/spec/timber/current_context_spec.rb +61 -12
  84. data/spec/timber/events/custom_spec.rb +13 -2
  85. data/spec/timber/events/exception_spec.rb +15 -0
  86. data/spec/timber/events/http_server_request_spec.rb +3 -3
  87. data/spec/timber/integrations/rack/http_events_spec.rb +101 -0
  88. data/spec/timber/log_devices/http_spec.rb +20 -4
  89. data/spec/timber/log_entry_spec.rb +2 -1
  90. data/spec/timber/logger_spec.rb +8 -8
  91. metadata +40 -9
  92. data/benchmarks/rails.rb +0 -122
  93. data/lib/timber/cli/application.rb +0 -28
  94. data/lib/timber/cli/install.rb +0 -196
  95. data/lib/timber/cli/io_helper.rb +0 -65
  96. data/lib/timber/cli/messages.rb +0 -180
  97. data/lib/timber/integrations/active_support/tagged_logging.rb +0 -71
@@ -3,9 +3,20 @@ require "spec_helper"
3
3
  describe Timber::Events::Custom, :rails_23 => true do
4
4
  describe ".to_hash" do
5
5
  it "should coerce type into an atom" do
6
- custom_context = described_class.new(:type => "my type", :message => "hello", :data => {:key => "value"})
7
- hash = custom_context.to_hash()
6
+ custom_event = described_class.new(:type => "my type", :message => "hello", :data => {:key => "value"})
7
+ hash = custom_event.to_hash()
8
8
  expect(hash.keys.first).to eq(:"my type")
9
9
  end
10
+
11
+ it "should coerce a Time into a float representing fractional milliseconds" do
12
+ timer = Timber::Timer.start
13
+ sleep(0.25)
14
+ custom_event = described_class.new(:type => :my_event, :message => "hello", :data => {:time_ms => timer})
15
+ expect(custom_event.message).to include("in ")
16
+ expect(custom_event.message).to end_with("ms")
17
+ data = custom_event.data
18
+ expect(data[:time_ms]).to be_kind_of(Float)
19
+ expect(data[:time_ms]).to be > 0.0
20
+ end
10
21
  end
11
22
  end
@@ -0,0 +1,15 @@
1
+ require "spec_helper"
2
+
3
+ describe Timber::Events::Exception, :rails_23 => true do
4
+ describe ".initialize" do
5
+ it "should clean the backtrace" do
6
+ backtrace = [
7
+ "/path/to/file1.rb:26:in `function1'",
8
+ "path/to/file2.rb:86:in `function2'"
9
+ ]
10
+
11
+ exception_event = described_class.new(name: "RuntimeError", exception_message: "Boom", backtrace: backtrace)
12
+ expect(exception_event.backtrace).to eq([{:file=>"/path/to/file1.rb", :line=>26, :function=>"function1"}, {:file=>"path/to/file2.rb", :line=>86, :function=>"function2"}])
13
+ end
14
+ end
15
+ end
@@ -6,10 +6,10 @@ describe Timber::Events::HTTPServerRequest, :rails_23 => true do
6
6
  describe ".initialize" do
7
7
  context "with a header filters" do
8
8
  around(:each) do |example|
9
- old_header_filters = Timber::Config.instance.header_filters
10
- Timber::Config.instance.header_filters += ['api-key']
9
+ old_http_header_filters = Timber::Config.instance.http_header_filters
10
+ Timber::Config.instance.http_header_filters += ['api-key']
11
11
  example.run
12
- Timber::Config.instance.header_filters = old_header_filters
12
+ Timber::Config.instance.http_header_filters = old_http_header_filters
13
13
  end
14
14
 
15
15
  it "should sanitize headers when a config option is set" do
@@ -0,0 +1,101 @@
1
+ require "spec_helper"
2
+
3
+ if defined?(::Rack)
4
+ describe Timber::Integrations::Rack::HTTPEvents do
5
+ let(:time) { Time.utc(2016, 9, 1, 12, 0, 0) }
6
+ let(:io) { StringIO.new }
7
+ let(:logger) do
8
+ logger = Timber::Logger.new(io)
9
+ logger.level = ::Logger::INFO
10
+ logger
11
+ end
12
+
13
+ around(:each) do |example|
14
+ class RackHttpController < ActionController::Base
15
+ layout nil
16
+
17
+ def index
18
+ Thread.current[:_timber_context_snapshot] = Timber::CurrentContext.instance.snapshot
19
+ render json: {}
20
+ end
21
+
22
+ def method_for_action(action_name)
23
+ action_name
24
+ end
25
+ end
26
+
27
+ ::RailsApp.routes.draw do
28
+ get '/rack_http' => 'rack_http#index'
29
+ end
30
+
31
+ with_rails_logger(logger) do
32
+ Timecop.freeze(time) { example.run }
33
+ end
34
+
35
+ Object.send(:remove_const, :RackHttpController)
36
+ end
37
+
38
+ describe "#process" do
39
+ it "should log the events" do
40
+ allow(Benchmark).to receive(:ms).and_return(1).and_yield
41
+
42
+ dispatch_rails_request("/rack_http")
43
+
44
+ lines = clean_lines(io.string.split("\n"))
45
+ expect(lines.length).to eq(3)
46
+
47
+ expect(lines[0]).to start_with("Started GET \"/rack_http\" @metadata ")
48
+ expect(lines[1]).to start_with("Processing by RackHttpController#index as HTML @metadata ")
49
+ expect(lines[2]).to start_with("Completed 200 OK in 0.0ms @metadata ")
50
+ end
51
+
52
+ context "with the route silenced" do
53
+ around(:each) do |example|
54
+ described_class.silence_request = lambda do |rack_env, rack_request|
55
+ rack_request.path == "/rack_http"
56
+ end
57
+
58
+ example.run
59
+
60
+ described_class.silence_request = nil
61
+ end
62
+
63
+ it "should silence the logs" do
64
+ allow(Benchmark).to receive(:ms).and_return(1).and_yield
65
+
66
+ dispatch_rails_request("/rack_http")
67
+
68
+ lines = clean_lines(io.string.split("\n"))
69
+ expect(lines.length).to eq(0)
70
+ end
71
+ end
72
+
73
+ context "collapsed into a single event" do
74
+ around(:each) do |example|
75
+ described_class.collapse_into_single_event = true
76
+
77
+ example.run
78
+
79
+ described_class.collapse_into_single_event = nil
80
+ end
81
+
82
+ it "should silence the logs" do
83
+ allow(Benchmark).to receive(:ms).and_return(1).and_yield
84
+
85
+ dispatch_rails_request("/rack_http")
86
+
87
+ lines = clean_lines(io.string.split("\n"))
88
+ expect(lines.length).to eq(2)
89
+
90
+ expect(lines[0]).to start_with("Processing by RackHttpController#index as HTML @metadata ")
91
+ expect(lines[1]).to start_with("GET /rack_http sent 200 OK in 0.0ms @metadata ")
92
+ end
93
+ end
94
+ end
95
+
96
+ # Remove blank lines since Rails does this to space out requests in the logs
97
+ def clean_lines(lines)
98
+ lines.select { |line| !line.start_with?(" @metadat") }
99
+ end
100
+ end
101
+ end
@@ -42,7 +42,7 @@ describe Timber::LogDevices::HTTP do
42
42
 
43
43
  it "should attempt a delivery when the limit is exceeded" do
44
44
  http.write("test")
45
- expect(http).to receive(:flush).exactly(1).times
45
+ expect(http).to receive(:flush_async).exactly(1).times
46
46
  http.write("my log message")
47
47
  expect(http).to receive(:flush).exactly(1).times
48
48
  http.close
@@ -76,13 +76,29 @@ describe Timber::LogDevices::HTTP do
76
76
  describe "#flush" do
77
77
  let(:time) { Time.utc(2016, 9, 1, 12, 0, 0) }
78
78
 
79
- it "should add a request to the queue" do
79
+ it "should deliver the request" do
80
80
  http = described_class.new("MYKEY", flush_continuously: false)
81
81
  log_entry = Timber::LogEntry.new("INFO", time, nil, "test log message 1", nil, nil)
82
82
  http.write(log_entry)
83
83
  log_entry = Timber::LogEntry.new("INFO", time, nil, "test log message 2", nil, nil)
84
84
  http.write(log_entry)
85
+ expect(http).to receive(:flush_async).exactly(2).times
85
86
  http.send(:flush)
87
+ http.close
88
+ end
89
+ end
90
+
91
+ # Testing a private method because it helps break down our tests
92
+ describe "#flush_async" do
93
+ let(:time) { Time.utc(2016, 9, 1, 12, 0, 0) }
94
+
95
+ it "should add a request to the queue" do
96
+ http = described_class.new("MYKEY", flush_continuously: false)
97
+ log_entry = Timber::LogEntry.new("INFO", time, nil, "test log message 1", nil, nil)
98
+ http.write(log_entry)
99
+ log_entry = Timber::LogEntry.new("INFO", time, nil, "test log message 2", nil, nil)
100
+ http.write(log_entry)
101
+ http.send(:flush_async)
86
102
  request_queue = http.instance_variable_get(:@request_queue)
87
103
  request = request_queue.deq
88
104
  expect(request).to be_kind_of(Net::HTTP::Post)
@@ -98,8 +114,8 @@ describe Timber::LogDevices::HTTP do
98
114
  it "should start a intervaled flush thread and flush on an interval" do
99
115
  http = described_class.new("MYKEY", flush_interval: 0.1)
100
116
  http.send(:ensure_flush_threads_are_started)
101
- expect(http).to receive(:flush).exactly(2).times
102
- sleep 0.15 # too fast!
117
+ expect(http).to receive(:flush_async).at_least(3).times
118
+ sleep 1.1 # iterations check every 0.5 seconds
103
119
  http.close
104
120
  end
105
121
  end
@@ -6,7 +6,8 @@ describe Timber::LogEntry, :rails_23 => true do
6
6
  describe "#to_msgpack" do
7
7
  it "should encode properly with an event and context" do
8
8
  event = Timber::Events::Custom.new(type: :event_type, message: "event_message", data: {a: 1})
9
- context = {custom: Timber::Contexts::Custom.new(type: :context_type, data: {b: 1})}
9
+ custom_context = Timber::Contexts::Custom.new(type: :context_type, data: {b: 1})
10
+ context = {custom: custom_context.as_json}
10
11
  log_entry = described_class.new("INFO", time, nil, "log message", context, event)
11
12
  msgpack = log_entry.to_msgpack
12
13
  expect(msgpack).to start_with("\x86\xA5level\xA4INFO\xA2dt\xBB2016-09-01T12:00:00.000000Z".force_encoding("ASCII-8BIT"))
@@ -10,8 +10,8 @@ describe Timber::Logger, :rails_23 => true do
10
10
  Timecop.freeze(time) { example.run }
11
11
  end
12
12
 
13
- context "with the StringFormatter" do
14
- before(:each) { logger.formatter = Timber::Logger::StringFormatter.new }
13
+ context "with the AugmentedFormatter" do
14
+ before(:each) { logger.formatter = Timber::Logger::AugmentedFormatter.new }
15
15
 
16
16
  it "should accept strings" do
17
17
  logger.info("this is a test")
@@ -91,7 +91,7 @@ describe Timber::Logger, :rails_23 => true do
91
91
  end
92
92
  end
93
93
 
94
- context "with the :json format" do
94
+ context "with the JSONFormatter" do
95
95
  before(:each) { logger.formatter = Timber::Logger::JSONFormatter.new }
96
96
 
97
97
  it "should log in the correct format" do
@@ -129,19 +129,19 @@ describe Timber::Logger, :rails_23 => true do
129
129
  let(:logger) { Timber::Logger.new(io) }
130
130
 
131
131
  it "should add context" do
132
- expect(Timber::CurrentContext.hash).to eq({})
132
+ expect(Timber::CurrentContext.instance.send(:hash)).to eq({})
133
133
 
134
134
  logger.with_context(build: {version: "1.0.0"}) do
135
- expect(Timber::CurrentContext.hash).to eq({:custom=>{:build=>{:version=>"1.0.0"}}})
135
+ expect(Timber::CurrentContext.instance.send(:hash)).to eq({:custom=>{:build=>{:version=>"1.0.0"}}})
136
136
 
137
137
  logger.with_context({testing: {key: "value"}}) do
138
- expect(Timber::CurrentContext.hash).to eq({:custom=>{:build=>{:version=>"1.0.0"}, :testing=>{:key=>"value"}}})
138
+ expect(Timber::CurrentContext.instance.send(:hash)).to eq({:custom=>{:build=>{:version=>"1.0.0"}, :testing=>{:key=>"value"}}})
139
139
  end
140
140
 
141
- expect(Timber::CurrentContext.hash).to eq({:custom=>{:build=>{:version=>"1.0.0"}}})
141
+ expect(Timber::CurrentContext.instance.send(:hash)).to eq({:custom=>{:build=>{:version=>"1.0.0"}}})
142
142
  end
143
143
 
144
- expect(Timber::CurrentContext.hash).to eq({})
144
+ expect(Timber::CurrentContext.instance.send(:hash)).to eq({})
145
145
  end
146
146
  end
147
147
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: timber
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.24
4
+ version: 2.1.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Timber Technologies, Inc.
@@ -134,10 +134,10 @@ files:
134
134
  - ".rspec"
135
135
  - ".travis.yml"
136
136
  - ".yardopts"
137
+ - CHANGELOG
137
138
  - Gemfile
138
139
  - LICENSE.md
139
140
  - README.md
140
- - benchmarks/rails.rb
141
141
  - bin/timber
142
142
  - gemfiles/rails-3.0.gemfile
143
143
  - gemfiles/rails-3.1.gemfile
@@ -151,16 +151,27 @@ files:
151
151
  - lib/timber.rb
152
152
  - lib/timber/cli.rb
153
153
  - lib/timber/cli/api.rb
154
- - lib/timber/cli/application.rb
155
- - lib/timber/cli/install.rb
156
- - lib/timber/cli/io_helper.rb
157
- - lib/timber/cli/messages.rb
154
+ - lib/timber/cli/api/application.rb
155
+ - lib/timber/cli/config_file.rb
156
+ - lib/timber/cli/file_helper.rb
157
+ - lib/timber/cli/installer.rb
158
+ - lib/timber/cli/installers.rb
159
+ - lib/timber/cli/installers/other.rb
160
+ - lib/timber/cli/installers/rails.rb
161
+ - lib/timber/cli/installers/root.rb
162
+ - lib/timber/cli/io.rb
163
+ - lib/timber/cli/io/ansi.rb
164
+ - lib/timber/cli/io/messages.rb
165
+ - lib/timber/cli/os_helper.rb
158
166
  - lib/timber/config.rb
167
+ - lib/timber/config/integrations.rb
168
+ - lib/timber/config/integrations/rack.rb
159
169
  - lib/timber/context.rb
160
170
  - lib/timber/contexts.rb
161
171
  - lib/timber/contexts/custom.rb
162
172
  - lib/timber/contexts/http.rb
163
173
  - lib/timber/contexts/organization.rb
174
+ - lib/timber/contexts/release.rb
164
175
  - lib/timber/contexts/runtime.rb
165
176
  - lib/timber/contexts/session.rb
166
177
  - lib/timber/contexts/system.rb
@@ -179,31 +190,41 @@ files:
179
190
  - lib/timber/events/template_render.rb
180
191
  - lib/timber/frameworks.rb
181
192
  - lib/timber/frameworks/rails.rb
193
+ - lib/timber/integration.rb
182
194
  - lib/timber/integrations.rb
195
+ - lib/timber/integrations/action_controller.rb
183
196
  - lib/timber/integrations/action_controller/log_subscriber.rb
184
197
  - lib/timber/integrations/action_controller/log_subscriber/timber_log_subscriber.rb
198
+ - lib/timber/integrations/action_dispatch.rb
185
199
  - lib/timber/integrations/action_dispatch/debug_exceptions.rb
200
+ - lib/timber/integrations/action_view.rb
186
201
  - lib/timber/integrations/action_view/log_subscriber.rb
187
202
  - lib/timber/integrations/action_view/log_subscriber/timber_log_subscriber.rb
203
+ - lib/timber/integrations/active_record.rb
188
204
  - lib/timber/integrations/active_record/log_subscriber.rb
189
205
  - lib/timber/integrations/active_record/log_subscriber/timber_log_subscriber.rb
190
- - lib/timber/integrations/active_support/tagged_logging.rb
191
206
  - lib/timber/integrations/rack.rb
192
207
  - lib/timber/integrations/rack/exception_event.rb
193
208
  - lib/timber/integrations/rack/http_context.rb
194
209
  - lib/timber/integrations/rack/http_events.rb
210
+ - lib/timber/integrations/rack/middleware.rb
195
211
  - lib/timber/integrations/rack/session_context.rb
196
212
  - lib/timber/integrations/rack/user_context.rb
213
+ - lib/timber/integrations/rails.rb
197
214
  - lib/timber/integrations/rails/rack_logger.rb
198
215
  - lib/timber/integrator.rb
199
216
  - lib/timber/log_devices.rb
200
217
  - lib/timber/log_devices/http.rb
218
+ - lib/timber/log_devices/http/dropping_sized_queue.rb
219
+ - lib/timber/log_devices/http/flushable_sized_queue.rb
201
220
  - lib/timber/log_entry.rb
202
221
  - lib/timber/logger.rb
203
222
  - lib/timber/overrides.rb
223
+ - lib/timber/overrides/active_support_3_tagged_logging.rb
204
224
  - lib/timber/overrides/active_support_tagged_logging.rb
205
225
  - lib/timber/overrides/lograge.rb
206
226
  - lib/timber/overrides/rails_stdout_logging.rb
227
+ - lib/timber/timer.rb
207
228
  - lib/timber/util.rb
208
229
  - lib/timber/util/active_support_log_subscriber.rb
209
230
  - lib/timber/util/hash.rb
@@ -225,6 +246,9 @@ files:
225
246
  - spec/support/timber.rb
226
247
  - spec/support/timecop.rb
227
248
  - spec/support/webmock.rb
249
+ - spec/timber/cli/installers/rails_spec.rb
250
+ - spec/timber/cli/installers/root_spec.rb
251
+ - spec/timber/config_spec.rb
228
252
  - spec/timber/contexts/custom_spec.rb
229
253
  - spec/timber/contexts/organization_spec.rb
230
254
  - spec/timber/contexts/system_spec.rb
@@ -234,6 +258,7 @@ files:
234
258
  - spec/timber/event_spec.rb
235
259
  - spec/timber/events/controller_call_spec.rb
236
260
  - spec/timber/events/custom_spec.rb
261
+ - spec/timber/events/exception_spec.rb
237
262
  - spec/timber/events/http_server_request_spec.rb
238
263
  - spec/timber/events_spec.rb
239
264
  - spec/timber/integrations/action_controller/log_subscriber_spec.rb
@@ -241,6 +266,7 @@ files:
241
266
  - spec/timber/integrations/action_view/log_subscriber_spec.rb
242
267
  - spec/timber/integrations/active_record/log_subscriber_spec.rb
243
268
  - spec/timber/integrations/rack/http_context_spec.rb
269
+ - spec/timber/integrations/rack/http_events_spec.rb
244
270
  - spec/timber/integrations/rails/rack_logger_spec.rb
245
271
  - spec/timber/log_devices/http_spec.rb
246
272
  - spec/timber/log_entry_spec.rb
@@ -262,9 +288,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
262
288
  version: 1.9.0
263
289
  required_rubygems_version: !ruby/object:Gem::Requirement
264
290
  requirements:
265
- - - ">="
291
+ - - ">"
266
292
  - !ruby/object:Gem::Version
267
- version: '0'
293
+ version: 1.3.1
268
294
  requirements: []
269
295
  rubyforge_project:
270
296
  rubygems_version: 2.4.5.2
@@ -284,6 +310,9 @@ test_files:
284
310
  - spec/support/timber.rb
285
311
  - spec/support/timecop.rb
286
312
  - spec/support/webmock.rb
313
+ - spec/timber/cli/installers/rails_spec.rb
314
+ - spec/timber/cli/installers/root_spec.rb
315
+ - spec/timber/config_spec.rb
287
316
  - spec/timber/contexts/custom_spec.rb
288
317
  - spec/timber/contexts/organization_spec.rb
289
318
  - spec/timber/contexts/system_spec.rb
@@ -293,6 +322,7 @@ test_files:
293
322
  - spec/timber/event_spec.rb
294
323
  - spec/timber/events/controller_call_spec.rb
295
324
  - spec/timber/events/custom_spec.rb
325
+ - spec/timber/events/exception_spec.rb
296
326
  - spec/timber/events/http_server_request_spec.rb
297
327
  - spec/timber/events_spec.rb
298
328
  - spec/timber/integrations/action_controller/log_subscriber_spec.rb
@@ -300,6 +330,7 @@ test_files:
300
330
  - spec/timber/integrations/action_view/log_subscriber_spec.rb
301
331
  - spec/timber/integrations/active_record/log_subscriber_spec.rb
302
332
  - spec/timber/integrations/rack/http_context_spec.rb
333
+ - spec/timber/integrations/rack/http_events_spec.rb
303
334
  - spec/timber/integrations/rails/rack_logger_spec.rb
304
335
  - spec/timber/log_devices/http_spec.rb
305
336
  - spec/timber/log_entry_spec.rb
data/benchmarks/rails.rb DELETED
@@ -1,122 +0,0 @@
1
- require 'benchmark'
2
- require 'benchmark-memory'
3
- require 'bundler/setup'
4
- require 'rails'
5
- require 'action_controller'
6
-
7
- io = StringIO.new # ensure we are logging to something
8
- logger = Logger.new(io)
9
- logger.level = Logger::DEBUG
10
- Rails.logger = logger
11
-
12
- #
13
- # Setup
14
- #
15
-
16
- # Setup the rails app to test
17
- class RailsApp < Rails::Application
18
- if ::Rails.version =~ /^3\./
19
- config.secret_token = '1e05af2b349457936a41427e63450937'
20
- else
21
- config.secret_key_base = '1e05af2b349457936a41427e63450937'
22
- end
23
-
24
- # This ensures our tests fail, otherwise exceptions get swallowed by ActionDispatch::DebugExceptions
25
- config.action_dispatch.show_exceptions = false
26
- config.active_support.deprecation = :stderr
27
- config.eager_load = false
28
- end
29
-
30
- # Create a controller to test against
31
- class HomeController < ActionController::Base
32
- layout nil
33
-
34
- def index
35
- render json: {}
36
- end
37
-
38
- def method_for_action(action_name)
39
- action_name
40
- end
41
- end
42
-
43
- # Define the routes
44
- ::RailsApp.routes.draw do
45
- get '/' => 'home#index'
46
- end
47
-
48
- # Initialize the app
49
- RailsApp.initialize!
50
-
51
- # Helper function to issue requests.
52
- def dispatch_rails_request(path, additional_env_options = {})
53
- application = ::Rails.application
54
- env = application.respond_to?(:env_config) ? application.env_config.clone : application.env_defaults.clone
55
- env["rack.request.cookie_hash"] = {}.with_indifferent_access
56
- env["REMOTE_ADDR"] = "123.456.789.10"
57
- env["HTTP_X_REQUEST_ID"] = "unique-request-id-1234"
58
- env["action_dispatch.request_id"] = env["HTTP_X_REQUEST_ID"]
59
- env = env.merge(additional_env_options)
60
- ::Rack::MockRequest.new(application).get(path, env)
61
- end
62
-
63
- # How many iterations to perform
64
- iterations = 1_000
65
-
66
- puts "############################################################"
67
- puts ""
68
- puts "Testing Without Timber (#{iterations} iterations)"
69
- puts ""
70
- puts "############################################################"
71
- puts
72
-
73
- # Use bmbm to mimimize initial GC differences.
74
- puts "Timing via benchmark:"
75
- puts ""
76
-
77
- Benchmark.bmbm do |x|
78
- x.report("Without Timber") { iterations.times { dispatch_rails_request("/") } }
79
- end
80
-
81
- puts "\n"
82
- puts "Memory profiling via benchmark-memory:"
83
- puts
84
-
85
- Benchmark.memory do |x|
86
- x.report("Without Timber") { iterations.times { dispatch_rails_request("/") } }
87
- end
88
-
89
- puts "\n\n\n\n"
90
- puts "############################################################"
91
- puts ""
92
- puts "Testing With Timber (#{iterations} iterations)"
93
- puts ""
94
- puts "############################################################"
95
- puts ""
96
-
97
- # Integrate Timber (this is handled in our Railtie, but we cna't use that here since we already
98
- # initialized the app.)
99
- require 'timber'
100
- io = StringIO.new # ensure we are logging to something
101
- logger = Timber::Logger.new(io)
102
- logger.level = Logger::DEBUG
103
- Timber::Frameworks::Rails.set_logger(logger)
104
- Timber::Frameworks::Rails.configure_middlewares(Rails.application.config.app_middleware)
105
- Timber::Integrations.integrate!
106
- Timber::Config.instance.append_metadata = false
107
-
108
-
109
- puts "Timing via benchmark:"
110
- puts ""
111
-
112
- Benchmark.bmbm do |x|
113
- x.report("With Timber") { iterations.times { dispatch_rails_request("/") } }
114
- end
115
-
116
- puts "\n"
117
- puts "Memory profiling via benchmark-memory:"
118
- puts ""
119
-
120
- Benchmark.memory do |x|
121
- x.report("With Timber") { iterations.times { dispatch_rails_request("/") } }
122
- end