Files
jmon/.copilot-instructions.md
James Getrost 127b3ad5bf Initial commit: JMon cross-platform monitoring system
- gRPC client-server metrics collection
- PeriodicTimer-based 5-second sampling
- Delta encoding with configurable thresholds
- Queue/retry mechanism for resilience
- ProcessId tracking for duplicate detection
- Server-side state reconstruction
- Native AOT compilation support
- Docker/Podman containerization
- PostgreSQL + TimescaleDB persistence layer
2026-01-05 23:23:55 -06:00

61 lines
2.0 KiB
Markdown

# JMon Project Guidelines
## Package Management
**IMPORTANT**: Always use `dotnet` CLI commands to manage NuGet packages. Do NOT directly edit `.csproj` files for package management.
Use these commands:
- `dotnet add package <name>` - Add a package
- `dotnet add package <name> --version <version>` - Add specific version
- `dotnet remove package <name>` - Remove a package
- `dotnet nuget add source <url>` - Add NuGet source
- `dotnet nuget remove source <name>` - Remove NuGet source
This ensures:
- Package versions are verified to exist before adding
- Compatibility checks are performed
- Project structure remains clean and consistent
## Architecture
- **Agent**: Worker Service collecting metrics via `/proc` (Linux) or platform APIs
- **Server**: ASP.NET Core gRPC service receiving delta metrics
- **Protocol**: gRPC with Protobuf for binary efficiency
- **Communication**: Unary RPC pattern (request-response), agent initiates
- **Metrics**: CPU%, memory, swap, disk usage, IP address, HWID with delta encoding (~50% bandwidth reduction)
- **Response Commands**: ACK (normal) or SYNC (force full resync)
## Code Style
- C# 12+ features (records, nullable references)
- `#nullable enable` required
- Async/await throughout
- ILogger for all logging
- Use DateTimeOffset for all timestamps (UTC)
## Testing & Deployment
### Agent Debug Mode
To test the agent without sending to a server:
```bash
cd JMonAgent && dotnet run -- --DEBUG=true
```
This prints formatted metrics to console every 5 seconds instead of sending them via gRPC.
### Docker/Podman Setup
Run the full stack with:
```bash
podman compose up --build
```
This starts:
- PostgreSQL 16 with TimescaleDB on localhost:5432
- JMonServer gRPC on localhost:5001
- Metrics automatically persisted to DB with 90-day retention
- Data compressed after 7 days
Connection string: `Host=localhost;Port=5432;Database=jmon;Username=jmon;Password=jmon_dev_password`
- Suppress SignalR warnings by removing unused packages from project files
- Both projects should build with 0 errors