This commit is contained in:
Robin Appelman 2026-04-06 22:30:53 +02:00
commit 40560f2129
11 changed files with 68 additions and 69 deletions

View file

@ -43,5 +43,5 @@ jobs:
- run: nix build .#${{ matrix.target }}
- uses: https://code.forgejo.org/forgejo/upload-artifact@v4
with:
name: palantir-${{ matrix.target }}
path: result/bin/palantir${{ matrix.binary-suffix }}
name: sidewindow-${{ matrix.target }}
path: result/bin/sidewindow${{ matrix.binary-suffix }}

View file

@ -36,6 +36,6 @@ jobs:
uses: https://github.com/svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: result/bin/palantir${{ matrix.binary-suffix }}
asset_name: palantir-${{ matrix.target }}${{ matrix.binary-suffix }}
file: result/bin/sidewindow${{ matrix.binary-suffix }}
asset_name: sidewindow-${{ matrix.target }}${{ matrix.binary-suffix }}
tag: ${{ github.ref }}

66
Cargo.lock generated
View file

@ -1289,39 +1289,6 @@ version = "3.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
[[package]]
name = "palantir"
version = "1.3.1"
dependencies = [
"ahash",
"bollard",
"clap",
"color-eyre",
"ctrlc",
"dotenvy",
"futures-util",
"hostname 0.4.0",
"if-addrs 0.12.0",
"libc",
"libmdns",
"nvml-wrapper",
"once_cell",
"os-thread-local",
"procfs",
"regex",
"serde",
"sysconf",
"sysinfo",
"thiserror",
"tokio",
"tracing",
"tracing-subscriber",
"warp",
"winapi 0.3.9",
"winreg",
"wmi",
]
[[package]]
name = "percent-encoding"
version = "2.3.1"
@ -1617,6 +1584,39 @@ dependencies = [
"lazy_static",
]
[[package]]
name = "sidewindow"
version = "1.3.1"
dependencies = [
"ahash",
"bollard",
"clap",
"color-eyre",
"ctrlc",
"dotenvy",
"futures-util",
"hostname 0.4.0",
"if-addrs 0.12.0",
"libc",
"libmdns",
"nvml-wrapper",
"once_cell",
"os-thread-local",
"procfs",
"regex",
"serde",
"sysconf",
"sysinfo",
"thiserror",
"tokio",
"tracing",
"tracing-subscriber",
"warp",
"winapi 0.3.9",
"winreg",
"wmi",
]
[[package]]
name = "slab"
version = "0.4.9"

View file

@ -1,5 +1,5 @@
[package]
name = "palantir"
name = "sidewindow"
version = "1.3.1"
authors = ["Robin Appelman <robin@icewind.nl>"]
edition = "2021"

View file

