couchbase 3.7.0 → 3.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +3 -3
- data/ext/CMakeLists.txt +4 -1
- data/ext/cache/extconf_include.rb +4 -3
- data/ext/cache/mozilla-ca-bundle.crt +66 -93
- data/ext/cache/mozilla-ca-bundle.sha256 +1 -1
- data/ext/couchbase/CMakeLists.txt +24 -11
- data/ext/couchbase/cmake/APKBUILD.in +17 -1
- data/ext/couchbase/cmake/Bundler.cmake +9 -1
- data/ext/couchbase/cmake/Cache.cmake +48 -19
- data/ext/couchbase/cmake/CompilerOptions.cmake +3 -1
- data/ext/couchbase/cmake/OpenSSL.cmake +10 -2
- data/ext/couchbase/cmake/Packaging.cmake +48 -8
- data/ext/couchbase/cmake/ThirdPartyDependencies.cmake +43 -1
- data/ext/couchbase/cmake/build_config.hxx.in +2 -0
- data/ext/couchbase/cmake/couchbase-cxx-client.spec.in +18 -0
- data/ext/couchbase/cmake/tarball_glob.txt +10 -0
- data/ext/couchbase/core/app_telemetry_meter.cxx +1 -0
- data/ext/couchbase/core/app_telemetry_reporter.cxx +45 -43
- data/ext/couchbase/core/app_telemetry_reporter.hxx +4 -3
- data/ext/couchbase/core/bucket.cxx +128 -13
- data/ext/couchbase/core/bucket.hxx +12 -2
- data/ext/couchbase/core/cluster.cxx +304 -152
- data/ext/couchbase/core/cluster.hxx +32 -0
- data/ext/couchbase/core/cluster_credentials.cxx +25 -0
- data/ext/couchbase/core/cluster_credentials.hxx +5 -0
- data/ext/couchbase/core/cluster_label_listener.cxx +72 -0
- data/ext/couchbase/core/cluster_label_listener.hxx +46 -0
- data/ext/couchbase/core/cluster_options.hxx +4 -0
- data/ext/couchbase/core/deprecation_utils.hxx +26 -0
- data/ext/couchbase/core/error.hxx +27 -0
- data/ext/couchbase/core/free_form_http_request.hxx +0 -2
- data/ext/couchbase/core/http_component.cxx +12 -48
- data/ext/couchbase/core/impl/analytics.cxx +3 -2
- data/ext/couchbase/core/impl/analytics.hxx +2 -1
- data/ext/couchbase/core/impl/analytics_index_manager.cxx +249 -137
- data/ext/couchbase/core/impl/binary_collection.cxx +134 -58
- data/ext/couchbase/core/impl/bucket_manager.cxx +87 -35
- data/ext/couchbase/core/impl/collection.cxx +560 -245
- data/ext/couchbase/core/impl/collection_manager.cxx +89 -49
- data/ext/couchbase/core/impl/dns_srv_tracker.cxx +4 -4
- data/ext/couchbase/core/impl/error.cxx +20 -13
- data/ext/couchbase/core/impl/error.hxx +15 -10
- data/ext/couchbase/core/impl/get_all_replicas.hxx +1 -1
- data/ext/couchbase/core/impl/get_any_replica.hxx +2 -1
- data/ext/couchbase/core/impl/get_replica.hxx +2 -0
- data/ext/couchbase/core/impl/lookup_in_replica.hxx +1 -1
- data/ext/couchbase/core/impl/observability_recorder.cxx +161 -0
- data/ext/couchbase/core/impl/observability_recorder.hxx +77 -0
- data/ext/couchbase/core/impl/observe_seqno.hxx +2 -0
- data/ext/couchbase/core/impl/public_bucket.cxx +31 -7
- data/ext/couchbase/core/impl/public_cluster.cxx +107 -19
- data/ext/couchbase/core/impl/query.cxx +6 -3
- data/ext/couchbase/core/impl/query.hxx +3 -1
- data/ext/couchbase/core/impl/query_index_manager.cxx +267 -102
- data/ext/couchbase/core/impl/scope.cxx +53 -11
- data/ext/couchbase/core/impl/search.cxx +8 -4
- data/ext/couchbase/core/impl/search.hxx +6 -2
- data/ext/couchbase/core/impl/search_index_manager.cxx +131 -41
- data/ext/couchbase/core/impl/with_cancellation.hxx +75 -0
- data/ext/couchbase/core/io/config_tracker.cxx +9 -9
- data/ext/couchbase/core/io/config_tracker.hxx +2 -1
- data/ext/couchbase/core/io/http_command.hxx +98 -49
- data/ext/couchbase/core/io/http_context.hxx +2 -0
- data/ext/couchbase/core/io/http_session.cxx +23 -10
- data/ext/couchbase/core/io/http_session.hxx +17 -9
- data/ext/couchbase/core/io/http_session_manager.hxx +163 -228
- data/ext/couchbase/core/io/http_traits.hxx +0 -7
- data/ext/couchbase/core/io/mcbp_command.hxx +123 -44
- data/ext/couchbase/core/io/mcbp_session.cxx +251 -26
- data/ext/couchbase/core/io/mcbp_session.hxx +9 -1
- data/ext/couchbase/core/io/mcbp_traits.hxx +0 -8
- data/ext/couchbase/core/io/streams.cxx +3 -3
- data/ext/couchbase/core/io/streams.hxx +3 -2
- data/ext/couchbase/core/meta/features.hxx +15 -0
- data/ext/couchbase/core/meta/version.cxx +13 -0
- data/ext/couchbase/core/meta/version.hxx +3 -0
- data/ext/couchbase/core/metrics/constants.hxx +23 -0
- data/ext/couchbase/core/metrics/logging_meter.cxx +5 -5
- data/ext/couchbase/core/metrics/meter_wrapper.cxx +65 -63
- data/ext/couchbase/core/metrics/meter_wrapper.hxx +12 -10
- data/ext/couchbase/core/operations/document_analytics.hxx +0 -5
- data/ext/couchbase/core/operations/document_append.hxx +0 -4
- data/ext/couchbase/core/operations/document_decrement.hxx +0 -5
- data/ext/couchbase/core/operations/document_exists.hxx +0 -7
- data/ext/couchbase/core/operations/document_get.hxx +0 -7
- data/ext/couchbase/core/operations/document_get_all_replicas.hxx +77 -27
- data/ext/couchbase/core/operations/document_get_and_lock.hxx +0 -9
- data/ext/couchbase/core/operations/document_get_and_touch.hxx +0 -9
- data/ext/couchbase/core/operations/document_get_any_replica.hxx +83 -2
- data/ext/couchbase/core/operations/document_get_projected.hxx +0 -9
- data/ext/couchbase/core/operations/document_increment.hxx +0 -5
- data/ext/couchbase/core/operations/document_insert.hxx +0 -4
- data/ext/couchbase/core/operations/document_lookup_in.hxx +0 -9
- data/ext/couchbase/core/operations/document_lookup_in_all_replicas.hxx +46 -4
- data/ext/couchbase/core/operations/document_lookup_in_any_replica.hxx +121 -43
- data/ext/couchbase/core/operations/document_mutate_in.hxx +0 -5
- data/ext/couchbase/core/operations/document_prepend.hxx +0 -4
- data/ext/couchbase/core/operations/document_query.hxx +0 -4
- data/ext/couchbase/core/operations/document_remove.hxx +0 -4
- data/ext/couchbase/core/operations/document_replace.hxx +0 -4
- data/ext/couchbase/core/operations/document_search.hxx +0 -7
- data/ext/couchbase/core/operations/document_touch.hxx +0 -7
- data/ext/couchbase/core/operations/document_unlock.hxx +0 -6
- data/ext/couchbase/core/operations/document_upsert.hxx +0 -4
- data/ext/couchbase/core/operations/document_view.cxx +2 -0
- data/ext/couchbase/core/operations/document_view.hxx +10 -13
- data/ext/couchbase/core/operations/http_noop.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_dataset_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_dataset_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_dataset_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_dataverse_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_dataverse_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_get_pending_mutations.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_index_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_index_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_index_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_connect.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_disconnect.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/analytics_link_replace.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_describe.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_flush.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/bucket_update.hxx +2 -0
- data/ext/couchbase/core/operations/management/change_password.hxx +2 -0
- data/ext/couchbase/core/operations/management/cluster_describe.hxx +2 -0
- data/ext/couchbase/core/operations/management/cluster_developer_preview_enable.hxx +2 -0
- data/ext/couchbase/core/operations/management/collection_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/collection_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/collection_update.hxx +2 -0
- data/ext/couchbase/core/operations/management/collections_manifest_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/error_utils.cxx +4 -1
- data/ext/couchbase/core/operations/management/eventing_deploy_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_drop_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_get_all_functions.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_get_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_get_status.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_pause_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_resume_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_undeploy_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/eventing_upsert_function.hxx +2 -0
- data/ext/couchbase/core/operations/management/freeform.hxx +2 -0
- data/ext/couchbase/core/operations/management/group_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/group_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/group_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/group_upsert.hxx +2 -0
- data/ext/couchbase/core/operations/management/query_index_build.hxx +2 -0
- data/ext/couchbase/core/operations/management/query_index_build_deferred.hxx +68 -30
- data/ext/couchbase/core/operations/management/query_index_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/query_index_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/query_index_get_all.hxx +4 -3
- data/ext/couchbase/core/operations/management/query_index_get_all_deferred.hxx +2 -1
- data/ext/couchbase/core/operations/management/role_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/scope_create.hxx +2 -0
- data/ext/couchbase/core/operations/management/scope_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/scope_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_get_stats.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_analyze_document.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_control_ingest.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_control_plan_freeze.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_control_query.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_get_documents_count.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_get_stats.hxx +2 -0
- data/ext/couchbase/core/operations/management/search_index_upsert.hxx +2 -0
- data/ext/couchbase/core/operations/management/user_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/user_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/user_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/user_upsert.hxx +2 -0
- data/ext/couchbase/core/operations/management/view_index_drop.hxx +2 -0
- data/ext/couchbase/core/operations/management/view_index_get.hxx +2 -0
- data/ext/couchbase/core/operations/management/view_index_get_all.hxx +2 -0
- data/ext/couchbase/core/operations/management/view_index_upsert.hxx +2 -0
- data/ext/couchbase/core/operations/operation_traits.hxx +6 -0
- data/ext/couchbase/core/operations.hxx +0 -1
- data/ext/couchbase/core/operations_fwd.hxx +8 -0
- data/ext/couchbase/core/origin.cxx +67 -12
- data/ext/couchbase/core/origin.hxx +13 -8
- data/ext/couchbase/core/orphan_reporter.cxx +164 -0
- data/ext/couchbase/core/orphan_reporter.hxx +65 -0
- data/ext/couchbase/core/sasl/CMakeLists.txt +1 -0
- data/ext/couchbase/core/sasl/client.cc +6 -0
- data/ext/couchbase/core/sasl/mechanism.cc +2 -1
- data/ext/couchbase/core/sasl/mechanism.h +2 -1
- data/ext/couchbase/core/sasl/oauthbearer/oauthbearer.cc +41 -0
- data/ext/couchbase/core/sasl/oauthbearer/oauthbearer.h +47 -0
- data/ext/couchbase/core/tls_context_provider.cxx +44 -0
- data/ext/couchbase/core/tls_context_provider.hxx +44 -0
- data/ext/couchbase/core/tracing/attribute_helpers.hxx +45 -0
- data/ext/couchbase/core/tracing/constants.hxx +148 -68
- data/ext/couchbase/core/tracing/threshold_logging_options.hxx +0 -3
- data/ext/couchbase/core/tracing/threshold_logging_tracer.cxx +122 -170
- data/ext/couchbase/core/tracing/tracer_wrapper.cxx +17 -24
- data/ext/couchbase/core/tracing/tracer_wrapper.hxx +8 -10
- data/ext/couchbase/core/tracing/wrapper_sdk_tracer.cxx +114 -0
- data/ext/couchbase/core/tracing/wrapper_sdk_tracer.hxx +85 -0
- data/ext/couchbase/core/transactions/attempt_context_impl.cxx +16 -14
- data/ext/couchbase/core/transactions/attempt_context_impl.hxx +4 -4
- data/ext/couchbase/core/transactions/transactions.cxx +1 -1
- data/ext/couchbase/core/transactions/transactions_cleanup.cxx +1 -2
- data/ext/couchbase/core/utils/byteswap.hxx +12 -0
- data/ext/couchbase/core/utils/concurrent_fixed_priority_queue.hxx +102 -0
- data/ext/couchbase/core/utils/connection_string.cxx +2 -0
- data/ext/couchbase/couchbase/certificate_authenticator.hxx +1 -0
- data/ext/couchbase/couchbase/cluster.hxx +47 -0
- data/ext/couchbase/couchbase/cluster_options.hxx +16 -0
- data/ext/couchbase/couchbase/collection.hxx +60 -15
- data/ext/couchbase/couchbase/error_codes.hxx +48 -48
- data/ext/couchbase/couchbase/jwt_authenticator.hxx +52 -0
- data/ext/couchbase/couchbase/metrics/meter.hxx +2 -1
- data/ext/couchbase/couchbase/metrics/otel_meter.hxx +75 -80
- data/ext/couchbase/couchbase/network_options.hxx +19 -0
- data/ext/couchbase/couchbase/password_authenticator.hxx +1 -0
- data/ext/couchbase/couchbase/tracing/otel_tracer.hxx +15 -17
- data/ext/couchbase/couchbase/tracing/request_span.hxx +2 -2
- data/ext/couchbase.cxx +4 -0
- data/ext/extconf.rb +1 -0
- data/ext/rcb_analytics.cxx +157 -47
- data/ext/rcb_backend.cxx +118 -71
- data/ext/rcb_buckets.cxx +39 -16
- data/ext/rcb_collections.cxx +36 -12
- data/ext/rcb_crud.cxx +587 -294
- data/ext/rcb_hdr_histogram.cxx +219 -0
- data/ext/rcb_hdr_histogram.hxx +28 -0
- data/ext/rcb_multi.cxx +142 -59
- data/ext/rcb_observability.cxx +132 -0
- data/ext/rcb_observability.hxx +49 -0
- data/ext/rcb_query.cxx +77 -27
- data/ext/rcb_search.cxx +92 -31
- data/ext/rcb_users.cxx +69 -26
- data/ext/rcb_utils.cxx +91 -0
- data/ext/rcb_utils.hxx +141 -168
- data/ext/rcb_views.cxx +36 -12
- data/lib/active_support/cache/couchbase_store.rb +6 -6
- data/lib/couchbase/authenticator.rb +14 -0
- data/lib/couchbase/binary_collection.rb +37 -22
- data/lib/couchbase/bucket.rb +46 -31
- data/lib/couchbase/cluster.rb +146 -61
- data/lib/couchbase/collection.rb +257 -186
- data/lib/couchbase/datastructures/couchbase_list.rb +81 -50
- data/lib/couchbase/datastructures/couchbase_map.rb +86 -50
- data/lib/couchbase/datastructures/couchbase_queue.rb +64 -38
- data/lib/couchbase/datastructures/couchbase_set.rb +57 -41
- data/lib/couchbase/deprecations.rb +1 -1
- data/lib/couchbase/diagnostics.rb +8 -8
- data/lib/couchbase/errors.rb +6 -0
- data/lib/couchbase/management/analytics_index_manager.rb +90 -59
- data/lib/couchbase/management/bucket_manager.rb +73 -45
- data/lib/couchbase/management/collection_manager.rb +86 -43
- data/lib/couchbase/management/collection_query_index_manager.rb +56 -33
- data/lib/couchbase/management/query_index_manager.rb +88 -36
- data/lib/couchbase/management/scope_search_index_manager.rb +119 -52
- data/lib/couchbase/management/search_index_manager.rb +401 -178
- data/lib/couchbase/management/user_manager.rb +343 -174
- data/lib/couchbase/management/view_index_manager.rb +166 -73
- data/lib/couchbase/metrics/logging_meter.rb +108 -0
- data/lib/couchbase/metrics/logging_value_recorder.rb +50 -0
- data/lib/couchbase/metrics/meter.rb +27 -0
- data/lib/couchbase/metrics/noop_meter.rb +30 -0
- data/lib/couchbase/metrics/noop_value_recorder.rb +27 -0
- data/lib/couchbase/metrics/value_recorder.rb +25 -0
- data/lib/couchbase/options.rb +69 -3
- data/lib/couchbase/protostellar/cluster.rb +3 -0
- data/lib/couchbase/scope.rb +62 -48
- data/lib/couchbase/search_options.rb +18 -18
- data/lib/couchbase/tracing/noop_span.rb +29 -0
- data/lib/couchbase/tracing/noop_tracer.rb +29 -0
- data/lib/couchbase/tracing/request_span.rb +34 -0
- data/lib/couchbase/tracing/request_tracer.rb +28 -0
- data/lib/couchbase/tracing/threshold_logging_span.rb +112 -0
- data/lib/couchbase/tracing/threshold_logging_tracer.rb +231 -0
- data/lib/couchbase/utils/hdr_histogram.rb +55 -0
- data/lib/couchbase/utils/observability.rb +257 -0
- data/lib/couchbase/utils/observability_constants.rb +200 -0
- data/lib/couchbase/utils/stdlib_logger_adapter.rb +1 -3
- data/lib/couchbase/version.rb +1 -1
- data/lib/couchbase.rb +2 -2
- metadata +58 -6
|
@@ -15,9 +15,114 @@
|
|
|
15
15
|
# limitations under the License.
|
|
16
16
|
|
|
17
17
|
require "couchbase/errors"
|
|
18
|
+
require "couchbase/options"
|
|
18
19
|
|
|
19
20
|
module Couchbase
|
|
20
21
|
module Management
|
|
22
|
+
module Options
|
|
23
|
+
module View
|
|
24
|
+
# Options for {ViewIndexManager#get_design_document}
|
|
25
|
+
class GetDesignDocument < Couchbase::Options::Base
|
|
26
|
+
# Creates an instance of options for {ViewIndexManager#get_design_document}
|
|
27
|
+
#
|
|
28
|
+
# @param [Integer, #in_milliseconds, nil] timeout the time in milliseconds allowed for the operation to complete
|
|
29
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
|
30
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
|
31
|
+
#
|
|
32
|
+
# @yieldparam [GetDesignDocument]
|
|
33
|
+
def initialize(timeout: nil,
|
|
34
|
+
retry_strategy: nil,
|
|
35
|
+
parent_span: nil)
|
|
36
|
+
super
|
|
37
|
+
yield self if block_given?
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# @api private
|
|
41
|
+
DEFAULT = new.freeze
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Options for {ViewIndexManager#get_all_design_documents}
|
|
45
|
+
class GetAllDesignDocuments < Couchbase::Options::Base
|
|
46
|
+
# Creates an instance of options for {ViewIndexManager#get_all_design_documents}
|
|
47
|
+
#
|
|
48
|
+
# @param [Integer, #in_milliseconds, nil] timeout the time in milliseconds allowed for the operation to complete
|
|
49
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
|
50
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
|
51
|
+
#
|
|
52
|
+
# @yieldparam [GetAllDesignDocuments]
|
|
53
|
+
def initialize(timeout: nil,
|
|
54
|
+
retry_strategy: nil,
|
|
55
|
+
parent_span: nil)
|
|
56
|
+
super
|
|
57
|
+
yield self if block_given?
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# @api private
|
|
61
|
+
DEFAULT = new.freeze
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# Options for {ViewIndexManager#upsert_design_document}
|
|
65
|
+
class UpsertDesignDocument < Couchbase::Options::Base
|
|
66
|
+
# Creates an instance of options for {ViewIndexManager#upsert_design_document}
|
|
67
|
+
#
|
|
68
|
+
# @param [Integer, #in_milliseconds, nil] timeout the time in milliseconds allowed for the operation to complete
|
|
69
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
|
70
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
|
71
|
+
#
|
|
72
|
+
# @yieldparam [UpsertDesignDocument]
|
|
73
|
+
def initialize(timeout: nil,
|
|
74
|
+
retry_strategy: nil,
|
|
75
|
+
parent_span: nil)
|
|
76
|
+
super
|
|
77
|
+
yield self if block_given?
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# @api private
|
|
81
|
+
DEFAULT = new.freeze
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Options for {ViewIndexManager#drop_design_document}
|
|
85
|
+
class DropDesignDocument < Couchbase::Options::Base
|
|
86
|
+
# Creates an instance of options for {ViewIndexManager#drop_design_document}
|
|
87
|
+
#
|
|
88
|
+
# @param [Integer, #in_milliseconds, nil] timeout the time in milliseconds allowed for the operation to complete
|
|
89
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
|
90
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
|
91
|
+
#
|
|
92
|
+
# @yieldparam [DropDesignDocument]
|
|
93
|
+
def initialize(timeout: nil,
|
|
94
|
+
retry_strategy: nil,
|
|
95
|
+
parent_span: nil)
|
|
96
|
+
super
|
|
97
|
+
yield self if block_given?
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# @api private
|
|
101
|
+
DEFAULT = new.freeze
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# Options for {ViewIndexManager#publish_design_document}
|
|
105
|
+
class PublishDesignDocument < Couchbase::Options::Base
|
|
106
|
+
# Creates an instance of options for {ViewIndexManager#publish_design_document}
|
|
107
|
+
#
|
|
108
|
+
# @param [Integer, #in_milliseconds, nil] timeout the time in milliseconds allowed for the operation to complete
|
|
109
|
+
# @param [Proc, nil] retry_strategy the custom retry strategy, if set
|
|
110
|
+
# @param [Span, nil] parent_span if set holds the parent span, that should be used for this request
|
|
111
|
+
#
|
|
112
|
+
# @yieldparam [PublishDesignDocument]
|
|
113
|
+
def initialize(timeout: nil,
|
|
114
|
+
retry_strategy: nil,
|
|
115
|
+
parent_span: nil)
|
|
116
|
+
super
|
|
117
|
+
yield self if block_given?
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# @api private
|
|
121
|
+
DEFAULT = new.freeze
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
21
126
|
# The View Index Manager interface contains the means for managing design documents used for views.
|
|
22
127
|
#
|
|
23
128
|
# A design document belongs to either the "development" or "production" namespace. A development document has a name
|
|
@@ -33,6 +138,10 @@ module Couchbase
|
|
|
33
138
|
# All methods (except publish) have a required "namespace" argument indicating whether the operation targets a
|
|
34
139
|
# development document or a production document. The type of this argument is [Symbol] with allowed values
|
|
35
140
|
# +:production+ and +:development+.
|
|
141
|
+
#
|
|
142
|
+
# @deprecated Views are deprecated in Couchbase Server 7.0+, and will be removed from a future server version.
|
|
143
|
+
# Views are not compatible with the Magma storage engine. Instead of views, use indexes and queries using the
|
|
144
|
+
# Index Service (GSI) and the Query Service (SQL++).
|
|
36
145
|
class ViewIndexManager
|
|
37
146
|
alias inspect to_s
|
|
38
147
|
|
|
@@ -41,35 +150,41 @@ module Couchbase
|
|
|
41
150
|
|
|
42
151
|
# @param [Couchbase::Backend] backend
|
|
43
152
|
# @param [String] bucket_name
|
|
44
|
-
|
|
153
|
+
# @param [Observability::Wrapper] observability wrapper
|
|
154
|
+
def initialize(backend, bucket_name, observability)
|
|
45
155
|
@backend = backend
|
|
46
156
|
@bucket_name = bucket_name
|
|
157
|
+
@observability = observability
|
|
47
158
|
end
|
|
48
159
|
|
|
49
160
|
# Fetches a design document from the server
|
|
50
161
|
#
|
|
51
162
|
# @param [String] name the name of the design document
|
|
52
163
|
# @param [:production, :development] namespace the namespace
|
|
53
|
-
# @param [
|
|
164
|
+
# @param [Options::View::GetDesignDocument] options
|
|
54
165
|
#
|
|
55
166
|
# @return [DesignDocument]
|
|
56
167
|
#
|
|
57
168
|
# @raise [Error::DesignDocumentNotFound]
|
|
58
|
-
def get_design_document(name, namespace, options =
|
|
59
|
-
|
|
60
|
-
|
|
169
|
+
def get_design_document(name, namespace, options = Options::View::GetDesignDocument::DEFAULT)
|
|
170
|
+
@observability.record_operation(Observability::OP_VM_GET_DESIGN_DOCUMENT, options.parent_span, self, :views) do |obs_handler|
|
|
171
|
+
resp = @backend.view_index_get(@bucket_name, name, namespace, options.timeout, obs_handler)
|
|
172
|
+
extract_design_document(resp)
|
|
173
|
+
end
|
|
61
174
|
end
|
|
62
175
|
|
|
63
176
|
# Fetches all design documents from the server
|
|
64
177
|
#
|
|
65
178
|
# @param [:production, :development] namespace the namespace
|
|
66
|
-
# @param [
|
|
179
|
+
# @param [Options::View::GetAllDesignDocuments] options
|
|
67
180
|
#
|
|
68
181
|
# @return [Array<DesignDocument>]
|
|
69
|
-
def get_all_design_documents(namespace, options =
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
182
|
+
def get_all_design_documents(namespace, options = Options::View::GetAllDesignDocuments::DEFAULT)
|
|
183
|
+
@observability.record_operation(Observability::OP_VM_GET_ALL_DESIGN_DOCUMENTS, options.parent_span, self, :views) do |obs_handler|
|
|
184
|
+
resp = @backend.view_index_get_all(@bucket_name, namespace, options.timeout, obs_handler)
|
|
185
|
+
resp.map do |entry|
|
|
186
|
+
extract_design_document(entry)
|
|
187
|
+
end
|
|
73
188
|
end
|
|
74
189
|
end
|
|
75
190
|
|
|
@@ -77,33 +192,37 @@ module Couchbase
|
|
|
77
192
|
#
|
|
78
193
|
# @param [DesignDocument] document
|
|
79
194
|
# @param [:production, :development] namespace the namespace
|
|
80
|
-
# @param [
|
|
195
|
+
# @param [Options::View::UpsertDesignDocument] options
|
|
81
196
|
#
|
|
82
197
|
# @return [void]
|
|
83
|
-
def upsert_design_document(document, namespace, options =
|
|
84
|
-
@
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
198
|
+
def upsert_design_document(document, namespace, options = Options::View::UpsertDesignDocument::DEFAULT)
|
|
199
|
+
@observability.record_operation(Observability::OP_VM_UPSERT_DESIGN_DOCUMENT, options.parent_span, self, :views) do |obs_handler|
|
|
200
|
+
@backend.view_index_upsert(@bucket_name, {
|
|
201
|
+
name: document.name,
|
|
202
|
+
views: document.views.map do |name, view|
|
|
203
|
+
{
|
|
204
|
+
name: name,
|
|
205
|
+
map: view.map_function,
|
|
206
|
+
reduce: view.reduce_function,
|
|
207
|
+
}
|
|
208
|
+
end,
|
|
209
|
+
}, namespace, options.timeout, obs_handler)
|
|
210
|
+
end
|
|
94
211
|
end
|
|
95
212
|
|
|
96
213
|
# Removes the design document
|
|
97
214
|
#
|
|
98
215
|
# @param [String] name design document name
|
|
99
216
|
# @param [:production, :development] namespace the namespace
|
|
100
|
-
# @param [
|
|
217
|
+
# @param [Options::View::DropDesignDocument] options
|
|
101
218
|
#
|
|
102
219
|
# @return [void]
|
|
103
220
|
#
|
|
104
221
|
# @raise [Error::DesignDocumentNotFound]
|
|
105
|
-
def drop_design_document(name, namespace, options =
|
|
106
|
-
@
|
|
222
|
+
def drop_design_document(name, namespace, options = Options::View::DropDesignDocument::DEFAULT)
|
|
223
|
+
@observability.record_operation(Observability::OP_VM_DROP_DESIGN_DOCUMENT, options.parent_span, self, :views) do |obs_handler|
|
|
224
|
+
@backend.view_index_drop(@bucket_name, name, namespace, options.timeout, obs_handler)
|
|
225
|
+
end
|
|
107
226
|
end
|
|
108
227
|
|
|
109
228
|
# Publishes the design document.
|
|
@@ -112,66 +231,40 @@ module Couchbase
|
|
|
112
231
|
# it to the production namespace.
|
|
113
232
|
#
|
|
114
233
|
# @param [String] name design document name
|
|
115
|
-
# @param [
|
|
234
|
+
# @param [Options::View::PublishDesignDocument] options
|
|
116
235
|
#
|
|
117
236
|
# @return [void]
|
|
118
237
|
#
|
|
119
238
|
# @raise [ArgumentError]
|
|
120
239
|
# @raise [Error::DesignDocumentNotFound]
|
|
121
|
-
def publish_design_document(name, options =
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
# @return [Integer] the time in milliseconds allowed for the operation to complete
|
|
128
|
-
attr_accessor :timeout
|
|
129
|
-
|
|
130
|
-
# @yieldparam [GetDesignDocumentOptions] self
|
|
131
|
-
def initialize
|
|
132
|
-
yield self if block_given?
|
|
133
|
-
end
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
class GetAllDesignDocumentsOptions
|
|
137
|
-
# @return [Integer] the time in milliseconds allowed for the operation to complete
|
|
138
|
-
attr_accessor :timeout
|
|
139
|
-
|
|
140
|
-
# @yieldparam [GetAllDesignDocumentsOptions] self
|
|
141
|
-
def initialize
|
|
142
|
-
yield self if block_given?
|
|
240
|
+
def publish_design_document(name, options = Options::View::PublishDesignDocument::DEFAULT)
|
|
241
|
+
@observability.record_operation(Observability::OP_VM_PUBLISH_DESIGN_DOCUMENT, options.parent_span, self, :views) do |obs_handler|
|
|
242
|
+
document = get_design_document(name, :development,
|
|
243
|
+
Options::View::GetDesignDocument.new(timeout: options.timeout, parent_span: obs_handler.op_span))
|
|
244
|
+
upsert_design_document(document, :production,
|
|
245
|
+
Options::View::UpsertDesignDocument.new(timeout: options.timeout, parent_span: obs_handler.op_span))
|
|
143
246
|
end
|
|
144
247
|
end
|
|
145
248
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
# @yieldparam [UpsertDesignDocumentOptions] self
|
|
151
|
-
def initialize
|
|
152
|
-
yield self if block_given?
|
|
153
|
-
end
|
|
154
|
-
end
|
|
249
|
+
# @api private
|
|
250
|
+
# @deprecated use {Options::View::GetDesignDocument} instead
|
|
251
|
+
GetDesignDocumentOptions = Options::View::GetDesignDocument
|
|
155
252
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
253
|
+
# @api private
|
|
254
|
+
# @deprecated use {Options::View::GetAllDesignDocuments} instead
|
|
255
|
+
GetAllDesignDocumentsOptions = Options::View::GetAllDesignDocuments
|
|
159
256
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
end
|
|
164
|
-
end
|
|
257
|
+
# @api private
|
|
258
|
+
# @deprecated use {Options::View::UpsertDesignDocument} instead
|
|
259
|
+
UpsertDesignDocumentOptions = Options::View::UpsertDesignDocument
|
|
165
260
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
261
|
+
# @api private
|
|
262
|
+
# @deprecated use {Options::View::DropDesignDocument} instead
|
|
263
|
+
DropDesignDocumentOptions = Options::View::DropDesignDocument
|
|
169
264
|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
end
|
|
174
|
-
end
|
|
265
|
+
# @api private
|
|
266
|
+
# @deprecated use {Options::View::PublishDesignDocument} instead
|
|
267
|
+
PublishDesignDocumentOptions = Options::View::PublishDesignDocument
|
|
175
268
|
|
|
176
269
|
private
|
|
177
270
|
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2025-Present Couchbase, Inc.
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
require_relative "logging_value_recorder"
|
|
18
|
+
require_relative "meter"
|
|
19
|
+
require_relative "noop_meter"
|
|
20
|
+
require "couchbase/utils/observability_constants"
|
|
21
|
+
require "couchbase/utils/stdlib_logger_adapter"
|
|
22
|
+
require "couchbase/logger"
|
|
23
|
+
|
|
24
|
+
require "concurrent/map"
|
|
25
|
+
require "concurrent/timer_task"
|
|
26
|
+
|
|
27
|
+
module Couchbase
|
|
28
|
+
module Metrics
|
|
29
|
+
class LoggingMeter < Meter
|
|
30
|
+
# @api private
|
|
31
|
+
DEFAULT_EMIT_INTERVAL = 600_000 # milliseconds
|
|
32
|
+
|
|
33
|
+
def initialize(emit_interval: nil)
|
|
34
|
+
super()
|
|
35
|
+
@emit_interval = emit_interval || DEFAULT_EMIT_INTERVAL
|
|
36
|
+
@value_recorders = {
|
|
37
|
+
Observability::ATTR_VALUE_SERVICE_KV => Concurrent::Map.new,
|
|
38
|
+
Observability::ATTR_VALUE_SERVICE_QUERY => Concurrent::Map.new,
|
|
39
|
+
Observability::ATTR_VALUE_SERVICE_VIEWS => Concurrent::Map.new,
|
|
40
|
+
Observability::ATTR_VALUE_SERVICE_SEARCH => Concurrent::Map.new,
|
|
41
|
+
Observability::ATTR_VALUE_SERVICE_ANALYTICS => Concurrent::Map.new,
|
|
42
|
+
Observability::ATTR_VALUE_SERVICE_MANAGEMENT => Concurrent::Map.new,
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
# TODO(DC): Find better solution for logging
|
|
46
|
+
@logger = Couchbase.logger || Logger.new($stdout, Utils::StdlibLoggerAdapter.map_spdlog_level(Couchbase.log_level))
|
|
47
|
+
@task = Concurrent::TimerTask.new(execution_interval: @emit_interval / 1_000.0) do
|
|
48
|
+
report = create_report
|
|
49
|
+
return if report.empty?
|
|
50
|
+
|
|
51
|
+
@logger.info("Metrics: #{report.to_json}")
|
|
52
|
+
rescue StandardError => e
|
|
53
|
+
@logger.debug("Failed to log metrics: #{e.message}")
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def value_recorder(name, tags)
|
|
58
|
+
return NoopMeter::VALUE_RECORDER_INSTANCE unless name == Observability::METER_NAME_OPERATION_DURATION
|
|
59
|
+
|
|
60
|
+
operation_name = tags[Observability::ATTR_OPERATION_NAME]
|
|
61
|
+
service = tags[Observability::ATTR_SERVICE]
|
|
62
|
+
|
|
63
|
+
return NoopMeter::VALUE_RECORDER_INSTANCE if operation_name.nil? || service.nil?
|
|
64
|
+
|
|
65
|
+
@value_recorders[service].put_if_absent(
|
|
66
|
+
operation_name,
|
|
67
|
+
LoggingValueRecorder.new(
|
|
68
|
+
operation_name: operation_name,
|
|
69
|
+
service: service,
|
|
70
|
+
),
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
@value_recorders[service][operation_name]
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def create_report
|
|
77
|
+
operations = {}
|
|
78
|
+
@value_recorders.each do |service, recorders|
|
|
79
|
+
recorders.each_key do |operation_name|
|
|
80
|
+
recorder = recorders[operation_name]
|
|
81
|
+
operation_report = recorder.report_and_reset
|
|
82
|
+
if operation_report
|
|
83
|
+
operations[service] ||= {}
|
|
84
|
+
operations[service][operation_name] = operation_report
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
if operations.empty?
|
|
89
|
+
{}
|
|
90
|
+
else
|
|
91
|
+
{
|
|
92
|
+
meta: {
|
|
93
|
+
emit_interval_ms: @emit_interval,
|
|
94
|
+
},
|
|
95
|
+
operations: operations,
|
|
96
|
+
}
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def close
|
|
101
|
+
@task.shutdown
|
|
102
|
+
@value_recorders.each_value do |operation_map|
|
|
103
|
+
operation_map.each_value(&:close)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2025-Present Couchbase, Inc.
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
require_relative "value_recorder"
|
|
18
|
+
require "couchbase/utils/hdr_histogram"
|
|
19
|
+
|
|
20
|
+
module Couchbase
|
|
21
|
+
module Metrics
|
|
22
|
+
class LoggingValueRecorder < ValueRecorder
|
|
23
|
+
attr_reader :operation_name
|
|
24
|
+
attr_reader :service
|
|
25
|
+
|
|
26
|
+
def initialize(operation_name:, service:)
|
|
27
|
+
super()
|
|
28
|
+
@operation_name = operation_name
|
|
29
|
+
@service = service
|
|
30
|
+
@histogram = Utils::HdrHistogram.new(
|
|
31
|
+
lowest_discernible_value: 1, # 1 microsecond
|
|
32
|
+
highest_trackable_value: 30_000_000, # 30 seconds
|
|
33
|
+
significant_figures: 3,
|
|
34
|
+
)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def record_value(value)
|
|
38
|
+
@histogram.record_value(value)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def report_and_reset
|
|
42
|
+
@histogram.report_and_reset
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def close
|
|
46
|
+
@histogram.close
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2025-Present Couchbase, Inc.
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
module Couchbase
|
|
18
|
+
module Metrics
|
|
19
|
+
class Meter
|
|
20
|
+
def value_recorder(name, tags)
|
|
21
|
+
raise NotImplementedError, "The meter does not implement #value_recorder"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def close; end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2025-Present Couchbase, Inc.
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
require_relative 'meter'
|
|
18
|
+
require_relative 'noop_value_recorder'
|
|
19
|
+
|
|
20
|
+
module Couchbase
|
|
21
|
+
module Metrics
|
|
22
|
+
class NoopMeter < Meter
|
|
23
|
+
def value_recorder(_name, _tags)
|
|
24
|
+
VALUE_RECORDER_INSTANCE
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
VALUE_RECORDER_INSTANCE = NoopValueRecorder.new.freeze
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2025-Present Couchbase, Inc.
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
require_relative 'value_recorder'
|
|
18
|
+
|
|
19
|
+
module Couchbase
|
|
20
|
+
module Metrics
|
|
21
|
+
class NoopValueRecorder < ValueRecorder
|
|
22
|
+
def record_value(_value)
|
|
23
|
+
# Do nothing
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright 2025-Present Couchbase, Inc.
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
|
|
17
|
+
module Couchbase
|
|
18
|
+
module Metrics
|
|
19
|
+
class ValueRecorder
|
|
20
|
+
def record_value(value)
|
|
21
|
+
raise NotImplementedError, "The value recorder does not implement #record_value"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|