[skip ci] Fix agent for sysinfo 0.31
This commit is contained in:
parent
4075c048ca
commit
206d00700e
1 changed files with 16 additions and 28 deletions
|
|
@ -7,7 +7,7 @@ use parking_lot::Mutex;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use serde_json::json;
|
use serde_json::json;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use sysinfo::{DiskExt, Networks, System, SystemExt};
|
use sysinfo::{Networks, System};
|
||||||
use tauri::async_runtime::{self, JoinHandle};
|
use tauri::async_runtime::{self, JoinHandle};
|
||||||
use tokio::sync::Notify;
|
use tokio::sync::Notify;
|
||||||
|
|
||||||
|
|
@ -166,12 +166,13 @@ fn collect_network_addrs() -> Vec<serde_json::Value> {
|
||||||
entries
|
entries
|
||||||
}
|
}
|
||||||
|
|
||||||
fn collect_disks(system: &System) -> Vec<serde_json::Value> {
|
fn collect_disks(_system: &System) -> Vec<serde_json::Value> {
|
||||||
let mut out = Vec::new();
|
let mut out = Vec::new();
|
||||||
for disk in system.disks() {
|
let disks = sysinfo::Disks::new_with_refreshed_list();
|
||||||
|
for disk in disks.list() {
|
||||||
let name = disk.name().to_string_lossy().to_string();
|
let name = disk.name().to_string_lossy().to_string();
|
||||||
let mount = disk.mount_point().to_string_lossy().to_string();
|
let mount = disk.mount_point().to_string_lossy().to_string();
|
||||||
let fs = String::from_utf8_lossy(disk.file_system()).to_string();
|
let fs = disk.file_system().to_string_lossy().to_string();
|
||||||
let total = disk.total_space();
|
let total = disk.total_space();
|
||||||
let avail = disk.available_space();
|
let avail = disk.available_space();
|
||||||
out.push(json!({
|
out.push(json!({
|
||||||
|
|
@ -183,23 +184,6 @@ fn collect_disks(system: &System) -> Vec<serde_json::Value> {
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
if out.is_empty() {
|
|
||||||
let disks = sysinfo::Disks::new_with_refreshed_list();
|
|
||||||
for d in disks.list() {
|
|
||||||
let name = d.name().to_string_lossy().to_string();
|
|
||||||
let mount = d.mount_point().to_string_lossy().to_string();
|
|
||||||
let fs = String::from_utf8_lossy(d.file_system()).to_string();
|
|
||||||
let total = d.total_space();
|
|
||||||
let avail = d.available_space();
|
|
||||||
out.push(json!({
|
|
||||||
"name": if name.is_empty() { mount.clone() } else { name },
|
|
||||||
"mountPoint": mount,
|
|
||||||
"fs": fs,
|
|
||||||
"totalBytes": total,
|
|
||||||
"availableBytes": avail,
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
out
|
out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -255,13 +239,13 @@ fn build_inventory_metadata(system: &System) -> serde_json::Value {
|
||||||
.cpus()
|
.cpus()
|
||||||
.first()
|
.first()
|
||||||
.map(|cpu| cpu.brand().to_string())
|
.map(|cpu| cpu.brand().to_string())
|
||||||
.unwrap_or_default();
|
.filter(|brand| !brand.trim().is_empty());
|
||||||
// sysinfo 0.31 já retorna bytes em total_memory/used_memory
|
// sysinfo 0.31 já retorna bytes em total_memory/used_memory
|
||||||
let mem_total_bytes = system.total_memory();
|
let mem_total_bytes = system.total_memory();
|
||||||
let network = collect_network_addrs();
|
let network = collect_network_addrs();
|
||||||
let disks = collect_disks(system);
|
let disks = collect_disks(system);
|
||||||
let mut inventory = json!({
|
let mut inventory = json!({
|
||||||
"cpu": { "brand": cpu_brand },
|
"cpu": { "brand": cpu_brand.clone() },
|
||||||
"memory": { "totalBytes": mem_total_bytes },
|
"memory": { "totalBytes": mem_total_bytes },
|
||||||
"network": network,
|
"network": network,
|
||||||
"disks": disks,
|
"disks": disks,
|
||||||
|
|
@ -326,12 +310,16 @@ fn build_inventory_metadata(system: &System) -> serde_json::Value {
|
||||||
|
|
||||||
// Normalização de software/serviços no topo do inventário
|
// Normalização de software/serviços no topo do inventário
|
||||||
if let Some(obj) = inventory.as_object_mut() {
|
if let Some(obj) = inventory.as_object_mut() {
|
||||||
|
let extended_snapshot = obj
|
||||||
|
.get("extended")
|
||||||
|
.and_then(|v| v.as_object())
|
||||||
|
.cloned();
|
||||||
// Merge software
|
// Merge software
|
||||||
let mut software: Vec<serde_json::Value> = Vec::new();
|
let mut software: Vec<serde_json::Value> = Vec::new();
|
||||||
if let Some(existing) = obj.get("software").and_then(|v| v.as_array()) {
|
if let Some(existing) = obj.get("software").and_then(|v| v.as_array()) {
|
||||||
software.extend(existing.iter().cloned());
|
software.extend(existing.iter().cloned());
|
||||||
}
|
}
|
||||||
if let Some(ext) = obj.get("extended").and_then(|v| v.as_object()) {
|
if let Some(ext) = extended_snapshot.as_ref() {
|
||||||
// Windows normalize
|
// Windows normalize
|
||||||
if let Some(win) = ext.get("windows").and_then(|v| v.as_object()) {
|
if let Some(win) = ext.get("windows").and_then(|v| v.as_object()) {
|
||||||
if let Some(ws) = win.get("software").and_then(|v| v.as_array()) {
|
if let Some(ws) = win.get("software").and_then(|v| v.as_array()) {
|
||||||
|
|
@ -370,7 +358,7 @@ fn build_inventory_metadata(system: &System) -> serde_json::Value {
|
||||||
if let Some(existing) = obj.get("services").and_then(|v| v.as_array()) {
|
if let Some(existing) = obj.get("services").and_then(|v| v.as_array()) {
|
||||||
services.extend(existing.iter().cloned());
|
services.extend(existing.iter().cloned());
|
||||||
}
|
}
|
||||||
if let Some(ext) = obj.get("extended").and_then(|v| v.as_object()) {
|
if let Some(ext) = extended_snapshot.as_ref() {
|
||||||
if let Some(win) = ext.get("windows").and_then(|v| v.as_object()) {
|
if let Some(win) = ext.get("windows").and_then(|v| v.as_object()) {
|
||||||
if let Some(wsvc) = win.get("services").and_then(|v| v.as_array()) {
|
if let Some(wsvc) = win.get("services").and_then(|v| v.as_array()) {
|
||||||
for s in wsvc {
|
for s in wsvc {
|
||||||
|
|
@ -389,7 +377,7 @@ fn build_inventory_metadata(system: &System) -> serde_json::Value {
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut gpus: Vec<serde_json::Value> = Vec::new();
|
let mut gpus: Vec<serde_json::Value> = Vec::new();
|
||||||
if let Some(ext) = obj.get("extended").and_then(|v| v.as_object()) {
|
if let Some(ext) = extended_snapshot.as_ref() {
|
||||||
if let Some(win) = ext.get("windows").and_then(|v| v.as_object()) {
|
if let Some(win) = ext.get("windows").and_then(|v| v.as_object()) {
|
||||||
if let Some(video) = win.get("videoControllers").and_then(|v| v.as_array()) {
|
if let Some(video) = win.get("videoControllers").and_then(|v| v.as_array()) {
|
||||||
for controller in video {
|
for controller in video {
|
||||||
|
|
@ -418,8 +406,8 @@ fn build_inventory_metadata(system: &System) -> serde_json::Value {
|
||||||
"name": if !model.is_empty() { model } else { serial },
|
"name": if !model.is_empty() { model } else { serial },
|
||||||
"mountPoint": "",
|
"mountPoint": "",
|
||||||
"fs": if !media.is_empty() { media } else { "—" },
|
"fs": if !media.is_empty() { media } else { "—" },
|
||||||
"interface": if !interface.is_empty() { interface } else { serde_json::Value::Null },
|
"interface": if !interface.is_empty() { serde_json::Value::String(interface.to_string()) } else { serde_json::Value::Null },
|
||||||
"serial": if !serial.is_empty() { serial } else { serde_json::Value::Null },
|
"serial": if !serial.is_empty() { serde_json::Value::String(serial.to_string()) } else { serde_json::Value::Null },
|
||||||
"totalBytes": size,
|
"totalBytes": size,
|
||||||
"availableBytes": serde_json::Value::Null,
|
"availableBytes": serde_json::Value::Null,
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue