couchbase 3.7.0-x86_64-linux → 3.8.1-x86_64-linux

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.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -3
  3. data/lib/active_support/cache/couchbase_store.rb +6 -6
  4. data/lib/couchbase/3.2/libcouchbase.so +0 -0
  5. data/lib/couchbase/3.3/libcouchbase.so +0 -0
  6. data/lib/couchbase/3.4/libcouchbase.so +0 -0
  7. data/lib/couchbase/{3.1 → 4.0}/libcouchbase.so +0 -0
  8. data/lib/couchbase/authenticator.rb +14 -0
  9. data/lib/couchbase/binary_collection.rb +37 -22
  10. data/lib/couchbase/bucket.rb +46 -31
  11. data/lib/couchbase/cluster.rb +146 -61
  12. data/lib/couchbase/collection.rb +257 -186
  13. data/lib/couchbase/datastructures/couchbase_list.rb +82 -50
  14. data/lib/couchbase/datastructures/couchbase_map.rb +87 -50
  15. data/lib/couchbase/datastructures/couchbase_queue.rb +65 -38
  16. data/lib/couchbase/datastructures/couchbase_set.rb +58 -41
  17. data/lib/couchbase/deprecations.rb +1 -1
  18. data/lib/couchbase/diagnostics.rb +8 -8
  19. data/lib/couchbase/errors.rb +7 -1
  20. data/lib/couchbase/json_transcoder.rb +1 -1
  21. data/lib/couchbase/libcouchbase.rb +1 -1
  22. data/lib/couchbase/management/analytics_index_manager.rb +90 -59
  23. data/lib/couchbase/management/bucket_manager.rb +73 -45
  24. data/lib/couchbase/management/collection_manager.rb +86 -43
  25. data/lib/couchbase/management/collection_query_index_manager.rb +56 -33
  26. data/lib/couchbase/management/query_index_manager.rb +88 -36
  27. data/lib/couchbase/management/scope_search_index_manager.rb +119 -52
  28. data/lib/couchbase/management/search_index_manager.rb +401 -178
  29. data/lib/couchbase/management/user_manager.rb +343 -174
  30. data/lib/couchbase/management/view_index_manager.rb +166 -73
  31. data/lib/couchbase/metrics/logging_meter.rb +108 -0
  32. data/lib/couchbase/metrics/logging_value_recorder.rb +50 -0
  33. data/lib/couchbase/metrics/meter.rb +27 -0
  34. data/lib/couchbase/metrics/noop_meter.rb +30 -0
  35. data/lib/couchbase/metrics/noop_value_recorder.rb +27 -0
  36. data/lib/couchbase/metrics/value_recorder.rb +25 -0
  37. data/lib/couchbase/options.rb +71 -5
  38. data/lib/couchbase/protostellar/client.rb +0 -2
  39. data/lib/couchbase/protostellar/cluster.rb +7 -0
  40. data/lib/couchbase/protostellar/generated/admin/analytics/v1/analytics_pb.rb +54 -0
  41. data/lib/couchbase/protostellar/generated/admin/analytics/v1/analytics_services_pb.rb +51 -0
  42. data/lib/couchbase/protostellar/generated/admin/bucket/v1/bucket_pb.rb +5 -24
  43. data/lib/couchbase/protostellar/generated/admin/bucket/v1/bucket_services_pb.rb +16 -0
  44. data/lib/couchbase/protostellar/generated/admin/collection/v1/collection_pb.rb +5 -24
  45. data/lib/couchbase/protostellar/generated/admin/collection/v1/collection_services_pb.rb +16 -0
  46. data/lib/couchbase/protostellar/generated/admin/query/v1/query_pb.rb +5 -24
  47. data/lib/couchbase/protostellar/generated/admin/query/v1/query_services_pb.rb +18 -0
  48. data/lib/couchbase/protostellar/generated/admin/search/v1/search_pb.rb +2 -23
  49. data/lib/couchbase/protostellar/generated/admin/search/v1/search_services_pb.rb +23 -0
  50. data/lib/couchbase/protostellar/generated/analytics/v1/analytics_pb.rb +4 -25
  51. data/lib/couchbase/protostellar/generated/analytics/v1/analytics_services_pb.rb +10 -0
  52. data/lib/couchbase/protostellar/generated/internal/hooks/v1/hooks_pb.rb +6 -25
  53. data/lib/couchbase/protostellar/generated/internal/hooks/v1/hooks_services_pb.rb +18 -0
  54. data/lib/couchbase/protostellar/generated/internal/xdcr/v1/xdcr_pb.rb +46 -0
  55. data/lib/couchbase/protostellar/generated/internal/xdcr/v1/xdcr_services_pb.rb +56 -0
  56. data/lib/couchbase/protostellar/generated/kv/v1/kv_pb.rb +3 -26
  57. data/lib/couchbase/protostellar/generated/kv/v1/kv_services_pb.rb +47 -0
  58. data/lib/couchbase/protostellar/generated/query/v1/query_pb.rb +4 -26
  59. data/lib/couchbase/protostellar/generated/query/v1/query_services_pb.rb +10 -0
  60. data/lib/couchbase/protostellar/generated/routing/v2/routing_pb.rb +26 -0
  61. data/lib/couchbase/protostellar/generated/routing/v2/routing_services_pb.rb +43 -0
  62. data/lib/couchbase/protostellar/generated/search/v1/search_pb.rb +5 -26
  63. data/lib/couchbase/protostellar/generated/search/v1/search_services_pb.rb +11 -0
  64. data/lib/couchbase/protostellar/generated/transactions/v1/transactions_pb.rb +2 -23
  65. data/lib/couchbase/protostellar/generated/transactions/v1/transactions_services_pb.rb +30 -0
  66. data/lib/couchbase/protostellar/generated/view/v1/view_pb.rb +2 -23
  67. data/lib/couchbase/protostellar/generated/view/v1/view_services_pb.rb +9 -0
  68. data/lib/couchbase/protostellar/request_generator/admin/collection.rb +4 -2
  69. data/lib/couchbase/protostellar/request_generator/admin/query.rb +2 -0
  70. data/lib/couchbase/protostellar/request_generator/kv.rb +1 -1
  71. data/lib/couchbase/protostellar/scope.rb +4 -0
  72. data/lib/couchbase/scope.rb +62 -48
  73. data/lib/couchbase/search_options.rb +18 -18
  74. data/lib/couchbase/tracing/noop_span.rb +29 -0
  75. data/lib/couchbase/tracing/noop_tracer.rb +29 -0
  76. data/lib/couchbase/tracing/request_span.rb +34 -0
  77. data/lib/couchbase/tracing/request_tracer.rb +28 -0
  78. data/lib/couchbase/tracing/threshold_logging_span.rb +112 -0
  79. data/lib/couchbase/tracing/threshold_logging_tracer.rb +231 -0
  80. data/lib/couchbase/utils/hdr_histogram.rb +55 -0
  81. data/lib/couchbase/utils/observability.rb +263 -0
  82. data/lib/couchbase/utils/observability_constants.rb +200 -0
  83. data/lib/couchbase/utils/stdlib_logger_adapter.rb +1 -3
  84. data/lib/couchbase/version.rb +1 -1
  85. data/lib/couchbase.rb +2 -2
  86. metadata +43 -10
  87. data/lib/couchbase/protostellar/generated/routing/v1/routing_pb.rb +0 -52
  88. data/lib/couchbase/protostellar/generated/routing/v1/routing_services_pb.rb +0 -30
