@temporalio/core-bridge 1.8.5 → 1.9.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Cargo.lock +189 -152
- package/Cargo.toml +1 -0
- package/lib/index.d.ts +17 -44
- package/lib/index.js.map +1 -1
- package/package.json +3 -4
- package/releases/aarch64-apple-darwin/index.node +0 -0
- package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
- package/releases/x86_64-apple-darwin/index.node +0 -0
- package/releases/x86_64-pc-windows-msvc/index.node +0 -0
- package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
- package/sdk-core/.github/workflows/heavy.yml +4 -0
- package/sdk-core/.github/workflows/per-pr.yml +96 -0
- package/sdk-core/ARCHITECTURE.md +1 -1
- package/sdk-core/Cargo.toml +6 -0
- package/sdk-core/README.md +37 -21
- package/sdk-core/client/Cargo.toml +6 -3
- package/sdk-core/client/src/lib.rs +272 -138
- package/sdk-core/client/src/metrics.rs +68 -57
- package/sdk-core/client/src/raw.rs +191 -45
- package/sdk-core/client/src/retry.rs +20 -0
- package/sdk-core/client/src/worker_registry/mod.rs +264 -0
- package/sdk-core/client/src/workflow_handle/mod.rs +2 -1
- package/sdk-core/core/Cargo.toml +16 -18
- package/sdk-core/core/src/core_tests/child_workflows.rs +7 -7
- package/sdk-core/core/src/core_tests/mod.rs +1 -0
- package/sdk-core/core/src/core_tests/replay_flag.rs +29 -39
- package/sdk-core/core/src/core_tests/updates.rs +73 -0
- package/sdk-core/core/src/core_tests/workflow_tasks.rs +52 -1
- package/sdk-core/core/src/ephemeral_server/mod.rs +34 -11
- package/sdk-core/core/src/internal_flags.rs +7 -1
- package/sdk-core/core/src/lib.rs +19 -36
- package/sdk-core/core/src/protosext/mod.rs +11 -3
- package/sdk-core/core/src/protosext/protocol_messages.rs +102 -0
- package/sdk-core/core/src/replay/mod.rs +100 -48
- package/sdk-core/core/src/telemetry/log_export.rs +161 -28
- package/sdk-core/core/src/telemetry/metrics.rs +869 -248
- package/sdk-core/core/src/telemetry/mod.rs +135 -239
- package/sdk-core/core/src/telemetry/prometheus_server.rs +36 -31
- package/sdk-core/core/src/test_help/mod.rs +63 -4
- package/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +12 -2
- package/sdk-core/core/src/worker/activities.rs +276 -10
- package/sdk-core/core/src/worker/client/mocks.rs +18 -0
- package/sdk-core/core/src/worker/client.rs +16 -3
- package/sdk-core/core/src/worker/mod.rs +50 -19
- package/sdk-core/core/src/worker/slot_provider.rs +175 -0
- package/sdk-core/core/src/worker/workflow/driven_workflow.rs +27 -34
- package/sdk-core/core/src/worker/workflow/history_update.rs +4 -1
- package/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +36 -94
- package/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +34 -22
- package/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +50 -34
- package/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +106 -92
- package/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +22 -21
- package/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +386 -499
- package/sdk-core/core/src/worker/workflow/machines/mod.rs +12 -2
- package/sdk-core/core/src/worker/workflow/machines/modify_workflow_properties_state_machine.rs +33 -26
- package/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +198 -215
- package/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +66 -62
- package/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +88 -119
- package/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +3 -1
- package/sdk-core/core/src/worker/workflow/machines/update_state_machine.rs +411 -0
- package/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +26 -25
- package/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +302 -85
- package/sdk-core/core/src/worker/workflow/managed_run.rs +179 -132
- package/sdk-core/core/src/worker/workflow/mod.rs +121 -46
- package/sdk-core/core/src/worker/workflow/run_cache.rs +8 -12
- package/sdk-core/core/src/worker/workflow/workflow_stream.rs +45 -38
- package/sdk-core/core-api/Cargo.toml +7 -6
- package/sdk-core/core-api/src/lib.rs +4 -12
- package/sdk-core/core-api/src/telemetry/metrics.rs +334 -0
- package/sdk-core/core-api/src/telemetry.rs +53 -42
- package/sdk-core/core-api/src/worker.rs +7 -0
- package/sdk-core/{.buildkite/docker → docker}/docker-compose.yaml +1 -1
- package/sdk-core/etc/dynamic-config.yaml +11 -1
- package/sdk-core/fsm/rustfsm_procmacro/Cargo.toml +1 -1
- package/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +1 -3
- package/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +2 -2
- package/sdk-core/sdk/Cargo.toml +1 -1
- package/sdk-core/sdk/src/lib.rs +85 -7
- package/sdk-core/sdk/src/workflow_context/options.rs +4 -0
- package/sdk-core/sdk/src/workflow_context.rs +43 -15
- package/sdk-core/sdk/src/workflow_future.rs +334 -204
- package/sdk-core/sdk-core-protos/Cargo.toml +2 -2
- package/sdk-core/sdk-core-protos/build.rs +14 -14
- package/sdk-core/sdk-core-protos/protos/api_upstream/.buildkite/Dockerfile +2 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/Makefile +99 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/api-linter.yaml +56 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/buf.gen.yaml +20 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/buf.lock +11 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/buf.yaml +18 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/google/api/annotations.proto +31 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/google/api/http.proto +379 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/google/protobuf/any.proto +162 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/google/protobuf/descriptor.proto +1212 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/google/protobuf/duration.proto +115 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/google/protobuf/empty.proto +51 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/google/protobuf/timestamp.proto +144 -0
- package/sdk-core/sdk-core-protos/protos/api_upstream/google/protobuf/wrappers.proto +123 -0
- package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/batch/v1/message.proto +3 -5
- package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/command/v1/message.proto +11 -13
- package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/common/v1/message.proto +2 -4
- package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/enums/v1/failed_cause.proto +2 -0
- package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/enums/v1/reset.proto +1 -1
- package/sdk-core/{protos/api_upstream/build/tools.go → sdk-core-protos/protos/api_upstream/temporal/api/export/v1/message.proto} +22 -6
- package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/filter/v1/message.proto +2 -4
- package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/history/v1/message.proto +21 -23
- package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/namespace/v1/message.proto +2 -4
- package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/operatorservice/v1/request_response.proto +2 -0
- package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/operatorservice/v1/service.proto +4 -0
- package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/replication/v1/message.proto +1 -3
- package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/schedule/v1/message.proto +36 -20
- package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/sdk/v1/task_complete_metadata.proto +13 -0
- package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/taskqueue/v1/message.proto +2 -4
- package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/update/v1/message.proto +1 -1
- package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/version/v1/message.proto +2 -3
- package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/workflow/v1/message.proto +18 -20
- package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/workflowservice/v1/request_response.proto +84 -32
- package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/workflowservice/v1/service.proto +205 -47
- package/sdk-core/{protos → sdk-core-protos/protos}/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +57 -0
- package/sdk-core/{protos → sdk-core-protos/protos}/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +27 -0
- package/sdk-core/sdk-core-protos/src/history_builder.rs +67 -2
- package/sdk-core/sdk-core-protos/src/lib.rs +75 -2
- package/sdk-core/sdk-core-protos/src/utilities.rs +14 -0
- package/sdk-core/test-utils/Cargo.toml +5 -1
- package/sdk-core/test-utils/src/canned_histories.rs +3 -57
- package/sdk-core/test-utils/src/interceptors.rs +46 -0
- package/sdk-core/test-utils/src/lib.rs +106 -38
- package/sdk-core/tests/integ_tests/metrics_tests.rs +110 -15
- package/sdk-core/tests/integ_tests/queries_tests.rs +174 -3
- package/sdk-core/tests/integ_tests/update_tests.rs +908 -0
- package/sdk-core/tests/integ_tests/workflow_tests/activities.rs +44 -1
- package/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +1 -1
- package/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +1 -1
- package/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +4 -4
- package/sdk-core/tests/integ_tests/workflow_tests/eager.rs +61 -0
- package/sdk-core/tests/integ_tests/workflow_tests/replay.rs +27 -2
- package/sdk-core/tests/integ_tests/workflow_tests.rs +1 -0
- package/sdk-core/tests/main.rs +2 -1
- package/sdk-core/tests/runner.rs +15 -2
- package/src/conversions.rs +75 -89
- package/src/helpers.rs +74 -0
- package/src/runtime.rs +17 -6
- package/src/worker.rs +14 -61
- package/ts/index.ts +21 -52
- package/sdk-core/.buildkite/docker/Dockerfile +0 -9
- package/sdk-core/.buildkite/docker/build.sh +0 -5
- package/sdk-core/.buildkite/docker/docker-compose-ci.yaml +0 -27
- package/sdk-core/.buildkite/pipeline.yml +0 -57
- package/sdk-core/.github/workflows/semgrep.yml +0 -25
- package/sdk-core/core/src/worker/workflow/bridge.rs +0 -35
- package/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +0 -215
- package/sdk-core/protos/api_upstream/.buildkite/Dockerfile +0 -2
- package/sdk-core/protos/api_upstream/Makefile +0 -80
- package/sdk-core/protos/api_upstream/api-linter.yaml +0 -40
- package/sdk-core/protos/api_upstream/buf.yaml +0 -9
- package/sdk-core/protos/api_upstream/build/go.mod +0 -7
- package/sdk-core/protos/api_upstream/build/go.sum +0 -5
- package/sdk-core/protos/api_upstream/go.mod +0 -6
- package/sdk-core/protos/testsrv_upstream/dependencies/gogoproto/gogo.proto +0 -141
- /package/sdk-core/{.buildkite/docker → docker}/docker-compose-telem.yaml +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/.buildkite/docker-compose.yml +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/.buildkite/pipeline.yml +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/.github/CODEOWNERS +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/.github/workflows/publish-docs.yml +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/.github/workflows/trigger-api-go-update.yml +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/LICENSE +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/README.md +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/enums/v1/batch_operation.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/enums/v1/command_type.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/enums/v1/common.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/enums/v1/event_type.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/enums/v1/namespace.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/enums/v1/query.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/enums/v1/schedule.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/enums/v1/task_queue.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/enums/v1/update.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/enums/v1/workflow.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/errordetails/v1/message.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/failure/v1/message.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/protocol/v1/message.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/api_upstream/temporal/api/query/v1/message.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/google/rpc/status.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/grpc/health/v1/health.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/local/temporal/sdk/core/activity_result/activity_result.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/local/temporal/sdk/core/activity_task/activity_task.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/local/temporal/sdk/core/child_workflow/child_workflow.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/local/temporal/sdk/core/common/common.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/local/temporal/sdk/core/core_interface.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/local/temporal/sdk/core/external_data/external_data.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/testsrv_upstream/Makefile +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/testsrv_upstream/api-linter.yaml +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/testsrv_upstream/buf.yaml +0 -0
- /package/sdk-core/{protos/api_upstream → sdk-core-protos/protos/testsrv_upstream}/dependencies/gogoproto/gogo.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +0 -0
- /package/sdk-core/{protos → sdk-core-protos/protos}/testsrv_upstream/temporal/api/testservice/v1/service.proto +0 -0
|
@@ -1,33 +1,36 @@
|
|
|
1
|
+
use futures::channel::mpsc::{channel, Receiver, Sender};
|
|
1
2
|
use parking_lot::Mutex;
|
|
2
3
|
use ringbuf::{Consumer, HeapRb, Producer};
|
|
3
|
-
use std::{collections::HashMap, sync::Arc, time::SystemTime};
|
|
4
|
-
use temporal_sdk_core_api::telemetry::CoreLog;
|
|
4
|
+
use std::{collections::HashMap, fmt, sync::Arc, time::SystemTime};
|
|
5
|
+
use temporal_sdk_core_api::telemetry::{CoreLog, CoreLogConsumer};
|
|
5
6
|
use tracing_subscriber::Layer;
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
type CoreLogsOut = Consumer<CoreLog, Arc<HeapRb<CoreLog>>>;
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
#[derive(Debug)]
|
|
11
|
+
struct CoreLogFieldStorage(HashMap<String, serde_json::Value>);
|
|
10
12
|
|
|
11
|
-
pub(super) struct
|
|
12
|
-
|
|
13
|
+
pub(super) struct CoreLogConsumerLayer {
|
|
14
|
+
consumer: Arc<dyn CoreLogConsumer>,
|
|
13
15
|
}
|
|
14
16
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
impl CoreLogConsumerLayer {
|
|
18
|
+
pub(super) fn new(consumer: Arc<dyn CoreLogConsumer>) -> Self {
|
|
19
|
+
Self { consumer }
|
|
20
|
+
}
|
|
17
21
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
let (lin, lout) = HeapRb::new(RB_SIZE).split();
|
|
22
|
+
pub(super) fn new_buffered(ringbuf_capacity: usize) -> (Self, CoreLogBuffer) {
|
|
23
|
+
let (consumer, buffer) = CoreLogBufferedConsumer::new(ringbuf_capacity);
|
|
21
24
|
(
|
|
22
25
|
Self {
|
|
23
|
-
|
|
26
|
+
consumer: Arc::new(consumer),
|
|
24
27
|
},
|
|
25
|
-
|
|
28
|
+
buffer,
|
|
26
29
|
)
|
|
27
30
|
}
|
|
28
31
|
}
|
|
29
32
|
|
|
30
|
-
impl<S> Layer<S> for
|
|
33
|
+
impl<S> Layer<S> for CoreLogConsumerLayer
|
|
31
34
|
where
|
|
32
35
|
S: tracing::Subscriber,
|
|
33
36
|
S: for<'lookup> tracing_subscriber::registry::LookupSpan<'lookup>,
|
|
@@ -93,10 +96,78 @@ where
|
|
|
93
96
|
fields,
|
|
94
97
|
span_contexts: spans,
|
|
95
98
|
};
|
|
99
|
+
self.consumer.on_log(log);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/// Core log consumer implementation backed by a ring buffer.
|
|
104
|
+
pub struct CoreLogBufferedConsumer {
|
|
105
|
+
logs_in: Mutex<Producer<CoreLog, Arc<HeapRb<CoreLog>>>>,
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
impl CoreLogBufferedConsumer {
|
|
109
|
+
/// Create a log consumer and drainable buffer for the given capacity.
|
|
110
|
+
pub fn new(ringbuf_capacity: usize) -> (Self, CoreLogBuffer) {
|
|
111
|
+
let (logs_in, logs_out) = HeapRb::new(ringbuf_capacity).split();
|
|
112
|
+
(
|
|
113
|
+
Self {
|
|
114
|
+
logs_in: Mutex::new(logs_in),
|
|
115
|
+
},
|
|
116
|
+
CoreLogBuffer { logs_out },
|
|
117
|
+
)
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
impl CoreLogConsumer for CoreLogBufferedConsumer {
|
|
122
|
+
fn on_log(&self, log: CoreLog) {
|
|
96
123
|
let _ = self.logs_in.lock().push(log);
|
|
97
124
|
}
|
|
98
125
|
}
|
|
99
126
|
|
|
127
|
+
impl fmt::Debug for CoreLogBufferedConsumer {
|
|
128
|
+
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
129
|
+
f.write_str("<buffered consumer>")
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/// Buffer of core logs that can be drained.
|
|
134
|
+
pub struct CoreLogBuffer {
|
|
135
|
+
logs_out: CoreLogsOut,
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
impl CoreLogBuffer {
|
|
139
|
+
/// Drain the buffer of its logs.
|
|
140
|
+
pub fn drain(&mut self) -> Vec<CoreLog> {
|
|
141
|
+
self.logs_out.pop_iter().collect()
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/// Core log consumer implementation backed by a mpsc channel.
|
|
146
|
+
pub struct CoreLogStreamConsumer {
|
|
147
|
+
tx: Sender<CoreLog>,
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
impl CoreLogStreamConsumer {
|
|
151
|
+
/// Create a stream consumer and stream of logs.
|
|
152
|
+
pub fn new(buffer: usize) -> (Self, Receiver<CoreLog>) {
|
|
153
|
+
let (tx, rx) = channel(buffer);
|
|
154
|
+
(Self { tx }, rx)
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
impl CoreLogConsumer for CoreLogStreamConsumer {
|
|
159
|
+
fn on_log(&self, log: CoreLog) {
|
|
160
|
+
// We will drop messages if we can't send
|
|
161
|
+
let _ = self.tx.clone().try_send(log);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
impl fmt::Debug for CoreLogStreamConsumer {
|
|
166
|
+
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
167
|
+
f.write_str("<stream consumer>")
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
100
171
|
struct JsonVisitor<'a>(&'a mut HashMap<String, serde_json::Value>);
|
|
101
172
|
|
|
102
173
|
impl<'a> tracing::field::Visit for JsonVisitor<'a> {
|
|
@@ -146,8 +217,15 @@ impl<'a> tracing::field::Visit for JsonVisitor<'a> {
|
|
|
146
217
|
|
|
147
218
|
#[cfg(test)]
|
|
148
219
|
mod tests {
|
|
149
|
-
use crate::{
|
|
150
|
-
|
|
220
|
+
use crate::{
|
|
221
|
+
telemetry::construct_filter_string, telemetry::CoreLogStreamConsumer, telemetry_init,
|
|
222
|
+
};
|
|
223
|
+
use futures::stream::StreamExt;
|
|
224
|
+
use std::fmt;
|
|
225
|
+
use std::sync::{Arc, Mutex};
|
|
226
|
+
use temporal_sdk_core_api::telemetry::{
|
|
227
|
+
CoreLog, CoreLogConsumer, CoreTelemetry, Logger, TelemetryOptionsBuilder,
|
|
228
|
+
};
|
|
151
229
|
use tracing::Level;
|
|
152
230
|
|
|
153
231
|
#[instrument(fields(bros = "brohemian"))]
|
|
@@ -157,24 +235,15 @@ mod tests {
|
|
|
157
235
|
debug!("debug");
|
|
158
236
|
}
|
|
159
237
|
|
|
160
|
-
|
|
161
|
-
async fn test_forwarding_output() {
|
|
162
|
-
let opts = TelemetryOptionsBuilder::default()
|
|
163
|
-
.logging(Logger::Forward {
|
|
164
|
-
filter: construct_filter_string(Level::INFO, Level::WARN),
|
|
165
|
-
})
|
|
166
|
-
.build()
|
|
167
|
-
.unwrap();
|
|
168
|
-
let instance = telemetry_init(opts).unwrap();
|
|
169
|
-
let _g = tracing::subscriber::set_default(instance.trace_subscriber.clone());
|
|
170
|
-
|
|
238
|
+
fn write_logs() {
|
|
171
239
|
let top_span = span!(Level::INFO, "yayspan", huh = "wat");
|
|
172
240
|
let _guard = top_span.enter();
|
|
173
241
|
info!("Whata?");
|
|
174
242
|
instrumented("hi");
|
|
175
243
|
info!("Donezo");
|
|
244
|
+
}
|
|
176
245
|
|
|
177
|
-
|
|
246
|
+
fn assert_logs(logs: Vec<CoreLog>) {
|
|
178
247
|
// Verify debug log was not forwarded
|
|
179
248
|
assert!(!logs.iter().any(|l| l.message == "debug"));
|
|
180
249
|
assert_eq!(logs.len(), 4);
|
|
@@ -187,4 +256,68 @@ mod tests {
|
|
|
187
256
|
assert_eq!(info_msg.fields.get("bros"), Some(&"brohemian".into()));
|
|
188
257
|
assert_eq!(info_msg.fields.get("thing"), Some(&"hi".into()));
|
|
189
258
|
}
|
|
259
|
+
|
|
260
|
+
#[tokio::test]
|
|
261
|
+
async fn test_forwarding_output() {
|
|
262
|
+
let opts = TelemetryOptionsBuilder::default()
|
|
263
|
+
.logging(Logger::Forward {
|
|
264
|
+
filter: construct_filter_string(Level::INFO, Level::WARN),
|
|
265
|
+
})
|
|
266
|
+
.build()
|
|
267
|
+
.unwrap();
|
|
268
|
+
let instance = telemetry_init(opts).unwrap();
|
|
269
|
+
let _g = tracing::subscriber::set_default(instance.trace_subscriber().unwrap().clone());
|
|
270
|
+
|
|
271
|
+
write_logs();
|
|
272
|
+
assert_logs(instance.fetch_buffered_logs());
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
struct CaptureConsumer(Mutex<Vec<CoreLog>>);
|
|
276
|
+
|
|
277
|
+
impl CoreLogConsumer for CaptureConsumer {
|
|
278
|
+
fn on_log(&self, log: CoreLog) {
|
|
279
|
+
self.0.lock().unwrap().push(log);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
impl fmt::Debug for CaptureConsumer {
|
|
284
|
+
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
285
|
+
f.write_str("<capture consumer>")
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
#[tokio::test]
|
|
290
|
+
async fn test_push_output() {
|
|
291
|
+
let consumer = Arc::new(CaptureConsumer(Mutex::new(Vec::new())));
|
|
292
|
+
let opts = TelemetryOptionsBuilder::default()
|
|
293
|
+
.logging(Logger::Push {
|
|
294
|
+
filter: construct_filter_string(Level::INFO, Level::WARN),
|
|
295
|
+
consumer: consumer.clone(),
|
|
296
|
+
})
|
|
297
|
+
.build()
|
|
298
|
+
.unwrap();
|
|
299
|
+
let instance = telemetry_init(opts).unwrap();
|
|
300
|
+
let _g = tracing::subscriber::set_default(instance.trace_subscriber().unwrap().clone());
|
|
301
|
+
|
|
302
|
+
write_logs();
|
|
303
|
+
assert_logs(consumer.0.lock().unwrap().drain(..).collect());
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
#[tokio::test]
|
|
307
|
+
async fn test_push_stream_output() {
|
|
308
|
+
let (consumer, stream) = CoreLogStreamConsumer::new(100);
|
|
309
|
+
let consumer = Arc::new(consumer);
|
|
310
|
+
let opts = TelemetryOptionsBuilder::default()
|
|
311
|
+
.logging(Logger::Push {
|
|
312
|
+
filter: construct_filter_string(Level::INFO, Level::WARN),
|
|
313
|
+
consumer: consumer.clone(),
|
|
314
|
+
})
|
|
315
|
+
.build()
|
|
316
|
+
.unwrap();
|
|
317
|
+
let instance = telemetry_init(opts).unwrap();
|
|
318
|
+
let _g = tracing::subscriber::set_default(instance.trace_subscriber().unwrap().clone());
|
|
319
|
+
|
|
320
|
+
write_logs();
|
|
321
|
+
assert_logs(stream.ready_chunks(100).next().await.unwrap());
|
|
322
|
+
}
|
|
190
323
|
}
|