newrelic_rpm 3.11.2.286 → 3.12.0.288

Sign up to get free protection for your applications and to get access to all the features.
Files changed (269) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -2
  3. data/.yardopts +2 -0
  4. data/CHANGELOG +39 -4
  5. data/README.md +4 -2
  6. data/lib/new_relic/agent.rb +229 -214
  7. data/lib/new_relic/agent/agent.rb +23 -12
  8. data/lib/new_relic/agent/attribute_filter.rb +242 -0
  9. data/lib/new_relic/agent/attribute_processing.rb +62 -0
  10. data/lib/new_relic/agent/commands/xray_session_collection.rb +4 -1
  11. data/lib/new_relic/agent/configuration/default_source.rb +284 -30
  12. data/lib/new_relic/agent/configuration/high_security_source.rb +0 -8
  13. data/lib/new_relic/agent/configuration/manager.rb +1 -1
  14. data/lib/new_relic/agent/configuration/server_source.rb +86 -31
  15. data/lib/new_relic/agent/configuration/yaml_source.rb +1 -1
  16. data/lib/new_relic/agent/cross_app_monitor.rb +8 -13
  17. data/lib/new_relic/agent/cross_app_tracing.rb +15 -15
  18. data/lib/new_relic/agent/custom_event_aggregator.rb +6 -2
  19. data/lib/new_relic/agent/database.rb +15 -2
  20. data/lib/new_relic/agent/datastores.rb +52 -38
  21. data/lib/new_relic/agent/datastores/metric_helper.rb +2 -1
  22. data/lib/new_relic/agent/encoding_normalizer.rb +82 -0
  23. data/lib/new_relic/agent/error_collector.rb +125 -169
  24. data/lib/new_relic/agent/hash_extensions.rb +26 -0
  25. data/lib/new_relic/agent/http_clients/excon_wrappers.rb +13 -11
  26. data/lib/new_relic/agent/http_clients/uri_util.rb +9 -0
  27. data/lib/new_relic/agent/instrumentation/action_controller_subscriber.rb +1 -3
  28. data/lib/new_relic/agent/instrumentation/action_view_subscriber.rb +1 -1
  29. data/lib/new_relic/agent/instrumentation/active_record_helper.rb +1 -1
  30. data/lib/new_relic/agent/instrumentation/active_record_subscriber.rb +12 -5
  31. data/lib/new_relic/agent/instrumentation/controller_instrumentation.rb +6 -7
  32. data/lib/new_relic/agent/instrumentation/curb.rb +6 -6
  33. data/lib/new_relic/agent/instrumentation/excon/middleware.rb +4 -4
  34. data/lib/new_relic/agent/instrumentation/grape.rb +4 -3
  35. data/lib/new_relic/agent/instrumentation/rails/action_controller.rb +6 -3
  36. data/lib/new_relic/agent/instrumentation/rails/errors.rb +9 -3
  37. data/lib/new_relic/agent/instrumentation/rails3/action_controller.rb +6 -1
  38. data/lib/new_relic/agent/instrumentation/rails3/errors.rb +9 -7
  39. data/lib/new_relic/agent/instrumentation/rails4/errors.rb +8 -6
  40. data/lib/new_relic/agent/instrumentation/resque.rb +2 -3
  41. data/lib/new_relic/agent/instrumentation/sidekiq.rb +3 -3
  42. data/lib/new_relic/agent/instrumentation/typhoeus.rb +2 -2
  43. data/lib/new_relic/agent/javascript_instrumentor.rb +24 -16
  44. data/lib/new_relic/agent/parameter_filtering.rb +8 -1
  45. data/lib/new_relic/agent/samplers/delayed_job_sampler.rb +2 -2
  46. data/lib/new_relic/agent/sql_sampler.rb +1 -0
  47. data/lib/new_relic/agent/stats.rb +0 -4
  48. data/lib/new_relic/agent/stats_engine/metric_stats.rb +5 -3
  49. data/lib/new_relic/agent/stats_engine/stats_hash.rb +4 -0
  50. data/lib/new_relic/agent/supported_versions.rb +2 -2
  51. data/lib/new_relic/agent/traced_method_stack.rb +3 -3
  52. data/lib/new_relic/agent/transaction.rb +141 -118
  53. data/lib/new_relic/agent/transaction/attributes.rb +161 -0
  54. data/lib/new_relic/agent/transaction/developer_mode_sample_buffer.rb +4 -4
  55. data/lib/new_relic/agent/transaction/trace.rb +150 -0
  56. data/lib/new_relic/agent/transaction/trace_node.rb +190 -0
  57. data/lib/new_relic/agent/transaction/transaction_sample_buffer.rb +2 -2
  58. data/lib/new_relic/agent/transaction_event_aggregator.rb +23 -7
  59. data/lib/new_relic/agent/transaction_sample_builder.rb +37 -62
  60. data/lib/new_relic/agent/transaction_sampler.rb +29 -66
  61. data/lib/new_relic/cli/commands/install.rb +2 -2
  62. data/lib/new_relic/coerce.rb +15 -28
  63. data/lib/new_relic/json_wrapper.rb +14 -73
  64. data/lib/new_relic/noticed_error.rb +81 -5
  65. data/lib/new_relic/rack/browser_monitoring.rb +14 -19
  66. data/lib/new_relic/rack/developer_mode.rb +68 -14
  67. data/lib/new_relic/rack/developer_mode/segment_summary.rb +56 -0
  68. data/lib/new_relic/version.rb +2 -2
  69. data/newrelic.yml +19 -196
  70. data/test/agent_helper.rb +42 -36
  71. data/test/config/newrelic.yml +0 -1
  72. data/test/environments/rails40/Gemfile +1 -1
  73. data/test/environments/rails41/Gemfile +1 -1
  74. data/test/environments/rails42/Gemfile +1 -1
  75. data/test/fixtures/cross_agent_tests/attribute_configuration.json +35 -0
  76. data/test/fixtures/cross_agent_tests/sql_obfuscation/README.md +19 -12
  77. data/test/fixtures/cross_agent_tests/sql_obfuscation/sql_obfuscation.json +365 -0
  78. data/test/multiverse/lib/multiverse/suite.rb +5 -1
  79. data/test/multiverse/suites/active_record/active_record_test.rb +8 -8
  80. data/test/multiverse/suites/agent_only/agent_attributes_test.rb +145 -0
  81. data/test/multiverse/suites/agent_only/cross_application_tracing_test.rb +8 -0
  82. data/test/multiverse/suites/agent_only/custom_queue_time_test.rb +5 -1
  83. data/test/multiverse/suites/agent_only/encoding_handling_test.rb +6 -6
  84. data/test/multiverse/suites/agent_only/marshaling_test.rb +1 -1
  85. data/test/multiverse/suites/agent_only/set_transaction_name_test.rb +2 -3
  86. data/test/multiverse/suites/agent_only/synthetics_test.rb +3 -3
  87. data/test/multiverse/suites/agent_only/testing_app.rb +4 -0
  88. data/test/multiverse/suites/agent_only/thread_profiling_test.rb +1 -1
  89. data/test/multiverse/suites/agent_only/utilization_data_collection_test.rb +9 -7
  90. data/test/multiverse/suites/curb/Envfile +5 -6
  91. data/test/multiverse/suites/curb/curb_test.rb +4 -5
  92. data/test/multiverse/suites/datamapper/datamapper_test.rb +2 -2
  93. data/test/multiverse/suites/excon/Envfile +11 -4
  94. data/test/multiverse/suites/excon/excon_test.rb +5 -5
  95. data/test/multiverse/suites/grape/config/newrelic.yml +1 -0
  96. data/test/multiverse/suites/grape/grape_test.rb +76 -12
  97. data/test/multiverse/suites/grape/grape_test_api.rb +16 -0
  98. data/test/multiverse/suites/high_security/config/newrelic.yml +43 -3
  99. data/test/multiverse/suites/high_security/high_security_test.rb +165 -9
  100. data/test/multiverse/suites/httpclient/Envfile +5 -1
  101. data/test/multiverse/suites/httpclient/httpclient_test.rb +2 -2
  102. data/test/multiverse/suites/memcached/Envfile +1 -1
  103. data/test/multiverse/suites/mongo/Envfile +8 -1
  104. data/test/multiverse/suites/mongo/helpers/mongo_operation_tests.rb +29 -29
  105. data/test/multiverse/suites/mongo/mongo_unsupported_version_test.rb +43 -8
  106. data/test/multiverse/suites/rack/rack_parameter_filtering_test.rb +13 -3
  107. data/test/multiverse/suites/rails/Envfile +3 -3
  108. data/test/multiverse/suites/rails/error_tracing_test.rb +52 -31
  109. data/test/multiverse/suites/rails/gc_instrumentation_test.rb +1 -1
  110. data/test/multiverse/suites/rails/ignore_test.rb +1 -1
  111. data/test/multiverse/suites/rails/parameter_capture_test.rb +108 -40
  112. data/test/multiverse/suites/rails/request_statistics_test.rb +10 -4
  113. data/test/multiverse/suites/rails/view_instrumentation_test.rb +24 -24
  114. data/test/multiverse/suites/resque/instrumentation_test.rb +46 -12
  115. data/test/multiverse/suites/sequel/sequel_extension_test.rb +8 -8
  116. data/test/multiverse/suites/sequel/sequel_helpers.rb +11 -11
  117. data/test/multiverse/suites/sequel/sequel_plugin_test.rb +11 -11
  118. data/test/multiverse/suites/sidekiq/Envfile +1 -4
  119. data/test/multiverse/suites/sidekiq/after_suite.rb +9 -0
  120. data/test/multiverse/suites/sidekiq/sidekiq_instrumentation_test.rb +49 -16
  121. data/test/multiverse/suites/sidekiq/test_worker.rb +1 -2
  122. data/test/multiverse/suites/sinatra/Envfile +1 -1
  123. data/test/multiverse/suites/sinatra/config/newrelic.yml +1 -0
  124. data/test/multiverse/suites/sinatra/sinatra_classic_test.rb +0 -4
  125. data/test/multiverse/suites/sinatra/sinatra_modular_test.rb +0 -4
  126. data/test/multiverse/suites/sinatra/sinatra_parameter_capture_test.rb +65 -0
  127. data/test/multiverse/suites/sinatra/sinatra_test_cases.rb +0 -11
  128. data/test/multiverse/suites/typhoeus/Envfile +8 -2
  129. data/test/multiverse/suites/typhoeus/typhoeus_test.rb +4 -4
  130. data/test/new_relic/agent/agent/connect_test.rb +13 -9
  131. data/test/new_relic/agent/agent_test.rb +34 -24
  132. data/test/new_relic/agent/attribute_filter_test.rb +218 -0
  133. data/test/new_relic/agent/attribute_processing_test.rb +160 -0
  134. data/test/new_relic/agent/configuration/default_source_test.rb +88 -0
  135. data/test/new_relic/agent/configuration/manager_test.rb +3 -4
  136. data/test/new_relic/agent/configuration/orphan_configuration_test.rb +3 -1
  137. data/test/new_relic/agent/configuration/server_source_test.rb +39 -0
  138. data/test/new_relic/agent/cross_app_monitor_test.rb +6 -30
  139. data/test/new_relic/agent/cross_app_tracing_test.rb +12 -12
  140. data/test/new_relic/agent/database/sql_obfuscation_test.rb +39 -65
  141. data/test/new_relic/agent/datastores/metric_helper_test.rb +36 -0
  142. data/test/new_relic/agent/encoding_normalizer_test.rb +66 -0
  143. data/test/new_relic/agent/error_collector_test.rb +181 -34
  144. data/test/new_relic/agent/hash_extensions_test.rb +34 -0
  145. data/test/new_relic/agent/instrumentation/action_controller_subscriber_test.rb +20 -23
  146. data/test/new_relic/agent/instrumentation/action_view_subscriber_test.rb +12 -12
  147. data/test/new_relic/agent/instrumentation/active_record_subscriber_test.rb +5 -5
  148. data/test/new_relic/agent/instrumentation/controller_instrumentation_test.rb +4 -4
  149. data/test/new_relic/agent/instrumentation/task_instrumentation_test.rb +21 -11
  150. data/test/new_relic/agent/javascript_instrumentor_test.rb +69 -45
  151. data/test/new_relic/agent/pipe_service_test.rb +2 -2
  152. data/test/new_relic/agent/stats_engine/gc_profiler_test.rb +1 -1
  153. data/test/new_relic/agent/stats_engine/metric_stats_test.rb +8 -7
  154. data/test/new_relic/agent/stats_engine/stats_hash_test.rb +2 -2
  155. data/test/new_relic/agent/threading/backtrace_node_test.rb +2 -2
  156. data/test/new_relic/agent/transaction/attributes_test.rb +276 -0
  157. data/test/new_relic/agent/transaction/developer_mode_sample_buffer_test.rb +10 -10
  158. data/test/new_relic/agent/transaction/trace_node_test.rb +361 -0
  159. data/test/new_relic/agent/transaction/trace_test.rb +394 -0
  160. data/test/new_relic/agent/transaction/xray_sample_buffer_test.rb +1 -1
  161. data/test/new_relic/agent/transaction_event_aggregator_test.rb +127 -57
  162. data/test/new_relic/agent/transaction_sample_builder_test.rb +70 -78
  163. data/test/new_relic/agent/transaction_sampler_test.rb +76 -185
  164. data/test/new_relic/agent/transaction_test.rb +283 -135
  165. data/test/new_relic/agent_test.rb +27 -12
  166. data/test/new_relic/cli/commands/install_test.rb +27 -0
  167. data/test/new_relic/coerce_test.rb +0 -59
  168. data/test/new_relic/data_container_tests.rb +5 -5
  169. data/test/new_relic/fake_collector.rb +27 -9
  170. data/test/new_relic/filtering_test_app.rb +2 -1
  171. data/test/new_relic/http_client_test_cases.rb +16 -16
  172. data/test/new_relic/json_wrapper_test.rb +0 -54
  173. data/test/new_relic/marshalling_test_cases.rb +1 -0
  174. data/test/new_relic/multiverse_helpers.rb +144 -0
  175. data/test/new_relic/noticed_error_test.rb +112 -9
  176. data/test/new_relic/rack/browser_monitoring_test.rb +12 -7
  177. data/test/new_relic/{transaction_analysis → rack/developer_mode}/segment_summary_test.rb +5 -4
  178. data/test/new_relic/rack/developer_mode_test.rb +17 -3
  179. data/test/new_relic/rack/error_collector_test.rb +1 -1
  180. data/test/performance/lib/performance/instrumentation/stackprof.rb +1 -1
  181. data/test/performance/script/runner +2 -2
  182. data/test/performance/suites/active_record.rb +3 -3
  183. data/test/performance/suites/agent_attributes.rb +62 -0
  184. data/test/performance/suites/rack_middleware.rb +78 -28
  185. data/test/performance/suites/transaction_tracing.rb +35 -0
  186. data/test/test_helper.rb +9 -1
  187. data/ui/helpers/developer_mode_helper.rb +16 -23
  188. data/ui/views/newrelic/_sample.rhtml +3 -3
  189. data/ui/views/newrelic/_segment.rhtml +1 -1
  190. data/ui/views/newrelic/_show_sample_summary.rhtml +1 -1
  191. data/ui/views/newrelic/show_sample.rhtml +5 -4
  192. metadata +23 -80
  193. data/lib/new_relic/agent/transaction/force_persist_sample_buffer.rb +0 -25
  194. data/lib/new_relic/transaction_analysis.rb +0 -80
  195. data/lib/new_relic/transaction_analysis/segment_summary.rb +0 -53
  196. data/lib/new_relic/transaction_sample.rb +0 -207
  197. data/lib/new_relic/transaction_sample/composite_segment.rb +0 -31
  198. data/lib/new_relic/transaction_sample/fake_segment.rb +0 -13
  199. data/lib/new_relic/transaction_sample/segment.rb +0 -197
  200. data/lib/new_relic/transaction_sample/summary_segment.rb +0 -25
  201. data/lib/new_relic/url_rule.rb +0 -18
  202. data/test/fixtures/cross_agent_tests/sql_obfuscation/back_quoted_identifiers.mysql.obfuscated +0 -1
  203. data/test/fixtures/cross_agent_tests/sql_obfuscation/back_quoted_identifiers.mysql.sql +0 -1
  204. data/test/fixtures/cross_agent_tests/sql_obfuscation/comment_delimiters_in_strings.obfuscated +0 -1
  205. data/test/fixtures/cross_agent_tests/sql_obfuscation/comment_delimiters_in_strings.sql +0 -1
  206. data/test/fixtures/cross_agent_tests/sql_obfuscation/double_quoted_identifiers.postgres.obfuscated +0 -1
  207. data/test/fixtures/cross_agent_tests/sql_obfuscation/double_quoted_identifiers.postgres.sql +0 -1
  208. data/test/fixtures/cross_agent_tests/sql_obfuscation/end_of_line_comment_in_string.obfuscated +0 -2
  209. data/test/fixtures/cross_agent_tests/sql_obfuscation/end_of_line_comment_in_string.sql +0 -2
  210. data/test/fixtures/cross_agent_tests/sql_obfuscation/end_of_query_comment_cstyle.obfuscated +0 -1
  211. data/test/fixtures/cross_agent_tests/sql_obfuscation/end_of_query_comment_cstyle.sql +0 -1
  212. data/test/fixtures/cross_agent_tests/sql_obfuscation/end_of_query_comment_doubledash.obfuscated +0 -2
  213. data/test/fixtures/cross_agent_tests/sql_obfuscation/end_of_query_comment_doubledash.sql +0 -2
  214. data/test/fixtures/cross_agent_tests/sql_obfuscation/end_of_query_comment_hash.obfuscated +0 -1
  215. data/test/fixtures/cross_agent_tests/sql_obfuscation/end_of_query_comment_hash.sql +0 -1
  216. data/test/fixtures/cross_agent_tests/sql_obfuscation/escape_string_constants.postgres.obfuscated +0 -1
  217. data/test/fixtures/cross_agent_tests/sql_obfuscation/escape_string_constants.postgres.sql +0 -4
  218. data/test/fixtures/cross_agent_tests/sql_obfuscation/malformed/unterminated_double_quoted_string.mysql.sql +0 -1
  219. data/test/fixtures/cross_agent_tests/sql_obfuscation/malformed/unterminated_single_quoted_string.sql +0 -1
  220. data/test/fixtures/cross_agent_tests/sql_obfuscation/multiple_literal_types.mysql.obfuscated +0 -1
  221. data/test/fixtures/cross_agent_tests/sql_obfuscation/multiple_literal_types.mysql.sql +0 -1
  222. data/test/fixtures/cross_agent_tests/sql_obfuscation/numbers_in_identifiers.obfuscated +0 -1
  223. data/test/fixtures/cross_agent_tests/sql_obfuscation/numbers_in_identifiers.sql +0 -1
  224. data/test/fixtures/cross_agent_tests/sql_obfuscation/numeric_literals.obfuscated +0 -1
  225. data/test/fixtures/cross_agent_tests/sql_obfuscation/numeric_literals.sql +0 -1
  226. data/test/fixtures/cross_agent_tests/sql_obfuscation/pathological/README.md +0 -4
  227. data/test/fixtures/cross_agent_tests/sql_obfuscation/pathological/end_of_line_comments_with_quotes.obfuscated +0 -1
  228. data/test/fixtures/cross_agent_tests/sql_obfuscation/pathological/end_of_line_comments_with_quotes.sql +0 -2
  229. data/test/fixtures/cross_agent_tests/sql_obfuscation/pathological/mixed_comments_and_quotes.obfuscated +0 -1
  230. data/test/fixtures/cross_agent_tests/sql_obfuscation/pathological/mixed_comments_and_quotes.sql +0 -2
  231. data/test/fixtures/cross_agent_tests/sql_obfuscation/pathological/mixed_quotes_comments_and_newlines.obfuscated +0 -1
  232. data/test/fixtures/cross_agent_tests/sql_obfuscation/pathological/mixed_quotes_comments_and_newlines.sql +0 -4
  233. data/test/fixtures/cross_agent_tests/sql_obfuscation/pathological/mixed_quotes_end_of_line_comments.obfuscated +0 -1
  234. data/test/fixtures/cross_agent_tests/sql_obfuscation/pathological/mixed_quotes_end_of_line_comments.sql +0 -3
  235. data/test/fixtures/cross_agent_tests/sql_obfuscation/pathological/quote_delimiters_in_comments.obfuscated +0 -1
  236. data/test/fixtures/cross_agent_tests/sql_obfuscation/pathological/quote_delimiters_in_comments.sql +0 -1
  237. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_double_quoted.mysql.obfuscated +0 -1
  238. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_double_quoted.mysql.sql +0 -1
  239. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_single_quoted.obfuscated +0 -1
  240. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_single_quoted.sql +0 -1
  241. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_with_backslash_and_twin_single_quotes.obfuscated +0 -1
  242. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_with_backslash_and_twin_single_quotes.sql +0 -4
  243. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_with_embedded_double_quote.obfuscated +0 -1
  244. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_with_embedded_double_quote.sql +0 -1
  245. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_with_embedded_newline.obfuscated +0 -1
  246. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_with_embedded_newline.sql +0 -2
  247. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_with_embedded_single_quote.mysql.obfuscated +0 -1
  248. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_with_embedded_single_quote.mysql.sql +0 -1
  249. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_with_escaped_quotes.mysql.obfuscated +0 -1
  250. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_with_escaped_quotes.mysql.sql +0 -1
  251. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_with_trailing_backslash.obfuscated +0 -1
  252. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_with_trailing_backslash.sql +0 -4
  253. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_with_trailing_escaped_backslash.mysql.obfuscated +0 -1
  254. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_with_trailing_escaped_backslash.mysql.sql +0 -1
  255. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_with_trailing_escaped_backslash_single_quoted.obfuscated +0 -1
  256. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_with_trailing_escaped_backslash_single_quoted.sql +0 -1
  257. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_with_trailing_escaped_quote.obfuscated +0 -1
  258. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_with_trailing_escaped_quote.sql +0 -1
  259. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_with_twin_single_quotes.obfuscated +0 -1
  260. data/test/fixtures/cross_agent_tests/sql_obfuscation/string_with_twin_single_quotes.sql +0 -1
  261. data/test/new_relic/agent/error_collector/notice_error_test.rb +0 -261
  262. data/test/new_relic/agent/transaction/force_persist_sample_buffer_test.rb +0 -52
  263. data/test/new_relic/transaction_analysis_test.rb +0 -125
  264. data/test/new_relic/transaction_sample/composite_segment_test.rb +0 -38
  265. data/test/new_relic/transaction_sample/fake_segment_test.rb +0 -18
  266. data/test/new_relic/transaction_sample/segment_test.rb +0 -361
  267. data/test/new_relic/transaction_sample/summary_segment_test.rb +0 -34
  268. data/test/new_relic/transaction_sample_subtest_test.rb +0 -41
  269. data/test/new_relic/transaction_sample_test.rb +0 -361
