Skip to content

Commit e0b2f91

Browse files
committed
Replace example printfs with a callable
To make it easier for users to work off the examples without having to replace all the print statements
1 parent ed5c46b commit e0b2f91

File tree

2 files changed

+134
-79
lines changed

2 files changed

+134
-79
lines changed

examples/command_logger.php

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
namespace MongoDB\Examples\CommandLogger;
55

6+
use Closure;
7+
use Exception;
68
use MongoDB\BSON\Document;
79
use MongoDB\Client;
810
use MongoDB\Driver\Monitoring\CommandFailedEvent;
@@ -24,37 +26,55 @@ function toJSON(object $document): string
2426

2527
class CommandLogger implements CommandSubscriber
2628
{
27-
public function commandStarted(CommandStartedEvent $event): void
29+
public function __construct(private readonly Closure $handleOutput)
2830
{
29-
printf("%s command started\n", $event->getCommandName());
31+
}
3032

31-
printf("command: %s\n", toJson($event->getCommand()));
32-
echo "\n";
33+
public function commandStarted(CommandStartedEvent $event): void
34+
{
35+
$this->handleOutput->__invoke($event);
3336
}
3437

3538
public function commandSucceeded(CommandSucceededEvent $event): void
3639
{
37-
printf("%s command succeeded\n", $event->getCommandName());
38-
printf("reply: %s\n", toJson($event->getReply()));
39-
echo "\n";
40+
$this->handleOutput->__invoke($event);
4041
}
4142

4243
public function commandFailed(CommandFailedEvent $event): void
4344
{
44-
printf("%s command failed\n", $event->getCommandName());
45-
printf("reply: %s\n", toJson($event->getReply()));
46-
47-
$exception = $event->getError();
48-
printf("exception: %s\n", $exception::class);
49-
printf("exception.code: %d\n", $exception->getCode());
50-
printf("exception.message: %s\n", $exception->getMessage());
51-
echo "\n";
45+
$this->handleOutput->__invoke($event);
5246
}
5347
}
5448

5549
$client = new Client(getenv('MONGODB_URI') ?: 'mongodb://127.0.0.1/');
5650

57-
$client->addSubscriber(new CommandLogger());
51+
$handleOutput = function ($event): void {
52+
switch ($event::class) {
53+
case CommandStartedEvent::class:
54+
printf("%s command started\n", $event->getCommandName());
55+
printf("command: %s\n", toJson($event->getCommand()));
56+
break;
57+
case CommandSucceededEvent::class:
58+
printf("%s command succeeded\n", $event->getCommandName());
59+
printf("reply: %s\n", toJson($event->getReply()));
60+
break;
61+
case CommandFailedEvent::class:
62+
printf("%s command failed\n", $event->getCommandName());
63+
printf("reply: %s\n", toJson($event->getReply()));
64+
65+
$exception = $event->getError();
66+
printf("exception: %s\n", $exception::class);
67+
printf("exception.code: %d\n", $exception->getCode());
68+
printf("exception.message: %s\n", $exception->getMessage());
69+
break;
70+
default:
71+
throw new Exception('Event type not supported');
72+
}
73+
74+
echo "\n";
75+
};
76+
77+
$client->addSubscriber(new CommandLogger($handleOutput));
5878

5979
$collection = $client->test->command_logger;
6080
$collection->drop();

examples/sdam_logger.php

Lines changed: 98 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@
33

44
namespace MongoDB\Examples;
55

6+
use Closure;
7+
use Exception;
68
use MongoDB\BSON\Document;
79
use MongoDB\Client;
10+
use MongoDB\Driver\Monitoring\CommandFailedEvent;
11+
use MongoDB\Driver\Monitoring\CommandSucceededEvent;
812
use MongoDB\Driver\Monitoring\SDAMSubscriber;
913
use MongoDB\Driver\Monitoring\ServerChangedEvent;
1014
use MongoDB\Driver\Monitoring\ServerClosedEvent;
@@ -28,102 +32,53 @@ function toJSON(array|object $document): string
2832

