rollbar 2.15.4 → 2.15.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c60966d24610fbe373f854b21535910882d1cd4d
4
- data.tar.gz: 1d95ea09dc8976249d707688d6926f7bb9821c42
3
+ metadata.gz: 9ea41fac2007e3ba3b7b13f63f572cc2c1c9d6e2
4
+ data.tar.gz: 61e75c88eb2f4f53354450dbec86a09f6f08878b
5
5
  SHA512:
6
- metadata.gz: 8a342a07440f837a708affbca68d33b49c12d31caf7cff6d8b8aaeeb1ccac7c50294905acf42ee0842b37a9e4dbd1159e3f35f38af4bfeda676fa827ee25479a
7
- data.tar.gz: 7d22126d64ae9350f3b7caa1385a5c6c0585097c89bedca2cab7513caa29f23708671b43a97560c10fc375e550ab0875c6ccbb85932e624dab2e346fe22a25c3
6
+ metadata.gz: bbee402f2d4a50db12cfb30d1f4ccaadaeef12e3e51c71e5363abfe658f1b8362a9985fded59cb01e0f9f48f30bc10fe97cf654934f68ce42fc4a067bc10541c
7
+ data.tar.gz: 12776611c225ac3cddc5a04054ab0499e1fffdfc80ba72afea3efac838c17ac1c4859355b6687e24690ab709502242f6e1a2c5ba3c9fc974fd536f3b18e3a592
@@ -1,5 +1,9 @@
1
1
  # Change Log
2
2
 