@@ -28,6 +28,7 @@ require 'new_relic/agent/javascript_instrumentor'
28
28
  require 'new_relic/agent/vm/monotonic_gc_profiler'
29
29
  require 'new_relic/agent/utilization_data'
30
30
  require 'new_relic/environment_report'
31
+ require 'new_relic/agent/attribute_filter'
31
32
 
32
33
  module NewRelic
33
34
  module Agent
@@ -72,6 +73,20 @@ module NewRelic
72
73
 
73
74
  @harvest_lock = Mutex.new
74
75
  @obfuscator = lambda {|sql| NewRelic::Agent::Database.default_sql_obfuscator(sql) }
76
+
77
+ setup_attribute_filter
78
+ end
79
+
80
+ def setup_attribute_filter
81
+ refresh_attribute_filter
82
+
83
+ @events.subscribe(:finished_configuring) do
84
+ refresh_attribute_filter
85
+ end
86
+ end
87
+
88
+ def refresh_attribute_filter
89
+ @attribute_filter = NewRelic::Agent::AttributeFilter.new(NewRelic::Agent.config)
75
90
  end
76
91
 
77
92
  # contains all the class-level methods for NewRelic::Agent::Agent
@@ -124,6 +139,8 @@ module NewRelic
124
139
  attr_reader :monotonic_gc_profiler
