And unit test it using a sample response string. This will make it easier to see what other metrics are available to the plugin for adding future metrics.
161 lines
3.6 KiB
Go
161 lines
3.6 KiB
Go
package memcached
|
|
|
|
import (
|
|
"bufio"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/influxdb/telegraf/testutil"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestMemcachedGeneratesMetrics(t *testing.T) {
|
|
if testing.Short() {
|
|
t.Skip("Skipping integration test in short mode")
|
|
}
|
|
|
|
m := &Memcached{
|
|
Servers: []string{testutil.GetLocalHost()},
|
|
}
|
|
|
|
var acc testutil.Accumulator
|
|
|
|
err := m.Gather(&acc)
|
|
require.NoError(t, err)
|
|
|
|
intMetrics := []string{"get_hits", "get_misses", "evictions",
|
|
"limit_maxbytes", "bytes", "uptime", "curr_items", "total_items",
|
|
"curr_connections", "total_connections", "connection_structures", "cmd_get",
|
|
"cmd_set", "delete_hits", "delete_misses", "incr_hits", "incr_misses",
|
|
"decr_hits", "decr_misses", "cas_hits", "cas_misses", "evictions",
|
|
"bytes_read", "bytes_written", "threads", "conn_yields"}
|
|
|
|
for _, metric := range intMetrics {
|
|
assert.True(t, acc.HasIntValue(metric), metric)
|
|
}
|
|
}
|
|
|
|
func TestMemcachedParseMetrics(t *testing.T) {
|
|
r := bufio.NewReader(strings.NewReader(memcachedStats))
|
|
values, err := parseResponse(r)
|
|
require.NoError(t, err, "Error parsing memcached response")
|
|
|
|
tests := []struct {
|
|
key string
|
|
value string
|
|
}{
|
|
{"pid", "23235"},
|
|
{"uptime", "194"},
|
|
{"time", "1449174679"},
|
|
{"version", "1.4.14 (Ubuntu)"},
|
|
{"libevent", "2.0.21-stable"},
|
|
{"pointer_size", "64"},
|
|
{"rusage_user", "0.000000"},
|
|
{"rusage_system", "0.007566"},
|
|
{"curr_connections", "5"},
|
|
{"total_connections", "6"},
|
|
{"connection_structures", "6"},
|
|
{"reserved_fds", "20"},
|
|
{"cmd_get", "0"},
|
|
{"cmd_set", "0"},
|
|
{"cmd_flush", "0"},
|
|
{"cmd_touch", "0"},
|
|
{"get_hits", "0"},
|
|
{"get_misses", "0"},
|
|
{"delete_misses", "0"},
|
|
{"delete_hits", "0"},
|
|
{"incr_misses", "0"},
|
|
{"incr_hits", "0"},
|
|
{"decr_misses", "0"},
|
|
{"decr_hits", "0"},
|
|
{"cas_misses", "0"},
|
|
{"cas_hits", "0"},
|
|
{"cas_badval", "0"},
|
|
{"touch_hits", "0"},
|
|
{"touch_misses", "0"},
|
|
{"auth_cmds", "0"},
|
|
{"auth_errors", "0"},
|
|
{"bytes_read", "7"},
|
|
{"bytes_written", "0"},
|
|
{"limit_maxbytes", "67108864"},
|
|
{"accepting_conns", "1"},
|
|
{"listen_disabled_num", "0"},
|
|
{"threads", "4"},
|
|
{"conn_yields", "0"},
|
|
{"hash_power_level", "16"},
|
|
{"hash_bytes", "524288"},
|
|
{"hash_is_expanding", "0"},
|
|
{"expired_unfetched", "0"},
|
|
{"evicted_unfetched", "0"},
|
|
{"bytes", "0"},
|
|
{"curr_items", "0"},
|
|
{"total_items", "0"},
|
|
{"evictions", "0"},
|
|
{"reclaimed", "0"},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
value, ok := values[test.key]
|
|
if !ok {
|
|
t.Errorf("Did not find key for metric %s in values", test.key)
|
|
continue
|
|
}
|
|
if value != test.value {
|
|
t.Errorf("Metric: %s, Expected: %s, actual: %s",
|
|
test.key, test.value, value)
|
|
}
|
|
}
|
|
}
|
|
|
|
var memcachedStats = `STAT pid 23235
|
|
STAT uptime 194
|
|
STAT time 1449174679
|
|
STAT version 1.4.14 (Ubuntu)
|
|
STAT libevent 2.0.21-stable
|
|
STAT pointer_size 64
|
|
STAT rusage_user 0.000000
|
|
STAT rusage_system 0.007566
|
|
STAT curr_connections 5
|
|
STAT total_connections 6
|
|
STAT connection_structures 6
|
|
STAT reserved_fds 20
|
|
STAT cmd_get 0
|
|
STAT cmd_set 0
|
|
STAT cmd_flush 0
|
|
STAT cmd_touch 0
|
|
STAT get_hits 0
|
|
STAT get_misses 0
|
|
STAT delete_misses 0
|
|
STAT delete_hits 0
|
|
STAT incr_misses 0
|
|
STAT incr_hits 0
|
|
STAT decr_misses 0
|
|
STAT decr_hits 0
|
|
STAT cas_misses 0
|
|
STAT cas_hits 0
|
|
STAT cas_badval 0
|
|
STAT touch_hits 0
|
|
STAT touch_misses 0
|
|
STAT auth_cmds 0
|
|
STAT auth_errors 0
|
|
STAT bytes_read 7
|
|
STAT bytes_written 0
|
|
STAT limit_maxbytes 67108864
|
|
STAT accepting_conns 1
|
|
STAT listen_disabled_num 0
|
|
STAT threads 4
|
|
STAT conn_yields 0
|
|
STAT hash_power_level 16
|
|
STAT hash_bytes 524288
|
|
STAT hash_is_expanding 0
|
|
STAT expired_unfetched 0
|
|
STAT evicted_unfetched 0
|
|
STAT bytes 0
|
|
STAT curr_items 0
|
|
STAT total_items 0
|
|
STAT evictions 0
|
|
STAT reclaimed 0
|
|
END
|
|
`
|