MCPcopy Create free account
hub / github.com/NativeScript/SimDeck / sample_network

Function sample_network

packages/server/src/performance.rs:785–832  ·  view source on GitHub ↗
(pid: i32)

Source from the content-addressed store, hash-verified

783}
784
785async fn sample_network(pid: i32) -> Result<NetworkSnapshot, AppError> {
786 let (received_bytes, sent_bytes) = sample_network_totals(pid).await.unwrap_or((None, None));
787 let output = timeout(
788 NETWORK_SAMPLE_TIMEOUT,
789 Command::new("lsof")
790 .args(["-nP", "-a", "-p", &pid.to_string(), "-iTCP", "-iUDP"])
791 .output(),
792 )
793 .await
794 .map_err(|_| AppError::native("Timed out reading process network connections."))?
795 .map_err(|error| {
796 AppError::native(format!(
797 "Unable to read process network connections: {error}"
798 ))
799 })?;
800 if !output.status.success() {
801 return Ok(NetworkSnapshot {
802 connection_count: 0,
803 established_connection_count: 0,
804 received_bytes,
805 sent_bytes,
806 endpoints: Vec::new(),
807 });
808 }
809 let mut connection_count = 0;
810 let mut established_connection_count = 0;
811 let mut endpoints = Vec::new();
812 for line in String::from_utf8_lossy(&output.stdout).lines().skip(1) {
813 let trimmed = line.trim();
814 if trimmed.is_empty() {
815 continue;
816 }
817 connection_count += 1;
818 if trimmed.contains("ESTABLISHED") {
819 established_connection_count += 1;
820 }
821 if endpoints.len() < 8 {
822 endpoints.push(compact_lsof_endpoint(trimmed));
823 }
824 }
825 Ok(NetworkSnapshot {
826 connection_count,
827 established_connection_count,
828 received_bytes,
829 sent_bytes,
830 endpoints,
831 })
832}
833
834async fn sample_network_totals(pid: i32) -> Result<(Option<u64>, Option<u64>), AppError> {
835 let output = timeout(

Callers 1

sample_processFunction · 0.85

Calls 4

sample_network_totalsFunction · 0.85
compact_lsof_endpointFunction · 0.85
is_emptyMethod · 0.80
outputMethod · 0.65

Tested by

no test coverage detected