@@ -37,6 +37,8 @@ module Couchbase
37
37
  @collection = collection
38
38
  @options = options
39
39
  @cas = 0
40
+ @observability = @collection.instance_variable_get(:@observability)
41
+ @observability = Observability::Wrapper.new if @observability.nil?
40
42
  end
41
43
 
42
44
  # Calls the given block once for each element in the set, passing that element as a parameter.
@@ -44,49 +46,58 @@ module Couchbase
44
46
  # @yieldparam [Object] item
45
47
  #
46
48
  # @return [CouchbaseSet, Enumerable]
47
- def each(&)
49
+ def each(parent_span: nil, &)
48
50
  if block_given?
49
- begin
50
- result = @collection.get(@id, @options.get_options)
51
- current = result.content
52
- @cas = result.cas
53
- rescue Error::DocumentNotFound
54
- current = []
55
- @cas = 0
56
- end
51
+ current =
52
+ @observability.record_operation(Observability::OP_SET_EACH, parent_span, self) do |obs_handler|
53
+ options = @options.get_options.clone
54
+ options.parent_span = obs_handler.op_span
55
+ result = @collection.get(@id, options)
56
+ @cas = result.cas
57
+ result.content
58
+ rescue Error::DocumentNotFound
59
+ @cas = 0
60
+ []
61
+ end
57
62
  current.each(&)
