timber 2.6.2 → 3.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.
Files changed (142) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +8 -38
  3. data/CHANGELOG.md +9 -0
  4. data/README.md +30 -284
  5. data/Rakefile +78 -0
  6. data/lib/timber.rb +6 -6
  7. data/lib/timber/config.rb +1 -83
  8. data/lib/timber/config/integrations.rb +1 -47
  9. data/lib/timber/context.rb +3 -24
  10. data/lib/timber/contexts.rb +2 -30
  11. data/lib/timber/contexts/http.rb +16 -36
  12. data/lib/timber/contexts/release.rb +12 -23
  13. data/lib/timber/contexts/runtime.rb +9 -36
  14. data/lib/timber/contexts/session.rb +8 -21
  15. data/lib/timber/contexts/system.rb +9 -16
  16. data/lib/timber/contexts/user.rb +13 -33
  17. data/lib/timber/current_context.rb +16 -78
  18. data/lib/timber/event.rb +12 -9
  19. data/lib/timber/events.rb +1 -33
  20. data/lib/timber/events/controller_call.rb +20 -31
  21. data/lib/timber/events/error.rb +18 -26
  22. data/lib/timber/events/exception.rb +1 -0
  23. data/lib/timber/events/sql_query.rb +14 -24
  24. data/lib/timber/events/template_render.rb +13 -24
  25. data/lib/timber/integration.rb +1 -1
  26. data/lib/timber/integrator.rb +1 -1
  27. data/lib/timber/log_devices/http.rb +98 -19
  28. data/lib/timber/log_entry.rb +6 -24
  29. data/lib/timber/logger.rb +5 -14
  30. data/lib/timber/util.rb +1 -6
  31. data/lib/timber/util/non_nil_hash_builder.rb +3 -1
  32. data/lib/timber/version.rb +1 -1
  33. data/spec/README.md +2 -8
  34. data/spec/spec_helper.rb +0 -7
  35. data/spec/support/timber.rb +1 -3
  36. data/spec/timber/current_context_spec.rb +12 -50
  37. data/spec/timber/events/controller_call_spec.rb +4 -4
  38. data/spec/timber/events/error_spec.rb +4 -9
  39. data/spec/timber/log_devices/http_spec.rb +26 -2
  40. data/spec/timber/log_entry_spec.rb +12 -6
  41. data/spec/timber/logger_spec.rb +27 -68
  42. data/timber.gemspec +1 -1
  43. metadata +5 -139
  44. data/gemfiles/rails-3.0.gemfile +0 -5
  45. data/gemfiles/rails-3.1.gemfile +0 -5
  46. data/gemfiles/rails-3.2.gemfile +0 -5
  47. data/gemfiles/rails-4.0.gemfile +0 -9
  48. data/gemfiles/rails-4.1.gemfile +0 -9
  49. data/gemfiles/rails-4.2.gemfile +0 -9
  50. data/gemfiles/rails-5.0.gemfile +0 -9
  51. data/gemfiles/rails-5.1.gemfile +0 -9
  52. data/gemfiles/rails-edge.gemfile +0 -7
  53. data/lib/timber/cli.rb +0 -60
  54. data/lib/timber/cli/api.rb +0 -183
  55. data/lib/timber/cli/api/application.rb +0 -34
  56. data/lib/timber/cli/config_file.rb +0 -71
  57. data/lib/timber/cli/file_helper.rb +0 -53
  58. data/lib/timber/cli/installer.rb +0 -70
  59. data/lib/timber/cli/installers.rb +0 -102
  60. data/lib/timber/cli/installers/config_file.rb +0 -51
  61. data/lib/timber/cli/installers/other.rb +0 -59
  62. data/lib/timber/cli/installers/rails.rb +0 -225
  63. data/lib/timber/cli/installers/root.rb +0 -116
  64. data/lib/timber/cli/io.rb +0 -100
  65. data/lib/timber/cli/io/ansi.rb +0 -22
  66. data/lib/timber/cli/io/messages.rb +0 -198
  67. data/lib/timber/cli/os_helper.rb +0 -74
  68. data/lib/timber/config/integrations/rack.rb +0 -74
  69. data/lib/timber/contexts/custom.rb +0 -44
  70. data/lib/timber/contexts/organization.rb +0 -48
  71. data/lib/timber/events/custom.rb +0 -53
  72. data/lib/timber/events/http_request.rb +0 -71
  73. data/lib/timber/events/http_response.rb +0 -81
  74. data/lib/timber/frameworks.rb +0 -19
  75. data/lib/timber/frameworks/rails.rb +0 -27
  76. data/lib/timber/integrations.rb +0 -29
  77. data/lib/timber/integrations/action_controller.rb +0 -18
  78. data/lib/timber/integrations/action_controller/log_subscriber.rb +0 -27
  79. data/lib/timber/integrations/action_controller/log_subscriber/timber_log_subscriber.rb +0 -46
  80. data/lib/timber/integrations/action_dispatch.rb +0 -23
  81. data/lib/timber/integrations/action_dispatch/debug_exceptions.rb +0 -53
  82. data/lib/timber/integrations/action_view.rb +0 -18
  83. data/lib/timber/integrations/action_view/log_subscriber.rb +0 -27
  84. data/lib/timber/integrations/action_view/log_subscriber/timber_log_subscriber.rb +0 -83
  85. data/lib/timber/integrations/active_record.rb +0 -18
  86. data/lib/timber/integrations/active_record/log_subscriber.rb +0 -26
  87. data/lib/timber/integrations/active_record/log_subscriber/timber_log_subscriber.rb +0 -53
  88. data/lib/timber/integrations/rack.rb +0 -27
  89. data/lib/timber/integrations/rack/error_event.rb +0 -64
  90. data/lib/timber/integrations/rack/http_context.rb +0 -27
  91. data/lib/timber/integrations/rack/http_events.rb +0 -210
  92. data/lib/timber/integrations/rack/middleware.rb +0 -28
  93. data/lib/timber/integrations/rack/session_context.rb +0 -65
  94. data/lib/timber/integrations/rack/user_context.rb +0 -135
  95. data/lib/timber/integrations/rails.rb +0 -22
  96. data/lib/timber/integrations/rails/rack_logger.rb +0 -60
  97. data/lib/timber/overrides.rb +0 -12
  98. data/lib/timber/overrides/active_support_3_tagged_logging.rb +0 -111
  99. data/lib/timber/overrides/active_support_buffered_logger.rb +0 -22
  100. data/lib/timber/overrides/active_support_tagged_logging.rb +0 -66
  101. data/lib/timber/overrides/lograge.rb +0 -18
  102. data/lib/timber/overrides/rails_stdout_logging.rb +0 -21
  103. data/lib/timber/util/active_support_log_subscriber.rb +0 -37
  104. data/lib/timber/util/attribute_normalizer.rb +0 -89
  105. data/lib/timber/util/hash.rb +0 -90
  106. data/lib/timber/util/request.rb +0 -72
  107. data/lib/timber/util/struct.rb +0 -16
  108. data/spec/rails/tagged_logging_spec.rb +0 -44
  109. data/spec/support/action_controller.rb +0 -8
  110. data/spec/support/active_record.rb +0 -32
  111. data/spec/support/rails.rb +0 -67
  112. data/spec/support/rails/templates/_partial.html +0 -1
  113. data/spec/support/rails/templates/template.html +0 -1
  114. data/spec/timber/cli/config_file_spec.rb +0 -26
  115. data/spec/timber/cli/installers/config_file_spec.rb +0 -36
  116. data/spec/timber/cli/installers/other_spec.rb +0 -49
  117. data/spec/timber/cli/installers/rails_spec.rb +0 -364
  118. data/spec/timber/cli/installers/root_spec.rb +0 -73
  119. data/spec/timber/config_spec.rb +0 -28
  120. data/spec/timber/contexts/custom_spec.rb +0 -11
  121. data/spec/timber/contexts/organization_spec.rb +0 -11
  122. data/spec/timber/contexts/runtime_spec.rb +0 -11
  123. data/spec/timber/contexts/system_spec.rb +0 -11
  124. data/spec/timber/contexts/user_spec.rb +0 -11
  125. data/spec/timber/contexts_spec.rb +0 -49
  126. data/spec/timber/event_spec.rb +0 -10
  127. data/spec/timber/events/custom_spec.rb +0 -36
  128. data/spec/timber/events/http_request_spec.rb +0 -32
  129. data/spec/timber/events/http_response_spec.rb +0 -12
  130. data/spec/timber/events_spec.rb +0 -55
  131. data/spec/timber/integrations/action_controller/log_subscriber_spec.rb +0 -55
  132. data/spec/timber/integrations/action_dispatch/debug_exceptions_spec.rb +0 -53
  133. data/spec/timber/integrations/action_view/log_subscriber_spec.rb +0 -115
  134. data/spec/timber/integrations/active_record/log_subscriber_spec.rb +0 -46
  135. data/spec/timber/integrations/rack/error_event_spec.rb +0 -63
  136. data/spec/timber/integrations/rack/http_context_spec.rb +0 -60
  137. data/spec/timber/integrations/rack/http_events_spec.rb +0 -101
  138. data/spec/timber/integrations/rack/session_context_spec.rb +0 -62
  139. data/spec/timber/integrations/rails/rack_logger_spec.rb +0 -58
  140. data/spec/timber/util/attribute_normalizer_spec.rb +0 -90
  141. data/spec/timber/util/hash_spec.rb +0 -30
  142. data/spec/timber/util/request_spec.rb +0 -10
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
11
11
  s.homepage = "https://github.com/timberio/timber-ruby"
