instrumentisto/medea

Add trace information to errors of WebClient

Closed this issue · 1 comments

Problem to solve

Добавить к ошибкам трассировку возникновения ошибки.

Proposal

Использовать Traced враппер для добавления трассировки к ошибкам.

На текущий момент chaining erros выглядит примерно так:

JsValue -> WasmErr -> media::manager::Error(WasmErr) | 
serde_json::Error  -> rpc::websocket::Error          | -> anyhow::Error -> js_sys::Error
                      peer::media::Error             |

в каждом модуле определен свой тип ошибки (media::manager::Error, rpc::websocket::Error) а из mod возвращается anyhow::Error (если будет нужно больше контекста можно определить здесь свой тип или использовать anyhow::Context)

будет так:

JsValue -> WasmErr -> Traced<media::manager:Error(WasmErr)> | 
serde_json::Error  -> Traced<rpc::heartbeat::Error>         | -> Traced<anyhow::Error> -> js_sys::Error
                      Traced<peer::conn::Error>             |

вместо Traced<anyhow::Error> можно просто anyhow::Error, т.к. Traced реализует Error trait.
Или опять же определить свой тип в каждом mod type media::Error(Traced<anyhow::Error>).

Все зависит от того что именно будет возвращаться клиенту. Пока не реализован реэкспорт snippets можем возвращать либо js_sys::Error:

Error: get user media failed: NotAllowedError: Permission denied
error trace:
medea_jason::media::manager
  at :8081/jason\src\media\manager.rs:179
    at Module.__wbg_new_b523d83e932ae6ee (medea_jason.js?2453:1418)
    at __wbg_new_b523d83e932ae6ee (bundle.js:257)
    at js_sys::Error::new::h08f97390ec11f6d9 (:8081/wasm-function[4462]:0x22002a)
    at medea_jason::media::manager::MediaManagerHandle::init_local_stream::{{closure}}::{{closure}}::h7ff1d21b763c0d46 (:8081/wasm-function[1481]:0x165fe9)
    at core::result::Result<T,E>::map_err::h5a39b2ad37da36b6 (:8081/wasm-function[702]:0xfe214)
    at medea_jason::media::manager::MediaManagerHandle::init_local_stream::{{closure}}::hd4b8b38be44a8241 (:8081/wasm-function[504]:0xd3465)
    at <std::future::GenFuture<T> as core::future::future::Future>::poll::{{closure}}::h87cb4978ae999dcc (:8081/wasm-function[1308]:0x1543fd)
    at std::future::set_task_context::h941ddf85dc574c91 (:8081/wasm-function[3535]:0x1f86e0)
    at <std::future::GenFuture<T> as core::future::future::Future>::poll::h0f666d6b4619ddea (:8081/wasm-function[4829]:0x22ccde)
    at std::future::poll_with_tls_context::{{closure}}::h06ff69f1f9e86284 (:8081/wasm-function[6262]:0x25597f)

или просто JsValue::from_str:

get user media failed: NotAllowedError: Permission denied
error trace:
medea_jason::media::manager
  at jason\src\media\manager.rs:179