tornado硬件管理系统-网络与磁盘的实现(7)

因为网络与磁盘的存储是一致的,故而。可以使用双饼图实现:

定义双饼图:

#-*- coding: utf-8 -*-
import datetime
from pyecharts import Liquid,Gauge,Pie,Line

class Chart(object):

    #定义双饼图
    def pie_two_html(self, chart_id, title, sub_title1, sub_title2, key1, key2, val1, val2):
        # 实例化饼状图
        pie = Pie(
            "{}-{}".format(self.dt, title),
            title_pos="center",
            width="100%",
            height=300,
            title_text_size=14,
            title_color="white"
        )
        # 指定ID
        pie.chart_id = chart_id
        # 绑定属性和值
        pie.add(
            sub_title1,
            key1,
            val1,
            center=[25, 50],#空心圆
            is_random=True,
            radius=[30, 75],
            rosetype="area",
            is_legend_show=False,
            is_label_show=True
        )
        pie.add(
            sub_title2,
            key2,
            val2,
            center=[75, 50],
            is_random=True,
            radius=[30, 75],
            rosetype="area",
            is_legend_show=False,
            is_label_show=True
        )
        return pie.render_embed()

    #定义一个时间方法
    @property
    def dt(self):
        return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

网络与存储的html

 <div class="col-md-12">
        <div class="card text-white bg-dark mb-3">
            <div class="card-header">内存/交换分区信息</div>
            <div class="card-body">
                <div class="row">
                    <div class="col-md-6 pad-right">
                        <div class="border border-white">{% raw data['mem_gauge'] %}</div>
                        <table class="table table-sm table-bordered">
                            <tr>
                                <td class="text-primary" style=" 30%">使用率(%)</td>
                                <td id="mem_percent" class="text-danger">{{ data['mem_info']['percent'] }}</td>
                            </tr>
                            <tr>
                                <td class="text-primary" style=" 30%">总量(GB)</td>
                                <td id="mem_total" class="text-danger">{{ data['mem_info']['total'] }}</td>
                            </tr>
                            <tr>
                                <td class="text-primary" style=" 30%">使用量(GB)</td>
                                <td id="mem_used" class="text-danger">{{ data['mem_info']['used'] }}</td>
                            </tr>
                            <tr>
                                <td class="text-primary" style=" 30%">剩余量(GB)</td>
                                <td id="mem_free" class="text-danger">{{ data['mem_info']['free'] }}</td>
                            </tr>
                        </table>
                    </div>
                    <div class="col-md-6 pad-left">
                        <div class="border border-white">{% raw data['swap_gauge'] %}</div>
                        <table class="table table-sm table-bordered">
                            <tr>
                                <td class="text-primary" style=" 30%">使用率(%)</td>
                                <td id="swap_percent" class="text-danger">{{ data['swap_info']['percent'] }}</td>
                            </tr>
                            <tr>
                                <td class="text-primary" style=" 30%">总量(GB)</td>
                                <td id="swap_total" class="text-danger">{{ data['swap_info']['total'] }}</td>
                            </tr>
                            <tr>
                                <td class="text-primary" style=" 30%">使用量(GB)</td>
                                <td id="swap_used" class="text-danger">{{ data['swap_info']['used'] }}</td>
                            </tr>
                            <tr>
                                <td class="text-primary" style=" 30%">剩余量(GB)</td>
                                <td id="swap_free" class="text-danger">{{ data['swap_info']['free'] }}</td>
                            </tr>
                        </table>
                    </div>
                </div>
            </div>
        </div>
    </div>
     <div class="col-md-12">
        <div class="card text-white bg-dark mb-3">
            <div class="card-header">网络信息</div>
            <div class="card-body">
                <div class="row">
                    {% for v in data['net_pie'] %}
                    <div class="col-md-12">
                        <div class="border border-white">{% raw v %}</div>
                    </div>
                    {% end %}
                    <div class="col-md-12">
                        <table class="table table-sm table-bordered">
                            <thead>
                                <tr class="text-primary">
                                    <th style=" 20%">网卡名称</th>
                                    <th style=" 10%">发送字节</th>
                                    <th style=" 10%">接收字节</th>
                                    <th style=" 10%">发送包数</th>
                                    <th style=" 10%">接收包数</th>
                                    <th style=" 10%">协议地址族</th>
                                    <th style=" 10%">IP地址</th>
                                    <th style=" 10%">子网掩码</th>
                                    <th style=" 10%">广播地址</th>
                                </tr>
                            </thead>
                            <tbody id="tb_net">
                                {% for v in data['net_info'] %}
                                    <tr>
                                        <td>{{ v['name'] }}</td>
                                        <td class="text-danger">{{ v['bytes_sent'] }}</td>
                                        <td class="text-danger">{{ v['bytes_recv'] }}</td>
                                        <td class="text-danger">{{ v['packets_sent'] }}</td>
                                        <td class="text-danger">{{ v['packets_recv'] }}</td>
                                        <td>{{ v['family'] }}</td>
                                        <td>{{ v['address'] }}</td>
                                        <td>{{ v['netmask'] }}</td>
                                        <td>
                                            {% if v['broadcast'] %}
                                            {{ v['broadcast'] }}
                                            {% else %}
                                            无
                                            {% end %}
                                        </td>
                                    </tr>
                                {% end%}
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>
        </div>
    </div>
     <div class="col-md-12">
        <div class="card text-white bg-dark mb-3">
            <div class="card-header">磁盘使用信息</div>
            <div class="card-body">
                <table class="table table-sm table-bordered">
                    <thead>
                        <tr class="text-primary">
                            <th style=" 10%">设备名称</th>
                            <th style=" 10%">挂载点</th>
                            <th style=" 10%">文件系统类型</th>
                            <th style=" 10%">操作选项</th>
                            <th style=" 10%">总量(GB)</th>
                            <th style=" 10%">使用量(GB)</th>
                            <th style=" 10%">剩余量(GB)</th>
                            <th style=" 30%">使用量(%)</th>
                        </tr>
                    </thead>
                    <tbody id="tb_disk">
                        {% for v in data['disk_info'] %}
                            <tr>
                                <td>{{ v['device'] }}</td>
                                <td>{{ v['mountpoint'] }}</td>
                                <td>{{ v['fstype'] }}</td>
                                <td>{{ v['opts'] }}</td>
                                <td class="text-danger">{{ v['used']['total'] }}GB</td>
                                <td class="text-danger">{{ v['used']['used'] }}GB</td>
                                <td class="text-danger">{{ v['used']['free'] }}GB</td>
                                <td>
                                    <div class="progress">
                                        <div class="progress-bar progress-bar-striped progress-bar-animated{{ handler.progress_status(v['used']['percent']) }}"
                                             role="progressbar" aria-valuenow="{{ v['used']['percent'] }}" aria-valuemin="0"
                                             aria-valuemax="100" style=" {{ v['used']['percent'] }}%">{{ v['used']['percent'] }}%
                                        </div>
                                    </div>
                                </td>
                            </tr>
                        {% end %}
                    </tbody>
                </table>
            </div>
        </div>
    </div>
