lib/instana/frameworks/roda.rb in instana-1.11.8-java vs lib/instana/frameworks/roda.rb in instana-1.12.0
- old
+ new
@@ -1,6 +1,47 @@
require "instana/rack"
+module Instana
+ module RodaPathTemplateExtractor
+ module RequestMethods
+ TERM = defined?(::Roda) ? ::Roda::RodaPlugins::Base::RequestMethods::TERM : Object
+
+ def if_match(args, &blk)
+ path = @remaining_path
+ captures = @captures.clear
+
+ if match_all(args)
+ (env['INSTANA_PATH_TEMPLATE_FRAGMENTS'] ||= []).concat(named_args(args, blk))
+ block_result(blk.(*captures))
+ env['INSTANA_HTTP_PATH_TEMPLATE'] = env['INSTANA_PATH_TEMPLATE_FRAGMENTS']
+ .join('/')
+ .prepend('/')
+ throw :halt, response.finish
+ else
+ @remaining_path = path
+ false
+ end
+ end
+
+ def named_args(args, blk)
+ parameters = blk.parameters
+ args.map do |a|
+ case a
+ when String
+ a
+ when TERM
+ nil
+ else
+ _, name = parameters.pop
+ "{#{name}}"
+ end
+ end.compact
+ end
+ end
+ end
+end
+
if defined?(::Roda)
::Instana.logger.debug "Instrumenting Roda"
Roda.use ::Instana::Rack
+ Roda.plugin ::Instana::RodaPathTemplateExtractor
end