# InfluxDB Integration

Das Projekt ist für die Verwendung von InfluxDB konfiguriert. Die Verbindungsdaten werden aus der `.env`-Datei geladen.

## Konfiguration

Die folgenden Umgebungsvariablen müssen in der `.env`-Datei definiert sein:

```env
INFLUXDB_URL=http://192.168.1.4:8086
INFLUXDB_DATABASE=h2m_fsm
INFLUXDB_USERNAME=fsm
INFLUXDB_PASSWORD=hyc6auz4
```

## Verwendung

### Service injizieren

Der `InfluxDBService` kann in jedem Controller oder Service injiziert werden:

```php
use App\Service\InfluxDBService;

class MyController extends AbstractController
{
    public function index(InfluxDBService $influxDBService): Response
    {
        // Service verwenden
    }
}
```

### Datenpunkte schreiben

#### Einzelner Datenpunkt

```php
$success = $influxDBService->writePoint(
    'measurement_name',           // Name der Messung
    ['tag1' => 'value1'],        // Tags (optional)
    ['field1' => 123],           // Felder
    time() * 1000000000          // Timestamp in Nanosekunden (optional)
);
```

#### Mehrere Datenpunkte

```php
$points = [
    [
        'measurement' => 'auftrag_erstellt',
        'tags' => ['user_id' => '1', 'status' => 'offen'],
        'fields' => ['anzahl' => 1],
    ],
    [
        'measurement' => 'auftrag_abgeschlossen',
        'tags' => ['user_id' => '1'],
        'fields' => ['anzahl' => 1],
    ],
];

$success = $influxDBService->writePoints($points);
```

### Verbindung prüfen

```php
if ($influxDBService->isConnected()) {
    // InfluxDB ist verfügbar
} else {
    // Fehler bei der Verbindung
}
```

## Beispiel: Metriken für Aufträge

Sie können den Service verwenden, um Metriken für Aufträge zu speichern:

```php
// In AuftragController.php nach dem Erstellen eines Auftrags:
$influxDBService->writePoint(
    'auftrag_erstellt',
    [
        'user_id' => (string) $this->getUser()->getId(),
        'status' => $auftrag->getStatus(),
    ],
    [
        'anzahl' => 1,
        'betrag' => (float) $auftrag->getBetrag(),
    ]
);
```

## Test-Endpoint

Ein Test-Endpoint ist verfügbar unter `/influxdb/test`, um die Verbindung zu testen.

## Fehlerbehandlung

Der Service fängt alle Exceptions ab und loggt sie. Wenn die Verbindung fehlschlägt, gibt `isConnected()` `false` zurück und `writePoint()` gibt `false` zurück, ohne die Anwendung zu unterbrechen.
