需要远程简单地获得每台服务器的cpu与memory使用情况,用python写了一个脚本,发布一个http端口,当浏览器连上时,以json格式提供。
用curl连接时输出:
#curl localhost:9999
{"cpu": 10, "mem": 50}
代码如下:
import json
import os
import shutil
import subprocess
import sys
import time
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
from io import BytesIO
from SocketServer import ThreadingMixIn
from threading import Thread
cpu_mem_info={'cpu':0,'mem':0}
def read_cpu_usage():
with open('/proc/stat','r') as f:
line = f.readline()
fields = line.split()
total = long(fields[1])+long(fields[2])+long(fields[3])+long(fields[4])+long(fields[5])+long(fields[6])+long(fields[7])
used = long(fields[1])+long(fields[2])+long(fields[3])
print(used,total)
return (used,total)
def cpu_monitor():
global cpu_mem_info
while True:
(old_used,old_total) = read_cpu_usage()
time.sleep(3)
(new_used,new_total) = read_cpu_usage()
usage = (new_used-old_used)*100/(new_total-old_total)
cpu_mem_info['cpu'] = usage
print("cpu_monitor:{0}({1})".format(usage,time.asctime()))
def read_mem_usage():
with open('/proc/meminfo','r') as f:
line = f.readline()
fields = line.split()
total = long(fields[1])
line = f.readline()
fields = line.split()
used = long(fields[1])
return used*100/total
def mem_monitor():
global cpu_mem_info
while True:
usage = read_mem_usage()
cpu_mem_info['mem'] = usage
print("mem_monitor:{0}({1}".format(usage,time.asctime()))
time.sleep(3)
class CpuMemServerHandler(BaseHTTPRequestHandler):
global cpu_mem_info
def do_GET(self):
self.send_head()
f = BytesIO(json.dumps(cpu_mem_info).encode())
f.seek(0)
shutil.copyfileobj(f,self.wfile)
def send_head(self):
self.send_response(200)
self.send_header("Content-type",'text/html')
self.end_headers()
class CpuMemServer(ThreadingMixIn,HTTPServer):
pass
if __name__ == '__main__':
cpu_thread = Thread(target=cpu_monitor,args=())
cpu_thread.setDaemon(True)
cpu_thread.start()
mem_thread = Thread(target=mem_monitor,args=())
mem_thread.setDaemon(True)
mem_thread.start()
server = CpuMemServer(('',9999),CpuMemServerHandler)
server.serve_forever()
https模式?
####.....
server = CpuMemServer(('',9999),CpuMemServerHandler)
server.socket = ssl.wrap_socket(server.socket,keyfile="mykey.key",certfile="mycert.crt",server_side=True)
server.serve_forever()