项目初始化
This commit is contained in:
92
cmd/nodeprobe/main.go
Normal file
92
cmd/nodeprobe/main.go
Normal file
@@ -0,0 +1,92 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/meowrain/nodeprobe/internal/netstat"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 1. 获取初始数据
|
||||
prevStats, err := netstat.GetInterfaceStats()
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Error: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if len(prevStats) == 0 {
|
||||
fmt.Println("No network interfaces found")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// 2. 设置刷新间隔(默认 1 秒)
|
||||
interval := 1 * time.Second
|
||||
|
||||
// 3. 打印表头
|
||||
printHeader()
|
||||
|
||||
// 4. 创建 ticker 定时器
|
||||
ticker := time.NewTicker(interval)
|
||||
defer ticker.Stop()
|
||||
|
||||
// 5. 监听 Ctrl+C 退出
|
||||
sigChan := make(chan os.Signal, 1)
|
||||
signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
|
||||
|
||||
// 6. 主循环
|
||||
for {
|
||||
select {
|
||||
case <-ticker.C:
|
||||
// 获取当前统计数据
|
||||
currStats, err := netstat.GetInterfaceStats()
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
// 计算速率
|
||||
rates := netstat.CalculateRate(prevStats, currStats, interval)
|
||||
|
||||
// 打印一行统计
|
||||
printStats(rates, currStats)
|
||||
|
||||
// 更新上一次的数据
|
||||
prevStats = currStats
|
||||
|
||||
case <-sigChan:
|
||||
fmt.Println("\nExiting...")
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func printHeader() {
|
||||
fmt.Println("Network Interface Traffic Monitor")
|
||||
fmt.Println("----------------------------------")
|
||||
fmt.Printf("%-10s %15s %15s %15s %15s\n",
|
||||
"Interface", "RX Rate", "TX Rate", "RX Total", "TX Total")
|
||||
fmt.Println("----------------------------------")
|
||||
}
|
||||
|
||||
func printStats(rates []netstat.TrafficRate, stats []netstat.InterfaceStats) {
|
||||
// 创建统计 map
|
||||
statsMap := make(map[string]netstat.InterfaceStats)
|
||||
for _, s := range stats {
|
||||
statsMap[s.Name] = s
|
||||
}
|
||||
|
||||
for _, r := range rates {
|
||||
s := statsMap[r.Name]
|
||||
fmt.Printf("%-10s %15s %15s %15s %15s\n",
|
||||
r.Name,
|
||||
netstat.FormatBps(r.RxKbps*1000),
|
||||
netstat.FormatBps(r.TxKbps*1000),
|
||||
netstat.FormatBytes(float64(s.RxBytes)),
|
||||
netstat.FormatBytes(float64(s.TxBytes)),
|
||||
)
|
||||
}
|
||||
fmt.Println()
|
||||
}
|
||||
Reference in New Issue
Block a user