CMDB-dashboard仪表盘(十二)
对于运维管理平台,一个总览的dashboard仪表盘界面是必须有的,不但提升整体格调,也有利于向老板‘邀功请赏’。
dashboard页面必须酷炫吊炸天,所以界面元素应当美观、丰富、富有冲击力。
完整的dashboard.html文件代码如下:
dashboard.html
https://github.com/zhangduanya/mycmdb/blob/master/templates/assets/dashboard.html
一、资产状态占比图
首先,制作一个资产状态百分比表盘,用于显示上线、下线、未知、故障和备用五种资产在总资产中的占比。注意是占比,不是数量!
按照AdminLTE中提供的示例,在HTML中添加相应的标签,在script中添加相应的JS代码(jQueryKnob)。JS代码基本照抄,不需要改动。对于显示的圆圈,可以修改其颜色、大小、形态、是否只读等属性,可以参照AdminLTE中的范例。
最重要的是,需要从数据库中获取相应的数据,修改assets/views.py中的dashboard视图,最终如下:
def dashboard(request):
total = models.Asset.objects.count()
upline = models.Asset.objects.filter(status=0).count()
offline = models.Asset.objects.filter(status=1).count()
unknown = models.Asset.objects.filter(status=2).count()
breakdown = models.Asset.objects.filter(status=3).count()
backup = models.Asset.objects.filter(status=4).count()
up_rate = round(upline/total*100)
o_rate = round(offline/total*100)
un_rate = round(unknown/total*100)
bd_rate = round(breakdown/total*100)
bu_rate = round(backup/total*100)
server_number = models.Server.objects.count()
networkdevice_number = models.NetworkDevice.objects.count()
storagedevice_number = models.StorageDevice.objects.count()
securitydevice_number = models.SecurityDevice.objects.count()
software_number = models.Software.objects.count()
return render(request, 'assets/dashboard.html', locals())
在dashboard.html中修改各input框的value属性为
value="{{ up_rate }}"
完成后的页面如下图所示:

二、不同状态资产数量统计柱状图
要绘制柱状图,不可能我们自己一步步从无到有写起,建议使用第三方插件。AdminLTE中内置的是Chartjs插件,但更建议大家使用百度开源的Echarts插件,功能更强大,更容易学习。
百度Echarts的网址,提供插件下载和说明文档、在线帮助等功能。
教程提供了一个echarts.js源文件,当然你也可以自行下载并安装。
使用Echarts的柱状图很简单,首先生成一个用于放置图形的容器:
<div class="col-md-6">
<!-- BAR CHART -->
<div class="box box-success">
<div class="box-header with-border">
<h3 class="box-title">各状态资产数量统计:</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
</button>
<button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
</div>
</div>
<div class="box-body">
<div id="barChart" style="width: 600px;height:400px;"></div>
</div>
<!-- /.box-body -->
</div>
</div>
<div id="barChart" style="width: 600px;height:400px;"></div>
构造了容器后,需要在页面底部首先引入 echarts.js 文件:
<script src="{% static 'plugins/echarts.js' %}"></script>
中,添加初始化的js代码:
$(function () {
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('barChart'));
// 指定图表的配置项和数据
var option = {
color: ['#3398DB'],
title: {
text: '数量'
},
tooltip: {},
legend: { data:['']
},
xAxis: {
data: ["在线", "下线","故障","备用","未知"] },
yAxis: {},
series:
[{
name: '数量',
type: 'bar',
barWidth: '50%',
data: [{{ upline }}, {{ offline }}, {{ breakdown }}, {{ backup }}, {{ unknown }}]
}]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
});

三、各类型资产数量统计饼图
类似上面的柱状图,在HTML中需要先添加一个容器。不同之处在于初始化的JS代码:
//资产类型数量统计 饼图
$(function () {
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('donutChart'));
// 指定图表的配置项和数据
option = {
title : {
x:'center'
},
tooltip : {
trigger: 'item',
formatter: "{a} <br/>{b} : {c} ({d}%)"
},
legend: {
orient: 'vertical',
left: 'left',
data: ['服务器','网络设备','存储设备','安全设备','软件资产']
},
series : [
{
name: '资产类型',
type: 'pie',
radius : '55%',
center: ['50%', '60%'],
data:[
{value:{{ server_number }}, name:'服务器'},
{value:{{ networkdevice_number }}, name:'网络设备'},
{value:{{ storagedevice_number }}, name:'存储设备'},
{value:{{ securitydevice_number }}, name:'安全设备'},
{value:{{ software_number }}, name:'软件资产'}
],
itemStyle: {
emphasis: {
shadowBlur: 10,
shadowOffsetX: 0,
shadowColor: 'rgba(0, 0, 0, 0.5)'
}
}
}
]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
});
为了展示的方便,我们在admin中新建一些网络设备、安全设备、软件资产等其它类型的资产,然后查看资产总表和饼图。这里我分别添加了一台网络、安全和存储设备和两个软件资产。
查看资产总表如下图所示:

查看dashboard如下图所示:

四、项目总结
至此,CMDB项目就基本讲解完毕。
还是要强调的是,这是一个demo版都不能算的教学版,很多内容和细节没有实现,必然存在bug和不足。但不管怎么样,它至少包含CMDB资产管理的主体内容,如果你能从中有点收获,那么教程的目的就达到了。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!