appsignal 2.5.3 → 2.6.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +10 -1
  3. data/.rubocop_todo.yml +1 -1
  4. data/.travis.yml +8 -1
  5. data/CHANGELOG.md +12 -0
  6. data/appsignal.gemspec +2 -2
  7. data/benchmark.rake +6 -0
  8. data/ext/agent.yml +35 -35
  9. data/ext/appsignal_extension.c +27 -9
  10. data/lib/appsignal.rb +15 -19
  11. data/lib/appsignal/auth_check.rb +2 -0
  12. data/lib/appsignal/capistrano.rb +2 -0
  13. data/lib/appsignal/cli.rb +2 -0
  14. data/lib/appsignal/cli/demo.rb +2 -0
  15. data/lib/appsignal/cli/diagnose.rb +2 -0
  16. data/lib/appsignal/cli/helpers.rb +2 -0
  17. data/lib/appsignal/cli/install.rb +15 -1
  18. data/lib/appsignal/cli/notify_of_deploy.rb +8 -0
  19. data/lib/appsignal/config.rb +44 -5
  20. data/lib/appsignal/demo.rb +2 -0
  21. data/lib/appsignal/event_formatter.rb +2 -0
  22. data/lib/appsignal/event_formatter/action_view/render_formatter.rb +2 -0
  23. data/lib/appsignal/event_formatter/active_record/instantiation_formatter.rb +2 -0
  24. data/lib/appsignal/event_formatter/active_record/sql_formatter.rb +2 -0
  25. data/lib/appsignal/event_formatter/elastic_search/search_formatter.rb +2 -0
  26. data/lib/appsignal/event_formatter/faraday/request_formatter.rb +2 -0
  27. data/lib/appsignal/event_formatter/mongo_ruby_driver/query_formatter.rb +2 -0
  28. data/lib/appsignal/event_formatter/moped/query_formatter.rb +2 -0
  29. data/lib/appsignal/extension.rb +2 -0
  30. data/lib/appsignal/extension/jruby.rb +15 -13
  31. data/lib/appsignal/garbage_collection_profiler.rb +2 -0
  32. data/lib/appsignal/hooks.rb +2 -0
  33. data/lib/appsignal/hooks/action_cable.rb +2 -0
  34. data/lib/appsignal/hooks/active_support_notifications.rb +2 -0
  35. data/lib/appsignal/hooks/celluloid.rb +2 -0
  36. data/lib/appsignal/hooks/data_mapper.rb +2 -0
  37. data/lib/appsignal/hooks/delayed_job.rb +2 -0
  38. data/lib/appsignal/hooks/mongo_ruby_driver.rb +2 -0
  39. data/lib/appsignal/hooks/net_http.rb +2 -0
  40. data/lib/appsignal/hooks/passenger.rb +2 -0
  41. data/lib/appsignal/hooks/puma.rb +2 -0
  42. data/lib/appsignal/hooks/que.rb +2 -0
  43. data/lib/appsignal/hooks/rake.rb +2 -0
  44. data/lib/appsignal/hooks/redis.rb +2 -0
  45. data/lib/appsignal/hooks/sequel.rb +2 -0
  46. data/lib/appsignal/hooks/shoryuken.rb +6 -2
  47. data/lib/appsignal/hooks/sidekiq.rb +4 -2
  48. data/lib/appsignal/hooks/unicorn.rb +2 -0
  49. data/lib/appsignal/hooks/webmachine.rb +2 -0
  50. data/lib/appsignal/integrations/capistrano/capistrano_2_tasks.rb +2 -0
  51. data/lib/appsignal/integrations/data_mapper.rb +2 -0
  52. data/lib/appsignal/integrations/delayed_job_plugin.rb +6 -2
  53. data/lib/appsignal/integrations/grape.rb +2 -0
  54. data/lib/appsignal/integrations/mongo_ruby_driver.rb +2 -0
  55. data/lib/appsignal/integrations/object.rb +2 -0
  56. data/lib/appsignal/integrations/padrino.rb +3 -4
  57. data/lib/appsignal/integrations/que.rb +2 -0
  58. data/lib/appsignal/integrations/railtie.rb +2 -0
  59. data/lib/appsignal/integrations/rake.rb +2 -0
  60. data/lib/appsignal/integrations/resque.rb +2 -0
  61. data/lib/appsignal/integrations/resque_active_job.rb +6 -2
  62. data/lib/appsignal/integrations/sinatra.rb +2 -0
  63. data/lib/appsignal/integrations/webmachine.rb +2 -0
  64. data/lib/appsignal/js_exception_transaction.rb +2 -0
  65. data/lib/appsignal/marker.rb +2 -0
  66. data/lib/appsignal/minutely.rb +2 -0
  67. data/lib/appsignal/rack/generic_instrumentation.rb +2 -0
  68. data/lib/appsignal/rack/js_exception_catcher.rb +2 -0
  69. data/lib/appsignal/rack/rails_instrumentation.rb +2 -0
  70. data/lib/appsignal/rack/sinatra_instrumentation.rb +2 -0
  71. data/lib/appsignal/rack/streaming_listener.rb +2 -0
  72. data/lib/appsignal/system.rb +2 -0
  73. data/lib/appsignal/transaction.rb +13 -10
  74. data/lib/appsignal/transmitter.rb +2 -0
  75. data/lib/appsignal/utils.rb +3 -1
  76. data/lib/appsignal/utils/{params_sanitizer.rb → hash_sanitizer.rb} +12 -11
  77. data/lib/appsignal/utils/query_params_sanitizer.rb +2 -0
  78. data/lib/appsignal/version.rb +3 -1
  79. data/lib/sequel/extensions/appsignal_integration.rb +2 -0
  80. data/resources/appsignal.yml.erb +5 -0
  81. data/spec/lib/appsignal/auth_check_spec.rb +11 -2
  82. data/spec/lib/appsignal/cli/install_spec.rb +33 -0
  83. data/spec/lib/appsignal/config_spec.rb +76 -18
  84. data/spec/lib/appsignal/extension_spec.rb +3 -3
  85. data/spec/lib/appsignal/integrations/padrino_spec.rb +8 -28
  86. data/spec/lib/appsignal/transaction_spec.rb +63 -30
  87. data/spec/lib/appsignal/utils/{params_sanitizer_spec.rb → hash_sanitizer_spec.rb} +6 -6
  88. data/spec/lib/appsignal_spec.rb +180 -158
  89. data/spec/support/helpers/std_streams_helper.rb +19 -12
  90. data/spec/support/project_fixture/config/appsignal.yml +21 -0
  91. metadata +11 -11
