Hi! I'm working on improving the Scout integration for GraphQL-Ruby. My library sometimes spins up new Fibers, runs them for a while, then pauses them ... then resumes them again. I'd like a way to report the duration while the Fiber is running, but not while it's paused. I think the best approach here is to make two separate spans: one before the pause and one after it.
However, the catch is, the library doesn't know when (or where in the code) the Fiber will be paused. I can't wrap the before-part in a do ... end block -- instead, code runs ... then eventually it may yield. So I'm looking for a way to start a new span, then manually finish it when I observe that Fiber pause. Is there a supported way to do this?
For now, I'm going to use the internal implementation from .implement:
|
def self.instrument(type, name, options={}) # Takes a block |
|
layer = ScoutApm::Layer.new(type, name) |
|
layer.desc = options[:desc] if options[:desc] |
|
layer.subscopable! if options[:scope] |
|
|
|
req = ScoutApm::RequestManager.lookup |
|
req.start_layer(layer) |
|
req.ignore_children! if options[:ignore_children] |
|
|
|
begin |
|
yield |
|
ensure |
|
req.acknowledge_children! if options[:ignore_children] |
|
req.stop_layer |
|
end |
|
end |
Basically I'll separate those two parts -- before yield and after it -- and call them as needed. But if there's a better way, I'd like to use it! Thanks.
Hi! I'm working on improving the Scout integration for GraphQL-Ruby. My library sometimes spins up new Fibers, runs them for a while, then pauses them ... then resumes them again. I'd like a way to report the duration while the Fiber is running, but not while it's paused. I think the best approach here is to make two separate spans: one before the pause and one after it.
However, the catch is, the library doesn't know when (or where in the code) the Fiber will be paused. I can't wrap the before-part in a
do ... endblock -- instead, code runs ... then eventually it may yield. So I'm looking for a way to start a new span, then manually finish it when I observe that Fiber pause. Is there a supported way to do this?For now, I'm going to use the internal implementation from
.implement:scout_apm_ruby/lib/scout_apm/tracer.rb
Lines 24 to 39 in eebbc5f
Basically I'll separate those two parts -- before
yieldand after it -- and call them as needed. But if there's a better way, I'd like to use it! Thanks.