func TestZfsPoolMetrics(t *testing.T) { err := os.MkdirAll(testKstatPath, 0755) require.NoError(t, err) err = os.MkdirAll(testKstatPath+"/HOME", 0755) require.NoError(t, err) err = ioutil.WriteFile(testKstatPath+"/HOME/io", []byte(pool_ioContents), 0644) require.NoError(t, err) err = ioutil.WriteFile(testKstatPath+"/arcstats", []byte(arcstatsContents), 0644) require.NoError(t, err) poolMetrics := getPoolMetrics() var acc testutil.Accumulator z := &Zfs{KstatPath: testKstatPath, KstatMetrics: []string{"arcstats"}} err = z.Gather(&acc) require.NoError(t, err) require.False(t, acc.HasMeasurement("zfs_pool")) acc.Points = nil z = &Zfs{KstatPath: testKstatPath, KstatMetrics: []string{"arcstats"}, PoolMetrics: true} err = z.Gather(&acc) require.NoError(t, err) //one pool, all metrics tags := map[string]string{ "pool": "HOME", } acc.AssertContainsTaggedFields(t, "zfs_pool", poolMetrics, tags) err = os.RemoveAll(os.TempDir() + "/telegraf") require.NoError(t, err) }
func TestMemStats(t *testing.T) { var mps MockPS var err error defer mps.AssertExpectations(t) var acc testutil.Accumulator vms := &mem.VirtualMemoryStat{ Total: 12400, Available: 7600, Used: 5000, Free: 1235, // Active: 8134, // Inactive: 1124, // Buffers: 771, // Cached: 4312, // Wired: 134, // Shared: 2142, } mps.On("VMStat").Return(vms, nil) sms := &mem.SwapMemoryStat{ Total: 8123, Used: 1232, Free: 6412, UsedPercent: 12.2, Sin: 7, Sout: 830, } mps.On("SwapStat").Return(sms, nil) err = (&MemStats{&mps}).Gather(&acc) require.NoError(t, err) memfields := map[string]interface{}{ "total": uint64(12400), "available": uint64(7600), "used": uint64(5000), "available_percent": float64(7600) / float64(12400) * 100, "used_percent": float64(5000) / float64(12400) * 100, "free": uint64(1235), "cached": uint64(0), "buffered": uint64(0), } acc.AssertContainsTaggedFields(t, "mem", memfields, make(map[string]string)) acc.Points = nil err = (&SwapStats{&mps}).Gather(&acc) require.NoError(t, err) swapfields := map[string]interface{}{ "total": uint64(8123), "used": uint64(1232), "used_percent": float64(12.2), "free": uint64(6412), "in": uint64(7), "out": uint64(830), } acc.AssertContainsTaggedFields(t, "swap", swapfields, make(map[string]string)) }
func TestZfsGeneratesMetrics(t *testing.T) { err := os.MkdirAll(testKstatPath, 0755) require.NoError(t, err) err = os.MkdirAll(testKstatPath+"/HOME", 0755) require.NoError(t, err) err = ioutil.WriteFile(testKstatPath+"/HOME/io", []byte(""), 0644) require.NoError(t, err) err = ioutil.WriteFile(testKstatPath+"/arcstats", []byte(arcstatsContents), 0644) require.NoError(t, err) err = ioutil.WriteFile(testKstatPath+"/zfetchstats", []byte(zfetchstatsContents), 0644) require.NoError(t, err) err = ioutil.WriteFile(testKstatPath+"/vdev_cache_stats", []byte(vdev_cache_statsContents), 0644) require.NoError(t, err) intMetrics := getKstatMetricsAll() var acc testutil.Accumulator //one pool, all metrics tags := map[string]string{ "pools": "HOME", } z := &Zfs{KstatPath: testKstatPath} err = z.Gather(&acc) require.NoError(t, err) acc.AssertContainsTaggedFields(t, "zfs", intMetrics, tags) acc.Points = nil //two pools, all metrics err = os.MkdirAll(testKstatPath+"/STORAGE", 0755) require.NoError(t, err) err = ioutil.WriteFile(testKstatPath+"/STORAGE/io", []byte(""), 0644) require.NoError(t, err) tags = map[string]string{ "pools": "HOME::STORAGE", } z = &Zfs{KstatPath: testKstatPath} acc = testutil.Accumulator{} err = z.Gather(&acc) require.NoError(t, err) acc.AssertContainsTaggedFields(t, "zfs", intMetrics, tags) acc.Points = nil intMetrics = getKstatMetricsArcOnly() //two pools, one metric z = &Zfs{KstatPath: testKstatPath, KstatMetrics: []string{"arcstats"}} acc = testutil.Accumulator{} err = z.Gather(&acc) require.NoError(t, err) acc.AssertContainsTaggedFields(t, "zfs", intMetrics, tags) err = os.RemoveAll(os.TempDir() + "/telegraf") require.NoError(t, err) }
func TestNetStats(t *testing.T) { var mps MockPS var err error defer mps.AssertExpectations(t) var acc testutil.Accumulator netio := net.NetIOCountersStat{ Name: "eth0", BytesSent: 1123, BytesRecv: 8734422, PacketsSent: 781, PacketsRecv: 23456, Errin: 832, Errout: 8, Dropin: 7, Dropout: 1, } mps.On("NetIO").Return([]net.NetIOCountersStat{netio}, nil) netprotos := []net.NetProtoCountersStat{ net.NetProtoCountersStat{ Protocol: "Udp", Stats: map[string]int64{ "InDatagrams": 4655, "NoPorts": 892592, }, }, } mps.On("NetProto").Return(netprotos, nil) netstats := []net.NetConnectionStat{ net.NetConnectionStat{ Type: syscall.SOCK_DGRAM, }, net.NetConnectionStat{ Status: "ESTABLISHED", }, net.NetConnectionStat{ Status: "ESTABLISHED", }, net.NetConnectionStat{ Status: "CLOSE", }, } mps.On("NetConnections").Return(netstats, nil) err = (&NetIOStats{ps: &mps, skipChecks: true}).Gather(&acc) require.NoError(t, err) ntags := map[string]string{ "interface": "eth0", } fields1 := map[string]interface{}{ "bytes_sent": uint64(1123), "bytes_recv": uint64(8734422), "packets_sent": uint64(781), "packets_recv": uint64(23456), "err_in": uint64(832), "err_out": uint64(8), "drop_in": uint64(7), "drop_out": uint64(1), } acc.AssertContainsTaggedFields(t, "net", fields1, ntags) fields2 := map[string]interface{}{ "udp_noports": int64(892592), "udp_indatagrams": int64(4655), } acc.AssertContainsTaggedFields(t, "net", fields2, make(map[string]string)) acc.Points = nil err = (&NetStats{&mps}).Gather(&acc) require.NoError(t, err) fields3 := map[string]interface{}{ "tcp_established": 2, "tcp_syn_sent": 0, "tcp_syn_recv": 0, "tcp_fin_wait1": 0, "tcp_fin_wait2": 0, "tcp_time_wait": 0, "tcp_close": 1, "tcp_close_wait": 0, "tcp_last_ack": 0, "tcp_listen": 0, "tcp_closing": 0, "tcp_none": 0, "udp_socket": 1, } acc.AssertContainsTaggedFields(t, "netstat", fields3, make(map[string]string)) }