# Watcher - Server Monitoring Solution

[![Build Status](https://git.triggermeelmo.com/Watcher/watcher/badges/workflows/build.yml/badge.svg)](https://git.triggermeelmo.com/Watcher/watcher/actions)
[![.NET Version](https://img.shields.io/badge/.NET-8.0-512BD4?logo=dotnet)](https://dotnet.microsoft.com/)
[![Docker Image](https://img.shields.io/badge/docker-multi--arch-2496ED?logo=docker)](https://git.triggermeelmo.com/watcher/-/packages/container/watcher-server)
[![Platform](https://img.shields.io/badge/platform-linux%2Famd64%20%7C%20linux%2Farm64-lightgrey)](https://git.triggermeelmo.com/watcher/watcher-server)

**Watcher** ist eine umfassende Server- und Host-Monitoring-Lösung mit verteilter Architektur, die Echtzeit-Hardware-Metriken erfasst und über ein zentrales Web-Dashboard visualisiert.

## 📋 Überblick

Die Software besteht aus zwei Hauptkomponenten:

- **Host Agent**: Sammelt Hardware-Metriken (CPU, GPU, RAM, Festplatte, Netzwerk) von den überwachten Servern
- **Zentrale Monitoring-Software**: Web-basiertes Dashboard zur Visualisierung und Verwaltung der gesammelten Daten mit konfigurierbaren Alarmschwellen

## ✨ Hauptfunktionen

### Server-Management
- Hinzufügen, bearbeiten und löschen von Servern
- Hardware-Spezifikationen erfassen (CPU, GPU, RAM, Festplatte)
- Server-Verifikationssystem
- Online/Offline-Status-Tracking via Heartbeat
- Konfigurierbare Alarmschwellen pro Server

### Monitoring & Metriken
- Echtzeit-Metrikerfassung: CPU, GPU, RAM, Festplatte, Netzwerk
- Automatische Datenaufbewahrung mit konfigurierbarer Retention (Standard: 30 Tage)
- Historische Datenspeicherung mit Zeitstempel
- REST API-Endpunkte für Metrik-Submission
- Swagger/OpenAPI-Dokumentation unter `/api/v1/swagger`

### Container-Management
- Docker-Container-Tracking pro Server
- Container-Image-Registry
- Container-Status-Überwachung
- Service Discovery für Docker-Container

### Sicherheit & Authentifizierung
- Lokale Benutzerauthentifizierung mit BCrypt-Hashing
- Cookie-basierte Session-Verwaltung
- Rollenbasierte Zugriffskontrolle
- Standard-Admin-Benutzer (Username: `admin`, Passwort: `changeme` - bitte ändern!)

### Logging & Diagnostik
- Strukturiertes Logging mit Serilog
- Tägliche Log-Dateien: `logs/watcher-<datum>.log`
- Health-Check-Endpunkte
- Datenbank-Export-Funktionalität (SQL-Dumps)

## 🛠️ Technologie-Stack

**Backend:**
- ASP.NET Core 8.0 (C#)
- Entity Framework Core 8.0
- Serilog 9.0 für Logging

**Datenbank:**
- SQLite (Standard, dateibasiert)
- MySQL-Unterstützung (konfigurierbar)

**Frontend:**
- Razor Views (CSHTML)
- Bootstrap / CSS
- jQuery, jQuery Validation

**API & Dokumentation:**
- Swagger/Swashbuckle 9.0.6
- REST API

**Container & Deployment:**
- Docker (Multi-Arch: AMD64, ARM64)
- Docker Compose
- Gitea CI/CD

## 🚀 Installation & Start

### Voraussetzungen
- [Docker](https://www.docker.com/)
- [Docker Compose](https://docs.docker.com/compose/)

### Schnellstart

1. **docker-compose.yaml erstellen** oder die bereitgestellte verwenden:

```yaml
services:
  watcher:
    image: git.triggermeelmo.com/watcher/watcher-server:latest
    container_name: watcher
    deploy:
      resources:
        limits:
          memory: 200M
    restart: unless-stopped
    environment:
      - WATCHER_VERSION=latest
      - UPDATE_CHECK_ENABLED=true
      - UPDATE_CHECK_INTERVAL_HOURS=24
      - METRIC_RETENTION_DAYS=30
      - METRIC_CLEANUP_ENABLED=true
      - METRIC_CLEANUP_INTERVAL_HOURS=24
    ports:
      - "5000:5000"
    volumes:
      - ./watcher-volumes/data:/app/persistence
      - ./watcher-volumes/dumps:/app/wwwroot/downloads/sqlite
      - ./watcher-volumes/logs:/app/logs
```

2. **Container starten:**
   ```bash
   docker compose up -d
   ```

3. **Dashboard aufrufen:**
   ```
   http://localhost:5000
   ```

4. **Standardanmeldung:**
   - Benutzername: `admin`
   - Passwort: `changeme`
   - ⚠️ **Wichtig:** Bitte Passwort nach dem ersten Login ändern!

## ⚙️ Konfiguration

### Umgebungsvariablen

| Variable | Beschreibung | Standard |
|----------|--------------|----------|
| `WATCHER_VERSION` | Anwendungsversion | `latest` |
| `UPDATE_CHECK_ENABLED` | Update-Prüfung aktivieren | `true` |
| `UPDATE_CHECK_INTERVAL_HOURS` | Update-Prüfungs-Intervall | `24` |
| `METRIC_RETENTION_DAYS` | Datenspeicherdauer (Tage) | `30` |
| `METRIC_CLEANUP_ENABLED` | Automatische Datenbereinigung | `true` |
| `METRIC_CLEANUP_INTERVAL_HOURS` | Bereinigungs-Intervall | `24` |
| `DATABASE:CONNECTIONSTRINGS:SQLITE` | Benutzerdefinierter SQLite-Pfad | - |

### Volumes

- `/app/persistence` - SQLite-Datenbank
- `/app/wwwroot/downloads/sqlite` - Datenbank-Exports
- `/app/logs` - Anwendungslogs

## 🔧 Entwicklung

### Lokales Build

```bash
# Dependencies wiederherstellen
dotnet restore

# Build
dotnet build --configuration Release

# Tests ausführen
dotnet test

# Anwendung starten
dotnet run --project Watcher
```

### Docker-Build

```bash
# Multi-Arch Build
docker buildx build \
  --platform linux/amd64,linux/arm64 \
  -t watcher-server:latest \
  --push .
```

## 📁 Projektstruktur

```
/Watcher
├── Controllers/          # MVC & API Controllers
├── Models/              # Entity-Modelle
├── Views/               # Razor-Templates
├── Services/            # Background-Services & Stores
├── Data/                # Entity Framework Context
├── Migrations/          # EF Core Migrations
├── ViewModels/          # View Models
├── wwwroot/             # Statische Assets
├── persistence/         # SQLite-Datenbank
└── logs/                # Anwendungslogs
```

## 📝 Lizenz

Dieses Projekt ist unter einer proprietären Lizenz lizenziert.

## 🔗 Links

- **Repository:** [https://git.triggermeelmo.com/Watcher/watcher](https://git.triggermeelmo.com/Watcher/watcher)
- **Container Registry:** [https://git.triggermeelmo.com/watcher/-/packages/container/watcher-server](https://git.triggermeelmo.com/watcher/-/packages/container/watcher-server)
- **Issue Tracker:** [https://git.triggermeelmo.com/Watcher/watcher/issues](https://git.triggermeelmo.com/Watcher/watcher/issues)

---

**Entwickelt mit ❤️ unter Verwendung von .NET 8.0**