@ -1,4 +1,4 @@
# Palantir
# Sidewindow
Opinionated system metrics exporter for prometheus
@ -14,11 +14,11 @@ Opinionated system metrics exporter for prometheus
## Usage
- Download the binary for your architecture from the
[releases](https://github.com/icewind1991/palantir/releases/) and place it at
`/usr/local/bin/palantir`
- Place the [palantir.service](palantir.service) file in `/etc/systemd/system/`
- Create the `palantir` user: `sudo useradd -m palantir`
- Start enable enable the server: `sudo systemctl enable --now palantir`
[releases](https://codeberg.org/icewind/sidewindow/releases/) and place it at
`/usr/local/bin/sidewindow`
- Place the [sidewindow.service](sidewindow.service) file in `/etc/systemd/system/`
- Create the `sidewindow` user: `sudo useradd -m sidewindow`
- Start enable enable the server: `sudo systemctl enable --now sidewindow`
- Metrics will be available at `localhost:5665/metrics`
Some stats require additional permissions described below.
@ -27,7 +27,7 @@ Some stats require additional permissions described below.
In recent kernel versions, precise power monitoring is only accessible to root
users to prevent using it as a side-channel attack. In order to get the power
monitoring output you'll need to give the `palantir` user access to this data
monitoring output you'll need to give the `sidewindow` user access to this data
using the following steps.
- Create a group using
@ -52,26 +52,26 @@ using the following steps.
- Add your user to the group
```
sudo usermod -a -G powermonitoring palantir
sudo usermod -a -G powermonitoring sidewindow
```
- Verify that you can read energy usage
```
sudo su - palantir -c 'cat /sys/class/powercap/intel-rapl:0:0/energy_uj'
sudo su - sidewindow -c 'cat /sys/class/powercap/intel-rapl:0:0/energy_uj'
```
## Docker monitoring permissions
To enable monitoring of docker containers, add the `palantir` user to the
To enable monitoring of docker containers, add the `sidewindow` user to the
`docker` group
```bash
sudo usermod -a -G docker palantir
sudo usermod -a -G docker sidewindow
```
## Windows support
Palantir has limited windows support out of the box, additional sensors can be
Sidewindow has limited windows support out of the box, additional sensors can be
enabled by running
[LibreHardwareMonitor](https://github.com/LibreHardwareMonitor/LibreHardwareMonitor).

View file

@ -12,7 +12,7 @@
};
outputs = {mill-scale, ...}:
mill-scale ./. {
packages.palantir = import ./package.nix;
packages.sidewindow = import ./package.nix;
crossTargets = [
"x86_64-pc-windows-gnu"
@ -30,9 +30,9 @@
...
}: {
imports = [./module.nix];
config = lib.mkIf config.services.palantir.enable {
config = lib.mkIf config.services.sidewindow.enable {
nixpkgs.overlays = [outputs.overlays.default];
services.palantir.package = lib.mkDefault pkgs.palantir;
services.sidewindow.package = lib.mkDefault pkgs.sidewindow;
};
};
};

View file

@ -5,10 +5,10 @@
...
}:
with lib; let
cfg = config.services.palantir;
cfg = config.services.sidewindow;
in {
options.services.palantir = {
enable = mkEnableOption "Enables the palantir service";
options.services.sidewindow = {
enable = mkEnableOption "Enables the sidewindow service";
port = mkOption rec {
type = types.int;
@ -73,7 +73,7 @@ in {
services.udev.packages = [cfg.package];
systemd.services."palantir" = {
systemd.services."sidewindow" = {
wantedBy = ["multi-user.target"];
after = ["systemd-networkd-wait-online.service"];
path = lib.optional cfg.zfs pkgs.zfs;
@ -93,7 +93,7 @@ in {
serviceConfig = {
Restart = "on-failure";
ExecStart = "${cfg.package}/bin/palantir";
ExecStart = "${cfg.package}/bin/sidewindow";
DynamicUser = true;
PrivateTmp = true;
ProtectSystem = "strict";

View file

@ -1,3 +1,3 @@
final: prev: {
palantir = final.callPackage ./package.nix {};
sidewindow = final.callPackage ./package.nix {};
}

View file

@ -1,5 +1,4 @@
{
stdenv,
rustPlatform,
coreutils,
lib,
@ -9,8 +8,8 @@
src = sourceByRegex ./. ["Cargo.*" "(src|benches)(/.*)?"];
version = (fromTOML (readFile ./Cargo.toml)).package.version;
in
rustPlatform.buildRustPackage rec {
pname = "palantir";
rustPlatform.buildRustPackage {
pname = "sidewindow";
inherit src version;
@ -22,7 +21,7 @@ in
postInstall = ''
mkdir -p $out/lib/udev/rules.d/
echo 'SUBSYSTEM=="powercap", ACTION=="add", RUN+="${coreutils}/bin/chgrp -R powermonitoring /sys%p", RUN+="${coreutils}/bin/chmod -R g=u /sys%p"' >> $out/lib/udev/rules.d/51-palantir.rules
echo 'SUBSYSTEM=="powercap", ACTION=="change", ENV{TRIGGER}!="none", RUN+="${coreutils}/bin/chgrp -R powermonitoring /sys%p", RUN+="${coreutils}/bin/chmod -R g=u /sys%p"' >> $out/lib/udev/rules.d/51-palantir.rules
echo 'SUBSYSTEM=="powercap", ACTION=="add", RUN+="${coreutils}/bin/chgrp -R powermonitoring /sys%p", RUN+="${coreutils}/bin/chmod -R g=u /sys%p"' >> $out/lib/udev/rules.d/51-sidewindow.rules
echo 'SUBSYSTEM=="powercap", ACTION=="change", ENV{TRIGGER}!="none", RUN+="${coreutils}/bin/chgrp -R powermonitoring /sys%p", RUN+="${coreutils}/bin/chmod -R g=u /sys%p"' >> $out/lib/udev/rules.d/51-sidewindow.rules
'';
}

View file

@ -1,11 +1,11 @@
[Unit]
Description = palantir
Description = sidewindow
[Service]
Type=simple
User=palantir
User=sidewindow
Environment=PORT=5665
ExecStart=/usr/local/bin/palantir
ExecStart=/usr/local/bin/sidewindow
PrivateTmp=true
ProtectSystem=full
ProtectHome=true

View file

@ -4,8 +4,8 @@ use color_eyre::{Report, Result};
use futures_util::pin_mut;
use futures_util::StreamExt;
use libmdns::Responder;
use palantir::docker::{get_docker, stat, Container};
use palantir::{get_metrics, Sensors};
use sidewindow::docker::{get_docker, stat, Container};
use sidewindow::{get_metrics, Sensors};
use std::sync::Arc;
use std::time::Duration;
use tokio::runtime::Handle;