ServMon is a configurable service and endpoint monitor with a background agent and web dashboard for status and alerting.
ServMon.sln: modern/default solution (Console/ServMon,WebApp,Shared/WCMS.Common,Shared/WCMS.Common.Tests)legacy/ServMon.Legacy.sln: legacy solution (legacy/ServMonWebCore,legacy/ServMonWeb,legacy/ServMonWeb/ServMonWeb.Tests)Console/ServMon: monitoring agent (net10.0, cross-platform)WebApp: ASP.NET Core MVC UI (net10.0, brandedServMon; project fileServMonWeb.csproj)Shared/WCMS.Common: shared utilities (net10.0)Shared/WCMS.Common.Tests: unit tests (net10.0)legacy/ServMonWebCore: older ASP.NET Core MVC UI (net8.0, legacy, Windows-only)legacy/ServMonWeb: legacy ASP.NET MVC 5 app (.NET Framework 4.8.1, Windows-only)legacy/ServMonWeb/ServMonWeb.Tests: legacy MVC test project (.NET Framework 4.8.1, Windows-only)
Note: Legacy
.NET Frameworkprojects underlegacy/are Windows-only and are not included in the defaultServMon.sln. They remain as read-only references for audit/history purposes.
- .NET 10 SDK (pinned via
global.json) - PostgreSQL (default) or SQL Server for the web app
# Build everything
dotnet build ServMon.sln -c Release
# Run the web app
dotnet run --project WebApp/ServMonWeb.csproj
# Run the console agent
dotnet run --project Console/ServMon/ServMon.csproj
# Run tests
dotnet test ServMon.slnAll configuration paths use relative paths by default and work cross-platform (Windows, macOS, Linux).
Key settings in WebApp/appsettings.json:
| Key | Description |
|---|---|
ServMon:ServicesJsonPath |
Path to the agent's services.json output |
ServMon:ConfigPath |
Path to the agent's config.xml |
ServMon:ExecutablePath |
Path to the agent executable (no .exe extension) |
ServMon:ProcessName |
Process name for agent lifecycle management |
Override any setting via environment variables:
export appSettings__ServMon__ExecutablePath="/custom/path/to/ServMon"For legacy Windows config examples, see docs/migration/legacy-config-examples.md.
WebApp supports two EF Core database providers:
Postgres(default; also acceptsPostgreSql/Npgsql)SqlServer
Configuration keys:
DatabaseProvider:Postgres(default) orSqlServerConnectionStrings:DefaultConnection(SQL Server)ConnectionStrings:PostgresConnection(PostgreSQL)
Example PostgreSQL override (zsh/bash):
DatabaseProvider=Postgres \
ConnectionStrings__PostgresConnection="Host=localhost;Port=5432;Database=servmon;Username=postgres;Password=postgres" \
dotnet run --project WebApp/ServMonWeb.csprojExisting Identity migrations were originally scaffolded for SQL Server. With PostgreSQL as the default provider, generate/apply provider-specific PostgreSQL migrations before production use.
# Apply migrations (default Postgres provider)
dotnet ef database update --project WebApp/ServMonWeb.csproj
# Apply migrations (SQL Server)
DatabaseProvider=SqlServer dotnet ef database update --project WebApp/ServMonWeb.csprojThe project includes a GitHub Actions workflow (.github/workflows/ci.yml) with a matrix build across:
windows-latestubuntu-latestmacos-latest
Steps: restore, build, test, publish artifacts.
Full migration details, gates, and rollback notes: docs/DOTNET10_CROSS_PLATFORM_CHECKLIST.md.