12
12
  s.summary = "Log Better. Solve Problems Faster. https://timber.io"
13
13
 
14
- s.required_ruby_version = '>= 1.9.0'
14
+ s.required_ruby_version = '>= 1.9.3'
15
15
 
16
16
  s.files = `git ls-files`.split("\n")
17
17
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: timber
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.2
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Timber Technologies, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-10-17 00:00:00.000000000 Z
11
+ date: 2019-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: msgpack
@@ -152,40 +152,14 @@ files:
152
152
  - Gemfile
153
153
  - LICENSE.md
154
154
  - README.md
155
+ - Rakefile
155
156
  - bin/timber
156
- - gemfiles/rails-3.0.gemfile
157
- - gemfiles/rails-3.1.gemfile
158
- - gemfiles/rails-3.2.gemfile
159
- - gemfiles/rails-4.0.gemfile
160
- - gemfiles/rails-4.1.gemfile
161
- - gemfiles/rails-4.2.gemfile
162
- - gemfiles/rails-5.0.gemfile
163
- - gemfiles/rails-5.1.gemfile
164
- - gemfiles/rails-edge.gemfile
165
157
  - lib/timber.rb
166
- - lib/timber/cli.rb
167
- - lib/timber/cli/api.rb
168
- - lib/timber/cli/api/application.rb
169
- - lib/timber/cli/config_file.rb
170
- - lib/timber/cli/file_helper.rb
171
- - lib/timber/cli/installer.rb
172
- - lib/timber/cli/installers.rb
173
- - lib/timber/cli/installers/config_file.rb
174
- - lib/timber/cli/installers/other.rb
175
- - lib/timber/cli/installers/rails.rb
176
- - lib/timber/cli/installers/root.rb
177
- - lib/timber/cli/io.rb
178
- - lib/timber/cli/io/ansi.rb
179
- - lib/timber/cli/io/messages.rb
180
- - lib/timber/cli/os_helper.rb
181
158
  - lib/timber/config.rb
