搭建一个查看服务器信息的网站

Zss 发表于:

数据的来源是另外一个python进程一直在抓取系统的系统的两个信息,cpu和内存情况,没有再去抓取其他的信息了,也没有做分钟和小时的处理,时间单位为秒

需要查看到每天的信息或者每小时的信息,那么得自己写一些逻辑来处理这些数据存在数据库中,因为没有做这些处理了,所以只是简单的把抓取的数据写在文件中

使用Flask来搭建web的服务器,因为网页是一个静态网页,所有数据的更新得手动页面来更新,其中显示关于系统的最近十分钟的cpu利用率的情况

和内存最近一小时的情况,服务器的cpu比较差所以没有写入较多的数据,不然图表的生成需要比较久的时间,网页开的也很慢,不过先这么写在这里吧,说不定以后有用

要加什么信息的话,其实一个是数据的来源,再者就是flask中去定义路由函数,再者就是html的修改了

porject:Flask

利用python来获取数据记录数据,利用exproting来生成图表,利用flask来搭建web服务器,利用html来布局显示

这是使用的两个线程来分别记录cpu和内存的信息

#!/home/python/venv/bin/python
#coding:utf-8
from subprocess import *
import os,time
from datetime import datetime
from threading import Thread

class Data():
    def __init__(self):
   self.data_path = '../data'
       if not os.path.exists(self.data_path):
       os.makedirs(self.data_path)
       self.cpuinfo_cmd = "mpstat 1 1|sed -n '4,4'p|awk '{print $13}'"
   self.meminfo_cmd = "free|grep 'Mem'|awk '{print $3,$4}'"

    def check_file_size(self,file_name):
   file_size_cmd = "ls -l %s/%s.txt|awk '{print $5}'"%(self.data_path,file_name)
   if os.path.isfile(self.data_path + '/%s.txt'%file_name):
       result = Popen(file_size_cmd,shell=True,stdout=PIPE)
       file_size = int(result.stdout.read())
       if file_size >= 19097280:#大概七天的cpu利用率的数据量
           os.rename(self.data_path + '/%s.txt'%file_name,self.data_path + '/%s-old.txt'%file_name)
   
    def get_cpu_info(self):
   result = Popen(self.cpuinfo_cmd,shell=True,stdout=PIPE)
   info = result.stdout.read()
   use_cpu = 100.00-float(info)
   now_time = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
   with open(self.data_path + '/cpu.txt','a') as f:
            f.write(now_time + '-->' + str(use_cpu) + '-->' + str(info))
    
    def get_ram_info(self):
   result = Popen(self.meminfo_cmd,shell=True,stdout=PIPE)
        now_time = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
   info = result.stdout.read().split()
   meminfo = info[0][:-3] + '-->' + str(1880-int(info[0][:-3]))
   with open(self.data_path + '/mem.txt','a') as f:
       f.write(now_time + '-->' + str(meminfo) + '\n')
    
    def task(self,info):
        if info == 'cpu':
       while 1:
           data.check_file_size('cpu')
           data.get_cpu_info()
      time.sleep(1)
   if info == 'mem':
            while 1:
                data.check_file_size('mem')
                data.get_ram_info()
      time.sleep(1)

    def main(self):
   cpu_T = Thread(target=self.task,args=('cpu',))
   mem_T = Thread(target=self.task,args=('mem',))
   cpu_T.start()
   mem_T.start()

if __name__ == '__main__':
    data = Data()
    data.main()

使用pyecharts来生成相对应的图表

#coding:utf-8
from pyecharts import *

class Data_bar():
    def __init__(self):
        pass

    def get_10min_info(self,info):
        use_list = []
        ide_list = []
        with open('./data/%s.txt'%info)as f:
            data = f.readlines()
            index = len(data)
        if index >= 600:
            for i in data[-600:-1]:
                use_list.append((i.split('-->')[0],i.split('-->')[1]))
                ide_list.append((i.split('-->')[0], i.split('-->')[2]))
        else:
            for i in data:
                use_list.append((i.split('-->')[0],i.split('-->')[1]))
                ide_list.append((i.split('-->')[0], i.split('-->')[2]))
        return (use_list,ide_list)


    def get_cpu_dashbord(self):
        data = self.get_10min_info('cpu')
        use_key_10mins,use_value_10mins = zip(*data[0])
        line = Line("\nCPU LOAD","Units:%", width=1400, height=400)
        line.add("Use Last 10mins",use_key_10mins,use_value_10mins,xaxis_interval=120,is_xaxislabel_align=True,is_datazoom_show=True,datazoom_range=[0,100],datazoom_type='both',is_toolbox_show=False,mark_point=["max"])
        line.render('./templates/cpu.html')

    def get_ram_dashbord(self):
        data = self.get_10min_info('mem')
        use_key_1hours,use_value_1hours = zip(*data[0])
        idle_key_1hours,idle_value_1hours = zip(*data[1])
        line = Line("\nRAM LOAD","Units:M", width=1400, height=400)
        line.add("Use Last 1hours",use_key_1hours,use_value_1hours,xaxis_interval=120,is_xaxislabel_align=True,is_datazoom_show=True,datazoom_range=[0,100],datazoom_type='both',is_toolbox_show=False,mark_point=["max"])
        line.add("Idle Last 1hours",idle_key_1hours,idle_value_1hours,xaxis_interval=120,is_xaxislabel_align=True,is_datazoom_show=True,datazoom_range=[0,100],datazoom_type='both',is_toolbox_show=False,mark_point=["max"])
        line.render('./templates/ram.html')

data_bar = Data_bar()

# data_bar.get_1hours_info()