最近老板给提出一个需要,项目需求大致如下:

 
   1、用树莓派作为网关,底层接多个ZigBee传感节点,网关把ZigBee传感节点采集到的信息通过串口接收汇总,并且发送给上层的HTTP Server;
  1. 2、要有数据的反向控制通道,即网关与Server间要保持长连接,采用websocket实现,以此实现给ZigBee传感节点发送控制命令,来实现对ZigBee节点的远程配置操作;
  1. 3、树莓派网关本身要与上层Server实现交互,上层Server能够看到网关实时的cpu、内存以及网络上行与下行的带宽等等;

前两条需求在前一段时间已经基本实现,等后续有时间完善之后在整理,今天记录一下第三条的实现过程。

感觉第三条需求很像目前公司用到的监控系统的一个小的底层实现,因为前几天无聊刚好搭了个zabbix的环境玩了玩,感觉老板的需求在前端上好像就是类似于zabbix Server上的那种展现形式,但是用zabbix实在感觉不够灵活,其实我也用不明白,只能实现一个类似于top工具的监控脚本吧,先把实时的cpu、内存、网络流量等信息在本地表现出来,等待后续和Server端的朋友联调再说,代码如下:

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. #############################
  4. #__author__ = 'webber' #
  5. #create at 2016/12/12 #
  6. #############################
  7. import os
  8. import sys
  9. import time
  10.  
  11. def cpuinfo():
  12. """
  13. get cpuinfo from '/proc/stat' and
  14. calculate the percentage of the cpu occupy.
  15. """
  16. f = open('/proc/stat','r')
  17. cpu = f.readline()
  18. f.close()
  19. #print "cpuinfo: ", cpu
  20. cpu = cpu.split(" ")
  21. total = 0
  22. usr = float(cpu[2]) #用户态cpu占用率
  23. _sys = float(cpu[4]) #内核态cpu占用率
  24. for info in cpu:
  25. if info.isdigit():
  26. total += float(info)
  27. print '\033[31mcpu info: \033[0m',
  28. print 'usr: %.5f%%' % ((usr/total)*100),
  29. print ' sys: %.5f%%' % ((_sys/total)*100)
  30.  
  31. def meminfo():
  32. """
  33. get meminfo from '/proc/meminfo' and
  34. calculate the percentage of the mem occupy
  35. used = total - free - buffers - cached
  36. """
  37. f = open('/proc/meminfo','r')
  38. mem = f.readlines()
  39. f.close()
  40. #print "meminfo", mem
  41. total, free, buffers, cached = 0, 0, 0, 0
  42. for info in mem:
  43. mem_item = info.lower().split()
  44. #print mem_item
  45. if mem_item[0] == 'memtotal:':
  46. total = float(mem_item[1])
  47. if mem_item[0] == 'memfree:':
  48. free = float(mem_item[1])
  49. if mem_item[0] == 'buffers:':
  50. buffers = float(mem_item[1])
  51. if mem_item[0] == 'cached:':
  52. cached = float(mem_item[1])
  53. used = total - free - buffers - cached
  54. print "\033[31mmeminfo: \033[0m",
  55. print "total: %.2f GB" % (total/1024/1024),
  56. print " used: %.5f%%" % (used/total)
  57.  
  58. def netinfo():
  59. """
  60. get real-time bandwidth
  61. """
  62. f = open('/proc/net/dev','r')
  63. net = f.readlines()
  64. f.close()
  65.  
  66. net_item = []
  67. for info in net:
  68. if info.strip().startswith("eth0"):
  69. net_item = info.strip().split()
  70. break
  71. # print net_item
  72. recv = float(net_item[1])
  73. send = float(net_item[9])
  74. #print "recv:%s " % recv
  75. #print "send:%s " % send
  76. time.sleep(1)
  77.  
  78. f2 = open('/proc/net/dev','r')
  79. _net = f2.readlines()
  80. f2.close()
  81. _net_item = []
  82. for info in _net:
  83. if info.strip().startswith("eth0"):
  84. _net_item = info.strip().split()
  85. break
  86. recv_2 = float(_net_item[1])
  87. send_2 = float(_net_item[9])
  88.  
  89. #print "recv_2:%s " % recv_2
  90. #print "send_2:%s " % send_2
  91. print "\033[31m network info: \033[0m"
  92. print "received: %.3f Kb/s" % (recv_2/1024 - recv/1024)
  93. print "transmit: %.3f kb/s" % (send_2/1024 - send/1024)
  94.  
  95. def loadavg():
  96. pass
  97.  
  98. def disk():
  99. pass
  100.  
  101. if __name__ == '__main__':
  102. while True:
  103. try:
  104. os.system('clear')
  105. cpuinfo()
  106. print "=============================================="
  107. meminfo()
  108. print "##############################################"
  109. netinfo()
  110. time.sleep(5)
  111. except KeyboardInterrupt, e: # 这里也可以用信号函数来处理
  112. print ''
  113. print "BYE-BYE"
  114. sys.exit(0)