182
159
  - lib/timber/config/integrations.rb
183
- - lib/timber/config/integrations/rack.rb
184
160
  - lib/timber/context.rb
185
161
  - lib/timber/contexts.rb
186
- - lib/timber/contexts/custom.rb
187
162
  - lib/timber/contexts/http.rb
188
- - lib/timber/contexts/organization.rb
189
163
  - lib/timber/contexts/release.rb
190
164
  - lib/timber/contexts/runtime.rb
191
165
  - lib/timber/contexts/session.rb
@@ -195,37 +169,11 @@ files:
195
169
  - lib/timber/event.rb
196
170
  - lib/timber/events.rb
197
171
  - lib/timber/events/controller_call.rb
198
- - lib/timber/events/custom.rb
199
172
  - lib/timber/events/error.rb
200
173
  - lib/timber/events/exception.rb
201
- - lib/timber/events/http_request.rb
202
- - lib/timber/events/http_response.rb
203
174
  - lib/timber/events/sql_query.rb
204
175
  - lib/timber/events/template_render.rb
205
- - lib/timber/frameworks.rb
206
- - lib/timber/frameworks/rails.rb
207
176
  - lib/timber/integration.rb
208
- - lib/timber/integrations.rb
209
- - lib/timber/integrations/action_controller.rb
210
- - lib/timber/integrations/action_controller/log_subscriber.rb
211
- - lib/timber/integrations/action_controller/log_subscriber/timber_log_subscriber.rb
212
- - lib/timber/integrations/action_dispatch.rb
213
- - lib/timber/integrations/action_dispatch/debug_exceptions.rb
214
- - lib/timber/integrations/action_view.rb
215
- - lib/timber/integrations/action_view/log_subscriber.rb
216
- - lib/timber/integrations/action_view/log_subscriber/timber_log_subscriber.rb
217
- - lib/timber/integrations/active_record.rb
218
- - lib/timber/integrations/active_record/log_subscriber.rb
219
- - lib/timber/integrations/active_record/log_subscriber/timber_log_subscriber.rb
220
- - lib/timber/integrations/rack.rb
221
- - lib/timber/integrations/rack/error_event.rb
222
- - lib/timber/integrations/rack/http_context.rb
223
- - lib/timber/integrations/rack/http_events.rb
224
- - lib/timber/integrations/rack/middleware.rb
225
- - lib/timber/integrations/rack/session_context.rb
226
- - lib/timber/integrations/rack/user_context.rb
227
- - lib/timber/integrations/rails.rb
228
- - lib/timber/integrations/rails/rack_logger.rb
229
177
  - lib/timber/integrator.rb
