Module: NewRelic::Agent
- Extended by:
- Forwardable, Agent, SupportabilityHelper
- Included in:
- Agent
- Defined in:
- lib/new_relic/agent.rb,
lib/new_relic/agent/vm.rb,
lib/new_relic/agent/aws.rb,
lib/new_relic/agent/llm.rb,
lib/new_relic/agent/heap.rb,
lib/new_relic/agent/agent.rb,
lib/new_relic/agent/stats.rb,
lib/new_relic/agent/tracer.rb,
lib/new_relic/agent/logging.rb,
lib/new_relic/agent/sampler.rb,
lib/new_relic/agent/database.rb,
lib/new_relic/agent/external.rb,
lib/new_relic/agent/hostname.rb,
lib/new_relic/agent/log_once.rb,
lib/new_relic/agent/monitors.rb,
lib/new_relic/agent/autostart.rb,
lib/new_relic/agent/harvester.rb,
lib/new_relic/agent/messaging.rb,
lib/new_relic/agent/attributes.rb,
lib/new_relic/agent/datastores.rb,
lib/new_relic/agent/deprecator.rb,
lib/new_relic/agent/event_loop.rb,
lib/new_relic/agent/obfuscator.rb,
lib/new_relic/agent/null_logger.rb,
lib/new_relic/agent/sql_sampler.rb,
lib/new_relic/agent/system_info.rb,
lib/new_relic/agent/transaction.rb,
lib/new_relic/agent/vm/jruby_vm.rb,
lib/new_relic/agent/vm/snapshot.rb,
lib/new_relic/agent/worker_loop.rb,
lib/new_relic/agent/agent_logger.rb,
lib/new_relic/agent/audit_logger.rb,
lib/new_relic/agent/error_filter.rb,
lib/new_relic/agent/event_buffer.rb,
lib/new_relic/agent/log_priority.rb,
lib/new_relic/agent/pipe_service.rb,
lib/new_relic/agent/rules_engine.rb,
lib/new_relic/agent/stats_engine.rb,
lib/new_relic/agent/vm/c_ruby_vm.rb,
lib/new_relic/agent/configuration.rb,
lib/new_relic/agent/llm/embedding.rb,
lib/new_relic/agent/llm/llm_event.rb,
lib/new_relic/agent/memory_logger.rb,
lib/new_relic/agent/method_tracer.rb,
lib/new_relic/agent/event_listener.rb,
lib/new_relic/agent/guid_generator.rb,
lib/new_relic/agent/error_collector.rb,
lib/new_relic/agent/instrumentation.rb,
lib/new_relic/agent/utilization/aws.rb,
lib/new_relic/agent/utilization/gcp.rb,
lib/new_relic/agent/utilization/pcf.rb,
lib/new_relic/agent/adaptive_sampler.rb,
lib/new_relic/agent/attribute_filter.rb,
lib/new_relic/agent/database_adapter.rb,
lib/new_relic/agent/datastores/mongo.rb,
lib/new_relic/agent/datastores/redis.rb,
lib/new_relic/agent/event_aggregator.rb,
lib/new_relic/agent/linking_metadata.rb,
lib/new_relic/agent/noticeable_error.rb,
lib/new_relic/agent/utilization_data.rb,
lib/new_relic/agent/new_relic_service.rb,
lib/new_relic/agent/transaction/trace.rb,
lib/new_relic/agent/utilization/azure.rb,
lib/new_relic/agent/sampler_collection.rb,
lib/new_relic/agent/serverless_handler.rb,
lib/new_relic/agent/utilization/vendor.rb,
lib/new_relic/agent/database/obfuscator.rb,
lib/new_relic/agent/distributed_tracing.rb,
lib/new_relic/agent/encoding_normalizer.rb,
lib/new_relic/agent/local_log_decorator.rb,
lib/new_relic/agent/parameter_filtering.rb,
lib/new_relic/agent/samplers/vm_sampler.rb,
lib/new_relic/agent/transaction/segment.rb,
lib/new_relic/agent/transaction/tracing.rb,
lib/new_relic/agent/transaction_metrics.rb,
lib/new_relic/agent/transaction_sampler.rb,
lib/new_relic/agent/attribute_processing.rb,
lib/new_relic/agent/internal_agent_error.rb,
lib/new_relic/agent/llm/response_headers.rb,
lib/new_relic/agent/log_event_aggregator.rb,
lib/new_relic/agent/log_event_attributes.rb,
lib/new_relic/agent/pipe_channel_manager.rb,
lib/new_relic/agent/samplers/cpu_sampler.rb,
lib/new_relic/agent/span_event_primitive.rb,
lib/new_relic/agent/agent_helpers/connect.rb,
lib/new_relic/agent/agent_helpers/harvest.rb,
lib/new_relic/agent/agent_helpers/startup.rb,
lib/new_relic/agent/configuration/manager.rb,
lib/new_relic/agent/http_clients/abstract.rb,
lib/new_relic/agent/http_clients/uri_util.rb,
lib/new_relic/agent/method_tracer_helpers.rb,
lib/new_relic/agent/span_event_aggregator.rb,
lib/new_relic/agent/agent_helpers/shutdown.rb,
lib/new_relic/agent/agent_helpers/transmit.rb,
lib/new_relic/agent/commands/agent_command.rb,
lib/new_relic/agent/error_event_aggregator.rb,
lib/new_relic/agent/error_trace_aggregator.rb,
lib/new_relic/agent/payload_metric_mapping.rb,
lib/new_relic/agent/prepend_supportability.rb,
lib/new_relic/agent/threading/agent_thread.rb,
lib/new_relic/agent/transaction/trace_node.rb,
lib/new_relic/agent/attribute_pre_filtering.rb,
lib/new_relic/agent/connect/request_builder.rb,
lib/new_relic/agent/custom_event_aggregator.rb,
lib/new_relic/agent/javascript_instrumentor.rb,
lib/new_relic/agent/priority_sampled_buffer.rb,
lib/new_relic/agent/samplers/memory_sampler.rb,
lib/new_relic/agent/samplers/object_sampler.rb,
lib/new_relic/agent/stats_engine/stats_hash.rb,
lib/new_relic/agent/connect/response_handler.rb,
lib/new_relic/agent/datastores/metric_helper.rb,
lib/new_relic/agent/stats_engine/gc_profiler.rb,
lib/new_relic/agent/threading/backtrace_node.rb,
lib/new_relic/agent/threading/thread_profile.rb,
lib/new_relic/agent/timestamp_sampled_buffer.rb,
lib/new_relic/agent/vm/monotonic_gc_profiler.rb,
lib/new_relic/agent/configuration/dotted_hash.rb,
lib/new_relic/agent/configuration/yaml_source.rb,
lib/new_relic/agent/transaction/trace_builder.rb,
lib/new_relic/agent/transaction/trace_context.rb,
lib/new_relic/agent/http_clients/curb_wrappers.rb,
lib/new_relic/agent/instrumentation/active_job.rb,
lib/new_relic/agent/instrumentation/queue_time.rb,
lib/new_relic/agent/monitors/cross_app_monitor.rb,
lib/new_relic/agent/new_relic_service/encoders.rb,
lib/new_relic/agent/transaction_event_recorder.rb,
lib/new_relic/agent/configuration/manual_source.rb,
lib/new_relic/agent/configuration/mask_defaults.rb,
lib/new_relic/agent/configuration/server_source.rb,
lib/new_relic/agent/datastores/nosql_obfuscator.rb,
lib/new_relic/agent/http_clients/ethon_wrappers.rb,
lib/new_relic/agent/http_clients/excon_wrappers.rb,
lib/new_relic/agent/http_clients/httpx_wrappers.rb,
lib/new_relic/agent/instrumentation/grpc/helper.rb,
lib/new_relic/agent/llm/chat_completion_message.rb,
lib/new_relic/agent/llm/chat_completion_summary.rb,
lib/new_relic/agent/monitors/synthetics_monitor.rb,
lib/new_relic/agent/synthetics_event_aggregator.rb,
lib/new_relic/agent/threading/backtrace_service.rb,
lib/new_relic/agent/transaction_error_primitive.rb,
lib/new_relic/agent/transaction_event_primitive.rb,
lib/new_relic/agent/transaction_time_aggregator.rb,
lib/new_relic/agent/configuration/default_source.rb,
lib/new_relic/agent/database/obfuscation_helpers.rb,
lib/new_relic/agent/instrumentation/curb/prepend.rb,
lib/new_relic/agent/new_relic_service/marshaller.rb,
lib/new_relic/agent/samplers/delayed_job_sampler.rb,
lib/new_relic/agent/transaction/abstract_segment.rb,
lib/new_relic/agent/transaction_event_aggregator.rb,
lib/new_relic/agent/agent_helpers/special_startup.rb,
lib/new_relic/agent/commands/agent_command_router.rb,
lib/new_relic/agent/database/explain_plan_helpers.rb,
lib/new_relic/agent/http_clients/http_rb_wrappers.rb,
lib/new_relic/agent/instrumentation/active_record.rb,
lib/new_relic/agent/instrumentation/padrino/chain.rb,
lib/new_relic/agent/instrumentation/resque/helper.rb,
lib/new_relic/agent/instrumentation/sequel_helper.rb,
lib/new_relic/agent/rules_engine/replacement_rule.rb,
lib/new_relic/agent/transaction/datastore_segment.rb,
lib/new_relic/agent/http_clients/net_http_wrappers.rb,
lib/new_relic/agent/http_clients/typhoeus_wrappers.rb,
lib/new_relic/agent/instrumentation/ignore_actions.rb,
lib/new_relic/agent/instrumentation/memcache/dalli.rb,
lib/new_relic/agent/instrumentation/thread/prepend.rb,
lib/new_relic/agent/transaction/distributed_tracer.rb,
lib/new_relic/agent/transaction/request_attributes.rb,
lib/new_relic/agent/rules_engine/segment_terms_rule.rb,
lib/new_relic/agent/transaction/distributed_tracing.rb,
lib/new_relic/agent/commands/thread_profiler_session.rb,
lib/new_relic/agent/configuration/environment_source.rb,
lib/new_relic/agent/datastores/mongo/event_formatter.rb,
lib/new_relic/agent/http_clients/async_http_wrappers.rb,
lib/new_relic/agent/http_clients/httpclient_wrappers.rb,
lib/new_relic/agent/instrumentation/middleware_proxy.rb,
lib/new_relic/agent/instrumentation/net_http/prepend.rb,
lib/new_relic/agent/monitors/inbound_request_monitor.rb,
lib/new_relic/agent/serverless_handler_event_sources.rb,
lib/new_relic/agent/agent_helpers/start_worker_thread.rb,
lib/new_relic/agent/distributed_tracing/trace_context.rb,
lib/new_relic/agent/instrumentation/stripe_subscriber.rb,
lib/new_relic/agent/new_relic_service/json_marshaller.rb,
lib/new_relic/agent/transaction/slowest_sample_buffer.rb,
lib/new_relic/agent/configuration/event_harvest_config.rb,
lib/new_relic/agent/configuration/high_security_source.rb,
lib/new_relic/agent/datastores/mongo/metric_translator.rb,
lib/new_relic/agent/instrumentation/middleware_tracing.rb,
lib/new_relic/agent/transaction/message_broker_segment.rb,
lib/new_relic/agent/instrumentation/delayed_job/prepend.rb,
lib/new_relic/agent/instrumentation/grpc/client/prepend.rb,
lib/new_relic/agent/configuration/security_policy_source.rb,
lib/new_relic/agent/database/postgres_explain_obfuscator.rb,
lib/new_relic/agent/instrumentation/active_record_helper.rb,
lib/new_relic/agent/instrumentation/curb/instrumentation.rb,
lib/new_relic/agent/instrumentation/rack/instrumentation.rb,
lib/new_relic/agent/instrumentation/rake/instrumentation.rb,
lib/new_relic/agent/instrumentation/tilt/instrumentation.rb,
lib/new_relic/agent/monitors/distributed_tracing_monitor.rb,
lib/new_relic/agent/transaction/external_request_segment.rb,
lib/new_relic/agent/transaction/synthetics_sample_buffer.rb,
lib/new_relic/agent/distributed_tracing/cross_app_payload.rb,
lib/new_relic/agent/distributed_tracing/cross_app_tracing.rb,
lib/new_relic/agent/instrumentation/active_job_subscriber.rb,
lib/new_relic/agent/instrumentation/active_record_prepend.rb,
lib/new_relic/agent/instrumentation/bunny/instrumentation.rb,
lib/new_relic/agent/transaction/transaction_sample_buffer.rb,
lib/new_relic/agent/instrumentation/action_view_subscriber.rb,
lib/new_relic/agent/instrumentation/logger/instrumentation.rb,
lib/new_relic/agent/instrumentation/thread/instrumentation.rb,
lib/new_relic/agent/instrumentation/action_cable_subscriber.rb,
lib/new_relic/agent/instrumentation/action_mailer_subscriber.rb,
lib/new_relic/agent/instrumentation/active_record_subscriber.rb,
lib/new_relic/agent/instrumentation/net_http/instrumentation.rb,
lib/new_relic/agent/instrumentation/notifications_subscriber.rb,
lib/new_relic/agent/instrumentation/rails3/action_controller.rb,
lib/new_relic/agent/instrumentation/typhoeus/instrumentation.rb,
lib/new_relic/agent/distributed_tracing/trace_context_payload.rb,
lib/new_relic/agent/instrumentation/action_mailbox_subscriber.rb,
lib/new_relic/agent/instrumentation/active_storage_subscriber.rb,
lib/new_relic/agent/instrumentation/active_support_subscriber.rb,
lib/new_relic/agent/instrumentation/sinatra/transaction_namer.rb,
lib/new_relic/agent/instrumentation/action_dispatch_subscriber.rb,
lib/new_relic/agent/instrumentation/controller_instrumentation.rb,
lib/new_relic/agent/instrumentation/mongodb_command_subscriber.rb,
lib/new_relic/agent/new_relic_service/security_policy_settings.rb,
lib/new_relic/agent/instrumentation/active_record_notifications.rb,
lib/new_relic/agent/instrumentation/delayed_job/instrumentation.rb,
lib/new_relic/agent/instrumentation/delayed_job_instrumentation.rb,
lib/new_relic/agent/instrumentation/grpc/client/instrumentation.rb,
lib/new_relic/agent/instrumentation/grpc/client/request_wrapper.rb,
lib/new_relic/agent/instrumentation/grpc/server/instrumentation.rb,
lib/new_relic/agent/instrumentation/roda/roda_transaction_namer.rb,
lib/new_relic/agent/instrumentation/action_controller_subscriber.rb,
lib/new_relic/agent/instrumentation/grpc/server/rpc_desc_prepend.rb,
lib/new_relic/agent/distributed_tracing/distributed_trace_metrics.rb,
lib/new_relic/agent/distributed_tracing/distributed_trace_payload.rb,
lib/new_relic/agent/instrumentation/grpc/server/rpc_server_prepend.rb,
lib/new_relic/agent/distributed_tracing/distributed_trace_attributes.rb,
lib/new_relic/agent/instrumentation/action_controller_other_subscriber.rb,
lib/new_relic/agent/distributed_tracing/distributed_trace_transport_type.rb,
lib/new_relic/agent/instrumentation/active_support_logger/instrumentation.rb
Overview
This file is distributed under New Relic’s license terms. See github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE for complete details. frozen_string_literal: true
Defined Under Namespace
Modules: AgentHelpers, AttributePreFiltering, AttributeProcessing, Autostart, Aws, Commands, Configuration, Connect, CrossAppTracing, Database, Datastores, Deprecator, DistributedTraceAttributes, DistributedTraceMetrics, DistributedTraceTransportType, DistributedTracing, EncodingNormalizer, External, GuidGenerator, HTTPClients, Hostname, Instrumentation, LinkingMetadata, Llm, LocalLogDecorator, LogOnce, LogPriority, Logging, Messaging, MethodTracer, MethodTracerHelpers, ParameterFiltering, PayloadMetricMapping, PipeChannelManager, PrependSupportability, Samplers, SpanEventPrimitive, SystemInfo, Threading, TransactionErrorPrimitive, TransactionEventPrimitive, TransactionTimeAggregator, Utilization, VM Classes: AdaptiveSampler, Agent, AgentLogger, AttributeFilter, AttributeFilterRule, Attributes, AuditLogger, AutomaticTracerParseException, AutomaticTracerTraceException, CrossAppPayload, CustomEventAggregator, DatabaseAdapter, DistributedTracePayload, ErrorCollector, ErrorEventAggregator, ErrorFilter, ErrorTraceAggregator, EventAggregator, EventBuffer, EventListener, EventLoop, ForceDisconnectException, ForceRestartException, Harvester, Heap, InboundRequestMonitor, InternalAgentError, JavaScriptInstrumentor, LLM, LicenseException, LogEventAggregator, LogEventAttributes, MemoryLogger, Monitors, NewRelicService, NoticeableError, NullLogger, Obfuscator, PipeService, PrioritySampledBuffer, RulesEngine, Sampler, SamplerCollection, SerializationError, ServerConnectionException, ServerlessHandler, ServerlessHandlerEventSources, SlowSql, SpanEventAggregator, SqlSampler, SqlTrace, StartupLogger, Stats, StatsEngine, StatsHash, SyntheticsEventAggregator, SyntheticsMonitor, TimestampSampledBuffer, TraceContextPayload, Tracer, Transaction, TransactionEventAggregator, TransactionEventRecorder, TransactionMetrics, TransactionSampler, TransactionSqlData, UnrecoverableAgentException, UnrecoverableServerException, UtilizationData, WorkerLoop
Recording custom metrics collapse
- SUPPORTABILITY_INCREMENT_METRIC =
'Supportability/API/increment_metric'.freeze
Trace and Entity metadata collapse
- TRACE_ID_KEY =
'trace.id'.freeze
- SPAN_ID_KEY =
'span.id'.freeze
- ENTITY_NAME_KEY =
'entity.name'.freeze
- ENTITY_TYPE_KEY =
'entity.type'.freeze
- ENTITY_GUID_KEY =
'entity.guid'.freeze
- HOSTNAME_KEY =
'hostname'.freeze
- ENTITY_TYPE =
'SERVICE'.freeze
Constant Summary collapse
- UNKNOWN_METRIC =
placeholder name used when we cannot determine a transaction’s name
'(unknown)'.freeze
- LLM_FEEDBACK_MESSAGE =
'LlmFeedbackMessage'
- AUTOMATIC_TRACER_MAX_ATTEMPTS =
give the observed app time to load the code that automatic tracers have been configured for
60
Constants included from SupportabilityHelper
SupportabilityHelper::API_SUPPORTABILITY_METRICS, SupportabilityHelper::API_SUPPORTABILITY_PREFIX
Instance Attribute Summary collapse
-
#error_group_callback ⇒ Object
readonly
60 = try about twice a second for 30 seconds.
- #llm_token_count_callback ⇒ Object readonly
Recording custom metrics collapse
-
#base_name(klass_name) ⇒ Object
see ActiveSupport::Inflector.demodulize.
-
#increment_metric(metric_name, amount = 1) ⇒ Object
Increment a simple counter metric.
- #record_instrumentation_invocation(library) ⇒ Object
-
#record_metric(metric_name, value) ⇒ Object
Record a value for the given metric name.
- #record_metric_once(metric_name, value = 0.0) ⇒ Object
Recording custom errors collapse
-
#ignore_error_filter(&block) ⇒ Object
Set a filter to be applied to errors that the Ruby agent will track.
-
#notice_error(exception, options = {}) ⇒ Object
Send an error to New Relic.
-
#set_error_group_callback(callback_proc) ⇒ Object
Set a callback proc for determining an error’s error group name.
Recording custom Insights events collapse
-
#record_custom_event(event_type, event_attrs) ⇒ Object
Record a custom event to be sent to New Relic Insights.
-
#record_llm_feedback_event(trace_id:, rating:, category: nil, message: nil, metadata: NewRelic::EMPTY_HASH) ⇒ Object
Records user feedback events for LLM applications.
LLM callbacks collapse
-
#set_llm_token_count_callback(callback_proc) ⇒ Object
Set a callback proc for calculating ‘token_count` attributes for LlmEmbedding and LlmChatCompletionMessage events.
Manual agent configuration and startup/shutdown collapse
-
#add_instrumentation(file_pattern) ⇒ Object
Add instrumentation files to the agent.
-
#after_fork(options = {}) ⇒ Object
Register this method as a callback for processes that fork jobs.
-
#drop_buffered_data ⇒ Object
Clear out any data the agent has buffered but has not yet transmitted to the collector.
-
#manual_start(options = {}) ⇒ Object
Call this to manually start the agent in situations where the agent does not auto-start.
-
#require_test_helper ⇒ Object
Require agent testing helper methods.
-
#set_sql_obfuscator(type = :replace, &block) ⇒ Object
This method sets the block sent to this method as a sql obfuscator.
-
#shutdown(options = {}) ⇒ Object
Shutdown the agent.
Ignoring or excluding data collapse
-
#disable_all_tracing ⇒ Object
Yield to the block without collecting any metrics or traces in any of the subsequent calls.
-
#disable_sql_recording ⇒ Object
This method sets the state of sql recording in the transaction sampler feature.
-
#ignore_apdex ⇒ Object
This method disables the recording of Apdex metrics in the current transaction.
-
#ignore_enduser ⇒ Object
This method disables browser monitoring javascript injection in the current transaction.
-
#ignore_transaction ⇒ Object
This method disables the recording of the current transaction.
Adding custom attributes to traces collapse
-
#add_custom_attributes(params) ⇒ Object
Add attributes to the transaction trace, Insights Transaction event, and any traced errors recorded for the current transaction.
-
#add_custom_log_attributes(params) ⇒ Object
Add global custom attributes to log events for the current agent instance.
-
#add_custom_span_attributes(params) ⇒ Object
Add custom attributes to the span event for the current span.
- #add_new_segment_attributes(params, segment) ⇒ Object
-
#set_user_id(user_id) ⇒ Object
Set the user id for the current transaction.
Transaction naming collapse
-
#get_transaction_name ⇒ Object
Get the name of the current running transaction.
-
#set_transaction_name(name, options = {}) ⇒ Object
Set the name of the current running transaction.
Trace and Entity metadata collapse
-
#linking_metadata ⇒ Object
Returns a new hash containing trace and entity metadata that can be used to relate data to a trace or to an entity in APM.
Manual browser monitoring configuration collapse
-
#browser_timing_header(nonce = nil) ⇒ Object
This method returns a string suitable for inclusion in a page - known as ‘manual instrumentation’ for Real User Monitoring.
Class Method Summary collapse
- .add_automatic_method_tracers(arr) ⇒ Object private
-
.add_tracers_once_methods_are_defined(notations) ⇒ Object
private
spawn a thread that will attempt to establish a tracer for each of the configured methods.
-
.prep_tracer_for(fully_qualified_method_notation) ⇒ Object
private
returns ‘true` if the notation string has either been successfully processed or raised an error during processing.
Instance Method Summary collapse
- #add_deferred_method_tracers_now ⇒ Object private
-
#add_or_defer_method_tracer(receiver, method_name, metric_name, options) ⇒ Object
A third-party class may call add_method_tracer before the agent is initialized; these methods enable us to defer these calls until we have started up and can process them.
-
#agent ⇒ Object
(also: #instance)
The singleton Agent instance.
-
#agent=(new_instance) ⇒ Object
:nodoc:.
- #config ⇒ Object
-
#logger ⇒ Object
Primary interface to logging is fronted by this accessor Access via ::NewRelic::Agent.logger.
- #logger=(log) ⇒ Object
-
#notify(event_type, *args) ⇒ Object
Fire an event of the specified
event_type
, passing it an the givenargs
to any registered handlers. -
#reset_config ⇒ Object
For testing Important that we don’t change the instance or we orphan callbacks.
-
#subscribe(event_type, &handler) ⇒ Object
Subscribe to events of
event_type
, calling the givenhandler
when one is sent. -
#tl_is_execution_traced? ⇒ Boolean
Check to see if we are capturing metrics currently on this thread.
-
#with_database_metric_name(model, method = nil, product = nil, &block) ⇒ Object
Yield to a block that is run with a database metric name context.
Methods included from SupportabilityHelper
record_api_supportability_metric, valid_api_argument_class?
Instance Attribute Details
#error_group_callback ⇒ Object (readonly)
60 = try about twice a second for 30 seconds
120 121 122 |
# File 'lib/new_relic/agent.rb', line 120 def error_group_callback @error_group_callback end |
#llm_token_count_callback ⇒ Object (readonly)
121 122 123 |
# File 'lib/new_relic/agent.rb', line 121 def llm_token_count_callback @llm_token_count_callback end |
Class Method Details
.add_automatic_method_tracers(arr) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
174 175 176 177 178 179 180 181 182 183 |
# File 'lib/new_relic/agent.rb', line 174 def self.add_automatic_method_tracers(arr) return unless arr return arr if arr.respond_to?(:empty?) && arr.empty? arr = arr.split(/\s*,\s*/) if arr.is_a?(String) add_tracers_once_methods_are_defined(arr.dup) arr end |
.add_tracers_once_methods_are_defined(notations) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
spawn a thread that will attempt to establish a tracer for each of the configured methods. the thread will continue to keep trying with each tracer until one of the following happens:
- the tracer is successfully established
- the configured method string couldn't be parsed
- establishing a tracer for a successfully parsed string failed
- the maximum number of attempts has been reached
the thread will only be spawned once per agent initialization, to account for configuration reloading scenarios.
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 |
# File 'lib/new_relic/agent.rb', line 196 def self.add_tracers_once_methods_are_defined(notations) # this class method can be invoked multiple times at agent startup, so # we return asap here instead of using a traditional memoization of # waiting for the method's body to finish being executed if defined?(@add_tracers_once_methods_are_defined) return else @add_tracers_once_methods_are_defined = true end Thread.new do AUTOMATIC_TRACER_MAX_ATTEMPTS.times do notations.delete_if { |notation| prep_tracer_for(notation) } break if notations.empty? sleep 0.5 end end end |
.prep_tracer_for(fully_qualified_method_notation) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
returns ‘true` if the notation string has either been successfully processed or raised an error during processing. returns `false` if the string seems good but the (customer) code to be traced has not yet been loaded into the Ruby VM
223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 |
# File 'lib/new_relic/agent.rb', line 223 def self.prep_tracer_for(fully_qualified_method_notation) delimiters = fully_qualified_method_notation.scan(/\.|#/) raise AutomaticTracerParseException.new("Expected exactly one '.' or '#' delimiter.") unless delimiters.size == 1 delimiter = delimiters.first namespace, method_name = fully_qualified_method_notation.split(delimiter) unless namespace && !namespace.empty? raise AutomaticTracerParseException.new("Nothing found to the left of the #{delimiter} delimiter.") end unless method_name && !method_name.empty? raise AutomaticTracerParseException.new("Nothing found to the right of the #{delimiter} delimiter.") end begin klass = ::NewRelic::LanguageSupport.constantize(namespace) return false unless klass klass_to_trace = delimiter.eql?('.') ? klass.singleton_class : klass add_or_defer_method_tracer(klass_to_trace, method_name, nil, {}) rescue StandardError => e raise AutomaticTracerTraceException.new("#{e.class} - #{e.}") end true rescue AutomaticTracerParseException => e NewRelic::Agent.logger.error('Unable to parse out a usable method name to trace. Expected a valid, fully ' \ "qualified method notation. Got: '#{fully_qualified_method_notation}'. " \ "Error: #{e.}") true rescue AutomaticTracerTraceException => e NewRelic::Agent.logger.error('Unable to automatically apply a tracer to method ' \ "'#{fully_qualified_method_notation}'. Error: #{e.}") true end |
Instance Method Details
#add_custom_attributes(params) ⇒ Object
Add attributes to the transaction trace, Insights Transaction event, and any traced errors recorded for the current transaction.
If Browser Monitoring is enabled, and the browser_monitoring.attributes.enabled configuration setting is true, these custom attributes will also be present in the script injected into the response body, making them available on Insights PageView events.
803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 |
# File 'lib/new_relic/agent.rb', line 803 def add_custom_attributes(params) # THREAD_LOCAL_ACCESS record_api_supportability_metric(:add_custom_attributes) unless params.is_a?(Hash) ::NewRelic::Agent.logger.warn("Bad argument passed to #add_custom_attributes. Expected Hash but got #{params.class}") return end if NewRelic::Agent.agent&.serverless? ::NewRelic::Agent.logger.warn('Custom attributes are not supported in serverless mode') return end Transaction.tl_current&.add_custom_attributes(params) segment = ::NewRelic::Agent::Tracer.current_segment add_new_segment_attributes(params, segment) if segment end |
#add_custom_log_attributes(params) ⇒ Object
Add global custom attributes to log events for the current agent instance. As these attributes are global to the agent instance, they will be attached to all log events generated by the agent, and this methods usage isn’t suitable for setting dynamic values.
883 884 885 886 887 888 889 890 891 |
# File 'lib/new_relic/agent.rb', line 883 def add_custom_log_attributes(params) record_api_supportability_metric(:add_custom_log_attributes) if params.is_a?(Hash) NewRelic::Agent.agent.log_event_aggregator.add_custom_attributes(params) else NewRelic::Agent.logger.warn("Bad argument passed to #add_custom_log_attributes. Expected Hash but got #{params.class}.") end end |
#add_custom_span_attributes(params) ⇒ Object
Add custom attributes to the span event for the current span. Attributes will be visible on spans in the New Relic Distributed Tracing UI and on span events in New Relic Insights.
Custom attributes will not be transmitted when high_security
setting is enabled or custom_attributes
setting is disabled.
842 843 844 845 846 847 848 849 850 851 852 |
# File 'lib/new_relic/agent.rb', line 842 def add_custom_span_attributes(params) record_api_supportability_metric(:add_custom_span_attributes) if params.is_a?(Hash) if segment = NewRelic::Agent::Tracer.current_segment segment.add_custom_attributes(params) end else ::NewRelic::Agent.logger.warn("Bad argument passed to #add_custom_span_attributes. Expected Hash but got #{params.class}") end end |
#add_deferred_method_tracers_now ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
259 260 261 262 263 264 265 266 267 |
# File 'lib/new_relic/agent.rb', line 259 def add_deferred_method_tracers_now @tracer_lock.synchronize do @tracer_queue.each do |receiver, method_name, metric_name, | receiver.send(:_nr_add_method_tracer_now, method_name, metric_name, ) end @tracer_queue = [] end end |
#add_instrumentation(file_pattern) ⇒ Object
Add instrumentation files to the agent. The argument should be a glob matching ruby scripts which will be executed at the time instrumentation is loaded. Since instrumentation is not loaded when the agent is not running it’s better to use this method to register instrumentation than just loading the files directly, although that probably also works.
665 666 667 668 |
# File 'lib/new_relic/agent.rb', line 665 def add_instrumentation(file_pattern) record_api_supportability_metric(:add_instrumentation) NewRelic::Control.instance.add_instrumentation(file_pattern) end |
#add_new_segment_attributes(params, segment) ⇒ Object
821 822 823 824 825 826 827 |
# File 'lib/new_relic/agent.rb', line 821 def add_new_segment_attributes(params, segment) # Make sure not to override existing segment-level custom attributes segment_custom_keys = segment.attributes.custom_attributes.keys.map(&:to_sym) segment.add_custom_attributes(params.reject do |k, _v| segment_custom_keys.include?(k.to_sym) if k.respond_to?(:to_sym) # param keys can be integers end) end |
#add_or_defer_method_tracer(receiver, method_name, metric_name, options) ⇒ Object
A third-party class may call add_method_tracer before the agent is initialized; these methods enable us to defer these calls until we have started up and can process them.
161 162 163 164 165 166 167 168 169 170 171 |
# File 'lib/new_relic/agent.rb', line 161 def add_or_defer_method_tracer(receiver, method_name, metric_name, ) @tracer_lock.synchronize do [:code_information] = NewRelic::Agent::MethodTracerHelpers.code_information(receiver, method_name) if @agent receiver.send(:_nr_add_method_tracer_now, method_name, metric_name, ) else @tracer_queue << [receiver, method_name, metric_name, ] end end end |
#after_fork(options = {}) ⇒ Object
Register this method as a callback for processes that fork jobs.
If the master/parent connects to the agent prior to forking the agent in the forked process will use that agent_run. Otherwise the forked process will establish a new connection with the server.
Use this especially when you fork the process to run background jobs or other work. If you are doing this with a web dispatcher that forks worker processes then you will need to force the agent to reconnect, which it won’t do by default. Passenger and Unicorn are already handled, nothing special needed for them.
Options:
-
:force_reconnect => true
to force the spawned process to establish a new connection, such as when forking a long running process. The default is false–it will only connect to the server if the parent had not connected. -
:keep_retrying => false
if we try to initiate a new connection, this tells me to only try it once so this method returns quickly if there is some kind of latency with the server.
628 629 630 631 632 |
# File 'lib/new_relic/agent.rb', line 628 def after_fork( = {}) record_api_supportability_metric(:after_fork) # the following line needs else branch coverage agent.after_fork() if agent # rubocop:disable Style/SafeNavigation end |
#agent ⇒ Object Also known as: instance
The singleton Agent instance. Used internally.
132 133 134 135 136 137 138 |
# File 'lib/new_relic/agent.rb', line 132 def agent # :nodoc: return @agent if @agent NewRelic::Agent.logger.debug("Agent unavailable as it hasn't been started.") NewRelic::Agent.logger.debug(caller.join("\n")) nil end |
#agent=(new_instance) ⇒ Object
:nodoc:
140 141 142 143 |
# File 'lib/new_relic/agent.rb', line 140 def agent=(new_instance) # :nodoc: @agent = new_instance add_deferred_method_tracers_now end |
#base_name(klass_name) ⇒ Object
see ActiveSupport::Inflector.demodulize
321 322 323 324 325 |
# File 'lib/new_relic/agent.rb', line 321 def base_name(klass_name) return klass_name unless ridx = klass_name.rindex('::') klass_name[(ridx + 2), klass_name.length] end |
#browser_timing_header(nonce = nil) ⇒ Object
This method returns a string suitable for inclusion in a page - known as ‘manual instrumentation’ for Real User Monitoring. Can return either a script tag with associated javascript, or in the case of disabled Real User Monitoring, an empty string
This is the header string - it should be placed as high in the page as is reasonably possible - that is, before any style or javascript inclusions, but after any header-related meta tags
In previous agents there was a corresponding footer required, but all the work is now done by this single method.
1049 1050 1051 1052 1053 1054 1055 |
# File 'lib/new_relic/agent.rb', line 1049 def browser_timing_header(nonce = nil) record_api_supportability_metric(:browser_timing_header) return EMPTY_STR unless agent agent.javascript_instrumentor.browser_timing_header(nonce) end |
#config ⇒ Object
269 270 271 |
# File 'lib/new_relic/agent.rb', line 269 def config @config ||= Configuration::Manager.new end |
#disable_all_tracing ⇒ Object
Yield to the block without collecting any metrics or traces in any of the subsequent calls. If executed recursively, will keep track of the first entry point and turn on tracing again after leaving that block. This uses the thread local Tracer::State.
741 742 743 744 745 746 747 748 749 750 751 752 |
# File 'lib/new_relic/agent.rb', line 741 def disable_all_tracing record_api_supportability_metric(:disable_all_tracing) return yield unless agent begin agent.push_trace_execution_flag(false) yield ensure agent.pop_trace_execution_flag end end |
#disable_sql_recording ⇒ Object
This method sets the state of sql recording in the transaction sampler feature. Within the given block, no sql will be recorded
usage:
NewRelic::Agent.disable_sql_recording do
...
end
765 766 767 768 769 770 771 772 773 774 775 776 |
# File 'lib/new_relic/agent.rb', line 765 def disable_sql_recording record_api_supportability_metric(:disable_sql_recording) return yield unless agent state = agent.set_record_sql(false) begin yield ensure agent.set_record_sql(state) end end |
#drop_buffered_data ⇒ Object
Clear out any data the agent has buffered but has not yet transmitted to the collector.
650 651 652 653 654 |
# File 'lib/new_relic/agent.rb', line 650 def drop_buffered_data # the following line needs else branch coverage agent.drop_buffered_data if agent # rubocop:disable Style/SafeNavigation record_api_supportability_metric(:drop_buffered_data) end |
#get_transaction_name ⇒ Object
Get the name of the current running transaction. This is useful if you want to modify the default name.
952 953 954 955 956 957 958 959 960 |
# File 'lib/new_relic/agent.rb', line 952 def get_transaction_name # THREAD_LOCAL_ACCESS record_api_supportability_metric(:get_transaction_name) txn = Transaction.tl_current if txn namer = Instrumentation::ControllerInstrumentation::TransactionNamer txn.best_name.sub(Regexp.new("\\A#{Regexp.escape(namer.prefix_for_category(txn))}"), '') end end |
#ignore_apdex ⇒ Object
This method disables the recording of Apdex metrics in the current transaction.
719 720 721 722 |
# File 'lib/new_relic/agent.rb', line 719 def ignore_apdex record_api_supportability_metric(:ignore_apdex) NewRelic::Agent::Transaction.tl_current&.ignore_apdex! end |
#ignore_enduser ⇒ Object
This method disables browser monitoring javascript injection in the current transaction.
729 730 731 732 |
# File 'lib/new_relic/agent.rb', line 729 def ignore_enduser record_api_supportability_metric(:ignore_enduser) NewRelic::Agent::Transaction.tl_current&.ignore_enduser! end |
#ignore_error_filter(&block) ⇒ Object
Set a filter to be applied to errors that the Ruby agent will track. The block should evaluate to the exception to track (which could be different from the original exception) or nil to ignore this exception.
The block is yielded to with the exception to filter.
Return the new block or the existing filter Proc if no block is passed.
365 366 367 368 369 370 371 372 373 |
# File 'lib/new_relic/agent.rb', line 365 def ignore_error_filter(&block) record_api_supportability_metric(:ignore_error_filter) if block NewRelic::Agent::ErrorCollector.ignore_error_filter = block else NewRelic::Agent::ErrorCollector.ignore_error_filter end end |
#ignore_transaction ⇒ Object
This method disables the recording of the current transaction. No metrics, traced errors, transaction traces, Insights events, slow SQL traces, or RUM injection will happen for this transaction.
709 710 711 712 |
# File 'lib/new_relic/agent.rb', line 709 def ignore_transaction record_api_supportability_metric(:ignore_transaction) NewRelic::Agent::Transaction.tl_current&.ignore! end |
#increment_metric(metric_name, amount = 1) ⇒ Object
Increment a simple counter metric.
metric_name
should follow a slash separated path convention. Application specific metrics should begin with “Custom/”.
This method is safe to use from any thread.
338 339 340 341 342 343 344 345 346 347 348 |
# File 'lib/new_relic/agent.rb', line 338 def increment_metric(metric_name, amount = 1) # THREAD_LOCAL_ACCESS return unless agent if amount == 1 metrics = [metric_name, SUPPORTABILITY_INCREMENT_METRIC] agent.stats_engine.tl_record_unscoped_metrics(metrics) { |stats| stats.increment_count } else agent.stats_engine.tl_record_unscoped_metrics(metric_name) { |stats| stats.increment_count(amount) } agent.stats_engine.tl_record_unscoped_metrics(SUPPORTABILITY_INCREMENT_METRIC) { |stats| stats.increment_count } end end |
#linking_metadata ⇒ Object
Returns a new hash containing trace and entity metadata that can be used to relate data to a trace or to an entity in APM.
This hash includes:
-
trace.id - The current trace id, if there is a current trace id. This value may be omitted.
-
span.id - The current span id, if there is a current span. This value may be omitted.
-
entity.name - The name of the current application. This is read from the
app_name
key in your config. If there are multiple application names, the first one is used. -
entity.type - The entity type is hardcoded to the string ‘SERVICE’.
-
entity.guid - The guid of the current entity.
-
hostname - The fully qualified hostname.
1022 1023 1024 1025 1026 1027 |
# File 'lib/new_relic/agent.rb', line 1022 def = Hash.new LinkingMetadata.() LinkingMetadata.() end |
#logger ⇒ Object
Primary interface to logging is fronted by this accessor Access via ::NewRelic::Agent.logger
149 150 151 |
# File 'lib/new_relic/agent.rb', line 149 def logger @logger || StartupLogger.instance end |
#logger=(log) ⇒ Object
153 154 155 |
# File 'lib/new_relic/agent.rb', line 153 def logger=(log) @logger = log end |
#manual_start(options = {}) ⇒ Object
Call this to manually start the agent in situations where the agent does not auto-start.
When the app environment loads, so does the agent. However, the agent will only connect to the service if a web front-end is found. If you want to selectively monitor ruby processes that don’t use web plugins, then call this method in your code and the agent will fire up and start reporting to the service.
Options are passed in as overrides for values in the newrelic.yml, such as app_name. In addition, the option log
will take a logger that will be used instead of the standard file logger. The setting for the newrelic.yml section to use (ie, RAILS_ENV) can be overridden with an :env argument.
596 597 598 599 600 601 |
# File 'lib/new_relic/agent.rb', line 596 def manual_start( = {}) raise 'Options must be a hash' unless Hash === NewRelic::Control.instance.init_plugin({:agent_enabled => true, :sync_startup => true}.merge()) record_api_supportability_metric(:manual_start) end |
#notice_error(exception, options = {}) ⇒ Object
Send an error to New Relic.
Any option keys other than the ones listed here are treated as :custom_params
.
Note: Previous versions of the agent allowed passing :request_params
, but those are now ignored. If you need to record the request parameters, call this method inside a transaction or pass the information in :custom_params
.
Most of the time, you do not need to specify the :uri
or :metric
options; only pass them if you are calling notice_error
outside a transaction.
403 404 405 406 407 408 |
# File 'lib/new_relic/agent.rb', line 403 def notice_error(exception, = {}) record_api_supportability_metric(:notice_error) Transaction.notice_error(exception, ) nil # don't return a noticed error data structure. it can only hurt. end |
#notify(event_type, *args) ⇒ Object
Fire an event of the specified event_type
, passing it an the given args
to any registered handlers.
989 990 991 992 993 |
# File 'lib/new_relic/agent.rb', line 989 def notify(event_type, *args) agent.events.notify(event_type, *args) rescue NewRelic::Agent.logger.debug('Ignoring exception during %p event notification' % [event_type]) end |
#record_custom_event(event_type, event_attrs) ⇒ Object
Record a custom event to be sent to New Relic Insights. The recorded event will be buffered in memory until the next time the agent sends data to New Relic’s servers.
If you want to be able to tie the information recorded via this call back to the web request or background job that it happened in, you may want to instead use the add_custom_attributes API call to attach attributes to the Transaction event that will automatically be generated for the request.
A timestamp will be automatically added to the recorded event when this method is called.
479 480 481 482 483 484 485 486 487 |
# File 'lib/new_relic/agent.rb', line 479 def record_custom_event(event_type, event_attrs) record_api_supportability_metric(:record_custom_event) if agent && NewRelic::Agent.config[:'custom_insights_events.enabled'] agent.custom_event_aggregator.record(event_type, event_attrs) end nil end |
#record_instrumentation_invocation(library) ⇒ Object
316 317 318 |
# File 'lib/new_relic/agent.rb', line 316 def record_instrumentation_invocation(library) record_metric_once("Supportability/#{library}/Invoked") end |
#record_llm_feedback_event(trace_id:, rating:, category: nil, message: nil, metadata: NewRelic::EMPTY_HASH) ⇒ Object
Records user feedback events for LLM applications. This API must pass the current trace id as a parameter, which can be obtained using:
NewRelic::Agent::Tracer.current_trace_id
511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 |
# File 'lib/new_relic/agent.rb', line 511 def record_llm_feedback_event(trace_id:, rating:, category: nil, message: nil, metadata: NewRelic::EMPTY_HASH) record_api_supportability_metric(:record_llm_feedback_event) unless NewRelic::Agent.config[:'distributed_tracing.enabled'] return NewRelic::Agent.logger.error('Distributed tracing must be enabled to record LLM feedback') end = { 'trace_id': trace_id, 'rating': , 'category': category, 'message': , 'id': NewRelic::Agent::GuidGenerator.generate_guid, 'ingest_source': NewRelic::Agent::Llm::LlmEvent::INGEST_SOURCE } .merge!() unless .empty? NewRelic::Agent.record_custom_event(LLM_FEEDBACK_MESSAGE, ) rescue ArgumentError raise rescue => exception NewRelic::Agent.logger.error('record_llm_feedback_event', exception) end |
#record_metric(metric_name, value) ⇒ Object
Record a value for the given metric name.
This method should be used to record event-based metrics such as method calls that are associated with a specific duration or magnitude.
metric_name
should follow a slash separated path convention. Application specific metrics should begin with “Custom/”.
value
should be either a single Numeric value representing the duration/ magnitude of the event being recorded, or a Hash containing :count, :total, :min, :max, and :sum_of_squares keys. The latter form is useful for recording pre-aggregated metrics collected externally.
This method is safe to use from any thread.
297 298 299 300 301 302 303 304 305 306 307 308 |
# File 'lib/new_relic/agent.rb', line 297 def record_metric(metric_name, value) # THREAD_LOCAL_ACCESS record_api_supportability_metric(:record_metric) return unless agent if value.is_a?(Hash) stats = NewRelic::Agent::Stats.new value = stats.hash_merge(value) end agent.stats_engine.tl_record_unscoped_metrics(metric_name, value) end |
#record_metric_once(metric_name, value = 0.0) ⇒ Object
310 311 312 313 314 |
# File 'lib/new_relic/agent.rb', line 310 def record_metric_once(metric_name, value = 0.0) return unless @metrics_already_recorded.add?(metric_name) record_metric(metric_name, value) end |
#require_test_helper ⇒ Object
Require agent testing helper methods
673 674 675 676 |
# File 'lib/new_relic/agent.rb', line 673 def require_test_helper record_api_supportability_metric(:require_test_helper) require File.('../../../test/agent_helper', __FILE__) end |
#reset_config ⇒ Object
For testing Important that we don’t change the instance or we orphan callbacks
275 276 277 |
# File 'lib/new_relic/agent.rb', line 275 def reset_config config.reset_to_defaults end |
#set_error_group_callback(callback_proc) ⇒ Object
Set a callback proc for determining an error’s error group name
Typically this method should be called only once to set a callback for use with all noticed errors. If it is called multiple times, each new callback given will replace the old one.
The proc will be called with a single hash as its input argument and is expected to return a string representing the desired error group.
see docs.newrelic.com/docs/errors-inbox/errors-inbox/#groups
The hash passed to the customer defined callback proc has the following keys:
:error => The Ruby error class instance, likely inheriting from
StandardError. Call `#class`, `#message`, and `#backtrace` on
the error object to retrieve the error's class, message, and
backtrace.
:customAttributes => Any customer defined custom attributes that have been
associated with the current transaction.
:‘request.uri’ => The current request URI if available :‘http.statusCode’ => The HTTP status code (200, 404, etc.) if available :‘http.method’ => The HTTP method (GET, PUT, etc.) if available :‘error.expected’ => Whether (true) or not (false) the error was expected :options => The options hash passed to ‘NewRelic::Agent.notice_error`
440 441 442 443 444 445 446 447 448 449 |
# File 'lib/new_relic/agent.rb', line 440 def set_error_group_callback(callback_proc) unless callback_proc.is_a?(Proc) NewRelic::Agent.logger.error("#{self}.#{__method__}: expected an argument of type Proc, " \ "got #{callback_proc.class}") return end record_api_supportability_metric(:set_error_group_callback) @error_group_callback = callback_proc end |
#set_llm_token_count_callback(callback_proc) ⇒ Object
Set a callback proc for calculating ‘token_count` attributes for LlmEmbedding and LlmChatCompletionMessage events
This method should be called only once to set a callback for use with all LLM token calculations. If it is called multiple times, each new callback will replace the old one.
The proc will be called with a single hash as its input argument and must return an Integer representing the number of tokens used for that particular prompt, completion message, or embedding. Values less than or equal to 0 will not be attached to an event.
The hash has the following keys:
:model => [String] The name of the LLM model :content => [String] The message content or prompt
564 565 566 567 568 569 570 571 572 573 |
# File 'lib/new_relic/agent.rb', line 564 def set_llm_token_count_callback(callback_proc) unless callback_proc.is_a?(Proc) NewRelic::Agent.logger.error("#{self}.#{__method__}: expected an argument of type Proc, " \ "got #{callback_proc.class}") return end record_api_supportability_metric(:set_llm_token_count_callback) @llm_token_count_callback = callback_proc end |
#set_sql_obfuscator(type = :replace, &block) ⇒ Object
This method sets the block sent to this method as a sql obfuscator. The block will be called with a single String SQL statement to obfuscate. The method must return the obfuscated String SQL. If chaining of obfuscators is required, use type = :before or :after
type = :before, :replace, :after
Example:
NewRelic::Agent.set_sql_obfuscator(:replace) do |sql|
my_obfuscator(sql)
end
694 695 696 697 |
# File 'lib/new_relic/agent.rb', line 694 def set_sql_obfuscator(type = :replace, &block) record_api_supportability_metric(:set_sql_obfuscator) NewRelic::Agent::Database.set_sql_obfuscator(type, &block) end |
#set_transaction_name(name, options = {}) ⇒ Object
Set the name of the current running transaction. The agent will apply a reasonable default based on framework routing, but in cases where this is insufficient, this can be used to manually control the name of the transaction.
The category of transaction can be specified via the :category
option. The following are the only valid categories:
-
:category => :controller
indicates that this is a controller action and will appear with all the other actions. -
:category => :task
indicates that this is a background task and will show up in New Relic with other background tasks instead of in the controllers list -
:category => :middleware
if you are instrumenting a rack middleware call. The:name
is optional, useful if you have more than one potential transaction in the #call. -
:category => :uri
indicates that this is a web transaction whose name is a normalized URI, where ‘normalized’ means the URI does not have any elements with data in them such as in many REST URIs.
The default category is the same as the running transaction.
942 943 944 945 |
# File 'lib/new_relic/agent.rb', line 942 def set_transaction_name(name, = {}) record_api_supportability_metric(:set_transaction_name) Transaction.set_overriding_transaction_name(name, [:category]) end |
#set_user_id(user_id) ⇒ Object
Set the user id for the current transaction. When present, this value will be included in the agent attributes for transaction and error events as ‘enduser.id’.
898 899 900 901 902 903 904 905 906 907 908 909 910 911 |
# File 'lib/new_relic/agent.rb', line 898 def set_user_id(user_id) record_api_supportability_metric(:set_user_id) if user_id.nil? || user_id.empty? ::NewRelic::Agent.logger.warn('NewRelic::Agent.set_user_id called with a nil or empty user id.') return end default_destinations = NewRelic::Agent::AttributeFilter::DST_TRANSACTION_TRACER | NewRelic::Agent::AttributeFilter::DST_TRANSACTION_EVENTS | NewRelic::Agent::AttributeFilter::DST_ERROR_COLLECTOR NewRelic::Agent::Transaction.add_agent_attribute(:'enduser.id', user_id, default_destinations) end |
#shutdown(options = {}) ⇒ Object
Shutdown the agent. Call this before exiting. Sends any queued data and kills the background thread.
641 642 643 644 |
# File 'lib/new_relic/agent.rb', line 641 def shutdown( = {}) record_api_supportability_metric(:shutdown) agent&.shutdown end |
#subscribe(event_type, &handler) ⇒ Object
Subscribe to events of event_type
, calling the given handler
when one is sent.
983 984 985 |
# File 'lib/new_relic/agent.rb', line 983 def subscribe(event_type, &handler) agent.events.subscribe(event_type, &handler) end |
#tl_is_execution_traced? ⇒ Boolean
Check to see if we are capturing metrics currently on this thread.
781 782 783 |
# File 'lib/new_relic/agent.rb', line 781 def tl_is_execution_traced? NewRelic::Agent::Tracer.state.is_execution_traced? end |
#with_database_metric_name(model, method = nil, product = nil, &block) ⇒ Object
Yield to a block that is run with a database metric name context. This means the Database instrumentation will use this for the metric name if it does not otherwise know about a model. This is reentrant.
identify the operation with.
973 974 975 976 977 978 979 |
# File 'lib/new_relic/agent.rb', line 973 def with_database_metric_name(model, method = nil, product = nil, &block) if txn = Tracer.current_transaction txn.with_database_metric_name(model, method, product, &block) else yield end end |