54 lines
1.5 KiB
Go
54 lines
1.5 KiB
Go
// Copyright (C) MongoDB, Inc. 2017-present.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
// not use this file except in compliance with the License. You may obtain
|
|
// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
package event_test
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
"go.mongodb.org/mongo-driver/event"
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
"go.mongodb.org/mongo-driver/mongo/options"
|
|
)
|
|
|
|
// Event examples
|
|
|
|
// CommandMonitor represents a monitor that is triggered for different events.
|
|
func ExampleCommandMonitor() {
|
|
// If the application makes multiple concurrent requests, it would have to
|
|
// use a concurrent map like sync.Map
|
|
startedCommands := make(map[int64]bson.Raw)
|
|
cmdMonitor := &event.CommandMonitor{
|
|
Started: func(_ context.Context, evt *event.CommandStartedEvent) {
|
|
startedCommands[evt.RequestID] = evt.Command
|
|
},
|
|
Succeeded: func(_ context.Context, evt *event.CommandSucceededEvent) {
|
|
log.Printf("Command: %v Reply: %v\n",
|
|
startedCommands[evt.RequestID],
|
|
evt.Reply,
|
|
)
|
|
},
|
|
Failed: func(_ context.Context, evt *event.CommandFailedEvent) {
|
|
log.Printf("Command: %v Failure: %v\n",
|
|
startedCommands[evt.RequestID],
|
|
evt.Failure,
|
|
)
|
|
},
|
|
}
|
|
clientOpts := options.Client().ApplyURI("mongodb://localhost:27017").SetMonitor(cmdMonitor)
|
|
client, err := mongo.Connect(context.Background(), clientOpts)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer func() {
|
|
if err = client.Disconnect(context.TODO()); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}()
|
|
}
|