mirror of
https://github.com/JamesonHuang/OpenWrt_Luci_Lua.git
synced 2024-11-27 23:40:10 +00:00
412 lines
12 KiB
HTML
412 lines
12 KiB
HTML
<%
|
||
local ver = require("xiaoqiang.XQVersion").webVersion
|
||
local XQSysUtil = require("xiaoqiang.util.XQSysUtil")
|
||
local XQLanWanUtil = require("xiaoqiang.util.XQLanWanUtil")
|
||
local hardwareVersion = XQSysUtil.getHardware()
|
||
local romVersion = XQSysUtil.getRomVersion()
|
||
local sysInfo = XQSysUtil.getSysInfo()
|
||
local router_name = XQSysUtil.getRouterName() or "我"
|
||
local sysCore = (sysInfo.core == 2 and '双核') or '单核'
|
||
local sysCpu = sysCore .." ".. sysInfo.hz
|
||
local sysDisk = XQSysUtil.getDiskSpace()
|
||
local remote_addr = luci.http.getenv("REMOTE_ADDR")
|
||
--local mac = string.upper(luci.sys.net.ip4mac(remote_addr))
|
||
local mac = XQLanWanUtil.getLanWanInfo("wan").mac
|
||
%>
|
||
<%include ("web/inc/head")%>
|
||
<title>路由器状态 - 小米路由器</title>
|
||
<link rel="stylesheet" href="<%=resource%>/web/css/page.index.css?v=<%=ver%>">
|
||
</head>
|
||
<body>
|
||
<div id="doc" class="hidden">
|
||
<%include ("web/inc/header")%>
|
||
<!-- -->
|
||
<div id="nav">
|
||
<script>
|
||
var navCurrent = '.home';
|
||
</script>
|
||
<%include ("web/inc/nav")%>
|
||
</div>
|
||
<!-- -->
|
||
<div id="bd" class="dft">
|
||
<div id="netdetecte" class="mod-sect mod-net-check net-check-warn" style="display:none;">
|
||
<p class="msg"><i class="ico ico-check-tips"></i><span class="con">不正常,请检测。</span></p>
|
||
<a href="<%=luci.dispatcher.build_url("web", "detecte")%>" class="action" target="_blank">立即检测</a>
|
||
</div>
|
||
<div class="mod-sect mod-router-info">
|
||
<table>
|
||
<tr>
|
||
<td width="273">
|
||
<div class="pic"><img src="<%=resource%>/web/img/v2/pic_rt.png" alt=""></div>
|
||
</td>
|
||
<td>
|
||
<div class="main">
|
||
<h2><%=router_name%>的小米路由器</h2>
|
||
<ul class="list">
|
||
<li>型号:<%=hardwareVersion%></li>
|
||
<li>版本:<%=romVersion%></li>
|
||
<li>CPU:<%=sysCpu%></li>
|
||
<li>存储:<%=sysDisk%></li>
|
||
<!-- <li>内存:8GB</li> -->
|
||
<li>运行时长:<span id="upTime"></span></li>
|
||
<li>连接终端:<span id="devicesNum"></span>台</li>
|
||
<li class="last">MAC地址:<%=mac%></li>
|
||
</ul>
|
||
<div class="disk" style="display:none;">
|
||
<p><!-- 总空间:<span class="disk-total">1TB</span> -->可用空间:<span class="disk-available">111GB</span></p>
|
||
<div class="used-bar">
|
||
<div class="s0"></div>
|
||
<!-- <div class="s1"></div>
|
||
<div class="s2"></div>
|
||
<div class="s3"></div> -->
|
||
</div>
|
||
<!-- <ul class="used-type">
|
||
<li><i class="type type-1"></i>视频:12.3G</li>
|
||
<li><i class="type type-2"></i>图片:12.3G</li>
|
||
<li><i class="type type-3"></i>音乐:12.3G</li>
|
||
<li><i class="type type-4"></i>其他:12.3G</li>
|
||
</ul> -->
|
||
</div>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="mod-sect mod-net-status">
|
||
<div class="hd">
|
||
<h2>当前网络状态</h2>
|
||
</div>
|
||
<div class="bd">
|
||
<table>
|
||
<tr>
|
||
<td>
|
||
<div class="traffic" id="trafficChart" style="width:570px; height:370px;">
|
||
<p class="currval">当前下载速度: <b id="downSpeed">2.87KB/S</b></p>
|
||
<div class="grid">
|
||
<div class="label-y">
|
||
<label>10M/S</label>
|
||
</div>
|
||
</div>
|
||
<div class="line canvas"></div>
|
||
</div>
|
||
</td>
|
||
<td width="220">
|
||
<div class="status">
|
||
<ul>
|
||
<li>
|
||
<div>
|
||
<i class="ico ico-st-1"></i>
|
||
<p><b id="averageSpeed">...</b></p>
|
||
<p class="muted">平均下载</p>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div>
|
||
<i class="ico ico-st-2"></i>
|
||
<p><b id="maxSpeed">...</b></p>
|
||
<p class="muted">最快下载</p>
|
||
</div>
|
||
</li>
|
||
<li>
|
||
<div>
|
||
<i class="ico ico-st-3"></i>
|
||
<p><b id="totalDownload">...</b></p>
|
||
<p class="muted">总下载量</p>
|
||
</div>
|
||
</li>
|
||
<li class="last">
|
||
<div>
|
||
<i class="ico ico-st-4"></i>
|
||
<p><b id="totalUpload">...</b></p>
|
||
<p class="muted">总上传量</p>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="mod-sect mod-devices-status">
|
||
<div class="hd">
|
||
<h2>终端流量统计</h2>
|
||
</div>
|
||
<div class="bd">
|
||
<table>
|
||
<tr>
|
||
<td>
|
||
<div class="chart" id="piechart" style="width:334px; height:334px; margin:0 70px 0 26px"></div>
|
||
</td>
|
||
<td>
|
||
<div id="piecharttable" class="charttable"></div>
|
||
</td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<%include ("web/inc/footer")%>
|
||
</div>
|
||
<%include ("web/inc/g.js.base")%>
|
||
<script src="<%=resource%>/web/js/raphael.js?v=<%=ver%>"></script>
|
||
<script src="<%=resource%>/web/js/class.linechart.js?v=<%=ver%>"></script>
|
||
<script src="<%=resource%>/web/js/class.pie.js?v=<%=ver%>"></script>
|
||
<script>
|
||
global_event.needBind = false;
|
||
global_event.mustBind = false;
|
||
</script>
|
||
<%include ("web/inc/g.js")%>
|
||
<script>
|
||
global_event.lineData = [];
|
||
$(global_event).on('status:get', function(evt, data){
|
||
$.getJSON('<%=luci.dispatcher.build_url("api", "xqsystem","status")%>', {}, function(rsp){
|
||
if (rsp.code != 0) {
|
||
return;
|
||
}
|
||
$(global_event).trigger("chart:pie_update", rsp);
|
||
$(global_event).trigger('status:uploadcount', rsp);
|
||
$(global_event).trigger('status:downloadcount', rsp);
|
||
$(global_event).trigger('status:maxSpeed', rsp);
|
||
$(global_event).trigger('status:downSpeed', rsp);
|
||
$(global_event).trigger('status:online', rsp);
|
||
$(global_event).trigger('status:devices', rsp);
|
||
|
||
global_event.lineData = (function(){
|
||
var speedHistory = rsp.wanStatistics.history,
|
||
arr = [],
|
||
fill = [],
|
||
len;
|
||
if (speedHistory && $.isArray(speedHistory) && speedHistory.length > 0) {
|
||
for(var i = 0, len = speedHistory.length; i < len; i ++){
|
||
arr.push(parseInt(speedHistory[i], 10));
|
||
}
|
||
}
|
||
len = arr.length;
|
||
|
||
for (var i = 0; i < 30 - len; i++) {
|
||
fill.push(0);
|
||
};
|
||
return fill.concat(arr);
|
||
})(rsp);
|
||
console.log(global_event.lineData);
|
||
$(global_event).trigger('chart:lineUpdate', rsp);
|
||
});
|
||
});
|
||
//终端流量报表
|
||
$(global_event).on('chart:pie_init', function(evt, data){
|
||
var pieConfig = {
|
||
id : 'piechart',
|
||
wt : 167 * 2,
|
||
ht : 167 * 2,
|
||
r : 158,
|
||
stroke : '#fff',
|
||
datas: [{value : 1, label : 't1'}],
|
||
count : {value : 0,label : 'KB'}
|
||
};
|
||
global_event.pieChart = new PieChart(pieConfig);
|
||
});
|
||
//更新流量分布图
|
||
$(global_event).on('chart:pie_update', function(evt, data){
|
||
var colorMap = ['#099ede','#10c7be','#4ec213','#ffcc00','#ff7700','#d24747','#bf5ef0','#7d74e3'];
|
||
var datas = data.devStatistics;
|
||
if (datas.length == 0) {
|
||
return;
|
||
}
|
||
var icon_map = [];
|
||
var conf_datas = [];
|
||
var count = {};
|
||
count.value = 0;
|
||
count.label = 'MB';
|
||
for (var i = 0; i < datas.length; i++) {
|
||
var value = parseInt(datas[i].download, 10);
|
||
var value2 = parseInt(datas[i].downspeed, 10);
|
||
var item = {
|
||
value : value,
|
||
value2 : value2,
|
||
label : datas[i].devname,
|
||
color : colorMap[i]
|
||
};
|
||
if(value != 0){
|
||
conf_datas.push(item);
|
||
}
|
||
count.value += item.value;
|
||
};
|
||
|
||
var totalCount = (function(val){
|
||
var ret = byteFormat(val, 10, true);
|
||
return {
|
||
value : ret[0],
|
||
label : ret[1]
|
||
}
|
||
})(count.value);
|
||
global_event.pieChart.update(conf_datas, totalCount);
|
||
});
|
||
$(global_event).on('chart:lineInit',function(evt, data){
|
||
global_event.chartLine = new Linechart({
|
||
id: '#trafficChart',
|
||
maxYval: 10 * 1024 * 1024,
|
||
maxYnum: 5
|
||
});
|
||
});
|
||
$(global_event).on('chart:lineUpdate',function(evt, data){
|
||
var speed = data.wanStatistics.downspeed || 0;
|
||
speed = parseInt(speed, 10),
|
||
maxspeed = parseInt(data.wanStatistics.maxdownloadspeed, 10);
|
||
global_event.lineData.push(speed);
|
||
var len = global_event.lineData.length;
|
||
var lineData = global_event.lineData.slice(len - 30);
|
||
$(global_event).trigger('status:averageSpeed', {lineData: lineData});
|
||
global_event.chartLine.update(lineData, maxspeed);
|
||
});
|
||
|
||
//wifi devices count
|
||
$(global_event).on('status:devices', function(evt, data){
|
||
var devices = data.count;
|
||
$('#devicesNum').text(devices);
|
||
});
|
||
//在线时长
|
||
$(global_event).on('status:online', function(evt, data){
|
||
var online = data.upTime;
|
||
console.log('status:online', online);
|
||
$('#upTime').html(secondToDate(online, true));
|
||
});
|
||
//当前下载速度
|
||
$(global_event).on('status:downSpeed', function(evt, data){
|
||
var speed = data.wanStatistics.downspeed || 0;
|
||
var speedfmt = byteFormat(speed);
|
||
$('#downSpeed').html(speedfmt+'/S');
|
||
});
|
||
//平均下载速度
|
||
$(global_event).on('status:averageSpeed', function(evt, data){
|
||
var speed,
|
||
lineData = data.lineData;
|
||
console.log(lineData);
|
||
if (lineData.length > 0) {
|
||
speed = (function(db){
|
||
var total = 0;
|
||
for (var i = 0; i < db.length; i++) {
|
||
total += parseInt(db[i], 10);
|
||
};
|
||
return total / db.length;
|
||
})(lineData);
|
||
}else{
|
||
speed = 0;
|
||
}
|
||
var speedfmt = byteFormat(speed);
|
||
$('#averageSpeed').html(speedfmt+'/S');
|
||
});
|
||
//最快下载速度
|
||
$(global_event).on('status:maxSpeed', function(evt, data){
|
||
var maxspeed = data.wanStatistics.maxdownloadspeed;
|
||
var maxspeedfmt = byteFormat(maxspeed);
|
||
$('#maxSpeed').html(maxspeedfmt+'/S');
|
||
});
|
||
//总上传量
|
||
$(global_event).on('status:uploadcount', function(evt, data){
|
||
var total = data.wanStatistics.upload;
|
||
total = byteFormat(total);
|
||
$('#totalUpload').html(total);
|
||
});
|
||
//总下载量
|
||
$(global_event).on('status:downloadcount', function(evt, data){
|
||
var total = data.wanStatistics.download;
|
||
total = byteFormat(total);
|
||
$('#totalDownload').html(total);
|
||
});
|
||
//硬盘信息
|
||
$(global_event).on('status:disk',function(evt, data){
|
||
$('.disk').hide();
|
||
$.ajax({
|
||
type: "POST",
|
||
url: '<%=luci.dispatcher.build_url("api", "xqdatacenter","request")%>',
|
||
data: {payload:'{"api":26}'},
|
||
dataType: 'json'
|
||
})
|
||
.done(function(rsp) {
|
||
if (rsp.code == 0) {
|
||
$('.disk-total').text(byteFormat(rsp.capacity));
|
||
$('.disk-available').text(byteFormat(rsp.free));
|
||
$('.used-bar .s0').css({width: ((rsp.capacity - rsp.free) / rsp.capacity * 100) + '%'});
|
||
$('.disk').show();
|
||
}
|
||
});
|
||
});
|
||
|
||
$(global_event).on('netdetecte', function(evt, data){
|
||
var timer = null;
|
||
function detecte(){
|
||
$.getJSON('<%=luci.dispatcher.build_url("api", "xqnetdetect","sys_status")%>', {}, function(rsp){
|
||
if (rsp.code == 0) {
|
||
if (rsp.status != 0) {
|
||
var msg = {
|
||
'1': '发现有'+ rsp.count +'个问题需要处理',
|
||
'2': '上网连接失败,请立即处理'
|
||
};
|
||
var classname = 'mod-sect mod-net-check ';
|
||
classname += rsp.status == 1 ? 'net-check-warn' : 'net-check-err';
|
||
$('#netdetecte')[0].className = classname;
|
||
$('#netdetecte').find('.con').html(msg[rsp.status]).end().fadeIn(400);
|
||
}else{
|
||
$('#netdetecte').hide();
|
||
}
|
||
}
|
||
});
|
||
}
|
||
timer = window.setInterval(function(){
|
||
detecte();
|
||
}, 5000);
|
||
});
|
||
|
||
$(function(){
|
||
$(global_event).trigger('chart:lineInit');
|
||
$(global_event).trigger('status:get');
|
||
$(global_event).trigger('status:disk');
|
||
$(global_event).trigger('chart:pie_init');
|
||
$(global_event).trigger('netdetecte');
|
||
var timer = null,
|
||
getBdWidth = function(){
|
||
return document.getElementById('bd').offsetWidth;
|
||
},
|
||
pageLoad = function(){
|
||
preWidth = getBdWidth();
|
||
if (preWidth < 1200) {
|
||
$('#trafficChart').css({width:360, height:370});
|
||
}else{
|
||
$('#trafficChart').css({width:570, height:370});
|
||
}
|
||
global_event.chartLine.resize();
|
||
},
|
||
isoldie = $('html').hasClass('oldie');
|
||
console.log('isoldie', isoldie);
|
||
if ( !isoldie ) {
|
||
pageLoad();
|
||
$(window).resize(function(){
|
||
window.clearTimeout(timer);
|
||
timer = window.setTimeout(function(){
|
||
pageLoad();
|
||
},400);
|
||
});
|
||
}
|
||
|
||
var timerInterval = null;
|
||
timerInterval = window.setInterval(function(){
|
||
$.getJSON('<%=luci.dispatcher.build_url("api", "xqsystem","status")%>', {}, function(rsp){
|
||
if (rsp.code != 0) {
|
||
window.clearInterval(timerInterval);
|
||
return;
|
||
}
|
||
$(global_event).trigger('chart:lineUpdate', rsp);
|
||
$(global_event).trigger('status:uploadcount', rsp);
|
||
$(global_event).trigger('status:downloadcount', rsp);
|
||
$(global_event).trigger('status:maxSpeed', rsp);
|
||
$(global_event).trigger('status:downSpeed', rsp);
|
||
});
|
||
} , 6000);
|
||
|
||
});
|
||
</script>
|
||
</body>
|
||
</html> |