tornado硬件管理系统-cpu的水球图与实时进度图(5)

添加水球,下载插件添加到静态文件中。

在html文件处理echart的问题。导入路径即可

<script src="{{ static_url('echarts-liquidfill/echarts-liquidfill.min.js') }}"></script>

修改index.html

  <div class="card-header">CPU消息</div>
            <div class="card-body">
                <div class="row">
                    <div class="col-md-6 pad-right">
                        <div class="border border-white">{% raw data['cpu_liquid']%}</div>
                    </div>
                    <div class="col-md-6 pad-left">
                        <table class="table table-sm table-bordered">
                            <thead>
                            <th class="text-center" colspan="2" >所有CPU使用率</th>
                            </thead>
                             <tbody id="tb_cpu_per">
                             {% for k,v in enumerate(data['cpu_info']['percent_per'])%}
                            <tr>
                                <td class="text-primary" style=" 30%">
                                CPU{{k}}}</td>
                                <td>
                                    <div class="progress">
                                        <div class="progress-bar progress-bar-striped progress-bar-animated{{ handler.progress_status(v) }}"
                                             role="progressbar" aria-valuenow="{{v}}" aria-valuemin="0"
                                             aria-valuemax="100" style=" {{ v }}%">{{ v }}%
                                        </div>
                                    </div>
                                    </td>
                            </tr>
                            {%end%}
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>
View Code

文件渲染:

#-*- conding: utf-8 -*-
# import tornado.web
from app.tools.monitor import Moniter
from app.tools.chart import Chart
from app.views.views_common import CommonHandler
#定义一个首页视图
class IndexHandler(CommonHandler):
    def get(self,*args,**kwargs):
        m = Moniter()
        c = Chart()
        cpu_info = m.cpu()
        data = dict(
            cpu_info=cpu_info,
            cpu_liquid=c.liquid_html(chart_id="cpu_avg",title="Cpu-Percent",val=cpu_info['percent_avg']))

        self.render("index.html",data=data
           )

将cpu的相关消息进行发送处理:

#-*- coding: utf-8 -*-
import json
from sockjs.tornado import SockJSConnection
from app.tools.monitor import Moniter
class RealTimeHandler(SockJSConnection):
    #建立连接池
    waiters = set()
    def on_open(self, request):
        try:
            self.waiters.add(self)
        except Exception as e:
            print(e)

    #发送消息
    def on_message(self, message):
        try:
            m = Moniter()
            data = dict()
            if message == "system":
                data = dict(
                    mem = m.men(),
                    swap = m.swap(),
                    cpu = m.cpu(),
                    disk = m.disk(),
                    net = m.net(),
                    dt = m.dt(),
                )
                #弄清楚dumps的区别
            self.broadcast(self.waiters,json.dumps(data))
        except Exception as e:
            print(e)
    #关闭连接
    def on_close(self):
        try:
            self.waiters.remove(self)
        except Exception as e:
            print(e)

动态处理不同等级的cpu占用率的处理

# -*- coding: utf-8 -*-
import tornado.web
from tornado.escape import utf8
from tornado.util import unicode_type
from app.tools.monitor import Moniter
from concurrent.futures import ThreadPoolExecutor


class CommonHandler(tornado.web.RequestHandler):
    executor = ThreadPoolExecutor(1000)
    #进度条状态
    def progress_status(self, val):
        data = ""
        if 0 <= val < 25:
            data = " bg-success"  # 绿色
        if 25 <= val < 50:
            data = ""
        if 50 <= val < 75:
            data = " bg-warning"  # 橙色
        if 75 <= val <= 100:
            data = " bg-danger"  # 红色
        return data

自定数据的实时更新【每个cpu的具体信息】

//定义长连接
var conn = null;
//进度条的变化
function progress_status(val){
    var data = "";
    if (val >=0 && val < 25){
        data="bg-success";
    }else if(val>=25 && val < 50){
        data="";
    }else if(val>=50 && val <75){
        data="bg-warining";
    }else if(val >=75 && val < 100){
        data = "bg-success"

    }

}
//专门定义一个实时处理的函数
function update_ui(e) {
    var data = e.data;
    data = JSON.parse(data);
    //平均cpu
    option_cpu_avg.series[0].data[0] = (data['cpu']['percent_avg']/100).toFixed(4);
    option_cpu_avg.title[0].text = data['dt']+"-Cpu-Percent";
    myChart_cpu_avg.setOption(option_cpu_avg);
    //单独的cpu
    var cpu_per = "";
    for (var k in data['cpu']['percent_per']){
        var num = parseInt(k);
         cpu_per += "<tr><td class='text-primary' style=' 30%'>CPU" + num + "</td>";
        cpu_per += "<td>" +
            "<div class='progress'>" +
            "<div class='progress-bar progress-bar-striped progress-bar-animated" +
            progress_status(data['cpu']['percent_per'][k]) +
            "' role='progressbar' aria-valuenow='" +
            data['cpu']['percent_per'][k] +
            "' aria-valuemin='0' aria-valuemax='100' style=' " +
            data['cpu']['percent_per'][k] + "%'>" +
            data['cpu']['percent_per'][k] + "%" +
            "</div></div></td></tr>";
    }
    document.getElementById("tb_cpu_per").innerHTML=cpu_per;
}

//定义连接的函数
function  connect() {
    //优先将以前的所有的连接关闭掉。
    disconnect();
    //定义协议
    var transports = ["websocket"];
    //创建连接的对象
    conn = new SockJS("http://"+window.location.host+"/real/time",transports);
    //创建连接
    conn.onopen=function () {
        console.log("is success");
    };
    //连接发送消息
    conn.onmessage=function (e) {
        update_ui(e)
    };
    //连接关闭
    conn.onclose=function () {
        console.log("is colse")
    };
    //每个几秒触发一个事件,解决连接是否完成的
    setInterval(function () {
        conn.send("system");

    },1000);
}

//定义断开连接函数
function disconnect() {
    if (conn!=null){
        conn.close();
        conn=null;
    }
}

//刷新页面的时候,处理断开与重连的函数,重连判断
if(conn==null){
    connect()
}else{
    disconnect();
}

结果显示:

原文地址:https://www.cnblogs.com/topass123/p/13122427.html