Module: RailsOtelContext::Adapters::Clickhouse
- Defined in:
- lib/rails_otel_context/adapters/clickhouse.rb
Constant Summary collapse
- CANDIDATE_METHODS =
%i[query select insert execute command].freeze
- REENTRANCY_KEY =
:_rails_otel_ctx_clickhouse_instrumenting
Class Method Summary collapse
Class Method Details
.install!(app_root:) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/rails_otel_context/adapters/clickhouse.rb', line 11 def install!(app_root:) begin require 'click_house' rescue LoadError # ClickHouse client gem is optional for consumers. end target_clients.each do |klass| methods = CANDIDATE_METHODS.select { |method_name| klass.method_defined?(method_name) } next if methods.empty? patch_module = patch_module_for(klass, methods) patch_module.configure(app_root: app_root) next if klass.ancestors.include?(patch_module) klass.prepend(patch_module) end end |
.patch_module_for(klass, methods) ⇒ Object
40 41 42 43 44 |
# File 'lib/rails_otel_context/adapters/clickhouse.rb', line 40 def patch_module_for(klass, methods) @patch_modules ||= {} key = [klass.name, methods.sort].join(':') @patch_modules[key] ||= build_patch_module(methods) end |
.target_clients ⇒ Object
30 31 32 33 34 35 36 37 38 |
# File 'lib/rails_otel_context/adapters/clickhouse.rb', line 30 def target_clients clients = [] clients << ::ClickHouse::Client if defined?(::ClickHouse::Client) clients << ::ClickHouse::Connection if defined?(::ClickHouse::Connection) clients << ::Clickhouse::Client if defined?(::Clickhouse::Client) clients.uniq end |