Skip to content

Commit 0832035

Browse files
committed
feat: implement basic dynamic tracing
1 parent c60d929 commit 0832035

File tree

7 files changed

+143
-0
lines changed

7 files changed

+143
-0
lines changed

Cargo.lock

Lines changed: 14 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/bitwarden-logging/Cargo.toml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ wasm = ["dep:js-sys", "dep:tsify", "dep:wasm-bindgen"]
1919

2020
[dependencies]
2121
js-sys = { workspace = true, optional = true }
22+
tokio = { workspace = true }
23+
tracing = { workspace = true }
24+
tracing_dynamic = "0.3.1"
25+
once_cell = "1.21.3"
2226
tsify = { workspace = true, optional = true }
2327
wasm-bindgen = { workspace = true, optional = true }
2428

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
11
#![doc = include_str!("../README.md")]
2+
3+
#[cfg(feature = "wasm")]
4+
#[allow(missing_docs)]
5+
pub mod wasm;
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
use tracing_dynamic::EventFactory;
2+
use wasm_bindgen::prelude::*;
3+
4+
use crate::wasm::level::TracingLevel;
5+
6+
#[wasm_bindgen]
7+
pub struct EventDefinition {
8+
factory: EventFactory<'static>,
9+
}
10+
11+
#[wasm_bindgen]
12+
impl EventDefinition {
13+
#[wasm_bindgen(constructor)]
14+
pub fn new(name: String, target: String, level: TracingLevel, fields: Vec<String>) -> Self {
15+
let fields_slice: &[&str] = &fields.iter().map(String::as_str).collect::<Vec<&str>>();
16+
Self {
17+
factory: EventFactory::new(
18+
&name,
19+
&target,
20+
level.into(),
21+
None,
22+
None,
23+
None,
24+
fields_slice,
25+
),
26+
}
27+
}
28+
29+
// TODO: Add fields
30+
pub fn record(&self) {
31+
self.factory.create().build();
32+
}
33+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
use tracing::Level;
2+
use wasm_bindgen::prelude::*;
3+
4+
#[wasm_bindgen]
5+
pub enum TracingLevel {
6+
/// The "trace" level.
7+
///
8+
/// Designates very low priority, often extremely verbose, information.
9+
Trace,
10+
/// The "debug" level.
11+
///
12+
/// Designates lower priority information.
13+
Debug,
14+
/// The "info" level.
15+
///
16+
/// Designates useful information.
17+
Info,
18+
/// The "warn" level.
19+
///
20+
/// Designates hazardous situations.
21+
Warn,
22+
/// The "error" level.
23+
///
24+
/// Designates very serious errors.
25+
Error,
26+
}
27+
28+
impl From<TracingLevel> for Level {
29+
fn from(level: TracingLevel) -> Self {
30+
match level {
31+
TracingLevel::Trace => Level::TRACE,
32+
TracingLevel::Debug => Level::DEBUG,
33+
TracingLevel::Info => Level::INFO,
34+
TracingLevel::Warn => Level::WARN,
35+
TracingLevel::Error => Level::ERROR,
36+
}
37+
}
38+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
pub mod event;
2+
pub mod level;
3+
pub mod span;
4+
5+
// use wasm_bindgen::prelude::*;
6+
7+
// use crate::wasm::span::Span;
8+
9+
// #[wasm_bindgen]
10+
// pub struct Tracing {}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
use tracing;
2+
use tracing_dynamic::SpanFactory;
3+
use wasm_bindgen::prelude::*;
4+
5+
use crate::wasm::level::TracingLevel;
6+
7+
#[wasm_bindgen]
8+
pub struct SpanDefinition {
9+
factory: SpanFactory<'static>,
10+
}
11+
12+
#[wasm_bindgen]
13+
impl SpanDefinition {
14+
#[wasm_bindgen(constructor)]
15+
pub fn new(name: String, target: String, level: TracingLevel, fields: Vec<String>) -> Self {
16+
let fields_slice: &[&str] = &fields.iter().map(String::as_str).collect::<Vec<&str>>();
17+
Self {
18+
factory: SpanFactory::new(&name, &target, level.into(), None, None, None, fields_slice),
19+
}
20+
}
21+
22+
// TODO: Add fields
23+
pub fn enter(&self) -> Span {
24+
let span = self.factory.create().build();
25+
Span::new(span)
26+
}
27+
}
28+
29+
#[wasm_bindgen]
30+
pub struct Span {
31+
_span: tracing::span::EnteredSpan,
32+
}
33+
34+
impl Span {
35+
fn new(span: tracing::Span) -> Self {
36+
Self {
37+
_span: span.entered(),
38+
}
39+
}
40+
}

0 commit comments

Comments
 (0)