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

getdozer / dozer / 5829059745

pending completion
5829059745

Pull #1844

github

supergi01
added comments for downloader.rs
Pull Request #1844: feat/live-reload, download and start react server

735 of 735 new or added lines in 11 files covered. (100.0%)

45536 of 61287 relevant lines covered (74.3%)

51206.91 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 server;
4
mod state;
5
mod watcher;
6
use std::sync::Arc;
7
mod helper;
8
use self::state::LiveState;
9
use crate::shutdown::ShutdownReceiver;
10
use dozer_types::{grpc_types::live::LiveResponse, log::info};
11
pub use errors::LiveError;
12
use futures::stream::{AbortHandle, Abortable};
13
use std::thread;
14

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

×
23
    state.build()?;
×
24

25

×
26
    let url = "https://dozer-explorer.s3.ap-southeast-1.amazonaws.com/latest";
×
27
    let (key, existing_key, key_changed) = downloader::get_key_from_url(url)?;
×
28
    let zip_file_name = key.as_str();
×
29
    let prev_zip_file_name = existing_key.as_str();
×
30

×
31

×
32
    if key_changed {
×
33
        println!("Downloading latest file: {}", zip_file_name);
×
34

×
35
        let base_url = "https://dozer-explorer.s3.ap-southeast-1.amazonaws.com/";
×
36
        let zip_url = &(base_url.to_owned() + zip_file_name);
×
37
        if !prev_zip_file_name.is_empty() {
×
38
            downloader::delete_file_if_present(prev_zip_file_name)?;
×
39
        }
×
40
        downloader::get_zip_from_url(zip_url, zip_file_name)?;
×
41
    }
×
42

×
43

×
44
    let handle = thread::spawn(|| {
×
45
        downloader::start_react_app().unwrap();
×
46
    });
×
47

×
48
    
×
49
    let state2 = state.clone();
×
50
    //
×
51
    let browser_url = format!("http://localhost:{}", WEB_PORT);
×
52

×
53
    if webbrowser::open(&browser_url).is_err() {
×
54
        info!("Failed to open browser. Connecto");
×
55
    }
×
56
    //
57
    info!("Starting live server");
×
58

59
    let rshudown = shutdown.clone();
×
60
    runtime.spawn(async {
×
61
        let (abort_handle, abort_registration) = AbortHandle::new_pair();
×
62
        tokio::spawn(async move {
×
63
            rshudown.create_shutdown_future().await;
×
64
            abort_handle.abort();
×
65
        });
×
66
        let res = match Abortable::new(server::serve(receiver, state2), abort_registration).await {
×
67
            Ok(result) => result.map_err(LiveError::Transport),
×
68
            Err(_) => Ok(()),
×
69
        };
70
        res.unwrap();
×
71
    });
×
72

×
73
    handle.join().unwrap();
×
74

×
75
    watcher::watch(sender, state.clone(), shutdown)?;
×
76
    Ok(())
×
77
}
×
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