前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >测试开发:Python + Flask 实现接口接收 CPU 信息

测试开发:Python + Flask 实现接口接收 CPU 信息

作者头像
Wu_Candy
发布2022-07-04 21:57:28
3200
发布2022-07-04 21:57:28
举报
文章被收录于专栏:无量测试之道无量测试之道

今天的内容是基于 测试开发:Python + Flask 实现接口接收内存信息 来进一步分享如何使用 Python + Flask 接收 CPU 的信息。

原理:

通过 Python 调用 Shell 脚本去执行 CPU 的相关信息,然后进行处理再请求 Requests 库来向后端定义好的接口来推送数据。

Part1:收集端
代码语言:javascript
复制
import os
import requests
import json
import time

url="http://10.8.31.61:5555/GetCpuResource"
cpu_data={}
cpu_cmd = [
"cat /proc/cpuinfo |grep 'processor' |wc -l",
"cat /proc/cpuinfo |grep 'physical id'|sort |uniq |wc -l",
"cat /proc/cpuinfo |grep 'cpu cores'|awk -F' ' '{print $4}' |sort |wc -l",
"uptime |awk -F':' '{print $5}'"
]
def exec_cmd():
    for cmd in cpu_cmd:
        print(cmd)
        response = os.popen(cmd)
        if("processor" in cmd):
            cpu_data['logic_cpu']=str(response.read()).replace("\n","")
        elif("physical" in cmd):
            cpu_data['physical_cpu']=str(response.read()).replace("\n","")
        elif("cores" in cmd):
            cpu_data['cpu_cores']=str(response.read()).replace("\n","")
        elif("uptime" in cmd):
            cpu_data['cpu_load'] = str(response.read()).replace("\n", "")
            if (len(cpu_data['cpu_load']) < 3):
                response = os.popen("uptime |awk -F':' '{print $4}'")
                cpu_data['cpu_load'] = str(response.read()).replace("\n", "")

    else:
        cpu_data['hostname']=str(os.popen("hostname |awk -F'.' '{print $1}' |awk -F'-' '{print $2}'").read()).replace("\n","")
    response.close()

def httpPost(datas):
    header = {"Content-Type":"application/json"}
    resp_content = requests.post(url=url,data=json.dumps(datas),headers=header)
    print(resp_content.text)

if __name__ == '__main__':
    while True:
        exec_cmd()
        httpPost(cpu_data)
        time.sleep(3600)
Part2:接收端
代码语言:javascript
复制
#CPU路由处理
@resource.route('/GetCpuResource',methods=['POST'])
def GetCpuResource():
    '''接收来自linux上传的数据'''
    query = request.get_json()
    hostname = query["hostname"]
    logic_cpu = query["logic_cpu"]
    physical_cpu = query["physical_cpu"]
    cpu_cores = query["cpu_cores"]
    cpu_load = query["cpu_load"]
    createtime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    sql = "insert into cpu_info (hostname,logic_cpu,physical_cpu,cpu_cores,cpu_load,create_time) VALUES "
    data = "('" + hostname + "','" + logic_cpu + "','" + physical_cpu + "','" + cpu_cores + "','" + cpu_load + "','" + str(createtime) + "'"
    end = data + ")"
    sql = sql + end
    print(sql)
    db = conndb()
    db.execute_sql(sql)
    data = {'code': 200, 'message': 'success', 'status': '10000'}
    return json.dumps(data)
Part3:展示端

这部分主要分为以下两块内容:

第一块是页面请求
代码语言:javascript
复制
<template>
    <div>
        <div class="crumbs">
            <el-breadcrumb separator="/">
                <el-breadcrumb-item>
                    <i class="el-icon-lx-cascades"></i> CPU信息
                </el-breadcrumb-item>
            </el-breadcrumb>
        </div>
        <div class="container">
            <div class="handle-box">
                <el-input v-model="query.hostname" placeholder="环境" class="handle-input mr10" clearable @clear="clear_name"></el-input>
                <el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button>
            </div>
            <el-table
                :data="tableData"
                border
                class="table"
                ref="multipleTable"
                header-cell-class-name="table-header">
                <el-table-column prop="id" label="ID" width="55" align="center"></el-table-column>
                <el-table-column prop="hostname" label="环境"></el-table-column>
                <el-table-column prop="logic_cpu" label="逻辑CPU"></el-table-column>
                <el-table-column prop="physical_cpu" label="物理CPU"></el-table-column>
                <el-table-column prop="cpu_cores" label="CPU核数"></el-table-column>
                <el-table-column prop="cpu_load" width="255" label="CPU负载Avg[1min,5min,15min]"></el-table-column>
                <!--<el-table-column prop="available" label="可用">-->
                  <!--<template #default="scope">-->
                        <!--<el-tag :type="availableplus(scope.row.available) === 'success' ? 'success': 'danger'">{{ scope.row.available }}</el-tag>-->
                  <!--</template>-->
                <!--</el-table-column>-->
                <el-table-column prop="create_time" width="160" label="创建时间"></el-table-column>
            </el-table>
          <el-pagination
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
            :current-page="query.pageIndex"
            :page-sizes="[5, 10, 20, 30]"
            :page-size="query.pageSize"
            layout="total, sizes, prev, pager, next, jumper"
            :total="parseInt(pageTotal)">
          </el-pagination>
        </div>
    </div>
