Signatur
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
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);
// 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 DatenbankgetDurationMicros()– Ausführungszeit in MikrosekundengetReply()– Antwort des Servers alsstdClass-ObjektgetRequestId()– Eindeutige Anfrage-ID (korrespondiert mitCommandStartedEvent)getOperationId()– Operationsnummer für zusammenhängende OperationengetHost()/getPort()– ServeradressegetServiceId()– (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.