couchbase 4.2.9 → 4.2.10

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 (93) hide show
  1. package/deps/couchbase-cxx-client/CMakeLists.txt +4 -0
  2. package/deps/couchbase-cxx-client/cmake/CompilerWarnings.cmake +7 -3
  3. package/deps/couchbase-cxx-client/cmake/OpenSSL.cmake +1 -0
  4. package/deps/couchbase-cxx-client/core/bucket.cxx +52 -2
  5. package/deps/couchbase-cxx-client/core/bucket.hxx +1 -1
  6. package/deps/couchbase-cxx-client/core/cluster.cxx +38 -0
  7. package/deps/couchbase-cxx-client/core/impl/bucket.cxx +24 -0
  8. package/deps/couchbase-cxx-client/core/impl/cluster.cxx +73 -0
  9. package/deps/couchbase-cxx-client/core/impl/diagnostics.cxx +294 -0
  10. package/deps/couchbase-cxx-client/core/impl/diagnostics.hxx +39 -0
  11. package/deps/couchbase-cxx-client/core/impl/scope.cxx +19 -4
  12. package/deps/couchbase-cxx-client/core/impl/search.cxx +75 -2
  13. package/deps/couchbase-cxx-client/core/impl/search.hxx +8 -0
  14. package/deps/couchbase-cxx-client/core/impl/search_index_manager.cxx +261 -18
  15. package/deps/couchbase-cxx-client/core/impl/search_request.cxx +139 -0
  16. package/deps/couchbase-cxx-client/core/impl/vector_query.cxx +42 -0
  17. package/deps/couchbase-cxx-client/core/impl/vector_search.cxx +40 -0
  18. package/deps/couchbase-cxx-client/core/io/http_session.hxx +6 -3
  19. package/deps/couchbase-cxx-client/core/io/mcbp_session.cxx +24 -32
  20. package/deps/couchbase-cxx-client/core/io/mcbp_session.hxx +1 -0
  21. package/deps/couchbase-cxx-client/core/logger/logger.cxx +1 -1
  22. package/deps/couchbase-cxx-client/core/meta/features.hxx +10 -0
  23. package/deps/couchbase-cxx-client/core/operations/document_query.cxx +6 -1
  24. package/deps/couchbase-cxx-client/core/operations/document_search.cxx +37 -1
  25. package/deps/couchbase-cxx-client/core/operations/document_search.hxx +11 -0
  26. package/deps/couchbase-cxx-client/core/operations/management/collection_create.cxx +7 -6
  27. package/deps/couchbase-cxx-client/core/operations/management/collection_create.hxx +1 -1
  28. package/deps/couchbase-cxx-client/core/operations/management/collection_update.cxx +7 -8
  29. package/deps/couchbase-cxx-client/core/operations/management/collection_update.hxx +1 -1
  30. package/deps/couchbase-cxx-client/core/operations/management/error_utils.cxx +3 -0
  31. package/deps/couchbase-cxx-client/core/operations/management/search_index_analyze_document.cxx +17 -1
  32. package/deps/couchbase-cxx-client/core/operations/management/search_index_analyze_document.hxx +3 -0
  33. package/deps/couchbase-cxx-client/core/operations/management/search_index_control_ingest.cxx +21 -1
  34. package/deps/couchbase-cxx-client/core/operations/management/search_index_control_ingest.hxx +3 -0
  35. package/deps/couchbase-cxx-client/core/operations/management/search_index_control_plan_freeze.cxx +21 -1
  36. package/deps/couchbase-cxx-client/core/operations/management/search_index_control_plan_freeze.hxx +3 -0
  37. package/deps/couchbase-cxx-client/core/operations/management/search_index_control_query.cxx +21 -1
  38. package/deps/couchbase-cxx-client/core/operations/management/search_index_control_query.hxx +3 -0
  39. package/deps/couchbase-cxx-client/core/operations/management/search_index_drop.cxx +17 -1
  40. package/deps/couchbase-cxx-client/core/operations/management/search_index_drop.hxx +3 -0
  41. package/deps/couchbase-cxx-client/core/operations/management/search_index_get.cxx +17 -1
  42. package/deps/couchbase-cxx-client/core/operations/management/search_index_get.hxx +2 -0
  43. package/deps/couchbase-cxx-client/core/operations/management/search_index_get_all.cxx +39 -22
  44. package/deps/couchbase-cxx-client/core/operations/management/search_index_get_all.hxx +3 -0
  45. package/deps/couchbase-cxx-client/core/operations/management/search_index_get_documents_count.cxx +18 -1
  46. package/deps/couchbase-cxx-client/core/operations/management/search_index_get_documents_count.hxx +3 -0
  47. package/deps/couchbase-cxx-client/core/operations/management/search_index_upsert.cxx +17 -1
  48. package/deps/couchbase-cxx-client/core/operations/management/search_index_upsert.hxx +3 -0
  49. package/deps/couchbase-cxx-client/core/topology/collections_manifest.hxx +1 -1
  50. package/deps/couchbase-cxx-client/core/topology/collections_manifest_json.hxx +1 -1
  51. package/deps/couchbase-cxx-client/core/transactions/internal/utils.hxx +4 -0
  52. package/deps/couchbase-cxx-client/core/vector_query_combination.hxx +23 -0
  53. package/deps/couchbase-cxx-client/couchbase/bucket.hxx +29 -0
  54. package/deps/couchbase-cxx-client/couchbase/cluster.hxx +110 -0
  55. package/deps/couchbase-cxx-client/couchbase/codec/json_transcoder.hxx +1 -1
  56. package/deps/couchbase-cxx-client/couchbase/codec/raw_binary_transcoder.hxx +2 -1
  57. package/deps/couchbase-cxx-client/couchbase/codec/raw_json_transcoder.hxx +78 -0
  58. package/deps/couchbase-cxx-client/couchbase/codec/raw_string_transcoder.hxx +72 -0
  59. package/deps/couchbase-cxx-client/couchbase/create_collection_options.hxx +29 -1
  60. package/deps/couchbase-cxx-client/couchbase/diagnostics_options.hxx +75 -0
  61. package/deps/couchbase-cxx-client/couchbase/diagnostics_result.hxx +124 -0
  62. package/deps/couchbase-cxx-client/couchbase/endpoint_diagnostics.hxx +206 -0
  63. package/deps/couchbase-cxx-client/couchbase/endpoint_ping_report.hxx +205 -0
  64. package/deps/couchbase-cxx-client/couchbase/get_options.hxx +1 -6
  65. package/deps/couchbase-cxx-client/couchbase/management/collection_spec.hxx +1 -1
  66. package/deps/couchbase-cxx-client/couchbase/ping_options.hxx +93 -0
  67. package/deps/couchbase-cxx-client/couchbase/ping_result.hxx +118 -0
  68. package/deps/couchbase-cxx-client/couchbase/scope.hxx +24 -8
  69. package/deps/couchbase-cxx-client/couchbase/scope_search_index_manager.hxx +291 -0
  70. package/deps/couchbase-cxx-client/couchbase/search_request.hxx +120 -0
  71. package/deps/couchbase-cxx-client/couchbase/service_type.hxx +58 -0
  72. package/deps/couchbase-cxx-client/couchbase/update_collection_options.hxx +32 -3
  73. package/deps/couchbase-cxx-client/couchbase/vector_query.hxx +99 -0
  74. package/deps/couchbase-cxx-client/couchbase/vector_search.hxx +85 -0
  75. package/deps/couchbase-cxx-client/couchbase/vector_search_options.hxx +76 -0
  76. package/dist/binding.d.ts +9 -0
  77. package/dist/binding.js +4 -1
  78. package/dist/bindingutilities.d.ts +6 -1
  79. package/dist/bindingutilities.js +15 -1
  80. package/dist/cluster.d.ts +12 -1
  81. package/dist/cluster.js +22 -0
  82. package/dist/couchbase.d.ts +1 -0
  83. package/dist/couchbase.js +1 -0
  84. package/dist/searchexecutor.d.ts +2 -2
  85. package/dist/searchexecutor.js +19 -3
  86. package/dist/searchtypes.d.ts +46 -0
  87. package/dist/searchtypes.js +81 -1
  88. package/dist/vectorsearch.d.ts +99 -0
  89. package/dist/vectorsearch.js +132 -0
  90. package/package.json +7 -7
  91. package/src/constants.cpp +11 -0
  92. package/src/jstocbpp_autogen.hpp +24 -7
  93. package/tools/gen-bindings-json.py +2 -0
@@ -22,11 +22,14 @@
22
22
  #include <couchbase/bucket.hxx>
23
23
  #include <couchbase/bucket_manager.hxx>
24
24
  #include <couchbase/cluster_options.hxx>
25
+ #include <couchbase/diagnostics_options.hxx>
26
+ #include <couchbase/ping_options.hxx>
25
27
  #include <couchbase/query_index_manager.hxx>
26
28
  #include <couchbase/query_options.hxx>
27
29
  #include <couchbase/search_index_manager.hxx>
28
30
  #include <couchbase/search_options.hxx>
29
31
  #include <couchbase/search_query.hxx>
32
+ #include <couchbase/search_request.hxx>
30
33
  #include <couchbase/transactions.hxx>
31
34
 
32
35
  #include <memory>
@@ -141,6 +144,9 @@ class cluster
141
144
  /**
142
145
  * Performs a query against the full text search services.
143
146
  *
147
+ * Consider using the newer @ref cluster::search() interface instead, which can be used
148
+ * for both traditional FTS queries, and to perform a @ref vector_search
149
+ *
144
150
  * @param index_name name of the search index
145
151
  * @param query query object, see hierarchy of @ref search_query for more details.
146
152
  * @param options options to customize the query request.
@@ -159,6 +165,9 @@ class cluster
159
165
  /**
160
166
  * Performs a query against the full text search services.
161
167
  *
168
+ * Consider using the newer @ref cluster::search() interface instead, which can be used
169
+ * for both traditional FTS queries, and to perform a vector search.
170
+ *
162
171
  * @param index_name name of the search index
163
172
  * @param query query object, see hierarchy of @ref search_query for more details.
164
173
  * @param options options to customize the query request.
@@ -175,6 +184,47 @@ class cluster
175
184
  [[nodiscard]] auto search_query(std::string index_name, const class search_query& query, const search_options& options = {}) const
176
185
  -> std::future<std::pair<search_error_context, search_result>>;
177
186
 
187
+ /**
188
+ * Performs a request against the full text search services.
189
+ *
190
+ * This can be used to perform a traditional FTS query, and/or a vector search.
191
+ *
192
+ * @param index_name name of the search index
193
+ * @param request request object, see @ref search_request for more details.
194
+ * @param options options to customize the query request.
195
+ * @param handler the handler that implements @ref search_handler
196
+ *
197
+ * @exception errc::common::ambiguous_timeout
198
+ * @exception errc::common::unambiguous_timeout
199
+ *
200
+ * @see https://docs.couchbase.com/server/current/fts/fts-introduction.html
201
+ *
202
+ * @since 1.0.0
203
+ * @volatile
204
+ */
205
+ void search(std::string index_name, search_request request, const search_options& options, search_handler&& handler) const;
206
+
207
+ /**
208
+ * Performs a request against the full text search services.
209
+ *
210
+ * This can be used to perform a traditional FTS query, and/or a vector search.
211
+ *
212
+ * @param index_name name of the search index
213
+ * @param request request object, see @ref search_request for more details.
214
+ * @param options options to customize the query request.
215
+ * @return future object that carries result of the operation
216
+ *
217
+ * @exception errc::common::ambiguous_timeout
218
+ * @exception errc::common::unambiguous_timeout
219
+ *
220
+ * @see https://docs.couchbase.com/server/current/fts/fts-introduction.html
221
+ *
222
+ * @since 1.0.0
223
+ * @volatile
224
+ */
225
+ [[nodiscard]] auto search(std::string index_name, search_request request, const search_options& = {}) const
226
+ -> std::future<std::pair<search_error_context, search_result>>;
227
+
178
228
  /**
179
229
  * Performs a query against the analytics services.
180
230
  *
@@ -207,6 +257,66 @@ class cluster
207
257
  [[nodiscard]] auto analytics_query(std::string statement, const analytics_options& options = {}) const
208
258
  -> std::future<std::pair<analytics_error_context, analytics_result>>;
209
259
 
260
+ /**
261
+ * Performs application-level ping requests against services in the Couchbase cluster.
262
+ *
263
+ * @note This operation performs active I/O against services and endpoints to assess their health. If you do not
264
+ * wish to performs I/O, consider using @ref diagnostics() instead.
265
+ *
266
+ * @param options custom options to change the default behavior.
267
+ * @param handler the handler that implements @ref ping_handler.
268
+ *
269
+ * @since 1.0.0
270
+ * @committed
271
+ */
272
+ void ping(const ping_options& options, ping_handler&& handler) const;
273
+
274
+ /**
275
+ * Performs application-level ping requests against services in the Couchbase cluster.
276
+ *
277
+ * @note This operation performs active I/O against services and endpoints to assess their health. If you do not
278
+ * wish to performs I/O, consider using @ref diagnostics() instead.
279
+ *
280
+ * @param options custom options to change the default behavior.
281
+ * @return future object that carries result of the operation.
282
+ *
283
+ * @since 1.0.0
284
+ * @committed
285
+ */
286
+ [[nodiscard]] auto ping(const ping_options& options = {}) const -> std::future<ping_result>;
287
+
288
+ /**
289
+ * Assembles a diagnostics report on the current state of the cluster from the SDK's point of view.
290
+ *
291
+ * @note This operation does not perform any I/O to produce the report. It will only use the current known state of
292
+ * the cluster to assemble the report So, if for example, no SQL++ queries have been run, the Query service's socket
293
+ * pool might be empty and as a result not show up in the report. If you wish to actively assess the health of the
294
+ * cluster by performing I/O, consider using @ref ping() instead.
295
+ *
296
+ * @param options custom options to change the default behavior.
297
+ * @param handler the handler that implements @ref diagnostics_handler.
298
+ *
299
+ * @since 1.0.0
300
+ * @committed
301
+ */
302
+ void diagnostics(const diagnostics_options& options, diagnostics_handler&& handler) const;
303
+
304
+ /**
305
+ * Assembles a diagnostics report on the current state of the cluster from the SDK's point of view.
306
+ *
307
+ * @note This operation does not perform any I/O to produce the report. It will only use the current known state of
308
+ * the cluster to assemble the report So, if for example, no SQL++ queries have been run, the Query service's socket
309
+ * pool might be empty and as a result not show up in the report. If you wish to actively assess the health of the
310
+ * cluster by performing I/O, consider using @ref ping() instead.
311
+ *
312
+ * @param options custom options to change the default behavior.
313
+ * @return future object that carries result of the operation.
314
+ *
315
+ * @since 1.0.0
316
+ * @committed
317
+ */
318
+ [[nodiscard]] auto diagnostics(const diagnostics_options& options = {}) const -> std::future<diagnostics_result>;
319
+
210
320
  /**
211
321
  * Provides access to the N1QL index management services.
212
322
  *
@@ -40,7 +40,7 @@ class json_transcoder
40
40
  {
41
41
  if (encoded.flags != 0 && !codec_flags::has_common_flags(encoded.flags, codec_flags::json_common_flags)) {
42
42
  throw std::system_error(errc::common::decoding_failure,
43
- "json_transcoder excepts document to have JSON common flags, flags=" + std::to_string(encoded.flags));
43
+ "json_transcoder expects document to have JSON common flags, flags=" + std::to_string(encoded.flags));
44
44
  }
45
45
 
46
46
  return Serializer::template deserialize<Document>(encoded.data);
@@ -21,6 +21,7 @@
21
21
  #include <couchbase/codec/encoded_value.hxx>
22
22
  #include <couchbase/codec/transcoder_traits.hxx>
23
23
  #include <couchbase/error_codes.hxx>
24
+
24
25
  #include <type_traits>
25
26
 
26
27
  namespace couchbase::codec
@@ -40,7 +41,7 @@ class raw_binary_transcoder
40
41
  {
41
42
  if (!codec_flags::has_common_flags(encoded.flags, codec_flags::binary_common_flags)) {
42
43
  throw std::system_error(errc::common::decoding_failure,
43
- "raw_binary_transcoder excepts document to have BINARY common flags, flags=" +
44
+ "raw_binary_transcoder expects document to have BINARY common flags, flags=" +
44
45
  std::to_string(encoded.flags));
45
46
  }
46
47
 
@@ -0,0 +1,78 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2024. 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
+
18
+ #pragma once
19
+
20
+ #include <couchbase/codec/codec_flags.hxx>
21
+ #include <couchbase/codec/encoded_value.hxx>
22
+ #include <couchbase/codec/transcoder_traits.hxx>
23
+ #include <couchbase/error_codes.hxx>
24
+
25
+ #include <cstddef>
26
+ #include <string>
27
+ #include <string_view>
28
+ #include <type_traits>
29
+ #include <vector>
30
+
31
+ namespace couchbase
32
+ {
33
+ #ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
34
+ namespace core::utils
35
+ {
36
+ std::vector<std::byte>
37
+ to_binary(std::string_view value) noexcept;
38
+ } // namespace core::utils
39
+ #endif
40
+
41
+ namespace codec
42
+ {
43
+ class raw_json_transcoder
44
+ {
45
+ public:
46
+ template<typename Document, std::enable_if_t<std::is_same_v<Document, std::string> || std::is_same_v<Document, binary>, bool> = true>
47
+ static auto encode(const Document& document) -> encoded_value
48
+ {
49
+ if constexpr (std::is_same_v<Document, std::string>) {
50
+ return { core::utils::to_binary(document), codec_flags::json_common_flags };
51
+ } else {
52
+ return { std::move(document), codec_flags::json_common_flags };
53
+ }
54
+ }
55
+
56
+ template<typename Document, std::enable_if_t<std::is_same_v<Document, std::string> || std::is_same_v<Document, binary>, bool> = true>
57
+ static auto decode(const encoded_value& encoded) -> Document
58
+ {
59
+ if (!codec_flags::has_common_flags(encoded.flags, codec_flags::json_common_flags)) {
60
+ throw std::system_error(errc::common::decoding_failure,
61
+ "raw_json_transcoder expects document to have JSON common flags, flags=" +
62
+ std::to_string(encoded.flags));
63
+ }
64
+ if constexpr (std::is_same_v<Document, std::string>) {
65
+ return std::string{ reinterpret_cast<const char*>(encoded.data.data()), encoded.data.size() };
66
+ } else {
67
+ return encoded.data;
68
+ }
69
+ }
70
+ };
71
+
72
+ #ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
73
+ template<>
74
+ struct is_transcoder<raw_json_transcoder> : public std::true_type {
75
+ };
76
+ #endif
77
+ } // namespace codec
78
+ } // namespace couchbase
@@ -0,0 +1,72 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2024. 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
+
18
+ #pragma once
19
+
20
+ #include <couchbase/codec/codec_flags.hxx>
21
+ #include <couchbase/codec/encoded_value.hxx>
22
+ #include <couchbase/codec/transcoder_traits.hxx>
23
+ #include <couchbase/error_codes.hxx>
24
+
25
+ #include <cstddef>
26
+ #include <string>
27
+ #include <string_view>
28
+ #include <type_traits>
29
+ #include <vector>
30
+
31
+ namespace couchbase
32
+ {
33
+ #ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
34
+ namespace core::utils
35
+ {
36
+ std::vector<std::byte>
37
+ to_binary(std::string_view value) noexcept;
38
+ } // namespace core::utils
39
+ #endif
40
+
41
+ namespace codec
42
+ {
43
+ class raw_string_transcoder
44
+ {
45
+ public:
46
+ using document_type = std::string;
47
+
48
+ static auto encode(document_type document) -> encoded_value
49
+ {
50
+ return { core::utils::to_binary(document), codec_flags::string_common_flags };
51
+ }
52
+
53
+ template<typename Document = document_type, std::enable_if_t<std::is_same_v<Document, document_type>, bool> = true>
54
+ static auto decode(const encoded_value& encoded) -> Document
55
+ {
56
+ if (!codec_flags::has_common_flags(encoded.flags, codec_flags::string_common_flags)) {
57
+ throw std::system_error(errc::common::decoding_failure,
58
+ "raw_string_transcoder expects document to have STRING common flags, flags=" +
59
+ std::to_string(encoded.flags));
60
+ }
61
+
62
+ return std::string{ reinterpret_cast<const char*>(encoded.data.data()), encoded.data.size() };
63
+ }
64
+ };
65
+
66
+ #ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
67
+ template<>
68
+ struct is_transcoder<raw_string_transcoder> : public std::true_type {
69
+ };
70
+ #endif
71
+ } // namespace codec
72
+ } // namespace couchbase
@@ -20,6 +20,7 @@
20
20
  #include <couchbase/common_options.hxx>
21
21
  #include <couchbase/manager_error_context.hxx>
22
22
 
23
+ #include <cstdint>
23
24
  #include <functional>
24
25
  #include <optional>
25
26
 
@@ -27,17 +28,44 @@ namespace couchbase
27
28
  {
28
29
  struct create_collection_options : public common_options<create_collection_options> {
29
30
  public:
31
+ /**
32
+ * Immutable value object representing consistent options.
33
+ *
34
+ * @since 1.0.0
35
+ * @internal
36
+ */
30
37
  struct built : public common_options<create_collection_options>::built {
31
38
  };
32
39
 
40
+ /**
41
+ * Validates the options and returns them as an immutable value.
42
+ *
43
+ * @return consistent options as an immutable value
44
+ *
45
+ * @exception std::system_error with code errc::common::invalid_argument if the options are not valid
46
+ *
47
+ * @since 1.0.0
48
+ * @internal
49
+ */
33
50
  [[nodiscard]] auto build() const -> built
34
51
  {
35
52
  return { build_common_options() };
36
53
  }
37
54
  };
38
55
 
56
+ /**
57
+ * The settings to use when creating the collection
58
+ */
39
59
  struct create_collection_settings {
40
- std::uint32_t max_expiry{ 0 };
60
+ /**
61
+ * The maximum expiry, in seconds, for documents in this collection. Values greater than or equal to -1 are valid.
62
+ * Value of 0 sets max_expiry to the bucket-level setting and value of -1 to set it as no-expiry.
63
+ */
64
+ std::int32_t max_expiry{ 0 };
65
+
66
+ /**
67
+ * Whether history retention should be enabled. If unset, the bucket-level setting is used.
68
+ */
41
69
  std::optional<bool> history{};
42
70
  };
43
71
 
@@ -0,0 +1,75 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2023-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
+
18
+ #pragma once
19
+
20
+ #include <couchbase/common_options.hxx>
21
+ #include <couchbase/diagnostics_result.hxx>
22
+
23
+ #include <optional>
24
+ #include <utility>
25
+
26
+ namespace couchbase
27
+ {
28
+ struct diagnostics_options : public common_options<diagnostics_options> {
29
+ /**
30
+ * Sets a custom report ID that will be used in the report. If no report ID is provided, the client will generate a
31
+ * unique one.
32
+ *
33
+ * @param report_id the report ID that should be used.
34
+ * @return reference to this object, for use in chaining.
35
+ *
36
+ * @since 1.0.0
37
+ * @committed
38
+ */
39
+ auto report_id(std::string report_id) -> diagnostics_options&
40
+ {
41
+ report_id_ = std::move(report_id);
42
+ return self();
43
+ }
44
+
45
+ /**
46
+ * Immutable value object representing consistent options.
47
+ *
48
+ * @since 1.0.0
49
+ * @internal
50
+ */
51
+ struct built : public common_options<diagnostics_options>::built {
52
+ std::optional<std::string> report_id;
53
+ };
54
+
55
+ /**
56
+ * Validates the options and returns them as an immutable value.
57
+ *
58
+ * @return consistent options as an immutable value
59
+ *
60
+ * @exception std::system_error with code errc::common::invalid_argument if the options are not valid
61
+ *
62
+ * @since 1.0.0
63
+ * @internal
64
+ */
65
+ [[nodiscard]] auto build() const -> built
66
+ {
67
+ return { build_common_options(), report_id_ };
68
+ }
69
+
70
+ private:
71
+ std::optional<std::string> report_id_{};
72
+ };
73
+
74
+ using diagnostics_handler = std::function<void(diagnostics_result)>;
75
+ } // namespace couchbase
@@ -0,0 +1,124 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2023-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
+
18
+ #pragma once
19
+
20
+ #include <couchbase/codec/tao_json_serializer.hxx>
21
+ #include <couchbase/endpoint_diagnostics.hxx>
22
+ #include <couchbase/service_type.hxx>
23
+
24
+ #include <cstdint>
25
+ #include <map>
26
+ #include <string>
27
+ #include <utility>
28
+ #include <vector>
29
+
30
+ namespace couchbase
31
+ {
32
+ class diagnostics_result
33
+ {
34
+ public:
35
+ /**
36
+ * @since 1.0.0
37
+ * @internal
38
+ */
39
+ diagnostics_result() = default;
40
+
41
+ /**
42
+ * @since 1.0.0
43
+ * @internal
44
+ */
45
+ diagnostics_result(std::string id,
46
+ std::uint16_t version,
47
+ std::string sdk,
48
+ std::map<service_type, std::vector<endpoint_diagnostics>> endpoints)
49
+ : id_{ std::move(id) }
50
+ , version_{ version }
51
+ , sdk_{ std::move(sdk) }
52
+ , endpoints_{ std::move(endpoints) }
53
+ {
54
+ }
55
+
56
+ /**
57
+ * Returns the ID of this report.
58
+ *
59
+ * @return the report ID.
60
+ *
61
+ * @since 1.0.0
62
+ * @committed
63
+ */
64
+ [[nodiscard]] auto id() const -> std::string
65
+ {
66
+ return id_;
67
+ }
68
+
69
+ /**
70
+ * Returns the version of this report (useful when exporting to JSON).
71
+ *
72
+ * @return the report version
73
+ *
74
+ * @since 1.0.0
75
+ * @committed
76
+ */
77
+ [[nodiscard]] auto version() const -> std::uint16_t
78
+ {
79
+ return version_;
80
+ }
81
+
82
+ /**
83
+ * Returns the identifier of this SDK (useful when exporting to JSON).
84
+ *
85
+ * @return the SDK identifier.
86
+ *
87
+ * @since 1.0.0
88
+ * @committed
89
+ */
90
+ [[nodiscard]] auto sdk() const -> std::string
91
+ {
92
+ return sdk_;
93
+ }
94
+
95
+ /**
96
+ * Returns the diagnostics for each individual endpoint, organised by service type.
97
+ *
98
+ * @return the service type to endpoint diagnostics reports map.
99
+ *
100
+ * @since 1.0.0
101
+ * @committed
102
+ */
103
+ [[nodiscard]] auto endpoints() const -> std::map<service_type, std::vector<endpoint_diagnostics>>
104
+ {
105
+ return endpoints_;
106
+ }
107
+
108
+ /**
109
+ * Exports the diagnostics report as JSON.
110
+ *
111
+ * @return the JSON report.
112
+ *
113
+ * @since 1.0.0
114
+ * @committed
115
+ */
116
+ [[nodiscard]] auto as_json() const -> codec::tao_json_serializer::document_type;
117
+
118
+ private:
119
+ std::string id_{};
120
+ std::uint16_t version_{};
121
+ std::string sdk_{};
122
+ std::map<service_type, std::vector<endpoint_diagnostics>> endpoints_{};
123
+ };
124
+ } // namespace couchbase