58
63
  self
59
64
  else
60
- enum_for(:each)
65
+ enum_for(:each, parent_span: parent_span)
61
66
  end
62
67
  end
63
68
 
64
69
  # @return [Integer] returns the number of elements in the set.
65
- def length
66
- result = @collection.lookup_in(@id, [
67
- LookupInSpec.count(""),
68
- ], @options.lookup_in_options)
69
- result.content(0)
70
- rescue Error::DocumentNotFound
71
- 0
70
+ def length(parent_span: nil)
71
+ @observability.record_operation(Observability::OP_SET_LENGTH, parent_span, self) do |obs_handler|
72
+ options = @options.lookup_in_options.clone
73
+ options.parent_span = obs_handler.op_span
74
+ result = @collection.lookup_in(@id, [
75
+ LookupInSpec.count(""),
76
+ ], options)
77
+ result.content(0)
78
+ rescue Error::DocumentNotFound
79
+ 0
80
+ end
72
81
  end
73
82
 
74
83
  alias size length
75
84
 
76
85
  # @return [Boolean] returns true if set is empty
77
- def empty?
78
- size.zero?
86
+ def empty?(parent_span: nil)
87
+ size(parent_span: parent_span).zero?
79
88
  end
80
89
 
81
90
  # Adds the given value to the set
82
91
  #
83
92
  # @param [Object] obj
84
93
  # @return [CouchbaseSet]
85
- def add(obj)
86
- begin
94
+ def add(obj, parent_span: nil)
95
+ @observability.record_operation(Observability::OP_SET_ADD, parent_span, self) do |obs_handler|
96
+ options = @options.mutate_in_options.clone
97
+ options.parent_span = obs_handler.op_span
87
98
  @collection.mutate_in(@id, [
88
99
  MutateInSpec.array_add_unique("", obj),
89
- ], @options.mutate_in_options)
100
+ ], options)
90
101
  rescue Error::PathExists
91
102
  # ignore
92
103
  end
@@ -94,31 +105,37 @@ module Couchbase
94
105
  end
95
106
 
96
107
  # Removes all elements from the set
97
- def clear
98
- @collection.remove(@id, @options.remove_options)
99
- nil
100
- rescue Error::DocumentNotFound
101
- nil
108
+ def clear(parent_span: nil)
109
+ @observability.record_operation(Observability::OP_SET_CLEAR, parent_span, self) do |obs_handler|
110
+ options = @options.remove_options.clone
111
+ options.parent_span = obs_handler.op_span
112
+ @collection.remove(@id, options)
113
+ nil
114
+ rescue Error::DocumentNotFound
115
+ nil
116
+ end
102
117
  end
103
118
 
104
119
  # Deletes the given object from the set.
105
120
  #
106
121
  # @return [Boolean] true if the value has been removed
107
- def delete(obj)
108
- result = @collection.get(@id)
109
- idx = result.content.index(obj)
110
- return false unless idx
122
+ def delete(obj, parent_span: nil)
123
+ @observability.record_operation(Observability::OP_SET_DELETE, parent_span, self) do |obs_handler|
124
+ result = @collection.get(@id, Options::Get.new(parent_span: obs_handler.op_span))
125
+ idx = result.content.index(obj)
126
+ return false unless idx
111
127
 
112
- options = Options::MutateIn.new
113
- options.cas = result.cas
114
- @collection.mutate_in(@id, [
115
- MutateInSpec.remove("[#{idx}]"),
116
- ], options)
117
- true
118
- rescue Error::CasMismatch
119
- retry
120
- rescue Error::DocumentNotFound
121
- false
128
+ options = Options::MutateIn.new(parent_span: obs_handler.op_span)
129
+ options.cas = result.cas
130
+ @collection.mutate_in(@id, [
131
+ MutateInSpec.remove("[#{idx}]"),
132
+ ], options)
133
+ true
134
+ rescue Error::CasMismatch
135
+ retry
136
+ rescue Error::DocumentNotFound
137
+ false
138
+ end
122
139
  end
123
140
  end
124
141
 
@@ -19,7 +19,7 @@ module Couchbase
19
19
  def self.deprecate_constants(removed_in_version, parent, constants)
20
20
  deprecator = Module.new do
21
21
  define_method(:const_missing) do |old_name|
