python 写一个类似于top的监控脚本
最近老板给提出一个需要,项目需求大致如下:
1、用树莓派作为网关,底层接多个ZigBee传感节点,网关把ZigBee传感节点采集到的信息通过串口接收汇总,并且发送给上层的HTTP Server;
- 2、要有数据的反向控制通道,即网关与Server间要保持长连接,采用websocket实现,以此实现给ZigBee传感节点发送控制命令,来实现对ZigBee节点的远程配置操作;
- 3、树莓派网关本身要与上层Server实现交互,上层Server能够看到网关实时的cpu、内存以及网络上行与下行的带宽等等;
前两条需求在前一段时间已经基本实现,等后续有时间完善之后在整理,今天记录一下第三条的实现过程。
感觉第三条需求很像目前公司用到的监控系统的一个小的底层实现,因为前几天无聊刚好搭了个zabbix的环境玩了玩,感觉老板的需求在前端上好像就是类似于zabbix Server上的那种展现形式,但是用zabbix实在感觉不够灵活,其实我也用不明白,只能实现一个类似于top工具的监控脚本吧,先把实时的cpu、内存、网络流量等信息在本地表现出来,等待后续和Server端的朋友联调再说,代码如下:
- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- #############################
- #__author__ = 'webber' #
- #create at 2016/12/12 #
- #############################
- import os
- import sys
- import time
- def cpuinfo():
- """
- get cpuinfo from '/proc/stat' and
- calculate the percentage of the cpu occupy.
- """
- f = open('/proc/stat','r')
- cpu = f.readline()
- f.close()
- #print "cpuinfo: ", cpu
- cpu = cpu.split(" ")
- total = 0
- usr = float(cpu[2]) #用户态cpu占用率
- _sys = float(cpu[4]) #内核态cpu占用率
- for info in cpu:
- if info.isdigit():
- total += float(info)
- print '\033[31mcpu info: \033[0m',
- print 'usr: %.5f%%' % ((usr/total)*100),
- print ' sys: %.5f%%' % ((_sys/total)*100)
- def meminfo():
- """
- get meminfo from '/proc/meminfo' and
- calculate the percentage of the mem occupy
- used = total - free - buffers - cached
- """
- f = open('/proc/meminfo','r')
- mem = f.readlines()
- f.close()
- #print "meminfo", mem
- total, free, buffers, cached = 0, 0, 0, 0
- for info in mem:
- mem_item = info.lower().split()
- #print mem_item
- if mem_item[0] == 'memtotal:':
- total = float(mem_item[1])
- if mem_item[0] == 'memfree:':
- free = float(mem_item[1])
- if mem_item[0] == 'buffers:':
- buffers = float(mem_item[1])
- if mem_item[0] == 'cached:':
- cached = float(mem_item[1])
- used = total - free - buffers - cached
- print "\033[31mmeminfo: \033[0m",
- print "total: %.2f GB" % (total/1024/1024),
- print " used: %.5f%%" % (used/total)
- def netinfo():
- """
- get real-time bandwidth
- """
- f = open('/proc/net/dev','r')
- net = f.readlines()
- f.close()
- net_item = []
- for info in net:
- if info.strip().startswith("eth0"):
- net_item = info.strip().split()
- break
- # print net_item
- recv = float(net_item[1])
- send = float(net_item[9])
- #print "recv:%s " % recv
- #print "send:%s " % send
- time.sleep(1)
- f2 = open('/proc/net/dev','r')
- _net = f2.readlines()
- f2.close()
- _net_item = []
- for info in _net:
- if info.strip().startswith("eth0"):
- _net_item = info.strip().split()
- break
- recv_2 = float(_net_item[1])
- send_2 = float(_net_item[9])
- #print "recv_2:%s " % recv_2
- #print "send_2:%s " % send_2
- print "\033[31m network info: \033[0m"
- print "received: %.3f Kb/s" % (recv_2/1024 - recv/1024)
- print "transmit: %.3f kb/s" % (send_2/1024 - send/1024)
- def loadavg():
- pass
- def disk():
- pass
- if __name__ == '__main__':
- while True:
- try:
- os.system('clear')
- cpuinfo()
- print "=============================================="
- meminfo()
- print "##############################################"
- netinfo()
- time.sleep(5)
- except KeyboardInterrupt, e: # 这里也可以用信号函数来处理
- print ''
- print "BYE-BYE"
- sys.exit(0)
python 写一个类似于top的监控脚本的更多相关文章
- 用python写一个类似于linux中的tree
import os filePath = 'g:/File' j = 0 # 查找的深度计数 def tree(filePath,j): dir_now = os.listdir(filePath) ...
- 用python写一个自动化盲注脚本
前言 当我们进行SQL注入攻击时,当发现无法进行union注入或者报错等注入,那么,就需要考虑盲注了,当我们进行盲注时,需要通过页面的反馈(布尔盲注)或者相应时间(时间盲注),来一个字符一个字符的进行 ...
- 【Python】如何基于Python写一个TCP反向连接后门
首发安全客 如何基于Python写一个TCP反向连接后门 https://www.anquanke.com/post/id/92401 0x0 介绍 在Linux系统做未授权测试,我们须准备一个安全的 ...
- 用Python写一个简单的Web框架
一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...
- 十行代码--用python写一个USB病毒 (知乎 DeepWeaver)
昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序.查了一下,发现只有windows上可以,具体的大家也可以搜索(搜索关键词usb autorun)到.但是,如果我想, ...
- [py]python写一个通讯录step by step V3.0
python写一个通讯录step by step V3.0 参考: http://blog.51cto.com/lovelace/1631831 更新功能: 数据库进行数据存入和读取操作 字典配合函数 ...
- Python写一个自动点餐程序
Python写一个自动点餐程序 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘记,或者是在地铁/公交上没办法点餐,所以总是没饭吃,只有 ...
- python写一个能变身电光耗子的贪吃蛇
python写一个不同的贪吃蛇 写这篇文章是因为最近课太多,没有精力去挖洞,记录一下学习中的收获,python那么好玩就写一个大一没有完成的贪吃蛇(主要还是跟课程有关o(╥﹏╥)o,课太多好烦) 第一 ...
- 无监控不运维——使用 Python 写一个小小的项目监控
在公司里做的一个接口系统,主要是对接第三方的系统接口,所以,这个系统里会和很多其他公司的项目交互.随之而来一个很蛋疼的问题,这么多公司的接口,不同公司接口的稳定性差别很大,访问量大的时候,有的不怎么行 ...
随机推荐
- 安装docker-compose的两种方式
这里简单介绍下两种安装docker-compose的方式,第一种方式相对简单,但是由于网络问题,常常安装不上,并且经常会断开,第二种方式略微麻烦,但是安装过程比较稳定 方法一: # curl -L h ...
- ubuntu 查看系统服务的列表
service --status-all
- 2017.7.18 windows下ELK环境搭建
参考来自:Windows环境下ELK平台的搭建 另一篇博文:2017.7.18 linux下ELK环境搭建 0 版本说明 因为ELK从5.0开始只支持jdk 1.8,但是项目中使用的是JDK 1.7, ...
- 2016.6.30 tomcat开启时,显示端口被占用,如何修改端口
开启tomcat时,有时候会显示端口8080已占用,所以需要将端口改为其他值. 找到tomcat的server.xml文件,修改为8088,如图所示:
- WEB接口测试之Jmeter接口测试自动化 (四)(持续构建)
转载http://www.cnblogs.com/chengtch/p/6145867.html Jmeter是压力测试.接口测试工具,Ant是基于Java的构建工具,具有跨平台的作用,jenkin ...
- 黑马程序猿——JAVA高新技术——反射
----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 一.对于反射的概念 对于JAVA反射机制是在执行状态中,对于随意一个类.都可以知道 ...
- Angular 学习笔记——filter
<!DOCTYPE html> <html lang="en" ng-app="myApp"> <head> <met ...
- iOS音乐后台播放及锁屏信息显示
实现音乐的后台播放.以及播放时,能够控制其暂停,下一首等操作,以及锁屏图片歌曲名等的显示 此实例须要真机调试.效果图例如以下: project下载:githubproject下载 实现步骤: 1.首先 ...
- InnoDB事务和锁
InnoDB支持事务,MyISAM不支持事务. 一.事务的基本特性 ACID特性 1.原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行. 2.一致性( ...
- expect获取返回值
对于获取多台server状态且不用交互须要用到expect,但有时候expect无法获取返回值.这里解释一下expect怎样获取返回值 expect -c " spawn $1; ...