网络管理 详细讲解
讲一下之前获取CPU的,其余的原理和这个一样
python代码
@app.route('/cpu/')
def cpu_used():
cpuoid=ObjectType(ObjectIdentity(myOIDs['cpu_loads']))
ret = getTableRows((cpuoid,))
cpuload=0
for 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']
)的对象,随后会在查询中被使用。