Files
ngit-grasp/Cargo.toml
T
DanConwayDev 9ab07840fc feat(metrics): export service resource usage
The stabilization acceptance criteria require sustained CPU and memory
evidence, but ngit-grasp currently exposes neither through its Prometheus
endpoint. Manual systemd sampling is service-specific but does not provide a
durable application time series.

Enable rust-prometheus's Linux process collector and explicitly register it
with ngit-grasp's private registry. Also read the service's cgroup v2 CPU and
memory counters so the headline metrics include every child Git process. The
process-only metrics remain available to distinguish daemon cost from Git
work. Document both levels and the PromQL rate used to derive CPU use.

The cgroup metrics are omitted gracefully when the binary is not running in a
readable Linux cgroup v2 hierarchy. They follow the existing global metrics
switch: no separate configuration surface is added. Host-wide contention and
unrelated services remain deliberately excluded.

Validated with:
- git diff --check
- nix develop -c cargo test --lib metrics::tests::test_metrics_with_repository_counting

The repository-wide cargo fmt check still reports pre-existing formatting in
unrelated sync modules and tests; src/metrics/mod.rs was formatted directly.
2026-08-08 12:54:28 +00:00

158 lines
3.7 KiB
TOML

[package]
name = "ngit-grasp"
version = "2.1.1"
edition = "2021"
authors = ["ngit-grasp contributors"]
license = "MIT"
description = "A GRASP (Git Relays Authorized via Signed-Nostr Proofs) implementation in Rust"
repository = "https://gitworkshop.dev/danconwaydev.com/ngit-grasp"
[dependencies]
# Async runtime
tokio = { version = "1.35", features = ["full"] }
# HTTP server (hyper for relay integration)
hyper = { version = "1.4", features = ["full"] }
hyper-util = { version = "0.1", features = ["tokio", "server", "http1", "http2"] }
http-body-util = "0.1"
# Nostr
#
# The stable 0.45 series contains the upstream NEG-OPEN handling fix used by
# the embedded relay. Caret requirements accept compatible patch releases.
nostr = "0.45.0"
# `local-relay` carries the embedded relay implementation, previously the
# separate `nostr-relay-builder` crate.
nostr-sdk = { version = "0.45.0", features = ["local-relay"] }
nostr-lmdb = "0.45.0"
nostr-memory = "0.45.0"
# Utilities
# SHA-1 for the `Sec-WebSocket-Accept` handshake. `nostr` uses this same crate
# internally but stopped re-exporting it as `nostr::hashes` in 0.45,
# so depend on it directly rather than pulling in a second hash implementation.
bitcoin_hashes = "0.14"
futures-util = "0.3"
base64 = "0.22"
flate2 = "1.0"
tar = "0.4"
fs2 = "0.4"
# Metrics
prometheus = { version = "0.14", features = ["process"] }
dashmap = "6"
lazy_static = "1.4"
# Data structures
indexmap = "2"
# Random (for startup jitter)
rand = "0.10"
# Serialization
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
# Logging
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
# Configuration
dotenvy = "0.15"
clap = { version = "4.5", features = ["derive", "env"] }
# Error handling
anyhow = "1.0"
# Async traits
async-trait = "0.1"
# Temporary directories (used for GRASP-06 empty-repo synthesis)
tempfile = "3"
reqwest = { version = "0.13", default-features = false, features = ["native-tls"] }
# Git (for future use)
# git-http-backend = "0.3"
[dev-dependencies]
# Testing
grasp-audit = { path = "grasp-audit", version = "0.2.0" }
tempfile = "3"
tokio = { version = "1.35", features = ["full", "test-util"] }
tokio-tungstenite = "0.28.0"
[lib]
name = "ngit_grasp"
path = "src/lib.rs"
[[bin]]
name = "ngit-grasp"
path = "src/main.rs"
[[test]]
name = "nip09_announcement_cascade"
path = "tests/lifecycle/nip09_announcement_cascade.rs"
[[test]]
name = "nip09_blacklist_ops"
path = "tests/lifecycle/nip09_blacklist_ops.rs"
[[test]]
name = "nip09_cascade_event_types"
path = "tests/lifecycle/nip09_cascade_event_types.rs"
[[test]]
name = "nip09_disrespector"
path = "tests/lifecycle/nip09_disrespector.rs"
[[test]]
name = "nip09_git_archive_cleanup"
path = "tests/lifecycle/nip09_git_archive_cleanup.rs"
[[test]]
name = "nip09_holding_cleanup"
path = "tests/lifecycle/nip09_holding_cleanup.rs"
[[test]]
name = "nip09_holding_db"
path = "tests/lifecycle/nip09_holding_db.rs"
[[test]]
name = "nip09_multi_maintainer"
path = "tests/lifecycle/nip09_multi_maintainer.rs"
[[test]]
name = "nip09_recovery"
path = "tests/lifecycle/nip09_recovery.rs"
[[test]]
name = "nip09_state_cascade"
path = "tests/lifecycle/nip09_state_cascade.rs"
[[test]]
name = "nip09_state_multi_maintainer"
path = "tests/lifecycle/nip09_state_multi_maintainer.rs"
[[test]]
name = "nip09_validation"
path = "tests/lifecycle/nip09_validation.rs"
[[test]]
name = "deletion_request_retention"
path = "tests/lifecycle/deletion_request_retention.rs"
[[test]]
name = "nip62_lifecycle"
path = "tests/lifecycle/nip62_lifecycle.rs"
[[test]]
name = "nip62_validation"
path = "tests/lifecycle/nip62_validation.rs"
[[test]]
name = "replaceable_history"
path = "tests/lifecycle/replaceable_history.rs"
[workspace]
members = [".", "grasp-audit"]