@@ -425,19 +425,26 @@ describe Appsignal do
425
425
  end
426
426
 
427
427
  describe "custom stats" do
428
+ let(:tags) { { :foo => "bar" } }
429
+
428
430
  describe ".set_gauge" do
429
431
  it "should call set_gauge on the extension with a string key and float" do
430
- expect(Appsignal::Extension).to receive(:set_gauge).with("key", 0.1)
432
+ expect(Appsignal::Extension).to receive(:set_gauge).with("key", 0.1, Appsignal::Extension.data_map_new)
431
433
  Appsignal.set_gauge("key", 0.1)
432
434
  end
433
435
 
436
+ it "should call set_gauge with tags" do
437
+ expect(Appsignal::Extension).to receive(:set_gauge).with("key", 0.1, Appsignal::Utils.data_generate(tags))
438
+ Appsignal.set_gauge("key", 0.1, tags)
439
+ end
440
+
434
441
  it "should call set_gauge on the extension with a symbol key and int" do
435
- expect(Appsignal::Extension).to receive(:set_gauge).with("key", 1.0)
442
+ expect(Appsignal::Extension).to receive(:set_gauge).with("key", 1.0, Appsignal::Extension.data_map_new)
436
443
  Appsignal.set_gauge(:key, 1)
437
444
  end
438
445
 
439
446
  it "should not raise an exception when out of range" do
440
- expect(Appsignal::Extension).to receive(:set_gauge).with("key", 10).and_raise(RangeError)
447
+ expect(Appsignal::Extension).to receive(:set_gauge).with("key", 10, Appsignal::Extension.data_map_new).and_raise(RangeError)
441
448
  expect(Appsignal.logger).to receive(:warn).with("Gauge value 10 for key 'key' is too big")
442
449
  expect do
443
450
  Appsignal.set_gauge("key", 10)
@@ -487,22 +494,27 @@ describe Appsignal do
487
494
 
488
495
  describe ".increment_counter" do
489
496
  it "should call increment_counter on the extension with a string key" do
490
- expect(Appsignal::Extension).to receive(:increment_counter).with("key", 1)
497
+ expect(Appsignal::Extension).to receive(:increment_counter).with("key", 1, Appsignal::Extension.data_map_new)
491
498
  Appsignal.increment_counter("key")
492
499
  end
