Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
b28ffe5
feat(observability): scaffold iii-observability rust crate
guibeira May 21, 2026
11dc4e2
feat(observability): move OtelConfig + ReconnectionConfig to rust crate
guibeira May 21, 2026
aee64d2
feat(observability): move context + baggage helpers to rust crate
guibeira May 21, 2026
e592f03
feat(observability): move payload + span ops + baggage processor
guibeira May 21, 2026
0bec930
feat(observability): move init/shutdown/flush/with_span/execute_trace…
guibeira May 21, 2026
91f8f53
feat(observability): move Logger to rust crate
guibeira May 21, 2026
6aa6557
refactor(sdk-rust): depend on iii-observability + re-export for back-…
guibeira May 21, 2026
1dd03f9
fix(observability): add version to workspace dep for crates.io packaging
guibeira May 21, 2026
786c496
feat(observability): scaffold @iii-dev/observability node package
guibeira May 21, 2026
926a2ef
feat(observability): align tsdown config with monorepo conventions
guibeira May 21, 2026
36f3b6c
feat(observability): move telemetry-system + worker-metrics + otel-wo…
guibeira May 21, 2026
deb16de
fix(observability): add forceFlush to EngineLogExporter for consisten…
guibeira May 21, 2026
855ce74
feat(observability): add Logger + executeTracedRequest + flushOtel
guibeira May 21, 2026
9a7fe81
feat(observability): expose full node public surface
guibeira May 22, 2026
71df821
refactor(sdk-node): depend on @iii-dev/observability + re-export for …
guibeira May 22, 2026
bfd3d13
fix(sdk-node): update tests to import from @iii-dev/observability aft…
guibeira May 22, 2026
0b13345
fix(sdk-node): restore logger test mocking after observability packag…
guibeira May 22, 2026
b7e3370
fix(sdk-node): resolve @iii-dev/observability source in vitest + fix …
guibeira May 22, 2026
220c5ee
fix(observability): add files field to exclude src from npm tarball
guibeira May 22, 2026
c1685c5
fix(observability): drain exporter queues when connection enters fail…
guibeira May 22, 2026
e9641b4
feat(observability): scaffold iii-observability python package
guibeira May 22, 2026
869029f
feat(observability): move telemetry + logger + ReconnectionConfig to …
guibeira May 22, 2026
2b0bccd
feat(observability): add execute_traced_request + flush_otel to pytho…
guibeira May 22, 2026
0188fb5
feat(observability): expose full python public surface
guibeira May 22, 2026
f87951b
refactor(sdk-python): depend on iii-observability + re-export for bac…
guibeira May 22, 2026
ffce77e
fix(sdk-python): export all telemetry functions from iii_observability
guibeira May 22, 2026
69e6a6f
fix(sdk-python): update test_telemetry_types to import OtelConfig fro…
guibeira May 22, 2026
689d6f1
ci(release): publish @iii-dev/observability to npm
guibeira May 22, 2026
9b852d5
ci(release): publish iii-observability to pypi
guibeira May 22, 2026
cc4eb4a
ci(release): publish iii-observability to crates.io
guibeira May 22, 2026
a07edfe
ci(release): order SDK publishes after observability publishes
guibeira May 22, 2026
079c3ac
ci(release): include observability publishes in completion summary
guibeira May 22, 2026
9f93f33
style(sdk-rust): apply cargo fmt to satisfy CI fmt check
guibeira May 22, 2026
8c8eea9
ci(sdk-node): build @iii-dev/observability before iii-sdk type check
guibeira May 22, 2026
73c8418
fix(sdk-python): resolve iii-observability via local path + add py.typed
guibeira May 22, 2026
b7ae5f6
style(sdk-python): ruff sort imports after iii_observability move
guibeira May 22, 2026
526a077
test(sdk-python): retarget telemetry tests at iii_observability after…
guibeira May 22, 2026
f8442b1
test(sdk-python): repoint monkeypatch targets at iii_observability
guibeira May 22, 2026
c54964f
fix(observability): address PR review findings
guibeira May 22, 2026
fb23522
refactor(observability): drop back-compat re-exports; migrate callers…
guibeira May 22, 2026
3a44d9b
fix(py-example): use trigger_async inside async handlers + import Log…
guibeira May 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -545,6 +545,9 @@ jobs:
#- name: Lint
# run: npx @biomejs/biome check sdk/packages/node

