@@ -19,6 +19,7 @@ package exporter
1919import (
2020 "context"
2121 "fmt"
22+ "go.mongodb.org/mongo-driver/bson"
2223 "net/http"
2324 _ "net/http/pprof"
2425 "strconv"
@@ -129,12 +130,29 @@ func (e *Exporter) getTotalCollectionsCount() int {
129130 return e .totalCollectionsCount
130131}
131132
133+ type MongoVersion struct {
134+ VersionString string `bson:"version"`
135+ PSMDBVersion string `bson:"psmdbVersion"`
136+ Version []int `bson:"versionArray"`
137+ }
138+
139+ func getMongoVersion (ctx context.Context , client * mongo.Client ) (* MongoVersion , error ) {
140+ var ver MongoVersion
141+ err := client .Database ("admin" ).RunCommand (ctx , bson.D {{"buildInfo" , 1 }}).Decode (& ver )
142+ return & ver , err
143+ }
144+
132145func (e * Exporter ) makeRegistry (ctx context.Context , client * mongo.Client , topologyInfo labelsGetter , requestOpts Opts ) * prometheus.Registry {
133146 registry := prometheus .NewRegistry ()
134147
135148 nodeType , err := getNodeType (ctx , client )
136149 if err != nil {
137- e .logger .Errorf ("Registry - Cannot get node type to check if this is a mongos : %s" , err )
150+ e .logger .Errorf ("Registry - Cannot get node type : %s" , err )
151+ }
152+
153+ version , err := getMongoVersion (ctx , client )
154+ if err != nil {
155+ e .logger .Warnf ("Registry - Cannot get MongoDB version: %s" , err )
138156 }
139157
140158 gc := newGeneralCollector (ctx , client , nodeType , e .opts .Logger )
@@ -234,7 +252,7 @@ func (e *Exporter) makeRegistry(ctx context.Context, client *mongo.Client, topol
234252 // replSetGetStatus is not supported through mongos.
235253 if e .opts .EnableReplicasetStatus && nodeType != typeMongos && requestOpts .EnableReplicasetStatus {
236254 rsgsc := newReplicationSetStatusCollector (ctx , client , e .opts .Logger ,
237- e .opts .CompatibleMode , topologyInfo )
255+ e .opts .CompatibleMode , topologyInfo , version )
238256 registry .MustRegister (rsgsc )
239257 }
240258
0 commit comments