181 lines
3.7 KiB
Go
181 lines
3.7 KiB
Go
|
package pgbouncer
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/influxdata/telegraf/testutil"
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
)
|
||
|
|
||
|
func TestPgbouncerGeneratesMetrics(t *testing.T) {
|
||
|
if testing.Short() {
|
||
|
t.Skip("Skipping integration test in short mode")
|
||
|
}
|
||
|
|
||
|
p := &Pgbouncer{
|
||
|
Address: fmt.Sprintf("host=%s port=6432 user=postgres dbname=pgbouncer sslmode=disable",
|
||
|
testutil.GetLocalHost()),
|
||
|
Databases: []string{"pgbouncer"},
|
||
|
}
|
||
|
|
||
|
var acc testutil.Accumulator
|
||
|
err := p.Gather(&acc)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
availableColumns := make(map[string]bool)
|
||
|
for _, col := range p.AllColumns {
|
||
|
availableColumns[col] = true
|
||
|
}
|
||
|
poolMetrics := []string{
|
||
|
"cl_active",
|
||
|
"cl_waiting",
|
||
|
"maxwait",
|
||
|
"pool_mode",
|
||
|
"sv_active",
|
||
|
"sv_idle",
|
||
|
"sv_login",
|
||
|
"sv_tested",
|
||
|
"sv_used",
|
||
|
}
|
||
|
|
||
|
statMetrics := []string{
|
||
|
"avg_query",
|
||
|
"avg_recv",
|
||
|
"avg_req",
|
||
|
"avg_sent",
|
||
|
"total_query_time",
|
||
|
"total_received",
|
||
|
"total_requests",
|
||
|
"total_sent",
|
||
|
}
|
||
|
|
||
|
metricsCounted := 0
|
||
|
|
||
|
for _, metric := range poolMetrics {
|
||
|
_, ok := availableColumns[metric]
|
||
|
if ok {
|
||
|
assert.True(t, acc.HasIntField("pgbouncer_pools", metric))
|
||
|
metricsCounted++
|
||
|
}
|
||
|
}
|
||
|
|
||
|
for _, metric := range statMetrics {
|
||
|
_, ok := availableColumns[metric]
|
||
|
if ok {
|
||
|
assert.True(t, acc.HasIntField("pgbouncer_stats", metric))
|
||
|
metricsCounted++
|
||
|
}
|
||
|
}
|
||
|
|
||
|
assert.True(t, metricsCounted > 0)
|
||
|
// assert.Equal(t, len(availableColumns)-len(p.IgnoredColumns()), metricsCounted)
|
||
|
}
|
||
|
|
||
|
func TestPgbouncerTagsMetricsWithDatabaseName(t *testing.T) {
|
||
|
if testing.Short() {
|
||
|
t.Skip("Skipping integration test in short mode")
|
||
|
}
|
||
|
|
||
|
p := &Pgbouncer{
|
||
|
Address: fmt.Sprintf("host=%s port=6432 user=postgres dbname=pgbouncer sslmode=disable",
|
||
|
testutil.GetLocalHost()),
|
||
|
Databases: []string{"pgbouncer"},
|
||
|
}
|
||
|
|
||
|
var acc testutil.Accumulator
|
||
|
|
||
|
err := p.Gather(&acc)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
point, ok := acc.Get("pgbouncer_pools")
|
||
|
require.True(t, ok)
|
||
|
|
||
|
assert.Equal(t, "pgbouncer", point.Tags["db"])
|
||
|
|
||
|
point, ok = acc.Get("pgbouncer_stats")
|
||
|
require.True(t, ok)
|
||
|
|
||
|
assert.Equal(t, "pgbouncer", point.Tags["db"])
|
||
|
}
|
||
|
|
||
|
func TestPgbouncerTagsMetricsWithSpecifiedDatabaseName(t *testing.T) {
|
||
|
if testing.Short() {
|
||
|
t.Skip("Skipping integration test in short mode")
|
||
|
}
|
||
|
|
||
|
p := &Pgbouncer{
|
||
|
Address: fmt.Sprintf("host=%s port=6432 user=postgres dbname=pgbouncer sslmode=disable",
|
||
|
testutil.GetLocalHost()),
|
||
|
Databases: []string{"foo"},
|
||
|
}
|
||
|
|
||
|
var acc testutil.Accumulator
|
||
|
|
||
|
err := p.Gather(&acc)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
_, ok := acc.Get("pgbouncer_pools")
|
||
|
require.False(t, ok)
|
||
|
|
||
|
_, ok = acc.Get("pgbouncer_stats")
|
||
|
require.False(t, ok)
|
||
|
}
|
||
|
|
||
|
func TestPgbouncerDefaultsToAllDatabases(t *testing.T) {
|
||
|
if testing.Short() {
|
||
|
t.Skip("Skipping integration test in short mode")
|
||
|
}
|
||
|
|
||
|
p := &Pgbouncer{
|
||
|
Address: fmt.Sprintf("host=%s port=6432 user=postgres dbname=pgbouncer sslmode=disable",
|
||
|
testutil.GetLocalHost()),
|
||
|
}
|
||
|
|
||
|
var acc testutil.Accumulator
|
||
|
|
||
|
err := p.Gather(&acc)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
var found bool
|
||
|
|
||
|
for _, pnt := range acc.Metrics {
|
||
|
if pnt.Measurement == "pgbouncer_pools" {
|
||
|
if pnt.Tags["db"] == "pgbouncer" {
|
||
|
found = true
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if pnt.Measurement == "pgbouncer_stats" {
|
||
|
if pnt.Tags["db"] == "pgbouncer" {
|
||
|
found = true
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
assert.True(t, found)
|
||
|
}
|
||
|
|
||
|
func TestPgbouncerIgnoresUnwantedColumns(t *testing.T) {
|
||
|
if testing.Short() {
|
||
|
t.Skip("Skipping integration test in short mode")
|
||
|
}
|
||
|
|
||
|
p := &Pgbouncer{
|
||
|
Address: fmt.Sprintf("host=%s port=6432 user=postgres dbname=pgbouncer sslmode=disable",
|
||
|
testutil.GetLocalHost()),
|
||
|
}
|
||
|
|
||
|
var acc testutil.Accumulator
|
||
|
|
||
|
err := p.Gather(&acc)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
for col := range p.IgnoredColumns() {
|
||
|
assert.False(t, acc.HasMeasurement(col))
|
||
|
}
|
||
|
}
|