Sha256: 88c7eafd9fa52b673a98bc80f2cddfa66857aa3c10592410784efbe20b07f5c7
Contents?: true
Size: 1.65 KB
Versions: 61
Compression:
Stored size: 1.65 KB
Contents
# frozen_string_literal: true require "cgi" module Labkit module Tracing # Factory provides tools for setting up and configuring the # distributed tracing system within the process, given the # tracing connection string class Factory OPENTRACING_SCHEME = "opentracing" def self.create_tracer(service_name, connection_string) return unless connection_string.present? begin opentracing_details = parse_connection_string(connection_string) driver_name = opentracing_details[:driver_name] case driver_name when "jaeger" JaegerFactory.create_tracer(service_name, opentracing_details[:options]) else raise "Unknown driver: #{driver_name}" end # Can't create the tracer? Warn and continue sans tracer rescue StandardError => e warn "Unable to instantiate tracer: #{e}" nil end end def self.parse_connection_string(connection_string) parsed = URI.parse(connection_string) raise "Invalid tracing connection string" unless valid_uri?(parsed) { driver_name: parsed.host, options: parse_query(parsed.query) } end private_class_method :parse_connection_string def self.parse_query(query) return {} unless query CGI.parse(query).symbolize_keys.transform_values(&:first) end private_class_method :parse_query def self.valid_uri?(uri) return false unless uri uri.scheme == OPENTRACING_SCHEME && uri.host.to_s =~ /^[a-z0-9_]+$/ && uri.path.empty? end private_class_method :valid_uri? end end end
Version data entries
61 entries across 61 versions & 1 rubygems