Add sensible defaults for temps. Improve config writing.
This commit is contained in:
parent
5ada5315d9
commit
6cee395f06
|
@ -578,7 +578,7 @@ func listDevices() {
|
|||
sort.Strings(ms)
|
||||
for _, m := range ms {
|
||||
fmt.Printf("%s:\n", m)
|
||||
for _, d := range devices.Devices(m) {
|
||||
for _, d := range devices.Devices(m, true) {
|
||||
fmt.Printf("\t%s\n", d)
|
||||
}
|
||||
}
|
||||
|
|
34
config.go
34
config.go
|
@ -107,11 +107,15 @@ func (conf *Config) Load() error {
|
|||
}
|
||||
conf.PercpuLoad = bv
|
||||
case tempscale:
|
||||
iv, err := strconv.Atoi(kv[1])
|
||||
if err != nil {
|
||||
return err
|
||||
switch kv[1] {
|
||||
case "C":
|
||||
conf.TempScale = 'C'
|
||||
case "F":
|
||||
conf.TempScale = 'F'
|
||||
default:
|
||||
conf.TempScale = 'C'
|
||||
return fmt.Errorf("invalid TempScale value %s", kv[1])
|
||||
}
|
||||
conf.TempScale = widgets.TempScale(iv)
|
||||
case statusbar:
|
||||
bv, err := strconv.ParseBool(kv[1])
|
||||
if err != nil {
|
||||
|
@ -159,19 +163,39 @@ func (c *Config) Write() (string, error) {
|
|||
|
||||
func marshal(c *Config) []byte {
|
||||
buff := bytes.NewBuffer(nil)
|
||||
fmt.Fprintln(buff, "# Scale graphs to this level; 7 is the default, 2 is zoomed out.")
|
||||
fmt.Fprintf(buff, "%s=%d\n", graphhorizontalscale, c.GraphHorizontalScale)
|
||||
fmt.Fprintln(buff, "# If true, start the UI with the help visible")
|
||||
fmt.Fprintf(buff, "%s=%t\n", helpvisible, c.HelpVisible)
|
||||
fmt.Fprintln(buff, "# The color scheme to use. See `--list colorschemes`")
|
||||
fmt.Fprintf(buff, "%s=%s\n", colorscheme, c.Colorscheme.Name)
|
||||
fmt.Fprintln(buff, "# How frequently to update the UI, in nanoseconds")
|
||||
fmt.Fprintf(buff, "%s=%d\n", updateinterval, c.UpdateInterval)
|
||||
fmt.Fprintln(buff, "# If true, show the average CPU load")
|
||||
fmt.Fprintf(buff, "%s=%t\n", averagecpu, c.AverageLoad)
|
||||
fmt.Fprintln(buff, "# If true, show load per CPU")
|
||||
fmt.Fprintf(buff, "%s=%t\n", percpuload, c.PercpuLoad)
|
||||
fmt.Fprintf(buff, "%s=%d\n", tempscale, c.TempScale)
|
||||
fmt.Fprintln(buff, "# Temperature units. C for Celcius, F for Fahrenheit")
|
||||
fmt.Fprintf(buff, "%s=%c\n", tempscale, c.TempScale)
|
||||
fmt.Fprintln(buff, "# If true, display a status bar")
|
||||
fmt.Fprintf(buff, "%s=%t\n", statusbar, c.Statusbar)
|
||||
fmt.Fprintln(buff, "# The network interface to monitor")
|
||||
fmt.Fprintf(buff, "%s=%s\n", netinterface, c.NetInterface)
|
||||
fmt.Fprintln(buff, "# A layout name. See `--list layouts`")
|
||||
fmt.Fprintf(buff, "%s=%s\n", layout, c.Layout)
|
||||
fmt.Fprintln(buff, "# The maximum log file size, in bytes")
|
||||
fmt.Fprintf(buff, "%s=%d\n", maxlogsize, c.MaxLogSize)
|
||||
fmt.Fprintln(buff, "# If set, export data as Promethius metrics on the interface:port.\n# E.g., `:8080` (colon is required, interface is not)")
|
||||
if c.ExportPort == "" {
|
||||
fmt.Fprint(buff, "#")
|
||||
}
|
||||
fmt.Fprintf(buff, "%s=%s\n", export, c.ExportPort)
|
||||
fmt.Fprintln(buff, "# Display network IO in mpbs if true")
|
||||
fmt.Fprintf(buff, "%s=%t\n", mbps, c.Mbps)
|
||||
fmt.Fprintln(buff, "# A list of enabled temp sensors. See `--list devices`")
|
||||
if len(c.Temps) == 0 {
|
||||
fmt.Fprint(buff, "#")
|
||||
}
|
||||
fmt.Fprintf(buff, "%s=%s\n", temperatures, strings.Join(c.Temps, ","))
|
||||
return buff.Bytes()
|
||||
}
|
||||
|
|
|
@ -3,12 +3,13 @@ package devices
|
|||
import "log"
|
||||
|
||||
const (
|
||||
Temperatures = "Temperatures"
|
||||
Temperatures = "Temperatures" // Device domain for temperature sensors
|
||||
)
|
||||
|
||||
var Domains []string = []string{Temperatures}
|
||||
var shutdownFuncs []func() error
|
||||
var _shutdownFuncs []func() error
|
||||
var _devs map[string][]string
|
||||
var _defaults map[string][]string
|
||||
|
||||
// RegisterShutdown stores a function to be called by gotop on exit, allowing
|
||||
// extensions to properly release resources. Extensions should register a
|
||||
|
@ -16,14 +17,14 @@ var _devs map[string][]string
|
|||
// released. The returned error will be logged, but no other action will be
|
||||
// taken.
|
||||
func RegisterShutdown(f func() error) {
|
||||
shutdownFuncs = append(shutdownFuncs, f)
|
||||
_shutdownFuncs = append(_shutdownFuncs, f)
|
||||
}
|
||||
|
||||
// Shutdown will be called by the `main()` function if gotop is exited
|
||||
// cleanly. It will call all of the registered shutdown functions of devices,
|
||||
// logging all errors but otherwise not responding to them.
|
||||
func Shutdown() {
|
||||
for _, f := range shutdownFuncs {
|
||||
for _, f := range _shutdownFuncs {
|
||||
err := f()
|
||||
if err != nil {
|
||||
log.Print(err)
|
||||
|
@ -31,17 +32,31 @@ func Shutdown() {
|
|||
}
|
||||
}
|
||||
|
||||
func RegisterDeviceList(typ string, f func() []string) {
|
||||
func RegisterDeviceList(typ string, all func() []string, def func() []string) {
|
||||
if _devs == nil {
|
||||
_devs = make(map[string][]string)
|
||||
}
|
||||
if ls, ok := _devs[typ]; ok {
|
||||
_devs[typ] = append(ls, f()...)
|
||||
return
|
||||
if _defaults == nil {
|
||||
_defaults = make(map[string][]string)
|
||||
}
|
||||
_devs[typ] = f()
|
||||
if _, ok := _devs[typ]; !ok {
|
||||
_devs[typ] = []string{}
|
||||
}
|
||||
_devs[typ] = append(_devs[typ], all()...)
|
||||
if _, ok := _defaults[typ]; !ok {
|
||||
_defaults[typ] = []string{}
|
||||
}
|
||||
_defaults[typ] = append(_defaults[typ], def()...)
|
||||
}
|
||||
|
||||
func Devices(domain string) []string {
|
||||
return _devs[domain]
|
||||
// Return a list of devices registered under domain, where `domain` is one of the
|
||||
// defined constants in `devices`, e.g., devices.Temperatures. The
|
||||
// `enabledOnly` flag determines whether all devices are returned (false), or
|
||||
// only the ones that have been enabled for the domain.
|
||||
func Devices(domain string, all bool) []string {
|
||||
if all {
|
||||
return _devs[domain]
|
||||
} else {
|
||||
return _defaults[domain]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@ import smc "github.com/xxxserxxx/iSMC"
|
|||
|
||||
func init() {
|
||||
RegisterTemp(update)
|
||||
RegisterDeviceList(Temperatures, devs)
|
||||
RegisterDeviceList(Temperatures, devs, defs)
|
||||
ts = make(map[string]float32)
|
||||
}
|
||||
|
||||
|
@ -25,8 +25,6 @@ func update(temps map[string]int) map[string]error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// TODO: Set reasonable default devices
|
||||
// CPU (TC[01]P), GPU (TG0P), Memory (Ts0S) and Disk (TH0P)
|
||||
func devs() []string {
|
||||
rv := make([]string, len(smc.AppleTemp))
|
||||
for i, v := range smc.AppleTemp {
|
||||
|
@ -34,3 +32,15 @@ func devs() []string {
|
|||
}
|
||||
return rv
|
||||
}
|
||||
|
||||
func defs() []string {
|
||||
// CPU 0 CPU 1 GPU Memory Disk
|
||||
ids := map[string]bool{"TC0P": true, "TC1P": true, "TG0P": true, "Ts0S": true, "TH0P": true}
|
||||
rv := make([]string, 0, len(ids))
|
||||
for _, v := range smc.AppleTemp {
|
||||
if ids[v.Key] {
|
||||
rv = append(rv, v.Desc)
|
||||
}
|
||||
}
|
||||
return rv
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ import (
|
|||
|
||||
func init() {
|
||||
RegisterTemp(update)
|
||||
RegisterDeviceList(Temperatures, devs)
|
||||
RegisterDeviceList(Temperatures, devs, devs)
|
||||
}
|
||||
|
||||
var sensorOIDS = map[string]string{
|
||||
|
|
|
@ -9,8 +9,9 @@ import (
|
|||
)
|
||||
|
||||
func init() {
|
||||
devs() // Populate the sensorMap
|
||||
RegisterTemp(getTemps)
|
||||
RegisterDeviceList(Temperatures, devs)
|
||||
RegisterDeviceList(Temperatures, devs, defs)
|
||||
}
|
||||
|
||||
func getTemps(temps map[string]int) map[string]error {
|
||||
|
@ -19,30 +20,45 @@ func getTemps(temps map[string]int) map[string]error {
|
|||
return map[string]error{"psHost": err}
|
||||
}
|
||||
for _, sensor := range sensors {
|
||||
// removes '_input' from the end of the sensor name
|
||||
idx := strings.Index(sensor.SensorKey, "_input")
|
||||
if idx >= 0 {
|
||||
label := sensor.SensorKey[:idx]
|
||||
if _, ok := temps[label]; ok {
|
||||
temps[label] = int(sensor.Temperature)
|
||||
}
|
||||
label := sensorMap[sensor.SensorKey]
|
||||
if _, ok := temps[label]; ok {
|
||||
temps[label] = int(sensor.Temperature)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Optimization to avoid string manipulation every update
|
||||
var sensorMap map[string]string
|
||||
|
||||
func devs() []string {
|
||||
if sensorMap == nil {
|
||||
sensorMap = make(map[string]string)
|
||||
}
|
||||
sensors, err := psHost.SensorsTemperatures()
|
||||
if err != nil {
|
||||
return []string{}
|
||||
}
|
||||
rv := make([]string, 0, len(sensors))
|
||||
for _, sensor := range sensors {
|
||||
// only sensors with input in their name are giving us live temp info
|
||||
if strings.Contains(sensor.SensorKey, "input") && sensor.Temperature != 0 {
|
||||
// removes '_input' from the end of the sensor name
|
||||
label := sensor.SensorKey[:strings.Index(sensor.SensorKey, "_input")]
|
||||
rv = append(rv, label)
|
||||
label := sensor.SensorKey
|
||||
if strings.Contains(sensor.SensorKey, "input") {
|
||||
label = sensor.SensorKey[:strings.Index(sensor.SensorKey, "_input")]
|
||||
}
|
||||
rv = append(rv, label)
|
||||
sensorMap[sensor.SensorKey] = label
|
||||
}
|
||||
return rv
|
||||
}
|
||||
|
||||
// Only include sensors with input in their name; these are the only sensors
|
||||
// returning live data
|
||||
func defs() []string {
|
||||
// MUST be called AFTER init()
|
||||
rv := make([]string, 0)
|
||||
for k, v := range sensorMap {
|
||||
if k != v { // then it's an _input sensor
|
||||
rv = append(rv, v)
|
||||
}
|
||||
}
|
||||
return rv
|
||||
|
|
|
@ -8,7 +8,7 @@ import (
|
|||
|
||||
func init() {
|
||||
RegisterTemp(update)
|
||||
RegisterDeviceList(Temperatures, devs)
|
||||
RegisterDeviceList(Temperatures, devs, devs)
|
||||
}
|
||||
|
||||
func update(temps map[string]int) map[string]error {
|
||||
|
|
|
@ -46,7 +46,7 @@ func NewTempWidget(tempScale TempScale, filter []string) *TempWidget {
|
|||
self.Data[t] = 0
|
||||
}
|
||||
} else {
|
||||
for _, t := range devices.Devices(devices.Temperatures) {
|
||||
for _, t := range devices.Devices(devices.Temperatures, false) {
|
||||
self.Data[t] = 0
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user