Skip to content

Commit

Permalink
fix: solve compatibility issue for mongodb inputs when using 5.x reli…
Browse files Browse the repository at this point in the history
…caset (#9892)
  • Loading branch information
alonlong authored Oct 15, 2021
1 parent aaaaabd commit 34c2b62
Showing 1 changed file with 14 additions and 11 deletions.
25 changes: 14 additions & 11 deletions plugins/inputs/mongodb/mongostat.go
Original file line number Diff line number Diff line change
Expand Up @@ -248,14 +248,15 @@ type TransactionStats struct {

// ReplStatus stores data related to replica sets.
type ReplStatus struct {
SetName string `bson:"setName"`
IsMaster interface{} `bson:"ismaster"`
Secondary interface{} `bson:"secondary"`
IsReplicaSet interface{} `bson:"isreplicaset"`
ArbiterOnly interface{} `bson:"arbiterOnly"`
Hosts []string `bson:"hosts"`
Passives []string `bson:"passives"`
Me string `bson:"me"`
SetName string `bson:"setName"`
IsWritablePrimary interface{} `bson:"isWritablePrimary"` // mongodb 5.x
IsMaster interface{} `bson:"ismaster"`
Secondary interface{} `bson:"secondary"`
IsReplicaSet interface{} `bson:"isreplicaset"`
ArbiterOnly interface{} `bson:"arbiterOnly"`
Hosts []string `bson:"hosts"`
Passives []string `bson:"passives"`
Me string `bson:"me"`
}

// DBRecordStats stores data related to memory operations across databases.
Expand Down Expand Up @@ -1165,11 +1166,13 @@ func NewStatLine(oldMongo, newMongo MongoStatus, key string, all bool, sampleSec
if newStat.Repl != nil {
returnVal.ReplSetName = newStat.Repl.SetName
// BEGIN code modification
if newStat.Repl.IsMaster.(bool) {
if val, ok := newStat.Repl.IsMaster.(bool); ok && val {
returnVal.NodeType = "PRI"
} else if newStat.Repl.Secondary != nil && newStat.Repl.Secondary.(bool) {
} else if val, ok := newStat.Repl.IsWritablePrimary.(bool); ok && val {
returnVal.NodeType = "PRI"
} else if val, ok := newStat.Repl.Secondary.(bool); ok && val {
returnVal.NodeType = "SEC"
} else if newStat.Repl.ArbiterOnly != nil && newStat.Repl.ArbiterOnly.(bool) {
} else if val, ok := newStat.Repl.ArbiterOnly.(bool); ok && val {
returnVal.NodeType = "ARB"
} else {
returnVal.NodeType = "UNK"
Expand Down

0 comments on commit 34c2b62

Please sign in to comment.