release / build (push) Successful in 4m0s
37 + 73 = 100 btw
1. tracing
- much more tracing across agent and cc
- metrics, logs and spans exported through otlp (grpc)
- console logs, otlp logs and traces have independent filters now
- follow a command from cc to agent, or a snapshot from collection to storage, in one trace
- exporters retry temporary failures with backoff and keep queues bounded
- prolonged collector outages can lose telemetry
- exporter and transport diagnostics stay in console logs so exports don't generate more exports
- check out them fields at docs/telemetry.md
- process them with guides from docs/telemetry-recipes.md
2. more process info
- agent and cc report process/host uptime, process RSS, CPU time and open file descriptors
- the FD count includes files, sockets and pipes
- host total/available memory and 1/5/15-minute load are included where supported
- these are available through otlp now, with a UI view planned later
3. config duration now uses time strings
- instead of `*_seconds` or `*_days` which is bullshit
- write durations like "30s", "60d" or "1h 30m", parsed by humantime
- check docs/config-durations.md
- old numeric keys still load and produce a deprecation warning
- init-config --from-config rewrites those keys into the new format and keeps your telemetry and access settings
- api/ws numeric fields and existing numeric cli flags are unchanged
4. devices
- clearer labels in the UI
- rename or forget saved devices
- remember, attach and merge keep the details dialog open
- details stay accessible even when the device drops out of your current list filters
- presence comes from endpoints, and unnamed devices get better fallback names
- renaming with an invalid name returns 400, while storage failures return 500
5. backend cleanup
- this helps with tracing
- ~~no more~~ less long asf fns
- related device reads share a SQLite transaction for a consistent view
- snapshot traces show pool wait, transaction begin, row writes and commit separately
- wake lookup searches the full fleet, including devices beyond the UI list's 1,000-row cap
6. fleet collection caching
- reuse the grouped view until DB or connected-agent state changes
- if changes keep interrupting a rebuild, return 503 fleet_busy so the caller can retry
- current fleet/device/endpoint counts are also available as metrics
- cool
7. origin auth
- docs/origin-auth.md
- validate Cloudflare Access tokens at the origin
- caddy calls cc's /internal/auth/verify before proxying protected routes
- configure [access] with the protected app's issuer and AUD
- the signing-key URL defaults from the issuer and can be overridden
- cache signing keys according to HTTP freshness headers and revalidate with ETag/Last-Modified
- update the caddy config!
- keep cc bound to loopback so requests go through caddy's auth checks
- agent endpoints continue using their own authentication
- closing the confirmed origin bypass requires BOTH the cc config and the caddy update
8. retention + deployment bits
- device_retention defaults to "60d", and "0d" disables expiry
- an agent-collected device's retention age resets whenever cc receives a snapshot containing it
- complete snapshots immediately remove rows the agent has omitted
- saved devices and their manually attached identifiers remain saved
- OpenWrt UCI/environment setup, credential-entry fixes and an updated copy script
Ping, multi-CC, the process-info UI and profiling are planned for later.
all codex btw idfk what these do
there are things to do.
50 lines
1.5 KiB
TOML
50 lines
1.5 KiB
TOML
[package]
|
|
name = "wakey-control-plane"
|
|
version = "0.3.7"
|
|
edition = "2024"
|
|
publish = ["gitea"]
|
|
|
|
[dependencies]
|
|
anyhow = { workspace = true }
|
|
axum = { version = "0.8", features = ["ws", "json"] }
|
|
clap = { version = "4", features = ["derive"] }
|
|
futures-util = "0.3"
|
|
humantime-serde = "1"
|
|
http-cache-semantics = { version = "3", default-features = false, features = ["reqwest"] }
|
|
jsonwebtoken = { version = "10.3", default-features = false, features = ["aws_lc_rs"] }
|
|
macaddr = { workspace = true }
|
|
nix = { version = "0.31", default-features = false, features = [
|
|
"signal",
|
|
"process",
|
|
] }
|
|
reqwest = { version = "0.13", default-features = false, features = [
|
|
"json",
|
|
"rustls",
|
|
] }
|
|
serde = { workspace = true }
|
|
serde_json = { workspace = true }
|
|
thiserror = "2"
|
|
|
|
sqlx = { version = "0.8", features = [
|
|
"runtime-tokio",
|
|
"sqlite",
|
|
"macros",
|
|
"migrate",
|
|
"uuid",
|
|
"json",
|
|
] }
|
|
toml = "1.1"
|
|
tokio = { workspace = true }
|
|
tower-http = { version = "0.6.8", features = ["fs"] }
|
|
tracing = { workspace = true }
|
|
uuid = { workspace = true }
|
|
wakey-agent = { path = "../wakey-agent", registry = "gitea", version = "0" }
|
|
wakey-core = { path = "../wakey-core", registry = "gitea", version = "0", features = ["telemetry"] }
|
|
|
|
[target.'cfg(target_os = "linux")'.dependencies]
|
|
wakey-linux = { path = "../wakey-linux", registry = "gitea", version = "0", features = ["telemetry"] }
|
|
|
|
[dev-dependencies]
|
|
tower = { version = "0.5", features = ["util"] }
|
|
jsonwebtoken = { version = "10.3", default-features = false, features = ["use_pem", "aws_lc_rs"] }
|