2933
class SDAMLogger implements SDAMSubscriber
3034
{
35+
public function __construct(private readonly Closure $handleOutput)
36+
{
37+
}
38+
3139
public function serverChanged(ServerChangedEvent $event): void
3240
{
33-
printf(
34-
"serverChanged: %s:%d changed from %s to %s\n",
35-
$event->getHost(),
36-
$event->getPort(),
37-
$event->getPreviousDescription()->getType(),
38-
$event->getNewDescription()->getType(),
39-
);
40-
41-
printf("previous hello response: %s\n", toJson($event->getPreviousDescription()->getHelloResponse()));
42-
printf("new hello response: %s\n", toJson($event->getNewDescription()->getHelloResponse()));
43-
echo "\n";
41+
$this->handleOutput->__invoke($event);
4442
}
4543

4644
public function serverClosed(ServerClosedEvent $event): void
4745
{
48-
printf(
49-
"serverClosed: %s:%d was removed from topology %s\n",
50-
$event->getHost(),
51-
$event->getPort(),
52-
(string) $event->getTopologyId(),
53-
);
54-
echo "\n";
46+
$this->handleOutput->__invoke($event);
5547
}
5648

5749
public function serverHeartbeatFailed(ServerHeartbeatFailedEvent $event): void
5850
{
59-
printf(
60-
"serverHeartbeatFailed: %s:%d heartbeat failed after %dµs\n",
61-
$event->getHost(),
62-
$event->getPort(),
63-
$event->getDurationMicros(),
64-
);
65-
66-
$error = $event->getError();
67-
68-
printf("error: %s(%d): %s\n", $error::class, $error->getCode(), $error->getMessage());
69-
echo "\n";
51+
$this->handleOutput->__invoke($event);
7052
}
7153

7254
public function serverHeartbeatStarted(ServerHeartbeatStartedEvent $event): void
7355
{
74-
printf(
75-
"serverHeartbeatStarted: %s:%d heartbeat started\n",
76-
$event->getHost(),
77-
$event->getPort(),
78-
);
79-
echo "\n";
56+
$this->handleOutput->__invoke($event);
8057
}
8158

8259
public function serverHeartbeatSucceeded(ServerHeartbeatSucceededEvent $event): void
8360
{
84-
printf(
85-
"serverHeartbeatSucceeded: %s:%d heartbeat succeeded after %dµs\n",
86-
$event->getHost(),
87-
$event->getPort(),
88-
$event->getDurationMicros(),
89-
);
90-
91-
printf("reply: %s\n", toJson($event->getReply()));
92-
echo "\n";
61+
$this->handleOutput->__invoke($event);
9362
}
9463

9564
public function serverOpening(ServerOpeningEvent $event): void
9665
{
97-
printf(
98-
"serverOpening: %s:%d was added to topology %s\n",
99-
$event->getHost(),
100-
$event->getPort(),
101-
(string) $event->getTopologyId(),
102-
);
103-
echo "\n";
66+
$this->handleOutput->__invoke($event);
10467
}
10568

10669
public function topologyChanged(TopologyChangedEvent $event): void
10770
{
108-
printf(
109-
"topologyChanged: %s changed from %s to %s\n",
110-
(string) $event->getTopologyId(),
111-
$event->getPreviousDescription()->getType(),
112-
$event->getNewDescription()->getType(),
113-
);
114-
echo "\n";
71+
$this->handleOutput->__invoke($event);
11572
}
11673

11774
public function topologyClosed(TopologyClosedEvent $event): void
11875
{
119-
printf("topologyClosed: %s was closed\n", (string) $event->getTopologyId());
120-
echo "\n";
76+
$this->handleOutput->__invoke($event);
12177
}
12278

12379
public function topologyOpening(TopologyOpeningEvent $event): void
12480
{
125-
printf("topologyOpening: %s was opened\n", (string) $event->getTopologyId());
126-
echo "\n";
81+
$this->handleOutput->__invoke($event);
12782
}
12883
}
12984

@@ -132,7 +87,87 @@ public function topologyOpening(TopologyOpeningEvent $event): void
13287
* (including subscribers) are freed. */
13388
$client = new Client(getenv('MONGODB_URI') ?: 'mongodb://127.0.0.1/', [], ['disableClientPersistence' => true]);
13489

135-
$client->getManager()->addSubscriber(new SDAMLogger());
90+
$handleOutput = function ($event): void {
91+
switch ($event::class) {
92+
case ServerChangedEvent::class:
93+
printf(
94+
"serverChanged: %s:%d changed from %s to %s\n",
95+
$event->getHost(),
96+
$event->getPort(),
97+
$event->getPreviousDescription()->getType(),
98+
$event->getNewDescription()->getType(),
99+
);
100+
101+
printf("previous hello response: %s\n", toJson($event->getPreviousDescription()->getHelloResponse()));
102+
printf("new hello response: %s\n", toJson($event->getNewDescription()->getHelloResponse()));
103+
break;
104+
case ServerClosedEvent::class:
105+
printf(
106+
"serverClosed: %s:%d was removed from topology %s\n",
107+
$event->getHost(),
108+
$event->getPort(),
109+
$event->getTopologyId(),
110+
);
111+
break;
112+
case ServerHeartbeatFailedEvent::class:
113+
printf(
114+
"serverHeartbeatFailed: %s:%d heartbeat failed after %dµs\n",
115+
$event->getHost(),
116+
$event->getPort(),
117+
$event->getDurationMicros(),
118+
);
119+
120+
$error = $event->getError();
121+
122+
printf("error: %s(%d): %s\n", $error::class, $error->getCode(), $error->getMessage());
123+
break;
124+
case ServerHeartbeatStartedEvent::class:
125+
printf(
126+
"serverHeartbeatStarted: %s:%d heartbeat started\n",
127+
$event->getHost(),
128+
$event->getPort(),
129+
);
130+
break;
131+
case ServerHeartbeatSucceededEvent::class:
132+
printf(
133+
"serverHeartbeatSucceeded: %s:%d heartbeat succeeded after %dµs\n",
134+
$event->getHost(),
135+
$event->getPort(),
136+
$event->getDurationMicros(),
137+
);
138+
139+
printf("reply: %s\n", toJson($event->getReply()));
140+
break;
141+
case ServerOpeningEvent::class:
142+
printf(
143+
"serverOpening: %s:%d was added to topology %s\n",
144+
$event->getHost(),
145+
$event->getPort(),
146+
$event->getTopologyId(),
147+
);
148+
break;
149+
case TopologyChangedEvent::class:
150+
printf(
151+
"topologyChanged: %s changed from %s to %s\n",
152+
(string) $event->getTopologyId(),
153+
$event->getPreviousDescription()->getType(),
154+
$event->getNewDescription()->getType(),
155+
);
156+
break;
157+
case TopologyClosedEvent::class:
158+
printf("topologyClosed: %s was closed\n", (string) $event->getTopologyId());
159+
break;
160+
case TopologyOpeningEvent::class:
161+
printf("topologyOpening: %s was opened\n", $event->getTopologyId());
162+
break;
163+
default:
164+
throw new Exception('Event type not supported');
165+
}
166+
167+
echo "\n";
168+
};
169+
170+
$client->getManager()->addSubscriber(new SDAMLogger($handleOutput));
136171

137172
$client->test->command(['ping' => 1]);
138173

0 commit comments

Comments
 (0)