Skip to content

Commit f9cf53a

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 f9cf53a

File tree

2 files changed

+132
-79
lines changed

2 files changed

+132
-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: 96 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
namespace MongoDB\Examples;
55

6+
use Closure;
7+
use Exception;
68
use MongoDB\BSON\Document;
79
use MongoDB\Client;
810
use MongoDB\Driver\Monitoring\SDAMSubscriber;
@@ -28,102 +30,53 @@ function toJSON(array|object $document): string
2830

2931
class SDAMLogger implements SDAMSubscriber
3032
{
33+
public function __construct(private readonly Closure $handleOutput)
34+
{
35+
}
36+
3137
public function serverChanged(ServerChangedEvent $event): void
3238
{
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";
39+
$this->handleOutput->__invoke($event);
4440
}
4541

4642
public function serverClosed(ServerClosedEvent $event): void
4743
{
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";
44+
$this->handleOutput->__invoke($event);
5545
}
5646

5747
public function serverHeartbeatFailed(ServerHeartbeatFailedEvent $event): void
5848
{
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";
49+
$this->handleOutput->__invoke($event);
7050
}
7151

7252
public function serverHeartbeatStarted(ServerHeartbeatStartedEvent $event): void
7353
{
74-
printf(
75-
"serverHeartbeatStarted: %s:%d heartbeat started\n",
76-
$event->getHost(),
77-
$event->getPort(),
78-
);
79-
echo "\n";
54+
$this->handleOutput->__invoke($event);
8055
}
8156

8257
public function serverHeartbeatSucceeded(ServerHeartbeatSucceededEvent $event): void
8358
{
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";
59+
$this->handleOutput->__invoke($event);
9360
}
9461

9562
public function serverOpening(ServerOpeningEvent $event): void
9663
{
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";
64+
$this->handleOutput->__invoke($event);
10465
}
10566

10667
public function topologyChanged(TopologyChangedEvent $event): void
10768
{
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";
69+
$this->handleOutput->__invoke($event);
11570
}
11671

11772
public function topologyClosed(TopologyClosedEvent $event): void
11873
{
119-
printf("topologyClosed: %s was closed\n", (string) $event->getTopologyId());
120-
echo "\n";
74+
$this->handleOutput->__invoke($event);
12175
}
12276

12377
public function topologyOpening(TopologyOpeningEvent $event): void
12478
{
125-
printf("topologyOpening: %s was opened\n", (string) $event->getTopologyId());
126-
echo "\n";
79+
$this->handleOutput->__invoke($event);
12780
}
12881
}
12982

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

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

137170
$client->test->command(['ping' => 1]);
138171

0 commit comments

Comments
 (0)