-
Guard against NULL values in the methodinfo table for tracepoint method entry and return events
-
Ruby 3.1.1 support
-
Build by default with debug symbols enabled
-
Implement conditional hooks loading to facilitate debugging
-
Guard against multiple prepends of tracer hooks
-
Handle the filter case where a transient thread has the same thread group as the trace context thread
-
Expose a Apm::Tracer.synchronize{} API with a single shared mutex instance for the profiler to use for init purposes in shims
-
Fix static batch buffer overrun by 1 byte for SQL query specific events that were exactly 4033 bytes big
-
Support TCP mode for dispatch
-
Handle case where the exception message in rb_rg_log_silenced_error can be undefined
-
Log exceptions raised and swallowed by rb_protect in the timer and dispatch threads
-
Handle edge case in blacklist parsing of .NET style Foo::bar
-
Introduce support for parsing live blacklist entries (L- prefix) as well
-
Ensure that the trace context thread group can always be set (ensures 1:1 mapping of thread -> trace context)
-
Support Ruby 3
-
Fix LICENSE merge conflict
-
Remove the non-gated symbol table free of the builtin method translator and introduce RB_RG_TRACER_BUILTIN_METHODS_TRANSLATED as a constant
-
Open Source the profiler
-
Prevent rare shutdown segfault when freeing the builtin method translation table on GC finalization of the tracer instance
-
Also include LICENSE.bipbuffer and COPYING.rax in gemspec
-
Incorporate bipbuf copyright notice - github.com/willemt/bipbuffer
-
Support Hash query params for the httpclient hook by coercing the argument with .to_param, if the method is defined (github.com/MindscapeHQ/heroku-buildpack-raygun-apm/issues/6#issuecomment-809084318)
-
Fix an unitialized memory access path in rb_rg_blacklisted_method_p
-
Bump license to MIT and incorporate Rax copyright notice - github.com/antirez/rax/blob/master/COPYING
-
Guard against an nil URI value and improve test coverage
-
Fix bug in 1.0.76 where third party libraries are invisible it traces
-
Let sync / wait sources like sleep, mutex etc. be filtered out for deep stack library code as well
-
Fix segfault observed in Spree for the batch finalization path of events > MTU size but < 4kb
-
Blacklist Singleton, Dir and fix typo on Tempfile blacklist
-
Do not observe exceptions thrown from libraries when deeper than 1 shadow stack frame into a library
-
Let oversized events less than 4096 bytes encoded finalize the current batch and emit as a new batch, otherwise emit as raw UDP
-
Limiting profiling of third party libraries to being 1 method deep to improve performance
-
Attempt to reference the platform specific default blacklist overrides file locations as a fallback if PROTON_OVERRIDES_FILE is not set
-
Fix regression from: Ensure all of the supported hooks are evaluated at boot time
-
Ensure all of the supported hooks are evaluated at boot time
-
Introduce support for coercing mongodb client events to SQL extended events
-
Add config options PROTON_UDP_HOST and PROTON_UDP_PORT (DANGER!!!: security, private networks only!!!!)
-
Introduce support for Mutex#synchronize, Mutex#lock, Mutex#unlock and Mutex#sleep as synchronization method sources
-
Let Object#sleep be flagged as waiting for syncrhonization method source
-
Oust rb_rg_add_to_thread_group - does not work well on Windows
-
Beginnings of a task to trigger per ruby version and platform test suite runs on build
-
Prefer %p to log the trace context key in diagnostics as well
-
Let rb_rg_add_to_thread_group accept an explicit thread group argument
-
rb_rg_thread_group does not accept a tracer argument
-
Introduce additional logging around thread group retrieval
-
Add a log message right after trace context allocation for debug mode
-
Also include the execution context thread group and noop status in diagnostics output
-
No need to explicitly free the trace context pointer on the tracer as walking the symbol table of contexts to free it covers
-
Introduce additional logging context to debug the Windows trace context leaks and prefer rb_rg_trace_context_free to cleanup the context from the tracer struct on GC
-
Also log when the tracepoint was not stopped because the trace context was nullified
-
Include trace contexts in diagnostics output’
-
Let minimum agent version be 1.0.1190.0
-
Introduce support for inferring complex Agent versions via the GetAgentInfo control command
-
Fix typo in version.rb
-
Depend on Agent version 1.0.1186.0 (first release with thread started v2 support)
-
Implement support for hooking a select few potential high overhead C API (internal) methods without tracing RUBY_EVENT_C_CALL which has severe perf regressions; Implement specific Excon and HTTPClient libraries
-
Introduce support for noop on unsupported minimum agent version and print a warning to incentivate an Agent upgrade
-
Activate thread started v2
-
Fix typo
-
Add a unknown status fallback to the agent up check
-
Compile Darwin FAT binary build rubies with static libruby linking support to mirror semantics of the Linux builds already covered by rake-compiler-dock
-
Refactor the default blacklist entries and improve test coverage
-
Implement support for the more complex and identified edge case required black and whitelist operations during beta testing
-
Ensure we respect the entry frames IDed 1 that starts with Ruby to not be coerced as .NET fallback
-
Add support for a new blacklist syntax to handle Method# style filtering (non-namespaced class) - pending implementation of behaviour
-
Expose the internal radix tree lookups as API for unit testing
-
Further alignment on .NET syntax fallback support
-
Introduce black and whitelist support for native Ruby with fallback to .NET
-
Reduce noise for raygun4ruby (Rails only, pending Sidekiq testing)
-
Reduce noisy frames around the Redis integration
-
Let the profiler -> agent diagnostic check run on Tracer init for it to be an automatic as opposed to be a manual out of band process
-
Introduce support for tracking thread ancestry despite it not being natively supported by the Ruby VM
-
Check interrupts after thread sleep and define RG_SINK_THREAD_TICK_INTERVAL instead of an inline value
-
Prevent thread deadlock / indefinite sleep on shutdown via ruby_cleanup MRI core method by NOT scheduling or sleeping from an aborted or killed thread
-
Let standard library be considered a known library method source too
-
Remove Tracer#process_started callback as no need to emit process frequency on startup as it is emitted alongside each transaction now
-
Remove process_type command emission from prior to begin_transaction and on process boot, but maintain it for the async methodinfo table sync
-
Also set technology and process type fields on the begin transaction command
-
Support CT_EXCEPTION_THROWN_2 and formally remove exception thrown support
-
Introduce a Redis client hook
-
Add test case and wrapper frame presence for Net::HTTP specific HTTP OUT events
-
Improve test coverage of HTTP OUT events (pending specific httpclient and excon hooks)
-
Add a test case for method source and library frame classifications
-
Initial pass at supporting classification of known library specific frames
-
Also add an entrypoint and appropriate black and whitelist entries for HTTPClient
-
Also add an entrypoint and appropriate black and whitelist entries for HTTParty
-
Also add an entrypoint and appropriate black and whitelist entries for Excon
-
Also add an entrypoint and appropriate black and whitelist entries for rest-client
-
Also add an entrypoint and appropriate black and whitelist entries for multipart-post
-
Add library entry point wrapper coverage for Faraday (not at the frame level flags yet)
-
Implement a method specific blacklisted to compliment the existing namespace one
-
Guard against really large Ruby strings overflowing the int16 Raygun string length by assigning length to an intermediate long first and truncating thereafter
-
Let the shadow stack only track the VM stack up to a depth of 256 for deep nested stacks or recursive functions
-
Let the methodtable be included in Tracer#diagnostics as well
-
Introduce a reverse jitter buffer for the UDP output to ease pressure on intermediate OS buffers to reduce probability of drops between profiler and Agent
-
Gate the jitter buffer log output with the tracer debug log level at compile time
-
Introduce a jittered output buffer feature in the dispatcher thread to slow down filling up Kernel buffers for an Agent on the same host
-
Let the SO_SNDBUF socket option set mirror the batch packet size
-
Let batch packet size be reflected in Tracer::BATCH_PACKET_SIZE as well
-
Move the batch size constants up to the top of the protocol header (all constants grouped together)
-
Move sink_data to be the last member of the tracer struct
- Max methodinfo needle size should be 4kb (class) +
-
+ 4kb (method) + sentinel
-
Move struct members around a bit for better cache locality of reference
-
Also preserve method source for async method table sync
-
Guard against buffer overflow of the blacklist needle as well for exceptionally large methods
-
Add overflow checks for the encoded strings API as well
-
Add a few more missing GC guards in the tracer core
-
Add additional encoding and bipbuf stats for sink debugging
-
Introduce a Tracer#diagnostics method to aid with Gitlab debugging
-
Dispatch buffer bumped to 5MB (up from 1MB)
-
Add GC guards for strings passed into Event#[]= and within rb_rg_encode_string* variants as well
-
Let the encoder scratch buffer be much larger in order to accommodate potentially massive SQL queries from the SQL OUT events too
-
No need to mark the thread from a trace context as the VM will iterate all living threads explicitly for marking from GC roots
-
Extract a first class rg_thread_t to wrap Ruby threads and let the shadow stack be per thread
-
Let batches belong to sink data - 💥 any static globals to ensure a clean slate that could only come from Tracer alloc
-
Introduce support for configuring the profiler with an API key with the PROTON_API_KEY env var, passed through to the agent via the BEGIN_TRANSACTION command
-
Introduce support for tracer environments and implement an alternative (expensive) str based hashing of method paths for Rails development environment
-
Do not cache PID on HTTP OUT events to account for forked processes
-
Also reset the batch counter, sequence and pid in the UDP sink on fork
-
Let tracer instances be indexed by PID to play well with forking servers
-
Guard against shadow stack underflow errors which can happen when an exception raises
-
Combine blacklist and methodinfo tables (one less symbol table lookup on method entry)
-
Let the shadow stack be used for method return function ID lookups (saves a symbol table call)
-
Let errors never be pinned to the entrypoint frame (function ID 1)
-
Let the Tracer be able to track a singleton instance per request and plug that into the Net::HTTP hooks
-
Implement a better fallback for libraries like HTTParty which does not set request.uri
-
Blacklist RbConfig, Bundler, WeakRef, Singleton and OpenStruct
-
Let the encoder size assertions only be enabled in debug builds
-
Prefer a single global methodinfo table and synchronize writes to it