mirror of
https://github.com/midoks/mdserver-web.git
synced 2026-10-10 04:19:26 +08:00
rsyncd基本功能
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
<p onclick="pluginConfig('rsyncd');">配置修改</p>
|
||||
<p onclick="rsyncdReceive();">接收配置</p>
|
||||
<p onclick="pluginLogs('rsyncd','','run_log');">日志</p>
|
||||
<!-- <p onclick="rsRead()">说明</p> -->
|
||||
<p onclick="rsRead()">说明</p>
|
||||
</div>
|
||||
<div class="bt-w-con pd15">
|
||||
<div class="soft-man-con"></div>
|
||||
|
||||
+102
-1
@@ -82,7 +82,6 @@ def getLog():
|
||||
|
||||
|
||||
def initConf():
|
||||
import re
|
||||
conf_path = appConf()
|
||||
conf = public.readFile(conf_path)
|
||||
conf = re.sub('#*(.*)', '', conf)
|
||||
@@ -105,6 +104,7 @@ def start():
|
||||
|
||||
|
||||
def stop():
|
||||
initConf()
|
||||
if public.isAppleSystem():
|
||||
return "Apple Computer does not support"
|
||||
data = public.execShell('systemctl stop rsyncd.service')
|
||||
@@ -114,6 +114,7 @@ def stop():
|
||||
|
||||
|
||||
def restart():
|
||||
initConf()
|
||||
if public.isAppleSystem():
|
||||
return "Apple Computer does not support"
|
||||
data = public.execShell('systemctl restart rsyncd.service')
|
||||
@@ -123,6 +124,7 @@ def restart():
|
||||
|
||||
|
||||
def reload():
|
||||
initConf()
|
||||
if public.isAppleSystem():
|
||||
return "Apple Computer does not support"
|
||||
|
||||
@@ -161,6 +163,99 @@ def initdUinstall():
|
||||
return 'ok'
|
||||
|
||||
|
||||
def getRecListData():
|
||||
path = appConf()
|
||||
content = public.readFile(path)
|
||||
|
||||
flist = re.findall("\[(.*)\]", content)
|
||||
flist_len = len(flist)
|
||||
ret_list = []
|
||||
for i in range(flist_len):
|
||||
tmp = {}
|
||||
tmp['name'] = flist[i]
|
||||
n = i + 1
|
||||
reg = ''
|
||||
if n == flist_len:
|
||||
reg = '\[' + flist[i] + '\](.*)\[?'
|
||||
else:
|
||||
reg = '\[' + flist[i] + '\](.*)\[' + flist[n] + '\]'
|
||||
|
||||
t1 = re.search(reg, content, re.S)
|
||||
if t1:
|
||||
args = t1.groups()[0]
|
||||
# print 'args start', args, 'args_end'
|
||||
t2 = re.findall('\s*(.*)\s*=\s*(.*)', args, re.M)
|
||||
for i in range(len(t2)):
|
||||
tmp[t2[i][0].strip()] = t2[i][1]
|
||||
ret_list.append(tmp)
|
||||
return ret_list
|
||||
|
||||
|
||||
def getRecList():
|
||||
ret_list = getRecListData()
|
||||
return public.returnJson(True, 'ok', ret_list)
|
||||
|
||||
|
||||
def addRec():
|
||||
args = getArgs()
|
||||
|
||||
data = checkArgs(args, ['name', 'path', 'ps'])
|
||||
if not data[0]:
|
||||
return data[1]
|
||||
|
||||
args_name = args['name']
|
||||
args_path = args['path']
|
||||
args_ps = args['ps']
|
||||
|
||||
path = appConf()
|
||||
content = public.readFile(path)
|
||||
|
||||
con = "\n\n" + '[' + args_name + ']' + "\n"
|
||||
con += 'path = ' + args_path + "\n"
|
||||
con += 'comment = ' + args_ps + "\n"
|
||||
con += 'read only = false'
|
||||
|
||||
content = content + con
|
||||
public.writeFile(path, content)
|
||||
return public.returnJson(True, '添加成功')
|
||||
|
||||
|
||||
def delRec():
|
||||
args = getArgs()
|
||||
|
||||
data = checkArgs(args, ['name'])
|
||||
if not data[0]:
|
||||
return data[1]
|
||||
|
||||
args_name = args['name']
|
||||
|
||||
path = appConf()
|
||||
content = public.readFile(path)
|
||||
|
||||
ret_list = getRecListData()
|
||||
ret_list_len = len(ret_list)
|
||||
is_end = False
|
||||
next_name = ''
|
||||
for x in range(ret_list_len):
|
||||
tmp = ret_list[x]
|
||||
if tmp['name'] == args_name:
|
||||
if x == ret_list_len:
|
||||
is_end = True
|
||||
else:
|
||||
next_name = ret_list[x + 1]['name']
|
||||
|
||||
reg = ''
|
||||
if is_end:
|
||||
reg = '\[' + args_name + '\]\s*(.*)'
|
||||
else:
|
||||
reg = '\[' + args_name + '\]\s*(.*)\s*\[' + next_name + '\]'
|
||||
|
||||
conre = re.search(reg, content, re.S)
|
||||
content = content.replace("[" + args_name + "]\n" + conre.groups()[0], '')
|
||||
public.writeFile(path, content)
|
||||
return public.returnJson(True, '删除成功!')
|
||||
|
||||
|
||||
# rsyncdReceive
|
||||
if __name__ == "__main__":
|
||||
func = sys.argv[1]
|
||||
@@ -184,5 +279,11 @@ if __name__ == "__main__":
|
||||
print appConf()
|
||||
elif func == 'run_log':
|
||||
print getLog()
|
||||
elif func == 'rec_list':
|
||||
print getRecList()
|
||||
elif func == 'add_rec':
|
||||
print addRec()
|
||||
elif func == 'del_rec':
|
||||
print delRec()
|
||||
else:
|
||||
print 'error'
|
||||
|
||||
+133
-1
@@ -1,8 +1,140 @@
|
||||
function str2Obj(str){
|
||||
var data = {};
|
||||
kv = str.split('&');
|
||||
for(i in kv){
|
||||
v = kv[i].split('=');
|
||||
data[v[0]] = v[1];
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
function rsPost(method,args,callback, title){
|
||||
|
||||
var _args = null;
|
||||
if (typeof(args) == 'string'){
|
||||
_args = JSON.stringify(str2Obj(args));
|
||||
} else {
|
||||
_args = JSON.stringify(args);
|
||||
}
|
||||
|
||||
var _title = '正在获取...';
|
||||
if (typeof(title) != 'undefined'){
|
||||
_title = title;
|
||||
}
|
||||
|
||||
var loadT = layer.msg(_title, { icon: 16, time: 0, shade: 0.3 });
|
||||
$.post('/plugins/run', {name:'rsyncd', func:method, args:_args}, function(data) {
|
||||
layer.close(loadT);
|
||||
if (!data.status){
|
||||
layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']});
|
||||
return;
|
||||
}
|
||||
|
||||
if(typeof(callback) == 'function'){
|
||||
callback(data);
|
||||
}
|
||||
},'json');
|
||||
}
|
||||
|
||||
|
||||
function rsyncdReceive(){
|
||||
rsPost('rec_list', '', function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
if (!rdata.status){
|
||||
layer.msg(rdata.msg,{icon:rdata.status?1:2,time:2000,shade: [0.3, '#000']});
|
||||
return;
|
||||
}
|
||||
console.log(rdata);
|
||||
var list = rdata.data;
|
||||
var con = '';
|
||||
con += '<div class="divtable" style="margin-top:5px;"><table class="table table-hover" width="100%" cellspacing="0" cellpadding="0" border="0">';
|
||||
con += '<thead><tr>';
|
||||
con += '<th>服务名</th>';
|
||||
con += '<th>路径</th>';
|
||||
con += '<th>备注</th>';
|
||||
con += '<th>操作(<a class="btlink" onclick="addReceive()">添加</a>)</th>';
|
||||
con += '</tr></thead>';
|
||||
|
||||
con += '<tbody>';
|
||||
|
||||
for (var i = 0; i < list.length; i++) {
|
||||
con += '<tr>'+
|
||||
'<td>' + list[i]['name']+'</td>' +
|
||||
'<td>' + list[i]['path']+'</td>' +
|
||||
'<td>' + list[i]['comment']+'</td>' +
|
||||
'<td><a class="btlink" onclick="modUser(\''+list[i]['name']+'\')">改密</a>|<a class="btlink" onclick="delReceive(\''+list[i]['name']+'\')">删除</a></td></tr>';
|
||||
}
|
||||
|
||||
con += '</tbody>';
|
||||
con += '</table></div>';
|
||||
|
||||
$(".soft-man-con").html(con);
|
||||
});
|
||||
}
|
||||
|
||||
function addReceive(){
|
||||
var loadOpen = layer.open({
|
||||
type: 1,
|
||||
title: '创建接收',
|
||||
area: '400px',
|
||||
content:"<div class='bt-form pd20 pb70 c6'>\
|
||||
<div class='line'>\
|
||||
<span class='tname'>项目名</span>\
|
||||
<div class='info-r c4'>\
|
||||
<input id='name' class='bt-input-text' type='text' name='name' placeholder='项目名' style='width:200px' />\
|
||||
</div>\
|
||||
</div>\
|
||||
<div class='line'>\
|
||||
<span class='tname'>同步到</span>\
|
||||
<div class='info-r c4'>\
|
||||
<input id='inputPath' class='bt-input-text' type='text' name='path' placeholder='/' style='width:200px' />\
|
||||
<span class='glyphicon glyphicon-folder-open cursor' onclick=\"changePath('inputPath')\"></span>\
|
||||
</div>\
|
||||
</div>\
|
||||
<div class='line'>\
|
||||
<span class='tname'>备注</span>\
|
||||
<div class='info-r c4'>\
|
||||
<input id='ps' class='bt-input-text' type='text' name='ps' placeholder='备注' style='width:200px' />\
|
||||
</div>\
|
||||
</div>\
|
||||
<div class='bt-form-submit-btn'>\
|
||||
<button type='button' id='add_ok' class='btn btn-success btn-sm btn-title bi-btn'>确认</button>\
|
||||
</div>\
|
||||
</div>"
|
||||
});
|
||||
|
||||
$('#add_ok').click(function(){
|
||||
_data = {};
|
||||
_data['name'] = $('#name').val();
|
||||
_data['path'] = $('#inputPath').val();
|
||||
_data['ps'] = $('#ps').val();
|
||||
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
|
||||
rsPost('add_rec', _data, function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
layer.close(loadOpen);
|
||||
layer.msg(rdata.msg,{icon:rdata.status?1:2,time:2000,shade: [0.3, '#000']});
|
||||
setTimeout(function(){rsyncdReceive();},2000);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function delReceive(name){
|
||||
safeMessage('删除['+name+']', '您真的要删除['+name+']吗?', function(){
|
||||
var _data = {};
|
||||
_data['name'] = name;
|
||||
rsPost('del_rec', _data, function(data){
|
||||
var rdata = $.parseJSON(data.data);
|
||||
layer.msg(rdata.msg,{icon:rdata.status?1:2,time:2000,shade: [0.3, '#000']});
|
||||
setTimeout(function(){rsyncdReceive();},2000);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function rsRead(){
|
||||
var readme = '<ul class="help-info-text c7">';
|
||||
readme += '<li></li>';
|
||||
readme += '<li>如需将其他服务器数据同步到本地服务器,请在接受配置中 "创建接受任务" </li>';
|
||||
readme += '</ul>';
|
||||
|
||||
$('.soft-man-con').html(readme);
|
||||
|
||||
Reference in New Issue
Block a user