summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorcyqsimon <28627918+cyqsimon@users.noreply.github.com>2023-10-12 17:35:43 +0800
committercyqsimon <28627918+cyqsimon@users.noreply.github.com>2023-10-12 17:35:43 +0800
commita9c199f8123a7d2f821b8d200a3dd272a434bc0a (patch)
treeaf942cea92d7dddfa782191bdda4711c34bd4b73 /src
parent1c996c38f4df2996b61080a7457f1dc1cf5afbfc (diff)
Add logging when the process name fails to resolve
Diffstat (limited to 'src')
-rw-r--r--src/display/ui_state.rs52
-rw-r--r--src/network/connection.rs10
2 files changed, 48 insertions, 14 deletions
diff --git a/src/display/ui_state.rs b/src/display/ui_state.rs
index 41fbbda..36f679a 100644
--- a/src/display/ui_state.rs
+++ b/src/display/ui_state.rs
@@ -6,6 +6,8 @@ use std::{
net::{IpAddr, Ipv4Addr, Ipv6Addr},
};
+use log::warn;
+
use crate::network::{Connection, LocalSocket, Utilization};
static RECALL_LENGTH: usize = 5;
@@ -92,21 +94,41 @@ impl UIState {
connections_to_procs: &'a HashMap<LocalSocket, String>,
local_socket: &LocalSocket,
) -> Option<&'a String> {
- if let Some(process_name) = connections_to_procs.get(local_socket) {
- Some(process_name)
- } else if let Some(process_name) = connections_to_procs.get(&LocalSocket {
- ip: IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)),
- port: local_socket.port,
- protocol: local_socket.protocol,
- }) {
- Some(process_name)
- } else {
- connections_to_procs.get(&LocalSocket {
- ip: IpAddr::V6(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0)),
- port: local_socket.port,
- protocol: local_socket.protocol,
+ let &LocalSocket { port, protocol, .. } = local_socket;
+
+ let name = connections_to_procs
+ .get(local_socket)
+ .or_else(|| {
+ connections_to_procs.get(&LocalSocket {
+ ip: Ipv4Addr::UNSPECIFIED.into(),
+ port,
+ protocol,
+ })
})
+ .or_else(|| {
+ connections_to_procs.get(&LocalSocket {
+ ip: Ipv6Addr::UNSPECIFIED.into(),
+ port,
+ protocol,
+ })
+ });
+
+ if name.is_none() {
+ match connections_to_procs
+ .iter()
+ .find(|(socket, _)| socket.port == port && socket.protocol == protocol)
+ {
+ Some((lookalike, name)) => {
+ warn!(
+ r#""{name}" owns a similar looking connection, but its local ip doesn't match."#
+ );
+ warn!("Looking for: {local_socket}; found: {lookalike}");
+ }
+ None => warn!("Cannot determine which process owns {local_socket}."),
+ };
}
+
+ name
}
pub fn update(
&mut self,
@@ -154,7 +176,9 @@ impl UIState {
UIState::get_proc_name(connections_to_procs, &connection.local_socket)
{
connection_data.process_name = process_name.clone();
- processes.entry(process_name.clone()).or_default()
+ processes
+ .entry(connection_data.process_name.clone())
+ .or_default()
} else {
connection_data.process_name = String::from("<UNKNOWN>");
processes
diff --git a/src/network/connection.rs b/src/network/connection.rs
index 768bcb7..bbd323b 100644
--- a/src/network/connection.rs
+++ b/src/network/connection.rs
@@ -43,6 +43,16 @@ pub struct LocalSocket {
pub protocol: Protocol,
}
+impl fmt::Display for LocalSocket {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ let LocalSocket { ip, port, protocol } = self;
+ match ip {
+ IpAddr::V4(v4) => write!(f, "{protocol}://{v4}:{port}"),
+ IpAddr::V6(v6) => write!(f, "{protocol}://[{v6}]:{port}"),
+ }
+ }
+}
+
#[derive(PartialEq, Hash, Eq, Clone, PartialOrd, Ord, Debug, Copy)]
pub struct Connection {
pub remote_socket: Socket,