rollbar 2.15.4 → 2.15.5

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: 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