mirror of
https://codeberg.org/icewind/palantir.git
synced 2026-06-03 10:14:09 +02:00
updates
This commit is contained in:
parent
40560f2129
commit
22c82c59af
7 changed files with 926 additions and 924 deletions
1755
Cargo.lock
generated
1755
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
50
Cargo.toml
50
Cargo.toml
|
|
@ -2,40 +2,40 @@
|
|||
name = "sidewindow"
|
||||
version = "1.3.1"
|
||||
authors = ["Robin Appelman <robin@icewind.nl>"]
|
||||
edition = "2021"
|
||||
rust-version = "1.73.0"
|
||||
edition = "2024"
|
||||
rust-version = "1.88.0"
|
||||
|
||||
[dependencies]
|
||||
color-eyre = "0.6.3"
|
||||
warp = "0.3.7"
|
||||
tokio = { version = "1.37.0", features = ["macros", "rt-multi-thread"] }
|
||||
ctrlc = { version = "3.4.4", features = ["termination"] }
|
||||
color-eyre = "0.6.5"
|
||||
warp = { version = "0.4.2", features = ["server"] }
|
||||
tokio = { version = "1.51.0", features = ["macros", "rt-multi-thread"] }
|
||||
ctrlc = { version = "3.5.2", features = ["termination"] }
|
||||
dotenvy = "0.15.7"
|
||||
regex = { version = "1.10.4", default-features = false, features = ["std"] }
|
||||
once_cell = "1.19.0"
|
||||
hostname = "0.4.0"
|
||||
libc = "0.2.153"
|
||||
ahash = "0.8.11"
|
||||
bollard = "0.16.1"
|
||||
futures-util = "0.3.30"
|
||||
libmdns = "0.8.0"
|
||||
tracing = "0.1.40"
|
||||
tracing-subscriber = "0.3.18"
|
||||
nvml-wrapper = "0.10.0"
|
||||
if-addrs = "0.12.0"
|
||||
regex = { version = "1.12.3", default-features = false, features = ["std"] }
|
||||
once_cell = "1.21.4"
|
||||
hostname = "0.4.2"
|
||||
libc = "0.2.184"
|
||||
ahash = "0.8.12"
|
||||
bollard = "0.20.2"
|
||||
futures-util = "0.3.32"
|
||||
libmdns = "0.10.1"
|
||||
tracing = "0.1.44"
|
||||
tracing-subscriber = "0.3.23"
|
||||
nvml-wrapper = "0.12.1"
|
||||
if-addrs = "0.15.0"
|
||||
sysconf = "0.3.4"
|
||||
thiserror = "1.0.58"
|
||||
clap = { version = "=4.4.18", features = ["derive"] }
|
||||
thiserror = "2.0.18"
|
||||
clap = { version = "4.6.0", features = ["derive"] }
|
||||
|
||||
[target.'cfg(not(windows))'.dependencies]
|
||||
procfs = "0.16.0"
|
||||
procfs = "0.18.0"
|
||||
|
||||
[target.'cfg(windows)'.dependencies]
|
||||
serde = { version = "1.0.197", features = ["derive"] }
|
||||
sysinfo = { version = "0.30.8" }
|
||||
serde = { version = "1.0.228", features = ["derive"] }
|
||||
sysinfo = { version = "0.38.4" }
|
||||
winapi = { version = "0.3.9", features = ["sysinfoapi", "processthreadsapi", "powerbase", "minwindef", "winnt", "winbase", "winerror", "impl-default"] }
|
||||
wmi = { version = "0.13.3" }
|
||||
winreg = { version = "0.52.0", features = ["serialization-serde"] }
|
||||
wmi = { version = "0.18.4" }
|
||||
winreg = { version = "0.56.0", features = ["serialization-serde"] }
|
||||
os-thread-local = "0.1.3"
|
||||
|
||||
[profile.release]
|
||||
|
|
|
|||
34
flake.lock
generated
34
flake.lock
generated
|
|
@ -2,11 +2,11 @@
|
|||
"nodes": {
|
||||
"crane": {
|
||||
"locked": {
|
||||
"lastModified": 1742394900,
|
||||
"narHash": "sha256-vVOAp9ahvnU+fQoKd4SEXB2JG2wbENkpqcwlkIXgUC0=",
|
||||
"lastModified": 1774313767,
|
||||
"narHash": "sha256-hy0XTQND6avzGEUFrJtYBBpFa/POiiaGBr2vpU6Y9tY=",
|
||||
"owner": "ipetkov",
|
||||
"repo": "crane",
|
||||
"rev": "70947c1908108c0c551ddfd73d4f750ff2ea67cd",
|
||||
"rev": "3d9df76e29656c679c744968b17fbaf28f0e923d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -22,11 +22,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1748868585,
|
||||
"narHash": "sha256-DrrbahOQAwvNM8l5EuGxxkVS7X5/S59zcG0N9ZWQFhk=",
|
||||
"lastModified": 1775481670,
|
||||
"narHash": "sha256-y/c2JCNmjeuxbSpfE4r2qN02dQX+tkfIZpwEfOlF64s=",
|
||||
"owner": "nix-community",
|
||||
"repo": "flakelight",
|
||||
"rev": "dfbecd12d99c1bf82906521a6a7d5b75d2aa1ca2",
|
||||
"rev": "0868c446b28e412ff2a685e93856658a43c30b1f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -44,11 +44,11 @@
|
|||
"rust-overlay": "rust-overlay"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1748205441,
|
||||
"narHash": "sha256-W+UUBT/l1DSTZo5G43494mRNNspJ2i9jW2QELC9JuMQ=",
|
||||
"lastModified": 1775237959,
|
||||
"narHash": "sha256-sAtsOHkxSPlm4KTNxHnf1sGhnuw4F47k9mjdbIRjtxo=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "dac3b74a89cebbeb21cc6602e4a346604adbee8b",
|
||||
"revCount": 49,
|
||||
"rev": "306a9f8d74d04a1bdb8e93318a25aa5745ae3c20",
|
||||
"revCount": 70,
|
||||
"type": "git",
|
||||
"url": "https://codeberg.org/icewind/mill-scale"
|
||||
},
|
||||
|
|
@ -59,16 +59,16 @@
|
|||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1748708770,
|
||||
"narHash": "sha256-q8jG2HJWgooWa9H0iatZqBPF3bp0504e05MevFmnFLY=",
|
||||
"lastModified": 1775305101,
|
||||
"narHash": "sha256-/74n1oQPtKG52Yw41cbToxspxHbYz6O3vi+XEw16Qe8=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "a59eb7800787c926045d51b70982ae285faa2346",
|
||||
"rev": "36a601196c4ebf49e035270e10b2d103fe39076b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"ref": "nixos-25.05",
|
||||
"ref": "nixos-25.11",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
|
|
@ -88,11 +88,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1742697269,
|
||||
"narHash": "sha256-Lpp0XyAtIl1oGJzNmTiTGLhTkcUjwSkEb0gOiNzYFGM=",
|
||||
"lastModified": 1774535687,
|
||||
"narHash": "sha256-dpKS/8+uB0EoI4mCrpio+xs8Xxry6ZhLLwV8VIbbfrs=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "01973c84732f9275c50c5f075dd1f54cc04b3316",
|
||||
"rev": "75900435aa883f84b038316864b3f60956681523",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "nixpkgs/nixos-25.05";
|
||||
nixpkgs.url = "nixpkgs/nixos-25.11";
|
||||
flakelight = {
|
||||
url = "github:nix-community/flakelight";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
use bollard::container::{Stats, StatsOptions};
|
||||
use bollard::models::ContainerSummary;
|
||||
use bollard::plugin::ContainerStatsResponse;
|
||||
use bollard::query_parameters::StatsOptions;
|
||||
use bollard::Docker;
|
||||
use color_eyre::Result;
|
||||
use futures_util::future::ready;
|
||||
|
|
@ -45,27 +46,36 @@ impl Container {
|
|||
.ok();
|
||||
}
|
||||
|
||||
fn from(stats: Stats, container: ContainerSummary) -> Self {
|
||||
fn from(stats: ContainerStatsResponse, container: ContainerSummary) -> Self {
|
||||
let cpu = stats.cpu_stats.unwrap_or_default();
|
||||
Container {
|
||||
name: stats.name,
|
||||
name: stats.name.unwrap_or_default(),
|
||||
image: container.image.unwrap_or_default(),
|
||||
memory: stats.memory_stats.usage.unwrap_or_default(),
|
||||
cpu_time: stats.cpu_stats.cpu_usage.total_usage as f64
|
||||
memory: stats
|
||||
.memory_stats
|
||||
.unwrap_or_default()
|
||||
.usage
|
||||
.unwrap_or_default(),
|
||||
cpu_time: cpu
|
||||
.cpu_usage
|
||||
.unwrap_or_default()
|
||||
.total_usage
|
||||
.unwrap_or_default() as f64
|
||||
/ 1_000_000_000.0
|
||||
/ stats.cpu_stats.online_cpus.unwrap_or(1) as f64,
|
||||
/ cpu.online_cpus.unwrap_or(1) as f64,
|
||||
network_sent: stats
|
||||
.networks
|
||||
.as_ref()
|
||||
.into_iter()
|
||||
.flat_map(HashMap::values)
|
||||
.map(|stats| stats.tx_bytes)
|
||||
.map(|stats| stats.tx_bytes.unwrap_or_default())
|
||||
.sum(),
|
||||
network_received: stats
|
||||
.networks
|
||||
.as_ref()
|
||||
.into_iter()
|
||||
.flat_map(HashMap::values)
|
||||
.map(|stats| stats.rx_bytes)
|
||||
.map(|stats| stats.rx_bytes.unwrap_or_default())
|
||||
.sum(),
|
||||
}
|
||||
}
|
||||
|
|
@ -73,24 +83,20 @@ impl Container {
|
|||
|
||||
pub async fn get_docker() -> Option<Docker> {
|
||||
match Docker::connect_with_local_defaults() {
|
||||
Ok(docker) => docker
|
||||
.list_containers::<String>(None)
|
||||
.await
|
||||
.ok()
|
||||
.map(|_| docker),
|
||||
Ok(docker) => docker.list_containers(None).await.ok().map(|_| docker),
|
||||
Err(_) => None,
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn stat(docker: Docker) -> Result<impl Stream<Item = Container>> {
|
||||
let containers = docker.list_containers::<String>(None).await?;
|
||||
let containers = docker.list_containers(None).await?;
|
||||
Ok(containers
|
||||
.into_iter()
|
||||
.map(move |container| {
|
||||
let docker = docker.clone();
|
||||
async move {
|
||||
let id = container.id.as_ref().unwrap();
|
||||
let stats: Stats = docker
|
||||
let stats = docker
|
||||
.stats(
|
||||
id,
|
||||
Some(StatsOptions {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
use std::fs::{read_dir, read_to_string, File};
|
||||
use std::fs::{File, read_dir, read_to_string};
|
||||
use std::io;
|
||||
use std::io::{ErrorKind, Read, Seek};
|
||||
use std::path::{Path, PathBuf};
|
||||
|
|
@ -26,9 +26,8 @@ impl FileSource {
|
|||
Ok(FileSource {
|
||||
path: path.into(),
|
||||
buff: String::with_capacity(32),
|
||||
file: File::open(path).map_err(|e| {
|
||||
file: File::open(path).inspect_err(|_| {
|
||||
warn!("failed to open sensor {}", path.display());
|
||||
e
|
||||
})?,
|
||||
})
|
||||
}
|
||||
|
|
@ -66,9 +65,8 @@ impl FileSource {
|
|||
}
|
||||
|
||||
pub fn reopen(&mut self) -> io::Result<()> {
|
||||
self.file = File::open(&self.path).map_err(|e| {
|
||||
self.file = File::open(&self.path).inspect_err(|_| {
|
||||
warn!("failed to open sensor {}", self.path.display());
|
||||
e
|
||||
})?;
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
13
src/main.rs
13
src/main.rs
|
|
@ -1,11 +1,11 @@
|
|||
use bollard::Docker;
|
||||
use clap::Parser;
|
||||
use color_eyre::{Report, Result};
|
||||
use futures_util::pin_mut;
|
||||
use futures_util::StreamExt;
|
||||
use futures_util::pin_mut;
|
||||
use libmdns::Responder;
|
||||
use sidewindow::docker::{get_docker, stat, Container};
|
||||
use sidewindow::{get_metrics, Sensors};
|
||||
use sidewindow::docker::{Container, get_docker, stat};
|
||||
use sidewindow::{Sensors, get_metrics};
|
||||
use std::sync::Arc;
|
||||
use std::time::Duration;
|
||||
use tokio::runtime::Handle;
|
||||
|
|
@ -121,12 +121,7 @@ async fn setup_mdns(hostname: String, port: u16) {
|
|||
}
|
||||
};
|
||||
|
||||
let _svc = mdns.register(
|
||||
"_prometheus-http._tcp".into(),
|
||||
hostname,
|
||||
port,
|
||||
&["/metrics"],
|
||||
);
|
||||
let _svc = mdns.register("_prometheus-http._tcp", &hostname, port, &["/metrics"]);
|
||||
|
||||
loop {
|
||||
sleep(Duration::from_secs(60 * 60)).await;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue