couchbase 4.6.1 → 4.7.0-dev.1
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.
- package/CMakeLists.txt +2 -1
- package/deps/couchbase-cxx-cache/mozilla-ca-bundle.crt +23 -5
- package/deps/couchbase-cxx-cache/mozilla-ca-bundle.sha256 +1 -1
- package/deps/couchbase-cxx-client/CMakeLists.txt +24 -11
- package/deps/couchbase-cxx-client/README.md +2 -2
- package/deps/couchbase-cxx-client/cmake/APKBUILD.in +17 -1
- package/deps/couchbase-cxx-client/cmake/Bundler.cmake +9 -1
- package/deps/couchbase-cxx-client/cmake/Cache.cmake +48 -19
- package/deps/couchbase-cxx-client/cmake/CompilerOptions.cmake +3 -1
- package/deps/couchbase-cxx-client/cmake/OpenSSL.cmake +10 -2
- package/deps/couchbase-cxx-client/cmake/Packaging.cmake +48 -8
- package/deps/couchbase-cxx-client/cmake/ThirdPartyDependencies.cmake +41 -0
- package/deps/couchbase-cxx-client/cmake/build_config.hxx.in +2 -0
- package/deps/couchbase-cxx-client/cmake/couchbase-cxx-client.spec.in +18 -0
- package/deps/couchbase-cxx-client/cmake/debian/control +6 -1
- package/deps/couchbase-cxx-client/cmake/debian/rules +1 -0
- package/deps/couchbase-cxx-client/cmake/tarball_glob.txt +10 -0
- package/deps/couchbase-cxx-client/core/app_telemetry_meter.cxx +1 -0
- package/deps/couchbase-cxx-client/core/app_telemetry_reporter.cxx +45 -43
- package/deps/couchbase-cxx-client/core/app_telemetry_reporter.hxx +4 -3
- package/deps/couchbase-cxx-client/core/bucket.cxx +128 -13
- package/deps/couchbase-cxx-client/core/bucket.hxx +12 -2
- package/deps/couchbase-cxx-client/core/cluster.cxx +304 -152
- package/deps/couchbase-cxx-client/core/cluster.hxx +32 -0
- package/deps/couchbase-cxx-client/core/cluster_credentials.cxx +25 -0
- package/deps/couchbase-cxx-client/core/cluster_credentials.hxx +5 -0
- package/deps/couchbase-cxx-client/core/cluster_label_listener.cxx +72 -0
- package/deps/couchbase-cxx-client/core/cluster_label_listener.hxx +46 -0
- package/deps/couchbase-cxx-client/core/cluster_options.hxx +4 -0
- package/deps/couchbase-cxx-client/core/deprecation_utils.hxx +26 -0
- package/deps/couchbase-cxx-client/core/error.hxx +27 -0
- package/deps/couchbase-cxx-client/core/free_form_http_request.hxx +0 -2
- package/deps/couchbase-cxx-client/core/http_component.cxx +12 -48
- package/deps/couchbase-cxx-client/core/impl/analytics.cxx +3 -2
- package/deps/couchbase-cxx-client/core/impl/analytics.hxx +2 -1
- package/deps/couchbase-cxx-client/core/impl/analytics_index_manager.cxx +249 -137
- package/deps/couchbase-cxx-client/core/impl/binary_collection.cxx +134 -58
- package/deps/couchbase-cxx-client/core/impl/bucket_manager.cxx +87 -35
- package/deps/couchbase-cxx-client/core/impl/collection.cxx +560 -245
- package/deps/couchbase-cxx-client/core/impl/collection_manager.cxx +89 -49
- package/deps/couchbase-cxx-client/core/impl/dns_srv_tracker.cxx +3 -3
- package/deps/couchbase-cxx-client/core/impl/error.cxx +20 -13
- package/deps/couchbase-cxx-client/core/impl/error.hxx +15 -10
- package/deps/couchbase-cxx-client/core/impl/get_all_replicas.hxx +1 -1
- package/deps/couchbase-cxx-client/core/impl/get_any_replica.hxx +2 -1
- package/deps/couchbase-cxx-client/core/impl/get_replica.hxx +2 -0
- package/deps/couchbase-cxx-client/core/impl/lookup_in_replica.hxx +1 -1
- package/deps/couchbase-cxx-client/core/impl/observability_recorder.cxx +161 -0
- package/deps/couchbase-cxx-client/core/impl/observability_recorder.hxx +77 -0
- package/deps/couchbase-cxx-client/core/impl/observe_seqno.hxx +2 -0
- package/deps/couchbase-cxx-client/core/impl/public_bucket.cxx +31 -7
- package/deps/couchbase-cxx-client/core/impl/public_cluster.cxx +107 -19
- package/deps/couchbase-cxx-client/core/impl/query.cxx +6 -3
- package/deps/couchbase-cxx-client/core/impl/query.hxx +3 -1
- package/deps/couchbase-cxx-client/core/impl/query_index_manager.cxx +267 -102
- package/deps/couchbase-cxx-client/core/impl/scope.cxx +53 -11
- package/deps/couchbase-cxx-client/core/impl/search.cxx +8 -4
- package/deps/couchbase-cxx-client/core/impl/search.hxx +6 -2
- package/deps/couchbase-cxx-client/core/impl/search_index_manager.cxx +131 -41
- package/deps/couchbase-cxx-client/core/impl/with_cancellation.hxx +75 -0
- package/deps/couchbase-cxx-client/core/io/config_tracker.cxx +9 -9
- package/deps/couchbase-cxx-client/core/io/config_tracker.hxx +2 -1
- package/deps/couchbase-cxx-client/core/io/http_command.hxx +98 -49
- package/deps/couchbase-cxx-client/core/io/http_context.hxx +2 -0
- package/deps/couchbase-cxx-client/core/io/http_session.cxx +23 -10
- package/deps/couchbase-cxx-client/core/io/http_session.hxx +17 -9
- package/deps/couchbase-cxx-client/core/io/http_session_manager.hxx +163 -228
- package/deps/couchbase-cxx-client/core/io/http_traits.hxx +0 -7
- package/deps/couchbase-cxx-client/core/io/mcbp_command.hxx +123 -44
- package/deps/couchbase-cxx-client/core/io/mcbp_session.cxx +251 -26
- package/deps/couchbase-cxx-client/core/io/mcbp_session.hxx +9 -1
- package/deps/couchbase-cxx-client/core/io/mcbp_traits.hxx +0 -8
- package/deps/couchbase-cxx-client/core/io/streams.cxx +3 -3
- package/deps/couchbase-cxx-client/core/io/streams.hxx +3 -2
- package/deps/couchbase-cxx-client/core/meta/features.hxx +15 -0
- package/deps/couchbase-cxx-client/core/meta/version.cxx +13 -0
- package/deps/couchbase-cxx-client/core/meta/version.hxx +3 -0
- package/deps/couchbase-cxx-client/core/metrics/constants.hxx +23 -0
- package/deps/couchbase-cxx-client/core/metrics/logging_meter.cxx +5 -5
- package/deps/couchbase-cxx-client/core/metrics/meter_wrapper.cxx +65 -63
- package/deps/couchbase-cxx-client/core/metrics/meter_wrapper.hxx +12 -10
- package/deps/couchbase-cxx-client/core/operations/document_analytics.hxx +0 -5
- package/deps/couchbase-cxx-client/core/operations/document_append.hxx +0 -4
- package/deps/couchbase-cxx-client/core/operations/document_decrement.hxx +0 -5
- package/deps/couchbase-cxx-client/core/operations/document_exists.hxx +0 -7
- package/deps/couchbase-cxx-client/core/operations/document_get.hxx +0 -7
- package/deps/couchbase-cxx-client/core/operations/document_get_all_replicas.hxx +77 -27
- package/deps/couchbase-cxx-client/core/operations/document_get_and_lock.hxx +0 -9
- package/deps/couchbase-cxx-client/core/operations/document_get_and_touch.hxx +0 -9
- package/deps/couchbase-cxx-client/core/operations/document_get_any_replica.hxx +83 -2
- package/deps/couchbase-cxx-client/core/operations/document_get_projected.hxx +0 -9
- package/deps/couchbase-cxx-client/core/operations/document_increment.hxx +0 -5
- package/deps/couchbase-cxx-client/core/operations/document_insert.hxx +0 -4
- package/deps/couchbase-cxx-client/core/operations/document_lookup_in.hxx +0 -9
- package/deps/couchbase-cxx-client/core/operations/document_lookup_in_all_replicas.hxx +46 -4
- package/deps/couchbase-cxx-client/core/operations/document_lookup_in_any_replica.hxx +121 -43
- package/deps/couchbase-cxx-client/core/operations/document_mutate_in.hxx +0 -5
- package/deps/couchbase-cxx-client/core/operations/document_prepend.hxx +0 -4
- package/deps/couchbase-cxx-client/core/operations/document_query.hxx +0 -4
- package/deps/couchbase-cxx-client/core/operations/document_remove.hxx +0 -4
- package/deps/couchbase-cxx-client/core/operations/document_replace.hxx +0 -4
- package/deps/couchbase-cxx-client/core/operations/document_search.hxx +0 -7
- package/deps/couchbase-cxx-client/core/operations/document_touch.hxx +0 -7
- package/deps/couchbase-cxx-client/core/operations/document_unlock.hxx +0 -6
- package/deps/couchbase-cxx-client/core/operations/document_upsert.hxx +0 -4
- package/deps/couchbase-cxx-client/core/operations/document_view.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/document_view.hxx +10 -13
- package/deps/couchbase-cxx-client/core/operations/http_noop.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_dataset_create.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_dataset_drop.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_dataset_get_all.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_dataverse_create.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_dataverse_drop.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_get_pending_mutations.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_index_create.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_index_drop.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_index_get_all.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_link_connect.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_link_create.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_link_disconnect.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_link_drop.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_link_get_all.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_link_replace.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/bucket_create.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/bucket_describe.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/bucket_drop.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/bucket_flush.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/bucket_get.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/bucket_get_all.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/bucket_update.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/change_password.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/cluster_describe.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/cluster_developer_preview_enable.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/collection_create.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/collection_drop.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/collection_update.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/collections_manifest_get.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/error_utils.cxx +4 -1
- package/deps/couchbase-cxx-client/core/operations/management/eventing_deploy_function.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/eventing_drop_function.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/eventing_get_all_functions.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/eventing_get_function.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/eventing_get_status.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/eventing_pause_function.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/eventing_resume_function.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/eventing_undeploy_function.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/eventing_upsert_function.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/freeform.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/group_drop.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/group_get.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/group_get_all.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/group_upsert.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/query_index_build.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/query_index_build_deferred.hxx +68 -30
- package/deps/couchbase-cxx-client/core/operations/management/query_index_create.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/query_index_drop.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/query_index_get_all.hxx +4 -3
- package/deps/couchbase-cxx-client/core/operations/management/query_index_get_all_deferred.hxx +2 -1
- package/deps/couchbase-cxx-client/core/operations/management/role_get_all.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/scope_create.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/scope_drop.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/scope_get_all.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_get_stats.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_analyze_document.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_control_ingest.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_control_plan_freeze.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_control_query.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_drop.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_get.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_get_all.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_get_documents_count.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_get_stats.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_upsert.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/user_drop.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/user_get.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/user_get_all.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/user_upsert.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/view_index_drop.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/view_index_get.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/view_index_get_all.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/view_index_upsert.hxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/operation_traits.hxx +6 -0
- package/deps/couchbase-cxx-client/core/operations.hxx +0 -1
- package/deps/couchbase-cxx-client/core/operations_fwd.hxx +8 -0
- package/deps/couchbase-cxx-client/core/origin.cxx +67 -12
- package/deps/couchbase-cxx-client/core/origin.hxx +13 -8
- package/deps/couchbase-cxx-client/core/orphan_reporter.cxx +164 -0
- package/deps/couchbase-cxx-client/core/orphan_reporter.hxx +65 -0
- package/deps/couchbase-cxx-client/core/sasl/CMakeLists.txt +1 -0
- package/deps/couchbase-cxx-client/core/sasl/client.cc +6 -0
- package/deps/couchbase-cxx-client/core/sasl/mechanism.cc +2 -1
- package/deps/couchbase-cxx-client/core/sasl/mechanism.h +2 -1
- package/deps/couchbase-cxx-client/core/sasl/oauthbearer/oauthbearer.cc +41 -0
- package/deps/couchbase-cxx-client/core/sasl/oauthbearer/oauthbearer.h +47 -0
- package/deps/couchbase-cxx-client/core/tls_context_provider.cxx +44 -0
- package/deps/couchbase-cxx-client/core/tls_context_provider.hxx +44 -0
- package/deps/couchbase-cxx-client/core/tracing/attribute_helpers.hxx +45 -0
- package/deps/couchbase-cxx-client/core/tracing/constants.hxx +148 -68
- package/deps/couchbase-cxx-client/core/tracing/threshold_logging_options.hxx +0 -3
- package/deps/couchbase-cxx-client/core/tracing/threshold_logging_tracer.cxx +122 -170
- package/deps/couchbase-cxx-client/core/tracing/tracer_wrapper.cxx +17 -24
- package/deps/couchbase-cxx-client/core/tracing/tracer_wrapper.hxx +8 -10
- package/deps/couchbase-cxx-client/core/tracing/wrapper_sdk_tracer.cxx +114 -0
- package/deps/couchbase-cxx-client/core/tracing/wrapper_sdk_tracer.hxx +85 -0
- package/deps/couchbase-cxx-client/core/transactions/attempt_context_impl.cxx +16 -14
- package/deps/couchbase-cxx-client/core/transactions/attempt_context_impl.hxx +4 -4
- package/deps/couchbase-cxx-client/core/transactions/transactions.cxx +1 -1
- package/deps/couchbase-cxx-client/core/transactions/transactions_cleanup.cxx +1 -2
- package/deps/couchbase-cxx-client/core/utils/byteswap.hxx +12 -0
- package/deps/couchbase-cxx-client/core/utils/concurrent_fixed_priority_queue.hxx +102 -0
- package/deps/couchbase-cxx-client/core/utils/connection_string.cxx +2 -0
- package/deps/couchbase-cxx-client/couchbase/certificate_authenticator.hxx +1 -0
- package/deps/couchbase-cxx-client/couchbase/cluster.hxx +47 -0
- package/deps/couchbase-cxx-client/couchbase/cluster_options.hxx +16 -0
- package/deps/couchbase-cxx-client/couchbase/collection.hxx +60 -15
- package/deps/couchbase-cxx-client/couchbase/error_codes.hxx +48 -48
- package/deps/couchbase-cxx-client/couchbase/jwt_authenticator.hxx +52 -0
- package/deps/couchbase-cxx-client/couchbase/metrics/meter.hxx +2 -1
- package/deps/couchbase-cxx-client/couchbase/metrics/otel_meter.hxx +75 -80
- package/deps/couchbase-cxx-client/couchbase/network_options.hxx +19 -0
- package/deps/couchbase-cxx-client/couchbase/password_authenticator.hxx +1 -0
- package/deps/couchbase-cxx-client/couchbase/tracing/otel_tracer.hxx +15 -17
- package/deps/couchbase-cxx-client/couchbase/tracing/request_span.hxx +2 -2
- package/dist/analyticsexecutor.d.ts +15 -0
- package/dist/analyticsexecutor.js +79 -50
- package/dist/analyticsindexmanager.d.ts +66 -0
- package/dist/analyticsindexmanager.js +404 -277
- package/dist/analyticstypes.d.ts +5 -0
- package/dist/authenticators.d.ts +34 -1
- package/dist/authenticators.js +19 -1
- package/dist/binarycollection.d.ts +17 -0
- package/dist/binding.d.ts +245 -228
- package/dist/bindingutilities.js +1 -1
- package/dist/bucket.d.ts +8 -0
- package/dist/bucket.js +8 -0
- package/dist/bucketmanager.d.ts +30 -0
- package/dist/bucketmanager.js +128 -69
- package/dist/cluster.d.ts +45 -0
- package/dist/cluster.js +133 -21
- package/dist/collection.d.ts +75 -2
- package/dist/collection.js +772 -551
- package/dist/collectionmanager.d.ts +34 -0
- package/dist/collectionmanager.js +172 -89
- package/dist/couchbase.d.ts +5 -0
- package/dist/couchbase.js +5 -0
- package/dist/datastructures.js +310 -97
- package/dist/errors.d.ts +8 -0
- package/dist/errors.js +12 -1
- package/dist/eventingfunctionmanager.d.ts +42 -0
- package/dist/eventingfunctionmanager.js +172 -100
- package/dist/logger.d.ts +192 -0
- package/dist/logger.js +213 -0
- package/dist/loggingmeter.d.ts +120 -0
- package/dist/loggingmeter.js +226 -0
- package/dist/metrics.d.ts +33 -0
- package/dist/metrics.js +5 -0
- package/dist/observability.d.ts +60 -0
- package/dist/observability.js +86 -0
- package/dist/observabilityhandler.d.ts +176 -0
- package/dist/observabilityhandler.js +733 -0
- package/dist/observabilitytypes.d.ts +320 -0
- package/dist/observabilitytypes.js +362 -0
- package/dist/observabilityutilities.d.ts +60 -0
- package/dist/observabilityutilities.js +175 -0
- package/dist/otelmeter.d.ts +51 -0
- package/dist/otelmeter.js +100 -0
- package/dist/oteltracer.d.ts +69 -0
- package/dist/oteltracer.js +141 -0
- package/dist/queryexecutor.d.ts +16 -0
- package/dist/queryexecutor.js +128 -86
- package/dist/queryindexmanager.d.ts +29 -0
- package/dist/queryindexmanager.js +277 -150
- package/dist/querytypes.d.ts +5 -0
- package/dist/scope.js +2 -2
- package/dist/scopeeventingfunctionmanager.d.ts +5 -0
- package/dist/scopeeventingfunctionmanager.js +217 -119
- package/dist/scopesearchindexmanager.d.ts +5 -0
- package/dist/scopesearchindexmanager.js +295 -166
- package/dist/sdspecs.js +6 -1
- package/dist/searchexecutor.d.ts +15 -0
- package/dist/searchexecutor.js +54 -26
- package/dist/searchindexmanager.d.ts +54 -0
- package/dist/searchindexmanager.js +235 -142
- package/dist/searchtypes.d.ts +5 -0
- package/dist/thresholdlogging.d.ts +301 -0
- package/dist/thresholdlogging.js +657 -0
- package/dist/tracing.d.ts +55 -0
- package/dist/tracing.js +2 -0
- package/dist/usermanager.d.ts +46 -0
- package/dist/usermanager.js +199 -118
- package/dist/utilities.d.ts +4 -0
- package/dist/utilities.js +11 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.js +7 -0
- package/dist/viewexecutor.d.ts +15 -0
- package/dist/viewexecutor.js +54 -29
- package/dist/viewindexmanager.d.ts +30 -0
- package/dist/viewindexmanager.js +129 -100
- package/dist/viewtypes.d.ts +5 -0
- package/package.json +19 -9
- package/scripts/prebuilds.js +1 -1
- package/scripts/updateVersion.js +26 -0
- package/src/connection.cpp +79 -98
- package/src/connection.hpp +46 -38
- package/src/connection_autogen.cpp +1236 -292
- package/src/jstocbpp_autogen.hpp +1117 -313
- package/src/jstocbpp_basic.hpp +73 -0
- package/src/jstocbpp_defs.hpp +37 -9
- package/src/jstocbpp_errors.hpp +37 -11
- package/tools/gen-bindings-js.js +100 -22
- package/tools/gen-bindings-json.py +40 -6
- package/src/transcoder.hpp +0 -96
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { AnalyticsQueryOptions } from './analyticstypes';
|
|
2
|
+
import { CppDocumentId, CppDurabilityLevel, HiResTime } from './binding';
|
|
3
|
+
import { AttributeValue, HttpOpType, KeyValueOp, TimeInput } from './observabilitytypes';
|
|
4
|
+
import { QueryOptions } from './querytypes';
|
|
5
|
+
/**
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export type StreamingOptions = AnalyticsQueryOptions | QueryOptions;
|
|
9
|
+
/**
|
|
10
|
+
* Generates an absolute Unix epoch time with nanosecond precision.
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export declare function getEpochHiResTime(): [number, number];
|
|
14
|
+
/**
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
export declare function hiResTimeToMicros(hrTime: HiResTime): number;
|
|
18
|
+
/**
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
export declare function getHiResTimeDelta(start: HiResTime, end: HiResTime): HiResTime;
|
|
22
|
+
/**
|
|
23
|
+
* @internal
|
|
24
|
+
*/
|
|
25
|
+
export declare function millisToHiResTime(millis: number): HiResTime;
|
|
26
|
+
/**
|
|
27
|
+
* @internal
|
|
28
|
+
*/
|
|
29
|
+
export declare function getLatestTime(timeA: HiResTime, timeB: HiResTime): HiResTime;
|
|
30
|
+
/**
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
export declare function getCoreSpanEndTime(coreSpanEndTime: HiResTime): HiResTime;
|
|
34
|
+
/**
|
|
35
|
+
* @internal
|
|
36
|
+
*/
|
|
37
|
+
export declare function timeInputToHiResTime(input?: TimeInput): HiResTime;
|
|
38
|
+
/**
|
|
39
|
+
* @internal
|
|
40
|
+
*/
|
|
41
|
+
export declare function getAttributesForKeyValueOpType(opType: KeyValueOp, cppDocId: CppDocumentId, durability?: CppDurabilityLevel): {
|
|
42
|
+
[key: string]: AttributeValue;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* @internal
|
|
46
|
+
*/
|
|
47
|
+
export interface HttpOpAttributesOptions {
|
|
48
|
+
statement?: string;
|
|
49
|
+
queryOptions?: StreamingOptions;
|
|
50
|
+
queryContext?: string;
|
|
51
|
+
bucketName?: string;
|
|
52
|
+
scopeName?: string;
|
|
53
|
+
collectionName?: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* @internal
|
|
57
|
+
*/
|
|
58
|
+
export declare function getAttributesForHttpOpType(opType: HttpOpType, options?: HttpOpAttributesOptions): {
|
|
59
|
+
[key: string]: AttributeValue;
|
|
60
|
+
};
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getAttributesForHttpOpType = exports.getAttributesForKeyValueOpType = exports.timeInputToHiResTime = exports.getCoreSpanEndTime = exports.getLatestTime = exports.millisToHiResTime = exports.getHiResTimeDelta = exports.hiResTimeToMicros = exports.getEpochHiResTime = void 0;
|
|
7
|
+
const binding_1 = __importDefault(require("./binding"));
|
|
8
|
+
const observabilitytypes_1 = require("./observabilitytypes");
|
|
9
|
+
// Define standard time constants
|
|
10
|
+
const MILLIS_PER_SECOND = 1000;
|
|
11
|
+
const NANOS_PER_SECOND = 1000000000;
|
|
12
|
+
const MICROS_PER_SECOND = 1000000;
|
|
13
|
+
const NANOS_PER_MILLI = 1000000;
|
|
14
|
+
// Take a snapshot the moment the SDK loads
|
|
15
|
+
const TIME_ORIGIN_MS = Date.now();
|
|
16
|
+
const HRTIME_ORIGIN = process.hrtime();
|
|
17
|
+
// Convert the absolute origin into [seconds, nanoseconds]
|
|
18
|
+
const ORIGIN_SECONDS = Math.floor(TIME_ORIGIN_MS / MILLIS_PER_SECOND);
|
|
19
|
+
const ORIGIN_NANOS = (TIME_ORIGIN_MS % MILLIS_PER_SECOND) * NANOS_PER_MILLI;
|
|
20
|
+
/**
|
|
21
|
+
* Generates an absolute Unix epoch time with nanosecond precision.
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
function getEpochHiResTime() {
|
|
25
|
+
// Get the current monotonic time
|
|
26
|
+
const nowHrTime = process.hrtime();
|
|
27
|
+
// Calculate exactly how much time has passed since our anchor snapshot
|
|
28
|
+
const [deltaSeconds, deltaNanos] = getHiResTimeDelta(HRTIME_ORIGIN, nowHrTime);
|
|
29
|
+
// Add the high-res delta to our absolute epoch anchor
|
|
30
|
+
let epochSeconds = ORIGIN_SECONDS + deltaSeconds;
|
|
31
|
+
let epochNanos = ORIGIN_NANOS + deltaNanos;
|
|
32
|
+
// Handle nanosecond overflow (if nanos exceed 1 second, carry it over)
|
|
33
|
+
if (epochNanos >= NANOS_PER_SECOND) {
|
|
34
|
+
epochSeconds += 1;
|
|
35
|
+
epochNanos -= NANOS_PER_SECOND;
|
|
36
|
+
}
|
|
37
|
+
return [epochSeconds, epochNanos];
|
|
38
|
+
}
|
|
39
|
+
exports.getEpochHiResTime = getEpochHiResTime;
|
|
40
|
+
/**
|
|
41
|
+
* @internal
|
|
42
|
+
*/
|
|
43
|
+
function hiResTimeToMicros(hrTime) {
|
|
44
|
+
return hrTime[0] * MICROS_PER_SECOND + hrTime[1] / MILLIS_PER_SECOND;
|
|
45
|
+
}
|
|
46
|
+
exports.hiResTimeToMicros = hiResTimeToMicros;
|
|
47
|
+
/**
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
50
|
+
function getHiResTimeDelta(start, end) {
|
|
51
|
+
let seconds = end[0] - start[0];
|
|
52
|
+
let nanoseconds = end[1] - start[1];
|
|
53
|
+
// Handle nanosecond underflow
|
|
54
|
+
if (nanoseconds < 0) {
|
|
55
|
+
seconds -= 1;
|
|
56
|
+
nanoseconds += NANOS_PER_SECOND;
|
|
57
|
+
}
|
|
58
|
+
return [seconds, nanoseconds];
|
|
59
|
+
}
|
|
60
|
+
exports.getHiResTimeDelta = getHiResTimeDelta;
|
|
61
|
+
/**
|
|
62
|
+
* @internal
|
|
63
|
+
*/
|
|
64
|
+
function millisToHiResTime(millis) {
|
|
65
|
+
const seconds = Math.floor(millis / MILLIS_PER_SECOND);
|
|
66
|
+
const remainingMillis = millis - seconds * MILLIS_PER_SECOND;
|
|
67
|
+
const nanoseconds = remainingMillis * MICROS_PER_SECOND;
|
|
68
|
+
return [seconds, nanoseconds];
|
|
69
|
+
}
|
|
70
|
+
exports.millisToHiResTime = millisToHiResTime;
|
|
71
|
+
/**
|
|
72
|
+
* @internal
|
|
73
|
+
*/
|
|
74
|
+
function getLatestTime(timeA, timeB) {
|
|
75
|
+
// first compare seconds
|
|
76
|
+
if (timeA[0] > timeB[0]) {
|
|
77
|
+
return timeA;
|
|
78
|
+
}
|
|
79
|
+
if (timeA[0] < timeB[0]) {
|
|
80
|
+
return timeB;
|
|
81
|
+
}
|
|
82
|
+
// If seconds are exactly the same, compare the nanoseconds
|
|
83
|
+
if (timeA[1] >= timeB[1]) {
|
|
84
|
+
return timeA;
|
|
85
|
+
}
|
|
86
|
+
return timeB;
|
|
87
|
+
}
|
|
88
|
+
exports.getLatestTime = getLatestTime;
|
|
89
|
+
/**
|
|
90
|
+
* @internal
|
|
91
|
+
*/
|
|
92
|
+
function getCoreSpanEndTime(coreSpanEndTime) {
|
|
93
|
+
// Mitigate Node.js vs C++ clock skew. A parent span must fully encapsulate
|
|
94
|
+
// its children, so we ensure the parent ends at or after the core child's end time.
|
|
95
|
+
const currentTime = timeInputToHiResTime();
|
|
96
|
+
return getLatestTime(currentTime, coreSpanEndTime);
|
|
97
|
+
}
|
|
98
|
+
exports.getCoreSpanEndTime = getCoreSpanEndTime;
|
|
99
|
+
/**
|
|
100
|
+
* @internal
|
|
101
|
+
*/
|
|
102
|
+
function timeInputToHiResTime(input) {
|
|
103
|
+
if (typeof input === 'undefined') {
|
|
104
|
+
return getEpochHiResTime();
|
|
105
|
+
}
|
|
106
|
+
// If a Date object is provided, extract the epoch milliseconds
|
|
107
|
+
if (input instanceof Date) {
|
|
108
|
+
return millisToHiResTime(input.getTime());
|
|
109
|
+
}
|
|
110
|
+
// If a number is provided, assume it is epoch milliseconds
|
|
111
|
+
if (typeof input === 'number') {
|
|
112
|
+
return millisToHiResTime(input);
|
|
113
|
+
}
|
|
114
|
+
return input;
|
|
115
|
+
}
|
|
116
|
+
exports.timeInputToHiResTime = timeInputToHiResTime;
|
|
117
|
+
/**
|
|
118
|
+
* @internal
|
|
119
|
+
*/
|
|
120
|
+
function getAttributesForKeyValueOpType(opType, cppDocId, durability) {
|
|
121
|
+
const attributes = {
|
|
122
|
+
[observabilitytypes_1.OpAttributeName.SystemName]: 'couchbase',
|
|
123
|
+
[observabilitytypes_1.OpAttributeName.Service]: (0, observabilitytypes_1.serviceNameFromOpType)(opType),
|
|
124
|
+
[observabilitytypes_1.OpAttributeName.OperationName]: opType,
|
|
125
|
+
[observabilitytypes_1.OpAttributeName.BucketName]: cppDocId.bucket,
|
|
126
|
+
[observabilitytypes_1.OpAttributeName.ScopeName]: cppDocId.scope,
|
|
127
|
+
[observabilitytypes_1.OpAttributeName.CollectionName]: cppDocId.collection,
|
|
128
|
+
};
|
|
129
|
+
if (durability && durability != binding_1.default.durability_level.none) {
|
|
130
|
+
if (durability === binding_1.default.durability_level.majority) {
|
|
131
|
+
attributes[observabilitytypes_1.OpAttributeName.DurabilityLevel] = 'majority';
|
|
132
|
+
}
|
|
133
|
+
else if (durability === binding_1.default.durability_level.majority_and_persist_to_active) {
|
|
134
|
+
attributes[observabilitytypes_1.OpAttributeName.DurabilityLevel] =
|
|
135
|
+
'majority_and_persist_to_active';
|
|
136
|
+
}
|
|
137
|
+
else if (durability === binding_1.default.durability_level.persist_to_majority) {
|
|
138
|
+
attributes[observabilitytypes_1.OpAttributeName.DurabilityLevel] = 'persist_to_majority';
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return attributes;
|
|
142
|
+
}
|
|
143
|
+
exports.getAttributesForKeyValueOpType = getAttributesForKeyValueOpType;
|
|
144
|
+
/**
|
|
145
|
+
* @internal
|
|
146
|
+
*/
|
|
147
|
+
function getAttributesForHttpOpType(opType, options) {
|
|
148
|
+
var _a;
|
|
149
|
+
const attributes = {
|
|
150
|
+
[observabilitytypes_1.OpAttributeName.SystemName]: 'couchbase',
|
|
151
|
+
[observabilitytypes_1.OpAttributeName.Service]: (0, observabilitytypes_1.serviceNameFromOpType)(opType),
|
|
152
|
+
[observabilitytypes_1.OpAttributeName.OperationName]: opType,
|
|
153
|
+
};
|
|
154
|
+
if (((_a = options === null || options === void 0 ? void 0 : options.queryOptions) === null || _a === void 0 ? void 0 : _a.parameters) && options.statement) {
|
|
155
|
+
attributes[observabilitytypes_1.OpAttributeName.QueryStatement] = options.statement;
|
|
156
|
+
}
|
|
157
|
+
if (options === null || options === void 0 ? void 0 : options.bucketName) {
|
|
158
|
+
attributes[observabilitytypes_1.OpAttributeName.BucketName] = options.bucketName;
|
|
159
|
+
}
|
|
160
|
+
if (options === null || options === void 0 ? void 0 : options.scopeName) {
|
|
161
|
+
attributes[observabilitytypes_1.OpAttributeName.ScopeName] = options.scopeName;
|
|
162
|
+
}
|
|
163
|
+
if (options === null || options === void 0 ? void 0 : options.collectionName) {
|
|
164
|
+
attributes[observabilitytypes_1.OpAttributeName.CollectionName] = options.collectionName;
|
|
165
|
+
}
|
|
166
|
+
if (options === null || options === void 0 ? void 0 : options.queryContext) {
|
|
167
|
+
const [bucketName, scopeName] = options.queryContext
|
|
168
|
+
.split('.')
|
|
169
|
+
.map((str) => str.replace(/`/g, ''));
|
|
170
|
+
attributes[observabilitytypes_1.OpAttributeName.BucketName] = bucketName;
|
|
171
|
+
attributes[observabilitytypes_1.OpAttributeName.ScopeName] = scopeName;
|
|
172
|
+
}
|
|
173
|
+
return attributes;
|
|
174
|
+
}
|
|
175
|
+
exports.getAttributesForHttpOpType = getAttributesForHttpOpType;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Meter, ValueRecorder } from './metrics';
|
|
2
|
+
import type { Histogram as OTelHistogram, Meter as OTelMeter, MeterProvider as OTelMeterProvider } from '@opentelemetry/api';
|
|
3
|
+
/**
|
|
4
|
+
* Wrapper class for OpenTelemetry Histogram that implements ValueRecorder interface.
|
|
5
|
+
*/
|
|
6
|
+
export declare class OTelValueRecorder implements ValueRecorder {
|
|
7
|
+
private _histogram;
|
|
8
|
+
private _tags;
|
|
9
|
+
private _unit?;
|
|
10
|
+
/**
|
|
11
|
+
* Creates an instance of OTelValueRecorder.
|
|
12
|
+
*
|
|
13
|
+
* @param histogram - OpenTelemetry Histogram to record values.
|
|
14
|
+
* @param tags - Tags to associate with recorded values.
|
|
15
|
+
* @param unit - Optional unit of measurement (e.g., 's' for seconds). If provided, it indicates that the recorded values
|
|
16
|
+
* should be converted from microseconds to seconds.
|
|
17
|
+
*/
|
|
18
|
+
constructor(histogram: OTelHistogram, tags: Record<string, string>, unit?: string);
|
|
19
|
+
/**
|
|
20
|
+
* Records a value with the associated tags.
|
|
21
|
+
*
|
|
22
|
+
* @param value - The numeric value to record.
|
|
23
|
+
*/
|
|
24
|
+
recordValue(value: number): void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Wrapper class for OpenTelemetry Meter that implements Meter interface.
|
|
28
|
+
*/
|
|
29
|
+
export declare class OTelWrapperMeter implements Meter {
|
|
30
|
+
private _otelMeter;
|
|
31
|
+
private _histograms;
|
|
32
|
+
/**
|
|
33
|
+
* Creates an instance of OTelWrapperMeter.
|
|
34
|
+
*
|
|
35
|
+
* @param meter - OpenTelemetry Meter to wrap.
|
|
36
|
+
*/
|
|
37
|
+
constructor(meter: OTelMeter);
|
|
38
|
+
/**
|
|
39
|
+
* Creates a ValueRecorder for recording metric values.
|
|
40
|
+
*
|
|
41
|
+
* @param name - The name of the metric.
|
|
42
|
+
* @param tags - Tags to associate with recorded values.
|
|
43
|
+
* @returns A ValueRecorder instance for recording metrics.
|
|
44
|
+
*/
|
|
45
|
+
valueRecorder(name: string, tags: Record<string, any>): ValueRecorder;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Creates an OpenTelemetry wrapper meter.
|
|
49
|
+
* Throws an Error if @opentelemetry/api is not installed.
|
|
50
|
+
*/
|
|
51
|
+
export declare function getOTelMeter(provider?: OTelMeterProvider): Meter;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getOTelMeter = exports.OTelWrapperMeter = exports.OTelValueRecorder = void 0;
|
|
4
|
+
const version_1 = require("./version");
|
|
5
|
+
/* eslint-enable n/no-missing-import */
|
|
6
|
+
// Dynamic Runtime Require (Bundler-safe)
|
|
7
|
+
let otelApi = null;
|
|
8
|
+
let HAS_OTEL = false;
|
|
9
|
+
try {
|
|
10
|
+
// Hiding the string prevents Webpack/Vite from throwing missing dependency errors
|
|
11
|
+
const moduleName = '@opentelemetry/api';
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
13
|
+
otelApi = require(moduleName);
|
|
14
|
+
HAS_OTEL = true;
|
|
15
|
+
}
|
|
16
|
+
catch (_err) {
|
|
17
|
+
HAS_OTEL = false;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Wrapper class for OpenTelemetry Histogram that implements ValueRecorder interface.
|
|
21
|
+
*/
|
|
22
|
+
class OTelValueRecorder {
|
|
23
|
+
/**
|
|
24
|
+
* Creates an instance of OTelValueRecorder.
|
|
25
|
+
*
|
|
26
|
+
* @param histogram - OpenTelemetry Histogram to record values.
|
|
27
|
+
* @param tags - Tags to associate with recorded values.
|
|
28
|
+
* @param unit - Optional unit of measurement (e.g., 's' for seconds). If provided, it indicates that the recorded values
|
|
29
|
+
* should be converted from microseconds to seconds.
|
|
30
|
+
*/
|
|
31
|
+
constructor(histogram, tags, unit) {
|
|
32
|
+
this._histogram = histogram;
|
|
33
|
+
this._tags = tags;
|
|
34
|
+
this._unit = unit;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Records a value with the associated tags.
|
|
38
|
+
*
|
|
39
|
+
* @param value - The numeric value to record.
|
|
40
|
+
*/
|
|
41
|
+
recordValue(value) {
|
|
42
|
+
// The SDK records value in micros and will place a special __unit tag in the tags set to 's'
|
|
43
|
+
// So self._unit == 's' is indication that we should convert from micros to seconds
|
|
44
|
+
const finalValue = this._unit === 's' ? value / 1000000 : value;
|
|
45
|
+
this._histogram.record(finalValue, this._tags);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.OTelValueRecorder = OTelValueRecorder;
|
|
49
|
+
/**
|
|
50
|
+
* Wrapper class for OpenTelemetry Meter that implements Meter interface.
|
|
51
|
+
*/
|
|
52
|
+
class OTelWrapperMeter {
|
|
53
|
+
/**
|
|
54
|
+
* Creates an instance of OTelWrapperMeter.
|
|
55
|
+
*
|
|
56
|
+
* @param meter - OpenTelemetry Meter to wrap.
|
|
57
|
+
*/
|
|
58
|
+
constructor(meter) {
|
|
59
|
+
this._otelMeter = meter;
|
|
60
|
+
this._histograms = {};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Creates a ValueRecorder for recording metric values.
|
|
64
|
+
*
|
|
65
|
+
* @param name - The name of the metric.
|
|
66
|
+
* @param tags - Tags to associate with recorded values.
|
|
67
|
+
* @returns A ValueRecorder instance for recording metrics.
|
|
68
|
+
*/
|
|
69
|
+
valueRecorder(name, tags) {
|
|
70
|
+
const localTags = tags ? { ...tags } : {};
|
|
71
|
+
const unit = localTags.__unit;
|
|
72
|
+
delete localTags.__unit;
|
|
73
|
+
if (!this._histograms[name]) {
|
|
74
|
+
this._histograms[name] = this._otelMeter.createHistogram(name, {
|
|
75
|
+
unit: unit,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
const histogram = this._histograms[name];
|
|
79
|
+
return new OTelValueRecorder(histogram, localTags, unit);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.OTelWrapperMeter = OTelWrapperMeter;
|
|
83
|
+
/**
|
|
84
|
+
* Creates an OpenTelemetry wrapper meter.
|
|
85
|
+
* Throws an Error if @opentelemetry/api is not installed.
|
|
86
|
+
*/
|
|
87
|
+
function getOTelMeter(provider) {
|
|
88
|
+
if (!HAS_OTEL || !otelApi) {
|
|
89
|
+
throw new Error('OpenTelemetry is not installed. Please install it with: ' +
|
|
90
|
+
'npm install @opentelemetry/api');
|
|
91
|
+
}
|
|
92
|
+
const pkgName = `${version_1.SDK_NAME}-nodejs-client`;
|
|
93
|
+
const pkgVersion = version_1.SDK_VERSION;
|
|
94
|
+
if (provider) {
|
|
95
|
+
return new OTelWrapperMeter(provider.getMeter(pkgName, pkgVersion));
|
|
96
|
+
}
|
|
97
|
+
// Fallback to the global OpenTelemetry metrics provider
|
|
98
|
+
return new OTelWrapperMeter(otelApi.metrics.getMeter(pkgName, pkgVersion));
|
|
99
|
+
}
|
|
100
|
+
exports.getOTelMeter = getOTelMeter;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { AttributeValue, SpanStatus, TimeInput } from './observabilitytypes';
|
|
2
|
+
import { RequestSpan, RequestTracer } from './tracing';
|
|
3
|
+
import type { Tracer as OTelTracer, TracerProvider as OTelTracerProvider, Span as OTelSpan } from '@opentelemetry/api';
|
|
4
|
+
/**
|
|
5
|
+
* Wrapper class for OpenTelemetry Span that implements RequestSpan interface.
|
|
6
|
+
*/
|
|
7
|
+
export declare class OTelWrapperSpan implements RequestSpan {
|
|
8
|
+
readonly name: string;
|
|
9
|
+
readonly _otelSpan: OTelSpan;
|
|
10
|
+
/**
|
|
11
|
+
* Creates an instance of OTelWrapperSpan.
|
|
12
|
+
*
|
|
13
|
+
* @param otelSpan - OpenTelemetry Span to wrap.
|
|
14
|
+
* @param name - The name of the span.
|
|
15
|
+
*/
|
|
16
|
+
constructor(otelSpan: OTelSpan, name: string);
|
|
17
|
+
/**
|
|
18
|
+
* Sets an attribute on the span.
|
|
19
|
+
*
|
|
20
|
+
* @param key - The attribute key.
|
|
21
|
+
* @param value - The attribute value.
|
|
22
|
+
*/
|
|
23
|
+
setAttribute(key: string, value: AttributeValue): void;
|
|
24
|
+
/**
|
|
25
|
+
* Adds an event to the span.
|
|
26
|
+
*
|
|
27
|
+
* @param key - The event key.
|
|
28
|
+
* @param startTime - Optional timestamp for the event.
|
|
29
|
+
*/
|
|
30
|
+
addEvent(key: string, startTime?: TimeInput): void;
|
|
31
|
+
/**
|
|
32
|
+
* Sets the status of the span.
|
|
33
|
+
*
|
|
34
|
+
* @param status - The SpanStatus to set.
|
|
35
|
+
*/
|
|
36
|
+
setStatus(status: SpanStatus): void;
|
|
37
|
+
/**
|
|
38
|
+
* Ends the span.
|
|
39
|
+
*
|
|
40
|
+
* @param endTime - Optional timestamp for when the span ended.
|
|
41
|
+
*/
|
|
42
|
+
end(endTime?: TimeInput): void;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Wrapper class for OpenTelemetry Tracer that implements RequestTracer interface.
|
|
46
|
+
*/
|
|
47
|
+
export declare class OTelWrapperTracer implements RequestTracer {
|
|
48
|
+
private _tracer;
|
|
49
|
+
/**
|
|
50
|
+
* Creates an instance of OTelWrapperTracer.
|
|
51
|
+
*
|
|
52
|
+
* @param tracer - OpenTelemetry Tracer to wrap.
|
|
53
|
+
*/
|
|
54
|
+
constructor(tracer: OTelTracer);
|
|
55
|
+
/**
|
|
56
|
+
* Creates a new request span, optionally with a parent span.
|
|
57
|
+
*
|
|
58
|
+
* @param name - The name of the span.
|
|
59
|
+
* @param parentSpan - Optional parent span for this request.
|
|
60
|
+
* @param startTime - Optional timestamp for when the span started.
|
|
61
|
+
* @returns A RequestSpan instance for the new span.
|
|
62
|
+
*/
|
|
63
|
+
requestSpan(name: string, parentSpan?: RequestSpan, startTime?: TimeInput): RequestSpan;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Creates an OpenTelemetry wrapper tracer.
|
|
67
|
+
* Throws an Error if @opentelemetry/api is not installed.
|
|
68
|
+
*/
|
|
69
|
+
export declare function getOTelTracer(tracerProvider?: OTelTracerProvider): RequestTracer;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getOTelTracer = exports.OTelWrapperTracer = exports.OTelWrapperSpan = void 0;
|
|
4
|
+
const observabilitytypes_1 = require("./observabilitytypes");
|
|
5
|
+
const version_1 = require("./version");
|
|
6
|
+
/* eslint-enable n/no-missing-import */
|
|
7
|
+
// Dynamic Runtime Require (Bundler-safe)
|
|
8
|
+
let otelApi = null;
|
|
9
|
+
let HAS_OTEL = false;
|
|
10
|
+
try {
|
|
11
|
+
// Hiding the string prevents Webpack/Vite from throwing missing dependency errors
|
|
12
|
+
const moduleName = '@opentelemetry/api';
|
|
13
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
14
|
+
otelApi = require(moduleName);
|
|
15
|
+
HAS_OTEL = true;
|
|
16
|
+
}
|
|
17
|
+
catch (_err) {
|
|
18
|
+
HAS_OTEL = false;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Wrapper class for OpenTelemetry Span that implements RequestSpan interface.
|
|
22
|
+
*/
|
|
23
|
+
class OTelWrapperSpan {
|
|
24
|
+
/**
|
|
25
|
+
* Creates an instance of OTelWrapperSpan.
|
|
26
|
+
*
|
|
27
|
+
* @param otelSpan - OpenTelemetry Span to wrap.
|
|
28
|
+
* @param name - The name of the span.
|
|
29
|
+
*/
|
|
30
|
+
constructor(otelSpan, name) {
|
|
31
|
+
this._otelSpan = otelSpan;
|
|
32
|
+
this.name = name;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Sets an attribute on the span.
|
|
36
|
+
*
|
|
37
|
+
* @param key - The attribute key.
|
|
38
|
+
* @param value - The attribute value.
|
|
39
|
+
*/
|
|
40
|
+
setAttribute(key, value) {
|
|
41
|
+
this._otelSpan.setAttribute(key, value);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Adds an event to the span.
|
|
45
|
+
*
|
|
46
|
+
* @param key - The event key.
|
|
47
|
+
* @param startTime - Optional timestamp for the event.
|
|
48
|
+
*/
|
|
49
|
+
addEvent(key, startTime) {
|
|
50
|
+
this._otelSpan.addEvent(key, startTime);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Sets the status of the span.
|
|
54
|
+
*
|
|
55
|
+
* @param status - The SpanStatus to set.
|
|
56
|
+
*/
|
|
57
|
+
setStatus(status) {
|
|
58
|
+
// We use the non-null assertion (!) because this class cannot be
|
|
59
|
+
// instantiated unless otelApi successfully loaded.
|
|
60
|
+
let otelCode = otelApi.SpanStatusCode.UNSET;
|
|
61
|
+
if (status.code === observabilitytypes_1.SpanStatusCode.OK) {
|
|
62
|
+
otelCode = otelApi.SpanStatusCode.OK;
|
|
63
|
+
}
|
|
64
|
+
else if (status.code === observabilitytypes_1.SpanStatusCode.ERROR) {
|
|
65
|
+
otelCode = otelApi.SpanStatusCode.ERROR;
|
|
66
|
+
}
|
|
67
|
+
this._otelSpan.setStatus({
|
|
68
|
+
code: otelCode,
|
|
69
|
+
message: status.message,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Ends the span.
|
|
74
|
+
*
|
|
75
|
+
* @param endTime - Optional timestamp for when the span ended.
|
|
76
|
+
*/
|
|
77
|
+
end(endTime) {
|
|
78
|
+
this._otelSpan.end(endTime);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.OTelWrapperSpan = OTelWrapperSpan;
|
|
82
|
+
/**
|
|
83
|
+
* Wrapper class for OpenTelemetry Tracer that implements RequestTracer interface.
|
|
84
|
+
*/
|
|
85
|
+
class OTelWrapperTracer {
|
|
86
|
+
/**
|
|
87
|
+
* Creates an instance of OTelWrapperTracer.
|
|
88
|
+
*
|
|
89
|
+
* @param tracer - OpenTelemetry Tracer to wrap.
|
|
90
|
+
*/
|
|
91
|
+
constructor(tracer) {
|
|
92
|
+
this._tracer = tracer;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Creates a new request span, optionally with a parent span.
|
|
96
|
+
*
|
|
97
|
+
* @param name - The name of the span.
|
|
98
|
+
* @param parentSpan - Optional parent span for this request.
|
|
99
|
+
* @param startTime - Optional timestamp for when the span started.
|
|
100
|
+
* @returns A RequestSpan instance for the new span.
|
|
101
|
+
*/
|
|
102
|
+
requestSpan(name, parentSpan, startTime) {
|
|
103
|
+
// Grab the current active context from OTel
|
|
104
|
+
let context = otelApi.context.active();
|
|
105
|
+
// If the user passed in a parent span, and it is one of our wrappers,
|
|
106
|
+
// extract the raw OTel span and inject it into a new context.
|
|
107
|
+
if (parentSpan && parentSpan instanceof OTelWrapperSpan) {
|
|
108
|
+
context = otelApi.trace.setSpan(context, parentSpan._otelSpan);
|
|
109
|
+
}
|
|
110
|
+
// Start the new span using the safely mapped inputs
|
|
111
|
+
const span = this._tracer.startSpan(name, {
|
|
112
|
+
startTime: startTime,
|
|
113
|
+
kind: otelApi.SpanKind.CLIENT,
|
|
114
|
+
}, context);
|
|
115
|
+
return new OTelWrapperSpan(span, name);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
exports.OTelWrapperTracer = OTelWrapperTracer;
|
|
119
|
+
/**
|
|
120
|
+
* Creates an OpenTelemetry wrapper tracer.
|
|
121
|
+
* Throws an Error if @opentelemetry/api is not installed.
|
|
122
|
+
*/
|
|
123
|
+
function getOTelTracer(tracerProvider) {
|
|
124
|
+
if (!HAS_OTEL || !otelApi) {
|
|
125
|
+
throw new Error('OpenTelemetry is not installed. Please install it with: ' +
|
|
126
|
+
'npm install @opentelemetry/api');
|
|
127
|
+
}
|
|
128
|
+
const pkgName = `com.couchbase.client/nodejs`;
|
|
129
|
+
const pkgVersion = version_1.SDK_VERSION;
|
|
130
|
+
let tracer;
|
|
131
|
+
if (tracerProvider) {
|
|
132
|
+
// Use the explicit provider they passed in
|
|
133
|
+
tracer = tracerProvider.getTracer(pkgName, pkgVersion);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
// Fallback to the global OpenTelemetry provider
|
|
137
|
+
tracer = otelApi.trace.getTracer(pkgName, pkgVersion);
|
|
138
|
+
}
|
|
139
|
+
return new OTelWrapperTracer(tracer);
|
|
140
|
+
}
|
|
141
|
+
exports.getOTelTracer = getOTelTracer;
|
package/dist/queryexecutor.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { CppError, CppQueryResponse } from './binding';
|
|
2
2
|
import { Cluster } from './cluster';
|
|
3
|
+
import { ObservableRequestHandler } from './observabilityhandler';
|
|
4
|
+
import { ObservabilityInstruments } from './observabilitytypes';
|
|
3
5
|
import { QueryMetaData, QueryOptions, QueryResult } from './querytypes';
|
|
4
6
|
import { StreamableRowPromise } from './streamablepromises';
|
|
5
7
|
/**
|
|
@@ -14,7 +16,21 @@ export declare class QueryExecutor {
|
|
|
14
16
|
/**
|
|
15
17
|
* @internal
|
|
16
18
|
*/
|
|
19
|
+
get observabilityInstruments(): ObservabilityInstruments;
|
|
20
|
+
/**
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
23
|
+
static _processQueryResponse<TRow>(emitter: StreamableRowPromise<QueryResult<TRow>, TRow, QueryMetaData>, err: Error | null, resp: CppQueryResponse, obsReqHandler?: ObservableRequestHandler): void;
|
|
24
|
+
/**
|
|
25
|
+
* @internal
|
|
26
|
+
*
|
|
27
|
+
* Used by transactions (observability currently not available for transactions)
|
|
28
|
+
*/
|
|
17
29
|
static execute<TRow = any>(exec: (callback: (err: CppError | null, resp: CppQueryResponse) => void) => void): StreamableRowPromise<QueryResult<TRow>, TRow, QueryMetaData>;
|
|
30
|
+
/**
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
static executePromise<TRow = any>(queryPromise: Promise<[Error | null, CppQueryResponse]>, obsReqHandler: ObservableRequestHandler): StreamableRowPromise<QueryResult<TRow>, TRow, QueryMetaData>;
|
|
18
34
|
/**
|
|
19
35
|
* @internal
|
|
20
36
|
*/
|