GarNet Dashboard

GP02 Monitor Guide
cwaGP02mon — deploy this one first, on its own. It doesn't depend on cwaSSO3/cwaZOOM/cwaRING existing yet; it'll simply report them as "NotInstalled" until you deploy the GP02 Core Services afterward, and you can watch them turn "Running" here without redeploying cwaGP02mon itself.
Key Settings & Defaults
Deployment-only settings live in appsettings.Deploy.json, sitting alongside the exe — that file is never touched by dotnet publish, so it survives every future republish (see the note at the bottom of this page).
SettingConfig keyDefaultSet via
Shared port & path HttpSys:UrlPrefix / PathBase none — falls back to Kestrel on the local dev port until set appsettings.Deploy.json
Managed services list ManagedServices cwaSSO3, cwaZOOM, cwaRING — each with a Windows Service name + install path appsettings.json (names), appsettings.Deploy.json (real install paths)
Local dev port Urls http://0.0.0.0:5360 appsettings.json
What it does
AppRolePath prefixWindows Service name
cwaGP02mon Watches cwaSSO3/cwaZOOM/cwaRING — reports two separate signals per service: Windows Service status (SCM, via ServiceController) and live app health (an actual HTTP call to that service's own /api/health). Port/path-base for each is read live off that service's own deployed config on disk — never hand-maintained, can't drift. /monitor/ G4L-cwaGP02mon
Deploy steps
  1. Copy C:\Deploy.g4l\mon (the cwaGP02mon subfolder, already carrying a pre-filled appsettings.Deploy.json, + the install script below) onto GP02.
  2. Copy the cwaGP02mon subfolder into C:\Services.g4l\mon on GP02 (so the path matches the script).
  3. Run install-mon.cmd as Administrator — registers cwaGP02mon as a Windows Service and starts it.
  4. Confirm with sc query G4L-cwaGP02mon, or browse to http://gp02.garnet.ca:38080/monitor/ directly.
  5. Test from G4L: point cwaG4LNdash's Gp02Mon:BaseUrl config at that same URL, then check the GP02 Services page here — it should show cwaSSO3/cwaZOOM/cwaRING as "NotInstalled" until you deploy them.
Published self-contained (dotnet publish -r win-x64 --self-contained true) — the .NET 10 runtime is bundled in, so GP02 doesn't need it pre-installed. A framework-dependent publish will fail to start with a ".NET Runtime" error in Event Viewer if the runtime isn't already on the machine.
If code changes later and you republish, dotnet publish will overwrite appsettings.json/appsettings.local.json from the source repo but will never touch appsettings.Deploy.json — it isn't referenced anywhere in the project, so it's untouched by the build and just keeps working across republishes.
The install script also sets a Windows Service Description (via sc description) — sc create's own DisplayName= doesn't populate that field, so without it the Description column in services.msc stays blank.
Install script
Already sitting in C:\Deploy.g4l\mon\install-mon.cmd — copy/paste here only if you need it somewhere else. The uninstall commands at the bottom are commented out (::) on purpose — run them manually, one at a time, not as part of this script.
@echo off
setlocal

:: ============================================================
::  cwaGP02mon Windows Service installer
::  Registers cwaGP02mon as a Windows Service (Automatic start)
::  and starts it.
::
::  Published self-contained (includes the .NET 10 runtime) - no
::  separate .NET install needed on GP02.
::
::  Run this AFTER copying this folder's cwaGP02mon subfolder
::  into C:\Services.g4l\mon on GP02 (so the path below
::  matches). This can be deployed and tested on its own, before
::  cwaSSO3 / cwaZOOM / cwaRING exist - it will just report them
::  as "NotInstalled" until install-services.cmd (in the sibling
::  \svc folder) has been run.
::
::  Must be run from an ELEVATED (Administrator) Command Prompt.
::  Re-running after the service already exists will print
::  "already exists" for sc create - that's expected and safe to
::  ignore. Use "sc delete G4L-cwaGP02mon" first for a clean
::  re-install.
:: ============================================================

echo Registering G4L-cwaGP02mon...
sc create G4L-cwaGP02mon binPath= "C:\Services.g4l\mon\cwaGP02mon\cwaGP02mon.exe" start= auto DisplayName= "G4L-cwaGP02mon (service monitor)"
sc description G4L-cwaGP02mon "GP02 service monitor - reports Windows Service status, app health, and ports in use for G4L-cwaSSO3/G4L-cwaZOOM/G4L-cwaRING."

echo.
echo Starting G4L-cwaGP02mon...
net start G4L-cwaGP02mon

echo.
echo Done. Check status with: sc query G4L-cwaGP02mon
echo Then browse to: http://localhost:38080/monitor/  (on GP02 itself)
pause

:: ============================================================
:: To UNINSTALL cwaGP02mon (run these manually - NOT part of
:: this script):
::
::   net stop G4L-cwaGP02mon
::   sc delete G4L-cwaGP02mon
:: ============================================================