535 lines
21 KiB
Markdown
535 lines
21 KiB
Markdown
# Session Log — 2026-04-19
|
|
|
|
## User
|
|
- **User:** Mike Swanson (mike)
|
|
- **Machine:** DESKTOP-0O8A1RL
|
|
- **Role:** admin
|
|
|
|
---
|
|
|
|
## Session Summary
|
|
|
|
This session covered two main areas: (1) completing drill-down navigation across the entire GuruRMM dashboard, and (2) beginning setup of Pluto (Windows build VM on Jupiter) to enable automated Windows agent builds.
|
|
|
|
---
|
|
|
|
## Accomplishments
|
|
|
|
### 1. Dashboard — Full Drill-Down Navigation
|
|
|
|
Added clickable navigation links throughout all dashboard pages so the Client→Site→Agent hierarchy is fully navigable in both directions (up only, no circular refs).
|
|
|
|
**Files changed:**
|
|
- `dashboard/src/pages/AgentDetail.tsx` — `site_name` and `client_name` now link to `/sites/:id` and `/clients/:id`
|
|
- `dashboard/src/pages/SiteDetail.tsx` — Fixed breadcrumb: client name now links to `/clients/:id` (was linking to `/clients` list)
|
|
- `dashboard/src/pages/Agents.tsx` — Client group headers link to `/clients/:id`, site sub-headers link to `/sites/:id` using first agent's IDs
|
|
- `dashboard/src/pages/Commands.tsx` — Agent ID now links to `/agents/:id`; added `Link` import from react-router-dom
|
|
|
|
**Deploy:** Committed → pushed to Gitea → pulled on gururmm server → `npm run build` → `sudo cp -r dist/* /var/www/gururmm/dashboard/`
|
|
|
|
Commit: `6fd3380`
|
|
|
|
### 2. Agent — Auto-Install on First Run
|
|
|
|
**Problem:** User downloaded site-configured agent exe, ran it directly, got:
|
|
```
|
|
Error: Failed to read config file: "agent.toml"
|
|
```
|
|
|
|
**Root cause:** Default command (`run`) immediately loads `agent.toml`. Embedded site code trailer is only read during `install` subcommand. So running the exe bare-handed fails if no config exists.
|
|
|
|
**Fix (`agent/src/main.rs`):** Added pre-dispatch logic in `main()`:
|
|
- If no subcommand given AND config file does not exist:
|
|
- If embedded site code found → log "auto-installing" and dispatch to `Install`
|
|
- If no embedded code found → log "prompting for site code" and dispatch to `Install`
|
|
- `install_service()` already handles both cases (silent embed or interactive prompt)
|
|
- If config exists → dispatch to `Run` as before (existing installed service path)
|
|
|
|
Commit: `6a5bd8a`
|
|
|
|
**Still needed:** Build the updated Windows agent binary and upload to `/var/www/downloads/gururmm-agent-windows-amd64-latest.exe` on 172.16.3.30.
|
|
|
|
### 3. Pluto Build Server — Partial Setup
|
|
|
|
New Windows Server VM on Jupiter. Named **Pluto** (not Neptune — Neptune is a different existing server).
|
|
|
|
**Assigned static IP:** 172.16.3.36 (was DHCP 172.16.1.64 during setup session)
|
|
|
|
**Setup script created:** `scripts/setup-build-server.ps1`
|
|
- Enables OpenSSH Server (Windows Capability)
|
|
- Opens firewall port 22
|
|
- Writes `administrators_authorized_keys` with ACG-5070 workstation key
|
|
- Hardens sshd_config (pubkey only, no password)
|
|
- Installs Chocolatey + Rust toolchain
|
|
|
|
**Problem encountered:** `Add-WindowsCapability` failed with `0x800f0950` — VM can't reach Windows Update (no WSUS/internet for feature downloads). DNS was pointing to 172.16.3.50 (invalid), breaking internet access.
|
|
|
|
**Resolution attempted:** Switch pfSense DHCP to use pfSense (172.16.0.1) as DNS instead of 172.16.3.50. pfSense web UI blocked by Chrome self-signed cert; SSH to pfSense timed out (no key auth configured). **Pending: Mike needs to make DNS change manually in pfSense.**
|
|
|
|
**Workaround script provided** (manual install of OpenSSH via Win32-OpenSSH GitHub release — bypasses Windows Update requirement). Not yet confirmed successful.
|
|
|
|
**Rust:** Successfully installed on Pluto (stable 1.95.0, x86_64-pc-windows-msvc).
|
|
|
|
---
|
|
|
|
## Infrastructure
|
|
|
|
| Host | IP | Role |
|
|
|------|----|------|
|
|
| gururmm / gururmm-build | 172.16.3.30 | GuruRMM server, MariaDB, nginx |
|
|
| Pluto | 172.16.3.36 (static, pending NIC config) | Windows build VM for agent binaries |
|
|
| pfSense | 172.16.0.1 | Office firewall/router/DHCP |
|
|
| Gitea | 172.16.3.20 (SSH port 2222) | git.azcomputerguru.com |
|
|
|
|
### Server paths (172.16.3.30)
|
|
- Repo: `/home/guru/gururmm` (SSH as `guru`, NOT `mike`)
|
|
- Dashboard web root: `/var/www/gururmm/dashboard/`
|
|
- Agent downloads: `/var/www/downloads/gururmm-agent-windows-amd64-latest.exe`
|
|
|
|
---
|
|
|
|
## Credentials
|
|
|
|
### GuruRMM Server (172.16.3.30)
|
|
- SSH: `guru` / `Gptf*77ttb123!@#-rmm`
|
|
- MariaDB: `claudetools` / `CT_e8fcd5a3952030a79ed6debae6c954ed`
|
|
- PostgreSQL (gururmm): `gururmm` / `43617ebf7eb242e814ca9988cc4df5ad`
|
|
- RMM API admin: `claude-api@azcomputerguru.com` / `ClaudeAPI2026!@#`
|
|
|
|
### pfSense (172.16.0.1)
|
|
- Web UI: `admin` / `r3tr0gradE99!!`
|
|
- SSH port: 2248
|
|
- Tailscale IPs: 100.79.69.82, 100.119.153.74
|
|
|
|
### Gitea (git.azcomputerguru.com)
|
|
- Username: `azcomputerguru`
|
|
- Password: `Gptf*77ttb123!@#-git`
|
|
- API token: `9b1da4b79a38ef782268341d25a4b6880572063f`
|
|
|
|
### Pluto Build Server (172.16.3.36)
|
|
- SSH: `Administrator` (key auth — ACG-5070 workstation key)
|
|
- Authorized key: `ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINXR2BOcFAlOPuB7OYOKfOZDNd3u1tCt/IINRH9beFyB guru@DESKTOP-0O8A1RL`
|
|
- Rust: stable 1.95.0 x86_64-pc-windows-msvc installed
|
|
|
|
---
|
|
|
|
## Key Files Changed
|
|
|
|
| File | Change |
|
|
|------|--------|
|
|
| `dashboard/src/pages/AgentDetail.tsx` | site/client names → clickable Links |
|
|
| `dashboard/src/pages/SiteDetail.tsx` | breadcrumb client link → `/clients/:id` |
|
|
| `dashboard/src/pages/Agents.tsx` | group headers → clickable Links |
|
|
| `dashboard/src/pages/Commands.tsx` | agent ID → Link to `/agents/:id` |
|
|
| `agent/src/main.rs` | auto-install on first run, prompt fallback |
|
|
| `scripts/setup-build-server.ps1` | Pluto build server setup script |
|
|
|
|
---
|
|
|
|
## Pending / Next Steps
|
|
|
|
1. **pfSense DNS fix** — Change DHCP DNS from 172.16.3.50 to 172.16.0.1 in pfSense web UI. Mike to do manually.
|
|
|
|
2. **Pluto NIC config** — Set static IP 172.16.3.36 on Pluto after DNS is fixed and OpenSSH finishes installing.
|
|
|
|
3. **Pluto OpenSSH** — Retry `Add-WindowsCapability` after DNS fix, OR use Win32-OpenSSH manual install:
|
|
```powershell
|
|
$url = "https://github.com/PowerShell/Win32-OpenSSH/releases/download/v9.5.0.0p1-Beta/OpenSSH-Win64.zip"
|
|
$zip = "$env:TEMP\openssh.zip"
|
|
Invoke-WebRequest -Uri $url -OutFile $zip
|
|
Expand-Archive -Path $zip -DestinationPath "C:\Program Files\" -Force
|
|
Rename-Item "C:\Program Files\OpenSSH-Win64" "C:\Program Files\OpenSSH"
|
|
& "C:\Program Files\OpenSSH\install-sshd.ps1"
|
|
Start-Service sshd; Set-Service sshd -StartupType Automatic
|
|
```
|
|
|
|
4. **Build Windows agent on Pluto** once SSH access confirmed:
|
|
```powershell
|
|
cd C:\gururmm\agent
|
|
cargo build --release --target x86_64-pc-windows-msvc
|
|
```
|
|
Then SCP to server:
|
|
```bash
|
|
scp agent/target/x86_64-pc-windows-msvc/release/gururmm-agent.exe guru@172.16.3.30:/var/www/downloads/gururmm-agent-windows-amd64-latest.exe
|
|
```
|
|
|
|
5. **Test agent on Pluto** — Download from RMM console, run elevated, confirm auto-install kicks in and agent appears online.
|
|
|
|
6. **Ongoing backlog** (from previous sessions):
|
|
- Deploy session manager to SAGE-SQL (Dataforth)
|
|
- Howard Gitea account setup
|
|
- Len's Auto Brokerage — deploy GuruRMM to 10 endpoints
|
|
- desertrat.com — DMARC p=reject + SPF hardening
|
|
- jparkinsonaz.com certbot retry
|
|
|
|
---
|
|
|
|
## Update: ~17:30 — Pluto Build Server Continued
|
|
|
|
### Progress
|
|
|
|
**SSH access confirmed working:**
|
|
- Key: `~/.ssh/id_ed25519` (ACG-5070 workstation)
|
|
- Host: `Administrator@172.16.1.64` (DHCP, pending static IP 172.16.3.36)
|
|
|
|
**sshd auto-start fixed:**
|
|
```powershell
|
|
Set-Service sshd -StartupType Automatic
|
|
Set-Service ssh-agent -StartupType Automatic
|
|
```
|
|
|
|
**Git installed:** v2.47.1.windows.2 (direct installer, not Chocolatey — Choco blocked by .NET 4.8 issue)
|
|
|
|
**Repo cloned:**
|
|
```
|
|
git clone https://azcomputerguru:<token>@git.azcomputerguru.com/azcomputerguru/gururmm.git C:\gururmm
|
|
```
|
|
(credential store warning is harmless — clone succeeded)
|
|
|
|
**Rust present:** `C:\Users\Administrator\.cargo\bin\rustup.exe` — stable 1.95.0
|
|
|
|
**Build failed — missing MSVC linker:**
|
|
```
|
|
error: linker `link.exe` not found
|
|
note: please ensure Visual Studio 2017 or later, or Build Tools for Visual Studio were installed with the Visual C++ option
|
|
```
|
|
|
|
**Fix in progress — installing VS Build Tools (C++ workload):**
|
|
```powershell
|
|
vs_buildtools.exe --quiet --wait --norestart --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended
|
|
```
|
|
Background task ID: `br51d9p1g` — **still running at time of /save**
|
|
|
|
### Next Steps (immediate)
|
|
1. Wait for VS Build Tools to finish (5-10 min)
|
|
2. Retry: `cargo build --release` in `C:\gururmm\agent`
|
|
3. SCP output to gururmm server:
|
|
```
|
|
scp C:\gururmm\agent\target\release\gururmm-agent.exe guru@172.16.3.30:/var/www/downloads/gururmm-agent-windows-amd64-latest.exe
|
|
```
|
|
4. Test: download fresh agent from RMM console on Pluto, run elevated — should auto-install
|
|
|
|
### SSH one-liners for future sessions
|
|
```bash
|
|
# Test connection
|
|
ssh -i ~/.ssh/id_ed25519 Administrator@172.16.1.64 "hostname"
|
|
|
|
# Run build
|
|
ssh -i ~/.ssh/id_ed25519 Administrator@172.16.1.64 "cmd /c \"cd C:\\gururmm\\agent && set PATH=%PATH%;C:\\Users\\Administrator\\.cargo\\bin && cargo build --release 2>&1\""
|
|
```
|
|
|
|
### pfSense DNS — still pending
|
|
DHCP DNS still pointing to 172.16.3.50 (invalid). Needs manual change in pfSense web UI:
|
|
**Services → DHCP Server → DNS Servers → set to 172.16.0.1**
|
|
This will allow Pluto and other VMs to resolve internet names properly after lease renewal.
|
|
|
|
---
|
|
|
|
## Update: ~19:30 — Bug Filing, Build Chain Verification, Pluto Static IP
|
|
|
|
### Accomplishments
|
|
|
|
#### 1. Filed 4 Bugs on Gitea (via internal API — external blocked by Cloudflare)
|
|
|
|
Used `http://172.16.3.20:3000/api/v1/` (internal Gitea) to bypass Cloudflare challenge page.
|
|
|
|
| Issue | Title |
|
|
|-------|-------|
|
|
| #2 | bug: auto-update loop downgrades freshly enrolled agents |
|
|
| #3 | bug: Windows service registration lost after auto-update restart |
|
|
| #4 | bug: pending-update.json not cleaned up after failed update |
|
|
| #5 | bug: sshd on Pluto build VM does not persist across reboots |
|
|
|
|
#### 2. Build Chain Verified End-to-End
|
|
|
|
**Webhook routing confirmed:**
|
|
- Gitea webhook: `id=1 active=true url=http://172.16.3.30/webhook/build events=push`
|
|
- nginx proxies `/webhook/` → `127.0.0.1:9000`
|
|
- `gururmm-webhook.service` (python3 script) handles requests and spawns `build-agents.sh`
|
|
|
|
**Build chain tested — triggered via manual POST:**
|
|
```bash
|
|
curl -X POST http://127.0.0.1:9000/webhook/build -H 'Content-Type: application/json' -d '{"ref":"refs/heads/main"}'
|
|
```
|
|
|
|
**Full successful run (v0.6.1):**
|
|
```
|
|
2026-04-19 19:22:02 - === Starting agent build ===
|
|
2026-04-19 19:23:57 - Deploying Linux agent...
|
|
2026-04-19 19:23:57 - Deploying Windows agent...
|
|
2026-04-19 19:23:57 - Signing Windows agent v0.6.1 ...
|
|
[INFO] signing /var/www/gururmm/downloads/gururmm-agent-windows-amd64-0.6.1.exe ...
|
|
Adding Authenticode signature to /var/www/gururmm/downloads/gururmm-agent-windows-amd64-0.6.1.exe
|
|
[OK] signed: /var/www/gururmm/downloads/gururmm-agent-windows-amd64-0.6.1.exe
|
|
2026-04-19 19:24:01 - Windows agent signed OK
|
|
2026-04-19 19:24:01 - === Build complete: v0.6.1 ===
|
|
```
|
|
|
|
**Signing confirmed working**: Azure Trusted Signing via jsign, SP creds in `/etc/gururmm-signing.env`
|
|
|
|
**Symlinks correct after build:**
|
|
```
|
|
gururmm-agent-linux-amd64-latest -> gururmm-agent-linux-amd64-0.6.1
|
|
gururmm-agent-windows-amd64-latest.exe -> gururmm-agent-windows-amd64-0.6.1.exe
|
|
```
|
|
|
|
**Note**: Build ran twice concurrently (Gitea webhook + my manual trigger). Fixed by adding build lock to webhook handler.
|
|
|
|
#### 3. Webhook Handler — Build Lock Added
|
|
|
|
Updated `/opt/gururmm/webhook-handler.py` to prevent concurrent builds:
|
|
- Writes PID to `/var/run/gururmm-build.lock` when spawning build
|
|
- Checks if lock PID is alive before allowing new build; cleans stale locks
|
|
- Returns `Build already in progress, skipped` if another build is running
|
|
- Restarted `gururmm-webhook.service` to apply
|
|
|
|
#### 4. pfSense DNS Fix — CONFIRMED DONE
|
|
|
|
Mike manually changed pfSense DHCP DNS from 172.16.3.50 → 172.16.0.1.
|
|
|
|
Confirmed on Pluto:
|
|
```
|
|
DNS Servers: 172.16.0.1
|
|
8.8.8.8
|
|
1.1.1.1
|
|
```
|
|
|
|
#### 5. Pluto Static IP — SET AND CONFIRMED
|
|
|
|
**Method**: Wrote `C:\setip.cmd`, created scheduled task (`SetStaticIP`) to run as SYSTEM, forced it to fire.
|
|
|
|
**Final Pluto NIC config:**
|
|
- IP: `172.16.3.36` (static, DHCP disabled)
|
|
- Subnet: `255.255.252.0`
|
|
- Gateway: `172.16.0.1`
|
|
- DNS: `172.16.0.1`, `8.8.8.8`, `1.1.1.1`
|
|
|
|
**SSH one-liner (updated):**
|
|
```bash
|
|
ssh -i ~/.ssh/id_ed25519 Administrator@172.16.3.36 "hostname"
|
|
```
|
|
|
|
Old DHCP address (172.16.1.64) is no longer valid.
|
|
|
|
---
|
|
|
|
### Credentials (unchanged from earlier sections)
|
|
|
|
See earlier credential block above — no new credentials this update.
|
|
|
|
---
|
|
|
|
### Pending / Next Steps (updated)
|
|
|
|
1. **Agent bug fixes** — 4 bugs filed (#2-#5). Need code fixes in agent/src:
|
|
- `#2`: Skip auto-update if `server_version <= current_version`
|
|
- `#3`: Re-register Windows service after binary replacement
|
|
- `#4`: Cleanup `pending-update.json` on failure + validate at startup
|
|
|
|
2. **Test fresh agent download on Pluto** — download site-configured agent from RMM console, run elevated, confirm auto-install and dashboard enrollment.
|
|
|
|
3. **Version bump** — Cargo.toml still at 0.6.1. Bump to 0.6.2 when bug fixes are committed so the new binary supersedes the current one on endpoints.
|
|
|
|
4. **Ongoing backlog:**
|
|
- Deploy session manager to SAGE-SQL (Dataforth)
|
|
- Howard Gitea account setup
|
|
- Len's Auto Brokerage — deploy GuruRMM to 10 endpoints
|
|
- desertrat.com — DMARC p=reject + SPF hardening
|
|
- jparkinsonaz.com certbot retry
|
|
|
|
---
|
|
|
|
### Infrastructure (final state)
|
|
|
|
| Host | IP | Role |
|
|
|------|----|------|
|
|
| gururmm | 172.16.3.30 | GuruRMM server, MariaDB, nginx |
|
|
| Pluto | **172.16.3.36** (static — confirmed) | Windows build VM |
|
|
| pfSense | 172.16.0.1 | Office firewall/router/DHCP (DNS fixed) |
|
|
| Gitea | 172.16.3.20 (SSH port 2222) | git.azcomputerguru.com |
|
|
|
|
**Server paths (172.16.3.30):**
|
|
- Repo: `/home/guru/gururmm`
|
|
- Dashboard: `/var/www/gururmm/dashboard/`
|
|
- Downloads: `/var/www/gururmm/downloads/`
|
|
- Build log: `/var/log/gururmm-build.log`
|
|
- Build script: `/opt/gururmm/build-agents.sh`
|
|
- Sign script: `/opt/gururmm/sign-windows.sh`
|
|
- Signing env: `/etc/gururmm-signing.env` (root-only)
|
|
|
|
---
|
|
|
|
## Update: ~01:00 — Bug Fixes, v0.6.2 Build, Pluto Build Integration, Status Page
|
|
|
|
### Accomplishments
|
|
|
|
#### 1. shadcn/ui Post-Review Bug Fixes (3 bugs)
|
|
|
|
Three high-severity bugs found by code review after shadcn/ui migration:
|
|
|
|
**a) Toaster hardcoded dark theme** (`dashboard/src/components/Toaster.tsx`)
|
|
- Was: `<Sonner theme="dark" ...>`
|
|
- Fix: Read from `useTheme()` context, resolve "system" via `window.matchMedia`
|
|
|
|
**b) Badge missing `error` variant** (`dashboard/src/components/Badge.tsx`)
|
|
- Added `error: "border-transparent bg-red-500/15 text-red-600 dark:text-red-400"` variant
|
|
- Updated `Agents.tsx` to use `variant="error"` (was `variant="destructive"`) for agent error status
|
|
|
|
**c) Stale modal form state on re-open** (`Sites.tsx`, `Clients.tsx`)
|
|
- Added `key={editingClient?.id ?? "new"}` / `key={editingSite?.id ?? "new"}` to force modal remount when target changes
|
|
|
|
#### 2. BUG-006: Temperature Sensors Never Collected
|
|
|
|
Filed as new Gitea issue covering:
|
|
- CPU temp collection (`sysinfo::Components`)
|
|
- GPU temp collection (WMI/nvidia-smi/rocm-smi)
|
|
- Cross-platform (Windows + Linux)
|
|
- Agent side: new `TemperatureReading` struct, wired into `SystemMetrics`
|
|
- Dashboard side: new temperature section in AgentDetail
|
|
|
|
Also documented in `docs/FEATURE_ROADMAP.md` Known Bugs section.
|
|
|
|
#### 3. Windows .old Binary Cleanup — No-Reboot Solution
|
|
|
|
**User rejected** original "defer to next startup" approach:
|
|
> "Waiting for a reboot is not a valid solution to the update issue. Servers may go months or years between reboots."
|
|
|
|
**Final solution** (`agent/src/updater/mod.rs`):
|
|
1. If existing `.old` is locked, rename to timestamped tombstone (`.old.YYYYMMDDTHHMMSS`) — unblocks the current update without waiting for a reboot
|
|
2. Spawn detached `cmd.exe /c timeout /t 30 && for %f in (...\*.old*) do del /f /q "%f"` with `CREATE_NO_WINDOW` flag — sweeps all `.old*` files ~30s after service restart
|
|
|
|
```rust
|
|
#[cfg(windows)]
|
|
use std::os::windows::process::CommandExt;
|
|
// CREATE_NO_WINDOW = 0x08000000
|
|
```
|
|
|
|
Commit: `e93b56f`
|
|
|
|
#### 4. v0.6.2 Build — Completed
|
|
|
|
**Version bump:** `agent/Cargo.toml` 0.6.1 → 0.6.2 (commit `f827ab4`)
|
|
|
|
**Build triggered** via SSH to `172.16.3.30`:
|
|
```bash
|
|
sudo bash /opt/gururmm/build-agents.sh 2>&1 | tee /tmp/gururmm-build.log &
|
|
```
|
|
|
|
**Result:**
|
|
```
|
|
2026-04-20 00:32:13 - === Build complete: v0.6.2 ===
|
|
[OK] signed: /var/www/gururmm/downloads/gururmm-agent-windows-amd64-0.6.2.exe
|
|
```
|
|
|
|
**Note:** v0.6.2 agent was built with MinGW (cross-compile) not MSVC. Pluto integration came after this build.
|
|
|
|
#### 5. Pluto Build Integration — build-agents.sh Updated
|
|
|
|
**Problem:** `build-agents.sh` was using MinGW cross-compile for Windows, never routing to Pluto.
|
|
|
|
**Changes made:**
|
|
|
|
**a) Authorized RMM server key on Pluto:**
|
|
- RMM server key: `ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKSqf2/phEXUK8vd5GhMIDTEGSk0LvYk92sRdNiRrjKi guru@gururmm-build`
|
|
- Added to `C:\ProgramData\ssh\administrators_authorized_keys` on Pluto
|
|
- Tested: `ssh -o StrictHostKeyChecking=no Administrator@172.16.3.36 "hostname"` → `PLUTO` ✓
|
|
|
|
**b) Updated `/opt/gururmm/build-agents.sh`:**
|
|
- Replaced `cargo build --release --target x86_64-pc-windows-gnu` (MinGW) with:
|
|
- SSH to Pluto → `git fetch && git reset --hard origin/main && cargo build --release` (MSVC)
|
|
- SCP `.exe` back to `/tmp/gururmm-agent-windows-$VERSION.exe`
|
|
- Deploy, sign, sha256 as before
|
|
- Key variable: `PLUTO="Administrator@172.16.3.36"`
|
|
- Cargo path on Pluto: `C:\Users\Administrator\.cargo\bin\cargo`
|
|
|
|
**Next push to main** will produce a native MSVC Windows binary.
|
|
|
|
#### 6. Status Page — rmm.azcomputerguru.com/status
|
|
|
|
Built a public system status page (no auth required).
|
|
|
|
**Server changes:**
|
|
- New `server/src/status.rs` — `GET /status` handler:
|
|
- DB liveness check (`SELECT 1`)
|
|
- Agent counts from DB (`total`, `online`, `offline`, `error`)
|
|
- WebSocket connection count from `state.agents.read().await.count()`
|
|
- Uptime from `state.startup_time.elapsed().as_secs()`
|
|
- Returns `version` from `env!("CARGO_PKG_VERSION")`
|
|
- Added `startup_time: std::time::Instant` to `AppState`
|
|
- Registered as public route in `build_router()` (outside `/api` nest, no auth)
|
|
|
|
**Dashboard changes:**
|
|
- `dashboard/src/api/client.ts` — Added `SystemStatus` interface + `statusApi.get()`
|
|
- `dashboard/src/pages/Status.tsx` — New public page:
|
|
- Overall health banner (green/yellow/red)
|
|
- Per-component rows: API Server, Database, Agent Fleet, WebSocket, Dashboard
|
|
- Agent breakdown grid (online/offline/error counts)
|
|
- Auto-refresh every 30s, manual refresh button
|
|
- `dashboard/src/App.tsx` — `/status` route added as bare route (no ProtectedRoute/PublicRoute)
|
|
|
|
**nginx fix:** Added `location /status { proxy_pass http://127.0.0.1:3001; }` to `/etc/nginx/sites-enabled/gururmm` — was missing, causing "Service Disruption" error on first load.
|
|
|
|
**Server binary redeployed:** `gururmm-server` rebuilt and swapped (stop service → copy → start):
|
|
```
|
|
/opt/gururmm/gururmm-server.backup.20260420-005859 ← backup before swap
|
|
```
|
|
|
|
**Build issue fixed:** `npm install` was needed on build server — shadcn/ui deps (`class-variance-authority`, `@radix-ui/react-slot`) were missing, causing 86 TypeScript errors. Fixed by running `npm install` in `/home/guru/gururmm/dashboard/`.
|
|
|
|
**Live verification:**
|
|
```json
|
|
{
|
|
"status": "ok",
|
|
"version": "0.2.0",
|
|
"uptime_seconds": 268,
|
|
"components": {
|
|
"agents": { "total": 34, "online": 26, "offline": 8, "error": 0 },
|
|
"websocket": { "connected": 25 }
|
|
}
|
|
}
|
|
```
|
|
|
|
Commit: `6e54f72`
|
|
|
|
---
|
|
|
|
### Key Commits (this update)
|
|
|
|
| SHA | Description |
|
|
|-----|-------------|
|
|
| `5872a72` | docs: add BUG-001 temperature sensor collection gap |
|
|
| `e93b56f` | fix: Windows .old binary cleanup — tombstone + detached sweeper |
|
|
| `f827ab4` | chore: bump agent to v0.6.2 |
|
|
| `6e54f72` | feat: add public system status page at /status |
|
|
|
|
---
|
|
|
|
### Infrastructure Changes (this update)
|
|
|
|
- **Pluto authorized key added:** `guru@gururmm-build` key now in `administrators_authorized_keys`
|
|
- **`/opt/gururmm/build-agents.sh`** on `172.16.3.30`: now SSHes to Pluto for Windows MSVC build
|
|
- **`/etc/nginx/sites-enabled/gururmm`**: added `location /status` proxy rule
|
|
- **`/opt/gururmm/gururmm-server`**: redeployed (v0.2.0 + status endpoint)
|
|
- **`/var/www/gururmm/dashboard/`**: redeployed with Status page
|
|
|
|
**Services on 172.16.3.30:**
|
|
- `gururmm-server.service` — RMM API + WebSocket (port 3001)
|
|
- `gururmm-agent.service` — local monitoring agent
|
|
- `gururmm-webhook.service` — build webhook handler (port 9000)
|
|
|
|
---
|
|
|
|
### Pending / Next Steps (updated)
|
|
|
|
1. **Verify status page after nginx fix** — confirm `rmm.azcomputerguru.com/status` shows green after browser refresh
|
|
2. **First MSVC build via Pluto** — next push to main will trigger native Windows binary build via Pluto
|
|
3. **Server version alignment** — server shows `v0.2.0`, agent is `v0.6.2`. Consider aligning in `server/Cargo.toml`
|
|
4. **BUG-006: Temperature collection** — implement `sysinfo::Components` in agent
|
|
5. **Windows agent auto-update to 0.6.2** — agents will self-update on next check-in (includes `.old` fix + RequestLogUpload)
|
|
6. **Ongoing backlog:**
|
|
- Deploy session manager to SAGE-SQL (Dataforth)
|
|
- Howard Gitea account setup
|
|
- Len's Auto Brokerage — deploy GuruRMM to 10 endpoints
|
|
- desertrat.com — DMARC p=reject + SPF hardening
|
|
- jparkinsonaz.com certbot retry
|