统计流量区分类型
pull/181/head
midoks 3 years ago
parent 9104280ff1
commit c641606ecd
  1. 2
      .gitignore
  2. 73
      class/core/system_api.py
  3. 55
      route/static/app/control.js
  4. 16
      route/templates/default/control.html
  5. 2
      task.py

2
.gitignore vendored

@ -141,6 +141,7 @@ data/restart.pl
data/ssl.pl
data/edate.pl
data/osname.pl
data/only_netio_counters.pl
data/system.db-journal
data/hook_*.json
@ -153,3 +154,4 @@ plugins/bk_demo
debug.out

@ -437,12 +437,35 @@ class system_api:
os.system('echo > /tmp/panelBoot.pl')
return total, count
def psutilNetIoCounters(self):
'''
统计网卡流量
'''
stat_pl = 'data/only_netio_counters.pl'
if os.path.exists(stat_pl):
local_lo = (0, 0, 0, 0)
ioName = psutil.net_io_counters(pernic=True).keys()
for x in ioName:
if x.find("lo") > -1:
local_lo = psutil.net_io_counters(
pernic=True).get(x)[:4]
all_io = psutil.net_io_counters()[:4]
result_io = tuple([all_io[i] - local_lo[i]
for i in range(0, len(all_io))])
# print(local_lo)
# print(all_io)
# print(result_io)
return result_io
return psutil.net_io_counters()[:4]
def getNetWork(self):
# return self.GetNetWorkApi(get);
# 取网络流量信息
try:
# 取网络流量信息
networkIo = psutil.net_io_counters()[:4]
networkIo = self.psutilNetIoCounters()
if not "otime" in session:
session['up'] = networkIo[0]
session['down'] = networkIo[1]
@ -470,38 +493,7 @@ class system_api:
return networkInfo
except Exception as e:
# print(e)
return None
def getNetWorkApi(self):
# 取网络流量信息
try:
tmpfile = 'data/network.temp'
networkIo = psutil.net_io_counters()[:4]
if not os.path.exists(tmpfile):
mw.writeFile(tmpfile, str(
networkIo[0]) + '|' + str(networkIo[1]) + '|' + str(int(time.time())))
lastValue = mw.readFile(tmpfile).split('|')
ntime = time.time()
networkInfo = {}
networkInfo['upTotal'] = networkIo[0]
networkInfo['downTotal'] = networkIo[1]
networkInfo['up'] = round(
float(networkIo[0] - int(lastValue[0])) / 1024 / (ntime - int(lastValue[2])), 2)
networkInfo['down'] = round(
float(networkIo[1] - int(lastValue[1])) / 1024 / (ntime - int(lastValue[2])), 2)
networkInfo['downPackets'] = networkIo[3]
networkInfo['upPackets'] = networkIo[2]
mw.writeFile(tmpfile, str(
networkIo[0]) + '|' + str(networkIo[1]) + '|' + str(int(time.time())))
# networkInfo['cpu'] = self.GetCpuInfo(0.1)
return networkInfo
except:
print("getNetWork error:", e)
return None
def getNetWorkIoData(self, start, end):
@ -567,14 +559,19 @@ class system_api:
def setControl(self, stype, day):
filename = 'data/control.conf'
stat_pl = 'data/only_netio_counters.pl'
if stype == '0':
mw.execShell("rm -f " + filename)
mw.execShell("rm -rf " + filename)
elif stype == '1':
_day = int(day)
if _day < 1:
return mw.returnJson(False, "设置失败!")
mw.writeFile(filename, day)
elif stype == '2':
mw.execShell("rm -rf " + stat_pl)
elif stype == '3':
mw.execShell("echo 'True' > " + stat_pl)
elif stype == 'del':
if not mw.isRestart():
return mw.returnJson(False, '请等待所有安装任务完成再执行')
@ -597,6 +594,12 @@ class system_api:
else:
data['day'] = 30
data['status'] = False
if os.path.exists(stat_pl):
data['stat_all_status'] = True
else:
data['stat_all_status'] = False
return mw.getJson(data)
return mw.returnJson(True, "设置成功!")

