首页 > 其他分享 >网络管理 主机资源监控系统项目搭建 (保姆级教程 建议点赞 收藏)

网络管理 主机资源监控系统项目搭建 (保姆级教程 建议点赞 收藏)

时间:2024-11-23 18:59:22浏览次数:6  
标签:教程 return 网络管理 app 点赞 ret memory usage cpu

目录

教大家实现图里面的2个仪表盘

其他自行根据 2个仪表盘的模式 进行补充

 一.首先准备实验环境

需要环境 python 3.8.8

下载完成之后开始配置虚拟环境

二.开始编写代码

先新建前提文件

好了前提工作好了 接下来就是写代码了  

先写python代码

 然后是main.html 的代码

运行代码 

流程


教大家实现图里面的2个仪表盘

其他自行根据 2个仪表盘的模式 进行补充

 一.首先准备实验环境

需要环境 python 3.8.8

打开微信 找到老师发的 python3.8.8.exe

或者到官网里面下载

下载完成之后开始配置虚拟环境

 搜索 py   找到 刚刚安装好的Python 3.8 (64-bit)

 右键他  点击 打开文件位置

再次右键 点击 Python 3.8 (64-bit) 点击打开文件位置

就到了下面这个位置

 之后在上面的目录 敲cmd  后 回车

 会出现一个 终端

在里面输入

python -m venv d:\ssr\snmp_project

 d:\ssr\snmp_project  目录你可以改 改成啥都可以

 然后再文件资源管理器 里面找到这个目录d:\ssr\snmp_project

点进Scripts这个文件夹 在上面输入cmd

 在弹出来的终端 输入activate.bat 后回车

 然后就进入到了这里

 依次输入

python -m pip install --upgrade pip

pip install pyasn1-modules==0.2.8

pip install pysnmp==4.4.12

pip install flask

都成功之后 环境就安装好了

二.开始编写代码

先新建前提文件

先在刚刚的Scripts 目录下建一个 python文件 ssr.py  

 再建一个templates文件夹   (文件名一定要是我这个)

 之后再templates 里面 建一个 main.html

好了前提工作好了 接下来就是写代码了  

先写python代码

接下来打开刚刚创建的ssr.py

先导入各种模块

import random
from pysnmp.hlapi import *
from flask import Flask,render_template

 在加一些全局变量

 myOIDs字典里面加入我获取CPU占用率,内存使用率 相关的OID

app = Flask(__name__)
myOIDs={
    'cpu_loads' : ". 1.3.6.1.2.1.25.3.3.1.2",
    'hrStorageSize':'1.3.6.1.2.1.25.2.3.1.5.1',
    'hrStorageUsed':"1.3.6.1.2.1.25.2.3.1.6.1" ,
  }
myhost='localhost'
myport=161
mycommunity ='public'
myifindex ='.10'

然后加入这2个分装好的函数

这2个就是

getTableRows(oids)读mib 表的某几个列的全部信息

getObjs(oids): 读mib 多个标量信息