125
140
  attr_reader :custom_event_aggregator
126
141
 
142
+ attr_reader :attribute_filter
143
+
127
144
  # This method should be called in a forked process after a fork.
128
145
  # It assumes the parent process initialized the agent, but does
129
146
  # not assume the agent started.
@@ -183,13 +200,10 @@ module NewRelic
183
200
  @started
184
201
  end
185
202
 
186
- # Attempt a graceful shutdown of the agent, running the worker
187
- # loop if it exists and is running.
188
- #
189
- # Options:
190
- # :force_send => (true/false) # force the agent to send data
191
- def shutdown(options={})
192
- return if not started?
203
+ # Attempt a graceful shutdown of the agent, flushing any remaining
204
+ # data.
205
+ def shutdown
206
+ return unless started?
193
207
  ::NewRelic::Agent.logger.info "Starting Agent shutdown"
194
208
 
195
209
  stop_event_loop
@@ -207,10 +221,7 @@ module NewRelic
207
221
  end
208
222
 
209
223
  def stop_event_loop
210
- if @event_loop
211
- @event_loop.run_once(true) if Agent.config[:force_send]
212
- @event_loop.stop
213
- end
224
+ @event_loop.stop if @event_loop
214
225
  end
215
226
 
216
227
  def trap_signals_for_litespeed
@@ -1056,7 +1067,7 @@ module NewRelic
1056
1067
  # them across the wire. This includes gathering SQL
1057
1068
  # explanations, stripping out stack traces, and normalizing
1058
1069
  # SQL. note that we explain only the sql statements whose
1059
- # segments' execution times exceed our threshold (to avoid
1070
+ # nodes' execution times exceed our threshold (to avoid
1060
1071
  # unnecessary overhead of running explains on fast queries.)
1061
1072
  def harvest_and_send_transaction_traces
1062
1073
  harvest_and_send_from_container(@transaction_sampler, :transaction_sample_data)
@@ -0,0 +1,242 @@
1
+ # encoding: utf-8
2
+ # This file is distributed under New Relic's license terms.
3
+ # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
4
+
5
+ # This class applies filtering rules as specified in the Agent Attributes
6
+ # cross-agent spec.
7
+ #
8
+ # Instances of it are constructed by deriving a set of rules from the agent
9
+ # configuration. Instances are immutable once they are constructed - if the
10
+ # config changes, a new instance should be constructed and swapped in to
11
+ # replace the existing one.
12
+ #
13
+ # The #apply method is the main external interface of this class. It takes an
14
+ # attribute name and a set of default destinations (represented as a bitfield)
15
+ # and returns a set of actual destinations after applying the filtering rules
16
+ # specified in the config.
17
+ #
18
+ # Each set of destinations is represented as a bitfield, where the bit positions
19
+ # specified in the DST_* constants are used to indicate whether an attribute
20
+ # should be sent to the corresponding destination.
21
+ #
22
+ # The choice of a bitfield here rather than an Array was made to avoid the need
23
+ # for any transient object allocations during the application of rules. Since
24
+ # rule application will happen once per attribute per transaction, this is a hot
25
+ # code path.
26
+ #
27
+ # The algorithm for applying filtering rules is as follows:
28
+ #
29
+ # 1. Start with a bitfield representing the set of default destinations passed
30
+ # in to #apply.
31
+ # 2. Mask this bitfield against the set of destinations that have attribute
32
+ # enabled at all.
33
+ # 3. Traverse the list of rules in order (more on the ordering later), applying
34
+ # each matching rule, but taking care to not let rules override the enabled
35
+ # status of each destination. Each matching rule may mutate the bitfield.
36
+ # 4. Return the resulting bitfield after all rules have been applied.
37
+ #
38
+ # Each rule consists of a name, a flag indicating whether it ends with a
39
+ # wildcard, a bitfield representing the set of destinations that it applies to,
40
+ # and a flag specifying whether it is an include or exclude rule.
41
+ #
42
+ # During construction, rules are sorted according to the following criteria:
43
+ #
44
+ # 1. First, the names are compared lexicographically. This has the impact of
45
+ # forcing shorter (more general) rules towards the top of the list and longer
46
+ # (more specific) rules towards the bottom. This is important, because the
47
+ # Agent Attributes spec stipulates that the most specific rule for a given
48
+ # destination should take precedence. Since rules are applied top-to-bottom,
49
+ # this sorting guarantees that the most specific rule will be applied last.
50
+ # 2. If the names are identical, we next examine the wildcard flag. Rules ending
51
+ # with a wildcard are considered more general (and thus 'less than') rules
52
+ # not ending with a wildcard.
53
+ # 3. If the names and wildcard flags are identical, we next examine whether the
54
+ # rules being compared are include or exclude rules. Exclude rules have
55
+ # precedence by the spec, so they are considered 'greater than' include
56
+ # rules.
57
+ #
58
+ # This approach to rule evaluation was taken from the PHP agent's
59
+ # implementation.
60
+ #
61
+
62
+ module NewRelic
63
+ module Agent
64
+ class AttributeFilter
65
+ DST_NONE = 0x0
66
+
67
+ DST_TRANSACTION_EVENTS = 1 << 0
68
+ DST_TRANSACTION_TRACER = 1 << 1
69
+ DST_ERROR_COLLECTOR = 1 << 2
70
+ DST_BROWSER_MONITORING = 1 << 3
71
+ DST_DEVELOPER_MODE = 1 << 4
72
+
73
+ DST_ALL = 0xF
74
+
75
+ attr_reader :rules
76
+
77
+ def initialize(config)
78
+ @enabled_destinations = DST_NONE
79
+
80
+ @enabled_destinations |= DST_TRANSACTION_TRACER if config[:'transaction_tracer.attributes.enabled']
81
+ @enabled_destinations |= DST_TRANSACTION_EVENTS if config[:'transaction_events.attributes.enabled']
82
+ @enabled_destinations |= DST_ERROR_COLLECTOR if config[:'error_collector.attributes.enabled']
83
+ @enabled_destinations |= DST_BROWSER_MONITORING if config[:'browser_monitoring.attributes.enabled']
84
+
85
+ @enabled_destinations = DST_NONE unless config[:'attributes.enabled']
86
+
87
+ @rules = []
88
+
89
+ build_rule(config[:'attributes.exclude'], DST_ALL, false)
90
+ build_rule(config[:'transaction_tracer.attributes.exclude'], DST_TRANSACTION_TRACER, false)
91
+ build_rule(config[:'transaction_events.attributes.exclude'], DST_TRANSACTION_EVENTS, false)
92
+ build_rule(config[:'error_collector.attributes.exclude'], DST_ERROR_COLLECTOR, false)
93
+ build_rule(config[:'browser_monitoring.attributes.exclude'], DST_BROWSER_MONITORING, false)
94
+
95
+ build_rule(['request.parameters.*'], include_destinations_for_capture_params(config[:capture_params]), true)
96
+ build_rule(['job.resque.args.*'], include_destinations_for_capture_params(config[:'resque.capture_params']), true)
97
+ build_rule(['job.sidekiq.args.*'], include_destinations_for_capture_params(config[:'sidekiq.capture_params']), true)
98
+
99
+ build_rule(config[:'attributes.include'], DST_ALL, true)
100
+ build_rule(config[:'transaction_tracer.attributes.include'], DST_TRANSACTION_TRACER, true)
101
+ build_rule(config[:'transaction_events.attributes.include'], DST_TRANSACTION_EVENTS, true)
102
+ build_rule(config[:'error_collector.attributes.include'], DST_ERROR_COLLECTOR, true)
103
+ build_rule(config[:'browser_monitoring.attributes.include'], DST_BROWSER_MONITORING, true)
104
+
105
+ @rules.sort!
106
+
107
+ # We're ok to cache high security for fast lookup because the attribute
108
+ # filter is re-generated on any significant config change.
109
+ @high_security = config[:high_security]
110
+
111
+ cache_prefix_blacklist
112
+ end
113
+
114
+ def include_destinations_for_capture_params(capturing)
115
+ if capturing
116
+ DST_TRANSACTION_TRACER | DST_ERROR_COLLECTOR
117
+ else
118
+ DST_NONE
119
+ end
120
+ end
121
+
122
+ def build_rule(attribute_names, destinations, is_include)
123
+ attribute_names.each do |attribute_name|
124
+ rule = AttributeFilterRule.new(attribute_name, destinations, is_include)
125
+ @rules << rule unless rule.empty?
126
+ end
127
+ end
128
+
129
+ def apply(attribute_name, default_destinations)
130
+ return DST_NONE if @enabled_destinations == DST_NONE
131
+
132
+ destinations = default_destinations
133
+ attribute_name = attribute_name.to_s
134
+
135
+ @rules.each do |rule|
136
+ if rule.match?(attribute_name)
137
+ if rule.is_include
138
+ destinations |= rule.destinations
139
+ else
140
+ destinations &= rule.destinations
141
+ end
142
+ end
143
+ end
144
+
145
+ destinations & @enabled_destinations
146
+ end
147
+
148
+ def allows?(allowed_destinations, requested_destination)
149
+ allowed_destinations & requested_destination == requested_destination
150
+ end
151
+
152
+ def high_security?
153
+ @high_security
154
+ end
155
+
156
+ # For attribute prefixes where we know the default destinations will
157
+ # always be DST_NONE, we can statically determine that any attribute
158
+ # starting with the prefix will not be allowed unless there's an include
159
+ # rule that might match attributes starting with it.
160
+ #
161
+ # This allows us to skip significant preprocessing work (hash/array
162
+ # flattening and type coercion) for HTTP request parameters and job
163
+ # arguments for Sidekiq and Resque in the common case, since none of
164
+ # these attributes are captured by default.
165
+ #
166
+ def cache_prefix_blacklist
167
+ @prefix_blacklist = {}
168
+ @prefix_blacklist[:'request.parameters'] = true unless might_allow_prefix_uncached?(:'request.parameters')
169
+ @prefix_blacklist[:'job.sidekiq.args'] = true unless might_allow_prefix_uncached?(:'job.sidekiq.args')
170
+ @prefix_blacklist[:'job.resque.args'] = true unless might_allow_prefix_uncached?(:'job.resque.args')
171
+ end
172
+
173
+ # Note that the given prefix *must* be a Symbol
174
+ def might_allow_prefix?(prefix)
175
+ !@prefix_blacklist.include?(prefix)
176
+ end
177
+
178
+ def might_allow_prefix_uncached?(prefix)
179
+ prefix = prefix.to_s
180
+ @rules.any? do |rule|
181
+ if rule.is_include
182
+ if rule.wildcard
183
+ if rule.attribute_name.size > prefix.size
184
+ rule.attribute_name.start_with?(prefix)
185
+ else
186
+ prefix.start_with?(rule.attribute_name)
187
+ end
188
+ else
189
+ rule.attribute_name.start_with?(prefix)
190
+ end
191
+ end
192
+ end
193
+ end
194
+ end
195
+
196
+ class AttributeFilterRule
197
+ attr_reader :attribute_name, :destinations, :is_include, :wildcard
198
+
199
+ def initialize(attribute_name, destinations, is_include)
200
+ @attribute_name = attribute_name.sub(/\*$/, "")
201
+ @wildcard = attribute_name.end_with?("*")
202
+ @is_include = is_include
203
+ @destinations = is_include ? destinations : ~destinations
204
+ end
205
+
206
+ # Rules are sorted from least specific to most specific
207
+ #
208
+ # All else being the same, wildcards are considered less specific
209
+ # All else being the same, include rules are less specific than excludes
210
+ def <=>(other)
211
+ name_cmp = @attribute_name <=> other.attribute_name
212
+ return name_cmp unless name_cmp == 0
213
+
214
+ if wildcard != other.wildcard
215
+ return wildcard ? -1 : 1
216
+ end
217
+
218
+ if is_include != other.is_include
219
+ return is_include ? -1 : 1
220
+ end
221
+
222
+ return 0
223
+ end
224
+
225
+ def match?(name)
226
+ if wildcard
227
+ name.start_with?(@attribute_name)
228
+ else
229
+ @attribute_name == name
230
+ end
231
+ end
232
+
233
+ def empty?
234
+ if is_include
235
+ @destinations == AttributeFilter::DST_NONE
236
+ else
237
+ @destinations == AttributeFilter::DST_ALL
238
+ end
239
+ end
240
+ end
241
+ end
242
+ end
@@ -0,0 +1,62 @@
1
+ # encoding: utf-8
2
+ # This file is distributed under New Relic's license terms.
3
+ # See https://github.com/newrelic/rpm/blob/master/LICENSE for complete details.
4
+
5
+ module NewRelic
6
+ module Agent
7
+ module AttributeProcessing
8
+ module_function
9
+
10
+ EMPTY_HASH_STRING_LITERAL = "{}".freeze
11
+ EMPTY_ARRAY_STRING_LITERAL = "[]".freeze
12
+
13
+ def flatten_and_coerce(object, prefix = nil, result = {}, &blk)
14
+ if object.is_a? Hash
15
+ flatten_and_coerce_hash(object, prefix, result, &blk)
16
+ elsif object.is_a? Array
17
+ flatten_and_coerce_array(object, prefix, result, &blk)
18
+ elsif prefix
19
+ val = Coerce.scalar(object)
20
+ if blk
21
+ blk.call(prefix, val)
22
+ else
23
+ result[prefix] = val
24
+ end
25
+ else
26
+ NewRelic::Agent.logger.warn "Unexpected object: #{object.inspect} with nil prefix passed to NewRelic::Agent::AttributeProcessing.flatten_and_coerce"
27
+ end
28
+ result
29
+ end
30
+
31
+ def flatten_and_coerce_hash(hash, prefix, result, &blk)
32
+ if hash.empty?
33
+ if blk
34
+ blk.call(prefix, EMPTY_HASH_STRING_LITERAL)
35
+ else
36
+ result[prefix] = EMPTY_HASH_STRING_LITERAL
37
+ end
38
+ else
39
+ hash.each do |key, val|
40
+ next_prefix = prefix ? "#{prefix}.#{key}" : key.to_s
41
+ flatten_and_coerce(val, next_prefix, result, &blk)
42
+ end
43
+ end
44
+ end
45
+
46
+ def flatten_and_coerce_array(array, prefix, result, &blk)
47
+ if array.empty?
48
+ if blk
49
+ blk.call(prefix, EMPTY_ARRAY_STRING_LITERAL)
50
+ else
51
+ result[prefix] = EMPTY_ARRAY_STRING_LITERAL
52
+ end
53
+ else
54
+ array.each_with_index do |val, idx|
55
+ next_prefix = prefix ? "#{prefix}.#{idx}" : idx.to_s
56
+ flatten_and_coerce(val, next_prefix, result, &blk)
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -43,8 +43,11 @@ module NewRelic
43
43
 
44
44
  def session_id_for_transaction_name(name)
45
45
  @sessions_lock.synchronize do
46
- @sessions.keys.find { |id| @sessions[id].key_transaction_name == name }
46
+ @sessions.each do |id, session|
47
+ return id if session.key_transaction_name == name
48
+ end
47
49
  end
50
+ nil
48
51
  end
49
52
 
50
53
  NO_PROFILES = [].freeze
@@ -102,7 +102,7 @@ module NewRelic
102
102
  def self.agent_enabled
103
103
  Proc.new {
104
104
  NewRelic::Agent.config[:enabled] &&
105
- (NewRelic::Agent.config[:developer_mode] || NewRelic::Agent.config[:monitor_mode] || NewRelic::Agent.config[:monitor_daemons]) &&
105
+ (NewRelic::Agent.config[:developer_mode] || NewRelic::Agent.config[:monitor_mode]) &&
106
106
  NewRelic::Agent::Autostart.agent_should_start?
107
107
  }
108
108
  end
@@ -237,12 +237,14 @@ module NewRelic
237
237
  :default => '',
238
238
  :public => true,
239
239
  :type => String,
240
+ :allowed_from_server => false,
240
241
  :description => 'Your New Relic <a href="/docs/accounts-partnerships/accounts/account-setup/license-key">license key</a>.'
241
242
  },
242
243
  :agent_enabled => {
243
244
  :default => DefaultSource.agent_enabled,
244
245
  :public => true,
245
246
  :type => Boolean,
247
+ :allowed_from_server => false,
246
248
  :description => 'Enable or disable the agent.'
247
249
  },
248
250
  :enabled => {
@@ -250,42 +252,49 @@ module NewRelic
250
252
  :public => false,
251
253
  :type => Boolean,
252
254
  :aliases => [:enable],
255
+ :allowed_from_server => false,
253
256
  :description => 'Enable or disable the agent.'
254
257
  },
255
258
  :app_name => {
256
259
  :default => DefaultSource.app_name,
257
260
  :public => true,
258
261
  :type => String,
262
+ :allowed_from_server => false,
259
263
  :description => 'Semicolon-delimited list of <a href="/docs/apm/new-relic-apm/installation-and-configuration/naming-your-application">application names</a> to which the agent will report metrics (e.g. \'MyApplication\' or \'MyAppStaging;Instance1\'). For more information, see <a href="/docs/apm/new-relic-apm/installation-and-configuration/naming-your-application">Naming your application</a>.'
260
264
  },
261
265
  :monitor_mode => {
262
266
  :default => value_of(:enabled),
263
267
  :public => true,
264
268
  :type => Boolean,
269
+ :allowed_from_server => false,
265
270
  :description => 'Enable or disable the transmission of data to the New Relic <a href="/docs/apm/new-relic-apm/getting-started/glossary#collector">collector</a>).'
266
271
  },
267
272
  :developer_mode => {
268
273
  :default => value_of(:developer),
269
274
  :public => true,
270
275
  :type => Boolean,
276
+ :allowed_from_server => false,
271
277
  :description => 'Enable or disable developer mode, a local analytics package built into the agent for rack applications. Access developer mode analytics by visiting <b>/newrelic</b> in your application.'
272
278
  },
273
279
  :developer => {
274
280
  :default => false,
275
281
  :public => false,
276
282
  :type => Boolean,
283
+ :allowed_from_server => false,
277
284
  :description => 'Alternative method of enabling developer_mode.'
278
285
  },
279
286
  :log_level => {
280
287
  :default => 'info',
281
288
  :public => true,
282
289
  :type => String,
290
+ :allowed_from_server => false,
283
291
  :description => 'Log level for agent logging: error, warn, info or debug.'
284
292
  },
285
293
  :high_security => {
286
294
  :default => false,
287
295
  :public => true,
288
296
  :type => Boolean,
297
+ :allowed_from_server => false,
289
298
  :description => 'Enable or disable <a href="/docs/accounts-partnerships/accounts/security/high-security">high security mode</a>, a suite of security features designed to protect data in an enterprise setting.'
290
299
  },
291
300
  :ssl => {
@@ -293,6 +302,7 @@ module NewRelic
293
302
  :allow_nil => true,
294
303
  :public => true,
295
304
  :type => Boolean,
305
+ :allowed_from_server => false,
296
306
  :description => 'Enable or disable SSL for transmissions to the New Relic <a href="/docs/apm/new-relic-apm/getting-started/glossary#collector">collector</a>). Defaults to true in versions 3.5.6 and higher.'
297
307
  },
298
308
  :proxy_host => {
@@ -300,6 +310,7 @@ module NewRelic
300
310
  :allow_nil => true,
301
311
  :public => true,
302
312
  :type => String,
313
+ :allowed_from_server => false,
303
314
  :description => 'Defines a host for communicating with New Relic via a proxy server.'
304
315
  },
305
316
  :proxy_port => {
@@ -307,6 +318,7 @@ module NewRelic
307
318
  :allow_nil => true,
308
319
  :public => true,
309
320
  :type => Fixnum,
321
+ :allowed_from_server => false,
310
322
  :description => 'Defines a port for communicating with New Relic via a proxy server.'
311
323
  },
312
324
  :proxy_user => {
@@ -314,7 +326,8 @@ module NewRelic
314
326
  :allow_nil => true,
315
327
  :public => true,
316
328
  :type => String,
317
- :local_only => true,
329
+ :allowed_from_server => false,
330
+ :exclude_from_reported_settings => true,
318
331
  :description => 'Defines a user for communicating with New Relic via a proxy server.'
319
332
  },
320
333
  :proxy_pass => {
@@ -322,158 +335,170 @@ module NewRelic
322
335
  :allow_nil => true,
323
336
  :public => true,
324
337
  :type => String,
325
- :local_only => true,
338
+ :allowed_from_server => false,
339
+ :exclude_from_reported_settings => true,
326
340
  :description => 'Defines a password for communicating with New Relic via a proxy server.'
327
341
  },
328
342
  :capture_params => {
329
343
  :default => false,
330
344
  :public => true,
331
345
  :type => Boolean,
346
+ :allowed_from_server => false,
332
347
  :description => 'Enable or disable the capture of HTTP request parameters to be attached to transaction traces and traced errors.'
333
348
  },
334
349
  :config_path => {
335
350
  :default => DefaultSource.config_path,
336
351
  :public => true,
337
352
  :type => String,
353
+ :allowed_from_server => false,
338
354
  :description => 'Path to <b>newrelic.yml</b>. When omitted the agent will check (in order) <b>config/newrelic.yml</b>, <b>newrelic.yml</b>, <b>$HOME/.newrelic/newrelic.yml</b> and <b>$HOME/newrelic.yml</b>.'
339
355
  },
340
356
  :config_search_paths => {
341
357
  :default => DefaultSource.config_search_paths,
342
358
  :public => false,
343
359
  :type => Array,
360
+ :allowed_from_server => false,
344
361
  :description => "An array of candidate locations for the agent's configuration file."
345
362
  },
346
363
  :dispatcher => {
347
364
  :default => DefaultSource.dispatcher,
348
365
  :public => false,
349
366
  :type => Symbol,
367
+ :allowed_from_server => false,
350
368
  :description => 'Autodetected application component that reports metrics to New Relic.'
351
369
  },
352
370
  :framework => {
353
371
  :default => DefaultSource.framework,
354
372
  :public => false,
355
373
  :type => Symbol,
374
+ :allowed_from_server => false,
356
375
  :description => 'Autodetected application framework used to enable framework-specific functionality.'
357
376
  },
358
377
  :'autostart.blacklisted_constants' => {
359
378
  :default => 'Rails::Console',
360
379
  :public => true,
361
380
  :type => String,
381
+ :allowed_from_server => false,
362
382
  :description => 'Defines a comma-delimited list of constants. When these constants are present, the agent will not start automatically (e.g. \'Rails::Console, UninstrumentedBackgroundJob\').'
363
383
  },
364
384
  :'autostart.blacklisted_executables' => {
365
385
  :default => 'irb,rspec',
366
386
  :public => true,
367
387
  :type => String,
388
+ :allowed_from_server => false,
368
389
  :description => 'Defines a comma-delimited list of executables that should not be instrumented by the agent (e.g. \'rake,my_ruby_script.rb\').'
369
390
  },
370
391
  :'autostart.blacklisted_rake_tasks' => {
371
392
  :default => AUTOSTART_BLACKLISTED_RAKE_TASKS,
372
393
  :public => true,
373
394
  :type => String,
395
+ :allowed_from_server => false,
374
396
  :description => 'Defines a comma-delimited list of rake tasks that should not be instrumented by the agent (e.g. \'assets:precompile,db:migrate\').'
375
397
  },
376
398
  :'profiling.available' => {
377
399
  :default => DefaultSource.profiling_available,
378
400
  :public => false,
379
401
  :type => Boolean,
402
+ :allowed_from_server => false,
380
403
  :description => 'Determines if ruby-prof is available for developer mode profiling.'
381
404
  },
382
405
  :apdex_t => {
383
406
  :default => 0.5,
384
407
  :public => true,
385
408
  :type => Float,
409
+ :allowed_from_server => true,
386
410
  :deprecated => true,
387
411
  :description => 'In versions 3.5.0 and higher, <a href="/docs/apm/new-relic-apm/apdex/changing-your-apdex-settings">set your Apdex T via the New Relic UI</a>. In addition to determining your <a href="/docs/apm/new-relic-apm/apdex/apdex-measuring-user-satisfaction">Apdex score</a>, Apdex T is the threshold at which New Relic will begin alerting. By default the agent will send alerts when the Apdex score drops below 0.5, or when more than half of users are experiencing degraded application performance.'
388
412
  },
389
- :monitor_daemons => {
390
- :default => false,
391
- :public => false,
392
- :type => Boolean,
393
- :description => 'Enables or disables the agent for background processes. No longer necessary as the agent now automatically instruments background processes.'
394
- },
395
413
  :'strip_exception_messages.enabled' => {
396
414
  :default => value_of(:high_security),
397
415
  :public => true,
398
416
  :type => Boolean,
417
+ :allowed_from_server => false,
399
418
  :description => 'Defines whether the agent should strip messages from all exceptions that are not specified in the whitelist. Enabled automatically in <a href="/docs/accounts-partnerships/accounts/security/high-security">high security mode</a>.'
400
419
  },
401
420
  :'strip_exception_messages.whitelist' => {
402
421
  :default => '',
403
422
  :public => true,
404
423
  :type => String,
424
+ :allowed_from_server => false,
405
425
  :description => 'Defines a comma-delimited list of exceptions from which the agent will not strip messages when <a href="#strip_exception_messages.enabled">strip_exception_messages</a> is enabled (such as \'ImportantException, PreserveMessageException\').'
406
426
  },
407
427
  :host => {
408
428
  :default => 'collector.newrelic.com',
409
429
  :public => false,
410
430
  :type => String,
431
+ :allowed_from_server => false,
411
432
  :description => "URI for the New Relic data collection service."
412
433
  },
413
434
  :api_host => {
414
435
  :default => 'rpm.newrelic.com',
415
436
  :public => false,
416
437
  :type => String,
438
+ :allowed_from_server => false,
417
439
  :description => 'API host for New Relic.'
418
440
  },
419
441
  :port => {
420
442
  :default => DefaultSource.port,
421
443
  :public => false,
422
444
  :type => Fixnum,
445
+ :allowed_from_server => false,
423
446
  :description => 'Port for the New Relic data collection service.'
424
447
  },
425
448
  :api_port => {
426
449
  :default => value_of(:port),
427
450
  :public => false,
428
451
  :type => Fixnum,
452
+ :allowed_from_server => false,
429
453
  :description => 'Port for the New Relic API host.'
430
454
  },
431
455
  :sync_startup => {
432
456
  :default => false,
433
457
  :public => true,
434
458
  :type => Boolean,
459
+ :allowed_from_server => false,
435
460
  :description => 'Enable or disable synchronous connection to the New Relic data collection service during application startup.'
436
461
  },
437
462
  :send_data_on_exit => {
438
463
  :default => true,
439
464
  :public => true,
440
465
  :type => Boolean,
466
+ :allowed_from_server => false,
441
467
  :description => 'Enable or disable the exit handler that sends data to the New Relic <a href="/docs/apm/new-relic-apm/getting-started/glossary#collector">collector</a>) before shutting down.'
442
468
  },
443
469
  :post_size_limit => {
444
470
  :default => 2 * 1024 * 1024, # 2MB
445
471
  :public => false,
446
472
  :type => Fixnum,
473
+ :allowed_from_server => true,
447
474
  :description => 'Maximum number of bytes to send to the New Relic data collection service.'
448
475
  },
449
476
  :timeout => {
450
477
  :default => 2 * 60, # 2 minutes
451
478
  :public => true,
452
479
  :type => Fixnum,
480
+ :allowed_from_server => false,
453
481
  :description => 'Maximum number of seconds to attempt to contact the New Relic <a href="/docs/apm/new-relic-apm/getting-started/glossary#collector">collector</a>).'
454
482
  },
455
- :force_send => {
456
- :default => false,
457
- :public => false,
458
- :type => Boolean,
459
- :description => 'Enable or disable the forced sending of data to the New Relic data collection service when shutting down.'
460
- },
461
483
  :send_environment_info => {
462
484
  :default => true,
463
485
  :public => false,
464
486
  :type => Boolean,
487
+ :allowed_from_server => false,
465
488
  :description => 'Enable or disable transmission of application environment information to the New Relic data collection service.'
466
489
  },
467
490
  :'resque.use_harvest_lock' => {
468
491
  :default => false,
469
492
  :public => false,
470
493
  :type => Boolean,
494
+ :allowed_from_server => false,
471
495
  :description => 'Enable or disable synchronizing Resque job forking with New Relic\'s harvest thread. The default is <code>false</code>. This helps prevent Resque jobs from deadlocking, but prevents New Relic from starting new jobs during harvest.'
472
496
  },
473
497
  :data_report_period => {
474
498
  :default => 60,
475
499
  :public => false,
476
500
  :type => Fixnum,
501
+ :allowed_from_server => true,
477
502
  :description => 'Number of seconds betwixt connections to the New Relic data collection service. Note that transaction events have a separate report period, specified by data_report_periods.analytic_event_data.'
478
503
  },
479
504
  :'data_report_periods.analytic_event_data' => {
@@ -481,6 +506,7 @@ module NewRelic
481
506
  :public => false,
482
507
  :type => Fixnum,
483
508
  :dynamic_name => true,
509
+ :allowed_from_server => true,
484
510
  :description => 'Number of seconds between connections to the New Relic data collection service for sending transaction event data.'
485
511
  },
486
512
  :keep_retrying => {
@@ -488,48 +514,56 @@ module NewRelic
488
514
  :public => false,
489
515
  :type => Boolean,
490
516
  :deprecated => true,
517
+ :allowed_from_server => false,
491
518
  :description => 'Enable or disable retrying failed connections to the New Relic data collection service.'
492
519
  },
493
520
  :force_reconnect => {
494
521
  :default => false,
495
522
  :public => false,
496
523
  :type => Boolean,
524
+ :allowed_from_server => false,
497
525
  :description => 'Force a new connection to the server before running the worker loop. Creates a separate agent run and is recorded as a separate instance by the New Relic data collection service.'
498
526
  },
499
527
  :report_instance_busy => {
500
528
  :default => true,
501
529
  :public => false,
502
530
  :type => Boolean,
531
+ :allowed_from_server => false,
503
532
  :description => 'Enable or disable transmission of metrics recording the percentage of time application instances spend servicing requests (duty cycle metrics).'
504
533
  },
505
534
  :log_file_name => {
506
535
  :default => 'newrelic_agent.log',
507
536
  :public => true,
508
537
  :type => String,
538
+ :allowed_from_server => false,
509
539
  :description => 'Defines a name for the log file.'
510
540
  },
511
541
  :log_file_path => {
512
542
  :default => 'log/',
513
543
  :public => true,
514
544
  :type => String,
545
+ :allowed_from_server => false,
515
546
  :description => 'Defines a path to the agent log file, excluding the filename.'
516
547
  },
517
548
  :'audit_log.enabled' => {
518
549
  :default => false,
519
550
  :public => true,
520
551
  :type => Boolean,
552
+ :allowed_from_server => false,
521
553
  :description => 'Enable or disable the audit log, a log of communications with the New Relic <a href="/docs/apm/new-relic-apm/getting-started/glossary#collector">collector</a>).'
522
554
  },
523
555
  :'audit_log.path' => {
524
556
  :default => DefaultSource.audit_log_path,
525
557
  :public => true,
526
558
  :type => String,
559
+ :allowed_from_server => false,
527
560
  :description => 'Specifies a path to the audit log file (including the filename).'
528
561
  },
529
562
  :'audit_log.endpoints' => {
530
563
  :default => [".*"],
531
564
  :public => true,
532
565
  :type => Array,
566
+ :allowed_from_server => false,
533
567
  :transform => DefaultSource.method(:convert_to_regexp_list),
534
568
  :description => 'List of allowed endpoints to include in audit log'
535
569
  },
@@ -537,72 +571,84 @@ module NewRelic
537
571
  :default => false,
538
572
  :public => true,
539
573
  :type => Boolean,
574
+ :allowed_from_server => false,
540
575
  :description => 'Enable or disable the collection of sampler metrics. Sampler metrics are metrics that are not event-based (such as CPU time or memory usage).'
541
576
  },
542
577
  :disable_resque => {
543
578
  :default => false,
544
579
  :public => true,
545
580
  :type => Boolean,
581
+ :allowed_from_server => false,
546
582
  :description => 'Enable or disable <a href="/docs/agents/ruby-agent/background-jobs/resque-instrumentation">Resque instrumentation</a>.'
547
583
  },
548
584
  :disable_sidekiq => {
549
585
  :default => false,
550
586
  :public => true,
551
587
  :type => Boolean,
588
+ :allowed_from_server => false,
552
589
  :description => 'Enable or disable <a href="/docs/agents/ruby-agent/background-jobs/sidekiq-instrumentation">Sidekiq instrumentation</a>.'
553
590
  },
554
591
  :disable_dj => {
555
592
  :default => false,
556
593
  :public => true,
557
594
  :type => Boolean,
595
+ :allowed_from_server => false,
558
596
  :description => 'Enable or disable <a href="/docs/agents/ruby-agent/background-jobs/delayedjob">Delayed::Job instrumentation</a>.'
559
597
  },
560
598
  :disable_sinatra => {
561
599
  :default => false,
562
600
  :public => true,
563
601
  :type => Boolean,
602
+ :allowed_from_server => false,
564
603
  :description => 'Enable or disable <a href="/docs/agents/ruby-agent/frameworks/sinatra-support">Sinatra instrumentation</a>.'
565
604
  },
566
605
  :disable_sinatra_auto_middleware => {
567
606
  :default => false,
568
607
  :public => true,
569
608
  :type => Boolean,
609
+ :allowed_from_server => false,
570
610
  :description => 'Enable or disable agent middleware for Sinatra. This middleware is responsible for Sinatra advanced feature support; for example, cross application tracing, page load timing (sometimes referred to as real user monitoring or RUM), and error collection.'
571
611
  },
572
612
  :disable_view_instrumentation => {
573
613
  :default => false,
574
614
  :public => true,
575
615
  :type => Boolean,
616
+ :allowed_from_server => false,
576
617
  :description => 'Enable or disable view instrumentation.'
577
618
  },
578
619
  :disable_backtrace_cleanup => {
579
620
  :default => false,
580
621
  :public => true,
581
622
  :type => Boolean,
623
+ :allowed_from_server => false,
582
624
  :description => 'Defines whether the agent will remove <code>newrelic_rpm</code> from backtraces.'
583
625
  },
584
626
  :disable_harvest_thread => {
585
627
  :default => false,
586
628
  :public => false,
587
629
  :type => Boolean,
630
+ :allowed_from_server => false,
588
631
  :description => 'Enable or disable the harvest thread.'
589
632
  },
590
633
  :skip_ar_instrumentation => {
591
634
  :default => false,
592
635
  :public => false,
593
636
  :type => Boolean,
637
+ :allowed_from_server => false,
594
638
  :description => 'Enable or disable active record instrumentation.'
595
639
  },
596
640
  :disable_activerecord_instrumentation => {
597
641
  :default => value_of(:skip_ar_instrumentation),
598
642
  :public => true,
599
643
  :type => Boolean,
644
+ :allowed_from_server => false,
600
645
  :description => 'Enable or disable active record instrumentation.'
601
646
  },
602
647
  :disable_data_mapper => {
603
648
  :default => false,
604
649
  :public => true,
605
650
  :type => Boolean,
651
+ :allowed_from_server => false,
606
652
  :description => 'Enable or disable DataMapper instrumentation.'
607
653
  },
608
654
  :disable_activejob => {
@@ -610,120 +656,145 @@ module NewRelic
610
656
  :public => true,
611
657
  :type => Boolean,
612
658
  :dynamic_name => true,
659
+ :allowed_from_server => false,
613
660
  :description => 'Enable or disable ActiveJob instrumentation.'
614
661
  },
615
662
  :disable_memcached => {
616
663
  :default => value_of(:disable_memcache_instrumentation),
617
664
  :public => true,
618
665
  :type => Boolean,
666
+ :allowed_from_server => false,
619
667
  :description => 'Enable or disable instrumentation for the memcached gem.'
620
668
  },