22
- return super unless constants.key?(old_name)
22
+ return super(old_name) unless constants.key?(old_name)
23
23
 
24
24
  new_name = constants[old_name]
25
25
 
@@ -47,7 +47,7 @@ module Couchbase
47
47
  yield self if block_given?
48
48
  end
49
49
 
50
- def to_json(*args)
50
+ def to_json(*)
51
51
  data = {
52
52
  id: @id,
53
53
  state: @state,
@@ -56,7 +56,7 @@ module Couchbase
56
56
  }
57
57
  data[:details] = @details if @details
58
58
  data[:last_activity_us] = @last_activity_us if @last_activity_us
59
- data.to_json(*args)
59
+ data.to_json(*)
60
60
  end
61
61
  end
62
62
 
@@ -88,13 +88,13 @@ module Couchbase
88
88
  # @return [Integer] version
89
89
  attr_accessor :version
90
90
 
91
- def to_json(*args)
91
+ def to_json(*)
92
92
  {
93
93
  version: @version,
94
94
  id: @id,
95
95
  sdk: @sdk,
96
96
  services: @services,
97
- }.to_json(*args)
97
+ }.to_json(*)
98
98
  end
99
99
  end
100
100
 
@@ -130,7 +130,7 @@ module Couchbase
130
130
  yield self if block_given?
131
131
  end
132
132
 
133
- def to_json(*args)
133
+ def to_json(*)
134
134
  data = {
135
135
  id: @id,
136
136
  state: @state,
@@ -139,7 +139,7 @@ module Couchbase
139
139
  latency: @latency,
140
140
  }
141
141
  data[:error] = @error if @error
142
- data.to_json(*args)
142
+ data.to_json(*)
143
143
  end
144
144
  end
145
145
 
@@ -171,13 +171,13 @@ module Couchbase
171
171
  # @return [Integer] version
172
172
  attr_accessor :version
173
173
 
174
- def to_json(*args)
174
+ def to_json(*)
175
175
  {
176
176
  version: @version,
177
177
  id: @id,
178
178
  sdk: @sdk,
179
179
  services: @services,
180
- }.to_json(*args)
180
+ }.to_json(*)
181
181
  end
182
182
  end
183
183
  end
@@ -44,7 +44,7 @@ module Couchbase
44
44
  end
45
45
 
46
46
  def to_s
47
- result = super
47
+ result = +super
48
48
  result << ", context=#{JSON.generate(@context)}" if @context
49
49
  result << ", cause=#{@cause}" if @cause
50
50
  result
@@ -410,5 +410,11 @@ module Couchbase
410
410
 
411
411
  class ClusterClosed < CouchbaseError
412
412
  end
413
+
414
+ class TracerError < CouchbaseError
415
+ end
416
+
417
+ class MeterError < CouchbaseError
418
+ end
413
419
  end
414
420
  end
@@ -35,7 +35,7 @@ module Couchbase
35
35
  format = TranscoderFlags.decode(flags).format
36
36
  raise Error::DecodingFailure, "Unable to decode #{format} with the JsonTranscoder" unless format == :json || format.nil?
37
37
 
38
- JSON.parse(blob) unless blob&.empty?
38
+ JSON.parse(blob) unless blob && blob.empty?
39
39
  end
40
40
  end
41
41
  end
@@ -1,6 +1,6 @@
1
1
  begin
2
2
  require_relative "#{RUBY_VERSION[/(\d+\.\d+)/]}/libcouchbase"
3
3
  rescue LoadError
4
- raise LoadError, "unable to load couchbase extension for Ruby #{RUBY_VERSION}. Only available for 3.1, 3.2, 3.3, 3.4. " \
4
+ raise LoadError, "unable to load couchbase extension for Ruby #{RUBY_VERSION}. Only available for 3.2, 3.3, 3.4, 4.0. " \
5
5
  "Try to install couchbase from sources with 'gem install --platform ruby couchbase'"
6
6
  end
@@ -629,8 +629,9 @@ module Couchbase
629
629
  alias inspect to_s
630
630
 
631
631
  # @param [Couchbase::Backend] backend
632
- def initialize(backend)
632
+ def initialize(backend, observability)
633
633
  @backend = backend
634
+ @observability = observability
634
635
  end
635
636
 
636
637
  # Creates a new dataverse
@@ -643,7 +644,9 @@ module Couchbase
643
644
  # @raise [ArgumentError]