def getTableRows(oids):
    iterator = nextCmd(
        SnmpEngine(),
        CommunityData(mycommunity, mpModel=0),
        UdpTransportTarget((myhost, myport)),
        ContextData(),
        *oids,
    lexicographicMode = False)
    ret = []
    for errorIndication, errorStatus, errorIndex, varBinds in iterator:
        count = ()
        if errorIndication:
            print(errorIndication)
            break
        elif errorStatus:
            print('%s at %s' % (errorStatus.prettyPrint(),
                                errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
            break
        else:
            for varBind in varBinds:
                count = count + (varBind[1]._value,)
            ret.append(count)
    return ret
def getObjs(oids):
  iterator = getCmd(
      SnmpEngine(),
      CommunityData(mycommunity, mpModel=0),
      UdpTransportTarget((myhost, myport)),
      ContextData(),
      *oids)
  ret = []
  errorIndication, errorStatus, errorIndex, varBinds = next(iterator)
  if errorIndication:
        print(errorIndication)
        return 0
  elif errorStatus:
        print('%s at %s' % (errorStatus.prettyPrint(),
                            errorIndex and varBinds[int(errorIndex)-1][0] or '?'))
        return 0
  else:
        for varBind in varBinds:
            ret.append(varBind[1]._value)
  return ret

 然后再把主函数加上

@app.route('/')代表主路由里面固定格式是一个函数返回到main.html

主路由就和C程序里面的main一样 先执行这个  所以运行之后就会跳转到main.html

@app.route('/')
def index():
    return render_template('main.html')
if __name__ == '__main__':
    app.run()

然后就开始编写给2个仪表盘传输数据的代码了

这个是CPU使用率的

加一个cpu路由  访问这个路由就会返回json格式的数据 这个就用在了下面的更新函数里面

@app.route('/cpu/')
def cpu_used():
    cpuoid=ObjectType(ObjectIdentity(myOIDs['cpu_loads']))
    ret = getTableRows((cpuoid,))
    cpuload=0
    for i in ret:
        cpuload += i[0]
    return {'cpu':cpuload}

 这个是内存使用情况的:

def get_memory_usage():
    total_memory = getObjs([ObjectType(ObjectIdentity(myOIDs['hrStorageSize']))])
    used_memory = getObjs([ObjectType(ObjectIdentity(myOIDs['hrStorageUsed']))])
    if total_memory and used_memory and total_memory[0] > 0:
        memory_usage = (used_memory[0] / total_memory[0]) * 100
        return round(memory_usage, 2)
    else:
        return None
@app.route('/neicun/')
def memory():
    memory_usage = get_memory_usage()
    return {'memory_usage': memory_usage}

 这样就好了,下面是整合起来的代码

import random
from pysnmp.hlapi import *
from flask import Flask,render_template
app = Flask(__name__)
myOIDs={
    'cpu_loads' : ". 1.3.6.1.2.1.25.3.3.1.2",
    'hrStorageSize':'1.3.6.1.2.1.25.2.3.1.5.1',
    'hrStorageUsed':"1.3.6.1.2.1.25.2.3.1.6.1" ,
  }
myhost='localhost'
myport=161
mycommunity ='public'
myifindex ='.10'
def getTableRows(oids):
    iterator = nextCmd(
        SnmpEngine(),
        CommunityData(mycommunity, mpModel=0),
        UdpTransportTarget((myhost, myport)),
        ContextData(),
        *oids,
    lexicographicMode = False)
    ret = []
    for errorIndication, errorStatus, errorIndex, varBinds in iterator:
        count = ()
        if errorIndication:
            print(errorIndication)
            break
        elif errorStatus:
            print('%s at %s' % (errorStatus.prettyPrint(),
                                errorIndex and varBinds[int(errorIndex) - 1][0] or '?'))
            break
        else:
            for varBind in varBinds:
                count = count + (varBind[1]._value,)
            ret.append(count)
    return ret
def getObjs(oids):
  iterator = getCmd(
      SnmpEngine(),
      CommunityData(mycommunity, mpModel=0),
      UdpTransportTarget((myhost, myport)),
      ContextData(),
      *oids)
  ret = []
  errorIndication, errorStatus, errorIndex, varBinds = next(iterator)
  if errorIndication:
        print(errorIndication)
        return 0
  elif errorStatus:
        print('%s at %s' % (errorStatus.prettyPrint(),
                            errorIndex and varBinds[int(errorIndex)-1][0] or '?'))
        return 0
  else:
        for varBind in varBinds:
            ret.append(varBind[1]._value)
  return ret
def get_memory_usage():
    total_memory = getObjs([ObjectType(ObjectIdentity(myOIDs['hrStorageSize']))])
    used_memory = getObjs([ObjectType(ObjectIdentity(myOIDs['hrStorageUsed']))])
    if total_memory and used_memory and total_memory[0] > 0:
        memory_usage = (used_memory[0] / total_memory[0]) * 100
        return round(memory_usage, 2)
    else:
        return None
@app.route('/cpu/')
def cpu_used():
    cpuoid=ObjectType(ObjectIdentity(myOIDs['cpu_loads']))
    ret = getTableRows((cpuoid,))
    cpuload=0
    for i in ret:
        cpuload += i[0]
    return {'cpu':cpuload}
@app.route('/neicun/')
def memory():
    memory_usage = get_memory_usage()
    return {'memory_usage': memory_usage}
@app.route('/')
def index():
    return render_template('main.html')
if __name__ == '__main__':
    app.run()

 然后是main.html 的代码

先写2个盛放仪表盘的元素

 <div style="display: flex;">
        <div id="gaugeChart" style="width: 300px;height:300px;"></div>
        <div id="memory_usage" style="width: 300px;height:300px;"></div>
    </div>

 接下来到echarts官网下载仪表盘代码

Examples - Apache ECharts

点击我放在这里的链接 后 点击下载示例

 下载后拿编辑器打开 是这样的

我们要把他移植到我们的main.html 里面   

需要使用示例代码里面的script里面的内容

示例里面有2个script标签  第一个是一个网络连接   第二个就是内容了

然后把 2个script 复制到main.html 里body标签里面

就变成这样的了

 因为有2个仪表盘嘛 所以要2份  第二份的时候 就不需要再复制这个了

 复制下面script里面的内容到第一次复制的script的就可以(不需要复制script 标签了)

就是这个内容(下面还有只是没截全)

现在 基本有了  但是  刚刚不是下面 有2个吗, 变量名都是一样的  ,所以要换一下变量名

然后在加 2个 更新函数

 和

整合的代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div style="display: flex;">
        <div id="gaugeChart" style="width: 300px;height:300px;"></div>
        <div id="memory_usage" style="width: 300px;height:300px;"></div>
    </div>
    <script type="text/javascript" src="https://registry.npmmirror.com/echarts/5.5.1/files/dist/echarts.min.js"></script>
    <script>

var gaugeDom = document.getElementById('gaugeChart');
    var gaugeChart = echarts.init(gaugeDom, null, {
      renderer: 'canvas',
      useDirtyRect: false
    });
    var app={}
    var gaugeOption = {
      tooltip: {
        formatter: '{a} <br/>{b} : {c}%'
      },
      series: [
        {
          name: 'Pressure',
          type: 'gauge',
          detail: {
            formatter: '{value}'
          },
          data: [
            {
              value: 98,
              name: 'CPU负载'
            }
          ]
        }
      ]
    };

    if (gaugeOption && typeof gaugeOption === 'object') {
      gaugeChart.setOption(gaugeOption);
    }
    var myurl3 = "http://" + window.location.host+"/cpu/";
    setInterval(()=>{
      fetch(myurl3).then(res=>{
        return res.json()
      }).then((json)=>{
        gaugeOption.series[0].data[0].value = json.cpu;
        gaugeChart.setOption(gaugeOption);
      })
    },1000)

    var memory_usageDom = document.getElementById('memory_usage');
    var memory_usageChart = echarts.init(memory_usageDom, null, {
      renderer: 'canvas',
      useDirtyRect: false
    });
    var app={}
    var memory_usageOption = {
      tooltip: {
        formatter: '{a} <br/>{b} : {c}%'
      },
      series: [
        {
          name: 'Pressure',
          type: 'gauge',
          detail: {
            formatter: '{value}'
          },
          data: [
            {
              value: 98,
              name: '内存占有率'
            }
          ]
        }
      ]
    };
    if (memory_usageOption && typeof memory_usageOption === 'object') {
      memory_usageChart.setOption(memory_usageOption);
    }
    var myurCON = "http://" + window.location.host+"/neicun/";
    setInterval(()=>{
      fetch(myurCON).then(res=>{
        return res.json()
      }).then((json)=>{
        memory_usageOption.series[0].data[0].value = json.memory_usage;
        memory_usageChart.setOption(memory_usageOption);
      })
    },300)
    </script>
</body>
</html>

运行代码 

然后到Scripts目录下面

在上面输入cmd,然后再弹出的终端输入python ssr.py  

 然后访问这个网址就可以

流程

剩下的根据上面的流程写就可以

1.找OID

2.编写路由

3.echarts下载代码,使用

标签:教程,return,网络管理,app,点赞,ret,memory,usage,cpu
From: https://blog.csdn.net/m0_74172897/article/details/143921021

相关文章

  • Python3.9.13与深度学习框架TensorFlow的完整详细安装教程
    一、Python与TensorFlow版本的关系        TensorFlow的不同版本适用不同的Python版本,这是因为TensorFlow需要与Python的特性保持一致,以便最优化性能和功能。以下是一些主要版本之间的对应关系:TensorFlow版本支持的Python版本2.10.x3.7,3.8,3.92.9.x3.7,......
  • 我看看谁还不会AI模特试装!AI绘画电商系列保姆级教程(文末有福利)
    不得不说,AI绘画在电商行业展现出了巨大的商业价值,就连专注电商的AI绘画工具都层出不穷。茉莉也试了不少AI商拍工具,主打「0门槛」「一键式」操作,但效果和自定义灵活性,根本比不上Midjourney+StableDIffusion这一王炸组合!就拿AI模特试装来说,StableDIffusion可以更换任何你想......
  • Cesium初级开发教程之六:模型#model
    一、原理cesium只支持glb和gltf两种模型格式,可以通过gltf的模型node控制节点运动,加载模型的方式主要是entity和primitives两种方式。二、效果图三、代码1、entityviewer.trackedEntity可以将相机聚焦到entity上,并可以围绕entity旋转缩放相机,viewFrom可以调整相机围绕en......
  • tensorflow代码复现梯度不稳地的详细教程
    请先了解的我以下文章再来复现代码:Python和tensorflow安装:CSDN梯度不稳定问题:CSDN梯度消失:CSDN梯度爆炸:https://mp.csdn.net/mp_blog/creation/editor/143983878        代码中使用tape.gradient(Loss,W)来计算得出。1.Cmd命令中安装matplotlib     ......
  • vscode的C++引用头文件总是报错,网上教程都试了还是没用,请来这里。
    本教程跟网上大部分教程大同小异。(节省时间:在编辑task.json文件时只需写头文件路径,一定不要写源文件路径即可,其余步奏跟其他人的相同)若成功解决问题,希望可以给小编一个赞其中一些操作看不懂的可以先看其他人的步奏,如:适合初学者!超详细的vscode的C++自定义头文件的配置!_vscod......
  • conda虚拟环境教程
    本文介绍如何使用conda命令实现虚拟环境的创建,查询,删除1.创建虚拟环境condacreate--name<env_name>python=<version>env_name虚拟环境名称versionpython版本例:condacreate--namemy_envpython=3.102.进入虚拟环境condaactivate<env_name>env_name虚拟环境......
  • 一文讲解SSH你一定不知道的八大黑科技玩法,网络安全零基础入门到精通教程建议收藏!
    SSH(SecureShell)是什么?是一项创建在应用层和传输层基础上的安全协议,为计算机上的Shell(壳层)提供安全的传输和使用环境。也是专为远程登录会话和其他网络服务提供安全性的协议。它能够有效防止远程管理过程中的信息泄露问题。通过SSH可以对所有传输的数据进行加密,也能够防......
  • 【NI Multisim14.3软件下载与安装教程】
    ‌Multisim14.3‌是一款由美国国家仪器公司(NI)开发的电路仿真软件,主要用于电子电路的设计、仿真和分析。它适用于工程师、设计师、学生和电子爱好者,帮助他们进行电路设计、测试和验证。主要功能和应用场景Multisim14.3具有以下主要功能和应用场景:‌电路仿真‌:支持交流电路、直......
  • 蓝易云 - opengauss高可用之主备分开搭建教程。
    在部署OpenGauss高可用环境时,主备分开搭建是一种常见的实践方法。下面是一个教程,演示了如何分开搭建OpenGauss主备服务器的过程。确保服务器环境准备就绪:在主备服务器上安装操作系统和必要的依赖项,确保网络连接正常。下载并安装OpenGauss软件:从OpenGauss官方网站下载适合你......
  • 2024最新【秋叶启动器Stable Diffusion V4.9版本更新教程】来了,附下载链接
    做为AI绘画的主流工具之一,StableDiffusion(简称SD)大部分人都不陌生,用的最多的可能就是秋葉大佬的一键启动整合包。它以资源整合、安装方便、界面友好,自动更新、完全免费,深受广大AI绘画爱好者的欢迎前两天秋葉大佬更新了2024最新的4.9版本一键整合包,修复了一些BUG,更新了一......