Skip to content

Commit 353b398

Browse files
heeckhau0xtsukino
andauthored
Config logging (#51)
* feat: Configurable logging #48 * feat: allow to set logging filter at start of app * chore: fix linter --------- Co-authored-by: tsukino <[email protected]>
1 parent 3159dc9 commit 353b398

File tree

8 files changed

+60
-22
lines changed

8 files changed

+60
-22
lines changed

demo/react-ts-webpack/app.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { ReactElement, useCallback, useEffect, useState } from 'react';
22
import { createRoot } from 'react-dom/client';
3-
import { prove, verify } from 'tlsn-js';
3+
import { prove, verify, set_logging_filter } from 'tlsn-js';
44
import { Proof } from 'tlsn-js/build/types';
55
import { Watch } from 'react-loader-spinner';
66

@@ -21,6 +21,7 @@ function App(): ReactElement {
2121

2222
const onClick = useCallback(async () => {
2323
setProcessing(true);
24+
await set_logging_filter('info,tlsn_extension_rs=debug');
2425
const p = await prove('https://swapi.dev/api/people/1', {
2526
method: 'GET',
2627
maxTranscriptSize: 16384,

demo/react-ts-webpack/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"react": "^18.2.0",
1313
"react-dom": "^18.2.0",
1414
"react-loader-spinner": "^6.1.6",
15-
"tlsn-js": "0.1.0-alpha.5.2"
15+
"tlsn-js": "../../"
1616
},
1717
"devDependencies": {
1818
"@types/react": "^18.0.26",
@@ -27,4 +27,4 @@
2727
"webpack-cli": "^4.10.0",
2828
"webpack-dev-server": "^4.11.1"
2929
}
30-
}
30+
}

src/index.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,30 @@
11
import TLSN from './tlsn';
2+
import { DEFAULT_LOGGING_FILTER } from './tlsn';
23
import { Proof } from './types';
34

45
let _tlsn: TLSN;
6+
const current_logging_filter = DEFAULT_LOGGING_FILTER;
57

6-
async function getTLSN(): Promise<TLSN> {
7-
if (_tlsn) return _tlsn;
8+
async function getTLSN(logging_filter?: string): Promise<TLSN> {
9+
const logging_filter_changed =
10+
logging_filter && logging_filter == current_logging_filter;
11+
12+
if (!logging_filter_changed && _tlsn) return _tlsn;
813
// @ts-ignore
9-
_tlsn = await new TLSN();
14+
if (logging_filter) _tlsn = await new TLSN(logging_filter);
15+
else _tlsn = await new TLSN();
1016
return _tlsn;
1117
}
1218

19+
/**
20+
* If you want to change the default logging filter, call this method before calling prove or verify
21+
* For the filter syntax consult: https://docs.rs/tracing-subscriber/latest/tracing_subscriber/filter/struct.EnvFilter.html#example-syntax
22+
* @param logging_filter
23+
*/
24+
export const set_logging_filter = async (logging_filter: string) => {
25+
getTLSN(logging_filter);
26+
};
27+
1328
export const prove = async (
1429
url: string,
1530
options: {

src/tlsn.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,25 @@ import init, {
22
initThreadPool,
33
prover,
44
verify,
5+
setup_tracing_web,
56
} from '../wasm/prover/pkg/tlsn_extension_rs';
67

8+
export const DEFAULT_LOGGING_FILTER: string = 'info,tlsn_extension_rs=debug';
9+
710
export default class TLSN {
8-
private startPromise: any;
9-
private resolveStart: any;
11+
private startPromise: Promise<void>;
12+
private resolveStart!: () => void;
13+
private logging_filter: string;
14+
15+
/**
16+
* Initializes a new instance of the TLSN class.
17+
*
18+
* @param logging_filter - Optional logging filter string.
19+
* Defaults to DEFAULT_LOGGING_FILTER
20+
*/
21+
constructor(logging_filter: string = DEFAULT_LOGGING_FILTER) {
22+
this.logging_filter = logging_filter;
1023

11-
constructor() {
1224
this.startPromise = new Promise((resolve) => {
1325
this.resolveStart = resolve;
1426
});
@@ -20,6 +32,7 @@ export default class TLSN {
2032
const numConcurrency = navigator.hardwareConcurrency;
2133
// console.log('!@# navigator.hardwareConcurrency=', numConcurrency);
2234
await init();
35+
setup_tracing_web(this.logging_filter);
2336
// const res = await init();
2437
// console.log('!@# res.memory=', res.memory);
2538
// 6422528 ~= 6.12 mb

wasm/prover/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ pin-project-lite = "0.2.4"
3232
http-body-util = "0.1"
3333
hyper = { version = "1.1", features = ["client", "http1"] }
3434
hyper-util = { version = "0.1", features = ["http1"] }
35-
tracing-subscriber = { version = "0.3", features = ["time"] }
35+
tracing-subscriber = { version = "0.3", features = ["time","env-filter"] }
3636
tracing-web = "0.1.2"
3737

3838
ring = { version = "0.17", features = ["wasm32_unknown_unknown_js"] }

wasm/prover/src/lib.rs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,32 @@ use wasm_bindgen_futures::JsFuture;
2121
use web_sys::{Request, RequestInit, Response};
2222

2323
use std::panic;
24+
use tracing::debug;
2425
use tracing_subscriber::fmt::format::Pretty;
2526
use tracing_subscriber::fmt::time::UtcTime;
2627
use tracing_subscriber::prelude::*;
28+
use tracing_subscriber::EnvFilter;
29+
2730
use tracing_web::{performance_layer, MakeWebConsoleWriter};
2831

2932
extern crate console_error_panic_hook;
3033

31-
#[wasm_bindgen(start)]
32-
pub fn setup_tracing_web() {
34+
#[wasm_bindgen]
35+
pub fn setup_tracing_web(logging_filter: &str) {
3336
let fmt_layer = tracing_subscriber::fmt::layer()
3437
.with_ansi(false) // Only partially supported across browsers
3538
.with_timer(UtcTime::rfc_3339()) // std::time is not available in browsers
39+
// .with_thread_ids(true)
40+
// .with_thread_names(true)
3641
.with_writer(MakeWebConsoleWriter::new()); // write events to the console
3742
let perf_layer = performance_layer().with_details_from_fields(Pretty::default());
3843

44+
let filter_layer = EnvFilter::builder()
45+
.parse(logging_filter)
46+
.unwrap_or_default();
47+
3948
tracing_subscriber::registry()
40-
.with(tracing_subscriber::filter::LevelFilter::DEBUG)
49+
.with(filter_layer)
4150
.with(fmt_layer)
4251
.with(perf_layer)
4352
.init(); // Install these as subscribers to tracing events
@@ -47,6 +56,8 @@ pub fn setup_tracing_web() {
4756
error!("panic occurred: {:?}", info);
4857
console_error_panic_hook::hook(info);
4958
}));
59+
60+
debug!("🪵 Logging set up 🪵")
5061
}
5162

5263
pub async fn fetch_as_json_string(url: &str, opts: &RequestInit) -> Result<String, JsValue> {

wasm/prover/src/prover.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ use crate::requests::{ClientType, NotarizationSessionRequest, NotarizationSessio
1212

1313
pub use wasm_bindgen_rayon::init_thread_pool;
1414

15+
use crate::fetch_as_json_string;
1516
pub use crate::request_opt::VerifyResult;
16-
use crate::{fetch_as_json_string, setup_tracing_web};
1717
use futures::AsyncWriteExt;
1818
use http_body_util::{BodyExt, Full};
1919
use hyper::{body::Bytes, Request, StatusCode};
@@ -25,7 +25,7 @@ use url::Url;
2525
use wasm_bindgen::prelude::*;
2626
use web_sys::{Headers, RequestInit, RequestMode};
2727

28-
use tracing::{debug, info};
28+
use tracing::{debug, info, trace};
2929

3030
#[derive(strum_macros::EnumMessage, Debug, Clone, Copy)]
3131
#[allow(dead_code)]
@@ -77,24 +77,22 @@ pub async fn prover(
7777
secret_headers: JsValue,
7878
secret_body: JsValue,
7979
) -> Result<String, JsValue> {
80-
info!("target_url: {}", target_url_str);
80+
debug!("target_url: {}", target_url_str);
8181
let target_url = Url::parse(target_url_str)
8282
.map_err(|e| JsValue::from_str(&format!("Could not parse target_url: {:?}", e)))?;
8383

84-
info!(
84+
debug!(
8585
"target_url.host: {}",
8686
target_url
8787
.host()
8888
.ok_or(JsValue::from_str("Could not get target host"))?
8989
);
9090
let options: RequestOptions = serde_wasm_bindgen::from_value(val)
9191
.map_err(|e| JsValue::from_str(&format!("Could not deserialize options: {:?}", e)))?;
92-
info!("options.notary_url: {}", options.notary_url.as_str());
92+
debug!("options.notary_url: {}", options.notary_url.as_str());
9393

9494
let start_time = Instant::now();
9595

96-
97-
9896
/*
9997
* Connect Notary with websocket
10098
*/
@@ -150,7 +148,7 @@ pub async fn prover(
150148
.map_err(|e| JsValue::from_str(&format!("Could not deserialize response: {:?}", e)))?;
151149
debug!("Response: {}", rust_string);
152150

153-
info!("Notarization response: {:?}", notarization_response,);
151+
debug!("Notarization response: {:?}", notarization_response,);
154152
let notary_wss_url = format!(
155153
"{}://{}{}/notarize?sessionId={}",
156154
if notary_ssl { "wss" } else { "ws" },

wasm/prover/src/verify.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use tracing::info;
22
use wasm_bindgen::prelude::*;
33

4-
use crate::{request_opt::VerifyResult, setup_tracing_web};
4+
use crate::request_opt::VerifyResult;
55

66
use elliptic_curve::pkcs8::DecodePublicKey;
77
use std::time::Duration;

0 commit comments

Comments
 (0)