openmina_producer_dashboard/
producer_dashboard.rs1use openmina_node_account::AccountSecretKey;
2use openmina_producer_dashboard::{
3 archive::watchdog::ArchiveWatchdog,
4 config,
5 evaluator::{EpochInit, Evaluator},
6 node::{watchdog::spawn_watchdog, Node},
7 rpc,
8 storage::db_sled::Database,
9 NodeStatus,
10};
11
12use tokio::sync::mpsc;
13
14use clap::Parser;
15
16#[tokio::main]
17async fn main() {
18 let config = config::Config::parse();
19
20 let db = Database::open(config.database_path).expect("Failed to open Database");
21 println!("[main] DB opened");
22
23 let password = std::env::var("MINA_PRIVKEY_PASS")
24 .expect("Expected password in the variable `MINA_PRIVKEY_PASS`");
25
26 let key = AccountSecretKey::from_encrypted_file(config.private_key_path, &password)
27 .expect("failed to decrypt secret key file");
28 println!("[main] Producer key loaded");
29
30 let (sender, receiver) = mpsc::unbounded_channel::<EpochInit>();
31
32 let evaluator_handle = Evaluator::spawn_new(key.clone(), db.clone(), receiver);
33 println!("[main] Evaluator created");
34 let node_status = NodeStatus::default();
35 let node = Node::new(config.node_url);
36 let node_watchdog = spawn_watchdog(
37 node,
38 node_status.clone(),
39 db.clone(),
40 sender,
41 key.public_key().to_string(),
42 );
43 println!("[main] Node watchdog created");
44 let archive_watchdog = ArchiveWatchdog::spawn_new(
45 db.clone(),
46 key.public_key().to_string(),
47 node_status.clone(),
48 );
49 println!("[main] Archive watchdog created");
50
51 let rpc_handle = rpc::spawn_rpc_server(
52 3000,
53 db.clone(),
54 node_status.clone(),
55 key.public_key().to_string(),
56 );
57 println!("[main] RPC server created");
58
59 let mut signal_stream =
60 tokio::signal::unix::signal(tokio::signal::unix::SignalKind::terminate())
61 .expect("Unable to handle SIGTERM");
62
63 tokio::select! {
64 s = tokio::signal::ctrl_c() => {
65 s.expect("Failed to listen for ctrl-c event");
66 println!("Ctrl-c or SIGINT received!");
67 }
68 _ = signal_stream.recv() => {
69 println!("SIGTERM received!");
70 }
71 }
72
73 drop(archive_watchdog);
74 drop(rpc_handle);
75 drop(node_watchdog);
76 drop(evaluator_handle);
77 println!("Shutdown successfull");
78}