</template>

<script>
import server from '../api/request.js'
export default {
  name: 'InterfaceCpu',
  data () {
    return {
      query: {
        hostname: '',
        pageIndex: 1,
        pageSize: 10
      },
      tableData: [],
      pageTotal: 0
    }
  },
  created () {
    this.getMemData()
  },
  methods: {
    // 获取后端返回的真实数据
    getMemData () {
      server({url: '/getCpuList', data: this.query, method: 'post'})
        .then(response => {
          console.log('**********')
          console.log(response)
          this.tableData = response.listdata
          console.log(this.tableData)
          this.pageTotal = response.pageTotal || 5
        })
    },
    // 触发搜索按钮
    handleSearch () {
      server({url: '/getCpuList', data: this.query, method: 'post'})
        .then(response => {
          console.log(response)
          this.tableData = response.listdata
          console.log(this.tableData)
          this.pageTotal = response.pageTotal || 5
        })
    },
    // 分页导航
    handleSizeChange (val) {
      // console.log(val)
      this.$set(this.query, 'pageSize', val)
      // console.log(this.query)
      this.getMemData()
    },
    // 翻页改变页码触发
    handleCurrentChange (val) {
      this.$set(this.query, 'pageIndex', val)
      this.getMemData()
    },
    clear_name () {
      this.query.hostname = ''
      this.getMemData()
    },
    freeplus(rows){
      const free =rows.replace("M","")
      // console.log(free)
      // console.log(typeof free)
      return Number(free) <100 ? 'danger' : 'success'
    },
    availableplus(rows){
      const availabl =rows.replace("M","")
      // console.log(free)
      // console.log(typeof free)
      return Number(availabl) <1000 ? 'danger' : 'success'
    }
  }
}
</script>

<style scoped>
.handle-box {
    margin-bottom: 20px;
}

.handle-select {
    width: 120px;
}

.handle-input {
    width: 300px;
    display: inline-block;
}
.table {
    width: 100%;
    font-size: 14px;
}
.red {
    color: #ff0000;
}
.mr10 {
    margin-right: 10px;
}
.table-td-thumb {
    display: block;
    margin: auto;
    width: 40px;
    height: 40px;
}
</style>
第二块是后端请求处理
代码语言:javascript
复制
@resource.route('/getCpuList',methods=['POST'])
def getCpuList():
    '''fe的页面列表数据获取'''
    query = request.get_json()
    print(query)
    if (query["hostname"] == ""):
        sql1 = "select id,hostname,logic_cpu,physical_cpu,cpu_cores,cpu_load,create_time from cpu_info  order by id DESC limit " + str(
            (query['pageIndex'] - 1) * query["pageSize"]) + "," + str(query["pageSize"])
        count_sql = "select count(*) from mem_info"
        colume_sql = "select id from mem_info"

    else:
        sql1 = "select id,hostname,logic_cpu,physical_cpu,cpu_cores,cpu_load,create_time from cpu_info where hostname like '%" + str(query["hostname"]) + "%' order by id DESC" + " limit " + str(
            (query['pageIndex'] - 1) * query["pageSize"]) + "," + str(query["pageSize"])
        count_sql = "select count(*) from cpu_info where hostname like '%" + str(
            query["hostname"]) + "%' order by id DESC"
        colume_sql = "select id from cpu_info"

    sql2 = "select id,hostname,logic_cpu,physical_cpu,cpu_cores,cpu_load,create_time from cpu_info"
    db = conndb()
    listdata = db.get_data(sql1, sql2)
    db = conndb()
    result = db.get_data(count_sql, colume_sql)
    print(result)
    pageTotal = result[0]['id']
    print(listdata)
    print(pageTotal)
    data = {'listdata': listdata, "pageTotal": pageTotal, "code": 200}
    return json.dumps(data)
Part4:页面展示

end

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-12-17,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 无量测试之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Part1:收集端
  • Part2:接收端
  • Part3:展示端
    • 第一块是页面请求
      • 第二块是后端请求处理
      • Part4:页面展示
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
      http://www.vxiaotou.com