3
+ ## 2.15.5
4
+
5
+ - Support proxies [#626](https://github.com/rollbar/rollbar-gem/pull/626)
6
+
3
7
  ## 2.15.4
4
8
 
5
9
  - Fix bug related to dup'ing extra passed in data
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Rollbar [![Build Status](https://api.travis-ci.org/rollbar/rollbar-gem.svg?branch=v2.15.4)](https://travis-ci.org/rollbar/rollbar-gem/branches)
1
+ # Rollbar [![Build Status](https://api.travis-ci.org/rollbar/rollbar-gem.svg?branch=v2.15.5)](https://travis-ci.org/rollbar/rollbar-gem/branches)
2
2
 
3
3
  <!-- RemoveNext -->
4
4
  [Rollbar](https://rollbar.com) is an error tracking service for Ruby and other languages. The Rollbar service will alert you of problems with your code and help you understand them in a ways never possible before. We love it and we hope you will too.
@@ -1013,6 +1013,24 @@ Rollbar.configure do |config|
1013
1013
  end
1014
1014
  ```
1015
1015
 
1016
+ ## Web Proxies
1017
+
1018
+ If your application is deployed behind a proxy server, you can set the ```https_proxy``` (note the 's') environment variable and it will be honored, including username and password, if any.
1019
+
1020
+ ```shell
1021
+ export https_proxy='http://some_user:some_password@some.proxy.com:80'
1022
+ ```
1023
+
1024
+ Alternately, you can configure the proxy settings in ```config/initializers/rollbar.rb```. If used, ```host``` is mandatory and must include the URL scheme (e.g. ```http://```), all other fields are optional:
1025
+
1026
+ ```ruby
1027
+ config.proxy = {
1028
+ host: 'http://some.proxy.server',
1029
+ port: 80,
1030
+ user: 'username_if_auth_required',
1031
+ password: 'password_if_auth_required'
1032
+ }
1033
+ ```
1016
1034
 
1017
1035
  ## Using with Zeus
1018
1036
 
@@ -57,6 +57,18 @@ Rollbar.configure do |config|
57
57
  # You can supply custom Sidekiq options:
58
58
  # config.use_sidekiq 'queue' => 'default'
59
59
 
60
+ # If your application runs behind a proxy server, you can set proxy parameters here.
61
+ # If https_proxy is set in your environment, that will be used. Settings here have precedence.
62
+ # The :host key is mandatory and must include the URL scheme (e.g. 'http://'), all other fields
63
+ # are optional.
64
+ #
65
+ # config.proxy = {
66
+ # host: 'http://some.proxy.server',
67
+ # port: 80,
68
+ # user: 'username_if_auth_required',
69
+ # password: 'password_if_auth_required'
70
+ # }
71
+
60
72
  # If you run your staging application instance in production environment then
61
73
  # you'll want to override the environment reported by `Rails.env` with an
62
74
  # environment variable like this: `ROLLBAR_ENV=staging`. This is a recommended
@@ -56,6 +56,7 @@ module Rollbar
56
56
  attr_accessor :write_to_file
57
57
  attr_reader :send_extra_frame_data
58
58
  attr_accessor :use_exception_level_filters_default
59
+ attr_accessor :proxy
59
60
 
60
61
  attr_reader :project_gem_paths
61
62
 
@@ -118,6 +119,7 @@ module Rollbar
118
119
  @send_extra_frame_data = :none
119
120
  @project_gem_paths = []
120
121
  @use_exception_level_filters_default = false
122
+ @proxy = nil
121
123
  end
122
124
 
123
125
  def initialize_copy(orig)
@@ -8,6 +8,7 @@ require 'rollbar/delay/girl_friday'
8
8
  require 'rollbar/delay/thread'
9
9
  require 'rollbar/logger_proxy'
10
10
  require 'rollbar/item'
11
+ require 'ostruct'
11
12
 
12
13
  module Rollbar
13
14
  # The notifier class. It has the core functionality
@@ -438,12 +439,13 @@ module Rollbar
438
439
 
439
440
  ## Delivery functions
440
441
 
441
- def send_item_using_eventmachine(item)
442
+ def send_item_using_eventmachine(item, uri)
442
443
  body = item.dump
443
444
  return unless body
444
445
 
445
446
  headers = { 'X-Rollbar-Access-Token' => item['access_token'] }
446
- req = EventMachine::HttpRequest.new(configuration.endpoint).post(:body => body, :head => headers)
447
+ options = http_proxy_for_em(uri)
448
+ req = EventMachine::HttpRequest.new(uri.to_s, options).post(:body => body, :head => headers)
447
449
 
448
450
  req.callback do
449
451
  if req.response_header.status == 200
@@ -463,21 +465,23 @@ module Rollbar
463
465
  def send_item(item)
464
466
  log_info '[Rollbar] Sending item'
465
467
 
466
- if configuration.use_eventmachine
467
- send_item_using_eventmachine(item)
468
- return
469
- end
470
-
471
468
  body = item.dump
472
469
  return unless body
473
470
 
474
471
  uri = URI.parse(configuration.endpoint)
475
472
 
473
+ if configuration.use_eventmachine
474
+ send_item_using_eventmachine(item, uri)
475
+ return
476
+ end
477
+
476
478
  handle_response(do_post(uri, body, item['access_token']))
477
479
  end
478
480
 
479
481
  def do_post(uri, body, access_token)
480
- http = Net::HTTP.new(uri.host, uri.port)
482
+ proxy = http_proxy(uri)
483
+ http = Net::HTTP.new(uri.host, uri.port, proxy.host, proxy.port, proxy.user, proxy.password)
484
+
481
485
  http.open_timeout = configuration.open_timeout
482
486
  http.read_timeout = configuration.request_timeout
483
487
 
@@ -496,6 +500,40 @@ module Rollbar
496
500
  handle_net_retries { http.request(request) }
497
501
  end
498
502
 
503
+ def http_proxy_for_em(uri)
504
+ proxy = http_proxy(uri)
505
+ {
506
+ :proxy => {
507
+ :host => proxy.host,
508
+ :port => proxy.port,
509
+ :authorization => [proxy.user, proxy.password]
510
+ }
511
+ }
512
+ end
513
+
514
+ def http_proxy(uri)
515
+ @http_proxy ||= proxy_from_config || proxy_from_env(uri) || null_proxy
516
+ end
517
+
518
+ def proxy_from_config
519
+ proxy = configuration.proxy
520
+ return nil unless proxy
521
+
522
+ px = URI.parse(proxy[:host])
523
+ px.port = proxy[:port]
524
+ px.user = proxy[:user]
525
+ px.password = proxy[:password]
526
+ px
527
+ end
528
+
529
+ def proxy_from_env(uri)
530
+ uri.find_proxy
531
+ end
532
+
533
+ def null_proxy
534
+ Struct.new(:host, :port, :user, :password).new
535
+ end
536
+
499
537
  def handle_net_retries
500
538
  return yield if skip_retries?
501
539
 
@@ -1,3 +1,3 @@
1
1
  module Rollbar
2
- VERSION = '2.15.4'
2
+ VERSION = '2.15.5'
3
3
  end
@@ -8,6 +8,8 @@ require 'active_support/core_ext/object'
8
8
  require 'active_support/json/encoding'
9
9
 
10
10
  require 'rollbar/item'
11
+ require 'ostruct'
12
+
11
13
  begin
12
14
  require 'rollbar/delay/sidekiq'
13
15
  require 'rollbar/delay/sucker_punch'
@@ -1008,6 +1010,62 @@ describe Rollbar do
1008
1010
  end
1009
1011
  end
1010
1012
 
1013
+ context 'using a proxy server' do
1014
+ before do
1015
+ allow_any_instance_of(Net::HTTP).to receive(:request).and_return(OpenStruct.new(:code => 200, :body => "Success"))
1016
+ @env_vars = clear_proxy_env_vars
1017
+ end
1018
+
1019
+ after do
1020
+ restore_proxy_env_vars(@env_vars)
1021
+ end
1022
+
1023
+ context 'via environment variables' do
1024
+ it 'honors proxy settings in the environment' do
1025
+ ENV['http_proxy'] = 'http://user:pass@example.com:80'
1026
+ ENV['https_proxy'] = 'http://user:pass@example.com:80'
1027
+
1028
+ uri = URI.parse(Rollbar::Configuration::DEFAULT_ENDPOINT)
1029
+ expect(Net::HTTP).to receive(:new).with(uri.host, uri.port, 'example.com', 80, 'user', 'pass').and_call_original
1030
+ Rollbar.info("proxy this")
1031
+ end
1032
+
1033
+ it 'does not use a proxy if no proxy settings in environemnt' do
1034
+ uri = URI.parse(Rollbar::Configuration::DEFAULT_ENDPOINT)
1035
+ expect(Net::HTTP).to receive(:new).with(uri.host, uri.port, nil, nil, nil, nil).and_call_original
1036
+ Rollbar.info("proxy this")
1037
+ end
1038
+ end
1039
+
1040
+ context 'set in configuration file' do
1041
+ before do
1042
+ Rollbar.configure do |config|
1043
+ config.proxy = {
1044
+ :host => 'http://config.com',
1045
+ :port => 8080,
1046
+ :user => 'foo',
1047
+ :password => 'bar'
1048
+ }
1049
+ end
1050
+ end
1051
+
1052
+ it 'honors proxy settings in the config file' do
1053
+ uri = URI.parse(Rollbar::Configuration::DEFAULT_ENDPOINT)
1054
+ expect(Net::HTTP).to receive(:new).with(uri.host, uri.port, 'config.com', 8080, 'foo', 'bar').and_call_original
1055
+ Rollbar.info("proxy this")
1056
+ end
1057
+
1058
+ it 'gives the configuration settings precedence over environment' do
1059
+ ENV['http_proxy'] = 'http://user:pass@example.com:80'
1060
+ ENV['https_proxy'] = 'http://user:pass@example.com:80'
1061
+
1062
+ uri = URI.parse(Rollbar::Configuration::DEFAULT_ENDPOINT)
1063
+ expect(Net::HTTP).to receive(:new).with(uri.host, uri.port, 'config.com', 8080, 'foo', 'bar').and_call_original
1064
+ Rollbar.info("proxy this")
1065
+ end
1066
+ end
1067
+ end
1068
+
1011
1069
  context 'asynchronous_handling' do
1012
1070
  before do
1013
1071
  Rollbar.clear_notifier!
@@ -36,4 +36,22 @@ module NotifierHelpers
36
36
  Rollbar.reconfigure do |config|
37
37
  end
38
38
  end
39
+
40
+ def clear_proxy_env_vars
41
+ env_vars = {}
42
+ proxy_env_vars.each do |var|
43
+ env_vars[var] = ENV.delete(var)
44
+ end
45
+ env_vars
46
+ end
47
+
48
+ def restore_proxy_env_vars(env_vars)
49
+ proxy_env_vars.each do |var|
50
+ ENV[var] = env_vars[var]
51
+ end
52
+ end
53
+
54
+ def proxy_env_vars
55
+ %w[http_proxy HTTP_PROXY https_proxy HTTPS_PROXY]
56
+ end
39
57
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rollbar
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.15.4
4
+ version: 2.15.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rollbar, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-19 00:00:00.000000000 Z
11
+ date: 2017-11-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json