master
go 59 lines 1.26 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package filecheck
4
5 import (
6 "fmt"
7 "os"
8 "time"
9 )
10
11 func (c *Collector) collectFiles(mx map[string]int64) {
12 now := time.Now()
13
14 if c.isTimeToDiscoverFiles(now) {
15 c.lastDiscFilesTime = now
16 c.curFiles = c.discoverFiles()
17 }
18
19 var infos []*statInfo
20
21 for _, file := range c.curFiles {
22 si := getStatInfo(file)
23
24 infos = append(infos, si)
25
26 c.collectFile(mx, si, now)
27 }
28
29 c.updateFileCharts(infos)
30 }
31
32 func (c *Collector) collectFile(mx map[string]int64, si *statInfo, now time.Time) {
33 px := fmt.Sprintf("file_%s_", si.path)
34
35 mx[px+"existence_status_exist"] = 0
36 mx[px+"existence_status_not_exist"] = 0
37 if !si.exists {
38 mx[px+"existence_status_not_exist"] = 1
39 } else {
40 mx[px+"existence_status_exist"] = 1
41 }
42
43 if si.fi == nil || !si.fi.Mode().IsRegular() {
44 return
45 }
46
47 mx[px+"mtime_ago"] = int64(now.Sub(si.fi.ModTime()).Seconds())
48 mx[px+"size_bytes"] = si.fi.Size()
49 }
50
51 func (c *Collector) discoverFiles() (files []string) {
52 return discoverFilesOrDirs(c.Files.Include, func(absPath string, fi os.FileInfo) bool {
53 return fi.Mode().IsRegular() && !c.filesFilter.MatchString(absPath)
54 })
55 }
56
57 func (c *Collector) isTimeToDiscoverFiles(now time.Time) bool {
58 return now.After(c.lastDiscFilesTime.Add(c.DiscoveryEvery.Duration()))
59 }