pull/109/head
Mr Chen 7 years ago
parent 8968a20181
commit cc861e7057
  1. 1
      README.md
  2. 3
      main.py
  3. 1
      models/index.html
  4. 1
      plugins/index.html
  5. 3
      requirements.txt
  6. 2
      static/js/files.js
  7. 155
      templates/default/files.html
  8. 39
      templates/default/index.html
  9. 1
      test/index.html
  10. 1
      views/__init__.py
  11. 31
      views/dashboard.py
  12. 16
      views/files.py

@ -10,4 +10,5 @@ curl -fsSL https://raw.githubusercontent.com/midoks/mdweb/master/install/instal
- pip install pip==9.0.3 - pip install pip==9.0.3
- pip install flask - pip install flask
- pip install gunicorn - pip install gunicorn
- pip install psutil
- pip install -r requirements.txt - pip install -r requirements.txt

@ -2,7 +2,7 @@
from flask import Flask from flask import Flask
from flask import Blueprint,render_template from flask import Blueprint,render_template
from views import dashboard,site from views import dashboard,site,files
app = Flask(__name__) app = Flask(__name__)
app.debug = True app.debug = True
@ -10,6 +10,7 @@ app.debug = True
DEFAULT_MODULES = ( DEFAULT_MODULES = (
(dashboard, "/"), (dashboard, "/"),
(site, "/site"), (site, "/site"),
(files, "/files"),
) )
def setting_modules(app, modules): def setting_modules(app, modules):

@ -1,2 +1,3 @@
flask flask
gunicorn gunicorn
psutil

