Go使用gopsutil 和 go-echarts 生成系统状态图表

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go使用gopsutil 和 go-echarts 生成系统状态图表相关的知识,希望对你有一定的参考价值。

Go使用gopsutil 和 go-echarts 生成系统状态图表

1.结构

1.使用gopsutil获取数据

2.使用go-echarts生成图表

2.细节

  • 生成数据是生成一组(key,val) 就是x轴和y轴对应的数据。
  • 日期格式化:time.Now().Format("15:04:05") 这里是只包含时分秒。
  • 浮点数格式化小数点后两位,strconv.FormatFloat(totalPercent[0], 'f', 2, 64)
  • 配置图表的一些参数可以参考drawLineChart()函数里的配置。

3.代码

package main

import (
	"fmt"
	"github.com/go-echarts/go-echarts/v2/charts"
	"github.com/go-echarts/go-echarts/v2/opts"
	"github.com/shirou/gopsutil/v3/cpu"
	"os"
	"strconv"
	"time"
	// "github.com/shirou/gopsutil/mem"  // to use v2
)

// cpu info
func getCpuInfo() 
	cpuInfos, err := cpu.Info()
	if err != nil 
		fmt.Printf("get cpu info failed, err:%v", err)
	
	for _, ci := range cpuInfos 
		fmt.Println(ci)
	
	// CPU使用率
	for 
		percent, _ := cpu.Percent(time.Second, false)
		fmt.Printf("cpu percent:%v\\n", percent)
	


// generate random data for line chart
func generateVMItems(cnt int) ([]string, []opts.LineData) 
	keys := make([]string, 0)
	vals := make([]opts.LineData, 0)
	for i := 0; i < cnt; i++ 
		keys = append(keys, time.Now().Format("15:04:05"))
		totalPercent, _ := cpu.Percent(5*time.Second, false) //从当前时刻开始5s的cpu使用率
		tmp := strconv.FormatFloat(totalPercent[0], 'f', 2, 64)
		vals = append(vals, opts.LineDataValue: tmp)
	
	return keys, vals

func drawLineChart() 
	// create a new line instance
	line := charts.NewLine()
	line.SetGlobalOptions(
		charts.WithTitleOpts(opts.Title	//标题
			Title:    "内存占用率",
			Subtitle: "Line chart rendered by the http server this time",
		),
		charts.WithTooltipOpts(opts.TooltipShow: true), 	
		charts.WithToolboxOpts(opts.Toolbox	//工具盒配置
			Show:  true,
			Right: "20%",
			Feature: &opts.ToolBoxFeature
				SaveAsImage: &opts.ToolBoxFeatureSaveAsImage
					Show:  true,
					Type:  "png",
					Title: "Anything you want",
				,
				DataView: &opts.ToolBoxFeatureDataView
					Show:  true,
					Title: "DataView",
					// set the language
					// English version: "data view", "turn off", "refresh",
					Lang: []string"数据视图", "关闭", "刷新",
				,
			,
		))
	k, v := generateVMItems(5)
	// Put data into instance
	line.SetXAxis(k).AddSeries("Server 1", v).SetSeriesOptions(
		charts.WithLabelOpts(opts.Label	//显示数据
			Show:     true,
			Position: "top",
		),
	)
	f, _ := os.Create("line.html")
	err := line.Render(f)
	if err != nil 
		return
	

func main() 
	//getCpuInfo()
	drawLineChart()


4.结果

5.总结

本文通过后端获取数据并生成图表,实际上生成图表的工作应该交给前端渲染数据生成。所以本文的下一个方向就是Vue+Go生成图表。

以上是关于Go使用gopsutil 和 go-echarts 生成系统状态图表的主要内容,如果未能解决你的问题,请参考以下文章

Go使用绘图的库(go-chartsgo-echarts)

系统性能数据gopsutil库

go-echarts x 轴标签显示不全

go-echarts x 轴标签显示不全

gopsutil的进阶使用(disk,net)

go---process包