项目初始化

This commit is contained in:
lirui
2026-01-04 21:51:40 +08:00
commit 1ccff88c56
6 changed files with 399 additions and 0 deletions

92
cmd/nodeprobe/main.go Normal file
View 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()
}