Start · Sprachen · PHP · Referenz · MongoDB\Driver\Monitoring\CommandSucceededEvent

MongoDB\Driver\Monitoring\CommandSucceededEvent

Klasse

Repräsentiert ein Ereignis, das ausgelöst wird, wenn ein MongoDB-Befehl erfolgreich abgeschlossen wurde.

seit PHP 1.3.0 Kategorie: db

Signatur

class MongoDB\Driver\Monitoring\CommandSucceededEvent

Beschreibung

Die Klasse MongoDB\Driver\Monitoring\CommandSucceededEvent ist Teil des Command-Monitoring-Systems des MongoDB PHP-Treibers. Objekte dieser Klasse werden automatisch vom Treiber erzeugt und an registrierte Subscriber weitergegeben, sobald ein MongoDB-Befehl (z. B. find, insert, aggregate) erfolgreich abgeschlossen wurde.

Um diese Ereignisse zu empfangen, muss eine Klasse das Interface MongoDB\Driver\Monitoring\CommandSubscriber implementieren und mit MongoDB\Driver\Monitoring\addSubscriber() registriert werden. Die Methode commandSucceeded() des Subscribers wird dann mit einer Instanz dieses Ereignisses aufgerufen.

Das Ereignis enthält nützliche Informationen für Debugging, Logging und Performance-Analyse, wie den Befehlsnamen, die Antwort des Servers (Reply), die benötigte Ausführungszeit in Mikrosekunden sowie den betroffenen Server und die Verbindungs-ID.

Instanzen dieser Klasse können nicht manuell erstellt werden; sie werden ausschließlich intern vom Treiber erzeugt.

Beispiele

Ausführungszeit von MongoDB-Befehlen messen

<?php
use MongoDB\Driver\Monitoring\CommandSubscriber;
use MongoDB\Driver\Monitoring\CommandStartedEvent;
use MongoDB\Driver\Monitoring\CommandSucceededEvent;
use MongoDB\Driver\Monitoring\CommandFailedEvent;

class PerformanceLogger implements CommandSubscriber
{
    public function commandStarted(CommandStartedEvent $event): void
    {
        // Wird beim Start eines Befehls aufgerufen
    }

    public function commandSucceeded(CommandSucceededEvent $event): void
    {
        printf(
            "Befehl '%s' erfolgreich in %.2f ms (RequestId: %d)\n",
            $event->getCommandName(),
            $event->getDurationMicros() / 1000,
            $event->getRequestId()
        );
    }

    public function commandFailed(CommandFailedEvent $event): void
    {
        // Wird bei Fehler aufgerufen
    }
}

$logger = new PerformanceLogger();
MongoDB\Driver\Monitoring\addSubscriber($logger);

$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$query = new MongoDB\Driver\Query(['status' => 'active']);
$cursor = $manager->executeQuery('testdb.users', $query);
// Ausgabe erscheint automatisch nach Ausführung des find-Befehls
Befehl 'find' erfolgreich in 1.23 ms (RequestId: 42)

Reply des Servers auswerten

<?php
use MongoDB\Driver\Monitoring\CommandSubscriber;
use MongoDB\Driver\Monitoring\CommandStartedEvent;
use MongoDB\Driver\Monitoring\CommandSucceededEvent;
use MongoDB\Driver\Monitoring\CommandFailedEvent;

class ReplyInspector implements CommandSubscriber
{
    public function commandStarted(CommandStartedEvent $event): void {}

    public function commandSucceeded(CommandSucceededEvent $event): void
    {
        $reply = $event->getReply();
        echo 'Befehl: ' . $event->getCommandName() . PHP_EOL;
        echo 'Datenbank: ' . $event->getDatabaseName() . PHP_EOL;
        echo 'Server: ' . $event->getHost() . ':' . $event->getPort() . PHP_EOL;
        echo 'Dauer: ' . $event->getDurationMicros() . ' µs' . PHP_EOL;

        if (isset($reply->ok)) {
            echo 'Server-Status (ok): ' . $reply->ok . PHP_EOL;
        }
    }

    public function commandFailed(CommandFailedEvent $event): void {}
}

$inspector = new ReplyInspector();
MongoDB\Driver\Monitoring\addSubscriber($inspector);

$manager = new MongoDB\Driver\Manager('mongodb://localhost:27017');
$command = new MongoDB\Driver\Command(['ping' => 1]);
$manager->executeCommand('admin', $command);
Befehl: ping Datenbank: admin Server: localhost:27017 Dauer: 845 µs Server-Status (ok): 1

// Wichtig · Fallstricke

Unveränderlichkeit: Objekte dieser Klasse sind unveränderlich (immutable) und bieten ausschließlich Getter-Methoden. Eine manuelle Instanziierung ist nicht möglich.

  • getCommandName() – Name des ausgeführten Befehls (z. B. find, insert)
  • getDatabaseName() – Name der betroffenen Datenbank
  • getDurationMicros() – Ausführungszeit in Mikrosekunden
  • getReply() – Antwort des Servers als stdClass-Objekt
  • getRequestId() – Eindeutige Anfrage-ID (korrespondiert mit CommandStartedEvent)
  • getOperationId() – Operationsnummer für zusammenhängende Operationen
  • getHost() / getPort() – Serveradresse
  • getServiceId() – (ab 1.11.0) Dienst-ID bei Load-Balanced-Konfigurationen

Performance: Da Monitoring-Subscriber bei jedem Befehl aufgerufen werden, sollte aufwändige Verarbeitung im Subscriber asynchron oder gepuffert erfolgen, um die Gesamtperformance nicht negativ zu beeinflussen.