2015-07-31 19:46:46 +00:00
|
|
|
package disque
|
|
|
|
|
|
|
|
import (
|
|
|
|
"bufio"
|
|
|
|
"fmt"
|
|
|
|
"net"
|
|
|
|
"testing"
|
|
|
|
|
2016-01-23 00:45:31 +00:00
|
|
|
"github.com/influxdb/telegraf/testutil"
|
2015-07-31 19:46:46 +00:00
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestDisqueGeneratesMetrics(t *testing.T) {
|
2015-08-05 23:00:04 +00:00
|
|
|
if testing.Short() {
|
|
|
|
t.Skip("Skipping integration test in short mode")
|
|
|
|
}
|
|
|
|
|
2015-10-27 22:22:21 +00:00
|
|
|
l, err := net.Listen("tcp", "localhost:0")
|
2015-07-31 19:46:46 +00:00
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
defer l.Close()
|
|
|
|
|
|
|
|
go func() {
|
|
|
|
c, err := l.Accept()
|
|
|
|
if err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
buf := bufio.NewReader(c)
|
|
|
|
|
|
|
|
for {
|
|
|
|
line, err := buf.ReadString('\n')
|
|
|
|
if err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if line != "info\r\n" {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
fmt.Fprintf(c, "$%d\n", len(testOutput))
|
|
|
|
c.Write([]byte(testOutput))
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
|
|
|
|
addr := fmt.Sprintf("disque://%s", l.Addr().String())
|
|
|
|
|
|
|
|
r := &Disque{
|
|
|
|
Servers: []string{addr},
|
|
|
|
}
|
|
|
|
|
|
|
|
var acc testutil.Accumulator
|
|
|
|
|
|
|
|
err = r.Gather(&acc)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
2016-01-06 01:06:30 +00:00
|
|
|
fields := map[string]interface{}{
|
|
|
|
"uptime": uint64(1452705),
|
|
|
|
"clients": uint64(31),
|
|
|
|
"blocked_clients": uint64(13),
|
|
|
|
"used_memory": uint64(1840104),
|
|
|
|
"used_memory_rss": uint64(3227648),
|
|
|
|
"used_memory_peak": uint64(89603656),
|
|
|
|
"total_connections_received": uint64(5062777),
|
|
|
|
"total_commands_processed": uint64(12308396),
|
|
|
|
"instantaneous_ops_per_sec": uint64(18),
|
|
|
|
"latest_fork_usec": uint64(1644),
|
|
|
|
"registered_jobs": uint64(360),
|
|
|
|
"registered_queues": uint64(12),
|
|
|
|
"mem_fragmentation_ratio": float64(1.75),
|
|
|
|
"used_cpu_sys": float64(19585.73),
|
|
|
|
"used_cpu_user": float64(11255.96),
|
|
|
|
"used_cpu_sys_children": float64(1.75),
|
|
|
|
"used_cpu_user_children": float64(1.91),
|
2015-07-31 19:46:46 +00:00
|
|
|
}
|
2016-01-06 01:06:30 +00:00
|
|
|
acc.AssertContainsFields(t, "disque", fields)
|
2015-07-31 19:46:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestDisqueCanPullStatsFromMultipleServers(t *testing.T) {
|
2015-08-05 23:00:04 +00:00
|
|
|
if testing.Short() {
|
|
|
|
t.Skip("Skipping integration test in short mode")
|
|
|
|
}
|
|
|
|
|
2015-10-27 22:22:21 +00:00
|
|
|
l, err := net.Listen("tcp", "localhost:0")
|
2015-07-31 19:46:46 +00:00
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
defer l.Close()
|
|
|
|
|
|
|
|
go func() {
|
|
|
|
c, err := l.Accept()
|
|
|
|
if err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
buf := bufio.NewReader(c)
|
|
|
|
|
|
|
|
for {
|
|
|
|
line, err := buf.ReadString('\n')
|
|
|
|
if err != nil {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if line != "info\r\n" {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
fmt.Fprintf(c, "$%d\n", len(testOutput))
|
|
|
|
c.Write([]byte(testOutput))
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
|
|
|
|
addr := fmt.Sprintf("disque://%s", l.Addr().String())
|
|
|
|
|
|
|
|
r := &Disque{
|
|
|
|
Servers: []string{addr},
|
|
|
|
}
|
|
|
|
|
|
|
|
var acc testutil.Accumulator
|
|
|
|
|
|
|
|
err = r.Gather(&acc)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
2016-01-06 01:06:30 +00:00
|
|
|
fields := map[string]interface{}{
|
|
|
|
"uptime": uint64(1452705),
|
|
|
|
"clients": uint64(31),
|
|
|
|
"blocked_clients": uint64(13),
|
|
|
|
"used_memory": uint64(1840104),
|
|
|
|
"used_memory_rss": uint64(3227648),
|
|
|
|
"used_memory_peak": uint64(89603656),
|
|
|
|
"total_connections_received": uint64(5062777),
|
|
|
|
"total_commands_processed": uint64(12308396),
|
|
|
|
"instantaneous_ops_per_sec": uint64(18),
|
|
|
|
"latest_fork_usec": uint64(1644),
|
|
|
|
"registered_jobs": uint64(360),
|
|
|
|
"registered_queues": uint64(12),
|
|
|
|
"mem_fragmentation_ratio": float64(1.75),
|
|
|
|
"used_cpu_sys": float64(19585.73),
|
|
|
|
"used_cpu_user": float64(11255.96),
|
|
|
|
"used_cpu_sys_children": float64(1.75),
|
|
|
|
"used_cpu_user_children": float64(1.91),
|
2015-07-31 19:46:46 +00:00
|
|
|
}
|
2016-01-06 01:06:30 +00:00
|
|
|
acc.AssertContainsFields(t, "disque", fields)
|
2015-07-31 19:46:46 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
const testOutput = `# Server
|
|
|
|
disque_version:0.0.1
|
|
|
|
disque_git_sha1:b5247598
|
|
|
|
disque_git_dirty:0
|
|
|
|
disque_build_id:379fda78983a60c6
|
|
|
|
os:Linux 3.13.0-44-generic x86_64
|
|
|
|
arch_bits:64
|
|
|
|
multiplexing_api:epoll
|
|
|
|
gcc_version:4.8.2
|
|
|
|
process_id:32420
|
|
|
|
run_id:1cfdfa4c6bc3f285182db5427522a8a4c16e42e4
|
|
|
|
tcp_port:7711
|
|
|
|
uptime_in_seconds:1452705
|
|
|
|
uptime_in_days:16
|
|
|
|
hz:10
|
|
|
|
config_file:/usr/local/etc/disque/disque.conf
|
|
|
|
|
|
|
|
# Clients
|
|
|
|
connected_clients:31
|
|
|
|
client_longest_output_list:0
|
|
|
|
client_biggest_input_buf:0
|
|
|
|
blocked_clients:13
|
|
|
|
|
|
|
|
# Memory
|
|
|
|
used_memory:1840104
|
|
|
|
used_memory_human:1.75M
|
|
|
|
used_memory_rss:3227648
|
|
|
|
used_memory_peak:89603656
|
|
|
|
used_memory_peak_human:85.45M
|
|
|
|
mem_fragmentation_ratio:1.75
|
|
|
|
mem_allocator:jemalloc-3.6.0
|
|
|
|
|
|
|
|
# Jobs
|
|
|
|
registered_jobs:360
|
|
|
|
|
|
|
|
# Queues
|
|
|
|
registered_queues:12
|
|
|
|
|
|
|
|
# Persistence
|
|
|
|
loading:0
|
|
|
|
aof_enabled:1
|
|
|
|
aof_state:on
|
|
|
|
aof_rewrite_in_progress:0
|
|
|
|
aof_rewrite_scheduled:0
|
|
|
|
aof_last_rewrite_time_sec:0
|
|
|
|
aof_current_rewrite_time_sec:-1
|
|
|
|
aof_last_bgrewrite_status:ok
|
|
|
|
aof_last_write_status:ok
|
|
|
|
aof_current_size:41952430
|
|
|
|
aof_base_size:9808
|
|
|
|
aof_pending_rewrite:0
|
|
|
|
aof_buffer_length:0
|
|
|
|
aof_rewrite_buffer_length:0
|
|
|
|
aof_pending_bio_fsync:0
|
|
|
|
aof_delayed_fsync:1
|
|
|
|
|
|
|
|
# Stats
|
|
|
|
total_connections_received:5062777
|
|
|
|
total_commands_processed:12308396
|
|
|
|
instantaneous_ops_per_sec:18
|
|
|
|
total_net_input_bytes:1346996528
|
|
|
|
total_net_output_bytes:1967551763
|
|
|
|
instantaneous_input_kbps:1.38
|
|
|
|
instantaneous_output_kbps:1.78
|
|
|
|
rejected_connections:0
|
|
|
|
latest_fork_usec:1644
|
|
|
|
|
|
|
|
# CPU
|
|
|
|
used_cpu_sys:19585.73
|
|
|
|
used_cpu_user:11255.96
|
|
|
|
used_cpu_sys_children:1.75
|
|
|
|
used_cpu_user_children:1.91
|
|
|
|
`
|