ZBLOG

golang 将cpu使用率绘制成折线图

以下是一个使用 golang 绘制 CPU 使用率折线图的示例代码:

package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
    "strings"
    "time"

    "github.com/wcharczuk/go-chart"
)

func main() {
    chartValues := make([]float64, 0)
    chartTimes := make([]time.Time, 0)

    for i := 0; i < 60; i++ {
        cpuUsage, err := getCpuUsage()
        if err != nil {
            fmt.Printf("Failed to get CPU usage: %v\n", err)
            break
        }

        chartValues = append(chartValues, cpuUsage)
        chartTimes = append(chartTimes, time.Now())

        time.Sleep(time.Second)
    }

    graph := chart.Chart{
        Series: []chart.Series{
            chart.TimeSeries{
                Name:    "CPU Usage",
                XValues: chartTimes,
                YValues: chartValues,
            },
        },
    }

    f, _ := os.Create("cpu_usage.png")
    defer f.Close()

    graph.Render(chart.PNG, f)
}

func getCpuUsage() (float64, error) {
    file, err := os.Open("/proc/stat")
    if err != nil {
        return 0, err
    }
    defer file.Close()

    scanner := bufio.NewScanner(file)
    scanner.Scan()

    fields := strings.Fields(scanner.Text())[1:]
    var total, idle uint64
    for _, field := range fields {
        val, err := strconv.ParseUint(field, 10, 64)
        if err != nil {
            return 0, err
        }
        total += val
        if field == fields[3] {
            idle = val
        }
    }

    idleDelta := float64(idle - prevIdle)
    totalDelta := float64(total - prevTotal)
    prevIdle = idle
    prevTotal = total

    return 100 * (totalDelta - idleDelta) / totalDelta, nil
}

var prevIdle, prevTotal uint64

该程序会每秒钟获取一次 CPU 使用率,并将其绘制成折线图。它使用 /proc/stat 文件获取系统的 CPU 统计信息,然后根据公式 (totalDelta - idleDelta) / totalDelta 计算 CPU 使用率。最后,使用 go-chart 库将数据绘制成折线图并保存为 PNG 格式的文件。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=847

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?