honeybadger 3.0.0.beta4 → 3.0.0.beta5

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: bd4f9a7c10b39fcdadf65441f1ba5cbba9b5d3e6
4
- data.tar.gz: 397e6c4ecc0456afe8b097b45eff87d512688277
3
+ metadata.gz: 024a03997f1e5a8f37ba751c32c6adb21e7cc3ea
4
+ data.tar.gz: f33bea69c33344b3bdc8c2d351cdf616063f7e1d
5
5
  SHA512:
6
- metadata.gz: fe2f9fb1c7806a528f9927e127ce33d1931c78bbe0285c80e5993cada0bb646f3bda858e6b178bd370bb98698ac86e238d96683ccc80105817b2f8daa0da3d58
7
- data.tar.gz: 62ed1567abeb8b94002efdfd3b355851021635d34e7c2ef728c2a15bf7c984ab3e36f2bb853eb1a34f6c39c473ab48645ef406eba16c512076634428c660752a
6
+ metadata.gz: 398c8575b8c3098e82d8a607ca039579af21bed972f5332df0de82d358613b83af4c6a1a4966ef947558374bc3d66051d71bb923ea6b08d4144120e6f8235aae
7
+ data.tar.gz: 438d726976ec17fa2de5e41faac98cd366ced5ef61183b262816bbe09a999647c0a7ee1f10e337864929c66edd4ee80d2d644a433671bdc87c6b786b712c0416
data/CHANGELOG.md CHANGED
@@ -28,6 +28,8 @@ adheres to [Semantic Versioning](http://semver.org/).
28
28
  - `Honeybadger.notify` now converts arguments which are not `Exception` or
29
29
  `Hash` types to strings and assigns them as the error message. Example:
30
30
  `Honeybadger.notify("Something went wrong")`.
31
+ - The currently deployed git revision is now detected automatically and sent
32
+ with error reports.
31
33
 
32
34
  ### Changed
33
35
  - `Honeybadger.start` has been deprecated and has no effect.
@@ -10,7 +10,6 @@ module Honeybadger
10
10
  module Backend
11
11
  class Server < Base
12
12
  ENDPOINTS = {
13
- ping: '/v1/ping'.freeze,
14
13
  notices: '/v1/notices'.freeze,
15
14
  deploys: '/v1/deploys'.freeze
16
15
  }.freeze
@@ -109,10 +109,15 @@ WELCOME
109
109
  project_options
110
110
  option :quiet, required: false, type: :boolean, aliases: :'-q', default: false, desc: 'Suppress all output unless notification fails.'
111
111
  def exec(*args)
112
+ if args.size == 0
113
+ say("honeybadger: exec needs a command to run", :red)
114
+ exit(1)
115
+ end
116
+
112
117
  config = build_config(options)
113
118
 
114
119
  if config.get(:api_key).to_s =~ BLANK
115
- say("No value provided for required options '--api-key'")
120
+ say("No value provided for required options '--api-key'", :red)
116
121
  exit(1)
117
122
  end
118
123
 
@@ -9,9 +9,11 @@ require 'honeybadger/logging'
9
9
  require 'honeybadger/backend'
10
10
  require 'honeybadger/config/defaults'
11
11
  require 'honeybadger/util/http'
12
+ require 'honeybadger/util/revision'
12
13
  require 'honeybadger/logging'
13
14
 
14
15
  module Honeybadger
16
+ # Internal
15
17
  class Config
16
18
  extend Forwardable
17
19
 
@@ -42,17 +44,18 @@ module Honeybadger
42
44
 
43
45
  attr_accessor :ruby, :env, :yaml, :framework
44
46
 
47
+ # Called by framework (see lib/honeybadger/init/) at the point of
48
+ # initialization. This is not required for the notifier to work (i.e. with
49
+ # `require 'honeybadger/ruby'`).
45
50
  def init!(opts = {}, env = ENV)
46
51
  self.framework = opts.freeze
47
52
  self.env = Env.new(env).freeze
48
53
  load_config_from_disk {|yaml| self.yaml = yaml.freeze }
54
+ detect_revision!
49
55
  init_logging!
50
56
  init_backend!
51
57
  logger.info(sprintf('Initializing Honeybadger Error Tracker for Ruby. Ship it! version=%s framework=%s', Honeybadger::VERSION, detected_framework))
52
58
  logger.warn('Entering development mode: data will not be reported.') if dev? && backend.kind_of?(Backend::Null)
53
- if valid? && !ping
54
- logger.warn('Failed to connect to Honeybadger service -- please verify that api.honeybadger.io is reachable (connection will be retried).')
55
- end
56
59
  self
57
60
  end
58
61
 
@@ -139,10 +142,6 @@ module Honeybadger
139
142
  !self[:env] || !dev?
140
143
  end
141
144
 
142
- def valid?
143
- self[:api_key].to_s =~ /\S/
144
- end
145
-
146
145
  def debug?
147
146
  !!self[:debug]
148
147
  end
@@ -239,14 +238,6 @@ module Honeybadger
239
238
  @root_regexp = Regexp.new("^#{ Regexp.escape(root) }")
240
239
  end
241
240
 
242
- def ping
243
- if result = send_ping
244
- return true
245
- end
246
-
247
- false
248
- end
249
-
250
241
  def detected_framework
251
242
  if self[:framework] =~ NOT_BLANK
252
243
  self[:framework].to_sym
@@ -273,6 +264,11 @@ module Honeybadger
273
264
 
274
265
  private
275
266
 
267
+ def detect_revision!
268
+ return if self[:revision]
269
+ set(:revision, Util::Revision.detect(self[:root]))
270
+ end
271
+
276
272
  # Internal: Optional path to honeybadger.log log file.
277
273
  #
278
274
  # Returns the Pathname log path if a log path was specified.
@@ -369,33 +365,6 @@ module Honeybadger
369
365
  obj.map(&:to_sym).include?(value.to_sym)
370
366
  end
371
367
 
372
- def ping_payload
373
- {
374
- version: VERSION,
375
- framework: framework_name,
376
- environment: self[:env],
377
- hostname: self[:hostname],
378
- config: to_hash
379
- }
380
- end
381
-
382
- def send_ping
383
- payload = ping_payload
384
- debug { sprintf('ping payload=%s', payload.to_json.dump) }
385
- response = backend.notify(:ping, payload)
386
- if response.success?
387
- debug { sprintf('ping response=%s', response.body.dump) }
388
- JSON.parse(response.body)
389
- else
390
- warn do
391
- msg = sprintf('ping failure code=%s', response.code)
392
- msg << sprintf(' message=%s', response.message.dump) if response.message =~ NOT_BLANK
393
- msg
394
- end
395
- nil
396
- end
397
- end
398
-
399
368
  def locate_absolute_path(path, root)
400
369
  path = Pathname.new(path.to_s)
401
370
  if path.absolute?
@@ -46,6 +46,11 @@ module Honeybadger
46
46
  default: Dir.pwd,
47
47
  type: String
48
48
  },
