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 写一个小小的项目监控
在公司里做的一个接口系统,主要是对接第三方的系统接口,所以,这个系统里会和很多其他公司的项目交互.随之而来一个很蛋疼的问题,这么多公司的接口,不同公司接口的稳定性差别很大,访问量大的时候,有的不怎么行 ...
随机推荐
- js获取页面传来参数的方法
function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&] ...
- OpenCV入门笔记(三) 图片处理
OpenCV中提供了非常多处理图片的强大函数,能够对非常多格式的图片 加特效.有点实现Photoshop里的工具的感觉. 以下先介绍一些简单和常见的特效. 二值化(Image Threshold) 參 ...
- android:Cordova Android, hello Cordova ,PhoneGap android
文章来自:http://blog.csdn.net/intbird 官方文档: http://cordova.apache.org/docs/en/5.0.0//index.html intbird的 ...
- Linux下xargs命令详解及xargs与管道的区别
在工作中经常会接触到xargs命令,特别是在别人写的脚本里面也经常会遇到,但是却很容易与管道搞混淆,本篇会详细讲解到底什么是xargs命令,为什么要用xargs命令以及与管道的区别.为什么要用xarg ...
- Web用户的身份验证及WebApi权限验证流程的设计和实现(续)
4.4 权限属性RequireAuthorizationAttribute [csharp] view plaincopy "font-size:14px;">/// / ...
- Java编程手冊-Collection框架(上)
该文章所讲内容基本涵盖了Collection里面的全部东西,尽管基于jdk 1.5的.可是思路非常清晰 1.引言 1.1 Collection框架的介绍 尽管我们能够使用数组去存储具有同样类型的元素集 ...
- 高效抽取loading,再多的载入页面也不怕
当今的app基本上有两个操作,一个是载入数据 ,一个就是把数据显示到页面上.但假设页面特别的多.就每一个页面都要载入数据,就要写 loading 页面.我之前就是用dialog写,抽取出来一个类.哪里 ...
- Android NDK开发篇(四):Java与原生代码通信(原生方法声明与定义与数据类型)
Java与原生代码通信涉及到原生方法声明与定义.数据类型.引用数据类型操作.NIO操作.訪问域.异常处理.原生线程 1.原生方法声明与定义 关于原生方法的声明与定义在上一篇已经讲一点了,这次具体分析一 ...
- list集合转换成json类型
public String gettext(HttpServletRequest request,HttpServletResponse response){ List<xuanhuan_> ...
- java游戏开发基础Swing之JRadioButton
© 版权声明:本文为博主原创文章,转载请注明出处 1.按钮(JButton) Swing中的按钮是JButton,它是javax.swing.AbstractButton类的子类,Swing中的按钮可 ...