遠程簡單地得到每臺服務器的cpu與memory使用狀況

須要遠程簡單地得到每臺服務器的cpu與memory使用狀況,用python寫了一個腳本,發佈一個http端口,當瀏覽器連上時,以json格式提供。html

用curl鏈接時輸出:python

#curl localhost:9999
{"cpu": 10, "mem": 50}

 代碼以下:json

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()
相關文章
相關標籤/搜索