Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f9cf53a

Browse files
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(privatereadonlyClosure$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)

AltStyle によって変換されたページ (->オリジナル) /