531 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			531 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			Go
		
	
	
	
package nsq
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"net/http"
 | 
						|
	"net/http/httptest"
 | 
						|
	"net/url"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/influxdata/telegraf/testutil"
 | 
						|
 | 
						|
	"github.com/stretchr/testify/require"
 | 
						|
)
 | 
						|
 | 
						|
func TestNSQStatsV1(t *testing.T) {
 | 
						|
	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
						|
		w.WriteHeader(http.StatusOK)
 | 
						|
		fmt.Fprintln(w, responseV1)
 | 
						|
	}))
 | 
						|
	defer ts.Close()
 | 
						|
 | 
						|
	n := &NSQ{
 | 
						|
		Endpoints: []string{ts.URL},
 | 
						|
	}
 | 
						|
 | 
						|
	var acc testutil.Accumulator
 | 
						|
	err := acc.GatherError(n.Gather)
 | 
						|
	require.NoError(t, err)
 | 
						|
 | 
						|
	u, err := url.Parse(ts.URL)
 | 
						|
	require.NoError(t, err)
 | 
						|
	host := u.Host
 | 
						|
 | 
						|
	// actually validate the tests
 | 
						|
	tests := []struct {
 | 
						|
		m string
 | 
						|
		f map[string]interface{}
 | 
						|
		g map[string]string
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			"nsq_server",
 | 
						|
			map[string]interface{}{
 | 
						|
				"server_count": int64(1),
 | 
						|
				"topic_count":  int64(2),
 | 
						|
			},
 | 
						|
			map[string]string{
 | 
						|
				"server_host":    host,
 | 
						|
				"server_version": "1.0.0-compat",
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			"nsq_topic",
 | 
						|
			map[string]interface{}{
 | 
						|
				"depth":         int64(12),
 | 
						|
				"backend_depth": int64(13),
 | 
						|
				"message_count": int64(14),
 | 
						|
				"channel_count": int64(1),
 | 
						|
			},
 | 
						|
			map[string]string{
 | 
						|
				"server_host":    host,
 | 
						|
				"server_version": "1.0.0-compat",
 | 
						|
				"topic":          "t1"},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			"nsq_channel",
 | 
						|
			map[string]interface{}{
 | 
						|
				"depth":          int64(0),
 | 
						|
				"backend_depth":  int64(1),
 | 
						|
				"inflight_count": int64(2),
 | 
						|
				"deferred_count": int64(3),
 | 
						|
				"message_count":  int64(4),
 | 
						|
				"requeue_count":  int64(5),
 | 
						|
				"timeout_count":  int64(6),
 | 
						|
				"client_count":   int64(1),
 | 
						|
			},
 | 
						|
			map[string]string{
 | 
						|
				"server_host":    host,
 | 
						|
				"server_version": "1.0.0-compat",
 | 
						|
				"topic":          "t1",
 | 
						|
				"channel":        "c1",
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			"nsq_client",
 | 
						|
			map[string]interface{}{
 | 
						|
				"ready_count":    int64(200),
 | 
						|
				"inflight_count": int64(7),
 | 
						|
				"message_count":  int64(8),
 | 
						|
				"finish_count":   int64(9),
 | 
						|
				"requeue_count":  int64(10),
 | 
						|
			},
 | 
						|
			map[string]string{"server_host": host, "server_version": "1.0.0-compat",
 | 
						|
				"topic": "t1", "channel": "c1",
 | 
						|
				"client_id": "373a715cd990", "client_hostname": "373a715cd990",
 | 
						|
				"client_version": "V2", "client_address": "172.17.0.11:35560",
 | 
						|
				"client_tls": "false", "client_snappy": "false",
 | 
						|
				"client_deflate":    "false",
 | 
						|
				"client_user_agent": "nsq_to_nsq/0.3.6 go-nsq/1.0.5"},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			"nsq_topic",
 | 
						|
			map[string]interface{}{
 | 
						|
				"depth":         int64(28),
 | 
						|
				"backend_depth": int64(29),
 | 
						|
				"message_count": int64(30),
 | 
						|
				"channel_count": int64(1),
 | 
						|
			},
 | 
						|
			map[string]string{
 | 
						|
				"server_host":    host,
 | 
						|
				"server_version": "1.0.0-compat",
 | 
						|
				"topic":          "t2"},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			"nsq_channel",
 | 
						|
			map[string]interface{}{
 | 
						|
				"depth":          int64(15),
 | 
						|
				"backend_depth":  int64(16),
 | 
						|
				"inflight_count": int64(17),
 | 
						|
				"deferred_count": int64(18),
 | 
						|
				"message_count":  int64(19),
 | 
						|
				"requeue_count":  int64(20),
 | 
						|
				"timeout_count":  int64(21),
 | 
						|
				"client_count":   int64(1),
 | 
						|
			},
 | 
						|
			map[string]string{
 | 
						|
				"server_host":    host,
 | 
						|
				"server_version": "1.0.0-compat",
 | 
						|
				"topic":          "t2",
 | 
						|
				"channel":        "c2",
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			"nsq_client",
 | 
						|
			map[string]interface{}{
 | 
						|
				"ready_count":    int64(22),
 | 
						|
				"inflight_count": int64(23),
 | 
						|
				"message_count":  int64(24),
 | 
						|
				"finish_count":   int64(25),
 | 
						|
				"requeue_count":  int64(26),
 | 
						|
			},
 | 
						|
			map[string]string{"server_host": host, "server_version": "1.0.0-compat",
 | 
						|
				"topic": "t2", "channel": "c2",
 | 
						|
				"client_id": "377569bd462b", "client_hostname": "377569bd462b",
 | 
						|
				"client_version": "V2", "client_address": "172.17.0.8:48145",
 | 
						|
				"client_user_agent": "go-nsq/1.0.5", "client_tls": "true",
 | 
						|
				"client_snappy": "true", "client_deflate": "true"},
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, test := range tests {
 | 
						|
		acc.AssertContainsTaggedFields(t, test.m, test.f, test.g)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// v1 version of localhost/stats?format=json reesponse body
 | 
						|
var responseV1 = `
 | 
						|
{
 | 
						|
    "version": "1.0.0-compat",
 | 
						|
    "health": "OK",
 | 
						|
    "start_time": 1452021674,
 | 
						|
    "topics": [
 | 
						|
      {
 | 
						|
        "topic_name": "t1",
 | 
						|
        "channels": [
 | 
						|
          {
 | 
						|
            "channel_name": "c1",
 | 
						|
            "depth": 0,
 | 
						|
            "backend_depth": 1,
 | 
						|
            "in_flight_count": 2,
 | 
						|
            "deferred_count": 3,
 | 
						|
            "message_count": 4,
 | 
						|
            "requeue_count": 5,
 | 
						|
            "timeout_count": 6,
 | 
						|
            "clients": [
 | 
						|
              {
 | 
						|
                "client_id": "373a715cd990",
 | 
						|
                "hostname": "373a715cd990",
 | 
						|
                "version": "V2",
 | 
						|
                "remote_address": "172.17.0.11:35560",
 | 
						|
                "state": 3,
 | 
						|
                "ready_count": 200,
 | 
						|
                "in_flight_count": 7,
 | 
						|
                "message_count": 8,
 | 
						|
                "finish_count": 9,
 | 
						|
                "requeue_count": 10,
 | 
						|
                "connect_ts": 1452021675,
 | 
						|
                "sample_rate": 11,
 | 
						|
                "deflate": false,
 | 
						|
                "snappy": false,
 | 
						|
                "user_agent": "nsq_to_nsq\/0.3.6 go-nsq\/1.0.5",
 | 
						|
                "tls": false,
 | 
						|
                "tls_cipher_suite": "",
 | 
						|
                "tls_version": "",
 | 
						|
                "tls_negotiated_protocol": "",
 | 
						|
                "tls_negotiated_protocol_is_mutual": false
 | 
						|
              }
 | 
						|
            ],
 | 
						|
            "paused": false,
 | 
						|
            "e2e_processing_latency": {
 | 
						|
              "count": 0,
 | 
						|
              "percentiles": null
 | 
						|
            }
 | 
						|
          }
 | 
						|
        ],
 | 
						|
        "depth": 12,
 | 
						|
        "backend_depth": 13,
 | 
						|
        "message_count": 14,
 | 
						|
        "paused": false,
 | 
						|
        "e2e_processing_latency": {
 | 
						|
          "count": 0,
 | 
						|
          "percentiles": null
 | 
						|
        }
 | 
						|
      },
 | 
						|
      {
 | 
						|
        "topic_name": "t2",
 | 
						|
        "channels": [
 | 
						|
          {
 | 
						|
            "channel_name": "c2",
 | 
						|
            "depth": 15,
 | 
						|
            "backend_depth": 16,
 | 
						|
            "in_flight_count": 17,
 | 
						|
            "deferred_count": 18,
 | 
						|
            "message_count": 19,
 | 
						|
            "requeue_count": 20,
 | 
						|
            "timeout_count": 21,
 | 
						|
            "clients": [
 | 
						|
              {
 | 
						|
                "client_id": "377569bd462b",
 | 
						|
                "hostname": "377569bd462b",
 | 
						|
                "version": "V2",
 | 
						|
                "remote_address": "172.17.0.8:48145",
 | 
						|
                "state": 3,
 | 
						|
                "ready_count": 22,
 | 
						|
                "in_flight_count": 23,
 | 
						|
                "message_count": 24,
 | 
						|
                "finish_count": 25,
 | 
						|
                "requeue_count": 26,
 | 
						|
                "connect_ts": 1452021678,
 | 
						|
                "sample_rate": 27,
 | 
						|
                "deflate": true,
 | 
						|
                "snappy": true,
 | 
						|
                "user_agent": "go-nsq\/1.0.5",
 | 
						|
                "tls": true,
 | 
						|
                "tls_cipher_suite": "",
 | 
						|
                "tls_version": "",
 | 
						|
                "tls_negotiated_protocol": "",
 | 
						|
                "tls_negotiated_protocol_is_mutual": false
 | 
						|
              }
 | 
						|
            ],
 | 
						|
            "paused": false,
 | 
						|
            "e2e_processing_latency": {
 | 
						|
              "count": 0,
 | 
						|
              "percentiles": null
 | 
						|
            }
 | 
						|
          }
 | 
						|
        ],
 | 
						|
        "depth": 28,
 | 
						|
        "backend_depth": 29,
 | 
						|
        "message_count": 30,
 | 
						|
        "paused": false,
 | 
						|
        "e2e_processing_latency": {
 | 
						|
          "count": 0,
 | 
						|
          "percentiles": null
 | 
						|
        }
 | 
						|
      }
 | 
						|
    ]
 | 
						|
  }
 | 
						|
 | 
						|
`
 | 
						|
 | 
						|
// TestNSQStatsPreV1 is for backwards compatibility with nsq versions < 1.0
 | 
						|
func TestNSQStatsPreV1(t *testing.T) {
 | 
						|
	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
 | 
						|
		w.WriteHeader(http.StatusOK)
 | 
						|
		fmt.Fprintln(w, responsePreV1)
 | 
						|
	}))
 | 
						|
	defer ts.Close()
 | 
						|
 | 
						|
	n := &NSQ{
 | 
						|
		Endpoints: []string{ts.URL},
 | 
						|
	}
 | 
						|
 | 
						|
	var acc testutil.Accumulator
 | 
						|
	err := acc.GatherError(n.Gather)
 | 
						|
	require.NoError(t, err)
 | 
						|
 | 
						|
	u, err := url.Parse(ts.URL)
 | 
						|
	require.NoError(t, err)
 | 
						|
	host := u.Host
 | 
						|
 | 
						|
	// actually validate the tests
 | 
						|
	tests := []struct {
 | 
						|
		m string
 | 
						|
		f map[string]interface{}
 | 
						|
		g map[string]string
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			"nsq_server",
 | 
						|
			map[string]interface{}{
 | 
						|
				"server_count": int64(1),
 | 
						|
				"topic_count":  int64(2),
 | 
						|
			},
 | 
						|
			map[string]string{
 | 
						|
				"server_host":    host,
 | 
						|
				"server_version": "0.3.6",
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			"nsq_topic",
 | 
						|
			map[string]interface{}{
 | 
						|
				"depth":         int64(12),
 | 
						|
				"backend_depth": int64(13),
 | 
						|
				"message_count": int64(14),
 | 
						|
				"channel_count": int64(1),
 | 
						|
			},
 | 
						|
			map[string]string{
 | 
						|
				"server_host":    host,
 | 
						|
				"server_version": "0.3.6",
 | 
						|
				"topic":          "t1"},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			"nsq_channel",
 | 
						|
			map[string]interface{}{
 | 
						|
				"depth":          int64(0),
 | 
						|
				"backend_depth":  int64(1),
 | 
						|
				"inflight_count": int64(2),
 | 
						|
				"deferred_count": int64(3),
 | 
						|
				"message_count":  int64(4),
 | 
						|
				"requeue_count":  int64(5),
 | 
						|
				"timeout_count":  int64(6),
 | 
						|
				"client_count":   int64(1),
 | 
						|
			},
 | 
						|
			map[string]string{
 | 
						|
				"server_host":    host,
 | 
						|
				"server_version": "0.3.6",
 | 
						|
				"topic":          "t1",
 | 
						|
				"channel":        "c1",
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			"nsq_client",
 | 
						|
			map[string]interface{}{
 | 
						|
				"ready_count":    int64(200),
 | 
						|
				"inflight_count": int64(7),
 | 
						|
				"message_count":  int64(8),
 | 
						|
				"finish_count":   int64(9),
 | 
						|
				"requeue_count":  int64(10),
 | 
						|
			},
 | 
						|
			map[string]string{"server_host": host, "server_version": "0.3.6",
 | 
						|
				"topic": "t1", "channel": "c1", "client_name": "373a715cd990",
 | 
						|
				"client_id": "373a715cd990", "client_hostname": "373a715cd990",
 | 
						|
				"client_version": "V2", "client_address": "172.17.0.11:35560",
 | 
						|
				"client_tls": "false", "client_snappy": "false",
 | 
						|
				"client_deflate":    "false",
 | 
						|
				"client_user_agent": "nsq_to_nsq/0.3.6 go-nsq/1.0.5"},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			"nsq_topic",
 | 
						|
			map[string]interface{}{
 | 
						|
				"depth":         int64(28),
 | 
						|
				"backend_depth": int64(29),
 | 
						|
				"message_count": int64(30),
 | 
						|
				"channel_count": int64(1),
 | 
						|
			},
 | 
						|
			map[string]string{
 | 
						|
				"server_host":    host,
 | 
						|
				"server_version": "0.3.6",
 | 
						|
				"topic":          "t2"},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			"nsq_channel",
 | 
						|
			map[string]interface{}{
 | 
						|
				"depth":          int64(15),
 | 
						|
				"backend_depth":  int64(16),
 | 
						|
				"inflight_count": int64(17),
 | 
						|
				"deferred_count": int64(18),
 | 
						|
				"message_count":  int64(19),
 | 
						|
				"requeue_count":  int64(20),
 | 
						|
				"timeout_count":  int64(21),
 | 
						|
				"client_count":   int64(1),
 | 
						|
			},
 | 
						|
			map[string]string{
 | 
						|
				"server_host":    host,
 | 
						|
				"server_version": "0.3.6",
 | 
						|
				"topic":          "t2",
 | 
						|
				"channel":        "c2",
 | 
						|
			},
 | 
						|
		},
 | 
						|
		{
 | 
						|
			"nsq_client",
 | 
						|
			map[string]interface{}{
 | 
						|
				"ready_count":    int64(22),
 | 
						|
				"inflight_count": int64(23),
 | 
						|
				"message_count":  int64(24),
 | 
						|
				"finish_count":   int64(25),
 | 
						|
				"requeue_count":  int64(26),
 | 
						|
			},
 | 
						|
			map[string]string{"server_host": host, "server_version": "0.3.6",
 | 
						|
				"topic": "t2", "channel": "c2", "client_name": "377569bd462b",
 | 
						|
				"client_id": "377569bd462b", "client_hostname": "377569bd462b",
 | 
						|
				"client_version": "V2", "client_address": "172.17.0.8:48145",
 | 
						|
				"client_user_agent": "go-nsq/1.0.5", "client_tls": "true",
 | 
						|
				"client_snappy": "true", "client_deflate": "true"},
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, test := range tests {
 | 
						|
		acc.AssertContainsTaggedFields(t, test.m, test.f, test.g)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
var responsePreV1 = `
 | 
						|
{
 | 
						|
  "status_code": 200,
 | 
						|
  "status_txt": "OK",
 | 
						|
  "data": {
 | 
						|
    "version": "0.3.6",
 | 
						|
    "health": "OK",
 | 
						|
    "start_time": 1452021674,
 | 
						|
    "topics": [
 | 
						|
      {
 | 
						|
        "topic_name": "t1",
 | 
						|
        "channels": [
 | 
						|
          {
 | 
						|
            "channel_name": "c1",
 | 
						|
            "depth": 0,
 | 
						|
            "backend_depth": 1,
 | 
						|
            "in_flight_count": 2,
 | 
						|
            "deferred_count": 3,
 | 
						|
            "message_count": 4,
 | 
						|
            "requeue_count": 5,
 | 
						|
            "timeout_count": 6,
 | 
						|
            "clients": [
 | 
						|
              {
 | 
						|
                "name": "373a715cd990",
 | 
						|
                "client_id": "373a715cd990",
 | 
						|
                "hostname": "373a715cd990",
 | 
						|
                "version": "V2",
 | 
						|
                "remote_address": "172.17.0.11:35560",
 | 
						|
                "state": 3,
 | 
						|
                "ready_count": 200,
 | 
						|
                "in_flight_count": 7,
 | 
						|
                "message_count": 8,
 | 
						|
                "finish_count": 9,
 | 
						|
                "requeue_count": 10,
 | 
						|
                "connect_ts": 1452021675,
 | 
						|
                "sample_rate": 11,
 | 
						|
                "deflate": false,
 | 
						|
                "snappy": false,
 | 
						|
                "user_agent": "nsq_to_nsq\/0.3.6 go-nsq\/1.0.5",
 | 
						|
                "tls": false,
 | 
						|
                "tls_cipher_suite": "",
 | 
						|
                "tls_version": "",
 | 
						|
                "tls_negotiated_protocol": "",
 | 
						|
                "tls_negotiated_protocol_is_mutual": false
 | 
						|
              }
 | 
						|
            ],
 | 
						|
            "paused": false,
 | 
						|
            "e2e_processing_latency": {
 | 
						|
              "count": 0,
 | 
						|
              "percentiles": null
 | 
						|
            }
 | 
						|
          }
 | 
						|
        ],
 | 
						|
        "depth": 12,
 | 
						|
        "backend_depth": 13,
 | 
						|
        "message_count": 14,
 | 
						|
        "paused": false,
 | 
						|
        "e2e_processing_latency": {
 | 
						|
          "count": 0,
 | 
						|
          "percentiles": null
 | 
						|
        }
 | 
						|
      },
 | 
						|
      {
 | 
						|
        "topic_name": "t2",
 | 
						|
        "channels": [
 | 
						|
          {
 | 
						|
            "channel_name": "c2",
 | 
						|
            "depth": 15,
 | 
						|
            "backend_depth": 16,
 | 
						|
            "in_flight_count": 17,
 | 
						|
            "deferred_count": 18,
 | 
						|
            "message_count": 19,
 | 
						|
            "requeue_count": 20,
 | 
						|
            "timeout_count": 21,
 | 
						|
            "clients": [
 | 
						|
              {
 | 
						|
                "name": "377569bd462b",
 | 
						|
                "client_id": "377569bd462b",
 | 
						|
                "hostname": "377569bd462b",
 | 
						|
                "version": "V2",
 | 
						|
                "remote_address": "172.17.0.8:48145",
 | 
						|
                "state": 3,
 | 
						|
                "ready_count": 22,
 | 
						|
                "in_flight_count": 23,
 | 
						|
                "message_count": 24,
 | 
						|
                "finish_count": 25,
 | 
						|
                "requeue_count": 26,
 | 
						|
                "connect_ts": 1452021678,
 | 
						|
                "sample_rate": 27,
 | 
						|
                "deflate": true,
 | 
						|
                "snappy": true,
 | 
						|
                "user_agent": "go-nsq\/1.0.5",
 | 
						|
                "tls": true,
 | 
						|
                "tls_cipher_suite": "",
 | 
						|
                "tls_version": "",
 | 
						|
                "tls_negotiated_protocol": "",
 | 
						|
                "tls_negotiated_protocol_is_mutual": false
 | 
						|
              }
 | 
						|
            ],
 | 
						|
            "paused": false,
 | 
						|
            "e2e_processing_latency": {
 | 
						|
              "count": 0,
 | 
						|
              "percentiles": null
 | 
						|
            }
 | 
						|
          }
 | 
						|
        ],
 | 
						|
        "depth": 28,
 | 
						|
        "backend_depth": 29,
 | 
						|
        "message_count": 30,
 | 
						|
        "paused": false,
 | 
						|
        "e2e_processing_latency": {
 | 
						|
          "count": 0,
 | 
						|
          "percentiles": null
 | 
						|
        }
 | 
						|
      }
 | 
						|
    ]
 | 
						|
  }
 | 
						|
}
 | 
						|
`
 |