- name: Build observability (prerequisite for type check)
run: pnpm --filter @iii-dev/observability build

- name: Type check
run: pnpm --filter iii-sdk exec tsc --noEmit

Expand Down
66 changes: 61 additions & 5 deletions .github/workflows/release-iii.yml
Original file line number Diff line number Diff line change
Expand Up @@ -393,7 +393,7 @@ jobs:

sdk-npm:
name: SDK Node Publish
needs: [setup, create-iii-release]
needs: [setup, create-iii-release, observability-npm]
if: ${{ !failure() && !cancelled() }}
uses: ./.github/workflows/_npm.yml
with:
Expand All @@ -410,7 +410,7 @@ jobs:

sdk-npm-browser:
name: SDK Browser Publish
needs: [setup, create-iii-release]
needs: [setup, create-iii-release, observability-npm]
if: ${{ !failure() && !cancelled() }}
uses: ./.github/workflows/_npm.yml
with:
Expand All @@ -425,9 +425,26 @@ jobs:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
SLACK_CHANNEL_ID: ${{ secrets.SLACK_CHANNEL_ID }}

observability-npm:
name: Observability Node Publish
needs: [setup, create-iii-release]
if: ${{ !failure() && !cancelled() }}
uses: ./.github/workflows/_npm.yml
with:
package_path: sdk/packages/node/observability
npm_tag: ${{ needs.setup.outputs.npm_tag }}
build_filter: "@iii-dev/observability"
dry_run: ${{ needs.setup.outputs.dry_run == 'true' }}
slack_thread_ts: ${{ needs.setup.outputs.slack_ts }}
slack_label: Observability Node (npm)
secrets:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
SLACK_CHANNEL_ID: ${{ secrets.SLACK_CHANNEL_ID }}

sdk-py:
name: SDK Python Publish
needs: [setup, create-iii-release]
needs: [setup, create-iii-release, observability-py]
if: ${{ !failure() && !cancelled() }}
uses: ./.github/workflows/_py.yml
with:
Expand All @@ -440,9 +457,24 @@ jobs:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
SLACK_CHANNEL_ID: ${{ secrets.SLACK_CHANNEL_ID }}

observability-py:
name: Observability Python Publish
needs: [setup, create-iii-release]
if: ${{ !failure() && !cancelled() }}
uses: ./.github/workflows/_py.yml
with:
package_path: sdk/packages/python/observability
dry_run: ${{ needs.setup.outputs.dry_run == 'true' }}
slack_thread_ts: ${{ needs.setup.outputs.slack_ts }}
slack_label: Observability Python (pypi)
secrets:
PYPI_API_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
SLACK_CHANNEL_ID: ${{ secrets.SLACK_CHANNEL_ID }}

sdk-rust:
name: SDK Rust Publish
needs: [setup, create-iii-release]
needs: [setup, create-iii-release, observability-rust]
if: ${{ !failure() && !cancelled() }}
uses: ./.github/workflows/_rust-cargo.yml
with:
Expand All @@ -455,6 +487,21 @@ jobs:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
SLACK_CHANNEL_ID: ${{ secrets.SLACK_CHANNEL_ID }}

observability-rust:
name: Observability Rust Publish
needs: [setup, create-iii-release]
if: ${{ !failure() && !cancelled() }}
uses: ./.github/workflows/_rust-cargo.yml
with:
package_path: sdk/packages/rust/observability
dry_run: ${{ needs.setup.outputs.dry_run == 'true' }}
slack_thread_ts: ${{ needs.setup.outputs.slack_ts }}
slack_label: Observability Rust (cargo)
secrets:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
SLACK_CHANNEL_ID: ${{ secrets.SLACK_CHANNEL_ID }}