493
500
 
501
+ it "should call increment_counter with tags" do
502
+ expect(Appsignal::Extension).to receive(:increment_counter).with("key", 1, Appsignal::Utils.data_generate(tags))
503
+ Appsignal.increment_counter("key", 1, tags)
504
+ end
505
+
494
506
  it "should call increment_counter on the extension with a symbol key" do
495
- expect(Appsignal::Extension).to receive(:increment_counter).with("key", 1)
507
+ expect(Appsignal::Extension).to receive(:increment_counter).with("key", 1, Appsignal::Extension.data_map_new)
496
508
  Appsignal.increment_counter(:key)
497
509
  end
498
510
 
499
511
  it "should call increment_counter on the extension with a count" do
500
- expect(Appsignal::Extension).to receive(:increment_counter).with("key", 5)
512
+ expect(Appsignal::Extension).to receive(:increment_counter).with("key", 5, Appsignal::Extension.data_map_new)
501
513
  Appsignal.increment_counter("key", 5)
502
514
  end
503
515
 
504
516
  it "should not raise an exception when out of range" do
505
- expect(Appsignal::Extension).to receive(:increment_counter).with("key", 10).and_raise(RangeError)
517
+ expect(Appsignal::Extension).to receive(:increment_counter).with("key", 10, Appsignal::Extension.data_map_new).and_raise(RangeError)
506
518
  expect(Appsignal.logger).to receive(:warn).with("Counter value 10 for key 'key' is too big")
507
519
  expect do
508
520
  Appsignal.increment_counter("key", 10)
@@ -512,17 +524,22 @@ describe Appsignal do
512
524
 
513
525
  describe ".add_distribution_value" do
514
526
  it "should call add_distribution_value on the extension with a string key and float" do
515
- expect(Appsignal::Extension).to receive(:add_distribution_value).with("key", 0.1)
527
+ expect(Appsignal::Extension).to receive(:add_distribution_value).with("key", 0.1, Appsignal::Extension.data_map_new)
516
528
  Appsignal.add_distribution_value("key", 0.1)
517
529
  end
518
530
 
531
+ it "should call add_distribution_value with tags" do
532
+ expect(Appsignal::Extension).to receive(:add_distribution_value).with("key", 0.1, Appsignal::Utils.data_generate(tags))
533
+ Appsignal.add_distribution_value("key", 0.1, tags)
534
+ end
535
+
519
536
  it "should call add_distribution_value on the extension with a symbol key and int" do
520
- expect(Appsignal::Extension).to receive(:add_distribution_value).with("key", 1.0)
537
+ expect(Appsignal::Extension).to receive(:add_distribution_value).with("key", 1.0, Appsignal::Extension.data_map_new)
521
538
  Appsignal.add_distribution_value(:key, 1)
522
539
  end
523
540
 
524
541
  it "should not raise an exception when out of range" do
525
- expect(Appsignal::Extension).to receive(:add_distribution_value).with("key", 10).and_raise(RangeError)
542
+ expect(Appsignal::Extension).to receive(:add_distribution_value).with("key", 10, Appsignal::Extension.data_map_new).and_raise(RangeError)
526
543
  expect(Appsignal.logger).to receive(:warn).with("Distribution value 10 for key 'key' is too big")
527
544
  expect do
528
545
  Appsignal.add_distribution_value("key", 10)
@@ -537,154 +554,6 @@ describe Appsignal do
537
554
  it { is_expected.to be_a Logger }
538
555
  end
539
556
 
