renaming plugins -> inputs
This commit is contained in:
326
plugins/inputs/rabbitmq/rabbitmq.go
Normal file
326
plugins/inputs/rabbitmq/rabbitmq.go
Normal file
@@ -0,0 +1,326 @@
|
||||
package rabbitmq
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"github.com/influxdb/telegraf/plugins/inputs"
|
||||
)
|
||||
|
||||
const DefaultUsername = "guest"
|
||||
const DefaultPassword = "guest"
|
||||
const DefaultURL = "http://localhost:15672"
|
||||
|
||||
type RabbitMQ struct {
|
||||
URL string
|
||||
Name string
|
||||
Username string
|
||||
Password string
|
||||
Nodes []string
|
||||
Queues []string
|
||||
|
||||
Client *http.Client
|
||||
}
|
||||
|
||||
type OverviewResponse struct {
|
||||
MessageStats *MessageStats `json:"message_stats"`
|
||||
ObjectTotals *ObjectTotals `json:"object_totals"`
|
||||
QueueTotals *QueueTotals `json:"queue_totals"`
|
||||
}
|
||||
|
||||
type Details struct {
|
||||
Rate float64
|
||||
}
|
||||
|
||||
type MessageStats struct {
|
||||
Ack int64
|
||||
AckDetails Details `json:"ack_details"`
|
||||
Deliver int64
|
||||
DeliverDetails Details `json:"deliver_details"`
|
||||
DeliverGet int64
|
||||
DeliverGetDetails Details `json:"deliver_get_details"`
|
||||
Publish int64
|
||||
PublishDetails Details `json:"publish_details"`
|
||||
Redeliver int64
|
||||
RedeliverDetails Details `json:"redeliver_details"`
|
||||
}
|
||||
|
||||
type ObjectTotals struct {
|
||||
Channels int64
|
||||
Connections int64
|
||||
Consumers int64
|
||||
Exchanges int64
|
||||
Queues int64
|
||||
}
|
||||
|
||||
type QueueTotals struct {
|
||||
Messages int64
|
||||
MessagesReady int64 `json:"messages_ready"`
|
||||
MessagesUnacknowledged int64 `json:"messages_unacknowledged"`
|
||||
}
|
||||
|
||||
type Queue struct {
|
||||
QueueTotals // just to not repeat the same code
|
||||
MessageStats `json:"message_stats"`
|
||||
Memory int64
|
||||
Consumers int64
|
||||
ConsumerUtilisation float64 `json:"consumer_utilisation"`
|
||||
Name string
|
||||
Node string
|
||||
Vhost string
|
||||
Durable bool
|
||||
AutoDelete bool `json:"auto_delete"`
|
||||
}
|
||||
|
||||
type Node struct {
|
||||
Name string
|
||||
|
||||
DiskFree int64 `json:"disk_free"`
|
||||
DiskFreeLimit int64 `json:"disk_free_limit"`
|
||||
FdTotal int64 `json:"fd_total"`
|
||||
FdUsed int64 `json:"fd_used"`
|
||||
MemLimit int64 `json:"mem_limit"`
|
||||
MemUsed int64 `json:"mem_used"`
|
||||
ProcTotal int64 `json:"proc_total"`
|
||||
ProcUsed int64 `json:"proc_used"`
|
||||
RunQueue int64 `json:"run_queue"`
|
||||
SocketsTotal int64 `json:"sockets_total"`
|
||||
SocketsUsed int64 `json:"sockets_used"`
|
||||
}
|
||||
|
||||
type gatherFunc func(r *RabbitMQ, acc inputs.Accumulator, errChan chan error)
|
||||
|
||||
var gatherFunctions = []gatherFunc{gatherOverview, gatherNodes, gatherQueues}
|
||||
|
||||
var sampleConfig = `
|
||||
url = "http://localhost:15672" # required
|
||||
# name = "rmq-server-1" # optional tag
|
||||
# username = "guest"
|
||||
# password = "guest"
|
||||
|
||||
# A list of nodes to pull metrics about. If not specified, metrics for
|
||||
# all nodes are gathered.
|
||||
# nodes = ["rabbit@node1", "rabbit@node2"]
|
||||
`
|
||||
|
||||
func (r *RabbitMQ) SampleConfig() string {
|
||||
return sampleConfig
|
||||
}
|
||||
|
||||
func (r *RabbitMQ) Description() string {
|
||||
return "Read metrics from one or many RabbitMQ servers via the management API"
|
||||
}
|
||||
|
||||
func (r *RabbitMQ) Gather(acc inputs.Accumulator) error {
|
||||
if r.Client == nil {
|
||||
r.Client = &http.Client{}
|
||||
}
|
||||
|
||||
var errChan = make(chan error, len(gatherFunctions))
|
||||
|
||||
for _, f := range gatherFunctions {
|
||||
go f(r, acc, errChan)
|
||||
}
|
||||
|
||||
for i := 1; i <= len(gatherFunctions); i++ {
|
||||
err := <-errChan
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *RabbitMQ) requestJSON(u string, target interface{}) error {
|
||||
u = fmt.Sprintf("%s%s", r.URL, u)
|
||||
|
||||
req, err := http.NewRequest("GET", u, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
username := r.Username
|
||||
if username == "" {
|
||||
username = DefaultUsername
|
||||
}
|
||||
|
||||
password := r.Password
|
||||
if password == "" {
|
||||
password = DefaultPassword
|
||||
}
|
||||
|
||||
req.SetBasicAuth(username, password)
|
||||
|
||||
resp, err := r.Client.Do(req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
defer resp.Body.Close()
|
||||
|
||||
json.NewDecoder(resp.Body).Decode(target)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func gatherOverview(r *RabbitMQ, acc inputs.Accumulator, errChan chan error) {
|
||||
overview := &OverviewResponse{}
|
||||
|
||||
err := r.requestJSON("/api/overview", &overview)
|
||||
if err != nil {
|
||||
errChan <- err
|
||||
return
|
||||
}
|
||||
|
||||
if overview.QueueTotals == nil || overview.ObjectTotals == nil || overview.MessageStats == nil {
|
||||
errChan <- fmt.Errorf("Wrong answer from rabbitmq. Probably auth issue")
|
||||
return
|
||||
}
|
||||
|
||||
tags := map[string]string{"url": r.URL}
|
||||
if r.Name != "" {
|
||||
tags["name"] = r.Name
|
||||
}
|
||||
fields := map[string]interface{}{
|
||||
"messages": overview.QueueTotals.Messages,
|
||||
"messages_ready": overview.QueueTotals.MessagesReady,
|
||||
"messages_unacked": overview.QueueTotals.MessagesUnacknowledged,
|
||||
"channels": overview.ObjectTotals.Channels,
|
||||
"connections": overview.ObjectTotals.Connections,
|
||||
"consumers": overview.ObjectTotals.Consumers,
|
||||
"exchanges": overview.ObjectTotals.Exchanges,
|
||||
"queues": overview.ObjectTotals.Queues,
|
||||
"messages_acked": overview.MessageStats.Ack,
|
||||
"messages_delivered": overview.MessageStats.Deliver,
|
||||
"messages_published": overview.MessageStats.Publish,
|
||||
}
|
||||
acc.AddFields("rabbitmq_overview", fields, tags)
|
||||
|
||||
errChan <- nil
|
||||
}
|
||||
|
||||
func gatherNodes(r *RabbitMQ, acc inputs.Accumulator, errChan chan error) {
|
||||
nodes := make([]Node, 0)
|
||||
// Gather information about nodes
|
||||
err := r.requestJSON("/api/nodes", &nodes)
|
||||
if err != nil {
|
||||
errChan <- err
|
||||
return
|
||||
}
|
||||
now := time.Now()
|
||||
|
||||
for _, node := range nodes {
|
||||
if !r.shouldGatherNode(node) {
|
||||
continue
|
||||
}
|
||||
|
||||
tags := map[string]string{"url": r.URL}
|
||||
tags["node"] = node.Name
|
||||
|
||||
fields := map[string]interface{}{
|
||||
"disk_free": node.DiskFree,
|
||||
"disk_free_limit": node.DiskFreeLimit,
|
||||
"fd_total": node.FdTotal,
|
||||
"fd_used": node.FdUsed,
|
||||
"mem_limit": node.MemLimit,
|
||||
"mem_used": node.MemUsed,
|
||||
"proc_total": node.ProcTotal,
|
||||
"proc_used": node.ProcUsed,
|
||||
"run_queue": node.RunQueue,
|
||||
"sockets_total": node.SocketsTotal,
|
||||
"sockets_used": node.SocketsUsed,
|
||||
}
|
||||
acc.AddFields("rabbitmq_node", fields, tags, now)
|
||||
}
|
||||
|
||||
errChan <- nil
|
||||
}
|
||||
|
||||
func gatherQueues(r *RabbitMQ, acc inputs.Accumulator, errChan chan error) {
|
||||
// Gather information about queues
|
||||
queues := make([]Queue, 0)
|
||||
err := r.requestJSON("/api/queues", &queues)
|
||||
if err != nil {
|
||||
errChan <- err
|
||||
return
|
||||
}
|
||||
|
||||
for _, queue := range queues {
|
||||
if !r.shouldGatherQueue(queue) {
|
||||
continue
|
||||
}
|
||||
tags := map[string]string{
|
||||
"url": r.URL,
|
||||
"queue": queue.Name,
|
||||
"vhost": queue.Vhost,
|
||||
"node": queue.Node,
|
||||
"durable": strconv.FormatBool(queue.Durable),
|
||||
"auto_delete": strconv.FormatBool(queue.AutoDelete),
|
||||
}
|
||||
|
||||
acc.AddFields(
|
||||
"rabbitmq_queue",
|
||||
map[string]interface{}{
|
||||
// common information
|
||||
"consumers": queue.Consumers,
|
||||
"consumer_utilisation": queue.ConsumerUtilisation,
|
||||
"memory": queue.Memory,
|
||||
// messages information
|
||||
"messages": queue.Messages,
|
||||
"messages_ready": queue.MessagesReady,
|
||||
"messages_unack": queue.MessagesUnacknowledged,
|
||||
"messages_ack": queue.MessageStats.Ack,
|
||||
"messages_ack_rate": queue.MessageStats.AckDetails.Rate,
|
||||
"messages_deliver": queue.MessageStats.Deliver,
|
||||
"messages_deliver_rate": queue.MessageStats.DeliverDetails.Rate,
|
||||
"messages_deliver_get": queue.MessageStats.DeliverGet,
|
||||
"messages_deliver_get_rate": queue.MessageStats.DeliverGetDetails.Rate,
|
||||
"messages_publish": queue.MessageStats.Publish,
|
||||
"messages_publish_rate": queue.MessageStats.PublishDetails.Rate,
|
||||
"messages_redeliver": queue.MessageStats.Redeliver,
|
||||
"messages_redeliver_rate": queue.MessageStats.RedeliverDetails.Rate,
|
||||
},
|
||||
tags,
|
||||
)
|
||||
}
|
||||
|
||||
errChan <- nil
|
||||
}
|
||||
|
||||
func (r *RabbitMQ) shouldGatherNode(node Node) bool {
|
||||
if len(r.Nodes) == 0 {
|
||||
return true
|
||||
}
|
||||
|
||||
for _, name := range r.Nodes {
|
||||
if name == node.Name {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func (r *RabbitMQ) shouldGatherQueue(queue Queue) bool {
|
||||
if len(r.Queues) == 0 {
|
||||
return true
|
||||
}
|
||||
|
||||
for _, name := range r.Queues {
|
||||
if name == queue.Name {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func init() {
|
||||
inputs.Add("rabbitmq", func() inputs.Input {
|
||||
return &RabbitMQ{}
|
||||
})
|
||||
}
|
||||
444
plugins/inputs/rabbitmq/rabbitmq_test.go
Normal file
444
plugins/inputs/rabbitmq/rabbitmq_test.go
Normal file
@@ -0,0 +1,444 @@
|
||||
package rabbitmq
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"github.com/influxdb/telegraf/testutil"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
const sampleOverviewResponse = `
|
||||
{
|
||||
"message_stats": {
|
||||
"ack": 5246,
|
||||
"ack_details": {
|
||||
"rate": 0.0
|
||||
},
|
||||
"deliver": 5246,
|
||||
"deliver_details": {
|
||||
"rate": 0.0
|
||||
},
|
||||
"deliver_get": 5246,
|
||||
"deliver_get_details": {
|
||||
"rate": 0.0
|
||||
},
|
||||
"publish": 5258,
|
||||
"publish_details": {
|
||||
"rate": 0.0
|
||||
}
|
||||
},
|
||||
"object_totals": {
|
||||
"channels": 44,
|
||||
"connections": 44,
|
||||
"consumers": 65,
|
||||
"exchanges": 43,
|
||||
"queues": 62
|
||||
},
|
||||
"queue_totals": {
|
||||
"messages": 0,
|
||||
"messages_details": {
|
||||
"rate": 0.0
|
||||
},
|
||||
"messages_ready": 0,
|
||||
"messages_ready_details": {
|
||||
"rate": 0.0
|
||||
},
|
||||
"messages_unacknowledged": 0,
|
||||
"messages_unacknowledged_details": {
|
||||
"rate": 0.0
|
||||
}
|
||||
}
|
||||
}
|
||||
`
|
||||
|
||||
const sampleNodesResponse = `
|
||||
[
|
||||
{
|
||||
"db_dir": "/var/lib/rabbitmq/mnesia/rabbit@vagrant-ubuntu-trusty-64",
|
||||
"disk_free": 37768282112,
|
||||
"disk_free_alarm": false,
|
||||
"disk_free_details": {
|
||||
"rate": 0.0
|
||||
},
|
||||
"disk_free_limit": 50000000,
|
||||
"enabled_plugins": [
|
||||
"rabbitmq_management"
|
||||
],
|
||||
"fd_total": 1024,
|
||||
"fd_used": 63,
|
||||
"fd_used_details": {
|
||||
"rate": 0.0
|
||||
},
|
||||
"io_read_avg_time": 0,
|
||||
"io_read_avg_time_details": {
|
||||
"rate": 0.0
|
||||
},
|
||||
"io_read_bytes": 1,
|
||||
"io_read_bytes_details": {
|
||||
"rate": 0.0
|
||||
},
|
||||
"io_read_count": 1,
|
||||
"io_read_count_details": {
|
||||
"rate": 0.0
|
||||
},
|
||||
"io_sync_avg_time": 0,
|
||||
"io_sync_avg_time_details": {
|
||||
"rate": 0.0
|
||||
},
|
||||
"io_write_avg_time": 0,
|
||||
"io_write_avg_time_details": {
|
||||
"rate": 0.0
|
||||
},
|
||||
"log_file": "/var/log/rabbitmq/rabbit@vagrant-ubuntu-trusty-64.log",
|
||||
"mem_alarm": false,
|
||||
"mem_limit": 2503771750,
|
||||
"mem_used": 159707080,
|
||||
"mem_used_details": {
|
||||
"rate": 15185.6
|
||||
},
|
||||
"mnesia_disk_tx_count": 16,
|
||||
"mnesia_disk_tx_count_details": {
|
||||
"rate": 0.0
|
||||
},
|
||||
"mnesia_ram_tx_count": 296,
|
||||
"mnesia_ram_tx_count_details": {
|
||||
"rate": 0.0
|
||||
},
|
||||
"name": "rabbit@vagrant-ubuntu-trusty-64",
|
||||
"net_ticktime": 60,
|
||||
"os_pid": "14244",
|
||||
"partitions": [],
|
||||
"proc_total": 1048576,
|
||||
"proc_used": 783,
|
||||
"proc_used_details": {
|
||||
"rate": 0.0
|
||||
},
|
||||
"processors": 1,
|
||||
"rates_mode": "basic",
|
||||
"run_queue": 0,
|
||||
"running": true,
|
||||
"sasl_log_file": "/var/log/rabbitmq/rabbit@vagrant-ubuntu-trusty-64-sasl.log",
|
||||
"sockets_total": 829,
|
||||
"sockets_used": 45,
|
||||
"sockets_used_details": {
|
||||
"rate": 0.0
|
||||
},
|
||||
"type": "disc",
|
||||
"uptime": 7464827
|
||||
}
|
||||
]
|
||||
`
|
||||
const sampleQueuesResponse = `
|
||||
[
|
||||
{
|
||||
"memory": 21960,
|
||||
"messages": 0,
|
||||
"messages_details": {
|
||||
"rate": 0
|
||||
},
|
||||
"messages_ready": 0,
|
||||
"messages_ready_details": {
|
||||
"rate": 0
|
||||
},
|
||||
"messages_unacknowledged": 0,
|
||||
"messages_unacknowledged_details": {
|
||||
"rate": 0
|
||||
},
|
||||
"idle_since": "2015-11-01 8:22:15",
|
||||
"consumer_utilisation": "",
|
||||
"policy": "federator",
|
||||
"exclusive_consumer_tag": "",
|
||||
"consumers": 0,
|
||||
"recoverable_slaves": "",
|
||||
"state": "running",
|
||||
"messages_ram": 0,
|
||||
"messages_ready_ram": 0,
|
||||
"messages_unacknowledged_ram": 0,
|
||||
"messages_persistent": 0,
|
||||
"message_bytes": 0,
|
||||
"message_bytes_ready": 0,
|
||||
"message_bytes_unacknowledged": 0,
|
||||
"message_bytes_ram": 0,
|
||||
"message_bytes_persistent": 0,
|
||||
"disk_reads": 0,
|
||||
"disk_writes": 0,
|
||||
"backing_queue_status": {
|
||||
"q1": 0,
|
||||
"q2": 0,
|
||||
"delta": [
|
||||
"delta",
|
||||
"undefined",
|
||||
0,
|
||||
"undefined"
|
||||
],
|
||||
"q3": 0,
|
||||
"q4": 0,
|
||||
"len": 0,
|
||||
"target_ram_count": "infinity",
|
||||
"next_seq_id": 0,
|
||||
"avg_ingress_rate": 0,
|
||||
"avg_egress_rate": 0,
|
||||
"avg_ack_ingress_rate": 0,
|
||||
"avg_ack_egress_rate": 0
|
||||
},
|
||||
"name": "collectd-queue",
|
||||
"vhost": "collectd",
|
||||
"durable": true,
|
||||
"auto_delete": false,
|
||||
"arguments": {},
|
||||
"node": "rabbit@testhost"
|
||||
},
|
||||
{
|
||||
"memory": 55528,
|
||||
"message_stats": {
|
||||
"ack": 223654927,
|
||||
"ack_details": {
|
||||
"rate": 0
|
||||
},
|
||||
"deliver": 224518745,
|
||||
"deliver_details": {
|
||||
"rate": 0
|
||||
},
|
||||
"deliver_get": 224518829,
|
||||
"deliver_get_details": {
|
||||
"rate": 0
|
||||
},
|
||||
"get": 19,
|
||||
"get_details": {
|
||||
"rate": 0
|
||||
},
|
||||
"get_no_ack": 65,
|
||||
"get_no_ack_details": {
|
||||
"rate": 0
|
||||
},
|
||||
"publish": 223883765,
|
||||
"publish_details": {
|
||||
"rate": 0
|
||||
},
|
||||
"redeliver": 863805,
|
||||
"redeliver_details": {
|
||||
"rate": 0
|
||||
}
|
||||
},
|
||||
"messages": 24,
|
||||
"messages_details": {
|
||||
"rate": 0
|
||||
},
|
||||
"messages_ready": 24,
|
||||
"messages_ready_details": {
|
||||
"rate": 0
|
||||
},
|
||||
"messages_unacknowledged": 0,
|
||||
"messages_unacknowledged_details": {
|
||||
"rate": 0
|
||||
},
|
||||
"idle_since": "2015-11-01 8:22:14",
|
||||
"consumer_utilisation": "",
|
||||
"policy": "",
|
||||
"exclusive_consumer_tag": "",
|
||||
"consumers": 0,
|
||||
"recoverable_slaves": "",
|
||||
"state": "running",
|
||||
"messages_ram": 24,
|
||||
"messages_ready_ram": 24,
|
||||
"messages_unacknowledged_ram": 0,
|
||||
"messages_persistent": 0,
|
||||
"message_bytes": 149220,
|
||||
"message_bytes_ready": 149220,
|
||||
"message_bytes_unacknowledged": 0,
|
||||
"message_bytes_ram": 149220,
|
||||
"message_bytes_persistent": 0,
|
||||
"disk_reads": 0,
|
||||
"disk_writes": 0,
|
||||
"backing_queue_status": {
|
||||
"q1": 0,
|
||||
"q2": 0,
|
||||
"delta": [
|
||||
"delta",
|
||||
"undefined",
|
||||
0,
|
||||
"undefined"
|
||||
],
|
||||
"q3": 0,
|
||||
"q4": 24,
|
||||
"len": 24,
|
||||
"target_ram_count": "infinity",
|
||||
"next_seq_id": 223883765,
|
||||
"avg_ingress_rate": 0,
|
||||
"avg_egress_rate": 0,
|
||||
"avg_ack_ingress_rate": 0,
|
||||
"avg_ack_egress_rate": 0
|
||||
},
|
||||
"name": "telegraf",
|
||||
"vhost": "collectd",
|
||||
"durable": true,
|
||||
"auto_delete": false,
|
||||
"arguments": {},
|
||||
"node": "rabbit@testhost"
|
||||
},
|
||||
{
|
||||
"message_stats": {
|
||||
"ack": 1296077,
|
||||
"ack_details": {
|
||||
"rate": 0
|
||||
},
|
||||
"deliver": 1513176,
|
||||
"deliver_details": {
|
||||
"rate": 0.4
|
||||
},
|
||||
"deliver_get": 1513239,
|
||||
"deliver_get_details": {
|
||||
"rate": 0.4
|
||||
},
|
||||
"disk_writes": 7976,
|
||||
"disk_writes_details": {
|
||||
"rate": 0
|
||||
},
|
||||
"get": 40,
|
||||
"get_details": {
|
||||
"rate": 0
|
||||
},
|
||||
"get_no_ack": 23,
|
||||
"get_no_ack_details": {
|
||||
"rate": 0
|
||||
},
|
||||
"publish": 1325628,
|
||||
"publish_details": {
|
||||
"rate": 0.4
|
||||
},
|
||||
"redeliver": 216034,
|
||||
"redeliver_details": {
|
||||
"rate": 0
|
||||
}
|
||||
},
|
||||
"messages": 5,
|
||||
"messages_details": {
|
||||
"rate": 0.4
|
||||
},
|
||||
"messages_ready": 0,
|
||||
"messages_ready_details": {
|
||||
"rate": 0
|
||||
},
|
||||
"messages_unacknowledged": 5,
|
||||
"messages_unacknowledged_details": {
|
||||
"rate": 0.4
|
||||
},
|
||||
"policy": "federator",
|
||||
"exclusive_consumer_tag": "",
|
||||
"consumers": 1,
|
||||
"consumer_utilisation": 1,
|
||||
"memory": 122856,
|
||||
"recoverable_slaves": "",
|
||||
"state": "running",
|
||||
"messages_ram": 5,
|
||||
"messages_ready_ram": 0,
|
||||
"messages_unacknowledged_ram": 5,
|
||||
"messages_persistent": 0,
|
||||
"message_bytes": 150096,
|
||||
"message_bytes_ready": 0,
|
||||
"message_bytes_unacknowledged": 150096,
|
||||
"message_bytes_ram": 150096,
|
||||
"message_bytes_persistent": 0,
|
||||
"disk_reads": 0,
|
||||
"disk_writes": 7976,
|
||||
"backing_queue_status": {
|
||||
"q1": 0,
|
||||
"q2": 0,
|
||||
"delta": [
|
||||
"delta",
|
||||
"undefined",
|
||||
0,
|
||||
"undefined"
|
||||
],
|
||||
"q3": 0,
|
||||
"q4": 0,
|
||||
"len": 0,
|
||||
"target_ram_count": "infinity",
|
||||
"next_seq_id": 1325628,
|
||||
"avg_ingress_rate": 0.19115840579934168,
|
||||
"avg_egress_rate": 0.19115840579934168,
|
||||
"avg_ack_ingress_rate": 0.19115840579934168,
|
||||
"avg_ack_egress_rate": 0.1492766485341716
|
||||
},
|
||||
"name": "telegraf",
|
||||
"vhost": "metrics",
|
||||
"durable": true,
|
||||
"auto_delete": false,
|
||||
"arguments": {},
|
||||
"node": "rabbit@testhost"
|
||||
}
|
||||
]
|
||||
`
|
||||
|
||||
func TestRabbitMQGeneratesMetrics(t *testing.T) {
|
||||
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
var rsp string
|
||||
|
||||
switch r.URL.Path {
|
||||
case "/api/overview":
|
||||
rsp = sampleOverviewResponse
|
||||
case "/api/nodes":
|
||||
rsp = sampleNodesResponse
|
||||
case "/api/queues":
|
||||
rsp = sampleQueuesResponse
|
||||
default:
|
||||
panic("Cannot handle request")
|
||||
}
|
||||
|
||||
fmt.Fprintln(w, rsp)
|
||||
}))
|
||||
defer ts.Close()
|
||||
|
||||
r := &RabbitMQ{
|
||||
URL: ts.URL,
|
||||
}
|
||||
|
||||
var acc testutil.Accumulator
|
||||
|
||||
err := r.Gather(&acc)
|
||||
require.NoError(t, err)
|
||||
|
||||
intMetrics := []string{
|
||||
"messages",
|
||||
"messages_ready",
|
||||
"messages_unacked",
|
||||
|
||||
"messages_acked",
|
||||
"messages_delivered",
|
||||
"messages_published",
|
||||
|
||||
"channels",
|
||||
"connections",
|
||||
"consumers",
|
||||
"exchanges",
|
||||
"queues",
|
||||
}
|
||||
|
||||
for _, metric := range intMetrics {
|
||||
assert.True(t, acc.HasIntField("rabbitmq_overview", metric))
|
||||
}
|
||||
|
||||
nodeIntMetrics := []string{
|
||||
"disk_free",
|
||||
"disk_free_limit",
|
||||
"fd_total",
|
||||
"fd_used",
|
||||
"mem_limit",
|
||||
"mem_used",
|
||||
"proc_total",
|
||||
"proc_used",
|
||||
"run_queue",
|
||||
"sockets_total",
|
||||
"sockets_used",
|
||||
}
|
||||
|
||||
for _, metric := range nodeIntMetrics {
|
||||
assert.True(t, acc.HasIntField("rabbitmq_node", metric))
|
||||
}
|
||||
|
||||
assert.True(t, acc.HasMeasurement("rabbitmq_queue"))
|
||||
}
|
||||
Reference in New Issue
Block a user