parent
e1f3488c4c
commit
b80258b07e
|
@ -112,7 +112,7 @@ To make a custom colorscheme, check out the [template](./colorschemes/template.g
|
|||
`-p`, `--percpu` Show each CPU in the CPU widget.
|
||||
`-a`, `--averagecpu` Show average CPU in the CPU widget.
|
||||
`-s`, `--statusbar` Show a statusbar with the time.
|
||||
`-b`, `--battery` Show battery level widget (`minimal` turns off). [preview](./assets/screenshots/battery.png)
|
||||
`-b`, `--battery` Show battery level widget (`minimal` turns off). [preview](./assets/screenshots/battery.png)
|
||||
`-i`, `--interface=NAME` Select network interface [default: all].
|
||||
|
||||
## Built With
|
||||
|
|
|
@ -3,6 +3,7 @@ package widgets
|
|||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
psNet "github.com/shirou/gopsutil/net"
|
||||
|
@ -25,7 +26,7 @@ type NetWidget struct {
|
|||
// used to calculate recent network activity
|
||||
totalBytesRecv uint64
|
||||
totalBytesSent uint64
|
||||
NetInterface string
|
||||
NetInterface []string
|
||||
}
|
||||
|
||||
func NewNetWidget(netInterface string) *NetWidget {
|
||||
|
@ -39,7 +40,7 @@ func NewNetWidget(netInterface string) *NetWidget {
|
|||
self := &NetWidget{
|
||||
SparklineGroup: spark,
|
||||
updateInterval: time.Second,
|
||||
NetInterface: netInterface,
|
||||
NetInterface: strings.Split(netInterface, ","),
|
||||
}
|
||||
self.Title = " Network Usage "
|
||||
if netInterface != "all" {
|
||||
|
@ -68,9 +69,28 @@ func (self *NetWidget) update() {
|
|||
|
||||
var totalBytesRecv uint64
|
||||
var totalBytesSent uint64
|
||||
interfaceMap := make(map[string]bool)
|
||||
// Default behaviour
|
||||
interfaceMap[NET_INTERFACE_ALL] = true
|
||||
interfaceMap[NET_INTERFACE_VPN] = false
|
||||
// Build a map with wanted status for each interfaces.
|
||||
for _, iface := range self.NetInterface {
|
||||
if strings.HasPrefix(iface, "!") {
|
||||
interfaceMap[strings.TrimPrefix(iface, "!")] = false
|
||||
} else {
|
||||
// if we specify a wanted interface, remove capture on all.
|
||||
delete(interfaceMap, NET_INTERFACE_ALL)
|
||||
interfaceMap[iface] = true
|
||||
}
|
||||
}
|
||||
for _, _interface := range interfaces {
|
||||
// ignore VPN interface or filter interface by name
|
||||
if ((self.NetInterface == NET_INTERFACE_ALL) && (_interface.Name != NET_INTERFACE_VPN)) || (_interface.Name == self.NetInterface) {
|
||||
wanted, ok := interfaceMap[_interface.Name]
|
||||
if wanted && ok { // Simple case
|
||||
totalBytesRecv += _interface.BytesRecv
|
||||
totalBytesSent += _interface.BytesSent
|
||||
} else if ok { // Present but unwanted
|
||||
continue
|
||||
} else if interfaceMap[NET_INTERFACE_ALL] { // Capture other
|
||||
totalBytesRecv += _interface.BytesRecv
|
||||
totalBytesSent += _interface.BytesSent
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user