讲一下之前获取CPU的,其余的原理和这个一样
python代码
@app.route('/cpu/')
def cpu_used():cpuoid=ObjectType(ObjectIdentity(myOIDs['cpu_loads']))ret = getTableRows((cpuoid,))cpuload=0for i in ret:cpuload += i[0]print(cpuload)return {'cpu':cpuload}
var dom = document.getElementById('cpuChart');var myChart = echarts.init(dom, null, {renderer: 'canvas',useDirtyRect: false});var app = {};var option;option = {series: [{type: 'gauge',axisLine: {lineStyle: {width: 30,color: [[0.3, '#67e0e3'],[0.7, '#37a2da'],[1, '#fd666d']]}},pointer: {itemStyle: {color: 'auto'}},axisTick: {distance: -30,length: 8,lineStyle: {color: '#fff',width: 2}},splitLine: {distance: -30,length: 30,lineStyle: {color: '#fff',width: 4}},axisLabel: {color: 'inherit',distance: 40,fontSize: 20},detail: {valueAnimation: true,formatter: '{value}%',color: 'inherit'},data: [{value: 70}]}]};var myurcpu = "http://" + window.location.host+"/cpu/";setInterval(()=>{fetch(myurcpu).then(res=>{return res.json()}).then((json)=>{option.series[0].data[0].value = json.cpu;myChart.setOption(option);})},1000)if (option && typeof option === 'object') {myChart.setOption(option);}window.addEventListener('resize', myChart.resize);
一.路由
python首先定义一个路由
这个参数 cpu 一定是和html代码里面的参数一致
访问这个网址的时候 python就会执行这个路由下面的函数(cpu_used())并返回这样的数据
{'cpu':cpuload}
二.python代码
首先 ObjectType 和 ObjectIdentity 不用管 固定格式 用就完了(详细讲解在最后 不看也可以 看也没用) 里面的参数是OID ,全局字典myOIDs里面有
这个OID在MIB里面这里
值是
可以看出来有很多值(说明 :
. 1.3.6.1.2.1.25.3.3.1.2 这里我后面没加索引,所以函数会读所有的值
)
执行完 cpuoid=ObjectType(ObjectIdentity(myOIDs['cpu_loads'])) 之后
cpuoid 里面就是
然后
ret = getTableRows((cpuoid,))
就是获取.5 .6 .7 .8 .9 --- .20 对应的所有的值,这里有个逗号是因为这个的参数要求是元组,加一个逗号代表是元组,不然会被按运算符()处理
这样 ret里面就是这边所有的值
cpuload=0 for i in ret:cpuload += i[0] print(cpuload) return {'cpu':cpuload}
上面代码就是遍历ret 一个一个加起来就是CPU使用率了
三.html代码
首先
定义一个div元素用来存放图表
然后就是js代码
首先通过id获取到上面的div元素,id 一定要对应起来 是cpuChart
然后就是初始化配置
里面的data就是一会我们动态获取参数后 填充的地方
最后就是获取数据
刚才也说了,这里的cpu一定要和python定义的路由一样
你可以在网址后面自己实验,加一个CPU看一下是什么结果
是这样的
程序也是这样获取的
所以
option.series[0].data[0].value = json.cpu;
就是把后端返回的cpu 渲染到页面上
四.ObjectIdentity,ObjectType
-
ObjectIdentity
的作用ObjectIdentity
是 pysnmp 库中用于表示 SNMP 中 MIB 对象标识符 的类。- 它将接收一个点分十进制格式的字符串(如
1.3.6.1.2.1.25.3.3.1.2
)或者 MIB 模块和名称(如"SNMPv2-MIB", "sysDescr", 0"
),并生成对应的 SNMP 查询标识。
-
ObjectType
的作用ObjectType
接收一个ObjectIdentity
实例,进一步包装成一个 完整的 SNMP 查询对象。ObjectType
主要用于发起 SNMP 请求,并在请求结果中标识数据。- 初始化后,
cpuoid
将是一个封装了特定 OID(myOIDs['cpu_loads']
)的对象,随后会在查询中被使用。