Skip to content

johejo/prommongo

Repository files navigation

prommongo

ci Go Reference codecov Go Report Card

Package prommongo exports pool stats of Mongo Driver as prometheus metrics collector.

Example

package prommongo_test

import (
	"context"
	"fmt"

	"github.com/prometheus/client_golang/prometheus"
	"go.mongodb.org/mongo-driver/bson"
	"go.mongodb.org/mongo-driver/mongo"
	"go.mongodb.org/mongo-driver/mongo/options"

	"github.com/johejo/prommongo"
)

func Example() {
	cmc := prommongo.NewCommandMonitorCollector()
	pmc := prommongo.NewPoolMonitorCollector()
	reg := prometheus.NewRegistry()
	reg.MustRegister(cmc, pmc)

	client, err := mongo.NewClient(
		options.Client().
			ApplyURI("mongodb://root:example@localhost:27017").
			SetMonitor(cmc.CommandMonitor(nil)).
			SetPoolMonitor(pmc.PoolMonitor(nil)),
	)
	if err != nil {
		panic(err)
	}
	ctx := context.Background()
	if err := client.Connect(ctx); err != nil {
		panic(err)
	}
	db := client.Database("testing")
	coll := db.Collection("prommongo")
	defer func() {
		if err := db.Drop(ctx); err != nil {
			panic(err)
		}
		if err := client.Disconnect(ctx); err != nil {
			panic(err)
		}
	}()

	_, err = coll.InsertOne(ctx, bson.M{"name": "Gopher"})
	if err != nil {
		panic(err)
	}

	if err := coll.FindOne(ctx, bson.M{"name": "Gopher"}).Err(); err != nil {
		panic(err)
	}

	ms, err := reg.Gather()
	if err != nil {
		panic(err)
	}
	for _, m := range ms {
		fmt.Println(*m.Name)
	}

	// Output:
	// go_mongo_command_duration_ns
	// go_mongo_connection_closed
	// go_mongo_connection_created
	// go_mongo_connection_returnd
	// go_mongo_get_failed
	// go_mongo_get_succeeded
	// go_mongo_max_pool_size
	// go_mongo_min_pool_size
	// go_mongo_pool_cleared
	// go_mongo_pool_closed
	// go_mongo_pool_created
	// go_mongo_wait_queue_timeout_ms
}

License

MIT

Author

Mitsuo Heijo

Related

About

Package prommongo exports pool stats of Mongo Driver as prometheus metrics collector.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages