make all frontend functions works (#466)
This commit is contained in:
@@ -23,8 +23,14 @@ use tokio::{sync::broadcast, task::JoinSet};
|
||||
|
||||
pub type MyNodeInfo = crate::proto::web::MyNodeInfo;
|
||||
|
||||
#[derive(serde::Serialize, Clone)]
|
||||
pub struct Event {
|
||||
time: DateTime<Local>,
|
||||
event: GlobalCtxEvent,
|
||||
}
|
||||
|
||||
struct EasyTierData {
|
||||
events: RwLock<VecDeque<(DateTime<Local>, GlobalCtxEvent)>>,
|
||||
events: RwLock<VecDeque<Event>>,
|
||||
node_info: RwLock<MyNodeInfo>,
|
||||
routes: RwLock<Vec<Route>>,
|
||||
peers: RwLock<Vec<PeerInfo>>,
|
||||
@@ -79,9 +85,12 @@ impl EasyTierLauncher {
|
||||
async fn handle_easytier_event(event: GlobalCtxEvent, data: &EasyTierData) {
|
||||
let mut events = data.events.write().unwrap();
|
||||
let _ = data.event_subscriber.read().unwrap().send(event.clone());
|
||||
events.push_back((chrono::Local::now(), event));
|
||||
if events.len() > 100 {
|
||||
events.pop_front();
|
||||
events.push_front(Event {
|
||||
time: chrono::Local::now(),
|
||||
event: event,
|
||||
});
|
||||
if events.len() > 20 {
|
||||
events.pop_back();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -267,7 +276,7 @@ impl EasyTierLauncher {
|
||||
self.data.tun_dev_name.read().unwrap().clone()
|
||||
}
|
||||
|
||||
pub fn get_events(&self) -> Vec<(DateTime<Local>, GlobalCtxEvent)> {
|
||||
pub fn get_events(&self) -> Vec<Event> {
|
||||
let events = self.data.events.read().unwrap();
|
||||
events.iter().cloned().collect()
|
||||
}
|
||||
@@ -341,7 +350,7 @@ impl NetworkInstance {
|
||||
events: launcher
|
||||
.get_events()
|
||||
.iter()
|
||||
.map(|(t, e)| (t.to_string(), format!("{:?}", e)))
|
||||
.map(|e| serde_json::to_string(e).unwrap())
|
||||
.collect(),
|
||||
node_info: Some(launcher.get_node_info()),
|
||||
routes,
|
||||
|
||||
@@ -55,7 +55,7 @@ message MyNodeInfo {
|
||||
message NetworkInstanceRunningInfo {
|
||||
string dev_name = 1;
|
||||
MyNodeInfo my_node_info = 2;
|
||||
map<string, string> events = 3;
|
||||
repeated string events = 3;
|
||||
MyNodeInfo node_info = 4;
|
||||
repeated cli.Route routes = 5;
|
||||
repeated cli.PeerInfo peers = 6;
|
||||
@@ -97,7 +97,7 @@ message ValidateConfigResponse {
|
||||
|
||||
message RunNetworkInstanceRequest {
|
||||
common.UUID inst_id = 1;
|
||||
string config = 2;
|
||||
NetworkConfig config = 2;
|
||||
}
|
||||
|
||||
message RunNetworkInstanceResponse {
|
||||
|
||||
@@ -100,7 +100,10 @@ impl WebClientService for Controller {
|
||||
_: BaseController,
|
||||
req: RunNetworkInstanceRequest,
|
||||
) -> Result<RunNetworkInstanceResponse, rpc_types::error::Error> {
|
||||
let cfg = TomlConfigLoader::new_from_str(&req.config)?;
|
||||
if req.config.is_none() {
|
||||
return Err(anyhow::anyhow!("config is required").into());
|
||||
}
|
||||
let cfg = req.config.unwrap().gen_config()?;
|
||||
let id = cfg.get_id();
|
||||
if let Some(inst_id) = req.inst_id {
|
||||
cfg.set_id(inst_id.into());
|
||||
|
||||
Reference in New Issue
Block a user