644
645
  # @raise [Error::DataverseExists]
645
646
  def create_dataverse(dataverse_name, options = Options::Analytics::CreateDataverse.new)
646
- @backend.analytics_dataverse_create(dataverse_name, options.to_backend)
647
+ @observability.record_operation(Observability::OP_AM_CREATE_DATAVERSE, options.parent_span, self, :analytics) do |obs_handler|
648
+ @backend.analytics_dataverse_create(dataverse_name, options.to_backend, obs_handler)
649
+ end
647
650
  end
648
651
 
649
652
  # Drops a dataverse
@@ -656,7 +659,9 @@ module Couchbase
656
659
  # @raise [ArgumentError]
657
660
  # @raise [Error::DataverseNotFound]
658
661
  def drop_dataverse(dataverse_name, options = Options::Analytics::DropDataverse.new)
659
- @backend.analytics_dataverse_drop(dataverse_name, options.to_backend)
662
+ @observability.record_operation(Observability::OP_AM_DROP_DATAVERSE, options.parent_span, self, :analytics) do |obs_handler|
663
+ @backend.analytics_dataverse_drop(dataverse_name, options.to_backend, obs_handler)
664
+ end
660
665
  end
661
666
 
662
667
  # Creates a new dataset
@@ -671,7 +676,9 @@ module Couchbase
671
676
  # @raise [Error::DatasetExists]
672
677
  # @raise [Error::LinkNotFound]
673
678
  def create_dataset(dataset_name, bucket_name, options = Options::Analytics::CreateDataset.new)
674
- @backend.analytics_dataset_create(dataset_name, bucket_name, options.to_backend)
679
+ @observability.record_operation(Observability::OP_AM_CREATE_DATASET, options.parent_span, self, :analytics) do |_obs_handler|
680
+ @backend.analytics_dataset_create(dataset_name, bucket_name, options.to_backend)
681
+ end
675
682
  end
676
683
 
677
684
  # Drops a dataset
@@ -684,7 +691,9 @@ module Couchbase
684
691
  # @raise [ArgumentError]
685
692
  # @raise [Error::DatasetNotFound]
686
693
  def drop_dataset(dataset_name, options = Options::Analytics::DropDataset.new)
687
- @backend.analytics_dataset_drop(dataset_name, options.to_backend)
694
+ @observability.record_operation(Observability::OP_AM_DROP_DATASET, options.parent_span, self, :analytics) do |obs_handler|
695
+ @backend.analytics_dataset_drop(dataset_name, options.to_backend, obs_handler)
696
+ end
688
697
  end
689
698
 
690
699
  # Gets all datasets
@@ -693,13 +702,15 @@ module Couchbase
693
702
  #
694
703
  # @return [Array<AnalyticsDataset>]
695
704
  def get_all_datasets(options = Options::Analytics::GetAllDatasets.new)
696
- resp = @backend.analytics_dataset_get_all(options.to_backend)
697
- resp.map do |entry|
698
- AnalyticsDataset.new do |dataset|
699
- dataset.name = entry[:name]
700
- dataset.dataverse_name = entry[:dataverse_name]
701
- dataset.link_name = entry[:link_name]
702
- dataset.bucket_name = entry[:bucket_name]
705
+ @observability.record_operation(Observability::OP_AM_GET_ALL_DATASETS, options.parent_span, self, :analytics) do |obs_handler|
706
+ resp = @backend.analytics_dataset_get_all(options.to_backend, obs_handler)
707
+ resp.map do |entry|
708
+ AnalyticsDataset.new do |dataset|
709
+ dataset.name = entry[:name]
710
+ dataset.dataverse_name = entry[:dataverse_name]
711
+ dataset.link_name = entry[:link_name]
712
+ dataset.bucket_name = entry[:bucket_name]
713
+ end
703
714
  end
704
715
  end
705
716
  end
@@ -716,7 +727,9 @@ module Couchbase
716
727
  # @raise [ArgumentError]
717
728
  # @raise [Error::IndexExists]
718
729
  def create_index(index_name, dataset_name, fields, options = Options::Analytics::CreateIndex.new)
719
- @backend.analytics_index_create(index_name, dataset_name, fields.entries, options.to_backend)
730
+ @observability.record_operation(Observability::OP_AM_CREATE_INDEX, options.parent_span, self, :analytics) do |obs_handler|
731
+ @backend.analytics_index_create(index_name, dataset_name, fields.entries, options.to_backend, obs_handler)
732
+ end
720
733
  end
721
734
 
722
735
  # Drops an index
@@ -730,7 +743,9 @@ module Couchbase
730
743
  # @raise [ArgumentError]
731
744
  # @raise [Error::IndexNotFound]
732
745
  def drop_index(index_name, dataset_name, options = Options::Analytics::DropIndex.new)
733
- @backend.analytics_index_drop(index_name, dataset_name, options.to_backend)
746
+ @observability.record_operation(Observability::OP_AM_DROP_INDEX, options.parent_span, self, :analytics) do |obs_handler|
747
+ @backend.analytics_index_drop(index_name, dataset_name, options.to_backend, obs_handler)
748
+ end
734
749
  end
735
750
 
736
751
  # Gets all indexes
@@ -739,13 +754,15 @@ module Couchbase
739
754
  #
740
755
  # @return [Array<AnalyticsIndex>]
741
756
  def get_all_indexes(options = Options::Analytics::GetAllIndexes.new)
742
- resp = @backend.analytics_index_get_all(options.to_backend)
743
- resp.map do |entry|
744
- AnalyticsIndex.new do |dataset|
745
- dataset.name = entry[:name]
746
- dataset.dataverse_name = entry[:dataverse_name]
747
- dataset.dataset_name = entry[:dataset_name]
748
- dataset.is_primary = entry[:is_primary]
757
+ @observability.record_operation(Observability::OP_AM_GET_ALL_INDEXES, options.parent_span, self, :analytics) do |obs_handler|
758
+ resp = @backend.analytics_index_get_all(options.to_backend, obs_handler)
759
+ resp.map do |entry|
760
+ AnalyticsIndex.new do |dataset|
761
+ dataset.name = entry[:name]
762
+ dataset.dataverse_name = entry[:dataverse_name]
763
+ dataset.dataset_name = entry[:dataset_name]
764
+ dataset.is_primary = entry[:is_primary]
765
+ end
749
766
  end
750
767
  end
751
768
  end
@@ -759,7 +776,9 @@ module Couchbase
759
776
  # @raise [ArgumentError]
760
777
  # @raise [Error::LinkNotFound]
761
778
  def connect_link(options = Options::Analytics::ConnectLink.new)
762
- @backend.analytics_link_connect(options.to_backend)
779
+ @observability.record_operation(Observability::OP_AM_CONNECT_LINK, options.parent_span, self, :analytics) do |obs_handler|
780
+ @backend.analytics_link_connect(options.to_backend, obs_handler)
781
+ end
763
782
  end
764
783
 
765
784
  # Disconnects a link,
@@ -771,7 +790,9 @@ module Couchbase
771
790
  # @raise [ArgumentError]
772
791
  # @raise [Error::LinkNotFound]
773
792
  def disconnect_link(options = Options::Analytics::DisconnectLink.new)
774
- @backend.analytics_link_disconnect(options.to_backend)
793
+ @observability.record_operation(Observability::OP_AM_DISCONNECT_LINK, options.parent_span, self, :analytics) do |obs_handler|
794
+ @backend.analytics_link_disconnect(options.to_backend, obs_handler)
795
+ end
775
796
  end
776
797
 
777
798
  # Gets the pending mutations for all datasets.
@@ -784,7 +805,9 @@ module Couchbase
784
805
  # @return [Hash<String => Integer>] dictionary, where keys are dataset coordinates encoded as +"dataverse.dataset"+
785
806
  # and values are number of mutations for given dataset.
786
807
  def get_pending_mutations(options = Options::Analytics::GetPendingMutations.new)
787
- @backend.analytics_get_pending_mutations(options.to_backend)
808
+ @observability.record_operation(Observability::OP_AM_GET_PENDING_MUTATIONS, options.parent_span, self, :analytics) do |obs_handler|
809
+ @backend.analytics_get_pending_mutations(options.to_backend, obs_handler)
810
+ end
788
811
  end
789
812
 
790
813
  # Creates a link
@@ -797,7 +820,9 @@ module Couchbase
797
820
  # @raise [ArgumentError]
798
821
  # @raise [Error::LinkExists]
799
822
  def create_link(link, options = Options::Analytics::CreateLink.new)