@ -781,7 +781,7 @@ function GetFileName(fileNameFull) {
//取磁盘 //取磁盘
function GetDisk() { function GetDisk() {
var LBody = ''; var LBody = '';
$.get('/system?action=GetDiskInfo', function(rdata) { $.get('/files/GetDiskInfo', function(rdata) {
for (var i = 0; i < rdata.length; i++) { for (var i = 0; i < rdata.length; i++) {
LBody += "<span onclick=\"GetFiles('" + rdata[i].path + "')\"><span class='glyphicon glyphicon-hdd'></span>&nbsp;" + (rdata[i].path=='/'?lan.files.path_root:rdata[i].path) + "(" + rdata[i].size[2] + ")</span>"; LBody += "<span onclick=\"GetFiles('" + rdata[i].path + "')\"><span class='glyphicon glyphicon-hdd'></span>&nbsp;" + (rdata[i].path=='/'?lan.files.path_root:rdata[i].path) + "(" + rdata[i].size[2] + ")</span>";
} }

@ -1,88 +1,89 @@
$def with (tData) {% extends "default/layout.html" %} {% block content %}
<div class="main-content"> <div class="main-content">
<div class="container-fluid" style="padding-bottom:50px"> <div class="container-fluid" style="padding-bottom:50px">
<div class="file-box bgw mtb15" style="position:relative; padding-top:110px"> <div class="file-box bgw mtb15" style="position:relative; padding-top:110px">
<div id="tipTools" class="plr15"> <div id="tipTools" class="plr15">
<div class="ptb15"> <div class="ptb15">
<div class="clearfix"> <div class="clearfix">
<div class="pull-left"> <div class="pull-left">
<button id="backBtn" class="backBtn btn btn-default btn-sm glyphicon glyphicon-arrow-left pull-left" title="$tData['lan']['BTN1']" onClick="BackDir()"></button> <button id="backBtn" class="backBtn btn btn-default btn-sm glyphicon glyphicon-arrow-left pull-left" title="$tData['lan']['BTN1']" onClick="BackDir()"></button>
<button class="backBtn refreshBtn btn btn-default btn-sm glyphicon glyphicon-refresh pull-right" title="$tData['lan']['BTN2']" style="margin-left:-1px;"></button> <button class="backBtn refreshBtn btn btn-default btn-sm glyphicon glyphicon-refresh pull-right" title="$tData['lan']['BTN2']" style="margin-left:-1px;"></button>
<span id='DirPathPlace' class="pull-left"><input id="fileInputPath" type="text"></span> <span id='DirPathPlace' class="pull-left"><input id="fileInputPath" type="text"></span>
<span id='PathPlaceBtn' class="pull-left"></span> <span id='PathPlaceBtn' class="pull-left"></span>
</div> </div>
<div class="pull-left mlr15" style="line-height:26px"><span id='DirInfo'></span></div> <div class="pull-left mlr15" style="line-height:26px"><span id='DirInfo'></span></div>
<div class="search pull-right" style="position: absolute; top: 6px; right: 5px;"> <div class="search pull-right" style="position: absolute; top: 6px; right: 5px;">
<form target="hid" onsubmit='GetFiles(1)'> <form target="hid" onsubmit='GetFiles(1)'>
<input type="text" id="SearchValue" class="ser-text pull-left" placeholder="" /> <input type="text" id="SearchValue" class="ser-text pull-left" placeholder="" />
<button type="button" class="ser-sub pull-left" onclick='GetFiles(1)'></button> <button type="button" class="ser-sub pull-left" onclick='GetFiles(1)'></button>
</form> </form>
<iframe name='hid' id="hid" style="display:none"></iframe> <iframe name='hid' id="hid" style="display:none"></iframe>
</div> </div>
</div> </div>
</div> </div>
<div class="clearfix ptb10"> <div class="clearfix ptb10">
<button class="btn btn-default btn-sm pull-left" onclick="UploadFiles()">$tData['lan']['BTN3']</button> <button class="btn btn-default btn-sm pull-left" onclick="UploadFiles()">上传</button>
<button class="btn btn-default btn-sm pull-left" onclick="DownloadFile()" title="$tData['lan']['TI1']" style="margin:0 5px">$tData['lan']['BTN4']</button> <button class="btn btn-default btn-sm pull-left" onclick="DownloadFile()" title="$tData['lan']['TI1']" style="margin:0 5px">远程下载</button>
<span id='BarTools'></span> <span id='BarTools'></span>
<span id='Batch' style="background-color:#fff;position:absolute;right:190px;z-index:10"></span> <span id='Batch' style="background-color:#fff;position:absolute;right:190px;z-index:10"></span>
<span id='comlist' class="comlist"></span> <span id='comlist' class="comlist"></span>
<div class="btn-group btn-group-sm pull-right" style="margin-right:5px;"> <div class="btn-group btn-group-sm pull-right" style="margin-right:5px;">
<button id="set_icon" title="$tData['lan']['TI2']" type="button" class="btn btn-default"> <button id="set_icon" title="$tData['lan']['TI2']" type="button" class="btn btn-default">
<i class="glyphicon glyphicon-th"></i> <i class="glyphicon glyphicon-th"></i>
</button> </button>
<button id="set_list" title="$tData['lan']['TI3']" type="button" class="btn btn-default active"> <button id="set_list" title="$tData['lan']['TI3']" type="button" class="btn btn-default active">
<i class="glyphicon glyphicon-th-list"></i> <i class="glyphicon glyphicon-th-list"></i>
</button> </button>
</div> </div>
</div> </div>
</div> </div>
<div class="divtable pd15" id="fileCon"></div> <div class="divtable pd15" id="fileCon"></div>
<div class="dataTables_paginate paging_bootstrap pagination plr15" style="position: relative; top: -15px;"> <div class="dataTables_paginate paging_bootstrap pagination plr15" style="position: relative; top: -15px;">
<ul id="filePage" class="page"></ul> <ul id="filePage" class="page"></ul>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<ul id="rmenu" class="dropdown-menu" style="display:none"> <ul id="rmenu" class="dropdown-menu" style="display:none">
<li onclick="javascript:Batch(1);"><a style="cursor: pointer;">$tData['lan']['L1']</a></li> <li onclick="javascript:Batch(1);"><a style="cursor: pointer;">$tData['lan']['L1']</a></li>
<li onclick="javascript:Batch(2);"><a style="cursor: pointer;">$tData['lan']['L2']</a></li> <li onclick="javascript:Batch(2);"><a style="cursor: pointer;">$tData['lan']['L2']</a></li>
<li onclick="javascript:Batch(5);"><a style="cursor: pointer;">$tData['lan']['L3']</a></li> <li onclick="javascript:Batch(5);"><a style="cursor: pointer;">$tData['lan']['L3']</a></li>
<li onclick="javascript:Batch(3);"><a style="cursor: pointer;">$tData['lan']['L4']</a></li> <li onclick="javascript:Batch(3);"><a style="cursor: pointer;">$tData['lan']['L4']</a></li>
<li onclick="javascript:Batch(4);"><a style="cursor: pointer;">$tData['lan']['L5']</a></li> <li onclick="javascript:Batch(4);"><a style="cursor: pointer;">$tData['lan']['L5']</a></li>
</ul> </ul>
<script src="/static/js/jquery-ui.min.js"></script> <script src="/static/js/jquery-ui.min.js"></script>
<script src="/static/js/jquery.contextify.min.js"></script> <script src="/static/js/jquery.contextify.min.js"></script>
<script src="/static/js/files.js?date=20180425"></script> <script src="/static/js/files.js?date=20180425"></script>
<script src="/static/js/upload.js?date=20171115"></script> <script src="/static/js/upload.js?date=20171115"></script>
<script type="text/javascript"> <script type="text/javascript">
setTimeout(function(){ setTimeout(function() {
GetDisk(); GetDisk();
},500); }, 500);
var xPath = getCookie('Path'); var xPath = getCookie('Path');
setTimeout(function(){ setTimeout(function() {
GetFiles((xPath!=undefined?xPath:'/www/wwwroot')); GetFiles((xPath != undefined ? xPath : '/www/wwwroot'));
},800); }, 800);
PathPlaceBtn((xPath!=undefined?xPath:'/www/wwwroot')); PathPlaceBtn((xPath != undefined ? xPath : '/www/wwwroot'));
setCookie('uploadSize',1024 * 1024 * 1024); setCookie('uploadSize', 1024 * 1024 * 1024);
if(getCookie('rank') == undefined || getCookie('rank') == null){ if (getCookie('rank') == undefined || getCookie('rank') == null) {
setCookie('rank','a'); setCookie('rank', 'a');
} }
$$("#set_icon").click(function(){ $$("#set_icon").click(function() {
setCookie('rank','b'); setCookie('rank', 'b');
$$(this).addClass("active"); $$(this).addClass("active");
$$("#set_list").removeClass("active"); $$("#set_list").removeClass("active");
GetFiles(getCookie('Path')); GetFiles(getCookie('Path'));
}); });
$$("#set_list").click(function(){ $$("#set_list").click(function() {
setCookie('rank','a'); setCookie('rank', 'a');
$$(this).addClass("active"); $$(this).addClass("active");
$$("#set_icon").removeClass("active"); $$("#set_icon").removeClass("active");
GetFiles(getCookie('Path')); GetFiles(getCookie('Path'));
}) })
$$(".refreshBtn").click(function(){ $$(".refreshBtn").click(function() {
GetFiles(getCookie('Path')); GetFiles(getCookie('Path'));
}) })
</script> </script>
{% endblock %}

@ -1,7 +1,4 @@
{% extends "default/layout.html" %} {% extends "default/layout.html" %} {% block content %}
{% block content %}
<div class="main-content"> <div class="main-content">
<div class="container-fluid" style="padding-bottom: 66px;"> <div class="container-fluid" style="padding-bottom: 66px;">
<div class="pos-box bgw mtb15"> <div class="pos-box bgw mtb15">
@ -9,7 +6,7 @@
<a class="plr10 c4" href="/">首页</a>/<span class="plr10 c4">服务器状态</span> <a class="plr10 c4" href="/">首页</a>/<span class="plr10 c4">服务器状态</span>
</div> </div>
<span class="pull-right f12 c6" style="line-height:42px; margin-right:15px"> <span class="pull-right f12 c6" style="line-height:42px; margin-right:15px">
免费版 <span id="btversion" class="mr5" onclick="openLog()">0.0.1</span> 免费版 <span id="btversion" class="mr5" onclick="openLog()">0.0.1</span>
<span id="toUpdate"><a class="btlink" href="javascript:checkUpdate();">检查更新</a></span> <span id="toUpdate"><a class="btlink" href="javascript:checkUpdate();">检查更新</a></span>
</span> </span>
</div> </div>
@ -27,33 +24,33 @@
<ul class="clearfix"> <ul class="clearfix">
<li class="sys-i-c-box col-xs-6 col-sm-4 col-md-4 col-lg-3 plr15"> <li class="sys-i-c-box col-xs-6 col-sm-4 col-md-4 col-lg-3 plr15">
<div class="siteinfo-box b-shadown"> <div class="siteinfo-box b-shadown">
<h3 class="f14">$data['lan']['N1']</h3> <h3 class="f14">网站</h3>
<div class="siteinfo-box-right"> <div class="siteinfo-box-right">
<h4 class="c6">$data['siteCount'] $data['lan']['L3']</h4> <h4 class="c6">1个</h4>
<div class="sbr-btn"> <div class="sbr-btn">
<a href="/site">$data['lan']['L1']</a>|<a href="javascript:;" onclick="webAdd(0)">$data['lan']['L2']</a> <a href="/site">管理</a>|<a href="javascript:;" onclick="webAdd(0)">添加</a>
</div> </div>
</div> </div>
</div> </div>
</li> </li>
<li class="sys-i-c-box col-xs-6 col-sm-4 col-md-4 col-lg-3 plr15"> <li class="sys-i-c-box col-xs-6 col-sm-4 col-md-4 col-lg-3 plr15">
<div class="siteinfo-box b-shadown"> <div class="siteinfo-box b-shadown">
<h3 class="f14">$data['lan']['N3']</h3> <h3 class="f14">FTP</h3>
<div class="siteinfo-box-right"> <div class="siteinfo-box-right">
<h4 class="c6">$data['ftpCount'] $data['lan']['L3']</h4> <h4 class="c6">1个</h4>
<div class="sbr-btn"> <div class="sbr-btn">
<a href="/ftp">$data['lan']['L1']</a>|<a href="javascript:;" onclick="ftpAdd(0)">$data['lan']['L2']</a> <a href="/ftp">管理</a>|<a href="javascript:;" onclick="ftpAdd(0)">添加</a>
</div> </div>
</div> </div>
</div> </div>
</li> </li>
<li class="sys-i-c-box col-xs-6 col-sm-4 col-md-4 col-lg-3 plr15"> <li class="sys-i-c-box col-xs-6 col-sm-4 col-md-4 col-lg-3 plr15">
<div class="siteinfo-box b-shadown"> <div class="siteinfo-box b-shadown">
<h3 class="f14">$data['lan']['N2']</h3> <h3 class="f14">数据库</h3>
<div class="siteinfo-box-right"> <div class="siteinfo-box-right">
<h4 class="c6">$data['databaseCount'] $data['lan']['L3']</h4> <h4 class="c6">1个</h4>
<div class="sbr-btn"> <div class="sbr-btn">
<a href="/database">$data['lan']['L1']</a>|<a href="javascript:;" onclick="DataAdd(0)">$data['lan']['L2']</a> <a href="/database">管理</a>|<a href="javascript:;" onclick="DataAdd(0)">添加</a>
</div> </div>
</div> </div>
</div> </div>
@ -63,9 +60,9 @@
</div> </div>
<div class="server bgw mtb15"> <div class="server bgw mtb15">
<div class="title c6 f16 plr15"> <div class="title c6 f16 plr15">
<h3 class="c6 f16 pull-left">$data['lan']['T1']</h3> <h3 class="c6 f16 pull-left">服务器状态</h3>
<a class="pull-left f12 btlink" href="javascript:;" style="background:none;padding:0; margin-left:22px" onclick="GetNetWorkList()">$data['lan']['T2']</a> <a class="pull-left f12 btlink" href="javascript:;" style="background:none;padding:0; margin-left:22px" onclick="GetNetWorkList()">连接管理</a>
<a class="pull-left f12 btlink" href="javascript:;" style="background:none;padding:0; margin-left:22px" onclick="GetProcessList()">$data['lan']['T3']</a> <a class="pull-left f12 btlink" href="javascript:;" style="background:none;padding:0; margin-left:22px" onclick="GetProcessList()">进程管理</a>
</div> </div>
<div class="server-circle"> <div class="server-circle">
<ul class="row" id="systemInfoList"> <ul class="row" id="systemInfoList">
@ -83,7 +80,7 @@
<h4 id="LoadState" class="c5 f15">获取中:</h4> <h4 id="LoadState" class="c5 f15">获取中:</h4>
</li> </li>
<li class="col-xs-6 col-sm-3 col-md-3 col-lg-2 mtb20 circle-box text-center"> <li class="col-xs-6 col-sm-3 col-md-3 col-lg-2 mtb20 circle-box text-center">
<h3 class="c5 f15">$data['lan']['P1']</h3> <h3 class="c5 f15">CPU使用率</h3>
<div class="circle"> <div class="circle">
<div class="pie_left"> <div class="pie_left">
<div class="left"></div> <div class="left"></div>
@ -96,7 +93,7 @@
<h4 id="core" class="c5 f15">$data['lan']['S2']</h4> <h4 id="core" class="c5 f15">$data['lan']['S2']</h4>
</li> </li>
<li class="col-xs-6 col-sm-3 col-md-3 col-lg-2 mtb20 circle-box text-center"> <li class="col-xs-6 col-sm-3 col-md-3 col-lg-2 mtb20 circle-box text-center">
<h3 class="c5 f15">$data['lan']['P2']</h3> <h3 class="c5 f15">内存使用率</h3>
<div class="circle mem-release"> <div class="circle mem-release">
<div class="pie_left"> <div class="pie_left">
<div class="left"></div> <div class="left"></div>
@ -116,7 +113,7 @@
<div class="col-xs-12 col-sm-12 col-md-6 pull-left pd0"> <div class="col-xs-12 col-sm-12 col-md-6 pull-left pd0">
<div class="pr8"> <div class="pr8">
<div class="bgw"> <div class="bgw">
<div class="title c6 f16 plr15">$data['lan']['P4']</div> <div class="title c6 f16 plr15">软件</div>
<div class="setting-con" style="padding:0; height:442px; margin-right: -4px; overflow: hidden;"> <div class="setting-con" style="padding:0; height:442px; margin-right: -4px; overflow: hidden;">
<div class="container-fluid soft-man"> <div class="container-fluid soft-man">
<input name="list1SortOrder" type="hidden" value="" /> <input name="list1SortOrder" type="hidden" value="" />
@ -129,7 +126,7 @@
<div class="col-xs-12 col-sm-12 col-md-6 pull-left pd0"> <div class="col-xs-12 col-sm-12 col-md-6 pull-left pd0">
<div class="pl7"> <div class="pl7">
<div class="bgw" style="height:491px"> <div class="bgw" style="height:491px">
<div class="title c6 f16 plr15">$data['lan']['NET1']</div> <div class="title c6 f16 plr15">网络流量</div>
<div class="bw-info"> <div class="bw-info">
<ul> <ul>
<li class="bi-line col-xs-6 col-sm-6 col-md-6 pull-left c6 f14"><span class="pull-left">$data['lan']['NET2']</span><a id="upSpeed" class="c6">$data['lan']['S2']</a></li> <li class="bi-line col-xs-6 col-sm-6 col-md-6 pull-left c6 f14"><span class="pull-left">$data['lan']['NET2']</span><a id="upSpeed" class="c6">$data['lan']['S2']</a></li>

@ -1,3 +1,4 @@
from dashboard import * from dashboard import *
from site import * from site import *
from files import *

@ -2,10 +2,39 @@
from flask import Flask from flask import Flask
from flask import Blueprint,render_template from flask import Blueprint,render_template
from flask import jsonify
import psutil,time
dashboard = Blueprint('dashboard', __name__, template_folder='templates') dashboard = Blueprint('dashboard', __name__, template_folder='templates')
@dashboard.route("/") @dashboard.route("/")
def index(): def index():
return render_template('default/index.html') 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,16 @@
# coding:utf-8
from flask import Flask
from flask import Blueprint,render_template
from flask import jsonify
files = Blueprint('files', __name__, template_folder='templates')
@files.route("/")
def index():
return render_template('default/files.html')
@files.route("/GetDiskInfo")
def GetDiskInfo():
return jsonify({'result':'ok'})
Loading…
Cancel
Save