# ──────────────────────────────────────────────────────────────
# Docker
# ──────────────────────────────────────────────────────────────
Expand Down Expand Up @@ -589,6 +636,9 @@ jobs:
- sdk-npm-browser
- sdk-py
- sdk-rust
- observability-npm
- observability-py
- observability-rust
- docker-engine
- homebrew-engine
- homebrew-console
Expand All @@ -612,6 +662,9 @@ jobs:
SDK_NPM_BROWSER_RESULT: ${{ needs.sdk-npm-browser.result }}
SDK_PY_RESULT: ${{ needs.sdk-py.result }}
SDK_RUST_RESULT: ${{ needs.sdk-rust.result }}
OBS_NPM_RESULT: ${{ needs.observability-npm.result }}
OBS_PY_RESULT: ${{ needs.observability-py.result }}
OBS_RUST_RESULT: ${{ needs.observability-rust.result }}
DOCKER_RESULT: ${{ needs.docker-engine.result }}
BREW_ENGINE_RESULT: ${{ needs.homebrew-engine.result }}
BREW_CONSOLE_RESULT: ${{ needs.homebrew-console.result }}
Expand All @@ -638,6 +691,9 @@ jobs:
LINES="$LINES$(icon "$SDK_NPM_BROWSER_RESULT") SDK Browser\n"
LINES="$LINES$(icon "$SDK_PY_RESULT") SDK Python\n"
LINES="$LINES$(icon "$SDK_RUST_RESULT") SDK Rust\n"
LINES="$LINES$(icon "$OBS_NPM_RESULT") Observability Node\n"
LINES="$LINES$(icon "$OBS_PY_RESULT") Observability Python\n"
LINES="$LINES$(icon "$OBS_RUST_RESULT") Observability Rust\n"
LINES="$LINES$(icon "$BUILTIN_WORKERS_RESULT") Builtin Workers Registry\n"
LINES="$LINES$(icon "$WORKER_SKILLS_RESULT") Worker Skills Registry\n"

Expand All @@ -647,7 +703,7 @@ jobs:
LINES="$LINES$(icon "$BREW_CONSOLE_RESULT") Homebrew (iii-console)\n"
fi

for r in "$INIT_RESULT" "$FIRMWARE_RESULT" "$ENGINE_RESULT" "$WORKER_RESULT" "$CONSOLE_RESULT" "$SDK_NPM_RESULT" "$SDK_NPM_BROWSER_RESULT" "$SDK_PY_RESULT" "$SDK_RUST_RESULT" "$BUILTIN_WORKERS_RESULT" "$WORKER_SKILLS_RESULT"; do
for r in "$INIT_RESULT" "$FIRMWARE_RESULT" "$ENGINE_RESULT" "$WORKER_RESULT" "$CONSOLE_RESULT" "$SDK_NPM_RESULT" "$SDK_NPM_BROWSER_RESULT" "$SDK_PY_RESULT" "$SDK_RUST_RESULT" "$OBS_NPM_RESULT" "$OBS_PY_RESULT" "$OBS_RUST_RESULT" "$BUILTIN_WORKERS_RESULT" "$WORKER_SKILLS_RESULT"; do
[[ "$r" != "success" && "$r" != "skipped" ]] && OVERALL="failure"
done

