Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >测试开发:Python + Flask 实现接口接收 Disk 信息

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

作者头像
Wu_Candy
发布于 2022-07-04 13:59:33
发布于 2022-07-04 13:59:33
34400
代码可运行
举报
文章被收录于专栏:无量测试之道无量测试之道
运行总次数:0
代码可运行

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

原理:

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

Part1:收集端
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import os
import requests
import json
import time

url="http://10.8.31.61:5555/GetDiskResource"
mem_data={}
mem_cmd = [
"df -h |grep home |awk -F' ' '{print $2}'",
"df -h |grep home |awk -F' ' '{print $3}'",
"df -h |grep home |awk -F' ' '{print $4}'"
]
def exec_cmd():
    for cmd in mem_cmd:
        print(cmd)
        response = os.popen(cmd)
        if("$2" in cmd):
            mem_data['total']=str(response.read()).replace("\n","")
        elif("$3" in cmd):
            mem_data['used']=str(response.read()).replace("\n","")
        elif("$4" in cmd):
            mem_data['available']=str(response.read()).replace("\n","")
    else:
        mem_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(mem_data)
        time.sleep(3600)
Part2:接收端
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#磁盘路由处理-------------------------------------------------------
@resource.route('/GetDiskResource',methods=['POST'])
def GetDiskResource():
    '''接收来自linux上传的数据'''
    query = request.get_json()
    hostname = query["hostname"]
    total = query["total"]
    used = query["used"]
    available = query["available"]
    createtime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    sql = "insert into disk_info (hostname,total,used,available,create_time) VALUES "
    data = "('" + hostname + "','" + total + "','" + used + "','" + available +  "','" + 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