621
669
  :disable_memcache_client => {
622
670
  :default => value_of(:disable_memcache_instrumentation),
623
671
  :public => true,
624
672
  :type => Boolean,
673
+ :allowed_from_server => false,
625
674
  :description => 'Enable or disable instrumenation for the memcache-client gem.'
626
675
  },
627
676
  :disable_dalli => {
628
677
  :default => value_of(:disable_memcache_instrumentation),
629
678
  :public => true,
630
679
  :type => Boolean,
680
+ :allowed_from_server => false,
631
681
  :description => 'Enable or disable instrumentation for the dalli gem.'
632
682
  },
633
683
  :disable_dalli_cas_client => {
634
684
  :default => value_of(:disable_memcache_instrumentation),
635
685
  :public => true,
636
686
  :type => Boolean,
687
+ :allowed_from_server => false,
637
688
  :description => "Enable or disable instrumentation for the dalli gem's additional CAS client support."
638
689
  },
639
690
  :disable_memcache_instrumentation => {
640
691
  :default => false,
641
692
  :public => true,
642
693
  :type => Boolean,
694
+ :allowed_from_server => false,
643
695
  :description => 'Enable or disable memcache instrumentation.'
644
696
  },
645
697
  :disable_gc_profiler => {
646
698
  :default => false,
647
699
  :public => true,
648
700
  :type => Boolean,
701
+ :allowed_from_server => false,
649
702
  :description => 'Enable or disable the use of GC::Profiler to measure time spent in garbage collection'
650
703
  },
651
704
  :'sidekiq.capture_params' => {
652
705
  :default => false,
653
706
  :public => true,
654
707
  :type => Boolean,
708
+ :allowed_from_server => false,
709
+ :dynamic_name => true,
710
+ :deprecated => true,
655
711
  :description => 'Enable or disable the capture of job arguments for transaction traces and traced errors in Sidekiq.'
656
712
  },
657
713
  :'resque.capture_params' => {
658
714
  :default => false,
659
715
  :public => true,
660
716
  :type => Boolean,
717
+ :allowed_from_server => false,
718
+ :dynamic_name => true,
719
+ :deprecated => true,
661
720
  :description => 'Enable or disable the capture of job arguments for transaction traces and traced errors in Resque.'
662
721
  },
663
722
  :capture_memcache_keys => {
664
723
  :default => false,
665
724
  :public => true,
666
725
  :type => Boolean,
726
+ :allowed_from_server => true,
667
727
  :description => 'Enable or disable the capture of memcache keys from transaction traces.'
668
728
  },
669
729
  :'transaction_tracer.enabled' => {
670
730
  :default => true,
671
731
  :public => true,
672
732
  :type => Boolean,
733
+ :allowed_from_server => true,
673
734
  :description => 'Enable or disable <a href="/docs/apm/traces/transaction-traces/transaction-traces">transaction traces</a>.'
674
735
  },
675
736
  :'transaction_tracer.transaction_threshold' => {
676
737
  :default => DefaultSource.transaction_tracer_transaction_threshold,
677
738
  :public => true,
678
739
  :type => Float,
740
+ :allowed_from_server => true,
679
741
  :description => 'The agent will collect traces for transactions that exceed this time threshold (in seconds). Specify a float value or <code><a href="/docs/apm/new-relic-apm/getting-started/glossary#apdex_f">apdex_f</a></code>.'
680
742
  },
681
743
  :'transaction_tracer.record_sql' => {
682
744
  :default => 'obfuscated',
683
745
  :public => true,
684
746
  :type => String,
685
- :description => 'Obfuscation level for SQL queries reported in transaction trace segments. Valid options are <code>obfuscated</code>, <code>raw</code>, <code>none</code>.'
747
+ :allowed_from_server => true,
748
+ :description => 'Obfuscation level for SQL queries reported in transaction trace nodes. Valid options are <code>obfuscated</code>, <code>raw</code>, <code>none</code>.'
686
749
  },
687
750
  :'transaction_tracer.capture_attributes' => {
688
751
  :default => true,
689
752
  :public => true,
690
753
  :type => Boolean,
691
- :description => 'Enable or disable collection of <a href="/docs/apm/other-features/attributes/collecting-custom-attributes">custom attributes</a> on transaction traces.'
754
+ :deprecated => true,
755
+ :allowed_from_server => false,
756
+ :description => 'Use transaction_tracer.attributes.enabled instead.'
692
757
  },
693
758
  :'transaction_tracer.explain_threshold' => {
694
759
  :default => 0.5,
695
760
  :public => true,
696
761
  :type => Float,
762
+ :allowed_from_server => true,
697
763
  :description => 'Threshold (in seconds) above which the agent will collect explain plans. Relevant only when <code><a href="#transaction_tracer.explain_enabled">explain_enabled</a></code> is true.'
698
764
  },
699
765
  :'transaction_tracer.explain_enabled' => {
700
766
  :default => true,
701
767
  :public => true,
702
768
  :type => Boolean,
769
+ :allowed_from_server => true,
703
770
  :description => 'Enable or disable the collection of explain plans in transaction traces. This setting will also apply to explain plans in Slow SQL traces if slow_sql.explain_enabled is not set separately.'
704
771
  },
705
772
  :'transaction_tracer.stack_trace_threshold' => {
706
773
  :default => 0.5,
707
774
  :public => true,
708
775
  :type => Float,
709
- :description => 'Stack traces will be included in transaction trace segments when their duration exceeds this threshold.'
776
+ :allowed_from_server => true,
777
+ :description => 'Stack traces will be included in transaction trace nodes when their duration exceeds this threshold.'
710
778
  },
711
779
  :'transaction_tracer.limit_segments' => {
712
780
  :default => 4000,
713
781
  :public => true,
714
782
  :type => Fixnum,
715
- :description => 'Maximum number of transaction trace segments to record in a single transaction trace.'
783
+ :allowed_from_server => true,
784
+ :description => 'Maximum number of transaction trace nodes to record in a single transaction trace.'
716
785
  },
717
786
  :disable_sequel_instrumentation => {
718
787
  :default => false,
719
788
  :public => true,
720
789
  :type => Boolean,
790
+ :allowed_from_server => false,
721
791
  :description => 'Enable or disable <a href="/docs/agents/ruby-agent/frameworks/sequel-instrumentation">Sequel instrumentation</a>.'
722
792
  },
723
793
  :disable_database_instrumentation => {
724
794
  :default => false,
725
795
  :public => true,
726
796
  :type => Boolean,
797
+ :allowed_from_server => false,
727
798
  :deprecated => true,
728
799
  :description => 'Enable or disable Sequel instrumentation. This option is deprecated; instead, use <a href="/docs/agents/ruby-agent/installation-and-configuration/ruby-agent-configuration#disable_sequel_instrumentation"><code>disable_sequel_instrumentation</code></a>'
729
800
  },
@@ -731,6 +802,7 @@ module NewRelic
731
802
  :default => false,
732
803
  :public => true,
733
804
  :type => Boolean,
805
+ :allowed_from_server => false,
734
806
  :dynamic_name => true,
735
807
  :description => 'Defines whether the agent will install <a href="/docs/agents/ruby-agent/frameworks/mongo-instrumentation">instrumentation for the Mongo gem</a>.'
736
808
  },
@@ -738,120 +810,142 @@ module NewRelic
738
810
  :default => value_of(:'transaction_tracer.enabled'),
739
811
  :public => true,
740
812
  :type => Boolean,
813
+ :allowed_from_server => true,
741
814
  :description => 'Enable or disable collection of slow SQL queries.'
742
815
  },
743
816
  :'slow_sql.explain_threshold' => {
744
817
  :default => value_of(:'transaction_tracer.explain_threshold'),
745
818
  :public => true,
746
819
  :type => Float,
820
+ :allowed_from_server => true,
747
821
  :description => 'Defines a duration threshold, over which the agent will collect explain plans in slow SQL queries.'
748
822
  },
749
823
  :'slow_sql.explain_enabled' => {
750
824
  :default => value_of(:'transaction_tracer.explain_enabled'),
751
825
  :public => true,
752
826
  :type => Boolean,
827
+ :allowed_from_server => true,
753
828
  :description => 'Enable or disable the collection of explain plans in slow SQL queries. If this setting is omitted, the transaction_tracer.explain_enabled setting will be applied as the default setting for explain plans in Slow SQL as well.'
754
829
  },
755
830
  :'slow_sql.record_sql' => {
756
831
  :default => value_of(:'transaction_tracer.record_sql'),
757
832
  :public => true,
758
833
  :type => String,
834
+ :allowed_from_server => true,
759
835
  :description => 'Defines an obfuscation level for slow SQL queries. Valid options are <code>obfuscated</code>, <code>raw</code>, <code>none</code>).'
760
836
  },
761
837
  :'mongo.capture_queries' => {
762
838
  :default => true,
763
839
  :public => true,
764
840
  :type => Boolean,
841
+ :allowed_from_server => true,
765
842
  :description => 'Enable or disable capturing Mongo queries in transaction traces.'
766
843
  },
767
844
  :'mongo.obfuscate_queries' => {
768
845
  :default => true,
769
846
  :public => true,
770
847
  :type => Boolean,
848
+ :allowed_from_server => true,
771
849
  :description => 'Enable or disable obfuscation of Mongo queries in transaction traces.'
772
850
  },
773
851
  :'error_collector.enabled' => {
774
852
  :default => true,
775
853
  :public => true,
776
854
  :type => Boolean,
855
+ :allowed_from_server => true,
777
856
  :description => 'Enable or disable recording of traced errors and error count metrics.'
778
857
  },
779
858
  :'error_collector.capture_attributes' => {
780
859
  :default => true,
781
860
  :public => true,
782
861
  :type => Boolean,
783
- :description => 'Enable or disable collection of custom attributes on errors.'
862
+ :deprecated => true,
863
+ :allowed_from_server => false,
864
+ :description => 'Use error_collector.attributes.enabled instead.'
784
865
  },
785
866
  :'error_collector.ignore_errors' => {
786
867
  :default => 'ActionController::RoutingError,Sinatra::NotFound',
787
868
  :public => true,
788
869
  :type => String,
870
+ :allowed_from_server => true,
789
871
  :description => 'Specifies a comma-delimited list of error classes that the agent should ignore.'
790
872
  },
791
873
  :'rum.enabled' => {
792
874
  :default => true,
793
875
  :public => false,
794
876
  :type => Boolean,
877
+ :allowed_from_server => true,
795
878
  :description => 'Enable or disable page load timing (sometimes referred to as real user monitoring or RUM).'
796
879
  },
797
880
  :browser_key => {
798
881
  :default => '',
799
882
  :public => false,
800
883
  :type => String,
884
+ :allowed_from_server => true,
801
885
  :description => 'Real user monitoring license key for the browser timing header.'
802
886
  },
803
887
  :beacon => {
804
888
  :default => '',
805
889
  :public => false,
806
890
  :type => String,
891
+ :allowed_from_server => true,
807
892
  :description => 'Beacon for real user monitoring.'
808
893
  },
809
894
  :error_beacon => {
810
895
  :default => '',
811
896
  :public => false,
812
897
  :type => String,
898
+ :allowed_from_server => true,
813
899
  :description => 'Error beacon for real user monitoring.'
814
900
  },
815
901
  :application_id => {
816
902
  :default => '',
817
903
  :public => false,
818
904
  :type => String,
905
+ :allowed_from_server => true,
819
906
  :description => 'Application ID for real user monitoring.'
820
907
  },
821
908
  :js_agent_file => {
822
909
  :default => '',
823
910
  :public => false,
824
911
  :type => String,
912
+ :allowed_from_server => true,
825
913
  :description => 'Javascript agent file for real user monitoring.'
826
914
  },
827
915
  :'browser_monitoring.auto_instrument' => {
828
916
  :default => value_of(:'rum.enabled'),
829
917
  :public => true,
830
918
  :type => Boolean,
919
+ :allowed_from_server => true,
831
920
  :description => 'Enable or disable automatic insertion of the JavaScript header into outgoing responses for page load timing (sometimes referred to as real user monitoring or RUM).'
832
921
  },
833
922
  :'browser_monitoring.capture_attributes' => {
834
923
  :default => false,
835
924
  :public => true,
836
925
  :type => Boolean,
837
- :description => 'Forward custom attributes to Browser for <a href="/docs/insights/new-relic-insights/decorating-events/insights-custom-attributes#forwarding-attributes">collection by New Relic Insights</a>.'
926
+ :deprecated => true,
927
+ :allowed_from_server => false,
928
+ :description => 'Use browser_monitoring.attributes.enabled instead.'
838
929
  },
839
930
  :'browser_monitoring.loader' => {
840
931
  :default => DefaultSource.browser_monitoring_loader,
841
932
  :public => private,
842
933
  :type => String,
934
+ :allowed_from_server => true,
843
935
  :description => 'Type of JavaScript agent loader to use for browser monitoring instrumentation.'
844
936
  },
845
937
  :'browser_monitoring.loader_version' => {
846
938
  :default => '',
847
939
  :public => private,
848
940
  :type => String,
941
+ :allowed_from_server => true,
849
942
  :description => 'Version of JavaScript agent loader (returned from the New Relic <a href="/docs/apm/new-relic-apm/getting-started/glossary#collector">collector</a>).)'
850
943
  },
851
944
  :'browser_monitoring.debug' => {
852
945
  :default => false,
853
946
  :public => false,
854
947
  :type => Boolean,
948
+ :allowed_from_server => true,
855
949
  :description => 'Enable or disable debugging version of JavaScript agent loader for browser monitoring instrumentation.'
856
950
  },
857
951
  :'browser_monitoring.ssl_for_http' => {
@@ -859,37 +953,36 @@ module NewRelic
859
953
  :allow_nil => true,
860
954
  :public => false,
861
955
  :type => Boolean,
956
+ :allowed_from_server => true,
862
957
  :description => 'Enable or disable HTTPS instrumentation by JavaScript agent on HTTP pages.'
863
958
  },
864
- :'capture_attributes.page_view_events' => {
865
- :default => false,
866
- :public => false,
867
- :type => Boolean,
868
- :deprecated => true,
869
- :description => 'Correct setting is browser_monitoring.capture_attributes.'
870
- },
871
959
  :js_agent_loader => {
872
960
  :default => '',
873
961
  :public => false,
874
962
  :type => String,
963
+ :allowed_from_server => true,
875
964
  :description => 'JavaScript agent loader content.'
876
965
  },
877
966
  :js_errors_beta => {
878
967
  :default => false,
879
968
  :public => false,
880
969
  :type => Boolean,
970
+ :allowed_from_server => false,
971
+ :deprecated => true,
881
972
  :description => 'Enable or disable beta JavaScript error reporting.'
882
973
  },
883
974
  :trusted_account_ids => {
884
975
  :default => [],
885
976
  :public => false,
886
977
  :type => Array,
978
+ :allowed_from_server => true,
887
979
  :description => 'List of trusted New Relic account IDs for the purposes of cross-application tracing. Inbound requests from applications including cross-application headers that do not come from an account in this list will be ignored.'
888
980
  },
889
981
  :"cross_application_tracer.enabled" => {
890
982
  :default => true,
891
983
  :public => true,
892
984
  :type => Boolean,
985
+ :allowed_from_server => true,
893
986
  :description => 'Enable or disable <a href="/docs/apm/traces/cross-application-traces/cross-application-traces">cross application tracing</a>.'
894
987
  },
895
988
  :cross_application_tracing => {
@@ -897,90 +990,107 @@ module NewRelic
897
990
  :allow_nil => true,
898
991
  :public => false,
899
992
  :type => Boolean,
900
- :description => 'Enable or disable <a href="/docs/apm/traces/cross-application-traces/cross-application-traces">cross application tracing</a>.'
993
+ :allowed_from_server => false,
994
+ :deprecated => true,
995
+ :description => 'Deprecated in favor of cross_application_tracer.enabled'
901
996
  },
902
997
  :encoding_key => {
903
998
  :default => '',
904
999
  :public => false,
905
1000
  :type => String,
1001
+ :allowed_from_server => true,
906
1002
  :description => 'Encoding key for cross-application tracing.'
907
1003
  },
908
1004
  :cross_process_id => {
909
1005
  :default => '',
910
1006
  :public => false,
911
1007
  :type => String,
1008
+ :allowed_from_server => true,
912
1009
  :description => 'Cross process ID for cross-application tracing.'
913
1010
  },
914
1011
  :'thread_profiler.enabled' => {
915
1012
  :default => DefaultSource.thread_profiler_enabled,
916
1013
  :public => true,
917
1014
  :type => Boolean,
1015
+ :allowed_from_server => true,
918
1016
  :description => 'Enable or disable the thread profiler.'
919
1017
  },
920
1018
  :'xray_session.enabled' => {
921
1019
  :default => true,
922
1020
  :public => true,
923
1021
  :type => Boolean,
1022
+ :allowed_from_server => true,
924
1023
  :description => 'Enable or disable <a href="/docs/apm/transactions-menu/x-ray-sessions/x-ray-sessions">X-Ray sessions</a>.'
925
1024
  },
926
1025
  :'xray_session.allow_traces' => {
927
1026
  :default => true,
928
1027
  :public => false,
929
1028
  :type => Boolean,
1029
+ :allowed_from_server => true,
930
1030
  :description => 'Enable or disable X-Ray sessions recording transaction traces.'
931
1031
  },
932
1032
  :'xray_session.allow_profiles' => {
933
1033
  :default => true,
934
1034
  :public => false,
935
1035
  :type => Boolean,
1036
+ :allowed_from_server => true,
936
1037
  :description => 'Enable or disable X-Ray sessions taking thread profiles.'
937
1038
  },
938
1039
  :'xray_session.max_samples' => {
939
1040
  :default => 10,
940
1041
  :public => false,
941
1042
  :type => Fixnum,
1043
+ :allowed_from_server => true,
942
1044
  :description => 'Maximum number of transaction traces to buffer for active X-Ray sessions'
943
1045
  },
944
1046
  :'xray_session.max_profile_overhead' => {
945
1047
  :default => 0.05,
946
1048
  :public => false,
947
1049
  :type => Float,
1050
+ :allowed_from_server => true,
948
1051
  :description => 'Maximum overhead percentage for thread profiling before agent reduces polling frequency'
949
1052
  },
950
1053
  :marshaller => {
951
1054
  :default => DefaultSource.marshaller,
952
1055
  :public => true,
953
1056
  :type => String,
1057
+ :allowed_from_server => false,
954
1058
  :description => 'Specifies a marshaller for transmitting data to the New Relic <a href="/docs/apm/new-relic-apm/getting-started/glossary#collector">collector</a>) (e.g json, pruby).'
955
1059
  },
956
1060
  :'analytics_events.enabled' => {
957
1061
  :default => true,
958
1062
  :public => true,
959
1063
  :type => Boolean,
1064
+ :allowed_from_server => true,
960
1065
  :description => 'Enable or disable analytics event sampling.'
961
1066
  },
962
1067
  :'analytics_events.max_samples_stored' => {
963
1068
  :default => 1200,
964
1069
  :public => true,
965
1070
  :type => Fixnum,
1071
+ :allowed_from_server => true,
966
1072
  :description => 'Defines the maximum number of request events reported from a single harvest.'
967
1073
  },
968
1074
  :'analytics_events.capture_attributes' => {
969
1075
  :default => true,
970
1076
  :public => true,
971
1077
  :type => Boolean,
972
- :description => 'Include <a href="/docs/insights/new-relic-insights/decorating-events/insights-custom-attributes">custom attributes</a> in analytics event data.'
1078
+ :deprecated => true,
1079
+ :allowed_from_server => false,
1080
+ :description => 'Use transaction_events.attributes.enabled instead.'
973
1081
  },
974
1082
  :restart_thread_in_children => {
975
1083
  :default => true,
976
1084
  :public => false,
977
1085
  :type => Boolean,
1086
+ :allowed_from_server => false,
978
1087
  :description => 'Controls whether to check on running a transaction whether to respawn the harvest thread.'
979
1088
  },
980
1089
  :normalize_json_string_encodings => {
981
1090
  :default => DefaultSource.normalize_json_string_encodings,
982
1091
  :public => false,
983
1092
  :type => Boolean,
1093
+ :allowed_from_server => false,
984
1094
  :description => 'Controls whether to normalize string encodings prior to serializing data for the collector to JSON.'
985
1095
  },
986
1096
  :disable_vm_sampler => {
@@ -988,6 +1098,7 @@ module NewRelic
988
1098
  :public => true,
989
1099
  :type => Boolean,
990
1100
  :dynamic_name => true,
1101
+ :allowed_from_server => false,
991
1102
  :description => 'Defines whether the agent will <a href="/docs/agents/ruby-agent/features/ruby-vm-measurements">sample performance measurements from the Ruby VM</a>.'
992
1103
  },
993
1104
  :disable_memory_sampler => {
@@ -995,6 +1106,7 @@ module NewRelic
995
1106
  :public => true,
996
1107
  :type => Boolean,
997
1108
  :dynamic_name => true,
1109
+ :allowed_from_server => false,
998
1110
  :description => 'Defines whether the agent will sample the memory usage of the host process.'
999
1111
  },
1000
1112
  :disable_cpu_sampler => {
@@ -1002,6 +1114,7 @@ module NewRelic
1002
1114
  :public => true,
1003
1115
  :type => Boolean,
1004
1116
  :dynamic_name => true,
1117
+ :allowed_from_server => false,
1005
1118
  :description => 'Defines whether the agent will sample the CPU usage of the host process.'
1006
1119
  },
1007
1120
  :disable_delayed_job_sampler => {
@@ -1009,6 +1122,7 @@ module NewRelic
1009
1122
  :public => true,
1010
1123
  :type => Boolean,
1011
1124
  :dynamic_name => true,
1125
+ :allowed_from_server => false,
1012
1126
  :description => 'Defines whether the agent will measure the depth of Delayed Job queues.'
1013
1127
  },
1014
1128
  :disable_active_record_4 => {
@@ -1016,6 +1130,7 @@ module NewRelic
1016
1130
  :public => true,
1017
1131
  :type => Boolean,
1018
1132
  :dynamic_name => true,
1133
+ :allowed_from_server => false,
1019
1134
  :description => 'Defines whether the agent will install instrumentation for ActiveRecord 4.'
1020
1135
  },
1021
1136
  :disable_curb => {
@@ -1023,6 +1138,7 @@ module NewRelic
1023
1138
  :public => true,
1024
1139
  :type => Boolean,
1025
1140
  :dynamic_name => true,
1141
+ :allowed_from_server => false,
1026
1142
  :description => 'Defines whether the agent will install instrumentation for the curb gem.'
1027
1143
  },
1028
1144
  :disable_excon => {
@@ -1030,6 +1146,7 @@ module NewRelic
1030
1146
  :public => true,
1031
1147
  :type => Boolean,
1032
1148
  :dynamic_name => true,
1149
+ :allowed_from_server => false,
1033
1150
  :description => 'Defines whether the agent will install instrumentation for the excon gem.'
1034
1151
  },
1035
1152
  :disable_httpclient => {
@@ -1037,6 +1154,7 @@ module NewRelic
1037
1154
  :public => true,
1038
1155
  :type => Boolean,
1039
1156
  :dynamic_name => true,
1157
+ :allowed_from_server => false,
1040
1158
  :description => 'Defines whether the agent will install instrumentation for the httpclient gem.'
1041
1159
  },
1042
1160
  :disable_net_http => {
@@ -1044,6 +1162,7 @@ module NewRelic
1044
1162
  :public => true,
1045
1163
  :type => Boolean,
1046
1164
  :dynamic_name => true,
1165
+ :allowed_from_server => false,
1047
1166
  :description => 'Defines whether the agent will install instrumentation for Net::HTTP.'
1048
1167
  },
1049
1168
  :disable_rack => {
@@ -1051,6 +1170,7 @@ module NewRelic
1051
1170
  :public => true,
1052
1171
  :type => Boolean,
1053
1172
  :dynamic_name => true,
1173
+ :allowed_from_server => false,
1054
1174
  :description => 'Defines whether the agent will hook into Rack::Builder\'s <code>to_app</code> method to find gems to instrument during application startup.'
1055
1175
  },