540
- describe ".start_logger" do
541
- let(:out_stream) { std_stream }
542
- let(:output) { out_stream.read }
543
- let(:log_path) { File.join(tmp_dir, "log") }
544
- let(:log_file) { File.join(log_path, "appsignal.log") }
545
-
546
- before do
547
- FileUtils.mkdir_p(log_path)
548
-
549
- Appsignal.logger.error("Log in memory")
550
- Appsignal.config = project_fixture_config(
551
- "production",
552
- :log_path => log_path
553
- )
554
- end
555
- after { FileUtils.rm_rf(log_path) }
556
-
557
- context "when the log path is writable" do
558
- context "when the log file is writable" do
559
- let(:log_file_contents) { File.open(log_file).read }
560
-
561
- before do
562
- capture_stdout(out_stream) do
563
- Appsignal.start_logger
564
- Appsignal.logger.error("Log to file")
565
- end
566
- end
567
-
568
- it "logs to file" do
569
- expect(File.exist?(log_file)).to be_truthy
570
- expect(log_file_contents).to include "[ERROR] Log to file"
571
- expect(output).to be_empty
572
- end
573
-
574
- it "amends in memory log to log file" do
575
- expect(log_file_contents).to include "[ERROR] appsignal: Log in memory"
576
- end
577
- end
578
-
579
- context "when the log file is not writable" do
580
- before do
581
- FileUtils.touch log_file
582
- FileUtils.chmod 0o444, log_file
583
-
584
- capture_stdout(out_stream) do
585
- Appsignal.start_logger
586
- Appsignal.logger.error("Log to not writable log file")
587
- end
588
- end
589
-
590
- it "logs to stdout" do
591
- expect(File.writable?(log_file)).to be_falsy
592
- expect(output).to include "[ERROR] appsignal: Log to not writable log file"
593
- end
594
-
595
- it "amends in memory log to stdout" do
596
- expect(output).to include "[ERROR] appsignal: Log in memory"
597
- end
598
-
599
- it "outputs a warning" do
600
- expect(output).to include \
601
- "[WARN] appsignal: Unable to start logger with log path '#{log_file}'.",
602
- "[WARN] appsignal: Permission denied"
603
- end
604
- end
605
- end
606
-
607
- context "when the log path and fallback path are not writable" do
608
- before do
609
- FileUtils.chmod 0o444, log_path
610
- FileUtils.chmod 0o444, Appsignal::Config.system_tmp_dir
611
-
612
- capture_stdout(out_stream) do
613
- Appsignal.start_logger
614
- Appsignal.logger.error("Log to not writable log path")
615
- end
616
- end
617
- after do
618
- FileUtils.chmod 0o755, Appsignal::Config.system_tmp_dir
619
- end
620
-
621
- it "logs to stdout" do
622
- expect(File.writable?(log_path)).to be_falsy
623
- expect(output).to include "[ERROR] appsignal: Log to not writable log path"
624
- end
625
-
626
- it "amends in memory log to stdout" do
627
- expect(output).to include "[ERROR] appsignal: Log in memory"
628
- end
629
-
630
- it "outputs a warning" do
631
- expect(output).to include \
632
- "appsignal: Unable to log to '#{log_path}' "\
633
- "or the '#{Appsignal::Config.system_tmp_dir}' fallback."
634
- end
635
- end
636
-
637
- context "when on Heroku" do
638
- before do
639
- capture_stdout(out_stream) do
640
- Appsignal.start_logger
641
- Appsignal.logger.error("Log to stdout")
642
- end
643
- end
644
- around { |example| recognize_as_heroku { example.run } }
645
-
646
- it "logs to stdout" do
647
- expect(output).to include "[ERROR] appsignal: Log to stdout"
648
- end
649
-
650
- it "amends in memory log to stdout" do
651
- expect(output).to include "[ERROR] appsignal: Log in memory"
652
- end
653
- end
654
-
655
- describe "#logger#level" do
656
- subject { Appsignal.logger.level }
657
-
658
- context "when there is no config" do
659
- before do
660
- Appsignal.config = nil
661
- capture_stdout(out_stream) do
662
- Appsignal.start_logger
663
- end
664
- end
665
-
666
- it "sets the log level to info" do
667
- expect(subject).to eq Logger::INFO
668
- end
669
- end
670
-
671
- context "when there is a config" do
672
- context "when log level is configured to debug" do
673
- before do
674
- Appsignal.config.config_hash[:debug] = true
675
- capture_stdout(out_stream) do
676
- Appsignal.start_logger
677
- end
678
- end
679
-
680
- it "sets the log level to debug" do
681
- expect(subject).to eq Logger::DEBUG
682
- end
683
- end
684
- end
685
- end
686
- end
687
-
688
557
  describe ".log_formatter" do
689
558
  subject { Appsignal.log_formatter.call("Debug", Time.parse("2015-07-08"), nil, "log line") }
690
559
 
@@ -1046,4 +915,157 @@ describe Appsignal do
1046
915
  end
1047
916
  end
1048
917
  end
