function rsPost(method,args,callback, title){
var _args = null;
if (typeof(args) == 'string'){
_args = JSON.stringify(toArrayObject(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 createSendTask(name = ''){
var args = {};
args["name"] = name;
rsPost('lsyncd_get', args, function(rdata){
var rdata = $.parseJSON(rdata.data);
var data = rdata.data;
console.log(data);
var layerName = '创建';
if (name!=''){
layerName = '编辑';
}
var compress_true = "";
var compress_false = "";
if (data['rsync']['compress'] == 'true'){
compress_true = "selected";
compress_false = "";
} else {
compress_true = "";
compress_false = "selected";
}
var delete_true = "";
var delete_false = "";
if (data['delete'] == 'false'){
delete_true = "selected";
delete_false = "";
} else {
delete_true = "";
delete_false = "selected";
}
var realtime_true = "";
var realtime_false = "";
if (data['realtime'] == 'true'){
realtime_true = "selected";
realtime_false = "";
} else {
realtime_true = "";
realtime_false = "selected";
}
var period_day = "";
var period_minute_n = "";
if (data['period'] == 'day'){
period_day = "selected";
period_minute_n = "";
} else {
period_day = "";
period_minute_n = "selected";
}
var bwlimit = "1024";
if ('rsync' in data){
bwlimit = data['rsync']['bwlimit'];
}
var delay = "3";
if ('delay' in data){
delay = data['delay'];
}
var layerID = layer.open({
type: 1,
area: ['600px','500px'],
title: layerName+"发送任务",
closeBtn: 1,
shift: 0,
shadeClose: false,
btn: ['提交','取消'],
content:"
",
success:function(){
$('[data-toggle="tooltip"]').tooltip();
$(".conn-user").hide();
$("select[name='conn_type']").change(function(){
if($(this).val() == 'key'){
$(".conn-user").hide();
$(".conn-key").show();
}else{
$(".conn-user").show();
$(".conn-key").hide();
}
});
var selVal = $('.synchronization option:selected').val();
if (selVal == "false"){
$('#period').show();
}else{
$('#period').hide();
$('.hour input,.minute input').val('0');
$('.minute-n input').val('1');
}
$('.synchronization').change(function(event) {
var selVal = $('.synchronization option:selected').val();
if (selVal == "false"){
$('#period').show();
}else{
$('#period').hide();
$('.hour input,.minute input').val('0');
$('.minute-n input').val('1');
}
});
$("select[name='delete']").change(function(){
if($(this).val() == 'true'){
var mpath = $('input[name="path"]').val();
var msg = '警告:您选择了完全同步,将会使本机同步与目标机器指定目录的文件保持一致,'
+' 请确认目录设置是否有误,一但设置错误,可能导致目标机器的目录文件被删除! '
+' 注意: 同步程序将本机目录:'
+mpath+'的所有数据同步到目标服务器,若目标服务器的同步目录存在其它文件将被删除! 已了解风险,请按确定继续
';
layer.confirm(msg,{title:'数据安全风险警告',icon:2,closeBtn: 1,shift: 5,
btn2:function(){
setTimeout(function(){$($("select[name='delete']").children("option")[0]).prop('selected',true);},100);
}
});
}
});
var selVal = $('#period select option:selected').val();
if (selVal == 'day'){
$('.hour,.minute').show();
if ($('.hour input').val() == ''){
$('.hour input,.minute input').val('0');
}
$('.minute-n').hide();
}else{
$('.hour,.minute').hide();
$('.minute-n').show();
if ($('.minute-n input').val() == ''){
$('.minute-n input').val('1');
}
}
$('#period').change(function(event) {
var selVal = $('#period select option:selected').val();
if (selVal == 'day'){
$('.hour,.minute').show();
if ($('.hour input').val() == ''){
$('.hour input,.minute input').val('0');
}
$('.minute-n').hide();
}else{
$('.hour,.minute').hide();
$('.minute-n').show();
if ($('.minute-n input').val() == ''){
$('.minute-n input').val('1');
}
}
});
},
yes:function(index){
var args = {};
var conn_type = $("select[name='conn_type']").val();
if(conn_type == 'key'){
if ( $('textarea[name="secret_key"]').val() != ''){
args['secret_key'] = $('textarea[name="secret_key"]').val();
} else {
layer.msg('请输入接收密钥!');
return false;
}
} else {
args['sname'] = $("input[name='u_user']").val();
args['password'] = $("input[name='u_pass']").val();
var port = Number($("input[name='u_port']").val());
args['port'] = port;
if (!args['sname'] || !args['password'] || !args['port']){
layer.msg('请输入帐号、密码、端口信息');
return false;
}
}
if ($('input[name="ip"]').val() == ''){
layer.msg('请输入服务器IP地址!');
return false;
}
args['sname'] = $("input[name='u_user']").val();
args['password'] = $("input[name='u_pass']").val();
var port = Number($("input[name='u_port']").val());
args['port'] = port;
args['ip'] = $('input[name="ip"]').val();
args['path'] = $('input[name="path"]').val();
args['delete'] = $('select[name="delete"]').val();
args['realtime'] = $('select[name="realtime"]').val();
args['delay'] = $('input[name="delay"]').val();
args['bwlimit'] = $('input[name="bwlimit"]').val();
args['conn_type'] = $('select[name="conn_type"]').val();
args['compress'] = $('select[name="compress"]').val();
args['period'] = $('select[name="period"]').val();
args['hour'] = $('input[name="hour"]').val();
args['minute'] = $('input[name="minute"]').val();
args['minute-n'] = $('input[name="minute-n"]').val();
rsPost('lsyncd_add', args, function(rdata){
var rdata = $.parseJSON(rdata.data);
layer.msg(rdata.msg,{icon:rdata.status?1:2,time:2000,shade: [0.3, '#000']});
if (rdata.status){
setTimeout(function(){
layer.close(index);
lsyncdSend();
},2000);
return;
}
});
return true;
}
});
});
}
function lsyncdDelete(name){
safeMessage('删除['+name+']', '您真的要删除['+name+']吗?', function(){
var args = {};
args['name'] = name;
rsPost('lsyncd_delete', args, function(rdata){
var rdata = $.parseJSON(rdata.data);
layer.msg(rdata.msg,{icon:rdata.status?1:2,time:2000,shade: [0.3, '#000']});
setTimeout(function(){lsyncdSend();},2000);
});
});
}
function lsyncdRun(name){
var args = {};
args["name"] = name;
rsPost('lsyncd_run', args, function(rdata){
var rdata = $.parseJSON(rdata.data);
layer.msg(rdata.msg,{icon:rdata.status?1:2,time:2000,shade: [0.3, '#000']});
});
}
function lsyncdLog(name){
var args = {};
args["name"] = name;
pluginStandAloneLogs("rsyncd", '', "lsyncd_log", JSON.stringify(args));
}
function lsyncdExclude(name){
layer.open({
type:1,
title:'过滤器',
area: '400px',
shadeClose:false,
closeBtn:2,
content:'\
\
\
\
排除的文件和目录是指当前目录下不需要同步的目录或者文件 \
如果规则以斜线 /
开头,则从头开始要匹配全部 \
如果规则以 /
结尾,则要匹配监控路径的末尾 \
?
匹配任何字符,但不包括/
\
*
匹配0或多个字符,但不包括/
\
**
匹配0或多个字符,可以是/
\
\
\
'
});
function getIncludeExclude(mName){
loadT = layer.msg('正在获取数据...',{icon:16,time:0,shade: [0.3, '#000']});
rsPost('lsyncd_get_exclude',{"name":mName}, function(rdata) {
layer.close(loadT);
var rdata = $.parseJSON(rdata.data);
var res = rdata.data;
var list=''
for (var i = 0; i < res.length; i++) {
list += ''+ res[i] +' 删除 ';
}
$('.lsyncd_exclude .BlockList tbody').empty().append(list);
});
}
getIncludeExclude(name);
function addArgs(name,exclude){
loadT = layer.msg('正在添加...',{icon:16,time:0,shade: [0.3, '#000']});
rsPost('lsyncd_add_exclude', {name:name,exclude:exclude}, function(res){
layer.close(loadT);
console.log('addArgs:',res);
if (res.status){
getIncludeExclude(name);
$('.lsyncd_exclude input').val('');
layer.msg(res.msg);
}else{
layer.msg(res.msg);
}
});
}
$('.addList').click(function(event) {
var val = $(this).prev().val();
if(val == ''){
layer.msg('当前输入内容为空,请输入');
return false;
}
addArgs(name,val);
});
$('.lsyncd_exclude input').keyup(function(event){
if (event.which == 13){
var val = $(this).val();
if(val == ''){
layer.msg('当前输入内容为空,请输入');
return false;
}
addArgs(name,val);
}
});
$('.lsyncd_exclude').on('click', '.delList', function(event) {
loadT = layer.msg('正在删除...',{icon:16,time:0,shade: [0.3, '#000']});
var val = $(this).parent().prev().text();
rsPost('lsyncd_remove_exclude',{"name":name,exclude:val}, function(rdata) {
layer.close(loadT);
console.log(rdata)
var rdata = $.parseJSON(rdata.data);
var res = rdata.data;
var list=''
for (var i = 0; i < res.length; i++) {
list += ''+ res[i] +' 删除 ';
}
$('.lsyncd_exclude .BlockList tbody').empty().append(list);
});
});
}
function lsyncdConfLog(){
pluginRollingLogs("rsyncd","","lsyncd_conf_log");;
}
function lsyncdSend(){
rsPost('lsyncd_list', '', function(data){
var rdata = $.parseJSON(data.data);
console.log(rdata);
if (!rdata.status){
layer.msg(rdata.msg,{icon:rdata.status?1:2,time:2000,shade: [0.3, '#000']});
return;
}
var list = rdata.data.list;
var con = '';
con += '\
创建发送任务 \
自动同步日志 \
';
con += '';
con += '';
con += '名称(标识) ';
con += '源目录 ';
con += '同步到 ';
con += '模式 ';
con += '周期 ';
con += '操作 ';
con += ' ';
con += '';
for (var i = 0; i < list.length; i++) {
var mode = '增量';
if (list[i]['delete'] == 'true'){
mode = '完全';
} else {
mode = '增量';
}
var period = "实时";
if (list[i]['realtime'] == 'true'){
period = '实时';
} else {
period = '定时';
}
con += ''+
'' + list[i]['name']+' ' +
'' + list[i]['path']+' ' +
'' + list[i]['ip']+":"+list[i]['name']+' ' +
'' + mode+' ' +
'' + period +' ' +
'\
同步 \
| 手动日志 \
| 过滤器 \
| 编辑 \
| 删除 \
\
';
}
con += ' ';
con += '
';
$(".soft-man-con").html(con);
});
}
///////////////// ----------------- 接收配置 ---------------- //////////////
function rsyncdConf(){
rsPost('conf', {}, function(rdata){
rpath = rdata['data'];
if (rdata['status']){
onlineEditFile(0, rpath);
} else {
layer.msg(rdata.msg,{icon:1,time:2000,shade: [0.3, '#000']});
}
});
}
function rsyncdLog(){
pluginRollingLogs("rsyncd","","run_log");
}
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 += '\
配置 \
日志 \
';
con += '';
con += '';
con += '服务名 ';
con += '路径 ';
con += '备注 ';
con += '操作(添加 ) ';
con += ' ';
con += '';
//编辑
for (var i = 0; i < list.length; i++) {
con += ''+
'' + list[i]['name']+' ' +
'' + list[i]['path']+' ' +
'' + list[i]['comment']+' ' +
'\
命令 \
| 密钥 \
| 编辑 \
| 删除 \
';
}
con += ' ';
con += '
';
$(".soft-man-con").html(con);
});
}
function addReceive(name = ""){
rsPost('get_rec',{"name":name},function(rdata) {
var rdata = $.parseJSON(rdata.data);
var data = rdata.data;
var readonly = "";
if (name !=""){
readonly = 'readonly="readonly"'
}
var loadOpen = layer.open({
type: 1,
title: '创建接收',
area: '400px',
btn:['确认','取消'],
content:"",
success:function(layero, index){},
yes:function(){
var args = {};
args['name'] = $('#name').val();
args['pwd'] = $('#MyPassword').val();
args['path'] = $('#inputPath').val();
args['ps'] = $('#ps').val();
var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
rsPost('add_rec', args, function(data){
var rdata = $.parseJSON(data.data);
if (rdata['status']){
layer.close(loadOpen);
layer.msg(rdata.msg,{icon:rdata.status?1:2,time:2000,shade: [0.3, '#000']});
setTimeout(function(){rsyncdReceive();},2000);
} else {
layer.msg(rdata.msg,{icon:rdata.status?1:2,time:10000,shade: [0.3, '#000']});
}
});
}
});
})
}
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 cmdRecSecretKey(name){
var _data = {};
_data['name'] = name;
rsPost('cmd_rec_secret_key', _data, function(data){
var rdata = $.parseJSON(data.data);
layer.open({
type: 1,
title: '接收密钥',
area: '400px',
content:""+rdata.data+"
"
});
});
}
function cmdRecCmd(name){
var _data = {};
_data['name'] = name;
rsPost('cmd_rec_cmd', _data, function(data){
var rdata = $.parseJSON(data.data);
layer.open({
type: 1,
title: '接收命令例子',
area: '400px',
content:""+rdata.data+"
"
});
});
}
function rsRead(){
var readme = '';
readme += '如需将其他服务器数据同步到本地服务器,请在接受配置中 "创建接收任务" ';
readme += '如果开启防火墙,需要放行873端口 ';
readme += ' ';
$('.soft-man-con').html(readme);
}