@ -77,7 +77,7 @@ $(".networkbtn").click(function(){
function Wday(day,name){
var now = (new Date().getTime())/1000;
if(day==0){
var b = (new Date(GetToday() + " 00:00:01").getTime())/1000;
var b = (new Date(getToday() + " 00:00:01").getTime())/1000;
b = Math.round(b);
var e = Math.round(now);
}
@ -111,7 +111,7 @@ function Wday(day,name){
}
}
function GetToday(){
function getToday(){
var mydate = new Date();
var str = "" + mydate.getFullYear() + "/";
str += (mydate.getMonth()+1) + "/";
@ -123,30 +123,51 @@ function GetToday(){
function getStatus(){
loadT = layer.msg('正在读取,请稍候...',{icon:16,time:0})
$.post('/system/set_control','type=-1',function(rdata){
// console.log(rdata);
layer.close(loadT);
if(rdata.status){
$("#openJK").html("<input class='btswitch btswitch-ios' id='ctswitch' type='checkbox' checked><label class='btswitch-btn' for='ctswitch' onclick='setControl()'></label>")
$("#openJK").html("<input class='btswitch btswitch-ios' id='ctswitch' type='checkbox' checked><label class='btswitch-btn' for='ctswitch' onclick='setControl(\"openjk\", true)'></label>");
} else {
$("#openJK").html("<input class='btswitch btswitch-ios' id='ctswitch' type='checkbox'><label class='btswitch-btn' for='ctswitch' onclick='setControl(\"openjk\",false)'></label>");
}
else{
$("#openJK").html("<input class='btswitch btswitch-ios' id='ctswitch' type='checkbox'><label class='btswitch-btn' for='ctswitch' onclick='setControl()'></label>")
if(rdata.stat_all_status){
$("#statAll").html("<input class='btswitch btswitch-ios' id='stat_witch' type='checkbox' checked><label class='btswitch-btn' for='stat_witch' onclick='setControl(\"stat\",true)'></label>");
} else{
$("#statAll").html("<input class='btswitch btswitch-ios' id='stat_witch' type='checkbox'><label class='btswitch-btn' for='stat_witch' onclick='setControl(\"stat\",false)'></label>");
}
$("#saveDay").val(rdata.day)
$("#save_day").val(rdata.day);
},'json');
}
getStatus();
//设置监控状态
function setControl(act){
var day = $("#saveDay").val()
if(day < 1){
layer.msg('保存天数不合法!',{icon:2});
return;
}
if(act){
var type = $("#ctswitch").prop('checked')?'1':'0';
}else{
function setControl(act, value=false){
if (act == 'openjk'){
var type = $("#ctswitch").prop('checked')?'0':'1';
var day = $("#save_day").val();
if(day < 1){
layer.msg('保存天数不合法!',{icon:2});
return;
}
} else if (act == 'stat'){
var type = $("#stat_witch").prop('checked')?'2':'3';
} else if (act == 'save_day'){
var type = $("#ctswitch").prop('checked')?'1':'0';
var day = $("#save_day").val();
if(type == 0){
layer.msg('先开启监控!',{icon:2});
return;
}
if(day < 1){
layer.msg('保存天数不合法!',{icon:2});
return;
}
}
loadT = layer.msg('正在处理,请稍候...',{icon:16,time:0})
@ -156,13 +177,13 @@ function setControl(act){
},'json');
}
//清理记录
function closeControl(){
layer.confirm('您真的清空所有监控记录吗?',{title:'清空记录',icon:3,closeBtn:2}, function() {
loadT = layer.msg('正在处理,请稍候...',{icon:16,time:0})
$.post('/system/set_control','type=del',function(rdata){
layer.close(loadT);
// $.get('/system?action=ReWeb',function(){});
layer.msg(rdata.msg,{icon:rdata.status?1:2});
},'json');
});

@ -13,20 +13,26 @@
<div class="mr50 pull-left">
<div class="ss-text pull-left">
<em>开启监控</em>
<div class='ssh-item' id="openJK">
</div>
<div class='ssh-item' id="openJK"></div>
</div>
</div>
<div class="mr50 pull-left">
<div class="ss-text pull-left">
<em>保存天数:</em>
<input class="bt-input-text" id="saveDay" value="" type="number">
<input class="bt-input-text" id="save_day" value="" type="number">
</div>
<div class="ss-text pull-left" style="margin-left:10px">
<button class="btn btn-default btn-sm" type="button" onclick="setControl(true);">更改</button>
<button class="btn btn-default btn-sm" type="button" onclick="setControl('save_day',true);">更改</button>
</div>
</div>
<div class="mr50 pull-left" style="padding-left:50px; border-left:#ccc 1px solid; margin-right:0">
<div class="mr50 pull-left" style="padding-left:10px; border-left:#ccc 1px solid; margin-right:0">
<div class="mr50 pull-left">
<div class="ss-text pull-left">
<em>仅统计外网</em>
<div class='ssh-item' id="statAll"></div>
</div>
</div>
<button class="btn btn-default btn-sm" type="button" onclick="closeControl()">清空记录</button>
</div>
</div>

@ -250,7 +250,7 @@ def systemTask():
cpuInfo = tmp
# 取当前网络Io
networkIo = psutil.net_io_counters()[:4]
networkIo = sm.psutilNetIoCounters()
if not network_up:
network_up = networkIo[0]
network_down = networkIo[1]

Loading…
Cancel
Save