Expand Down
31 changes: 28 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ members = [
"engine/function-macros",
"sdk/packages/rust/iii",
"sdk/packages/rust/iii-example",
"sdk/packages/rust/observability",
"console/packages/console-rust",
"crates/iii-init",
"crates/iii-filesystem",
Expand All @@ -26,6 +27,7 @@ homepage = "https://iii.dev"

[workspace.dependencies]
iii-sdk = { path = "sdk/packages/rust/iii" }
iii-observability = { path = "sdk/packages/rust/observability", version = "0.13.0-next.1" }
scaffolder-core = { path = "crates/scaffolder-core" }

# Shared dependencies used by tooling crates
Expand Down
1 change: 1 addition & 0 deletions console/packages/console-rust/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ tokio-tungstenite = "0.28"
futures-util = { version = "0.3", default-features = false, features = ["sink"] }
tower-http = { version = "0.6.8", features = ["cors"] }
iii-sdk = { workspace = true }
iii-observability = { workspace = true }

# Async runtime
tokio = { version = "1", features = ["full"] }
Expand Down
2 changes: 1 addition & 1 deletion console/packages/console-rust/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ async fn main() -> Result<()> {
"OpenTelemetry enabled (service: {})",
args.otel_service_name
);
Some(iii_sdk::OtelConfig {
Some(iii_observability::OtelConfig {
enabled: Some(true),
service_name: Some(args.otel_service_name),
service_version: Some(env!("CARGO_PKG_VERSION").to_string()),
Expand Down
1 change: 1 addition & 0 deletions crates/iii-worker/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ iii-filesystem = { path = "../iii-filesystem" }
iii-network = { path = "../iii-network" }
# TODO: switch to crates.io pin before shipping; path dep for co-development
iii-sdk = { path = "../../sdk/packages/rust/iii" }
iii-observability = { workspace = true }
iii-shell-client = { path = "../iii-shell-client" }
iii-shell-proto = { path = "../iii-shell-proto" }
iii-supervisor = { path = "../iii-supervisor" }
Expand Down
3 changes: 2 additions & 1 deletion crates/iii-worker/src/cli/worker_manager_daemon.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ use crate::core::{
list as core_list, remove as core_remove, start as core_start, stop as core_stop,
update as core_update,
};
use iii_sdk::{III, InitOptions, OtelConfig, RegisterFunction, WorkerMetadata, register_worker};
use iii_observability::OtelConfig;
use iii_sdk::{III, InitOptions, RegisterFunction, WorkerMetadata, register_worker};
use schemars::{JsonSchema, schema_for};
use serde_json::Value;

Expand Down
3 changes: 2 additions & 1 deletion crates/iii-worker/src/sandbox_daemon/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ pub use registry::SandboxRegistry;

use std::sync::Arc;

use iii_sdk::{InitOptions, OtelConfig, RegisterFunction, WorkerMetadata, register_worker};
use iii_observability::OtelConfig;
use iii_sdk::{InitOptions, RegisterFunction, WorkerMetadata, register_worker};

use crate::sandbox_daemon::config::SandboxConfig;
use crate::sandbox_daemon::errors::SandboxErrorWire;
Expand Down
2 changes: 1 addition & 1 deletion docs/0-11-0/how-to/observability-and-logs.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ logger.info("Worker connected")
</Tab>
<Tab title="Rust">
```rust
use iii_sdk::Logger;
use iii_observability::Logger;

let logger = Logger::new();

Expand Down
1 change: 1 addition & 0 deletions engine/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ rabbitmq = ["lapin"]
[dependencies]
function-macros = { path = "function-macros" }
iii-sdk = { workspace = true }
iii-observability = { workspace = true }
scaffolder-core = { workspace = true }
console = { workspace = true }
ctrlc = { workspace = true }
Expand Down
8 changes: 4 additions & 4 deletions engine/src/workers/observability/otel.rs
Original file line number Diff line number Diff line change
Expand Up @@ -739,7 +739,7 @@ where
let _ = IN_MEMORY_STORAGE.set(memory_storage);

SdkTracerProvider::builder()
.with_span_processor(iii_sdk::BaggageSpanProcessor::default())
.with_span_processor(iii_observability::BaggageSpanProcessor::default())
.with_batch_exporter(exporter)
.with_sampler(sampler)
.with_id_generator(RandomIdGenerator::default())
Expand All @@ -758,7 +758,7 @@ where
config.service_name.clone(),
);
SdkTracerProvider::builder()
.with_span_processor(iii_sdk::BaggageSpanProcessor::default())
.with_span_processor(iii_observability::BaggageSpanProcessor::default())
.with_simple_exporter(exporter)
.with_sampler(sampler)
.with_id_generator(RandomIdGenerator::default())
Expand All @@ -772,7 +772,7 @@ where
InMemorySpanExporter::new(config.memory_max_spans, config.service_name.clone());

SdkTracerProvider::builder()
.with_span_processor(iii_sdk::BaggageSpanProcessor::default())
.with_span_processor(iii_observability::BaggageSpanProcessor::default())
.with_simple_exporter(exporter)
.with_sampler(sampler)
.with_id_generator(RandomIdGenerator::default())
Expand Down Expand Up @@ -821,7 +821,7 @@ where
config.service_name.clone(),
);
SdkTracerProvider::builder()
.with_span_processor(iii_sdk::BaggageSpanProcessor::default())
.with_span_processor(iii_observability::BaggageSpanProcessor::default())
.with_simple_exporter(exporter)
.with_sampler(sampler)
.with_id_generator(RandomIdGenerator::default())
Expand Down
Loading
Loading