230
178
  - lib/timber/log_devices.rb
231
179
  - lib/timber/log_devices/http.rb
@@ -233,68 +181,22 @@ files:
233
181
  - lib/timber/log_devices/http/request_attempt.rb
234
182
  - lib/timber/log_entry.rb
235
183
  - lib/timber/logger.rb
236
- - lib/timber/overrides.rb
237
- - lib/timber/overrides/active_support_3_tagged_logging.rb
238
- - lib/timber/overrides/active_support_buffered_logger.rb
239
- - lib/timber/overrides/active_support_tagged_logging.rb
240
- - lib/timber/overrides/lograge.rb
241
- - lib/timber/overrides/rails_stdout_logging.rb
242
184
  - lib/timber/timer.rb
243
185
  - lib/timber/util.rb
244
- - lib/timber/util/active_support_log_subscriber.rb
245
- - lib/timber/util/attribute_normalizer.rb
246
- - lib/timber/util/hash.rb
247
186
  - lib/timber/util/non_nil_hash_builder.rb
248
- - lib/timber/util/request.rb
249
- - lib/timber/util/struct.rb
250
187
  - lib/timber/version.rb
251
188
  - spec/README.md
252
- - spec/rails/tagged_logging_spec.rb
253
189
  - spec/spec_helper.rb
