Claude Agent
8905681c8c
fix: NaN-Metriken, Chart-Zeitachse und erweiterte Gerätedetails
...
Backend:
- AgentGrpcService: JSONB-Serialisierung auf camelCase umgestellt
(JsonSerializer.SerializeToElement mit CamelCase-Options)
→ behebt NaN bei CPU, RAM, Disk-Anzeige in der Detailseite
- AgentGrpcService: Result-JSONB explizit camelCase (exitCode, stdout, stderr, success)
→ behebt fehlende Befehlsergebnisse im Frontend
- AgentGrpcService: SignalR-Payload enthält nun Disks und NetworkInterfaces
- Program.cs: SignalR JsonProtocol auf CamelCase konfiguriert
Agent (Go):
- Heartbeat sendet nun NetworkInterfaces aus dem Collector
→ Netzwerkschnittstellen werden im Frontend angezeigt
Frontend:
- useAgentSignalR: onLiveMetrics-Callback für direktes Live-Update
(kein API-Roundtrip mehr, < 50ms Latenz)
- AgentDetailPage komplett überarbeitet:
- Geräteinformationen-Karte (IP, MAC, OS, Version, Enrolled-At, Last-Seen)
- Live-Indikator auf MetricCards (grüner Puls-Punkt bei SignalR-Verbindung)
- NaN-Schutz für alle berechneten Werte (safePercent, memPercent)
- Chart-Reihenfolge umgekehrt: älteste links, neueste rechts
- X-Achse: adaptives Intervall verhindert Label-Überlappung
- Netzwerkschnittstellen-Tabelle mit Traffic (RX/TX)
- Festplatten mit Fortschrittsbalken + Filesystem-Typ
- Strg+Enter für schnelle Befehlsausführung
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-24 13:46:38 +01:00
Claude Agent
b45a9f3bdc
fix: JSON-Serialisierung, API-Routing und Dark-Mode Dropdowns
...
Backend:
- Program.cs: JsonNamingPolicy.CamelCase + JsonStringEnumConverter global aktiviert
→ behebt alle Frontend-API-Calls (PascalCase statt camelCase, Integer statt String-Enums)
- AgentsController: GetMetrics nutzt jetzt 'limit' Parameter (statt 'hours')
→ Frontend-Aufruf ?limit=50 wird korrekt ausgewertet
- AgentsController: GetAll gibt MacAddress und EnrolledAt zurück
- TasksController: GET /tasks?agentId= Endpoint hinzugefügt
→ behebt Routing-Mismatch (Frontend nutzte Query-Parameter, Backend hatte Route-Parameter)
Frontend:
- SoftwarePage.tsx: Alle hardcodierten Hellmodus-Farben durch Theme-Variablen ersetzt
(bg-white/gray → bg-card/muted, text-gray-* → text-foreground/muted-foreground)
- index.css: select option Stile für Dark-Mode Sichtbarkeit hinzugefügt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-24 13:30:30 +01:00
Claude Agent
d7b618f02d
feat: Windows Service Wrapper für NexusRMM Agent
...
- winsvc package mit Build-Tag-basierter plattformspezifischer Implementierung:
- service_windows.go: svc.Handler + Install/Uninstall/Start/Stop via windows/svc/mgr
- service_stub.go: Stub-Implementierungen für nicht-Windows Builds
- main.go refaktoriert:
- os.Executable() für absoluten Config-Pfad (Service-Modus: CWD = C:\Windows\System32)
- Kommandozeilen-Args: install / uninstall / start / stop
- winsvc.IsWindowsService() Erkennung → Service-Modus oder Konsolen-Modus
- Agent-Loop als makeRunFn() extrahiert (wiederverwendbar für beide Modi)
- install-service.ps1: Convenience-Skript zum Bauen, Installieren und Starten
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-20 10:24:00 +01:00
Claude Agent
c401ea8f29
feat: Phase 9 — Offline Detection, API Key Auth, Agent Self-Update
...
Offline Detection (9.1):
- AgentOfflineDetectorService: BackgroundService, prüft alle 60s
ob Agents seit >5 min kein Heartbeat hatten → Status=Offline
- IServiceScopeFactory für korrektes Scoped-DI im Singleton
- SignalR-Push AgentStatusChanged bei jeder Offline-Markierung
API Key Auth (9.2):
- ApiKeyMiddleware: prüft X-Api-Key Header gegen Security:ApiKey Config
- Deaktiviert wenn ApiKey leer (Dev-Modus), Swagger/hubs bypassed
- Frontend: getApiKey() aus localStorage, automatisch in allen Requests
- Settings-Modal in Sidebar: API-Key eingeben + maskiert anzeigen
Agent Self-Update (9.3):
- internal/updater/updater.go: CheckForUpdate() + Update()
Download, SHA256-Verify, Windows Batch-Neustart / Linux Shell-Neustart
- AgentReleasesController: GET /api/v1/agent/releases/latest,
GET /api/v1/agent/releases/download/{platform}
- AgentReleaseOptions: LatestVersion, ReleasePath, Checksum in appsettings
- executeCommand() erhält cfg *Config statt agentID string
(für ServerAddress-Ableitung im UpdateAgent-Case)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 15:41:24 +01:00
Claude Agent
e55640d6a7
fix: Enrollment-Duplikate, IPv6-Adresse, Agent-Status
...
- Backend: Enroll-Upsert via MAC-Adresse (kein Duplikat bei Neustart)
HeartbeatInterval auf 30s reduziert
- Go collector: IPv4 bevorzugen, Loopback/Teredo/ISATAP überspringen,
Link-Local IPv6 ignorieren
- Go main.go: Enrollment nimmt beste IPv4-Schnittstelle statt Networks[0]
2026-03-19 15:29:11 +01:00
Claude Agent
544d97b1ff
fix: dev-start.ps1 ErrorActionPreference auf Continue setzen (dotnet stderr Warnungen kein Fehler)
2026-03-19 15:07:01 +01:00
Claude Agent
22b05bd352
fix: dev-start.ps1 Syntax-Fehler beheben (Backtick-Continuation + Unicode-Zeichen entfernt)
2026-03-19 15:05:28 +01:00
Claude Agent
4c40e88718
feat: Phase 8 — Network Discovery + Windows Dev-Setup-Skripte
...
Network Discovery:
- Go Agent: internal/scanner/scanner.go mit TCP-Sweep (Port 445/80/22/443),
ARP-Tabellen-Parser (Windows: arp -a, Linux: /proc/net/arp), Reverse-DNS,
50 gleichzeitige Goroutines mit Semaphore
- Go Agent main.go: COMMAND_TYPE_NETWORK_SCAN Case → scanner.Scan() → JSON stdout
- Backend: NetworkDevice Model (Id, AgentId, IpAddress, MacAddress, Hostname,
Vendor, IsManaged, FirstSeen, LastSeen)
- Backend: EF Migration AddNetworkDevices + Index auf IpAddress + MacAddress
- Backend: NetworkDevicesController GET /api/v1/network-devices + DELETE /{id}
- Backend: AgentGrpcService.ProcessNetworkScanResultAsync — upsert via MAC,
IsManaged=true wenn IP einem bekannten Agent entspricht
- Frontend: NetworkPage.tsx mit Scan-Panel, Device-Tabelle, Filter, Delete
- Frontend: App.tsx — 'Netzwerk' Nav-Eintrag mit Network Icon
Windows Dev-Setup:
- dev-start.ps1 — Startet Docker/Postgres, EF-Migrationen, Backend+Frontend
in separaten PowerShell-Fenstern; Voraussetzungen-Check (docker/dotnet/node/go)
- dev-stop.ps1 — Stoppt alle NexusRMM-Prozesse + PostgreSQL Container
- build-agent.ps1 — Baut nexus-agent.exe (Windows) + optional nexus-agent-linux
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 14:53:35 +01:00
Claude Agent
55e016c07d
feat: Phase 7 — MeshCentral Remote Desktop Integration
...
Backend:
- MeshCentralOptions + MeshCentralService: Node-Lookup via Hostname, Remote-Desktop-URL-Generierung
- RemoteDesktopController: GET /api/v1/agents/{id}/remote-session mit 3 Status-Zuständen (nicht konfiguriert / Agent fehlt / bereit)
- Program.cs: HttpClient + MeshCentralService registriert, appsettings.json mit Konfigurationsblock
Go Agent:
- config.go: MeshCentralUrl + MeshEnabled Felder
- internal/meshagent/installer.go: MeshAgent Download + Installation (Windows Service / Linux systemd)
- main.go: Automatische MeshAgent-Installation nach Enrollment wenn aktiviert
Frontend:
- RemoteDesktopButton: Modales Dialog mit 3 Zustandsanzeigen (Setup nötig / Agent installieren / Remote Desktop öffnen)
- AgentDetailPage: RemoteDesktopButton im Header integriert
- api/types.ts + api/client.ts: RemoteSessionInfo Typ + remoteDesktopApi
docker-compose.yml: MeshCentral Service (ghcr.io/ylianst/meshcentral:latest, Ports 4430/4431)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 14:39:49 +01:00
Claude Agent
84629dfbcf
feat: implement Phase 6 — Software Deployment
...
Backend:
- SoftwarePackage model (Name, Version, OsType, PackageManager, PackageName, InstallerUrl, Checksum, SilentArgs)
- RmmDbContext: SoftwarePackages DbSet + unique index on (Name, Version, OsType)
- SoftwarePackagesController: full CRUD with OsType filter
- DeployController: POST /api/v1/deploy creates InstallSoftware/UninstallSoftware TaskItem
- EF Migration: AddSoftwarePackages (20260319130448)
Go Agent:
- internal/deployer/deployer.go: Install() and Uninstall() with:
- Chocolatey (Windows), apt/dnf (Linux), auto-detect
- Direct installer fallback: HTTP download + SHA256 verify + silent install
- Supports .msi, .exe (Windows) and .deb, .rpm (Linux)
- main.go: COMMAND_TYPE_INSTALL_SOFTWARE and COMMAND_TYPE_UNINSTALL_SOFTWARE routed to deployer
Frontend:
- SoftwarePage: Katalog tab (CRUD, OS filter, smart package manager select) + Deploy tab
- api/types.ts: SoftwarePackage, PackageManager, DeployRequest/Response types
- api/client.ts: softwarePackagesApi and deployApi
- App.tsx: Software nav item with Package icon
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 14:06:40 +01:00
Claude Agent
eb114f68e2
feat: implement Phase 5 — Alerting & Monitoring
...
Backend:
- AlertEvaluationService: evaluates metrics against AlertRules after each heartbeat
- Supports cpu_usage_percent and memory_usage_percent metric paths
- Operators: >, >=, <, <=, ==
- 15-minute dedup window to prevent alert spam
- AlertRulesController: full CRUD for alert rules (GET/POST/PUT/DELETE)
- AlertsController: list with acknowledged filter + POST acknowledge endpoint
- IRmmHubClient: added AlertTriggered push method
- Program.cs: AlertEvaluationService registered as Scoped
Frontend:
- AlertsPage: two-tab layout (active alerts + rules)
- Alerts tab: severity badges, acknowledge button, all/unack/ack filter
- Rules tab: condition display, enabled toggle, delete with confirm
- Create rule modal with MetricPath/Operator/Threshold/Severity selects
- api/types.ts: AlertRule, AlertItem, CreateAlertRuleRequest types
- api/client.ts: alertRulesApi and alertsApi
- useAgentSignalR: handles AlertTriggered → invalidates alerts query
- App.tsx: Alerts nav item with Bell icon
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 14:00:19 +01:00
Claude Agent
d17df20f5e
feat: implement Phase 4 — SignalR real-time updates
...
Backend:
- RmmHub with typed IRmmHubClient interface (AgentMetricsUpdated, AgentStatusChanged, CommandResultUpdated)
- JoinAgentGroup / LeaveAgentGroup for per-agent subscriptions
- AgentGrpcService now pushes to SignalR after every Heartbeat and CommandResult
- Program.cs maps /hubs/rmm
Frontend:
- useSignalR hook with exponential backoff reconnect (0s/2s/10s/30s)
- useGlobalSignalR: invalidates agents query on AgentStatusChanged
- useAgentSignalR: joins agent group, invalidates metrics/tasks on updates
- DashboardPage: live agent status updates via SignalR
- AgentDetailPage: live metrics/command results + connection status indicator
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 13:53:40 +01:00
Claude Agent
418fc5b6d5
feat: implement Phase 2 (Go Agent) and Phase 3 (React Frontend MVP)
...
Phase 2 - Go Agent Core:
- gRPC client with exponential backoff reconnect logic
- Command executor (PowerShell/sh cross-platform)
- Proto stubs regenerated with module= option (correct output path)
- gRPC upgraded to v1.79.3 (BidiStreamingClient support)
Phase 3 - React Frontend MVP:
- Vite + React 18 + TypeScript setup with Tailwind CSS v4
- TanStack Query for data fetching, API client + TypeScript types
- Dashboard page: stats cards (agents/status/tickets) + sortable agents table
- Agent detail page: CPU/RAM charts (Recharts), disk usage, shell command executor
- Tickets page: CRUD with modals, filters, sortable table
- Dark mode with CSS custom properties
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-03-19 12:42:52 +01:00
Claude Agent
51052261f5
feat: implement cross-platform metric collector with gopsutil, rename module to nexusrmm.local/agent
2026-03-19 12:14:14 +01:00
Claude Agent
7c85afe39b
chore: add Go binary to .gitignore
2026-03-19 12:08:17 +01:00
Claude Agent
8e232f0812
chore: remove compiled agent binary from git
2026-03-19 12:08:14 +01:00
Claude Agent
d9d0804361
feat: initialize Go agent module with config, Makefile and project structure
2026-03-19 12:08:00 +01:00
Claude Agent
0714961dd6
feat: add docker-compose for PostgreSQL and initial EF Core migration
2026-03-19 11:41:43 +01:00
Claude Agent
5c03c18ac7
feat: implement gRPC AgentService, Program.cs with Kestrel HTTP/2 config
2026-03-19 11:35:04 +01:00
Claude Agent
fe32c9cd88
feat: add domain models and EF Core DbContext with jsonb support
2026-03-19 11:32:04 +01:00
Claude Agent
863612e7cb
feat: define gRPC proto for agent communication
2026-03-19 11:31:33 +01:00
Claude Agent
b2b07a2808
fix: upgrade to .NET 10 and add required NuGet packages
2026-03-19 11:19:00 +01:00
Claude Agent
5b6f9ebbfd
feat: initialize .NET 8 solution with project structure
2026-03-19 10:27:37 +01:00