module OneApm class TransactionNamer def self.name_for(txn, traced_obj, category, options={}) "#{prefix_for_category(txn, category)}#{path_name(traced_obj, options)}" end def self.prefix_for_category(txn, category = nil) category ||= (txn && txn.category) case category when :controller then ::OneApm::Transaction::WEB_TRANSACTION_PREFIX when :task then ::OneApm::Transaction::TASK_PREFIX when :rack then ::OneApm::Transaction::RACK_PREFIX when :uri then ::OneApm::Transaction::WEB_TRANSACTION_PREFIX when :sinatra then ::OneApm::Transaction::SINATRA_PREFIX when :middleware then ::OneApm::Transaction::MIDDLEWARE_PREFIX when :grape then ::OneApm::Transaction::GRAPE_PREFIX else "#{category.to_s}/" # for internal use only end end def self.path_name(traced_obj, options={}) return options[:path] if options[:path] class_name = class_name(traced_obj, options) if options[:name] if class_name "#{class_name}/#{options[:name]}" else options[:name] end elsif traced_obj.respond_to?(:oneapm_metric_path) traced_obj.oneapm_metric_path else class_name end end def self.class_name(traced_obj, options={}) return options[:class_name] if options[:class_name] if (traced_obj.is_a?(Class) || traced_obj.is_a?(Module)) traced_obj.name else traced_obj.class.name end end end end