View Code

实时更新处理:

/*网络信息更新*/
    var net = "";
    for (var k in data['net']) {
        var cd = data['net'][k];
        if (parseInt(cd['bytes_sent']) != 0 && parseInt(cd["bytes_recv"]) != 0) {
            var index = parseInt(k) + 1;
            var op = eval("option_net" + index);
            var ch = eval("myChart_net" + index);
            op.title[0].text = data["dt"] + "-" + cd["name"] + "网卡信息";
            op.series[0].data = [
                {"name": "收包数", "value": cd["packets_recv"]},
                {"name": "发包数", "value": cd["packets_sent"]}
            ];
            op.series[1].data = [
                {"name": "收字节", "value": cd["bytes_recv"]},
                {"name": "发字节", "value": cd["bytes_sent"]}
            ];
            ch.setOption(op);
        }
        net += "<tr><td>" + cd['name'] + "</td>";
        net += "<td class='text-danger'>" + cd['bytes_sent'] + "</td>";
        net += "<td class='text-danger'>" + cd['bytes_recv'] + "</td>";
        net += "<td class='text-danger'>" + cd['packets_sent'] + "</td>";
        net += "<td class='text-danger'>" + cd['packets_recv'] + "</td>";
        net += "<td>" + cd['family'] + "</td>";
        net += "<td>" + cd['address'] + "</td>";
        net += "<td>" + cd['netmask'] + "</td>";
        if (cd['broadcast']) {
            net += "<td>" + cd['broadcast'] + "</td></tr>";
        } else {
            net += "<td>无</td></tr>";
        }
    }
    document.getElementById("tb_net").innerHTML = net;

       /*磁盘使用信息实时更新*/
    var disk = "";
    for (var k in data["disk"]) {
        var cd = data["disk"][k];
        disk += "<tr><td>" + cd['device'] + "</td>";
        disk += "<td>" + cd['mountpoint'] + "</td>";
        disk += "<td>" + cd['fstype'] + "</td>";
        disk += "<td>" + cd['opts'] + "</td>";
        disk += "<td class='text-danger'>" + cd['used']['total'] + "GB</td>";
        disk += "<td class='text-danger'>" + cd['used']['used'] + "GB</td>";
        disk += "<td class='text-danger'>" + cd['used']['free'] + "GB</td>";
        disk += "<td><div class='progress'><div class='progress-bar progress-bar-striped progress-bar-animated" + progress_status(cd['used']['percent']) + "' role='progressbar' aria-valuenow='" + cd['used']['percent'] + "' aria-valuemin='0' aria-valuemax='100' style=' " + cd['used']['percent'] + "%'>" + cd['used']['percent'] + "%</div></div></td></tr>";
    }
    document.getElementById("tb_disk").innerHTML = disk;

结果展示:

 

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