918
+
919
+ describe ".start_logger" do
920
+ let(:out_stream) { std_stream }
921
+ let(:output) { out_stream.read }
922
+ let(:log_path) { File.join(tmp_dir, "log") }
923
+ let(:log_file) { File.join(log_path, "appsignal.log") }
924
+
925
+ before { FileUtils.mkdir_p(log_path) }
926
+ after { FileUtils.rm_rf(log_path) }
927
+
928
+ def initialize_config
929
+ Appsignal.config = project_fixture_config(
930
+ "production",
931
+ :log_path => log_path
932
+ )
933
+ Appsignal.logger.error("Log in memory")
934
+ end
935
+
936
+ context "when the log path is writable" do
937
+ context "when the log file is writable" do
938
+ let(:log_file_contents) { File.open(log_file).read }
939
+
940
+ before do
941
+ capture_stdout(out_stream) do
942
+ initialize_config
943
+ Appsignal.start_logger
944
+ Appsignal.logger.error("Log to file")
945
+ end
946
+ end
947
+
948
+ it "logs to file" do
949
+ expect(File.exist?(log_file)).to be_truthy
950
+ expect(log_file_contents).to include "[ERROR] Log to file"
951
+ expect(output).to be_empty
952
+ end
953
+
954
+ it "amends in memory log to log file" do
955
+ expect(log_file_contents).to include "[ERROR] appsignal: Log in memory"
956
+ end
957
+ end
958
+
959
+ context "when the log file is not writable" do
960
+ before do
961
+ FileUtils.touch log_file
962
+ FileUtils.chmod 0o444, log_file
963
+
964
+ capture_stdout(out_stream) do
965
+ initialize_config
966
+ Appsignal.start_logger
967
+ Appsignal.logger.error("Log to not writable log file")
968
+ end
969
+ end
970
+
971
+ it "logs to stdout" do
972
+ expect(File.writable?(log_file)).to be_falsy
973
+ expect(output).to include "[ERROR] appsignal: Log to not writable log file"
974
+ end
975
+
976
+ it "amends in memory log to stdout" do
977
+ expect(output).to include "[ERROR] appsignal: Log in memory"
978
+ end
979
+
980
+ it "outputs a warning" do
981
+ expect(output).to include \
982
+ "[WARN] appsignal: Unable to start logger with log path '#{log_file}'.",
983
+ "[WARN] appsignal: Permission denied"
984
+ end
985
+ end
986
+ end
987
+
988
+ context "when the log path and fallback path are not writable" do
989
+ before do
990
+ FileUtils.chmod 0o444, log_path
991
+ FileUtils.chmod 0o444, Appsignal::Config.system_tmp_dir
992
+
993
+ capture_stdout(out_stream) do
994
+ initialize_config
995
+ Appsignal.start_logger
996
+ Appsignal.logger.error("Log to not writable log path")
997
+ end
998
+ end
999
+ after do
1000
+ FileUtils.chmod 0o755, Appsignal::Config.system_tmp_dir
1001
+ end
1002
+
1003
+ it "logs to stdout" do
1004
+ expect(File.writable?(log_path)).to be_falsy
1005
+ expect(output).to include "[ERROR] appsignal: Log to not writable log path"
1006
+ end
1007
+
1008
+ it "amends in memory log to stdout" do
1009
+ expect(output).to include "[ERROR] appsignal: Log in memory"
1010
+ end
1011
+
1012
+ it "outputs a warning" do
1013
+ expect(output).to include \
1014
+ "appsignal: Unable to log to '#{log_path}' "\
1015
+ "or the '#{Appsignal::Config.system_tmp_dir}' fallback."
1016
+ end
1017
+ end
1018
+
1019
+ context "when on Heroku" do
1020
+ before do
1021
+ capture_stdout(out_stream) do
1022
+ initialize_config
1023
+ Appsignal.start_logger
1024
+ Appsignal.logger.error("Log to stdout")
1025
+ end
1026
+ end
1027
+ around { |example| recognize_as_heroku { example.run } }
1028
+
1029
+ it "logs to stdout" do
1030
+ expect(output).to include "[ERROR] appsignal: Log to stdout"
1031
+ end
1032
+
1033
+ it "amends in memory log to stdout" do
1034
+ expect(output).to include "[ERROR] appsignal: Log in memory"
1035
+ end
1036
+ end
1037
+
1038
+ describe "#logger#level" do
1039
+ subject { Appsignal.logger.level }
1040
+
1041
+ context "when there is no config" do
1042
+ before do
1043
+ Appsignal.config = nil
1044
+ capture_stdout(out_stream) do
1045
+ Appsignal.start_logger
1046
+ end
1047
+ end
1048
+
1049
+ it "sets the log level to info" do
1050
+ expect(subject).to eq Logger::INFO
1051
+ end
1052
+ end
1053
+
1054
+ context "when there is a config" do
1055
+ context "when log level is configured to debug" do
1056
+ before do
1057
+ capture_stdout(out_stream) do
1058
+ initialize_config
1059
+ Appsignal.config[:debug] = true
1060
+ Appsignal.start_logger
1061
+ end
1062
+ end
1063
+
1064
+ it "sets the log level to debug" do
1065
+ expect(subject).to eq Logger::DEBUG
1066
+ end
1067
+ end
1068
+ end
1069
+ end
1070
+ end
1049
1071
  end
