sophuwu.site > quickstat   
              68
            
             package main

import (
	"encoding/json"
	"fmt"
	"os"
	"strings"
	"time"
)

var BitRateUnit = CONFIG.Unit | 1

type BitRate int64

func (b BitRate) String() string {
	n := float(b)
	for i := 0; i <= CONFIG.Unit; i++ {
		n /= 1024
	}
	n /= float(CONFIG.Time.Seconds())
	return fmt.Sprintf("%.2f %cB/s", n, SI[BitRateUnit])
}

type Net struct {
	Tx BitRate
	Rx BitRate
}

func readDev() *Net {
	f, err := os.OpenFile("/proc/net/dev", os.O_RDONLY, 0)
	if Is(err) {
		return &Net{}
	}
	b := make([]byte, 1024)
	ln, err := f.Read(b)
	f.Close()
	if Is(err) {
		return &Net{}
	}
	var ns numSeeker
	var arr []uint64
	var rx, tx BitRate
	for _, v := range strings.Split(string(b[0:ln]), "\n") {
		arr = []uint64{}
		ns.Init([]byte(v))
		arr = ns.GetNums()
		if len(arr) < 16 {
			continue
		}
		tx += BitRate(int64(arr[8]))
		rx += BitRate(int64(arr[0]))
	}
	return &Net{tx, rx}
}
func (n *Net) update() {
	n2 := readDev()
	time.Sleep(CONFIG.Time)
	n = readDev()
	n.Tx = n.Tx - n2.Tx
	n.Rx = n.Rx - n2.Rx
}
func (n *Net) String() string {
	if CONFIG.Json {
		b, _ := json.Marshal(n)
		return string(b)
	}
	return fmt.Sprintf("TX: %s | RX: %s", n.Tx, n.Rx)
}