254
- - spec/support/action_controller.rb
255
- - spec/support/active_record.rb
256
- - spec/support/rails.rb
257
- - spec/support/rails/templates/_partial.html
258
- - spec/support/rails/templates/template.html
259
190
  - spec/support/socket_hostname.rb
260
191
  - spec/support/timber.rb
261
192
  - spec/support/timecop.rb
262
193
  - spec/support/webmock.rb
263
- - spec/timber/cli/config_file_spec.rb
264
- - spec/timber/cli/installers/config_file_spec.rb
265
- - spec/timber/cli/installers/other_spec.rb
266
- - spec/timber/cli/installers/rails_spec.rb
267
- - spec/timber/cli/installers/root_spec.rb
268
- - spec/timber/config_spec.rb
269
- - spec/timber/contexts/custom_spec.rb
270
- - spec/timber/contexts/organization_spec.rb
271
- - spec/timber/contexts/runtime_spec.rb
272
- - spec/timber/contexts/system_spec.rb
273
- - spec/timber/contexts/user_spec.rb
274
- - spec/timber/contexts_spec.rb
275
194
  - spec/timber/current_context_spec.rb
276
- - spec/timber/event_spec.rb
277
195
  - spec/timber/events/controller_call_spec.rb
278
- - spec/timber/events/custom_spec.rb
279
196
  - spec/timber/events/error_spec.rb
280
- - spec/timber/events/http_request_spec.rb
281
- - spec/timber/events/http_response_spec.rb
282
- - spec/timber/events_spec.rb
283
- - spec/timber/integrations/action_controller/log_subscriber_spec.rb
284
- - spec/timber/integrations/action_dispatch/debug_exceptions_spec.rb
285
- - spec/timber/integrations/action_view/log_subscriber_spec.rb
286
- - spec/timber/integrations/active_record/log_subscriber_spec.rb
287
- - spec/timber/integrations/rack/error_event_spec.rb
288
- - spec/timber/integrations/rack/http_context_spec.rb
289
- - spec/timber/integrations/rack/http_events_spec.rb
290
- - spec/timber/integrations/rack/session_context_spec.rb
291
- - spec/timber/integrations/rails/rack_logger_spec.rb
292
197
  - spec/timber/log_devices/http_spec.rb
293
198
  - spec/timber/log_entry_spec.rb
294
199
  - spec/timber/logger_spec.rb
295
- - spec/timber/util/attribute_normalizer_spec.rb
296
- - spec/timber/util/hash_spec.rb
297
- - spec/timber/util/request_spec.rb
298
200
  - timber.gemspec
299
201
  homepage: https://github.com/timberio/timber-ruby
300
202
  licenses: []
@@ -307,63 +209,27 @@ required_ruby_version: !ruby/object:Gem::Requirement
307
209
  requirements:
308
210
  - - ">="
309
211
  - !ruby/object:Gem::Version
310
- version: 1.9.0
212
+ version: 1.9.3
311
213
  required_rubygems_version: !ruby/object:Gem::Requirement
312
214
  requirements:
313
215
  - - ">="
314
216
  - !ruby/object:Gem::Version
315
217
  version: '0'
316
218
  requirements: []
317
- rubyforge_project:
318
- rubygems_version: 2.4.5.2
219
+ rubygems_version: 3.0.1
319
220
  signing_key:
320
221
  specification_version: 4
321
222
  summary: Log Better. Solve Problems Faster. https://timber.io
322
223
  test_files:
323
224
  - spec/README.md
324
- - spec/rails/tagged_logging_spec.rb
325
225
  - spec/spec_helper.rb
326
- - spec/support/action_controller.rb
327
- - spec/support/active_record.rb
328
- - spec/support/rails.rb
329
- - spec/support/rails/templates/_partial.html
330
- - spec/support/rails/templates/template.html
331
226
  - spec/support/socket_hostname.rb
332
227
  - spec/support/timber.rb
333
228
  - spec/support/timecop.rb
334
229
  - spec/support/webmock.rb
335
- - spec/timber/cli/config_file_spec.rb
336
- - spec/timber/cli/installers/config_file_spec.rb
337
- - spec/timber/cli/installers/other_spec.rb
338
- - spec/timber/cli/installers/rails_spec.rb
339
- - spec/timber/cli/installers/root_spec.rb
340
- - spec/timber/config_spec.rb
341
- - spec/timber/contexts/custom_spec.rb
342
- - spec/timber/contexts/organization_spec.rb
343
- - spec/timber/contexts/runtime_spec.rb
344
- - spec/timber/contexts/system_spec.rb
345
- - spec/timber/contexts/user_spec.rb
346
- - spec/timber/contexts_spec.rb
347
230
  - spec/timber/current_context_spec.rb
348
- - spec/timber/event_spec.rb
349
231
  - spec/timber/events/controller_call_spec.rb
350
- - spec/timber/events/custom_spec.rb
351
232
  - spec/timber/events/error_spec.rb
352
- - spec/timber/events/http_request_spec.rb
353
- - spec/timber/events/http_response_spec.rb
354
- - spec/timber/events_spec.rb
355
- - spec/timber/integrations/action_controller/log_subscriber_spec.rb
356
- - spec/timber/integrations/action_dispatch/debug_exceptions_spec.rb
357
- - spec/timber/integrations/action_view/log_subscriber_spec.rb
358
- - spec/timber/integrations/active_record/log_subscriber_spec.rb
359
- - spec/timber/integrations/rack/error_event_spec.rb
360
- - spec/timber/integrations/rack/http_context_spec.rb
361
- - spec/timber/integrations/rack/http_events_spec.rb
362
- - spec/timber/integrations/rack/session_context_spec.rb
363
- - spec/timber/integrations/rails/rack_logger_spec.rb
364
233
  - spec/timber/log_devices/http_spec.rb
365
234
  - spec/timber/log_entry_spec.rb
366
235
  - spec/timber/logger_spec.rb
