fix(mongodb): change command based on server version (#9674)
This commit is contained in:
parent
0ce9c2e9f6
commit
1a59157b91
|
|
@ -1,5 +1,7 @@
|
||||||
# MongoDB Input Plugin
|
# MongoDB Input Plugin
|
||||||
|
|
||||||
|
All MongoDB server versions from 2.6 and higher are supported.
|
||||||
|
|
||||||
### Configuration:
|
### Configuration:
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
|
@ -126,11 +127,29 @@ func (s *Server) gatherClusterStatus() (*ClusterStatus, error) {
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) gatherShardConnPoolStats() (*ShardStats, error) {
|
func poolStatsCommand(version string) (string, error) {
|
||||||
|
majorPart := string(version[0])
|
||||||
|
major, err := strconv.ParseInt(majorPart, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
if major == 5 {
|
||||||
|
return "connPoolStats", nil
|
||||||
|
}
|
||||||
|
return "shardConnPoolStats", nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Server) gatherShardConnPoolStats(version string) (*ShardStats, error) {
|
||||||
|
command, err := poolStatsCommand(version)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
shardStats := &ShardStats{}
|
shardStats := &ShardStats{}
|
||||||
err := s.runCommand("admin", bson.D{
|
err = s.runCommand("admin", bson.D{
|
||||||
{
|
{
|
||||||
Key: "shardConnPoolStats",
|
Key: command,
|
||||||
Value: 1,
|
Value: 1,
|
||||||
},
|
},
|
||||||
}, &shardStats)
|
}, &shardStats)
|
||||||
|
|
@ -272,7 +291,7 @@ func (s *Server) gatherData(acc telegraf.Accumulator, gatherClusterStatus bool,
|
||||||
clusterStatus = status
|
clusterStatus = status
|
||||||
}
|
}
|
||||||
|
|
||||||
shardStats, err := s.gatherShardConnPoolStats()
|
shardStats, err := s.gatherShardConnPoolStats(serverStatus.Version)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.authLog(fmt.Errorf("unable to gather shard connection pool stats: %s", err.Error()))
|
s.authLog(fmt.Errorf("unable to gather shard connection pool stats: %s", err.Error()))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,3 +40,45 @@ func TestAddDefaultStats(t *testing.T) {
|
||||||
assert.True(t, acc.HasInt64Field("mongodb", key))
|
assert.True(t, acc.HasInt64Field("mongodb", key))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPoolStatsVersionCompatibility(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
version string
|
||||||
|
expectedCommand string
|
||||||
|
err bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "mongodb v3",
|
||||||
|
version: "3.0.0",
|
||||||
|
expectedCommand: "shardConnPoolStats",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "mongodb v4",
|
||||||
|
version: "4.0.0",
|
||||||
|
expectedCommand: "shardConnPoolStats",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "mongodb v5",
|
||||||
|
version: "5.0.0",
|
||||||
|
expectedCommand: "connPoolStats",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "invalid version",
|
||||||
|
version: "v4",
|
||||||
|
err: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
command, err := poolStatsCommand(test.version)
|
||||||
|
require.Equal(t, test.expectedCommand, command)
|
||||||
|
if test.err {
|
||||||
|
require.Error(t, err)
|
||||||
|
} else {
|
||||||
|
require.NoError(t, err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue