Class: Couchbase::Observability::Handler
- Inherits:
-
Object
- Object
- Couchbase::Observability::Handler
- Defined in:
- lib/couchbase/utils/observability.rb
Instance Attribute Summary collapse
-
#op_span ⇒ Object
readonly
Returns the value of attribute op_span.
Instance Method Summary collapse
- #add_bucket_name(name) ⇒ Object
- #add_collection_name(name) ⇒ Object
- #add_durability_level(level) ⇒ Object
- #add_error(error) ⇒ Object
- #add_operation_name(name) ⇒ Object
- #add_query_statement(statement, options) ⇒ Object
- #add_retries(retries) ⇒ Object
- #add_scope_name(name) ⇒ Object
- #add_service(service) ⇒ Object
- #add_spans_from_backend(backend_spans) ⇒ Object
- #finish ⇒ Object
-
#initialize(backend, op_name, parent_span, receiver, tracer, meter) ⇒ Handler
constructor
A new instance of Handler.
- #set_success ⇒ Object
- #with_request_encoding_span ⇒ Object
Constructor Details
#initialize(backend, op_name, parent_span, receiver, tracer, meter) ⇒ Handler
Returns a new instance of Handler.
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/couchbase/utils/observability.rb', line 69 def initialize(backend, op_name, parent_span, receiver, tracer, meter) @tracer = tracer @meter = meter @tracer = Tracing::NoopTracer.new if @tracer.nil? @meter = Metrics::NoopMeter.new if @meter.nil? unless backend.nil? cluster_labels = backend.cluster_labels @cluster_name = cluster_labels[:cluster_name] @cluster_uuid = cluster_labels[:cluster_uuid] end @op_span = create_span(op_name, parent_span) @meter_attributes = create_meter_attributes @start_time = Time.now add_operation_name(op_name) add_receiver_attributes(receiver) end |
Instance Attribute Details
#op_span ⇒ Object (readonly)
Returns the value of attribute op_span.
67 68 69 |
# File 'lib/couchbase/utils/observability.rb', line 67 def op_span @op_span end |
Instance Method Details
#add_bucket_name(name) ⇒ Object
123 124 125 126 |
# File 'lib/couchbase/utils/observability.rb', line 123 def add_bucket_name(name) @op_span.set_attribute(ATTR_BUCKET_NAME, name) @meter_attributes[ATTR_BUCKET_NAME] = name end |
#add_collection_name(name) ⇒ Object
133 134 135 136 |
# File 'lib/couchbase/utils/observability.rb', line 133 def add_collection_name(name) @op_span.set_attribute(ATTR_COLLECTION_NAME, name) @meter_attributes[ATTR_COLLECTION_NAME] = name end |
#add_durability_level(level) ⇒ Object
138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/couchbase/utils/observability.rb', line 138 def add_durability_level(level) durability_str = case level when :majority ATTR_VALUE_DURABILITY_MAJORITY when :majority_and_persist_to_active ATTR_VALUE_DURABILITY_MAJORITY_AND_PERSIST_TO_ACTIVE when :persist_to_majority ATTR_VALUE_DURABILITY_PERSIST_TO_MAJORITY end @op_span.set_attribute(ATTR_DURABILITY, durability_str) unless durability_str.nil? end |
#add_error(error) ⇒ Object
159 160 161 162 163 164 165 166 167 |
# File 'lib/couchbase/utils/observability.rb', line 159 def add_error(error) @op_span.status = :error @meter_attributes[ATTR_ERROR_TYPE] = if error.is_a?(Couchbase::Error::CouchbaseError) || error.is_a?(Couchbase::Error::InvalidArgument) error.class.name.split("::").last else "_OTHER" end end |
#add_operation_name(name) ⇒ Object
118 119 120 121 |
# File 'lib/couchbase/utils/observability.rb', line 118 def add_operation_name(name) @op_span.set_attribute(ATTR_OPERATION_NAME, name) @meter_attributes[ATTR_OPERATION_NAME] = name end |
#add_query_statement(statement, options) ⇒ Object
169 170 171 172 173 174 175 176 177 |
# File 'lib/couchbase/utils/observability.rb', line 169 def add_query_statement(statement, ) pos_params = .instance_variable_get(:@positional_parameters) named_params = .instance_variable_get(:@named_parameters) # The statement attribute is added only if positional or named parameters are in use. return if (pos_params.nil? || pos_params.empty?) && (named_params.nil? || named_params.empty?) @op_span.set_attribute(ATTR_QUERY_STATEMENT, statement) end |
#add_retries(retries) ⇒ Object
151 152 153 |
# File 'lib/couchbase/utils/observability.rb', line 151 def add_retries(retries) @op_span.set_attribute(ATTR_RETRIES, retries.to_i) end |
#add_scope_name(name) ⇒ Object
128 129 130 131 |
# File 'lib/couchbase/utils/observability.rb', line 128 def add_scope_name(name) @op_span.set_attribute(ATTR_SCOPE_NAME, name) @meter_attributes[ATTR_SCOPE_NAME] = name end |
#add_service(service) ⇒ Object
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/couchbase/utils/observability.rb', line 98 def add_service(service) service_str = case service when :kv ATTR_VALUE_SERVICE_KV when :query ATTR_VALUE_SERVICE_QUERY when :analytics ATTR_VALUE_SERVICE_ANALYTICS when :search ATTR_VALUE_SERVICE_SEARCH when :management ATTR_VALUE_SERVICE_MANAGEMENT when :views ATTR_VALUE_SERVICE_VIEWS end @op_span.set_attribute(ATTR_SERVICE, service_str) unless service_str.nil? @meter_attributes[ATTR_SERVICE] = service_str unless service_str.nil? end |
#add_spans_from_backend(backend_spans) ⇒ Object
179 180 181 182 183 |
# File 'lib/couchbase/utils/observability.rb', line 179 def add_spans_from_backend(backend_spans) backend_spans.each do |backend_span| add_backend_span(backend_span, @op_span) end end |
#finish ⇒ Object
185 186 187 188 189 |
# File 'lib/couchbase/utils/observability.rb', line 185 def finish @op_span.finish duration_us = ((Time.now - @start_time) * 1_000_000).round @meter.value_recorder(METER_NAME_OPERATION_DURATION, @meter_attributes).record_value(duration_us) end |
#set_success ⇒ Object
155 156 157 |
# File 'lib/couchbase/utils/observability.rb', line 155 def set_success @op_span.status = :ok end |
#with_request_encoding_span ⇒ Object
88 89 90 91 92 93 94 95 96 |
# File 'lib/couchbase/utils/observability.rb', line 88 def with_request_encoding_span span = create_span(STEP_REQUEST_ENCODING, @op_span) begin res = yield ensure span.finish end res end |