diff --git a/Gopkg.lock b/Gopkg.lock index 3edc277..596a6cb 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -58,7 +58,7 @@ "net", "process" ] - revision = "cd915bdc31582b0a56405ede7fa2f4ab043f851b" + revision = "57f370e13068146efe1cb7129f79e5d51da8a242" [[projects]] branch = "master" diff --git a/vendor/github.com/shirou/gopsutil/host/include/smc.c b/src/widgets/include/smc.c similarity index 99% rename from vendor/github.com/shirou/gopsutil/host/include/smc.c rename to src/widgets/include/smc.c index 30a232b..82b4a0a 100644 --- a/vendor/github.com/shirou/gopsutil/host/include/smc.c +++ b/src/widgets/include/smc.c @@ -379,8 +379,8 @@ static kern_return_t read_smc(char *key, smc_return_t *result_smc) // Store data for return result_smc->dataSize = outputStruct.keyInfo.dataSize; - result_smc->dataType = outputStruct.keyInfo.dataType; - + result_smc->dataType = outputStruct.keyInfo.dataType; + // Second call to AppleSMC - now we can get the data inputStruct.keyInfo.dataSize = outputStruct.keyInfo.dataSize; @@ -451,10 +451,10 @@ static kern_return_t get_machine_model(io_name_t model) { io_service_t service; kern_return_t result; - + service = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching(IOSERVICE_MODEL)); - + if (service == 0) { printf("ERROR: %s NOT FOUND\n", IOSERVICE_MODEL); return kIOReturnError; @@ -465,7 +465,7 @@ static kern_return_t get_machine_model(io_name_t model) IOObjectRelease(service); return result; -} +} //------------------------------------------------------------------------------ @@ -600,7 +600,7 @@ bool get_fan_name(unsigned int fan_num, fan_name_t name) char key[5]; kern_return_t result; smc_return_t result_smc; - + sprintf(key, "F%dID", fan_num); result = read_smc(key, &result_smc); @@ -610,16 +610,16 @@ bool get_fan_name(unsigned int fan_num, fan_name_t name) return false; } - + /* We know the data size is 16 bytes and the type is "{fds", a custom struct defined by the AppleSMC.kext. See TMP enum sources for the struct. - + The last 12 bytes contain the name of the fan, an array of chars, hence the loop range. */ - int index = 0; + int index = 0; for (int i = 4; i < 16; i++) { // Check if at the end (name may not be full 12 bytes) // Could check for 0 (null), but instead we check for 32 (space). This @@ -686,7 +686,7 @@ bool set_fan_min_rpm(unsigned int fan_num, unsigned int rpm, bool auth) // TODO: Don't use magic number result_smc.dataSize = 2; - result_smc.dataType = to_uint32_t(DATA_TYPE_FPE2); + result_smc.dataType = to_uint32_t(DATA_TYPE_FPE2); to_fpe2(rpm, result_smc.data); sprintf(key, "F%dMn", fan_num); diff --git a/vendor/github.com/shirou/gopsutil/host/include/smc.h b/src/widgets/include/smc.h similarity index 99% rename from vendor/github.com/shirou/gopsutil/host/include/smc.h rename to src/widgets/include/smc.h index b156368..d837e11 100644 --- a/vendor/github.com/shirou/gopsutil/host/include/smc.h +++ b/src/widgets/include/smc.h @@ -213,7 +213,7 @@ bool is_optical_disk_drive_full(void); /** Get the name of a fan. - + :param: fanNum The number of the fan to check :param: name The name of the fan. Return will be empty on error. :returns: True if successful, false otherwise. diff --git a/src/widgets/temp.go b/src/widgets/temp.go index 0c1406a..c366cb2 100644 --- a/src/widgets/temp.go +++ b/src/widgets/temp.go @@ -6,11 +6,9 @@ package widgets import ( "fmt" "sort" - "strings" "time" ui "github.com/cjbassi/termui" - psHost "github.com/shirou/gopsutil/host" ) type Temp struct { @@ -43,18 +41,6 @@ func NewTemp() *Temp { return self } -func (self *Temp) update() { - sensors, _ := psHost.SensorsTemperatures() - for _, sensor := range sensors { - // only sensors with input in their name are giving us live temp info - if strings.Contains(sensor.SensorKey, "input") { - // removes '_input' from the end of the sensor name - label := sensor.SensorKey[:strings.Index(sensor.SensorKey, "_input")] - self.Data[label] = int(sensor.Temperature) - } - } -} - // Buffer implements ui.Bufferer interface and renders the widget. func (self *Temp) Buffer() *ui.Buffer { buf := self.Block.Buffer() diff --git a/vendor/github.com/shirou/gopsutil/host/host_darwin_cgo.go b/src/widgets/temp_darwin.go similarity index 72% rename from vendor/github.com/shirou/gopsutil/host/host_darwin_cgo.go rename to src/widgets/temp_darwin.go index f0a4370..d635dd7 100644 --- a/vendor/github.com/shirou/gopsutil/host/host_darwin_cgo.go +++ b/src/widgets/temp_darwin.go @@ -1,18 +1,17 @@ -// +build darwin -// +build cgo +// TODO do we need to add '+build cgo'? -package host +package widgets // #cgo LDFLAGS: -framework IOKit // #include "include/smc.c" import "C" -import "context" -func SensorsTemperatures() ([]TemperatureStat, error) { - return SensorsTemperaturesWithContext(context.Background()) +type TemperatureStat struct { + SensorKey string `json:"sensorKey"` + Temperature float64 `json:"sensorTemperature"` } -func SensorsTemperaturesWithContext(ctx context.Context) ([]TemperatureStat, error) { +func SensorsTemperatures() ([]TemperatureStat, error) { temperatureKeys := []string{ C.AMBIENT_AIR_0, C.AMBIENT_AIR_1, @@ -49,3 +48,10 @@ func SensorsTemperaturesWithContext(ctx context.Context) ([]TemperatureStat, err } return temperatures, nil } + +func (self *Temp) update() { + sensors, _ := SensorsTemperatures() + for _, sensor := range sensors { + self.Data[sensor.SensorKey] = int(sensor.Temperature) + } +} diff --git a/src/widgets/temp_linux.go b/src/widgets/temp_linux.go new file mode 100644 index 0000000..e818863 --- /dev/null +++ b/src/widgets/temp_linux.go @@ -0,0 +1,19 @@ +package widgets + +import ( + "strings" + + psHost "github.com/shirou/gopsutil/host" +) + +func (self *Temp) update() { + sensors, _ := psHost.SensorsTemperatures() + for _, sensor := range sensors { + // only sensors with input in their name are giving us live temp info + if strings.Contains(sensor.SensorKey, "input") { + // removes '_input' from the end of the sensor name + label := sensor.SensorKey[:strings.Index(sensor.SensorKey, "_input")] + self.Data[label] = int(sensor.Temperature) + } + } +} diff --git a/src/widgets/temp_windows.go b/src/widgets/temp_windows.go new file mode 100644 index 0000000..99c2a87 --- /dev/null +++ b/src/widgets/temp_windows.go @@ -0,0 +1,12 @@ +package widgets + +import ( + psHost "github.com/shirou/gopsutil/host" +) + +func (self *Temp) update() { + sensors, _ := psHost.SensorsTemperatures() + for _, sensor := range sensors { + self.Data[sensor.SensorKey] = int(sensor.Temperature) + } +} diff --git a/vendor/github.com/shirou/gopsutil/README.rst b/vendor/github.com/shirou/gopsutil/README.rst index bc4614f..9848aec 100644 --- a/vendor/github.com/shirou/gopsutil/README.rst +++ b/vendor/github.com/shirou/gopsutil/README.rst @@ -117,6 +117,10 @@ Several methods have been added which are not present in psutil, but will provid - VirtualizationSystem (ex: "LXC") - VirtualizationRole (ex: "guest"/"host") +- IOCounters + + - Label (linux only) The registered [device mapper name](https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-block-dm) + - cpu/CPUInfo() (linux, freebsd) - CPU (ex: 0, 1, ...) diff --git a/vendor/github.com/shirou/gopsutil/disk/disk.go b/vendor/github.com/shirou/gopsutil/disk/disk.go index 1c31047..38d8a8f 100644 --- a/vendor/github.com/shirou/gopsutil/disk/disk.go +++ b/vendor/github.com/shirou/gopsutil/disk/disk.go @@ -42,6 +42,7 @@ type IOCountersStat struct { WeightedIO uint64 `json:"weightedIO"` Name string `json:"name"` SerialNumber string `json:"serialNumber"` + Label string `json:"label"` } func (d UsageStat) String() string { diff --git a/vendor/github.com/shirou/gopsutil/disk/disk_linux.go b/vendor/github.com/shirou/gopsutil/disk/disk_linux.go index 46904e3..4033b1a 100644 --- a/vendor/github.com/shirou/gopsutil/disk/disk_linux.go +++ b/vendor/github.com/shirou/gopsutil/disk/disk_linux.go @@ -5,6 +5,7 @@ package disk import ( "context" "fmt" + "io/ioutil" "os/exec" "path/filepath" "strconv" @@ -370,6 +371,8 @@ func IOCountersWithContext(ctx context.Context, names ...string) (map[string]IOC d.Name = name d.SerialNumber = GetDiskSerialNumber(name) + d.Label = GetLabel(name) + ret[name] = d } return ret, nil @@ -406,6 +409,26 @@ func GetDiskSerialNumberWithContext(ctx context.Context, name string) string { return "" } +// GetLabel returns label of given device or empty string on error. +// Name of device is expected, eg. /dev/sda +// Supports label based on devicemapper name +// See https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-block-dm +func GetLabel(name string) string { + // Try label based on devicemapper name + dmname_filename := common.HostSys(fmt.Sprintf("block/%s/dm/name", name)) + + if !common.PathExists(dmname_filename) { + return "" + } + + dmname, err := ioutil.ReadFile(dmname_filename) + if err != nil { + return "" + } else { + return string(dmname) + } +} + func getFsType(stat unix.Statfs_t) string { t := int64(stat.Type) ret, ok := fsTypeMap[t] diff --git a/vendor/github.com/shirou/gopsutil/host/host_darwin.go b/vendor/github.com/shirou/gopsutil/host/host_darwin.go index acefc2f..5a4066a 100644 --- a/vendor/github.com/shirou/gopsutil/host/host_darwin.go +++ b/vendor/github.com/shirou/gopsutil/host/host_darwin.go @@ -217,3 +217,11 @@ func KernelVersionWithContext(ctx context.Context) (string, error) { _, _, version, err := PlatformInformation() return version, err } + +func SensorsTemperatures() ([]TemperatureStat, error) { + return SensorsTemperaturesWithContext(context.Background()) +} + +func SensorsTemperaturesWithContext(ctx context.Context) ([]TemperatureStat, error) { + return []TemperatureStat{}, common.ErrNotImplementedError +} diff --git a/vendor/github.com/shirou/gopsutil/host/host_darwin_nocgo.go b/vendor/github.com/shirou/gopsutil/host/host_darwin_nocgo.go deleted file mode 100644 index 7869f8c..0000000 --- a/vendor/github.com/shirou/gopsutil/host/host_darwin_nocgo.go +++ /dev/null @@ -1,18 +0,0 @@ -// +build darwin -// +build !cgo - -package host - -import ( - "context" - - "github.com/shirou/gopsutil/internal/common" -) - -func SensorsTemperatures() ([]TemperatureStat, error) { - return SensorsTemperaturesWithContext(context.Background()) -} - -func SensorsTemperaturesWithContext(ctx context.Context) ([]TemperatureStat, error) { - return []TemperatureStat{}, common.ErrNotImplementedError -} diff --git a/vendor/github.com/shirou/gopsutil/host/host_linux_mips64le.go b/vendor/github.com/shirou/gopsutil/host/host_linux_mips64le.go new file mode 100644 index 0000000..b0fca09 --- /dev/null +++ b/vendor/github.com/shirou/gopsutil/host/host_linux_mips64le.go @@ -0,0 +1,43 @@ +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_linux.go + +package host + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 + sizeOfUtmp = 0x180 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type utmp struct { + Type int16 + Pad_cgo_0 [2]byte + Pid int32 + Line [32]int8 + Id [4]int8 + User [32]int8 + Host [256]int8 + Exit exit_status + Session int32 + Tv timeval + Addr_v6 [4]int32 + X__unused [20]int8 +} +type exit_status struct { + Termination int16 + Exit int16 +} +type timeval struct { + Sec int32 + Usec int32 +} diff --git a/vendor/github.com/shirou/gopsutil/mem/mem_freebsd.go b/vendor/github.com/shirou/gopsutil/mem/mem_freebsd.go index 1fa880b..2d65f80 100644 --- a/vendor/github.com/shirou/gopsutil/mem/mem_freebsd.go +++ b/vendor/github.com/shirou/gopsutil/mem/mem_freebsd.go @@ -39,7 +39,7 @@ func VirtualMemoryWithContext(ctx context.Context) (*VirtualMemoryStat, error) { if err != nil { return nil, err } - buffers, err := unix.SysctlUint32("vfs.bufspace") + buffers, err := unix.SysctlUint64("vfs.bufspace") if err != nil { return nil, err }