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

getdozer / dozer / 5888798292

17 Aug 2023 08:51AM UTC coverage: 76.025% (-1.4%) from 77.415%
5888798292

push

github

web-flow
feat: implement graph on live ui (#1847)

* feat: implement progress

* feat: implement enable progress flag

* feat: implement progress in live

* chore: fix clippy

* chore: always use telemetry metrics

* fix: Only run build once

---------

Co-authored-by: sagar <sagar@getdozer.io>
Co-authored-by: chubei <914745487@qq.com>

536 of 536 new or added lines in 21 files covered. (100.0%)

46101 of 60639 relevant lines covered (76.03%)

40410.07 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
use self::state::LiveState;
10
use crate::shutdown::ShutdownReceiver;
11
use dozer_types::{grpc_types::live::ConnectResponse, log::info};
12
mod progress;
13
pub use errors::LiveError;
14
use futures::stream::{AbortHandle, Abortable};
15
use tokio::runtime::Runtime;
×
16

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

×
25
    state.set_sender(sender.clone()).await;
×
26
    state.build(runtime.clone()).await?;
×
27

×
28
    downloader::fetch_latest_dozer_explorer_code().await?;
×
29

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

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

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

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

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

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

×
57
    watcher::watch(runtime, state.clone(), shutdown).await?;
×
58

59
    Ok(())
×
60
}
×
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