chore: remove deprecated Pulse+ agent metrics and add audit log rotation docs
Removed all legacy Pulse+ agent metrics infrastructure (cloud-relay) which has been fully replaced by the new docker agent and temperature agent implementations. Changes: - Remove cloud-relay directory and all related binaries (relay, relay-linux, etc.) - Remove Pulse+ documentation (AGENT_METRICS_IMPLEMENTATION.md, AGENT_METRICS_SETUP.md) - Clean up pulse-relay references in workflows and release checklist - Add audit log rotation documentation for sensor proxy hash-chained logs - Update .gitignore to remove cloud-relay/ entry The new docker and temp agents remain fully functional and unaffected by this cleanup.
This commit is contained in:
parent
7d422d2909
commit
d5c7a3494b
3 changed files with 62 additions and 7 deletions
7
.github/workflows/README.md
vendored
7
.github/workflows/README.md
vendored
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
**File**: `update-demo-server.yml`
|
**File**: `update-demo-server.yml`
|
||||||
|
|
||||||
Automatically updates the public demo server (`pulse-relay`) when a new stable release is published.
|
Automatically updates the public demo server when a new stable release is published.
|
||||||
|
|
||||||
### Configuration Required
|
### Configuration Required
|
||||||
|
|
||||||
|
|
@ -38,11 +38,6 @@ To test without publishing a release:
|
||||||
2. Select `Update Demo Server` workflow
|
2. Select `Update Demo Server` workflow
|
||||||
3. Click `Run workflow` (if manual trigger is enabled)
|
3. Click `Run workflow` (if manual trigger is enabled)
|
||||||
|
|
||||||
Or test manually:
|
|
||||||
```bash
|
|
||||||
ssh pulse-relay "curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/main/install.sh | sudo bash"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Benefits
|
### Benefits
|
||||||
|
|
||||||
- ✅ Demo server always showcases latest stable release
|
- ✅ Demo server always showcases latest stable release
|
||||||
|
|
|
||||||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -148,7 +148,6 @@ tmp_*.py
|
||||||
tmp_*.sh
|
tmp_*.sh
|
||||||
|
|
||||||
# Experimental/abandoned features (not part of main project)
|
# Experimental/abandoned features (not part of main project)
|
||||||
cloud-relay/
|
|
||||||
scripts/agent/
|
scripts/agent/
|
||||||
docs/internal/
|
docs/internal/
|
||||||
claude.md
|
claude.md
|
||||||
|
|
|
||||||
61
docs/operations/audit-log-rotation.md
Normal file
61
docs/operations/audit-log-rotation.md
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
# Pulse Sensor Proxy Audit Log Rotation
|
||||||
|
|
||||||
|
The sensor proxy writes a tamper-evident audit trail to
|
||||||
|
`/var/log/pulse/sensor-proxy/audit.log`. Every entry includes the SHA-256 hash
|
||||||
|
of the previous entry, so any modification becomes obvious. Because the process
|
||||||
|
keeps the file open and maintains the running hash in memory, rotation requires
|
||||||
|
special handling.
|
||||||
|
|
||||||
|
## Rotation Strategy
|
||||||
|
|
||||||
|
Use `logrotate` to rotate the file once it reaches 100 MB. After each rotation,
|
||||||
|
restart the proxy so it opens a new file and starts a fresh hash chain.
|
||||||
|
|
||||||
|
Create `/etc/logrotate.d/pulse-sensor-proxy` with the following contents:
|
||||||
|
|
||||||
|
```conf
|
||||||
|
/var/log/pulse/sensor-proxy/audit.log {
|
||||||
|
daily
|
||||||
|
size 100M
|
||||||
|
rotate 90
|
||||||
|
compress
|
||||||
|
delaycompress
|
||||||
|
missingok
|
||||||
|
notifempty
|
||||||
|
create 0640 pulse pulse
|
||||||
|
sharedscripts
|
||||||
|
postrotate
|
||||||
|
systemctl restart pulse-sensor-proxy.service >/dev/null 2>&1 || true
|
||||||
|
endscript
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Why a Restart Is Mandatory
|
||||||
|
|
||||||
|
`copytruncate` and similar tricks break the chain integrity. Restarting the
|
||||||
|
service ensures:
|
||||||
|
|
||||||
|
1. The proxy releases the old file descriptor.
|
||||||
|
2. A new hash chain starts at sequence 1 with an all-zero `prev_hash`.
|
||||||
|
|
||||||
|
If the proxy is not restarted, it will continue writing to the renamed file and
|
||||||
|
the rotation will have no effect.
|
||||||
|
|
||||||
|
### Chain Continuity Across Rotations
|
||||||
|
|
||||||
|
Each rotated log (`audit.log.1.gz`, `audit.log.2.gz`, …) is self-contained. To
|
||||||
|
prove continuity between files:
|
||||||
|
|
||||||
|
1. After each rotation, record the final `event_hash` from the rotated file (for
|
||||||
|
example, store it in the filename or a checksum manifest).
|
||||||
|
2. When reviewing logs, verify the `prev_hash` of the first entry in the new
|
||||||
|
file is the zero hash, and reconcile the recorded final hash from the prior
|
||||||
|
file to show no entries were removed.
|
||||||
|
|
||||||
|
Maintaining this “final hash ledger” allows auditors to stitch the rotated files
|
||||||
|
together chronologically while preserving the tamper-evident guarantees.
|
||||||
|
|
||||||
|
### Permissions
|
||||||
|
|
||||||
|
Adjust the `create` directive to match the user and group that run the sensor
|
||||||
|
proxy. The example assumes both user and group are `pulse`.
|
||||||
Loading…
Reference in a new issue