mirror of
https://mirror.suhoan.cn/https://github.com/EasyTier/EasyTier.git
synced 2025-12-12 20:57:26 +08:00
introduce uptime monitor for easytier public nodes (#1250)
This commit is contained in:
@@ -169,6 +169,14 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
.type_attribute("peer_rpc.DirectConnectedPeerInfo", "#[derive(Hash)]")
|
||||
.type_attribute("peer_rpc.PeerInfoForGlobalMap", "#[derive(Hash)]")
|
||||
.type_attribute("peer_rpc.ForeignNetworkRouteInfoKey", "#[derive(Hash, Eq)]")
|
||||
.type_attribute(
|
||||
"peer_rpc.RouteForeignNetworkSummary.Info",
|
||||
"#[derive(Hash, Eq, serde::Serialize, serde::Deserialize)]",
|
||||
)
|
||||
.type_attribute(
|
||||
"peer_rpc.RouteForeignNetworkSummary",
|
||||
"#[derive(Hash, Eq, serde::Serialize, serde::Deserialize)]",
|
||||
)
|
||||
.type_attribute("common.RpcDescriptor", "#[derive(Hash, Eq)]")
|
||||
.field_attribute(".web.NetworkConfig", "#[serde(default)]")
|
||||
.service_generator(Box::new(rpc_build::ServiceGenerator::new()))
|
||||
|
||||
@@ -134,6 +134,12 @@ impl NetworkInstanceManager {
|
||||
Ok(ret)
|
||||
}
|
||||
|
||||
pub fn get_network_info(&self, instance_id: &uuid::Uuid) -> Option<NetworkInstanceRunningInfo> {
|
||||
self.instance_map
|
||||
.get(instance_id)
|
||||
.and_then(|instance| instance.value().get_running_info())
|
||||
}
|
||||
|
||||
pub fn list_network_instance_ids(&self) -> Vec<uuid::Uuid> {
|
||||
self.instance_map.iter().map(|item| *item.key()).collect()
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
use crate::common::config::PortForwardConfig;
|
||||
use crate::proto::peer_rpc::RouteForeignNetworkSummary;
|
||||
use crate::proto::web;
|
||||
use crate::{
|
||||
common::{
|
||||
@@ -36,6 +37,7 @@ struct EasyTierData {
|
||||
my_node_info: RwLock<MyNodeInfo>,
|
||||
routes: RwLock<Vec<Route>>,
|
||||
peers: RwLock<Vec<PeerInfo>>,
|
||||
foreign_network_summary: RwLock<RouteForeignNetworkSummary>,
|
||||
tun_fd: Arc<RwLock<Option<i32>>>,
|
||||
tun_dev_name: RwLock<String>,
|
||||
event_subscriber: RwLock<broadcast::Sender<GlobalCtxEvent>>,
|
||||
@@ -51,6 +53,7 @@ impl Default for EasyTierData {
|
||||
my_node_info: RwLock::new(MyNodeInfo::default()),
|
||||
routes: RwLock::new(Vec::new()),
|
||||
peers: RwLock::new(Vec::new()),
|
||||
foreign_network_summary: RwLock::new(RouteForeignNetworkSummary::default()),
|
||||
tun_fd: Arc::new(RwLock::new(None)),
|
||||
tun_dev_name: RwLock::new(String::new()),
|
||||
instance_stop_notifier: Arc::new(tokio::sync::Notify::new()),
|
||||
@@ -195,6 +198,8 @@ impl EasyTierLauncher {
|
||||
*data_c.routes.write().unwrap() = peer_mgr_c.list_routes().await;
|
||||
*data_c.peers.write().unwrap() =
|
||||
PeerManagerRpcService::list_peers(&peer_mgr_c).await;
|
||||
*data_c.foreign_network_summary.write().unwrap() =
|
||||
peer_mgr_c.get_foreign_network_summary().await;
|
||||
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
|
||||
}
|
||||
});
|
||||
@@ -323,6 +328,10 @@ impl EasyTierLauncher {
|
||||
pub fn get_peers(&self) -> Vec<PeerInfo> {
|
||||
self.data.peers.read().unwrap().clone()
|
||||
}
|
||||
|
||||
pub fn get_foreign_network_summary(&self) -> RouteForeignNetworkSummary {
|
||||
self.data.foreign_network_summary.read().unwrap().clone()
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for EasyTierLauncher {
|
||||
@@ -401,6 +410,7 @@ impl NetworkInstance {
|
||||
peer_route_pairs,
|
||||
running: launcher.running(),
|
||||
error_msg: launcher.error_msg(),
|
||||
foreign_network_summary: Some(launcher.get_foreign_network_summary()),
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,9 @@ use crate::{
|
||||
self, list_global_foreign_network_response::OneForeignNetwork,
|
||||
ListGlobalForeignNetworkResponse,
|
||||
},
|
||||
peer_rpc::{ForeignNetworkRouteInfoEntry, ForeignNetworkRouteInfoKey},
|
||||
peer_rpc::{
|
||||
ForeignNetworkRouteInfoEntry, ForeignNetworkRouteInfoKey, RouteForeignNetworkSummary,
|
||||
},
|
||||
},
|
||||
tunnel::{
|
||||
self,
|
||||
@@ -953,6 +955,10 @@ impl PeerManager {
|
||||
resp
|
||||
}
|
||||
|
||||
pub async fn get_foreign_network_summary(&self) -> RouteForeignNetworkSummary {
|
||||
self.get_route().get_foreign_network_summary().await
|
||||
}
|
||||
|
||||
async fn run_nic_packet_process_pipeline(&self, data: &mut ZCPacket) {
|
||||
if !self
|
||||
.global_ctx
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use std::{
|
||||
collections::BTreeSet,
|
||||
collections::{BTreeMap, BTreeSet},
|
||||
fmt::Debug,
|
||||
net::{Ipv4Addr, Ipv6Addr},
|
||||
sync::{
|
||||
@@ -35,9 +35,10 @@ use crate::{
|
||||
proto::{
|
||||
common::{Ipv4Inet, NatType, StunInfo},
|
||||
peer_rpc::{
|
||||
route_foreign_network_infos, ForeignNetworkRouteInfoEntry, ForeignNetworkRouteInfoKey,
|
||||
OspfRouteRpc, OspfRouteRpcClientFactory, OspfRouteRpcServer, PeerIdVersion,
|
||||
RouteForeignNetworkInfos, RoutePeerInfo, RoutePeerInfos, SyncRouteInfoError,
|
||||
route_foreign_network_infos, route_foreign_network_summary,
|
||||
ForeignNetworkRouteInfoEntry, ForeignNetworkRouteInfoKey, OspfRouteRpc,
|
||||
OspfRouteRpcClientFactory, OspfRouteRpcServer, PeerIdVersion, RouteForeignNetworkInfos,
|
||||
RouteForeignNetworkSummary, RoutePeerInfo, RoutePeerInfos, SyncRouteInfoError,
|
||||
SyncRouteInfoRequest, SyncRouteInfoResponse,
|
||||
},
|
||||
rpc_types::{
|
||||
@@ -2320,6 +2321,16 @@ impl Route for PeerRoute {
|
||||
foreign_networks
|
||||
}
|
||||
|
||||
async fn get_foreign_network_summary(&self) -> RouteForeignNetworkSummary {
|
||||
let mut info_map: BTreeMap<PeerId, route_foreign_network_summary::Info> = BTreeMap::new();
|
||||
for item in self.service_impl.synced_route_info.foreign_network.iter() {
|
||||
let entry = info_map.entry(item.key().peer_id).or_default();
|
||||
entry.network_count += 1;
|
||||
entry.peer_count += item.value().foreign_peer_ids.len() as u32;
|
||||
}
|
||||
RouteForeignNetworkSummary { info_map }
|
||||
}
|
||||
|
||||
async fn list_peers_own_foreign_network(
|
||||
&self,
|
||||
network_identity: &NetworkIdentity,
|
||||
|
||||
@@ -9,7 +9,7 @@ use crate::{
|
||||
common::{global_ctx::NetworkIdentity, PeerId},
|
||||
proto::peer_rpc::{
|
||||
ForeignNetworkRouteInfoEntry, ForeignNetworkRouteInfoKey, RouteForeignNetworkInfos,
|
||||
RoutePeerInfo,
|
||||
RouteForeignNetworkSummary, RoutePeerInfo,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -102,6 +102,10 @@ pub trait Route {
|
||||
Default::default()
|
||||
}
|
||||
|
||||
async fn get_foreign_network_summary(&self) -> RouteForeignNetworkSummary {
|
||||
Default::default()
|
||||
}
|
||||
|
||||
// my peer id in foreign network is different from the one in local network
|
||||
// this function is used to get the peer id in local network
|
||||
async fn get_origin_my_peer_id(
|
||||
|
||||
@@ -60,6 +60,16 @@ message RouteForeignNetworkInfos {
|
||||
repeated Info infos = 1;
|
||||
}
|
||||
|
||||
message RouteForeignNetworkSummary {
|
||||
message Info {
|
||||
uint32 peer_id = 1;
|
||||
uint32 network_count = 2;
|
||||
uint32 peer_count = 3;
|
||||
}
|
||||
|
||||
map<uint32, Info> info_map = 1;
|
||||
}
|
||||
|
||||
message SyncRouteInfoRequest {
|
||||
uint32 my_peer_id = 1;
|
||||
uint64 my_session_id = 2;
|
||||
|
||||
@@ -102,6 +102,7 @@ message NetworkInstanceRunningInfo {
|
||||
repeated cli.PeerRoutePair peer_route_pairs = 6;
|
||||
bool running = 7;
|
||||
optional string error_msg = 8;
|
||||
peer_rpc.RouteForeignNetworkSummary foreign_network_summary = 9;
|
||||
}
|
||||
|
||||
message NetworkInstanceRunningInfoMap {
|
||||
|
||||
Reference in New Issue
Block a user