This commit is contained in:
parent
d8571903c7
commit
3b90209c4c
11
app.py
11
app.py
|
|
@ -1,9 +1,11 @@
|
|||
from flask import Flask
|
||||
import views
|
||||
import sys
|
||||
import io
|
||||
import os
|
||||
|
||||
import views
|
||||
from flask import Flask
|
||||
from datetime import timedelta
|
||||
|
||||
sys.path.append("class/")
|
||||
|
||||
app = Flask(__name__)
|
||||
|
|
@ -18,12 +20,17 @@ DEFAULT_MODULES = (
|
|||
(views.config, "/config"),
|
||||
(views.plugins, "/plugins"),
|
||||
(views.task, "/task"),
|
||||
(views.system, "/system"),
|
||||
(views.database, "/database")
|
||||
)
|
||||
|
||||
import time
|
||||
# print "time.time(): %f " % time.time()
|
||||
app.config.version = "0.0.1" + str(time.time())
|
||||
|
||||
app.config['SECRET_KEY'] = os.urandom(24)
|
||||
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)
|
||||
|
||||
|
||||
def setting_modules(app, modules):
|
||||
for module, url_prefix in modules:
|
||||
|
|
|
|||
BIN
data/default.db
BIN
data/default.db
Binary file not shown.
1609
static/js/files.js
1609
static/js/files.js
File diff suppressed because it is too large
Load Diff
|
|
@ -135,7 +135,7 @@ function GetPercent(num, total) {
|
|||
|
||||
|
||||
function GetDiskInfo() {
|
||||
$.get('/system?action=GetDiskInfo', function(rdata) {
|
||||
$.get('/system/disknfo', function(rdata) {
|
||||
var dBody
|
||||
for (var i = 0; i < rdata.length; i++) {
|
||||
if (rdata[i].path == '/' || rdata[i].path == '/www') {
|
||||
|
|
@ -233,7 +233,7 @@ function getNet() {
|
|||
var down;
|
||||
$.ajax({
|
||||
type: "get",
|
||||
url: "/system?action=GetNetWork",
|
||||
url: "/system/network",
|
||||
async: true,
|
||||
success: function(net) {
|
||||
$("#InterfaceSpeed").html(lan.index.interfacespeed + ": 1.0Gbps");
|
||||
|
|
|
|||
|
|
@ -1597,96 +1597,96 @@ function phpmyadmin(msg) {
|
|||
});
|
||||
}
|
||||
//首页软件列表
|
||||
function indexsoft() {
|
||||
var loadT = layer.msg(lan.soft.get_list, { icon: 16, time: 0, shade: [0.3, '#000'] });
|
||||
$.post('/plugin?action=getPluginList', 'display=1', function(rdata) {
|
||||
layer.close(loadT);
|
||||
var con = '';
|
||||
for (var i = 0; i < rdata['data'].length - 1; i++) {
|
||||
var len = rdata.data[i].versions.length;
|
||||
var version_info = '';
|
||||
for (var j = 0; j < len; j++) {
|
||||
if (rdata.data[i].versions[j].status) continue;
|
||||
version_info += rdata.data[i].versions[j].version + '|';
|
||||
}
|
||||
if (version_info != '') {
|
||||
version_info = version_info.substring(0, version_info.length - 1);
|
||||
}
|
||||
if (rdata.data[i].display) {
|
||||
var isDisplay = false;
|
||||
if (rdata.data[i].name != 'php') {
|
||||
for (var n = 0; n < len; n++) {
|
||||
if (rdata.data[i].versions[n].status == true) {
|
||||
isDisplay = true;
|
||||
var version = rdata.data[i].versions[n].version;
|
||||
if (rdata.data[i].versions[n].run == true) {
|
||||
state = '<span style="color:#20a53a" class="glyphicon glyphicon-play"></span>'
|
||||
} else {
|
||||
state = '<span style="color:red" class="glyphicon glyphicon-pause"></span>'
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isDisplay) {
|
||||
var clickName = 'SoftMan';
|
||||
if (rdata.data[i].tip == 'lib') {
|
||||
clickName = 'PluginMan';
|
||||
version_info = rdata.data[i].title;
|
||||
}
|
||||
// function indexsoft() {
|
||||
// var loadT = layer.msg(lan.soft.get_list, { icon: 16, time: 0, shade: [0.3, '#000'] });
|
||||
// $.post('/plugin?action=getPluginList', 'display=1', function(rdata) {
|
||||
// layer.close(loadT);
|
||||
// var con = '';
|
||||
// for (var i = 0; i < rdata['data'].length - 1; i++) {
|
||||
// var len = rdata.data[i].versions.length;
|
||||
// var version_info = '';
|
||||
// for (var j = 0; j < len; j++) {
|
||||
// if (rdata.data[i].versions[j].status) continue;
|
||||
// version_info += rdata.data[i].versions[j].version + '|';
|
||||
// }
|
||||
// if (version_info != '') {
|
||||
// version_info = version_info.substring(0, version_info.length - 1);
|
||||
// }
|
||||
// if (rdata.data[i].display) {
|
||||
// var isDisplay = false;
|
||||
// if (rdata.data[i].name != 'php') {
|
||||
// for (var n = 0; n < len; n++) {
|
||||
// if (rdata.data[i].versions[n].status == true) {
|
||||
// isDisplay = true;
|
||||
// var version = rdata.data[i].versions[n].version;
|
||||
// if (rdata.data[i].versions[n].run == true) {
|
||||
// state = '<span style="color:#20a53a" class="glyphicon glyphicon-play"></span>'
|
||||
// } else {
|
||||
// state = '<span style="color:red" class="glyphicon glyphicon-pause"></span>'
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// if (isDisplay) {
|
||||
// var clickName = 'SoftMan';
|
||||
// if (rdata.data[i].tip == 'lib') {
|
||||
// clickName = 'PluginMan';
|
||||
// version_info = rdata.data[i].title;
|
||||
// }
|
||||
|
||||
con += '<div class="col-sm-3 col-md-3 col-lg-3" data-id="' + rdata.data[i].pid + '">\
|
||||
<span class="spanmove"></span>\
|
||||
<div onclick="' + clickName + '(\'' + rdata.data[i].name + '\',\'' + version_info + '\')">\
|
||||
<div class="image"><img src="/static/img/soft_ico/ico-' + rdata.data[i].name + '.png"></div>\
|
||||
<div class="sname">' + rdata.data[i].title + ' ' + version + state + '</div>\
|
||||
</div>\
|
||||
</div>'
|
||||
}
|
||||
} else {
|
||||
for (var n = 0; n < len; n++) {
|
||||
if (rdata.data[i].versions[n].status == true) {
|
||||
var version = rdata.data[i].versions[n].version;
|
||||
if (rdata.data[i].versions[n].run == true) {
|
||||
state = '<span style="color:#20a53a" class="glyphicon glyphicon-play"></span>'
|
||||
} else {
|
||||
state = '<span style="color:red" class="glyphicon glyphicon-pause"></span>'
|
||||
}
|
||||
}
|
||||
if (rdata.data[i].versions[n].display == true) {
|
||||
con += '<div class="col-sm-3 col-md-3 col-lg-3" data-id="' + rdata.data[i].pid + '">\
|
||||
<span class="spanmove"></span>\
|
||||
<div onclick="phpSoftMain(\'' + rdata.data[i].versions[n].version + '\',' + n + ')">\
|
||||
<div class="image"><img src="/static/img/soft_ico/ico-' + rdata.data[i].name + '.png"></div>\
|
||||
<div class="sname">' + rdata.data[i].title + ' ' + rdata.data[i].versions[n].version + state + '</div>\
|
||||
</div>\
|
||||
</div>'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$("#indexsoft").html(con);
|
||||
//软件位置移动
|
||||
var softboxlen = $("#indexsoft > div").length;
|
||||
var softboxsum = 12;
|
||||
var softboxcon = '';
|
||||
var softboxn = softboxlen;
|
||||
if (softboxlen <= softboxsum) {
|
||||
for (var i = 0; i < softboxsum - softboxlen; i++) {
|
||||
softboxn += 1000;
|
||||
softboxcon += '<div class="col-sm-3 col-md-3 col-lg-3 no-bg" data-id="' + softboxn + '"></div>'
|
||||
}
|
||||
$("#indexsoft").append(softboxcon);
|
||||
}
|
||||
$("#indexsoft").dragsort({ dragSelector: ".spanmove", dragBetween: true, dragEnd: saveOrder, placeHolderTemplate: "<div class='col-sm-3 col-md-3 col-lg-3 dashed-border'></div>" });
|
||||
// con += '<div class="col-sm-3 col-md-3 col-lg-3" data-id="' + rdata.data[i].pid + '">\
|
||||
// <span class="spanmove"></span>\
|
||||
// <div onclick="' + clickName + '(\'' + rdata.data[i].name + '\',\'' + version_info + '\')">\
|
||||
// <div class="image"><img src="/static/img/soft_ico/ico-' + rdata.data[i].name + '.png"></div>\
|
||||
// <div class="sname">' + rdata.data[i].title + ' ' + version + state + '</div>\
|
||||
// </div>\
|
||||
// </div>'
|
||||
// }
|
||||
// } else {
|
||||
// for (var n = 0; n < len; n++) {
|
||||
// if (rdata.data[i].versions[n].status == true) {
|
||||
// var version = rdata.data[i].versions[n].version;
|
||||
// if (rdata.data[i].versions[n].run == true) {
|
||||
// state = '<span style="color:#20a53a" class="glyphicon glyphicon-play"></span>'
|
||||
// } else {
|
||||
// state = '<span style="color:red" class="glyphicon glyphicon-pause"></span>'
|
||||
// }
|
||||
// }
|
||||
// if (rdata.data[i].versions[n].display == true) {
|
||||
// con += '<div class="col-sm-3 col-md-3 col-lg-3" data-id="' + rdata.data[i].pid + '">\
|
||||
// <span class="spanmove"></span>\
|
||||
// <div onclick="phpSoftMain(\'' + rdata.data[i].versions[n].version + '\',' + n + ')">\
|
||||
// <div class="image"><img src="/static/img/soft_ico/ico-' + rdata.data[i].name + '.png"></div>\
|
||||
// <div class="sname">' + rdata.data[i].title + ' ' + rdata.data[i].versions[n].version + state + '</div>\
|
||||
// </div>\
|
||||
// </div>'
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// $("#indexsoft").html(con);
|
||||
// //软件位置移动
|
||||
// var softboxlen = $("#indexsoft > div").length;
|
||||
// var softboxsum = 12;
|
||||
// var softboxcon = '';
|
||||
// var softboxn = softboxlen;
|
||||
// if (softboxlen <= softboxsum) {
|
||||
// for (var i = 0; i < softboxsum - softboxlen; i++) {
|
||||
// softboxn += 1000;
|
||||
// softboxcon += '<div class="col-sm-3 col-md-3 col-lg-3 no-bg" data-id="' + softboxn + '"></div>'
|
||||
// }
|
||||
// $("#indexsoft").append(softboxcon);
|
||||
// }
|
||||
// $("#indexsoft").dragsort({ dragSelector: ".spanmove", dragBetween: true, dragEnd: saveOrder, placeHolderTemplate: "<div class='col-sm-3 col-md-3 col-lg-3 dashed-border'></div>" });
|
||||
|
||||
function saveOrder() {
|
||||
var data = $("#indexsoft > div").map(function() { return $(this).attr("data-id"); }).get();
|
||||
var ssort = data.join("|");
|
||||
$("input[name=list1SortOrder]").val(ssort);
|
||||
$.post("/plugin?action=savePluginSort", 'ssort=' + ssort, function(rdata) {});
|
||||
};
|
||||
});
|
||||
}
|
||||
// function saveOrder() {
|
||||
// var data = $("#indexsoft > div").map(function() { return $(this).attr("data-id"); }).get();
|
||||
// var ssort = data.join("|");
|
||||
// $("input[name=list1SortOrder]").val(ssort);
|
||||
// $.post("/plugin?action=savePluginSort", 'ssort=' + ssort, function(rdata) {});
|
||||
// };
|
||||
// });
|
||||
// }
|
||||
|
||||
//插件设置菜单
|
||||
function PluginMan(name, title) {
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<div class="container-fluid">
|
||||
<div class="pos-box bgw mtb15">
|
||||
<div class="position f14 c9 pull-left">
|
||||
<a class="plr10 c4" href="/">$tData['lan']['H1']</a>/<span class="plr10 c4">$tData['lan']['H2']</span>
|
||||
<a class="plr10 c4" href="/">首页</a>/<span class="plr10 c4">网站</span>
|
||||
</div>
|
||||
<div class="search pull-right">
|
||||
<form target="hid" onsubmit='getWeb(1,$$("#SearchValue").prop("value"))'>
|
||||
|
|
@ -18,13 +18,13 @@
|
|||
</div>
|
||||
<div class="safe bgw mtb15 pd15">
|
||||
<div class="important-title">
|
||||
<p><span class="glyphicon glyphicon-alert" style="color: #f39c12; margin-right: 10px;"></span> $tData['lan']['PS']</p>
|
||||
<p><span class="glyphicon glyphicon-alert" style="color: #f39c12; margin-right: 10px;"></span>使用MDWEB Linux面板创建站点时会自动创建权限配置,统一使用www用户。</p>
|
||||
</div>
|
||||
<button onclick="webAdd(0)" class="btn btn-success btn-sm btn-title" type="button">$tData['lan']['BTN1']</button>
|
||||
<button onclick="SiteDefaultPage()" class="btn btn-default btn-sm btn-title" type="button">$tData['lan']['BTN2']</button>
|
||||
<button onclick="GetDefaultSite()" class="btn btn-default btn-sm btn-title" type="button">$tData['lan']['BTN3']</button>
|
||||
<button onclick="webAdd(0)" class="btn btn-success btn-sm btn-title" type="button">添加站点</button>
|
||||
<button onclick="SiteDefaultPage()" class="btn btn-default btn-sm btn-title" type="button">修改默认页</button>
|
||||
<button onclick="GetDefaultSite()" class="btn btn-default btn-sm btn-title" type="button">默认站点</button>
|
||||
<span id="allDelete" style="float: right;display: none;">
|
||||
<button onclick="allDeleteSite();" class="btn btn-default btn-sm">$tData['lan']['BTN4']</button>
|
||||
<button onclick="allDeleteSite();" class="btn btn-default btn-sm">网站搜索</button>
|
||||
</span>
|
||||
<div class="divtable mtb10">
|
||||
<div class="tablescroll">
|
||||
|
|
@ -32,14 +32,14 @@
|
|||
<thead>
|
||||
<tr>
|
||||
<th width="30"><input type="checkbox" onclick="checkSelect();" id="setBox"></th>
|
||||
<th width="150" onclick="listOrder('name','site',this)" style="cursor: pointer;">$tData['lan']['TH1']<span class="glyphicon glyphicon-triangle-top" style="margin-left:5px;color:#bbb"></span></th>
|
||||
<th onclick="listOrder('status','site',this)" style="cursor: pointer;" width="98">$tData['lan']['TH2']<span class="glyphicon glyphicon-triangle-top" style="margin-left:5px;color:#bbb"></span></th>
|
||||
<th width="58">$tData['lan']['TH3']</th>
|
||||
<th width="26%">$tData['lan']['TH4']</th>
|
||||
<th onclick="listOrder('edate','site',this)" style="cursor: pointer;" width="86">$tData['lan']['TH5']<span class="glyphicon glyphicon-triangle-top" style="margin-left:5px;color:#bbb"></span></th>
|
||||
<th>$tData['lan']['TH6']</th>
|
||||
<th width="150" onclick="listOrder('name','site',this)" style="cursor: pointer;">域名<span class="glyphicon glyphicon-triangle-top" style="margin-left:5px;color:#bbb"></span></th>
|
||||
<th onclick="listOrder('status','site',this)" style="cursor: pointer;" width="98">网站状态<span class="glyphicon glyphicon-triangle-top" style="margin-left:5px;color:#bbb"></span></th>
|
||||
<th width="58">备份</th>
|
||||
<th width="26%">网站目录</th>
|
||||
<th onclick="listOrder('edate','site',this)" style="cursor: pointer;" width="86">到期日期<span class="glyphicon glyphicon-triangle-top" style="margin-left:5px;color:#bbb"></span></th>
|
||||
<th>备注</th>
|
||||
<th>防火墙</th>
|
||||
<th width='130' class='text-right'>$tData['lan']['TH7']</th>
|
||||
<th width='130' class='text-right'>操作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="webBody"></tbody>
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
|
||||
|
||||
from dashboard import *
|
||||
from site import *
|
||||
from files import *
|
||||
from soft import *
|
||||
from config import *
|
||||
from plugins import *
|
||||
from task import *
|
||||
from system import *
|
||||
from plugins import *
|
||||
from database import *
|
||||
|
|
|
|||
|
|
@ -13,30 +13,3 @@ dashboard = Blueprint('dashboard', __name__, template_folder='templates')
|
|||
@dashboard.route("/")
|
||||
def index():
|
||||
return render_template('default/index.html')
|
||||
|
||||
|
||||
@dashboard.route("getnetwork")
|
||||
def getNetWork():
|
||||
# 取网络流量信息
|
||||
networkIo = psutil.net_io_counters()[:4]
|
||||
# if not hasattr(web.ctx.session,'otime'):
|
||||
# web.ctx.session.up = networkIo[0]
|
||||
# web.ctx.session.down = networkIo[1]
|
||||
# web.ctx.session.otime = time.time();
|
||||
|
||||
ntime = time.time()
|
||||
networkInfo = {}
|
||||
networkInfo['upTotal'] = networkIo[0]
|
||||
networkInfo['downTotal'] = networkIo[1]
|
||||
# networkInfo['up'] = round(float(networkIo[0] - web.ctx.session.up) / 1024 / (ntime - web.ctx.session.otime),2)
|
||||
# networkInfo['down'] = round(float(networkIo[1] - web.ctx.session.down) / 1024 / (ntime - web.ctx.session.otime),2)
|
||||
networkInfo['downPackets'] = networkIo[3]
|
||||
networkInfo['upPackets'] = networkIo[2]
|
||||
|
||||
# web.ctx.session.up = networkIo[0]
|
||||
# web.ctx.session.down = networkIo[1]
|
||||
# web.ctx.session.otime = ntime;
|
||||
|
||||
# networkInfo['cpu'] = self.GetCpuInfo()
|
||||
# networkInfo['load'] = self.GetLoadAverage(get);
|
||||
return jsonify(networkInfo)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
# coding:utf-8
|
||||
|
||||
from flask import Flask
|
||||
from flask import Blueprint, render_template
|
||||
|
||||
|
||||
database = Blueprint('database', __name__, template_folder='templates')
|
||||
|
||||
|
||||
@database.route("/")
|
||||
def index():
|
||||
return render_template('default/database.html')
|
||||
|
||||
|
||||
@database.route("/count")
|
||||
def count():
|
||||
return "0"
|
||||
|
|
@ -8,11 +8,10 @@ import psutil
|
|||
import time
|
||||
import sys
|
||||
import os
|
||||
|
||||
import json
|
||||
|
||||
sys.path.append("class/")
|
||||
import public
|
||||
import json
|
||||
|
||||
|
||||
plugins = Blueprint('plugins', __name__, template_folder='templates')
|
||||
|
|
@ -96,3 +95,25 @@ def install():
|
|||
@plugins.route('/uninstall', methods=['POST'])
|
||||
def uninstall():
|
||||
pass
|
||||
|
||||
|
||||
@plugins.route('/installed', methods=['POST'])
|
||||
def installed():
|
||||
|
||||
rundir = public.getRunDir()
|
||||
name = request.form.get('name', '')
|
||||
|
||||
if name.strip() == '':
|
||||
return public.retJson(-1, "缺少name数据!", ())
|
||||
|
||||
infoJsonPos = __plugin_name + '/' + name + '/' + 'info.json'
|
||||
|
||||
if not os.path.exists(infoJsonPos):
|
||||
return public.retJson(-1, "info.json数据不存在!", ())
|
||||
|
||||
pluginInfo = json.loads(public.readFile(infoJsonPos))
|
||||
|
||||
sh = __plugin_name + '/' + name + '/' + pluginInfo['shell']
|
||||
os.system('/bin/bash ' + sh + ' install')
|
||||
print request.args
|
||||
return ''
|
||||
|
|
|
|||
|
|
@ -1,11 +1,17 @@
|
|||
# coding:utf-8
|
||||
|
||||
from flask import Flask
|
||||
from flask import Blueprint,render_template
|
||||
from flask import Blueprint, render_template
|
||||
|
||||
|
||||
site = Blueprint('site', __name__, template_folder='templates')
|
||||
|
||||
|
||||
@site.route("/")
|
||||
def index():
|
||||
return render_template('default/site.html')
|
||||
return render_template('default/site.html')
|
||||
|
||||
|
||||
# @site.route("/list")
|
||||
# def list():
|
||||
# SQL = public.M('site')
|
||||
|
|
|
|||
|
|
@ -0,0 +1,159 @@
|
|||
# coding:utf-8
|
||||
|
||||
import time
|
||||
import psutil
|
||||
import os
|
||||
import sys
|
||||
|
||||
from flask import Flask, session
|
||||
from flask import Blueprint, render_template
|
||||
from flask import jsonify
|
||||
|
||||
sys.path.append("class/")
|
||||
import public
|
||||
|
||||
|
||||
system = Blueprint('system', __name__, template_folder='templates')
|
||||
|
||||
|
||||
def GetCpuInfo(interval=1):
|
||||
# 取CPU信息
|
||||
cpuCount = psutil.cpu_count()
|
||||
used = psutil.cpu_percent(interval=interval)
|
||||
return used, cpuCount
|
||||
|
||||
|
||||
def GetLoadAverage():
|
||||
c = os.getloadavg()
|
||||
data = {}
|
||||
data['one'] = float(c[0])
|
||||
data['five'] = float(c[1])
|
||||
data['fifteen'] = float(c[2])
|
||||
data['max'] = psutil.cpu_count() * 2
|
||||
data['limit'] = data['max']
|
||||
data['safe'] = data['max'] * 0.75
|
||||
return data
|
||||
|
||||
|
||||
def GetMemInfo():
|
||||
# 取内存信息
|
||||
mem = psutil.virtual_memory()
|
||||
memInfo = {'memTotal': mem.total / 1024 / 1024,
|
||||
'memFree': mem.free / 1024 / 1024,
|
||||
# 'memBuffers': mem.buffers / 1024 / 1024,
|
||||
# 'memCached': mem.cached / 1024 / 1024
|
||||
}
|
||||
|
||||
memInfo['memRealUsed'] = memInfo['memTotal'] - \
|
||||
memInfo['memFree']
|
||||
#- memInfo['memBuffers'] - memInfo['memCached']
|
||||
return memInfo
|
||||
|
||||
|
||||
def GetBootTime():
|
||||
conf = public.readFile('/proc/uptime').split()
|
||||
tStr = float(conf[0])
|
||||
min = tStr / 60
|
||||
hours = min / 60
|
||||
days = math.floor(hours / 24)
|
||||
hours = math.floor(hours - (days * 24))
|
||||
min = math.floor(min - (days * 60 * 24) - (hours * 60))
|
||||
return public.getMsg('SYS_BOOT_TIME', (str(int(days)), str(int(hours)), str(int(min))))
|
||||
|
||||
|
||||
def GetSystemVersion():
|
||||
# 取操作系统版本
|
||||
version = public.readFile('/etc/redhat-release')
|
||||
if not version:
|
||||
version = public.readFile(
|
||||
'/etc/issue').strip().split("\n")[0].replace('\\n', '').replace('\l', '').strip()
|
||||
else:
|
||||
version = version.replace('release ', '').strip()
|
||||
return version
|
||||
|
||||
|
||||
@system.route("/network")
|
||||
def network():
|
||||
# 取网络流量信息
|
||||
networkIo = psutil.net_io_counters()[:4]
|
||||
if not hasattr(session, 'otime'):
|
||||
session['up'] = networkIo[0]
|
||||
session['down'] = networkIo[1]
|
||||
session['otime'] = time.time()
|
||||
|
||||
ntime = time.time()
|
||||
networkInfo = {}
|
||||
networkInfo['upTotal'] = networkIo[0]
|
||||
networkInfo['downTotal'] = networkIo[1]
|
||||
networkInfo['up'] = round(float(
|
||||
networkIo[0] - session['up']) / 1024 / (ntime - session['otime']), 2)
|
||||
networkInfo['down'] = round(
|
||||
float(networkIo[1] - session['down']) / 1024 / (ntime - session['otime']), 2)
|
||||
networkInfo['downPackets'] = networkIo[3]
|
||||
networkInfo['upPackets'] = networkIo[2]
|
||||
|
||||
session['up'] = networkIo[0]
|
||||
session['down'] = networkIo[1]
|
||||
session['otime'] = time.time()
|
||||
|
||||
networkInfo['cpu'] = GetCpuInfo()
|
||||
networkInfo['load'] = GetLoadAverage()
|
||||
return jsonify(networkInfo)
|
||||
|
||||
|
||||
@system.route("/diskinfo")
|
||||
def diskinfo():
|
||||
# 取磁盘分区信息
|
||||
temp = public.ExecShell("df -h -P|grep '/'|grep -v tmpfs")[0]
|
||||
tempInodes = public.ExecShell("df -i -P|grep '/'|grep -v tmpfs")[0]
|
||||
temp1 = temp.split('\n')
|
||||
tempInodes1 = tempInodes.split('\n')
|
||||
diskInfo = []
|
||||
n = 0
|
||||
cuts = ['/mnt/cdrom', '/boot', '/boot/efi', '/dev',
|
||||
'/dev/shm', '/run/lock', '/run', '/run/shm', '/run/user']
|
||||
for tmp in temp1:
|
||||
n += 1
|
||||
inodes = tempInodes1[n - 1].split()
|
||||
disk = tmp.split()
|
||||
if len(disk) < 5:
|
||||
continue
|
||||
if disk[1].find('M') != -1:
|
||||
continue
|
||||
if disk[1].find('K') != -1:
|
||||
continue
|
||||
if len(disk[5].split('/')) > 4:
|
||||
continue
|
||||
if disk[5] in cuts:
|
||||
continue
|
||||
arr = {}
|
||||
arr['path'] = disk[5]
|
||||
tmp1 = [disk[1], disk[2], disk[3], disk[4]]
|
||||
arr['size'] = tmp1
|
||||
arr['inodes'] = [inodes[1], inodes[2], inodes[3], inodes[4]]
|
||||
if disk[5] == '/':
|
||||
bootLog = '/tmp/panelBoot.pl'
|
||||
if disk[2].find('M') != -1:
|
||||
if os.path.exists(bootLog):
|
||||
os.system('rm -f ' + bootLog)
|
||||
else:
|
||||
pass
|
||||
if not os.path.exists(bootLog):
|
||||
os.system('sleep 1 &')
|
||||
# print arr
|
||||
diskInfo.append(arr)
|
||||
return jsonify(diskInfo)
|
||||
|
||||
|
||||
@system.route("/systemtotal")
|
||||
def systemtotal():
|
||||
# 取系统统计信息
|
||||
data = GetMemInfo()
|
||||
cpu = GetCpuInfo(1)
|
||||
data['cpuNum'] = cpu[1]
|
||||
data['cpuRealUsed'] = cpu[0]
|
||||
# data['time'] = GetBootTime()
|
||||
# data['system'] = GetSystemVersion()
|
||||
data['isuser'] = public.M('users').where('username=?', ('admin',)).count()
|
||||
data['version'] = '0.0.1'
|
||||
return jsonify(data)
|
||||
Loading…
Reference in New Issue