Learn how to use callbacks to persist your logs.
Trifle::Traces does not persist any data. I considered using similar approach as drivers in
Trifle::Stats, but I decided not to. While
Trifle::Stats handles persisting and retrieving data in the most optimal way and acts as a single point of access, retrieving log entries and referencing them is a broad topic and can be better handled on user level.
And therefore several callbacks are used that allows user to handle persistance in best possible way.
Whenever tracer is initialized,
liftoff callback is executed. Return value from last
liftoff callback is accessible as a
tracer.reference in next callbacks.
To provide updates during execution,
bump callback is executed on new
trace calls every
Once you finish tracing, calling
Trifle::Traces.tracer.wrapup! will trigger
Simple wrapup example
Sometimes you don't care about callbacks and all you want is to create a database record that will hold your tracer data.
Trifle::Traces.configure do |config| config.on(:wrapup) do |tracer| next if tracer.ignore entry = Entry.create( key: tracer.key, data: tracer.data, state: tracer.state ) end end
Here is more complex example with utilizing all 3 callbacks.
Trifle::Traces.configure do |config| config.bump_every = 5.seconds config.on(:liftoff) do |tracer| entry = Entry.create( key: tracer.key, data: tracer.data, state: tracer.state ) entry.id end config.on(:bump) do |tracer| entry = Entry.find_by(id: tracer.reference) next if entry.nil? entry.update( data: tracer.data, state: tracer.state ) end config.on(:wrapup) do |tracer| entry = Entry.find_by(id: tracer.reference) next if entry.nil? # Cleanup if ignoring if tracer.ignore entry.destroy next end entry.update( data: tracer.data, state: tracer.state ) end end