Skip to content

Commit 32ccaff

Browse files
committed
feat: ability to disable dashboard
1 parent 878f6a9 commit 32ccaff

File tree

5 files changed

+72
-18
lines changed

5 files changed

+72
-18
lines changed

Cargo.lock

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ base58 = "0.1.0"
6565
tracing = "0.1"
6666
tracing-subscriber = "0.2"
6767
tracing-appender = "0.1"
68+
ctrlc = "3.1.9"
6869

6970
[dependencies.tui]
7071
version = "0.15.0"

src/frontend/cli.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,9 @@ struct Integrate {
116116
/// Path to Clarinet.toml
117117
#[clap(long = "manifest-path")]
118118
pub manifest_path: Option<String>,
119+
/// Display streams of logs instead of terminal UI dashboard
120+
#[clap(long = "no-dashboard")]
121+
pub no_dashboard: bool,
119122
}
120123

121124
#[derive(Clap)]
@@ -338,7 +341,7 @@ pub fn main() {
338341
Command::Integrate(cmd) => {
339342
let manifest_path = get_manifest_path_or_exit(cmd.manifest_path);
340343
let devnet = DevnetOrchestrator::new(manifest_path);
341-
integrate::run_devnet(devnet);
344+
integrate::run_devnet(devnet, None, !cmd.no_dashboard);
342345
}
343346
};
344347
}

src/integrate/events_observer.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
use super::DevnetEvent;
2+
use super::{DevnetEvent, NodeObserverEvent};
33
use crate::integrate::{BlockData, MempoolAdmissionData, ServiceStatusData, Status, Transaction};
44
use crate::poke::load_session;
55
use crate::publish::{publish_contract, Network};
@@ -17,6 +17,7 @@ use rocket::config::{Config, Environment, LoggingLevel};
1717
use rocket::State;
1818
use rocket_contrib::json::Json;
1919
use serde_json::Value;
20+
use tracing::info;
2021
use std::collections::{BTreeMap, VecDeque};
2122
use std::convert::{TryFrom, TryInto};
2223
use std::error::Error;
@@ -74,7 +75,7 @@ pub struct EventObserverConfig {
7475

7576
impl EventObserverConfig {
7677
pub fn new(devnet_config: DevnetConfig, manifest_path: PathBuf, accounts: BTreeMap<String, AccountConfig>) -> Self {
77-
println!("Checking contracts...");
78+
info!("Checking contracts...");
7879
let session_settings = match load_session(manifest_path.clone(), false, Network::Devnet) {
7980
Ok(settings) => settings,
8081
Err(e) => {
@@ -130,13 +131,15 @@ pub async fn start_events_observer(
130131
events_config: EventObserverConfig,
131132
devnet_event_tx: Sender<DevnetEvent>,
132133
terminator_rx: Receiver<bool>,
134+
event_tx: Option<Sender<NodeObserverEvent>>,
133135
) -> Result<(), Box<dyn Error>> {
134136
let port = events_config.devnet_config.orchestrator_port;
135137
let manifest_path = events_config.manifest_path.clone();
136138
let rw_lock = Arc::new(RwLock::new(events_config));
137139

138140
let moved_rw_lock = rw_lock.clone();
139141
let moved_tx = Arc::new(Mutex::new(devnet_event_tx.clone()));
142+
let moved_node_tx = Arc::new(Mutex::new(event_tx.clone()));
140143
let config = Config::build(Environment::Production)
141144
.address("127.0.0.1")
142145
.port(port)
@@ -149,6 +152,7 @@ pub async fn start_events_observer(
149152
rocket::custom(config)
150153
.manage(moved_rw_lock)
151154
.manage(moved_tx)
155+
.manage(moved_node_tx)
152156
.mount(
153157
"/",
154158
routes![
@@ -212,6 +216,7 @@ pub async fn start_events_observer(
212216
pub fn handle_new_burn_block(
213217
devnet_events_tx: State<Arc<Mutex<Sender<DevnetEvent>>>>,
214218
new_burn_block: Json<NewBurnBlock>,
219+
node_event_tx: State<Arc<Mutex<Option<Sender<NodeObserverEvent>>>>>,
215220
) -> Json<Value> {
216221
let devnet_events_tx = devnet_events_tx.inner();
217222

@@ -246,6 +251,7 @@ pub fn handle_new_block(
246251
config: State<Arc<RwLock<EventObserverConfig>>>,
247252
devnet_events_tx: State<Arc<Mutex<Sender<DevnetEvent>>>>,
248253
new_block: Json<NewBlock>,
254+
node_event_tx: State<Arc<Mutex<Option<Sender<NodeObserverEvent>>>>>,
249255
) -> Json<Value> {
250256
let devnet_events_tx = devnet_events_tx.inner();
251257
let config = config.inner();
@@ -469,6 +475,7 @@ pub fn handle_new_microblocks(
469475
config: State<Arc<RwLock<EventObserverConfig>>>,
470476
devnet_events_tx: State<Arc<Mutex<Sender<DevnetEvent>>>>,
471477
new_microblock: Json<NewMicroBlock>,
478+
node_event_tx: State<Arc<Mutex<Option<Sender<NodeObserverEvent>>>>>,
472479
) -> Json<Value> {
473480

474481
let devnet_events_tx = devnet_events_tx.inner();
@@ -506,6 +513,7 @@ pub fn handle_new_microblocks(
506513
pub fn handle_new_mempool_tx(
507514
devnet_events_tx: State<Arc<Mutex<Sender<DevnetEvent>>>>,
508515
raw_txs: Json<Vec<String>>,
516+
node_event_tx: State<Arc<Mutex<Option<Sender<NodeObserverEvent>>>>>,
509517
) -> Json<Value> {
510518
let decoded_transactions = raw_txs.iter().map(|t| get_tx_description(t)).collect::<Vec<String>>();
511519

src/integrate/mod.rs

Lines changed: 46 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ mod events_observer;
22
mod orchestrator;
33
mod ui;
44

5-
use std::sync::mpsc::channel;
5+
use std::sync::mpsc::{Sender, channel};
66

77
use chrono::prelude::*;
8-
use tracing;
8+
use tracing::{self, debug, info, warn, error};
99
use tracing_appender;
1010

1111
use crate::utils;
@@ -14,8 +14,11 @@ pub use orchestrator::DevnetOrchestrator;
1414

1515
use self::events_observer::{EventObserverConfig};
1616

17-
pub fn run_devnet(devnet: DevnetOrchestrator) {
18-
match block_on(do_run_devnet(devnet)) {
17+
pub enum NodeObserverEvent {
18+
}
19+
20+
pub fn run_devnet(devnet: DevnetOrchestrator, event_tx: Option<Sender<NodeObserverEvent>>, display_dashboard: bool) {
21+
match block_on(do_run_devnet(devnet, event_tx, display_dashboard)) {
1922
Err(_e) => std::process::exit(1),
2023
_ => {}
2124
};
@@ -29,7 +32,7 @@ where
2932
rt.block_on(future)
3033
}
3134

32-
pub async fn do_run_devnet(mut devnet: DevnetOrchestrator) -> Result<bool, String> {
35+
pub async fn do_run_devnet(mut devnet: DevnetOrchestrator, event_tx: Option<Sender<NodeObserverEvent>>, display_dashboard: bool) -> Result<bool, String> {
3336
let (devnet_events_tx, devnet_events_rx) = channel();
3437
let (termination_success_tx, orchestrator_terminated_rx) = channel();
3538

@@ -59,13 +62,12 @@ pub async fn do_run_devnet(mut devnet: DevnetOrchestrator) -> Result<bool, Strin
5962
let events_observer_tx = devnet_events_tx.clone();
6063
let (events_observer_terminator_tx, terminator_rx) = channel();
6164
let events_observer_handle = std::thread::spawn(move || {
62-
let future = start_events_observer(config, events_observer_tx, terminator_rx);
65+
let future = start_events_observer(config, events_observer_tx, terminator_rx, event_tx);
6366
let rt = utils::create_basic_runtime();
6467
let _ = rt.block_on(future);
6568
});
6669

6770
// Let's start the orchestration
68-
println!("Starting Devnet...");
6971

7072
// The devnet orchestrator should be able to send some events to the UI thread,
7173
// and should be able to be restarted/terminated
@@ -77,14 +79,43 @@ pub async fn do_run_devnet(mut devnet: DevnetOrchestrator) -> Result<bool, Strin
7779
rt.block_on(future);
7880
});
7981

80-
let _ = ui::start_ui(
81-
devnet_events_tx,
82-
devnet_events_rx,
83-
events_observer_terminator_tx,
84-
orchestrator_terminator_tx,
85-
orchestrator_terminated_rx,
86-
&devnet_path,
87-
);
82+
if display_dashboard {
83+
info!("Starting Devnet...");
84+
let _ = ui::start_ui(
85+
devnet_events_tx,
86+
devnet_events_rx,
87+
events_observer_terminator_tx,
88+
orchestrator_terminator_tx,
89+
orchestrator_terminated_rx,
90+
&devnet_path,
91+
);
92+
} else {
93+
println!("Starting Devnet...");
94+
95+
ctrlc::set_handler(move || {
96+
events_observer_terminator_tx
97+
.send(true)
98+
.expect("Unable to terminate devnet");
99+
orchestrator_terminator_tx
100+
.send(true)
101+
.expect("Unable to terminate devnet");
102+
}).expect("Error setting Ctrl-C handler");
103+
104+
loop {
105+
match devnet_events_rx.recv() {
106+
Ok(DevnetEvent::Log(ref log)) => {
107+
println!("{}", log.message);
108+
match log.level {
109+
LogLevel::Debug => debug!("{}", log.message),
110+
LogLevel::Info | LogLevel::Success => info!("{}", log.message),
111+
LogLevel::Warning => warn!("{}", log.message),
112+
LogLevel::Error => error!("{}", log.message),
113+
}
114+
}
115+
_ => {}
116+
}
117+
}
118+
}
88119

89120
events_observer_handle.join().unwrap();
90121
orchestrator_handle.join().unwrap();

0 commit comments

Comments
 (0)