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 flask
- pip install gunicorn
- pip install psutil
- pip install -r requirements.txt

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

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

@ -781,7 +781,7 @@ function GetFileName(fileNameFull) {
//取磁盘
function GetDisk() {
var LBody = '';
$.get('/system?action=GetDiskInfo', function(rdata) {
$.get('/files/GetDiskInfo', function(rdata) {
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>";
}

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

@ -1,7 +1,4 @@
{% extends "default/layout.html" %}
{% block content %}
{% extends "default/layout.html" %} {% block content %}
<div class="main-content">
<div class="container-fluid" style="padding-bottom: 66px;">
<div class="pos-box bgw mtb15">
@ -9,7 +6,7 @@
<a class="plr10 c4" href="/">首页</a>/<span class="plr10 c4">服务器状态</span>
</div>
<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>
</div>
@ -27,33 +24,33 @@
<ul class="clearfix">
<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">
<h3 class="f14">$data['lan']['N1']</h3>
<h3 class="f14">网站</h3>
<div class="siteinfo-box-right">
<h4 class="c6">$data['siteCount'] $data['lan']['L3']</h4>
<h4 class="c6">1个</h4>
<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>
</li>
<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">
<h3 class="f14">$data['lan']['N3']</h3>
<h3 class="f14">FTP</h3>
<div class="siteinfo-box-right">
<h4 class="c6">$data['ftpCount'] $data['lan']['L3']</h4>
<h4 class="c6">1个</h4>
<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>
</li>
<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">
<h3 class="f14">$data['lan']['N2']</h3>
<h3 class="f14">数据库</h3>
<div class="siteinfo-box-right">
<h4 class="c6">$data['databaseCount'] $data['lan']['L3']</h4>
<h4 class="c6">1个</h4>
<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>
@ -63,9 +60,9 @@
</div>
<div class="server bgw mtb15">
<div class="title c6 f16 plr15">
<h3 class="c6 f16 pull-left">$data['lan']['T1']</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="GetProcessList()">$data['lan']['T3']</a>
<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()">连接管理</a>
<a class="pull-left f12 btlink" href="javascript:;" style="background:none;padding:0; margin-left:22px" onclick="GetProcessList()">进程管理</a>
</div>
<div class="server-circle">
<ul class="row" id="systemInfoList">
@ -83,7 +80,7 @@
<h4 id="LoadState" class="c5 f15">获取中:</h4>
</li>
<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="pie_left">
<div class="left"></div>
@ -96,7 +93,7 @@
<h4 id="core" class="c5 f15">$data['lan']['S2']</h4>
</li>
<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="pie_left">
<div class="left"></div>
@ -116,7 +113,7 @@
<div class="col-xs-12 col-sm-12 col-md-6 pull-left pd0">
<div class="pr8">
<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="container-fluid soft-man">
<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="pl7">
<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">
<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>

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

@ -2,10 +2,39 @@
from flask import Flask
from flask import Blueprint,render_template
from flask import jsonify
import psutil,time
dashboard = Blueprint('dashboard', __name__, template_folder='templates')
@dashboard.route("/")
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