Skip to content

Commit

Permalink
Implement cjbassi#148 and cjbassi#149
Browse files Browse the repository at this point in the history
  • Loading branch information
mattLLVW committed Jun 12, 2019
1 parent e1f3488 commit b80258b
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 5 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
28 changes: 24 additions & 4 deletions src/widgets/net.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package widgets
import (
"fmt"
"log"
"strings"
"time"

psNet "github.com/shirou/gopsutil/net"
Expand All @@ -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 {
Expand All @@ -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" {
Expand Down Expand Up @@ -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
}
Expand Down

0 comments on commit b80258b

Please sign in to comment.