代码运行次数:0
运行
AI代码解释
复制
<template>
    <div>
        <div class="crumbs">
            <el-breadcrumb separator="/">
                <el-breadcrumb-item>
                    <i class="el-icon-lx-cascades"></i> 磁盘信息
                </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="total" label="总共"></el-table-column>
                <el-table-column prop="used" label="使用掉"></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: 'InterfaceMem',
  data () {
    return {
      query: {
        hostname: '',
        pageIndex: 1,
        pageSize: 10
      },
      tableData: [],
      pageTotal: 0
    }
  },
  created () {
    this.getDiskData()
  },
  methods: {
    // 获取后端返回的真实数据
    getDiskData () {
      server({url: '/getDiskList', data: this.query, method: 'post'})
        .then(response => {
          console.log('**********')
          console.log(response)
          this.tableData = response.listdata
          console.log(this.tableData)
          this.pageTotal = response.pageTotal || 10
        })
    },
    // 触发搜索按钮
    handleSearch () {
      server({url: '/getDiskList', data: this.query, method: 'post'})
        .then(response => {
          console.log(response)
          this.tableData = response.listdata
          console.log(this.tableData)
          this.pageTotal = response.pageTotal || 10
        })
    },
    // 分页导航
    handleSizeChange (val) {
      // console.log(val)
      this.$set(this.query, 'pageSize', val)
      // console.log(this.query)
      this.getDiskData()
    },
    // 翻页改变页码触发
    handleCurrentChange (val) {
      this.$set(this.query, 'pageIndex', val)
      this.getDiskData()
    },
    clear_name () {
      this.query.hostname = ''
      this.getDiskData()
    },
    availableplus(rows){
      const availabl =rows.replace("G","")
      return Number(availabl) <15 ? '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
代码运行次数:0
运行
AI代码解释
复制
@resource.route('/getDiskList',methods=['POST'])
def getDiskList():
    '''fe的页面列表数据获取'''
    query = request.get_json()
    print(query)
    if (query["hostname"] == ""):
        sql1 = "select id,hostname,total,used,available,create_time from disk_info  order by id DESC limit " + str(
            (query['pageIndex'] - 1) * query["pageSize"]) + "," + str(query["pageSize"])
        count_sql = "select count(*) from disk_info"
        colume_sql = "select id from disk_info"

    else:
        sql1 = "select id,hostname,total,used,available,create_time from mem_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 disk_info where hostname like '%" + str(
            query["hostname"]) + "%' order by id DESC"
        colume_sql = "select id from disk_info"

    sql2 = "select id,hostname,total,used,available,create_time from disk_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-23,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
测试开发:Python + Flask 实现接口接收 CPU 信息
今天的内容是基于 测试开发:Python + Flask 实现接口接收内存信息 来进一步分享如何使用 Python + Flask 接收 CPU 的信息。
Wu_Candy
2022/07/04
3600
测试开发:Python + Flask 实现接口接收 CPU 信息
测试开发:Python + Flask 实现Nginx Log信息统计
通过 Python 调用 Shell 脚本去执行 Nginx Log 的相关命令,然后进行处理再请求 Requests 库来向后端定义好的接口来推送数据并展示。
Wu_Candy
2022/07/05
3410
测试开发:Python + Flask 实现Nginx  Log信息统计
从零开始做网站4-创建vue项目,整合后台系统
后端项目搭建出底子了,数据持久化也做了,然后就是前端开发了,首先呢是要创建一个vue项目,然后先做后台管理系统再高前台博客。。
sunonzj
2022/06/21
4430
从零开始做网站4-创建vue项目,整合后台系统
从零开始做网站9-Springboot+vue简单的增删改查功能
因为很久没写过vue了,而且3.0还是第一回接触,所以一边学习一边做,进度还是稍慢的
sunonzj
2022/06/21
1.2K0
从零开始做网站9-Springboot+vue简单的增删改查功能
10. CMDB前端开发-IDC管理
alexhuiwang
2023/05/26
1.3K0
10. CMDB前端开发-IDC管理
15.寻光集后台管理系统-产品信息-数据部分
直接使用框架提供的表格组件:frontend/src/components/scTable/index.vue
zx钟
2022/12/02
3790
15.寻光集后台管理系统-产品信息-数据部分
flask+vue:创建一个数据列表并实现简单的查询功能(一)
这里要用到element-ui中Select 选择器、 Form 表单 、DatePicker 日期选择器
冰霜
2022/03/15
2.4K1
flask+vue:创建一个数据列表并实现简单的查询功能(一)
vue+Element实现固定表头、左侧列、搜索、排序与分页
(adsbygoogle = window.adsbygoogle || []).push({});
tianyawhl
2019/04/04
6.4K0
Vue + Flask 小知识(三)
我们做一个简单的页面,两个输入框用来输入搜索条件,一个表格用来展示数据,先看下页面效果
周萝卜
2019/07/23
5540
Vue + Flask 小知识(三)
Vue框架Element UI教程-axios表格分页(九)
今天来写一个分页,表格分页在实际项目中经常用到,之前也写过关与bootstrap table 里面的表格分页,道理都差不多一样的,Element UI也有自己的组件可以用,话不多说,直接上代码了。
王小婷
2019/05/26
3.1K1
手拉手springboot+vue2+Element实现分页
@TableName是mybatis-plus中的注解,主要是实现实体类型和数据库中的表实现映射。
QGS
2023/12/20
2100
管理系统类毕设(三)---学生信息查询实现(包括前后端以及分页的实现)
用到了Element的面包屑 表格 表单 下拉菜单 开关组件 Element官网 Element官网
代码哈士奇
2021/01/26
1.1K0
管理系统类毕设(三)---学生信息查询实现(包括前后端以及分页的实现)
从0到1开发测试平台(十五)性能测试用例管理页面的编写
上一讲讲解了测试管理页面对应的后台接口,这一节我们主要讲解测试用例管理页面的编写,先上一张写完之后的效果图
周辰晨
2021/03/19
8690
低代码可视化-PC商城管理系统-产品分类--代码生成器
产品分类在商城管理系统中扮演着至关重要的角色。通过合理的分类,用户能够更快速地找到所需商品,提高购物效率。同时,分类也有助于商城对商品进行更有效的管理和展示,从而提升销售额和用户忠诚度。
用户7154236
2024/10/10
1160
低代码可视化-PC商城管理系统-产品分类--代码生成器
vuejs之springboot+vue+element-ui之分页显示相关信息
vue与springboot进行通讯:https://www.cnblogs.com/xiximayou/p/12336033.html
西西嘛呦
2020/08/26
9740
SpringBoot-Vue 前后端分离开发
vue安装最新版本 npm install -g @vue/cli 或 yarn global add @vue/cli
千羽
2021/01/14
7740
SpringBoot-Vue 前后端分离开发
在el-table上使用无限滚动加载
后来发现滚动到下面有时候会执行load2次,用下面的方法规避,间隔2秒才执行逻辑代码
tianyawhl
2022/01/20
4.5K0
测试脚本把页面搞崩了
真是惨重,而且chrome页面请求的接口无任何响应,后端数据有分页,前端也有分页,但是由于数据量过大,ivew的table太不经打了,因为是一个table的tree,于是这个锅,前端背了
Maic
2022/07/28
1.3K0
测试脚本把页面搞崩了
新手福利,通过一个简单示例快速上手Spring Boot+Vue前后端分离
Vue + Element UI 并不是真正的前后端分离,它只有前端服务,并没有后端服务提供数据接口,很多小伙伴在后台留言希望楠哥能写一篇完整的 Spring Boot + Vue 前后端分离教程。大家有需求,楠哥就会尽量满足,所以今天用一个简单易懂的例子,快速教会大家如何实现 Spring Boot + Vue 的前后端分离开发。
南风
2019/10/29
1K0
新手福利,通过一个简单示例快速上手Spring Boot+Vue前后端分离
前端成神之路-vue前端项目06
使用upload组件完成图片上传 在element.js中引入upload组件,并注册 因为upload组件进行图片上传的时候并不是使用axios发送请求 所以,我们需要手动为上传图片的请求添加token,即为upload组件添加headers属性
海仔
2021/05/06
1.8K0
推荐阅读
相关推荐
测试开发:Python + Flask 实现接口接收 CPU 信息
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验