func TestReadsMetricsFromKafka(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } brokerPeers := []string{testutil.GetLocalHost() + ":9092"} zkPeers := []string{testutil.GetLocalHost() + ":2181"} testTopic := fmt.Sprintf("telegraf_test_topic_%d", time.Now().Unix()) // Send a Kafka message to the kafka host msg := "cpu_load_short,direction=in,host=server01,region=us-west value=23422.0 1422568543702900257" producer, err := sarama.NewSyncProducer(brokerPeers, nil) require.NoError(t, err) _, _, err = producer.SendMessage( &sarama.ProducerMessage{ Topic: testTopic, Value: sarama.StringEncoder(msg), }) require.NoError(t, err) defer producer.Close() // Start the Kafka Consumer k := &Kafka{ ConsumerGroup: "telegraf_test_consumers", Topics: []string{testTopic}, ZookeeperPeers: zkPeers, PointBuffer: 100000, Offset: "oldest", } if err := k.Start(); err != nil { t.Fatal(err.Error()) } else { defer k.Stop() } waitForPoint(k, t) // Verify that we can now gather the sent message var acc testutil.Accumulator // Sanity check assert.Equal(t, 0, len(acc.Points), "There should not be any points") // Gather points err = k.Gather(&acc) require.NoError(t, err) if len(acc.Points) == 1 { point := acc.Points[0] assert.Equal(t, "cpu_load_short", point.Measurement) assert.Equal(t, map[string]interface{}{"value": 23422.0}, point.Fields) assert.Equal(t, map[string]string{ "host": "server01", "direction": "in", "region": "us-west", }, point.Tags) assert.Equal(t, time.Unix(0, 1422568543702900257).Unix(), point.Time.Unix()) } else { t.Errorf("No points found in accumulator, expected 1") } }
func TestAerospikeStatistics(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } a := &Aerospike{ Servers: []string{testutil.GetLocalHost() + ":3000"}, } var acc testutil.Accumulator err := a.Gather(&acc) require.NoError(t, err) // Only use a few of the metrics asMetrics := []string{ "transactions", "stat_write_errs", "stat_read_reqs", "stat_write_reqs", } for _, metric := range asMetrics { assert.True(t, acc.HasIntValue(metric), metric) } }
func TestPostgresqlDefaultsToAllDatabases(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } p := &Postgresql{ Address: fmt.Sprintf("host=%s user=postgres sslmode=disable", testutil.GetLocalHost()), } var acc testutil.Accumulator err := p.Gather(&acc) require.NoError(t, err) var found bool for _, pnt := range acc.Points { if pnt.Measurement == "postgresql" { if pnt.Tags["db"] == "postgres" { found = true break } } } assert.True(t, found) }
func TestZookeeperGeneratesMetrics(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } z := &Zookeeper{ Servers: []string{testutil.GetLocalHost()}, } var acc testutil.Accumulator err := z.Gather(&acc) require.NoError(t, err) intMetrics := []string{ "avg_latency", "max_latency", "min_latency", "packets_received", "packets_sent", "outstanding_requests", "znode_count", "watch_count", "ephemerals_count", "approximate_data_size", "open_file_descriptor_count", "max_file_descriptor_count", } for _, metric := range intMetrics { assert.True(t, acc.HasIntValue(metric), metric) } }
func TestWrite(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } o := &OpenTSDB{ Host: testutil.GetLocalHost(), Port: 4242, Prefix: "prefix.test.", } // Verify that we can connect to the OpenTSDB instance err := o.Connect() require.NoError(t, err) // Verify that we can successfully write data to OpenTSDB err = o.Write(testutil.MockBatchPoints().Points()) require.NoError(t, err) // Verify postive and negative test cases of writing data bp := testutil.MockBatchPoints() bp.AddPoint(testutil.TestPoint(float64(1.0), "justametric.float")) bp.AddPoint(testutil.TestPoint(int64(123456789), "justametric.int")) bp.AddPoint(testutil.TestPoint(uint64(123456789012345), "justametric.uint")) bp.AddPoint(testutil.TestPoint("Lorem Ipsum", "justametric.string")) bp.AddPoint(testutil.TestPoint(float64(42.0), "justametric.anotherfloat")) err = o.Write(bp.Points()) require.NoError(t, err) }
func TestPostgresqlDefaultsToAllDatabases(t *testing.T) { p := &Postgresql{ Servers: []*Server{ { Address: fmt.Sprintf("host=%s user=postgres sslmode=disable", testutil.GetLocalHost()), }, }, } var acc testutil.Accumulator err := p.Gather(&acc) require.NoError(t, err) var found bool for _, pnt := range acc.Points { if pnt.Measurement == "xact_commit" { if pnt.Tags["db"] == "postgres" { found = true break } } } assert.True(t, found) }
func TestPostgresqlTagsMetricsWithDatabaseName(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } p := &Postgresql{ Servers: []*Server{ { Address: fmt.Sprintf("host=%s user=postgres sslmode=disable", testutil.GetLocalHost()), Databases: []string{"postgres"}, }, }, } var acc testutil.Accumulator err := p.Gather(&acc) require.NoError(t, err) point, ok := acc.Get("xact_commit") require.True(t, ok) assert.Equal(t, "postgres", point.Tags["db"]) }
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 TestMysqlGeneratesMetrics(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } m := &Mysql{ Servers: []string{fmt.Sprintf("root@tcp(%s:3306)/", testutil.GetLocalHost())}, } var acc testutil.Accumulator err := m.Gather(&acc) require.NoError(t, err) prefixes := []struct { prefix string count int }{ {"commands", 139}, {"handler", 16}, {"bytes", 2}, {"innodb", 46}, {"threads", 4}, {"aborted", 2}, {"created", 3}, {"key", 7}, {"open", 7}, {"opened", 3}, {"qcache", 8}, {"table", 1}, } intMetrics := []string{ "queries", "slow_queries", "connections", } for _, prefix := range prefixes { var count int for _, p := range acc.Points { if strings.HasPrefix(p.Measurement, prefix.prefix) { count++ } } if prefix.count > count { t.Errorf("Expected less than %d measurements with prefix %s, got %d", count, prefix.prefix, prefix.count) } } for _, metric := range intMetrics { assert.True(t, acc.HasIntValue(metric)) } }
func TestReadsMetricsFromKafka(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } var zkPeers, brokerPeers []string zkPeers = []string{testutil.GetLocalHost() + ":2181"} brokerPeers = []string{testutil.GetLocalHost() + ":9092"} k := &Kafka{ ConsumerGroupName: "telegraf_test_consumers", Topic: fmt.Sprintf("telegraf_test_topic_%d", time.Now().Unix()), ZookeeperPeers: zkPeers, } msg := "cpu_load_short,direction=in,host=server01,region=us-west value=23422.0 1422568543702900257" producer, err := sarama.NewSyncProducer(brokerPeers, nil) require.NoError(t, err) _, _, err = producer.SendMessage(&sarama.ProducerMessage{Topic: k.Topic, Value: sarama.StringEncoder(msg)}) require.NoError(t, err) producer.Close() var acc testutil.Accumulator // Sanity check assert.Equal(t, 0, len(acc.Points), "there should not be any points") err = k.Gather(&acc) require.NoError(t, err) assert.Equal(t, 1, len(acc.Points), "there should be a single point") point := acc.Points[0] assert.Equal(t, "cpu_load_short", point.Measurement) assert.Equal(t, map[string]interface{}{"value": 23422.0}, point.Values) assert.Equal(t, map[string]string{ "host": "server01", "direction": "in", "region": "us-west", }, point.Tags) assert.Equal(t, time.Unix(0, 1422568543702900257).Unix(), point.Time.Unix()) }
func TestMysqlDefaultsToLocal(t *testing.T) { m := &Mysql{ Servers: []string{fmt.Sprintf("root@tcp(%s:3306)/", testutil.GetLocalHost())}, } var acc testutil.Accumulator err := m.Gather(&acc) require.NoError(t, err) assert.True(t, len(acc.Points) > 0) }
func TestWrite(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } o := &OpenTSDB{ Host: testutil.GetLocalHost(), Port: 24242, Prefix: "prefix.test.", } // Verify that we can connect to the OpenTSDB instance err := o.Connect() require.NoError(t, err) // Verify that we can successfully write data to OpenTSDB err = o.Write(testutil.MockBatchPoints()) require.NoError(t, err) // Verify postive and negative test cases of writing data var bp client.BatchPoints bp.Time = time.Now() bp.Tags = map[string]string{"testkey": "testvalue"} bp.Points = []client.Point{ { Measurement: "justametric.float", Fields: map[string]interface{}{"value": float64(1.0)}, }, { Measurement: "justametric.int", Fields: map[string]interface{}{"value": int64(123456789)}, }, { Measurement: "justametric.uint", Fields: map[string]interface{}{"value": uint64(123456789012345)}, }, { Measurement: "justametric.string", Fields: map[string]interface{}{"value": "Lorem Ipsum"}, }, { Measurement: "justametric.anotherfloat", Fields: map[string]interface{}{"value": float64(42.0)}, }, } err = o.Write(bp) require.NoError(t, err) }
func TestPostgresqlGeneratesMetrics(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } p := &Postgresql{ Servers: []*Server{ { Address: fmt.Sprintf("host=%s user=postgres sslmode=disable", testutil.GetLocalHost()), Databases: []string{"postgres"}, }, }, } var acc testutil.Accumulator err := p.Gather(&acc) require.NoError(t, err) intMetrics := []string{ "xact_commit", "xact_rollback", "blks_read", "blks_hit", "tup_returned", "tup_fetched", "tup_inserted", "tup_updated", "tup_deleted", "conflicts", "temp_files", "temp_bytes", "deadlocks", } floatMetrics := []string{ "blk_read_time", "blk_write_time", } for _, metric := range intMetrics { assert.True(t, acc.HasIntValue(metric)) } for _, metric := range floatMetrics { assert.True(t, acc.HasFloatValue(metric)) } }
func TestMemcachedGeneratesMetrics(t *testing.T) { 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"} for _, metric := range intMetrics { assert.True(t, acc.HasIntValue(metric), metric) } }
func TestMysqlDefaultsToLocal(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } m := &Mysql{ Servers: []string{fmt.Sprintf("root@tcp(%s:3306)/", testutil.GetLocalHost())}, } var acc testutil.Accumulator err := m.Gather(&acc) require.NoError(t, err) assert.True(t, acc.HasMeasurement("mysql")) }
func TestRedisConnect(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } addr := fmt.Sprintf(testutil.GetLocalHost() + ":6379") r := &Redis{ Servers: []string{addr}, } var acc testutil.Accumulator err := r.Gather(&acc) require.NoError(t, err) }
func TestMysqlGeneratesMetrics(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } m := &Mysql{ Servers: []string{fmt.Sprintf("root@tcp(%s:3306)/", testutil.GetLocalHost())}, } var acc testutil.Accumulator err := m.Gather(&acc) require.NoError(t, err) prefixes := []struct { prefix string count int }{ {"commands", 141}, {"handler", 18}, {"bytes", 2}, {"innodb", 51}, {"threads", 4}, } intMetrics := []string{ "queries", "slow_queries", } for _, prefix := range prefixes { var count int for _, p := range acc.Points { if strings.HasPrefix(p.Measurement, prefix.prefix) { count++ } } assert.Equal(t, prefix.count, count) } for _, metric := range intMetrics { assert.True(t, acc.HasIntValue(metric)) } }
func TestConnectAndWrite(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } var url = testutil.GetLocalHost() + ":1883" m := &MQTT{ Servers: []string{url}, } // Verify that we can connect to the MQTT broker err := m.Connect() require.NoError(t, err) // Verify that we can successfully write data to the mqtt broker err = m.Write(testutil.MockBatchPoints().Points()) require.NoError(t, err) }
func TestConnectAndWrite(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } url := testutil.GetLocalHost() + ":5555" r := &Riemann{ URL: url, Transport: "tcp", } err := r.Connect() require.NoError(t, err) err = r.Write(testutil.MockBatchPoints().Points()) require.NoError(t, err) }
func TestConnectAndWrite(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } var url = "amqp://" + testutil.GetLocalHost() + ":5672/" q := &AMQP{ URL: url, Exchange: "telegraf_test", } // Verify that we can connect to the AMQP broker err := q.Connect() require.NoError(t, err) // Verify that we can successfully write data to the amqp broker err = q.Write(testutil.MockBatchPoints().Points()) require.NoError(t, err) }
func TestConnectAndWrite(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } brokers := []string{testutil.GetLocalHost() + ":9092"} k := &Kafka{ Brokers: brokers, Topic: "Test", } // Verify that we can connect to the Kafka broker err := k.Connect() require.NoError(t, err) // Verify that we can successfully write data to the kafka broker err = k.Write(testutil.MockBatchPoints().Points()) require.NoError(t, err) }
func TestConnectAndWrite(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } server := []string{testutil.GetLocalHost() + ":4150"} n := &NSQ{ Server: server[0], Topic: "telegraf", } // Verify that we can connect to the NSQ daemon err := n.Connect() require.NoError(t, err) // Verify that we can successfully write data to the NSQ daemon err = n.Write(testutil.MockBatchPoints().Points()) require.NoError(t, err) }
func TestPostgresqlIgnoresUnwantedColumns(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } p := &Postgresql{ Address: fmt.Sprintf("host=%s user=postgres 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)) } }
func TestWrite(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } o := &OpenTSDB{ Host: testutil.GetLocalHost(), Port: 24242, Prefix: "prefix.test.", } // Verify that we can connect to the OpenTSDB instance err := o.Connect() require.NoError(t, err) // Verify that we can successfully write data to OpenTSDB err = o.Write(testutil.MockBatchPoints().Points()) require.NoError(t, err) // Verify postive and negative test cases of writing data bp := testutil.MockBatchPoints() tags := make(map[string]string) bp.AddPoint(client.NewPoint("justametric.float", tags, map[string]interface{}{"value": float64(1.0)})) bp.AddPoint(client.NewPoint("justametric.int", tags, map[string]interface{}{"value": int64(123456789)})) bp.AddPoint(client.NewPoint("justametric.uint", tags, map[string]interface{}{"value": uint64(123456789012345)})) bp.AddPoint(client.NewPoint("justametric.string", tags, map[string]interface{}{"value": "Lorem Ipsum"})) bp.AddPoint(client.NewPoint("justametric.anotherfloat", tags, map[string]interface{}{"value": float64(42.0)})) err = o.Write(bp.Points()) require.NoError(t, err) }
func TestPostgresqlGeneratesMetrics(t *testing.T) { if testing.Short() { t.Skip("Skipping integration test in short mode") } p := &Postgresql{ Address: fmt.Sprintf("host=%s user=postgres sslmode=disable", testutil.GetLocalHost()), Databases: []string{"postgres"}, } var acc testutil.Accumulator err := p.Gather(&acc) require.NoError(t, err) availableColumns := make(map[string]bool) for _, col := range p.OrderedColumns { availableColumns[col] = true } intMetrics := []string{ "xact_commit", "xact_rollback", "blks_read", "blks_hit", "tup_returned", "tup_fetched", "tup_inserted", "tup_updated", "tup_deleted", "conflicts", "temp_files", "temp_bytes", "deadlocks", "numbackends", } floatMetrics := []string{ "blk_read_time", "blk_write_time", } metricsCounted := 0 for _, metric := range intMetrics { _, ok := availableColumns[metric] if ok { assert.True(t, acc.HasIntField("postgresql", metric)) metricsCounted++ } } for _, metric := range floatMetrics { _, ok := availableColumns[metric] if ok { assert.True(t, acc.HasFloatField("postgresql", metric)) metricsCounted++ } } assert.True(t, metricsCounted > 0) assert.Equal(t, len(availableColumns)-len(p.IgnoredColumns()), metricsCounted) }