make all frontend functions works (#466)

This commit is contained in:
Sijie.Sun
2024-11-10 11:06:58 +08:00
committed by GitHub
parent e948dbfcc1
commit 88e6de9d7e
36 changed files with 1039 additions and 483 deletions
+15 -6
View File
@@ -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,
+2 -2
View File
@@ -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 {
+4 -1
View File
@@ -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());