python 写一个类似于top的监控脚本的更多相关文章

  1. 用python写一个类似于linux中的tree

    import os filePath = 'g:/File' j = 0 # 查找的深度计数 def tree(filePath,j): dir_now = os.listdir(filePath) ...

  2. 用python写一个自动化盲注脚本

    前言 当我们进行SQL注入攻击时,当发现无法进行union注入或者报错等注入,那么,就需要考虑盲注了,当我们进行盲注时,需要通过页面的反馈(布尔盲注)或者相应时间(时间盲注),来一个字符一个字符的进行 ...

  3. 【Python】如何基于Python写一个TCP反向连接后门

    首发安全客 如何基于Python写一个TCP反向连接后门 https://www.anquanke.com/post/id/92401 0x0 介绍 在Linux系统做未授权测试,我们须准备一个安全的 ...

  4. 用Python写一个简单的Web框架

    一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...

  5. 十行代码--用python写一个USB病毒 (知乎 DeepWeaver)

    昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序.查了一下,发现只有windows上可以,具体的大家也可以搜索(搜索关键词usb autorun)到.但是,如果我想, ...

  6. [py]python写一个通讯录step by step V3.0

    python写一个通讯录step by step V3.0 参考: http://blog.51cto.com/lovelace/1631831 更新功能: 数据库进行数据存入和读取操作 字典配合函数 ...

  7. Python写一个自动点餐程序

    Python写一个自动点餐程序 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘记,或者是在地铁/公交上没办法点餐,所以总是没饭吃,只有 ...

  8. python写一个能变身电光耗子的贪吃蛇

    python写一个不同的贪吃蛇 写这篇文章是因为最近课太多,没有精力去挖洞,记录一下学习中的收获,python那么好玩就写一个大一没有完成的贪吃蛇(主要还是跟课程有关o(╥﹏╥)o,课太多好烦) 第一 ...

  9. 无监控不运维——使用 Python 写一个小小的项目监控

    在公司里做的一个接口系统,主要是对接第三方的系统接口,所以,这个系统里会和很多其他公司的项目交互.随之而来一个很蛋疼的问题,这么多公司的接口,不同公司接口的稳定性差别很大,访问量大的时候,有的不怎么行 ...

随机推荐

  1. 安装docker-compose的两种方式

    这里简单介绍下两种安装docker-compose的方式,第一种方式相对简单,但是由于网络问题,常常安装不上,并且经常会断开,第二种方式略微麻烦,但是安装过程比较稳定 方法一: # curl -L h ...

  2. ubuntu 查看系统服务的列表

    service --status-all

  3. 2017.7.18 windows下ELK环境搭建

    参考来自:Windows环境下ELK平台的搭建 另一篇博文:2017.7.18 linux下ELK环境搭建 0 版本说明 因为ELK从5.0开始只支持jdk 1.8,但是项目中使用的是JDK 1.7, ...

  4. 2016.6.30 tomcat开启时,显示端口被占用,如何修改端口

    开启tomcat时,有时候会显示端口8080已占用,所以需要将端口改为其他值. 找到tomcat的server.xml文件,修改为8088,如图所示:

  5. WEB接口测试之Jmeter接口测试自动化 (四)(持续构建)

    转载http://www.cnblogs.com/chengtch/p/6145867.html  Jmeter是压力测试.接口测试工具,Ant是基于Java的构建工具,具有跨平台的作用,jenkin ...

  6. 黑马程序猿——JAVA高新技术——反射

    ----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 一.对于反射的概念 对于JAVA反射机制是在执行状态中,对于随意一个类.都可以知道 ...

  7. Angular 学习笔记——filter

    <!DOCTYPE html> <html lang="en" ng-app="myApp"> <head> <met ...

  8. iOS音乐后台播放及锁屏信息显示

    实现音乐的后台播放.以及播放时,能够控制其暂停,下一首等操作,以及锁屏图片歌曲名等的显示 此实例须要真机调试.效果图例如以下: project下载:githubproject下载 实现步骤: 1.首先 ...

  9. InnoDB事务和锁

    InnoDB支持事务,MyISAM不支持事务. 一.事务的基本特性 ACID特性 1.原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行. 2.一致性( ...

  10. expect获取返回值

    对于获取多台server状态且不用交互须要用到expect,但有时候expect无法获取返回值.这里解释一下expect怎样获取返回值 expect -c "     spawn $1;   ...