forked from EricR/sys.json
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmodules.go
89 lines (81 loc) · 1.92 KB
/
modules.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package main
import (
"github.com/ericr/sysjson/plugins/conntrack"
"github.com/ericr/sysjson/plugins/host"
"github.com/ericr/sysjson/plugins/proc"
"github.com/ericr/sysjson/plugins/disk"
"log"
"strings"
)
type module struct {
Name string `json:"name"`
Desc string `json:"description"`
fn func() map[string]interface{}
}
var (
modules = map[string]module{
"host": module{
Name: "host",
Desc: "Provides basic host info",
fn: host.GetInfo,
},
"load": module{
Name: "load",
Desc: "Provides load averages",
fn: proc.GetLoadAvg,
},
"uptime": module{
Name: "uptime",
Desc: "Provides time since startup",
fn: proc.GetUptime,
},
"process": module{
Name: "process",
Desc: "Provides a process tree",
fn: proc.GetProcessTree,
},
"mem": module{
Name: "mem",
Desc: "Provides system-wide memory stats",
fn: proc.GetMemoryInfo,
},
"disk": module{
Name: "disk",
Desc: "Provides stats on each disk",
fn: disk.GetDiskInfo,
},
"net": module{
Name: "net",
Desc: "Provides stats on each network interface",
fn: proc.GetNetworkInfo,
},
"conntrack": module{
Name: "conntrack",
Desc: "Provides stats on current network connections (requires conntrack-tools)",
fn: conntrack.GetStats,
},
}
)
func loadModules(resp map[string]interface{}, paramModules string) map[string]interface{} {
modulesSelected := []string{}
modulesAvailable := make([]string, 0, len(modules))
for module := range modules {
modulesAvailable = append(modulesAvailable, module)
}
if paramModules == "all" {
modulesSelected = modulesAvailable
} else if len(paramModules) > 0 {
modulesSelected = strings.Split(paramModules, ",")
} else {
resp["modules_available"] = modules
}
for _, m := range modulesSelected {
module := modules[m]
if module.Name != "" {
resp[m] = module.fn()
} else {
log.Printf("[warn] Module '%s' not found", m)
}
}
return resp
}