-
Notifications
You must be signed in to change notification settings - Fork 5.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Tests for the lustre plugin, initial commit
- Loading branch information
Showing
1 changed file
with
144 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,144 @@ | ||
package lustre2 | ||
|
||
import ( | ||
"io/ioutil" | ||
"os" | ||
"testing" | ||
|
||
"github.com/influxdb/telegraf/testutil" | ||
"github.com/stretchr/testify/assert" | ||
"github.com/stretchr/testify/require" | ||
) | ||
|
||
// Set config file variables to point to fake directory structure instead of /proc? | ||
|
||
const obdfilterProcContents = `snapshot_time 1438693064.430544 secs.usecs | ||
read_bytes 203238095 samples [bytes] 4096 1048576 78026117632000 | ||
write_bytes 71893382 samples [bytes] 1 1048576 15201500833981 | ||
get_info 1182008495 samples [reqs] | ||
set_info_async 2 samples [reqs] | ||
connect 1117 samples [reqs] | ||
reconnect 1160 samples [reqs] | ||
disconnect 1084 samples [reqs] | ||
statfs 3575885 samples [reqs] | ||
create 698 samples [reqs] | ||
destroy 3190060 samples [reqs] | ||
setattr 605647 samples [reqs] | ||
punch 805187 samples [reqs] | ||
sync 6608753 samples [reqs] | ||
preprw 275131477 samples [reqs] | ||
commitrw 275131477 samples [reqs] | ||
quotactl 229231 samples [reqs] | ||
ping 78020757 samples [reqs] | ||
` | ||
|
||
const osdldiskfsProcContents = `snapshot_time 1438693135.640551 secs.usecs | ||
get_page 275132812 samples [usec] 0 3147 1320420955 22041662259 | ||
cache_access 19047063027 samples [pages] 1 1 19047063027 | ||
cache_hit 7393729777 samples [pages] 1 1 7393729777 | ||
cache_miss 11653333250 samples [pages] 1 1 11653333250 | ||
` | ||
|
||
const mdtProcContents = `snapshot_time 1438693238.20113 secs.usecs | ||
open 1024577037 samples [reqs] | ||
close 873243496 samples [reqs] | ||
mknod 349042 samples [reqs] | ||
link 445 samples [reqs] | ||
unlink 3549417 samples [reqs] | ||
mkdir 705499 samples [reqs] | ||
rmdir 227434 samples [reqs] | ||
rename 629196 samples [reqs] | ||
getattr 1503663097 samples [reqs] | ||
setattr 1898364 samples [reqs] | ||
getxattr 6145349681 samples [reqs] | ||
setxattr 83969 samples [reqs] | ||
statfs 2916320 samples [reqs] | ||
sync 434081 samples [reqs] | ||
samedir_rename 259625 samples [reqs] | ||
crossdir_rename 369571 samples [reqs] | ||
` | ||
|
||
type metrics struct { | ||
name string | ||
value uint64 | ||
} | ||
|
||
func TestLustre2GeneratesMetrics(t *testing.T) { | ||
|
||
tempdir := os.TempDir() + "/telegraf/proc/fs/lustre/" | ||
ost_name := "OST0001" | ||
|
||
mdtdir := tempdir + "/mdt/" | ||
err := os.MkdirAll(mdtdir+"/"+ost_name, 0755) | ||
require.NoError(t, err) | ||
|
||
osddir := tempdir + "/osd-ldiskfs/" | ||
err = os.MkdirAll(osddir+"/"+ost_name, 0755) | ||
require.NoError(t, err) | ||
|
||
obddir := tempdir + "/obdfilter/" | ||
err = os.MkdirAll(obddir+"/"+ost_name, 0755) | ||
require.NoError(t, err) | ||
|
||
err = ioutil.WriteFile(mdtdir+"/"+ost_name+"/md_stats", []byte(mdtProcContents), 0644) | ||
require.NoError(t, err) | ||
|
||
err = ioutil.WriteFile(osddir+"/"+ost_name+"/stats", []byte(osdldiskfsProcContents), 0644) | ||
require.NoError(t, err) | ||
|
||
err = ioutil.WriteFile(obddir+"/"+ost_name+"/stats", []byte(obdfilterProcContents), 0644) | ||
require.NoError(t, err) | ||
|
||
m := &Lustre2{ | ||
Ost_procfiles: []string{obddir + "/*/stats", osddir + "/*/stats"}, | ||
Mds_procfiles: []string{mdtdir + "/*/md_stats"}, | ||
} | ||
|
||
var acc testutil.Accumulator | ||
|
||
err = m.Gather(&acc) | ||
require.NoError(t, err) | ||
|
||
tags := map[string]string{ | ||
"name": ost_name, | ||
} | ||
|
||
intMetrics := []*metrics{ | ||
{ | ||
name: "write_bytes", | ||
value: 15201500833981, | ||
}, | ||
{ | ||
name: "read_bytes", | ||
value: 78026117632000, | ||
}, | ||
{ | ||
name: "write_calls", | ||
value: 71893382, | ||
}, | ||
{ | ||
name: "read_calls", | ||
value: 203238095, | ||
}, | ||
{ | ||
name: "cache_hit", | ||
value: 7393729777, | ||
}, | ||
{ | ||
name: "cache_access", | ||
value: 19047063027, | ||
}, | ||
{ | ||
name: "cache_miss", | ||
value: 11653333250, | ||
}, | ||
} | ||
|
||
for _, metric := range intMetrics { | ||
assert.True(t, acc.HasUIntValue(metric.name), metric.name) | ||
assert.True(t, acc.CheckTaggedValue(metric.name, metric.value, tags)) | ||
} | ||
|
||
err = os.RemoveAll(os.TempDir() + "/telegraf") | ||
require.NoError(t, err) | ||
} |