diff --git a/packages/core-bridge/Cargo.lock b/packages/core-bridge/Cargo.lock index 9ac5cc90e..5f34f7332 100644 --- a/packages/core-bridge/Cargo.lock +++ b/packages/core-bridge/Cargo.lock @@ -64,28 +64,6 @@ dependencies = [ "derive_arbitrary", ] -[[package]] -name = "async-stream" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" -dependencies = [ - "async-stream-impl", - "futures-core", - "pin-project-lite", -] - -[[package]] -name = "async-stream-impl" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "async-trait" version = "0.1.88" @@ -111,11 +89,10 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "axum" -version = "0.7.9" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5" dependencies = [ - "async-trait", "axum-core", "bytes", "futures-util", @@ -131,20 +108,19 @@ dependencies = [ "rustversion", "serde", "sync_wrapper", - "tower 0.5.2", + "tower", "tower-layer", "tower-service", ] [[package]] name = "axum-core" -version = "0.4.5" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6" dependencies = [ - "async-trait", "bytes", - "futures-util", + "futures-core", "http", "http-body", "http-body-util", @@ -787,6 +763,16 @@ dependencies = [ "version_check", ] +[[package]] +name = "gethostname" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc257fdb4038301ce4b9cd1b3b51704509692bb3ff716a410cbd07925d9dae55" +dependencies = [ + "rustix", + "windows-targets 0.52.6", +] + [[package]] name = "getrandom" version = "0.2.16" @@ -820,12 +806,6 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" -[[package]] -name = "glob" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" - [[package]] name = "governor" version = "0.8.1" @@ -861,19 +841,13 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.9.0", + "indexmap", "slab", "tokio", "tokio-util", "tracing", ] -[[package]] -name = "hashbrown" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" - [[package]] name = "hashbrown" version = "0.14.5" @@ -1137,16 +1111,6 @@ dependencies = [ "icu_properties", ] -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", -] - [[package]] name = "indexmap" version = "2.9.0" @@ -1333,9 +1297,9 @@ dependencies = [ [[package]] name = "matchit" -version = "0.7.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" +checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "memchr" @@ -1508,29 +1472,41 @@ dependencies = [ "tracing", ] +[[package]] +name = "opentelemetry" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaf416e4cb72756655126f7dd7bb0af49c674f4c1b9903e80c009e0c37e552e6" +dependencies = [ + "futures-core", + "futures-sink", + "js-sys", + "pin-project-lite", + "thiserror 2.0.12", + "tracing", +] + [[package]] name = "opentelemetry-http" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46d7ab32b827b5b495bd90fa95a6cb65ccc293555dcc3199ae2937d2d237c8ed" +checksum = "50f6639e842a97dbea8886e3439710ae463120091e2e064518ba8e716e6ac36d" dependencies = [ "async-trait", "bytes", "http", - "opentelemetry", + "opentelemetry 0.30.0", "reqwest", - "tracing", ] [[package]] name = "opentelemetry-otlp" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d899720fe06916ccba71c01d04ecd77312734e2de3467fd30d9d580c8ce85656" +checksum = "dbee664a43e07615731afc539ca60c6d9f1a9425e25ca09c57bc36c87c55852b" dependencies = [ - "futures-core", "http", - "opentelemetry", + "opentelemetry 0.30.0", "opentelemetry-http", "opentelemetry-proto", "opentelemetry_sdk", @@ -1542,26 +1518,13 @@ dependencies = [ "tracing", ] -[[package]] -name = "opentelemetry-prometheus" -version = "0.29.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "098a71a4430bb712be6130ed777335d2e5b19bc8566de5f2edddfce906def6ab" -dependencies = [ - "once_cell", - "opentelemetry", - "opentelemetry_sdk", - "prometheus", - "tracing", -] - [[package]] name = "opentelemetry-proto" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c40da242381435e18570d5b9d50aca2a4f4f4d8e146231adb4e7768023309b3" +checksum = "2e046fd7660710fe5a05e8748e70d9058dc15c94ba914e7c4faa7c728f0e8ddc" dependencies = [ - "opentelemetry", + "opentelemetry 0.30.0", "opentelemetry_sdk", "prost", "tonic", @@ -1569,22 +1532,20 @@ dependencies = [ [[package]] name = "opentelemetry_sdk" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afdefb21d1d47394abc1ba6c57363ab141be19e27cc70d0e422b7f303e4d290b" +checksum = "11f644aa9e5e31d11896e024305d7e3c98a88884d9f8919dbf37a9991bc47a4b" dependencies = [ "futures-channel", "futures-executor", "futures-util", - "glob", - "opentelemetry", + "opentelemetry 0.30.0", "percent-encoding", "rand 0.9.1", "serde_json", "thiserror 2.0.12", "tokio", "tokio-stream", - "tracing", ] [[package]] @@ -1649,7 +1610,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" dependencies = [ "fixedbitset", - "indexmap 2.9.0", + "indexmap", ] [[package]] @@ -2158,7 +2119,7 @@ dependencies = [ "tokio", "tokio-rustls", "tokio-util", - "tower 0.5.2", + "tower", "tower-service", "url", "wasm-bindgen", @@ -2599,6 +2560,7 @@ dependencies = [ "async-trait", "backoff", "base64", + "bytes", "derive_builder", "derive_more", "futures-retry", @@ -2614,7 +2576,7 @@ dependencies = [ "thiserror 2.0.12", "tokio", "tonic", - "tower 0.5.2", + "tower", "tracing", "url", "uuid", @@ -2637,6 +2599,7 @@ dependencies = [ "flate2", "futures-channel", "futures-util", + "gethostname", "governor", "http-body-util", "hyper", @@ -2644,9 +2607,8 @@ dependencies = [ "itertools", "lru", "mockall", - "opentelemetry", + "opentelemetry 0.30.0", "opentelemetry-otlp", - "opentelemetry-prometheus", "opentelemetry_sdk", "parking_lot", "pid", @@ -2686,12 +2648,13 @@ dependencies = [ "async-trait", "derive_builder", "derive_more", - "opentelemetry", + "opentelemetry 0.30.0", "prost", "serde_json", "temporal-sdk-core-protos", "thiserror 2.0.12", "tonic", + "tracing", "tracing-core", "url", ] @@ -2726,7 +2689,7 @@ dependencies = [ "bridge-macros", "futures", "neon", - "opentelemetry", + "opentelemetry 0.29.1", "os_pipe", "parking_lot", "prost", @@ -2908,11 +2871,10 @@ dependencies = [ [[package]] name = "tonic" -version = "0.12.3" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" +checksum = "7e581ba15a835f4d9ea06c55ab1bd4dce26fc53752c69a04aac00703bfb49ba9" dependencies = [ - "async-stream", "async-trait", "axum", "base64", @@ -2928,12 +2890,11 @@ dependencies = [ "pin-project", "prost", "rustls-native-certs", - "rustls-pemfile", "socket2", "tokio", "tokio-rustls", "tokio-stream", - "tower 0.4.13", + "tower", "tower-layer", "tower-service", "tracing", @@ -2941,9 +2902,9 @@ dependencies = [ [[package]] name = "tonic-build" -version = "0.12.3" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9557ce109ea773b399c9b9e5dca39294110b74f1f342cb347a80d1fce8c26a11" +checksum = "eac6f67be712d12f0b41328db3137e0d0757645d8904b4cb7d51cd9c2279e847" dependencies = [ "prettyplease", "proc-macro2", @@ -2953,26 +2914,6 @@ dependencies = [ "syn", ] -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "indexmap 1.9.3", - "pin-project", - "pin-project-lite", - "rand 0.8.5", - "slab", - "tokio", - "tokio-util", - "tower-layer", - "tower-service", - "tracing", -] - [[package]] name = "tower" version = "0.5.2" @@ -2981,11 +2922,15 @@ checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", + "indexmap", "pin-project-lite", + "slab", "sync_wrapper", "tokio", + "tokio-util", "tower-layer", "tower-service", + "tracing", ] [[package]] @@ -3705,7 +3650,7 @@ dependencies = [ "flate2", "getrandom 0.3.3", "hmac", - "indexmap 2.9.0", + "indexmap", "lzma-rs", "memchr", "pbkdf2", diff --git a/packages/core-bridge/Cargo.toml b/packages/core-bridge/Cargo.toml index 46eb22c87..1831c7b59 100644 --- a/packages/core-bridge/Cargo.toml +++ b/packages/core-bridge/Cargo.toml @@ -42,7 +42,7 @@ temporal-client = { version = "*", path = "./sdk-core/client" } thiserror = "2" tokio = "1.13" tokio-stream = "0.1" -tonic = "0.12" +tonic = "0.13" tracing = "0.1" tracing-subscriber = { version = "0.3", default-features = false, features = [ "parking_lot", diff --git a/packages/core-bridge/sdk-core b/packages/core-bridge/sdk-core index 24a3c23a6..8dd4a20ab 160000 --- a/packages/core-bridge/sdk-core +++ b/packages/core-bridge/sdk-core @@ -1 +1 @@ -Subproject commit 24a3c23a6dc8842fddb5be3a52a534b863a01a7c +Subproject commit 8dd4a20ab06e8dee2208da15a96d60efb1bcf043 diff --git a/packages/core-bridge/src/client.rs b/packages/core-bridge/src/client.rs index cd031151f..2029eadbd 100644 --- a/packages/core-bridge/src/client.rs +++ b/packages/core-bridge/src/client.rs @@ -272,6 +272,9 @@ async fn client_invoke(mut retry_client: CoreClient, call: RpcCall) -> BridgeRes "ListWorkerDeployments" => { rpc_call!(retry_client, call, list_worker_deployments) } + "ListWorkers" => { + rpc_call!(retry_client, call, list_workers) + } "ListWorkflowExecutions" => { rpc_call!(retry_client, call, list_workflow_executions) } @@ -301,6 +304,9 @@ async fn client_invoke(mut retry_client: CoreClient, call: RpcCall) -> BridgeRes "RecordActivityTaskHeartbeatById" => { rpc_call!(retry_client, call, record_activity_task_heartbeat_by_id) } + "RecordWorkerHeartbeat" => { + rpc_call!(retry_client, call, record_worker_heartbeat) + } "RegisterNamespace" => rpc_call!(retry_client, call, register_namespace), "RequestCancelWorkflowExecution" => { rpc_call!(retry_client, call, request_cancel_workflow_execution) diff --git a/packages/core-bridge/src/metrics.rs b/packages/core-bridge/src/metrics.rs index 382045f89..95359895e 100644 --- a/packages/core-bridge/src/metrics.rs +++ b/packages/core-bridge/src/metrics.rs @@ -1,4 +1,4 @@ -use std::{collections::HashMap, sync::Arc}; +use std::collections::HashMap; use anyhow::Context as _; use neon::prelude::*; @@ -44,32 +44,32 @@ pub fn init(cx: &mut neon::prelude::ModuleContext) -> neon::prelude::NeonResult< pub struct Counter { pub(crate) meter: TemporalMeter, - pub(crate) counter: Arc, + pub(crate) counter: CoreCounter, } impl MutableFinalize for Counter {} pub struct Histogram { pub(crate) meter: TemporalMeter, - pub(crate) histogram: Arc, + pub(crate) histogram: CoreHistogram, } impl MutableFinalize for Histogram {} pub struct HistogramF64 { pub(crate) meter: TemporalMeter, - pub(crate) histogram: Arc, + pub(crate) histogram: CoreHistogramF64, } impl MutableFinalize for HistogramF64 {} pub struct Gauge { pub(crate) meter: TemporalMeter, - pub(crate) gauge: Arc, + pub(crate) gauge: CoreGauge, } impl MutableFinalize for Gauge {} pub struct GaugeF64 { pub(crate) meter: TemporalMeter, - pub(crate) gauge: Arc, + pub(crate) gauge: CoreGaugeF64, } impl MutableFinalize for GaugeF64 {} diff --git a/packages/test/src/test-prometheus.ts b/packages/test/src/test-prometheus.ts index afee2065a..264547402 100644 --- a/packages/test/src/test-prometheus.ts +++ b/packages/test/src/test-prometheus.ts @@ -73,6 +73,7 @@ test.serial('Exporting Prometheus metrics from Core works with lots of options', globalTags: { my_tag: 'my_value', }, + attachServiceName: true, prometheus: { bindAddress: `127.0.0.1:${port}`, countersTotalSuffix: true, @@ -107,22 +108,16 @@ test.serial('Exporting Prometheus metrics from Core works with lots of options', text.includes( 'temporal_workflow_task_replay_latency_seconds_bucket{namespace="default",' + 'service_name="temporal-core-sdk",task_queue="test-prometheus",' + - 'workflow_type="successString",le="0.001"}' + 'workflow_type="successString",my_tag="my_value",le="0.001"}' ) ); - // Verify global tags - t.assert(text.includes('target_info{my_tag="my_value",')); - - // Verify 'total' suffix - t.assert(text.includes('temporal_worker_start_total')); - // Verify histogram overrides - t.assert(text.match(/temporal_request_latency_seconds_bucket.*,le="31415"/)); - t.assert(text.match(/workflow_task_execution_latency.*,le="31415"/)); + t.assert(text.match(/temporal_request_latency_seconds_bucket\{.*,le="31415"/)); + t.assert(text.match(/workflow_task_execution_latency_seconds_bucket\{.*,le="31415"/)); // Verify prefix exists on client request metrics - t.assert(text.includes('temporal_long_request')); + t.assert(text.includes('temporal_long_request{')); }); } finally { await localEnv.teardown();