mirror of
https://github.com/bcicen/ctop.git
synced 2024-08-30 18:23:19 +00:00
123 lines
2.1 KiB
Go
123 lines
2.1 KiB
Go
package config
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
// defaults
|
|
var defaultWidgets = []*Widget{
|
|
&Widget{
|
|
Name: "status",
|
|
Enabled: true,
|
|
},
|
|
&Widget{
|
|
Name: "name",
|
|
Enabled: true,
|
|
},
|
|
&Widget{
|
|
Name: "id",
|
|
Enabled: true,
|
|
},
|
|
&Widget{
|
|
Name: "cpu",
|
|
Enabled: true,
|
|
},
|
|
&Widget{
|
|
Name: "mem",
|
|
Enabled: true,
|
|
},
|
|
&Widget{
|
|
Name: "net",
|
|
Enabled: true,
|
|
},
|
|
&Widget{
|
|
Name: "io",
|
|
Enabled: true,
|
|
},
|
|
&Widget{
|
|
Name: "pids",
|
|
Enabled: true,
|
|
},
|
|
}
|
|
|
|
type Widget struct {
|
|
Name string
|
|
Enabled bool
|
|
}
|
|
|
|
// GetWidget returns a Widget by name
|
|
func GetWidget(name string) *Widget {
|
|
lock.RLock()
|
|
defer lock.RUnlock()
|
|
|
|
for _, w := range GlobalWidgets {
|
|
if w.Name == name {
|
|
return w
|
|
}
|
|
}
|
|
log.Errorf("widget name not found: %s", name)
|
|
return &Widget{} // default
|
|
}
|
|
|
|
// Widgets returns a copy of all configurable Widgets, in order
|
|
func Widgets() []Widget {
|
|
a := make([]Widget, len(GlobalWidgets))
|
|
|
|
lock.RLock()
|
|
defer lock.RUnlock()
|
|
|
|
for n, w := range GlobalWidgets {
|
|
a[n] = *w
|
|
}
|
|
return a
|
|
}
|
|
|
|
// EnabledWidgets returns an ordered array of enabled widget names
|
|
func EnabledWidgets() (a []string) {
|
|
for _, w := range Widgets() {
|
|
if w.Enabled {
|
|
a = append(a, w.Name)
|
|
}
|
|
}
|
|
return a
|
|
}
|
|
|
|
func UpdateWidget(name string, enabled bool) {
|
|
w := GetWidget(name)
|
|
oldVal := w.Enabled
|
|
log.Noticef("config change [%s-enabled]: %t -> %t", name, oldVal, enabled)
|
|
|
|
lock.Lock()
|
|
defer lock.Unlock()
|
|
w.Enabled = enabled
|
|
}
|
|
|
|
func ToggleWidgetEnabled(name string) {
|
|
w := GetWidget(name)
|
|
newVal := !w.Enabled
|
|
log.Noticef("config change [%s-enabled]: %t -> %t", name, w.Enabled, newVal)
|
|
|
|
lock.Lock()
|
|
defer lock.Unlock()
|
|
w.Enabled = newVal
|
|
}
|
|
|
|
// UpdateWidgets replaces existing ordered widgets with those provided
|
|
func UpdateWidgets(newWidgets []Widget) {
|
|
oldOrder := widgetNames()
|
|
lock.Lock()
|
|
for n, w := range newWidgets {
|
|
GlobalWidgets[n] = &w
|
|
}
|
|
lock.Unlock()
|
|
log.Noticef("config change [widget-order]: %s -> %s", oldOrder, widgetNames())
|
|
}
|
|
|
|
func widgetNames() string {
|
|
a := make([]string, len(GlobalWidgets))
|
|
for n, w := range Widgets() {
|
|
a[n] = w.Name
|
|
}
|
|
return strings.Join(a, ", ")
|
|
}
|