800
- @backend.analytics_link_create(link.to_backend, options.to_backend)
823
+ @observability.record_operation(Observability::OP_AM_CREATE_LINK, options.parent_span, self, :analytics) do |obs_handler|
824
+ @backend.analytics_link_create(link.to_backend, options.to_backend, obs_handler)
825
+ end
801
826
  end
802
827
 
803
828
  # Replaces the link
@@ -810,7 +835,9 @@ module Couchbase
810
835
  # @raise [ArgumentError]
811
836
  # @raise [Error::LinkNotFound]
812
837
  def replace_link(link, options = Options::Analytics::ReplaceLink.new)
813
- @backend.analytics_link_replace(link.to_backend, options.to_backend)
838
+ @observability.record_operation(Observability::OP_AM_REPLACE_LINK, options.parent_span, self, :analytics) do |obs_handler|
839
+ @backend.analytics_link_replace(link.to_backend, options.to_backend, obs_handler)
840
+ end
814
841
  end
815
842
 
816
843
  # Drops the link
@@ -824,7 +851,9 @@ module Couchbase
824
851
  # @raise [ArgumentError]
825
852
  # @raise [Error::LinkNotFound]
826
853
  def drop_link(link_name, dataverse_name, options = Options::Analytics::DropLink.new)
827
- @backend.analytics_link_drop(link_name, dataverse_name, options.to_backend)
854
+ @observability.record_operation(Observability::OP_AM_DROP_LINK, options.parent_span, self, :analytics) do |obs_handler|
855
+ @backend.analytics_link_drop(link_name, dataverse_name, options.to_backend, obs_handler)
856
+ end
828
857
  end
829
858
 
830
859
  # Retrieves the links
@@ -836,38 +865,40 @@ module Couchbase
836
865
  # @raise [ArgumentError]
837
866
  # @raise [Error::LinkNotFound]
838
867
  def get_links(options = Options::Analytics::GetLinks.new)
839
- resp = @backend.analytics_link_get_all(options.to_backend)
840
- resp.map do |entry|
841
- case entry[:type]
842
- when :s3
843
- S3ExternalAnalyticsLink.new(
844
- entry[:link_name],
845
- entry[:dataverse],
846
- entry[:access_key_id],
847
- nil,
848
- entry[:region],
849
- service_endpoint: entry[:service_endpoint],
850
- )
851
- when :couchbase
852
- CouchbaseRemoteAnalyticsLink.new(
853
- entry[:link_name],
854
- entry[:dataverse],
855
- entry[:hostname],
856
- username: entry[:username],
857
- encryption: EncryptionSettings.new(
858
- level: entry[:encryption_level],
859
- certificate: entry[:certificate],
860
- client_certificate: entry[:client_certificate],
861
- ),
862
- )
863
- when :azureblob
864
- AzureBlobExternalAnalyticsLink.new(
865
- entry[:link_name],
866
- entry[:dataverse],
867
- account_name: entry[:account_name],
868
- blob_endpoint: entry[:blob_endpoint],
869
- endpoint_suffix: entry[:endpoint_suffix],
870
- )
868
+ @observability.record_operation(Observability::OP_AM_GET_LINKS, options.parent_span, self, :analytics) do |obs_handler|
869
+ resp = @backend.analytics_link_get_all(options.to_backend, obs_handler)
870
+ resp.map do |entry|
871
+ case entry[:type]
872
+ when :s3
873
+ S3ExternalAnalyticsLink.new(
874
+ entry[:link_name],
875
+ entry[:dataverse],
876
+ entry[:access_key_id],
877
+ nil,
878
+ entry[:region],
879
+ service_endpoint: entry[:service_endpoint],
880
+ )
881
+ when :couchbase
882
+ CouchbaseRemoteAnalyticsLink.new(
883
+ entry[:link_name],
884
+ entry[:dataverse],
885
+ entry[:hostname],
886
+ username: entry[:username],
887
+ encryption: EncryptionSettings.new(
888
+ level: entry[:encryption_level],
889
+ certificate: entry[:certificate],
890
+ client_certificate: entry[:client_certificate],
891
+ ),
892
+ )
893
+ when :azureblob
894
+ AzureBlobExternalAnalyticsLink.new(
895
+ entry[:link_name],
896
+ entry[:dataverse],
897
+ account_name: entry[:account_name],
898
+ blob_endpoint: entry[:blob_endpoint],
899
+ endpoint_suffix: entry[:endpoint_suffix],
900
+ )
901
+ end
871
902
  end
872
903
  end
873
904
  end