49
+ revision: {
50
+ description: 'The git revision of the project.',
51
+ default: nil,
52
+ type: String
53
+ },
49
54
  hostname: {
50
55
  description: 'The hostname of the current box.',
51
56
  default: Socket.gethostname,
@@ -185,6 +185,7 @@ module Honeybadger
185
185
  request: @request,
186
186
  server: {
187
187
  project_root: s(config[:root]),
188
+ revision: s(config[:revision]),
188
189
  environment_name: s(config[:env]),
189
190
  hostname: s(config[:hostname]),
190
191
  stats: stats,
@@ -0,0 +1,34 @@
1
+ module Honeybadger
2
+ module Util
3
+ class Revision
4
+ class << self
5
+ def detect(root = Dir.pwd)
6
+ from_heroku ||
7
+ from_capistrano(root) ||
8
+ from_git
9
+ end
10
+
11
+ private
12
+
13
+ # Requires (currently) alpha platform feature
14
+ # `heroku labs:enable runtime-dyno-metadata`
15
+ #
16
+ # See https://devcenter.heroku.com/articles/dyno-metadata
17
+ def from_heroku
18
+ ENV['HEROKU_SLUG_COMMIT']
19
+ end
20
+
21
+ def from_capistrano(root)
22
+ file = File.join(root, 'REVISION')
23
+ return nil unless File.file?(file)
24
+ File.read(file).strip rescue nil
25
+ end
26
+
27
+ def from_git
28
+ return nil unless File.directory?('.git')
29
+ `git rev-parse HEAD`.strip rescue nil
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -1,4 +1,4 @@
1
1
  module Honeybadger
2
2
  # Public: The current String Honeybadger version.
3
- VERSION = '3.0.0.beta4'.freeze
3
+ VERSION = '3.0.0.beta5'.freeze
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: honeybadger
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.beta4
4
+ version: 3.0.0.beta5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Honeybadger Industries LLC
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-24 00:00:00.000000000 Z
11
+ date: 2017-01-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Make managing application errors a more pleasant experience.
14
14
  email:
@@ -75,6 +75,7 @@ files:
75
75
  - lib/honeybadger/util/http.rb
76
76
  - lib/honeybadger/util/request_hash.rb
77
77
  - lib/honeybadger/util/request_payload.rb
78
+ - lib/honeybadger/util/revision.rb
78
79
  - lib/honeybadger/util/sanitizer.rb
79
80
  - lib/honeybadger/util/stats.rb
80
81
  - lib/honeybadger/version.rb