1056
1176
  :disable_rack_urlmap => {
@@ -1058,6 +1178,7 @@ module NewRelic
1058
1178
  :public => true,
1059
1179
  :type => Boolean,
1060
1180
  :dynamic_name => true,
1181
+ :allowed_from_server => false,
1061
1182
  :description => 'Defines whether the agent will hook into Rack::URLMap to install middleware tracing.'
1062
1183
  },
1063
1184
  :disable_rubyprof => {
@@ -1065,6 +1186,7 @@ module NewRelic
1065
1186
  :public => true,
1066
1187
  :type => Boolean,
1067
1188
  :dynamic_name => true,
1189
+ :allowed_from_server => false,
1068
1190
  :description => 'Defines whether the agent will use RubyProf in developer mode (if RubyProf is installed).'
1069
1191
  },
1070
1192
  :disable_typhoeus => {
@@ -1072,30 +1194,35 @@ module NewRelic
1072
1194
  :public => true,
1073
1195
  :type => Boolean,
1074
1196
  :dynamic_name => true,
1197
+ :allowed_from_server => false,
1075
1198
  :description => 'Defines whether the agent will install instrumentation for the typhoeus gem.'
1076
1199
  },
1077
1200
  :disable_middleware_instrumentation => {
1078
1201
  :default => false,
1079
1202
  :public => true,
1080
1203
  :type => Boolean,
1204
+ :allowed_from_server => false,
1081
1205
  :description => 'Defines whether the agent will wrap third-party middlewares in instrumentation (regardless of whether they are installed via Rack::Builder or Rails).'
1082
1206
  },
1083
1207
  :disable_rails_middleware => {
1084
1208
  :default => false,
1085
1209
  :public => false,
1086
1210
  :type => Boolean,
1211
+ :allowed_from_server => false,
1087
1212
  :description => 'Internal name for controlling Rails 3+ middleware instrumentation'
1088
1213
  },
1089
1214
  :'heroku.use_dyno_names' => {
1090
1215
  :default => true,
1091
1216
  :public => true,
1092
1217
  :type => Boolean,
1218
+ :allowed_from_server => false,
1093
1219
  :description => 'Controls whether or not we use the heroku dyno name as the hostname.'
1094
1220
  },
1095
1221
  :'heroku.dyno_name_prefixes_to_shorten' => {
1096
1222
  :default => ['scheduler', 'run'],
1097
1223
  :public => true,
1098
1224
  :type => Array,
1225
+ :allowed_from_server => false,
1099
1226
  :transform => DefaultSource.method(:convert_to_list),
1100
1227
  :description => 'List of prefixes for heroku dyno names (such as "scheduler") to report as hostname without trailing dot and process ID.'
1101
1228
  },
@@ -1103,18 +1230,21 @@ module NewRelic
1103
1230
  :default => '',
1104
1231
  :public => true,
1105
1232
  :type => String,
1233
+ :allowed_from_server => false,
1106
1234
  :description => 'A dictionary of label names and values that will be applied to the data sent from this agent. May also be expressed as a semi-colon delimited string of colon-separated pairs (e.g. "Server:One;Data Center:Primary".'
1107
1235
  },
1108
1236
  :aggressive_keepalive => {
1109
1237
  :default => true,
1110
1238
  :public => false,
1111
1239
  :type => Boolean,
1240
+ :allowed_from_server => true,
1112
1241
  :description => 'If true, attempt to keep the TCP connection to the collector alive between harvests.'
1113
1242
  },
1114
1243
  :keep_alive_timeout => {
1115
1244
  :default => 60,
1116
1245
  :public => false,
1117
1246
  :type => Fixnum,
1247
+ :allowed_from_server => true,
1118
1248
  :description => 'Timeout for keep alive on TCP connection to collector if supported by Ruby version. Only used in conjunction when aggressive_keepalive is enabled.'
1119
1249
  },
1120
1250
  :ca_bundle_path => {
@@ -1122,18 +1252,21 @@ module NewRelic
1122
1252
  :allow_nil => true,
1123
1253
  :public => true,
1124
1254
  :type => String,
1255
+ :allowed_from_server => false,
1125
1256
  :description => "Manual override for the path to your local CA bundle. This CA bundle will be used to validate the SSL certificate presented by New Relic's data collection service."
1126
1257
  },
1127
1258
  :collect_utilization => {
1128
1259
  :default => false,
1129
1260
  :public => false,
1130
1261
  :type => Boolean,
1262
+ :allowed_from_server => true,
1131
1263
  :description => "Controls whether to collect processor and instance sizing data and send it to New Relic"
1132
1264
  },
1133
1265
  :'rules.ignore_url_regexes' => {
1134
1266
  :default => [],
1135
1267
  :public => true,
1136
1268
  :type => Array,
1269
+ :allowed_from_server => true,
1137
1270
  :transform => DefaultSource.method(:convert_to_regexp_list),
1138
1271
  :description => 'A list of patterns that will cause a transaction to be ignored if any of them match the URI.'
1139
1272
  },
@@ -1141,24 +1274,28 @@ module NewRelic
1141
1274
  :default => 20,
1142
1275
  :public => false,
1143
1276
  :type => Fixnum,
1277
+ :allowed_from_server => true,
1144
1278
  :description => 'Maximum number of synthetics transaction traces to hold for a given harvest'
1145
1279
  },
1146
1280
  :'synthetics.events_limit' => {
1147
1281
  :default => 200,
1148
1282
  :public => false,
1149
1283
  :type => Fixnum,
1284
+ :allowed_from_server => true,
1150
1285
  :description => 'Maximum number of synthetics transaction events to hold for a given harvest'
1151
1286
  },
1152
1287
  :'custom_insights_events.enabled' => {
1153
1288
  :default => true,
1154
1289
  :public => true,
1155
1290
  :type => Boolean,
1291
+ :allowed_from_server => true,
1156
1292
  :description => 'Enable or disable custom Insights event recording.'
1157
1293
  },
1158
1294
  :'custom_insights_events.max_samples_stored' => {
1159
1295
  :default => 1000,
1160
1296
  :public => true,
1161
1297
  :type => Fixnum,
1298
+ :allowed_from_server => true,
1162
1299
  :description => 'Maximum number of custom Insights events buffered in memory at a time.',
1163
1300
  :dynamic_name => true
1164
1301
  },
@@ -1166,13 +1303,130 @@ module NewRelic
1166
1303
  :default => false,
1167
1304
  :public => true,
1168
1305
  :type => Boolean,
1306
+ :allowed_from_server => false,
1169
1307
  :description => 'Disables installation of Grape instrumentation.'
1170
1308
  },
1171
1309
  :disable_grape => {
1172
1310
  :default => false,
1173
1311
  :public => true,
1174
1312
  :type => Boolean,
1313
+ :allowed_from_server => false,
1175
1314
  :description => 'Disables installation of Grape instrumentation.'
1315
+ },
1316
+ :'attributes.enabled' => {
1317
+ :default => true,
1318
+ :public => false,
1319
+ :type => Boolean,
1320
+ :allowed_from_server => false,
1321
+ :description => 'Enable or disable capture of attributes for all destinations.'
1322
+ },
1323
+ :'transaction_tracer.attributes.enabled' => {
1324
+ :default => value_of(:'transaction_tracer.capture_attributes'),
1325
+ :public => false,
1326
+ :type => Boolean,
1327
+ :allowed_from_server => false,
1328
+ :description => 'Enable or disable capture of attributes for transaction traces.'
1329
+ },
1330
+ :'transaction_events.attributes.enabled' => {
1331
+ :default => value_of(:'analytics_events.capture_attributes'),
1332
+ :public => false,
1333
+ :type => Boolean,
1334
+ :allowed_from_server => false,
1335
+ :description => 'Enable or disable capture of attributes for transaction events.'
1336
+ },
1337
+ :'error_collector.attributes.enabled' => {
1338
+ :default => value_of(:'error_collector.capture_attributes'),
1339
+ :public => false,
1340
+ :type => Boolean,
1341
+ :allowed_from_server => false,
1342
+ :description => 'Enable or disable capture of attributes for error collection.'
1343
+ },
1344
+ :'browser_monitoring.attributes.enabled' => {
1345
+ :default => value_of(:'browser_monitoring.capture_attributes'),
1346
+ :public => false,
1347
+ :type => Boolean,
1348
+ :allowed_from_server => false,
1349
+ :description => 'Enable or disable capture of attributes for browser monitoring.'
1350
+ },
1351
+ :'attributes.exclude' => {
1352
+ :default => [],
1353
+ :public => false,
1354
+ :type => Array,
1355
+ :allowed_from_server => false,
1356
+ :transform => DefaultSource.method(:convert_to_list),
1357
+ :description => 'Prefix of attributes to exclude from all destinations. Allows * as wildcard at end.'
1358
+ },
1359
+ :'transaction_tracer.attributes.exclude' => {
1360
+ :default => [],
1361
+ :public => false,
1362
+ :type => Array,
1363
+ :allowed_from_server => false,
1364
+ :transform => DefaultSource.method(:convert_to_list),
1365
+ :description => 'Prefix of attributes to exclude from transaction traces. Allows * as wildcard at end.'
1366
+ },
1367
+ :'transaction_events.attributes.exclude' => {
1368
+ :default => [],
1369
+ :public => false,
1370
+ :type => Array,
1371
+ :allowed_from_server => false,
1372
+ :transform => DefaultSource.method(:convert_to_list),
1373
+ :description => 'Prefix of attributes to exclude from transaction events. Allows * as wildcard at end.'
1374
+ },
1375
+ :'error_collector.attributes.exclude' => {
1376
+ :default => [],
1377
+ :public => false,
1378
+ :type => Array,
1379
+ :allowed_from_server => false,
1380
+ :transform => DefaultSource.method(:convert_to_list),
1381
+ :description => 'Prefix of attributes to exclude from error collection. Allows * as wildcard at end.'
1382
+ },
1383
+ :'browser_monitoring.attributes.exclude' => {
1384
+ :default => [],
1385
+ :public => false,
1386
+ :type => Array,
1387
+ :allowed_from_server => false,
1388
+ :transform => DefaultSource.method(:convert_to_list),
1389
+ :description => 'Prefix of attributes to exclude from browser monitoring. Allows * as wildcard at end.'
1390
+ },
1391
+ :'attributes.include' => {
1392
+ :default => [],
1393
+ :public => false,
1394
+ :type => Array,
1395
+ :allowed_from_server => false,
1396
+ :transform => DefaultSource.method(:convert_to_list),
1397
+ :description => 'Prefix of attributes to include in all destinations. Allows * as wildcard at end.'
1398
+ },
1399
+ :'transaction_tracer.attributes.include' => {
1400
+ :default => [],
1401
+ :public => false,
1402
+ :type => Array,
1403
+ :allowed_from_server => false,
1404
+ :transform => DefaultSource.method(:convert_to_list),
1405
+ :description => 'Prefix of attributes to include in transaction traces. Allows * as wildcard at end.'
1406
+ },
1407
+ :'transaction_events.attributes.include' => {
1408
+ :default => [],
1409
+ :public => false,
1410
+ :type => Array,
1411
+ :allowed_from_server => false,
1412
+ :transform => DefaultSource.method(:convert_to_list),
1413
+ :description => 'Prefix of attributes to include in transaction events. Allows * as wildcard at end.'
1414
+ },
1415
+ :'error_collector.attributes.include' => {
1416
+ :default => [],
1417
+ :public => false,
1418
+ :type => Array,
1419
+ :allowed_from_server => false,
1420
+ :transform => DefaultSource.method(:convert_to_list),
1421
+ :description => 'Prefix of attributes to include in error collection. Allows * as wildcard at end.'
1422
+ },
1423
+ :'browser_monitoring.attributes.include' => {
1424
+ :default => [],
1425
+ :public => false,
1426
+ :type => Array,
1427
+ :allowed_from_server => false,
1428
+ :transform => DefaultSource.method(:convert_to_list),
1429
+ :description => 'Prefix of attributes to include in browser monitoring. Allows * as wildcard at end.'
1176
1430
  }
1177
1431
  }.freeze
1178
1432
  end