367
- - spec/timber/util/attribute_normalizer_spec.rb
368
- - spec/timber/util/hash_spec.rb
369
- - spec/timber/util/request_spec.rb
@@ -1,5 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rails', '~> 3.0.0'
4
-
5
- gemspec :path => '../'
@@ -1,5 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rails', '~> 3.1.0'
4
-
5
- gemspec :path => '../'
@@ -1,5 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rails', '~> 3.2.0'
4
-
5
- gemspec :path => '../'
@@ -1,9 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rails', '~> 4.0.0'
4
-
5
- if RUBY_PLATFORM == "java"
6
- gem 'mime-types', '2.6.2'
7
- end
8
-
9
- gemspec :path => '../'
@@ -1,9 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rails', '~> 4.1.0'
4
-
5
- if RUBY_PLATFORM == "java"
6
- gem 'mime-types', '2.6.2'
7
- end
8
-
9
- gemspec :path => '../'
@@ -1,9 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rails', '~> 4.2.0'
4
-
5
- if RUBY_PLATFORM == "java"
6
- gem 'mime-types', '2.6.2'
7
- end
8
-
9
- gemspec :path => '../'
@@ -1,9 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rails', '~> 5.0.0'
4
-
5
- if RUBY_PLATFORM == "java"
6
- gem 'mime-types', '2.6.2'
7
- end
8
-
9
- gemspec :path => '../'
@@ -1,9 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rails', '~> 5.1.0'
4
-
5
- if RUBY_PLATFORM == "java"
6
- gem 'mime-types', '2.6.2'
7
- end
8
-
9
- gemspec :path => '../'
@@ -1,7 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rack', github: 'rack/rack', branch: 'master'
4
- gem 'arel', github: 'rails/arel', branch: 'master'
5
- gem 'rails', github: 'rails/rails', branch: 'master'
6
-
7
- gemspec :path => '../'
@@ -1,60 +0,0 @@
1
- require "optparse"
2
- require "yaml"
3
-
4
- require "timber/cli/api"
5
- require "timber/cli/installers"
6
- require "timber/cli/io"
7
- require "timber/version"
8
-
9
- module Timber
10
- # @private
11
- class CLI
12
- AVAILABLE_COMMANDS = %w(install).freeze
13
-
14
- class << self
15
- attr_accessor :options
16
-
17
- def run(argv = ARGV)
18
- global = global_option_parser
19
- global.order!(argv)
20
- command = argv.shift
21
-
22
- case command
23
- when nil
24
- # Print help
25
- puts global
26
- exit(0)
27
-
28
- when "install"
29
- api_key = argv.shift
30
- io = IO.new
31
- Installers.run(api_key, io)
32
-
33
- else
34
- puts "Command '#{command}' does not exist, run timber -h to "\
35
- "see the help"
36
- exit(1)
37
- end
38
- end
39
-
40
- def global_option_parser
41
- OptionParser.new do |o|
42
- o.banner = "Usage: timber <command> [options]"
43
-
44
- o.on "-v", "--version", "Print version and exit" do |_arg|
45
- puts "Timber #{Timber::VERSION}"
46
- exit(0)
47
- end
48
-
49
- o.on "-h", "--help", "Show help and exit" do
50
- puts o
51
- exit(0)
52
- end
53
-
54
- o.separator ""
55
- o.separator "Available commands: #{AVAILABLE_COMMANDS.join(", ")}"
56
- end
57
- end
58
- end
59
- end
60
- end
@@ -1,183 +0,0 @@
1
- require "base64"
2
- require "json"
3
- require "net/https"
4
- require "securerandom"
5
- require "uri"
6
-
7
- require "timber/cli/api/application"
8
- require "timber/cli/io/messages"
9
- require "timber/version"
10
-
11
- module Timber
12
- class CLI
13
- # The API class provides an interface for all Timber API requests, parsing response
14
- # and returning the appropriate objects.
15
- class API
16
-
17
- # Raise when the API key provided is invalid.
18
- class APIKeyInvalidError < StandardError
19
- def message
20
- "Uh oh! The API key supplied is invalid. Please ensure that you copied the \n" \
21
- "key properly.\n\n#{IO::Messages.obtain_key_instructions}"
22
- end
23
- end
24
-
25
- class LogsNotReceivedError< StandardError
26
- def message
27
- "Bummer, we couldn't confirm log delivery with the Timber API, something is off. " \
28
- "If you email support@timber.io, we'll work with you to figure out what's going on. " \
29
- "And as a thank you sticking with us, we'll set you up with a 25% indefinite discount."
30
- end
31
- end
32
-
33
- # Raised when Timber is returning 500s
34
- class ServerError < StandardError
35
- def message
36
- "Crap, it looks like the Timber API is returning 500s :/. In order to properly " \
37
- "install Timber and test integration we need the Timber API to work correctly. " \
38
- "Chances are we're aware of the issue and if you try again later the API should " \
39
- "be working. \n\n" \
40
- "Status updates: http://status.timber.io \n" \
41
- "Yell at us via email: support@timber.io \n"
42
- end
43
- end
44
-
45
- # Raised when the API returns a response that a particular method is not expecting.
46
- class UnrecognizedAPIResponse < StandardError
47
- def initialize(res)
48
- @res = res
49
- end
50
-
51
- def message
52
- "Uh oh, we received a response from the Timber API that was not recognized " \
53
- "(#{res.code}). We've been notified of the issue, but please feel free to " \
54
- "yell at us via email to make sure we're aware: support@timber.io"
55
- end
56
- end
57
-
58
- TIMBER_PRODUCTION_API_URL = "https://api.timber.io".freeze
59
- TIMBER_STAGING_API_URL = "https://api.timber-staging.io".freeze
60
- TIMBER_API_URL = ENV['TIMBER_STAGING'] ? TIMBER_STAGING_API_URL : TIMBER_PRODUCTION_API_URL
61
- TIMBER_API_URI = URI.parse(TIMBER_API_URL)
62
- APPLICATION_PATH = "/installer/application".freeze
63
- EVENT_PATH = "/installer/events".freeze
64
- HAS_LOGS_PATH = "/installer/has_logs".freeze
65
- USER_AGENT = "Timber Ruby/#{Timber::VERSION} (HTTP)".freeze
66
-
67
- attr_accessor :api_key
68
-
69
- def initialize(api_key)
70
- @api_key = api_key
71
- @session_id = SecureRandom.uuid
72
- end
73
-
74
- # Returns the application for the given API key.
75
- def application!
76
- res = get!(APPLICATION_PATH)
77
- build_application(res)
78
- end
79
-
80
- # Hits the API to clone the app for the provided API key to the specified environment.
81
- def clone_application!(environment)
82
- return nil
83
- end
84
-
85
- # Sends an event to Timber so that we can understand how the installer is performing
86
- # an ensure a top notch user experience. We do not raise here because it is not
87
- # critical for the install process.
88
- def event(name, data = {})
89
- post!(EVENT_PATH, event: {name: name, data: data})
90
- true
91
- rescue Exception
92
- false
93
- end
94
-
95
- # After test logs are sent to the Timber API this method waits for them to be
96
- # received. This is how we test integration.
97
- def wait_for_logs(iteration = 0, &block)
98
- if block_given?
99
- yield iteration
100
- end
101
-
102
- case iteration
103
- when 20
104
- event(:excessive_log_waiting)
105
- when 60
106
- raise LogsNotReceivedError.new
107
- end
108
-
109
- sleep 0.5
110
-
111
- res = get!(HAS_LOGS_PATH)
112
-
113
- case res.code
114
- when "202"
115
- wait_for_logs(iteration + 1, &block)
116
- when "204"
117
- true
118
- else
119
- raise UnrecognizedAPIResponse.new(res)
120
- end
121
- end
122
-
123
- private
124
- def build_application(res)
125
- parsed_body = JSON.parse(res.body)
126
- attributes = parsed_body.fetch("data")
127
- Application.new(attributes)
128
- end
129
-
130
- def get!(path)
131
- req = Net::HTTP::Get.new(path)
132
- issue!(req)
133
- end
134
-
135
- def post!(path, body)
136
- req = Net::HTTP::Post.new(path)
137
- req.body = body.to_json
138
- req['Content-Type'] = "application/json"
139
- issue!(req)
140
- end
141
-
142
- def issue!(req)
143
- if api_key
144
- req['Authorization'] = "Basic #{encoded_api_key}"
145
- end
146
-
147
- req['User-Agent'] = USER_AGENT
148
- req['X-Installer-Session-Id'] = @session_id
149
- res = http.start do |http|
150
- http.request(req)
151
- end
152
-
153
- code = Integer(res.code)
154
-
155
- if [401, 403].include?(code)
156
- raise APIKeyInvalidError.new
157
- elsif code >= 500
158
- raise ServerError.new
159
- else
160
- res
161
- end
162
- rescue OpenSSL::SSL::SSLError => _e
163
- if http.ssl_version != :TLSv1_2
164
- http.ssl_version = :TLSv1_2
165
- issue!(req)
166
- end
167
- end
168
-
169
- def http
170
- @http ||= begin
171
- http = Net::HTTP.new(TIMBER_API_URI.host, TIMBER_API_URI.port)
172
- http.use_ssl = true
173
- http.verify_mode = OpenSSL::SSL::VERIFY_NONE
174
- http
175
- end
176
- end
177
-
178
- def encoded_api_key
179
- Base64.urlsafe_encode64(@api_key).chomp
180
- end
181
- end
182
- end
183
- end