@@ -49,18 +49,25 @@ module StdStreamsHelper
49
49
  stderr.unlink
50
50
  end
51
51
 
52
- def silence
53
- std_stream = Tempfile.new(SecureRandom.uuid)
54
- original_stdout = $stdout.dup
55
- original_stderr = $stderr.dup
56
- $stdout.reopen std_stream
57
- $stderr.reopen std_stream
58
-
59
- yield
52
+ # Silence the STDOUT.
53
+ #
54
+ # Ignore the STDOUT and don't print it in the test suite's STDOUT.
55
+ #
56
+ # If an error is found the output the output is raised as an error, failing
57
+ # the spec. Warnings and other AppSignal messages are ignored.
58
+ #
59
+ # Usage
60
+ #
61
+ # silence { do_something }
62
+ #
63
+ # silence { puts "ERROR!" }
64
+ # # => Error found in silenced output:
65
+ # # ERROR!
66
+ def silence(&block)
67
+ stream = Tempfile.new(SecureRandom.uuid)
68
+ capture_std_streams(stream, stream, &block)
60
69
  ensure
61
- $stdout.reopen original_stdout
62
- $stderr.reopen original_stderr
63
- std_stream.rewind
64
- std_stream.unlink
70
+ output = stream.read
71
+ raise "Error found in silenced output:\n#{output}" if output =~ /(ERR|Error|error)/
65
72
  end
66
73
  end
@@ -1,6 +1,13 @@
1
1
  default: &defaults
2
2
  push_api_key: "abc"
3
3
  name: "TestApp"
4
+ request_headers: [
5
+ "HTTP_ACCEPT", "HTTP_ACCEPT_CHARSET", "HTTP_ACCEPT_ENCODING",
6
+ "HTTP_ACCEPT_LANGUAGE", "HTTP_CACHE_CONTROL", "HTTP_CONNECTION",
7
+ "CONTENT_LENGTH", "PATH_INFO", "HTTP_RANGE", "HTTP_REFERER",
8
+ "REQUEST_METHOD", "REQUEST_URI", "SERVER_NAME", "SERVER_PORT",
9
+ "SERVER_PROTOCOL", "HTTP_USER_AGENT"
10
+ ]
4
11
 
5
12
  production:
6
13
  <<: *defaults
@@ -21,6 +28,13 @@ old_config:
21
28
  active: true
22
29
  ignore_exceptions:
23
30
  - StandardError
31
+ request_headers: [
32
+ "HTTP_ACCEPT", "HTTP_ACCEPT_CHARSET", "HTTP_ACCEPT_ENCODING",
33
+ "HTTP_ACCEPT_LANGUAGE", "HTTP_CACHE_CONTROL", "HTTP_CONNECTION",
34
+ "CONTENT_LENGTH", "PATH_INFO", "HTTP_RANGE", "HTTP_REFERER",
35
+ "REQUEST_METHOD", "REQUEST_URI", "SERVER_NAME", "SERVER_PORT",
36
+ "SERVER_PROTOCOL", "HTTP_USER_AGENT"
37
+ ]
24
38
 
25
39
  old_config_mixed_with_new_config:
26
40
  push_api_key: "ghi"
@@ -30,3 +44,10 @@ old_config_mixed_with_new_config:
30
44
  - NoMethodError
31
45
  ignore_exceptions:
32
46
  - StandardError
47
+ request_headers: [
48
+ "HTTP_ACCEPT", "HTTP_ACCEPT_CHARSET", "HTTP_ACCEPT_ENCODING",
49
+ "HTTP_ACCEPT_LANGUAGE", "HTTP_CACHE_CONTROL", "HTTP_CONNECTION",
50
+ "CONTENT_LENGTH", "PATH_INFO", "HTTP_RANGE", "HTTP_REFERER",
51
+ "REQUEST_METHOD", "REQUEST_URI", "SERVER_NAME", "SERVER_PORT",
52
+ "SERVER_PROTOCOL", "HTTP_USER_AGENT"
53
+ ]