Add modification_time field to filestat input plugin (#3305)
This commit is contained in:
parent
80b60542fa
commit
60e24fa3a7
|
@ -20,6 +20,7 @@ The filestat plugin gathers metrics about file existence, size, and other stats.
|
||||||
- filestat
|
- filestat
|
||||||
- exists (int, 0 | 1)
|
- exists (int, 0 | 1)
|
||||||
- size_bytes (int, bytes)
|
- size_bytes (int, bytes)
|
||||||
|
- modification_time (int, unixtime)
|
||||||
- md5 (optional, string)
|
- md5 (optional, string)
|
||||||
|
|
||||||
### Tags:
|
### Tags:
|
||||||
|
@ -32,6 +33,6 @@ The filestat plugin gathers metrics about file existence, size, and other stats.
|
||||||
```
|
```
|
||||||
$ telegraf --config /etc/telegraf/telegraf.conf --input-filter filestat --test
|
$ telegraf --config /etc/telegraf/telegraf.conf --input-filter filestat --test
|
||||||
* Plugin: filestat, Collection 1
|
* Plugin: filestat, Collection 1
|
||||||
> filestat,file=/tmp/foo/bar,host=tyrion exists=0i 1461203374493128216
|
> filestat,file=/tmp/foo/bar,host=tyrion exists=0i 1507218518192154351
|
||||||
> filestat,file=/Users/sparrc/ws/telegraf.conf,host=tyrion exists=1i,size=47894i 1461203374493199335
|
> filestat,file=/Users/sparrc/ws/telegraf.conf,host=tyrion exists=1i,size=47894i,modification_time=1507152973123456789i 1507218518192154351
|
||||||
```
|
```
|
||||||
|
|
|
@ -86,6 +86,7 @@ func (f *FileStat) Gather(acc telegraf.Accumulator) error {
|
||||||
fileName)
|
fileName)
|
||||||
} else {
|
} else {
|
||||||
fields["size_bytes"] = fileInfo.Size()
|
fields["size_bytes"] = fileInfo.Size()
|
||||||
|
fields["modification_time"] = fileInfo.ModTime().UnixNano()
|
||||||
}
|
}
|
||||||
|
|
||||||
if f.Md5 {
|
if f.Md5 {
|
||||||
|
|
|
@ -26,24 +26,19 @@ func TestGatherNoMd5(t *testing.T) {
|
||||||
tags1 := map[string]string{
|
tags1 := map[string]string{
|
||||||
"file": dir + "log1.log",
|
"file": dir + "log1.log",
|
||||||
}
|
}
|
||||||
require.True(t, acc.HasPoint("filestat", tags1,
|
require.True(t, acc.HasPoint("filestat", tags1, "size_bytes", int64(0)))
|
||||||
"size_bytes", int64(0)))
|
require.True(t, acc.HasPoint("filestat", tags1, "exists", int64(1)))
|
||||||
require.True(t, acc.HasPoint("filestat", tags1,
|
|
||||||
"exists", int64(1)))
|
|
||||||
|
|
||||||
tags2 := map[string]string{
|
tags2 := map[string]string{
|
||||||
"file": dir + "log2.log",
|
"file": dir + "log2.log",
|
||||||
}
|
}
|
||||||
require.True(t, acc.HasPoint("filestat", tags2,
|
require.True(t, acc.HasPoint("filestat", tags2, "size_bytes", int64(0)))
|
||||||
"size_bytes", int64(0)))
|
require.True(t, acc.HasPoint("filestat", tags2, "exists", int64(1)))
|
||||||
require.True(t, acc.HasPoint("filestat", tags2,
|
|
||||||
"exists", int64(1)))
|
|
||||||
|
|
||||||
tags3 := map[string]string{
|
tags3 := map[string]string{
|
||||||
"file": "/non/existant/file",
|
"file": "/non/existant/file",
|
||||||
}
|
}
|
||||||
require.True(t, acc.HasPoint("filestat", tags3,
|
require.True(t, acc.HasPoint("filestat", tags3, "exists", int64(0)))
|
||||||
"exists", int64(0)))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGatherExplicitFiles(t *testing.T) {
|
func TestGatherExplicitFiles(t *testing.T) {
|
||||||
|
@ -62,28 +57,21 @@ func TestGatherExplicitFiles(t *testing.T) {
|
||||||
tags1 := map[string]string{
|
tags1 := map[string]string{
|
||||||
"file": dir + "log1.log",
|
"file": dir + "log1.log",
|
||||||
}
|
}
|
||||||
require.True(t, acc.HasPoint("filestat", tags1,
|
require.True(t, acc.HasPoint("filestat", tags1, "size_bytes", int64(0)))
|
||||||
"size_bytes", int64(0)))
|
require.True(t, acc.HasPoint("filestat", tags1, "exists", int64(1)))
|
||||||
require.True(t, acc.HasPoint("filestat", tags1,
|
require.True(t, acc.HasPoint("filestat", tags1, "md5_sum", "d41d8cd98f00b204e9800998ecf8427e"))
|
||||||
"exists", int64(1)))
|
|
||||||
require.True(t, acc.HasPoint("filestat", tags1,
|
|
||||||
"md5_sum", "d41d8cd98f00b204e9800998ecf8427e"))
|
|
||||||
|
|
||||||
tags2 := map[string]string{
|
tags2 := map[string]string{
|
||||||
"file": dir + "log2.log",
|
"file": dir + "log2.log",
|
||||||
}
|
}
|
||||||
require.True(t, acc.HasPoint("filestat", tags2,
|
require.True(t, acc.HasPoint("filestat", tags2, "size_bytes", int64(0)))
|
||||||
"size_bytes", int64(0)))
|
require.True(t, acc.HasPoint("filestat", tags2, "exists", int64(1)))
|
||||||
require.True(t, acc.HasPoint("filestat", tags2,
|
require.True(t, acc.HasPoint("filestat", tags2, "md5_sum", "d41d8cd98f00b204e9800998ecf8427e"))
|
||||||
"exists", int64(1)))
|
|
||||||
require.True(t, acc.HasPoint("filestat", tags2,
|
|
||||||
"md5_sum", "d41d8cd98f00b204e9800998ecf8427e"))
|
|
||||||
|
|
||||||
tags3 := map[string]string{
|
tags3 := map[string]string{
|
||||||
"file": "/non/existant/file",
|
"file": "/non/existant/file",
|
||||||
}
|
}
|
||||||
require.True(t, acc.HasPoint("filestat", tags3,
|
require.True(t, acc.HasPoint("filestat", tags3, "exists", int64(0)))
|
||||||
"exists", int64(0)))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGatherGlob(t *testing.T) {
|
func TestGatherGlob(t *testing.T) {
|
||||||
|
@ -100,22 +88,16 @@ func TestGatherGlob(t *testing.T) {
|
||||||
tags1 := map[string]string{
|
tags1 := map[string]string{
|
||||||
"file": dir + "log1.log",
|
"file": dir + "log1.log",
|
||||||
}
|
}
|
||||||
fields1 := map[string]interface{}{
|
require.True(t, acc.HasPoint("filestat", tags1, "size_bytes", int64(0)))
|
||||||
"size_bytes": int64(0),
|
require.True(t, acc.HasPoint("filestat", tags1, "exists", int64(1)))
|
||||||
"exists": int64(1),
|
require.True(t, acc.HasPoint("filestat", tags1, "md5_sum", "d41d8cd98f00b204e9800998ecf8427e"))
|
||||||
"md5_sum": "d41d8cd98f00b204e9800998ecf8427e",
|
|
||||||
}
|
|
||||||
acc.AssertContainsTaggedFields(t, "filestat", fields1, tags1)
|
|
||||||
|
|
||||||
tags2 := map[string]string{
|
tags2 := map[string]string{
|
||||||
"file": dir + "log2.log",
|
"file": dir + "log2.log",
|
||||||
}
|
}
|
||||||
fields2 := map[string]interface{}{
|
require.True(t, acc.HasPoint("filestat", tags2, "size_bytes", int64(0)))
|
||||||
"size_bytes": int64(0),
|
require.True(t, acc.HasPoint("filestat", tags2, "exists", int64(1)))
|
||||||
"exists": int64(1),
|
require.True(t, acc.HasPoint("filestat", tags2, "md5_sum", "d41d8cd98f00b204e9800998ecf8427e"))
|
||||||
"md5_sum": "d41d8cd98f00b204e9800998ecf8427e",
|
|
||||||
}
|
|
||||||
acc.AssertContainsTaggedFields(t, "filestat", fields2, tags2)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGatherSuperAsterisk(t *testing.T) {
|
func TestGatherSuperAsterisk(t *testing.T) {
|
||||||
|
@ -132,32 +114,57 @@ func TestGatherSuperAsterisk(t *testing.T) {
|
||||||
tags1 := map[string]string{
|
tags1 := map[string]string{
|
||||||
"file": dir + "log1.log",
|
"file": dir + "log1.log",
|
||||||
}
|
}
|
||||||
require.True(t, acc.HasPoint("filestat", tags1,
|
require.True(t, acc.HasPoint("filestat", tags1, "size_bytes", int64(0)))
|
||||||
"size_bytes", int64(0)))
|
require.True(t, acc.HasPoint("filestat", tags1, "exists", int64(1)))
|
||||||
require.True(t, acc.HasPoint("filestat", tags1,
|
require.True(t, acc.HasPoint("filestat", tags1, "md5_sum", "d41d8cd98f00b204e9800998ecf8427e"))
|
||||||
"exists", int64(1)))
|
|
||||||
require.True(t, acc.HasPoint("filestat", tags1,
|
|
||||||
"md5_sum", "d41d8cd98f00b204e9800998ecf8427e"))
|
|
||||||
|
|
||||||
tags2 := map[string]string{
|
tags2 := map[string]string{
|
||||||
"file": dir + "log2.log",
|
"file": dir + "log2.log",
|
||||||
}
|
}
|
||||||
require.True(t, acc.HasPoint("filestat", tags2,
|
require.True(t, acc.HasPoint("filestat", tags2, "size_bytes", int64(0)))
|
||||||
"size_bytes", int64(0)))
|
require.True(t, acc.HasPoint("filestat", tags2, "exists", int64(1)))
|
||||||
require.True(t, acc.HasPoint("filestat", tags2,
|
require.True(t, acc.HasPoint("filestat", tags2, "md5_sum", "d41d8cd98f00b204e9800998ecf8427e"))
|
||||||
"exists", int64(1)))
|
|
||||||
require.True(t, acc.HasPoint("filestat", tags2,
|
|
||||||
"md5_sum", "d41d8cd98f00b204e9800998ecf8427e"))
|
|
||||||
|
|
||||||
tags3 := map[string]string{
|
tags3 := map[string]string{
|
||||||
"file": dir + "test.conf",
|
"file": dir + "test.conf",
|
||||||
}
|
}
|
||||||
require.True(t, acc.HasPoint("filestat", tags3,
|
require.True(t, acc.HasPoint("filestat", tags3, "size_bytes", int64(104)))
|
||||||
"size_bytes", int64(104)))
|
require.True(t, acc.HasPoint("filestat", tags3, "exists", int64(1)))
|
||||||
require.True(t, acc.HasPoint("filestat", tags3,
|
require.True(t, acc.HasPoint("filestat", tags3, "md5_sum", "5a7e9b77fa25e7bb411dbd17cf403c1f"))
|
||||||
"exists", int64(1)))
|
}
|
||||||
require.True(t, acc.HasPoint("filestat", tags3,
|
|
||||||
"md5_sum", "5a7e9b77fa25e7bb411dbd17cf403c1f"))
|
func TestModificationTime(t *testing.T) {
|
||||||
|
dir := getTestdataDir()
|
||||||
|
fs := NewFileStat()
|
||||||
|
fs.Files = []string{
|
||||||
|
dir + "log1.log",
|
||||||
|
}
|
||||||
|
|
||||||
|
acc := testutil.Accumulator{}
|
||||||
|
acc.GatherError(fs.Gather)
|
||||||
|
|
||||||
|
tags1 := map[string]string{
|
||||||
|
"file": dir + "log1.log",
|
||||||
|
}
|
||||||
|
require.True(t, acc.HasPoint("filestat", tags1, "size_bytes", int64(0)))
|
||||||
|
require.True(t, acc.HasPoint("filestat", tags1, "exists", int64(1)))
|
||||||
|
require.True(t, acc.HasInt64Field("filestat", "modification_time"))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNoModificationTime(t *testing.T) {
|
||||||
|
fs := NewFileStat()
|
||||||
|
fs.Files = []string{
|
||||||
|
"/non/existant/file",
|
||||||
|
}
|
||||||
|
|
||||||
|
acc := testutil.Accumulator{}
|
||||||
|
acc.GatherError(fs.Gather)
|
||||||
|
|
||||||
|
tags1 := map[string]string{
|
||||||
|
"file": "/non/existant/file",
|
||||||
|
}
|
||||||
|
require.True(t, acc.HasPoint("filestat", tags1, "exists", int64(0)))
|
||||||
|
require.False(t, acc.HasInt64Field("filestat", "modification_time"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetMd5(t *testing.T) {
|
func TestGetMd5(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue