• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

getdozer / dozer / 5867589746

pending completion
5867589746

Pull #1858

github

supergi01
resolve fmt checks(2)
Pull Request #1858: feat: Implement graph for dozer-live ui

419 of 419 new or added lines in 15 files covered. (100.0%)

46001 of 59761 relevant lines covered (76.97%)

52384.12 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/dozer-cli/src/live/mod.rs
1
mod downloader;
2
mod errors;
3
mod graph;
4
mod server;
5
mod state;
6
mod watcher;
7
use std::sync::Arc;
8
mod helper;
9
mod progress;
10
use self::state::LiveState;
11
use crate::shutdown::ShutdownReceiver;
12
use dozer_types::{grpc_types::live::ConnectResponse, log::info};
13
pub use errors::LiveError;
14
use futures::stream::{AbortHandle, Abortable};
15

×
16
const WEB_PORT: u16 = 3000;
×
17
pub fn start_live_server(
×
18
    runtime: Arc<tokio::runtime::Runtime>,
×
19
    shutdown: ShutdownReceiver,
×
20
) -> Result<(), LiveError> {
×
21
    let (sender, receiver) = tokio::sync::broadcast::channel::<ConnectResponse>(100);
×
22
    let state = Arc::new(LiveState::new());
×
23

×
24
    state.set_sender(sender.clone());
×
25
    state.build()?;
×
26

×
27
    runtime.block_on(downloader::fetch_latest_dozer_explorer_code())?;
×
28

×
29
    let react_app_server = downloader::start_react_app().map_err(LiveError::CannotStartUiServer)?;
×
30
    runtime.spawn(react_app_server);
×
31

×
32
    let state2 = state.clone();
×
33

×
34
    let browser_url = format!("http://localhost:{}", WEB_PORT);
×
35

×
36
    if webbrowser::open(&browser_url).is_err() {
×
37
        info!("Failed to open browser. Connecto");
×
38
    }
×
39

×
40
    info!("Starting live server");
×
41

×
42
    let rshudown = shutdown.clone();
×
43
    runtime.spawn(async {
×
44
        let (abort_handle, abort_registration) = AbortHandle::new_pair();
×
45
        tokio::spawn(async move {
×
46
            rshudown.create_shutdown_future().await;
×
47
            abort_handle.abort();
×
48
        });
×
49
        let res = match Abortable::new(server::serve(receiver, state2), abort_registration).await {
×
50
            Ok(result) => result.map_err(LiveError::Transport),
×
51
            Err(_) => Ok(()),
×
52
        };
×
53
        res.unwrap();
×
54
    });
×
55

×
56
    watcher::watch(state.clone(), shutdown)?;
×
57

58
    Ok(())
×
59
}
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc