Linux ip-172-26-2-223 5.4.0-1018-aws #18-Ubuntu SMP Wed Jun 24 01:15:00 UTC 2020 x86_64
Apache
: 172.26.2.223 | : 3.148.210.152
Cant Read [ /etc/named.conf ]
8.1.13
www
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
BLACK DEFEND!
README
+ Create Folder
+ Create File
/
www /
server /
panel /
BTPanel /
static /
js /
[ HOME SHELL ]
Name
Size
Permission
Action
Validform_v5.3.2_min.js
20.17
KB
-rwxr-xr-x
aes.js
22.15
KB
-rwxr-xr-x
bootstrap-select.min.js
30.91
KB
-rwxr-xr-x
bootstrap.min.js
35.95
KB
-rwxr-xr-x
bt_upload.js
6.46
KB
-rwxr-xr-x
china.js
60.38
KB
-rwxr-xr-x
clipboard.min.js
10.41
KB
-rwxr-xr-x
config.js
62.92
KB
-rwxr-xr-x
control.js
43.36
KB
-rwxr-xr-x
countryCode.json
27.27
KB
-rwxr-xr-x
crontab.js
61.74
KB
-rwxr-xr-x
database.js
103.01
KB
-rwxr-xr-x
docker.js
151.43
KB
-rwxr-xr-x
echarts.min.js
950.32
KB
-rwxr-xr-x
files.js
233.97
KB
-rwxr-xr-x
files.min.js
121.19
KB
-rwxr-xr-x
firewall.js
102.42
KB
-rwxr-xr-x
i18next.min.js
47.94
KB
-rwxr-xr-x
index.html
0
B
-rwxr-xr-x
index.js
123.52
KB
-rwxr-xr-x
jquery-1.10.2.min.js
90.88
KB
-rwxr-xr-x
jquery-2.2.4.min.js
83.57
KB
-rwxr-xr-x
jquery-ui.min.js
247.72
KB
-rwxr-xr-x
jquery.contextify.min.js
2.7
KB
-rwxr-xr-x
jquery.dragsort-0.5.2.min.js
8.92
KB
-rwxr-xr-x
jquery.fly.min.js
1.79
KB
-rwxr-xr-x
jquery.i18n.properties.js
16.59
KB
-rwxr-xr-x
jquery.qrcode.min.js
13.67
KB
-rwxr-xr-x
jsencrypt.min.js
175.64
KB
-rwxr-xr-x
logs.js
39.53
KB
-rwxr-xr-x
md5.js
8.34
KB
-rwxr-xr-x
polyfill.js
9.31
KB
-rwxr-xr-x
polyfill.min.js
520
B
-rwxr-xr-x
public.js
231.13
KB
-rwxr-xr-x
public_backup.js
352.53
KB
-rwxr-xr-x
qrcode.min.js
19.46
KB
-rwxr-xr-x
requestAnimationFrame.js
901
B
-rwxr-xr-x
site.js
458.68
KB
-rwxr-xr-x
socket.io.min.js
63.54
KB
-rwxr-xr-x
soft.js
266.85
KB
-rwxr-xr-x
term.js
48.74
KB
-rwxr-xr-x
tools.js
130.2
KB
-rwxr-xr-x
tools.min.js
80.67
KB
-rwxr-xr-x
upload-drog.js
38.45
KB
-rwxr-xr-x
upload.js
8.11
KB
-rwxr-xr-x
xterm.js
295.86
KB
-rwxr-xr-x
Delete
Unzip
Zip
${this.title}
Close
Code Editor : docker.js
/* * @Author: 立夫 * @Date: 2022-04-02 14:50:32 * @LastEditTime: 2022-04-20 15:14:58 * @Description: * @FilePath: \198\BTPanel\static\js\docker.js * 可以输入预定的版权声明、个性签名、空行等 */ $('#cutMode .tabs-item').on('click', function () { var type = $(this).data('type'), index = $(this).index(); $(this).addClass('active').siblings().removeClass('active'); $('.tab-con').find('.tab-con-block').eq(index).removeClass('hide').siblings().addClass('hide'); docker.initTabConfig(type)//初始化tab,获取内容 bt.set_cookie('docker_model',type) //Cookie保存当前tab位置 }); var docker = { tabName:'container',//当前所处tab位置 global_api:'/project/docker/model', global:{ url:'unix:///var/run/docker.sock', dk_model_name:'', dk_def_name:'', }, dk_images:[], //镜像列表》容器页面专用 dk_volumes:[], //卷列表 》容器页面专用 dk_template:[], //模板列表》容器编排页面专用 dk_registry:[], //仓库列表》镜像页面专用 cont_chart:{ //容器图表数据 cpu_list:[], mem_list:{ usage:[], cache:[] }, disk_list:{ read:[], write:[] }, network_list:{ tx:[], rx:[] }, time_list:[] }, cont_chart_id:{ //容器图表dom cpu:null, mem:null, disk:null, network:null }, cont_setInterval:null, //图表定时器 log_file_setInterval:null, //日志定时器 log_layer_open:null, //日志弹窗 /** * @description 获取容器列表 */ get_container:function(){ var that = this; var _config = $.extend({},this.global,{dk_def_name:'get_list'}) var dk_container_table = bt_tools.table({ el:'#dk_container_table', load: true, url:this.global_api, minWidth: '1050px', height:750, param: {data:JSON.stringify(_config)}, dataFilter: function (res) { if(!res.msg.installed || !res.msg.service_status) that.stop_user_operation(res.msg.installed,res.msg.service_status) that.dk_images = res['msg']['images'] that.dk_volumes = res['msg']['volumes'] that.dk_template = res['msg']['template'] return { data: res['msg']['container_list'] }; }, default: lan.docker.public.no_data(lan.docker.public.container), column:[{ type: 'checkbox', class: '', width: 20 },{ fid: 'name', title: lan.docker.container.name, width:146, template:function(row){ return '<span class="btlink size_ellipsis" style="width:130px" title="'+row.name+'">'+row.name+'</span>' }, event: function (row) { that.open_container_config(row) } },{ title: lan.docker.container.status, width: 100, template:function(row){ var _class = '',_icon = '',text = '' switch(row.status){ case 'running': _class = 'bt_success' _icon = 'glyphicon-play' text = lan.docker.public.activated break; case 'paused': _class = 'bt_warning' _icon = 'glyphicon-pause' text = lan.docker.public.paused break; default: _class = 'bt_danger' _icon = 'glyphicon-pause' text = lan.docker.public.stopped break; } return '<a class="btlink '+_class+'">'+text+'<span class="glyphicon '+_icon+'"></span></a>' }, event:function(row){ if($('.dk_status_select_list').length == 0){ $('.dk_status_select').append('\ <ul class="dk_status_select_list">\ <li data-key="start">' + lan.docker.container.start + '</li>\ <li data-key="stop">' + lan.docker.container.stop + '</li>\ <li data-key="pause">' + lan.docker.container.pause + '</li>\ <li data-key="unpause">' + lan.docker.container.unpause + '</li>\ <li data-key="restart">' + lan.docker.container.restart + '</li>\ <li data-key="reload">' + lan.docker.container.reload + '</li>\ </ul>'); // 事件 $('.dk_status_select_list li').click(function(){ var _type = $(this).data('key') that.container_status_setting(_type,row.detail.Id,dk_container_table) }) // 下拉定位 var thLeft = $('#dk_container_table .divtable').scrollLeft(), //当前滚动条位置 thTop = $('#dk_container_table .divtable').scrollTop(), //当前滚动条位置 domScrollTop = $(document).scrollTop(), _thSpan = $('.dk_status_select')[0] $('.dk_status_select_list').css({'left':_thSpan.offsetLeft+210-thLeft,'top':(_thSpan.offsetTop+153-domScrollTop-thTop)}) } } },{ fid: 'image', width:160, title: lan.docker.container.mirror_image, template:function(row){ return '<span class="size_ellipsis" style="width:144px" title="'+row.image+'">'+row.image+'</span>' } },{ fid:'ip', title:'IP', },{ fid:'cpu_usage', width: 120, title: lan.docker.container.cpu_usage, template:function(row){ return '<span">'+(row.cpu_usage !== ''?row.cpu_usage+'%':'')+'</span>' } },{ fid: 'port', title: lan.docker.container.port, template:function(row){ var _port = [] $.each(row.ports,function(index,item){ if(item != null){ _port.push(item[0]['HostPort']+'-->'+index) } }) return '<span>'+_port.join()+'</span>' } },{ width: 150, title: lan.docker.container.time, template:function(row){ return '<span>'+that.utc2beijing(row.time)+'</span>' } },{ title: lan.public.operate, type: 'group', width: 300, align: 'right', group: [{ title: lan.docker.container.monitoring, event: function(row){ bt_tools.open({ type: 1, title: '[' + row.name + '] ' + lan.docker.container.online_monitoring, area: '1100px', btn: false, content: '<div class="pd15 cont-chart-dialog">\ <div class="cont_chart_line"><div class="cont_chart_child_title">' + lan.docker.container.basic_information + '</div>\ <div class="">\ <div class="cont_chart_basis"><strong>' + lan.pythonmamager.mem + ': </strong><span>-</span></div>\ <div class="cont_chart_basis"><strong>' + lan.docker.container.flow_situation + ': </strong><span>- / -</span></div>\ </div>\ </div>\ <div class="cont_chart_block"><div class="cont_chart_child_title">CPU</div><div class=""><div id="cont_cpu" style="width:100%;height:240px"></div></div></div>\ <div class="cont_chart_block"><div class="cont_chart_child_title">' + lan.pythonmamager.mem + '</div><div class=""><div id="cont_mem" style="width:100%;height:240px"></div></div></div>\ <div class="cont_chart_block"><div class="cont_chart_child_title">' + lan.docker.container.disk + '</div><div class=""><div id="cont_disk" style="width:100%;height:240px"></div></div></div>\ <div class="cont_chart_block"><div class="cont_chart_child_title">' + lan.docker.container.network + '</div><div class=""><div id="cont_network" style="width:100%;height:240px"></div></div></div>\ </div>', success:function(){ // 先初始化数据 that.remove_cont_chart_data() //加载图表文件 jQuery.ajax({ url: "/static/js/echarts.min.js", dataType: "script", cache: true }).done(function() { that.render_cont_chart(row); //默认渲染 that.cont_setInterval = setInterval(function(){ that.transform_cont_chart_data(row); },3000)//默认三秒获取一次数据 }); }, cancel: function () { that.remove_cont_chart_data() } }) } },{ title: lan.public.terminal, event:function(row){ that.open_container_shell_view(row); } },{ title: lan.docker.container.path, event:function(row){ if(row.merged == '') return layer.msg(lan.docker.container.path_not, { icon: 0 }) openPath(row.merged); } },{ title: lan.public.log, event:function(row){ that.ajax_task_method('get_logs',{data:{id:row.detail.Id},tips: lan.docker.container.get_logs_tips },function(res){ layer.open({ title:'['+row.name+'] ' + lan.docker.container.log, type:1, area: '700px', shadeClose: false, closeBtn: 2, btn:false, content: '\ <div class="setchmod bt-form" style="padding: 0">\ <pre class="dk-container-log" style="overflow: auto; border: 0px none; line-height:23px;padding: 15px; margin: 0px; white-space: pre-wrap; height: 405px; background-color: rgb(51,51,51);color:#f1f1f1;border-radius:0px;font-family: \"微软雅黑\"">' + (res.msg == '' ? lan.docker.container.log_none : res.msg) + '</pre>\ </div>', success:function(){ $('.dk-container-log').scrollTop($('.dk-container-log').prop('scrollHeight')) } }); }); } },{ title: lan.public.del, event:function(row){ bt.confirm({ title: lan.docker.container.del_container + ' [' + row.name + ']', msg: lan.docker.container.del_container_msg }, function () { that.ajax_task_method('del_container',{data:{id:row.detail.Id},tips: lan.docker.container.del_container_tips},function(res){ if(res.status) that.initTabConfig('container') //刷新列表 bt_tools.msg(res) }) }); } }] }], tootls:[{ type: 'group', positon: ['left', 'top'], list: [{ title: lan.docker.container.add_container, active: true, event: function () { that.add_container(); } }] },{ // 批量操作 type: 'batch', //batch_btn positon: ['left', 'bottom'], placeholder: lan.public.please_choose, buttonValue: lan.public.exec, disabledSelectValue: lan.docker.container.batch_select_tips, selectList: [{ title: lan.docker.container.start_container, url: that.global_api, load: true, param:function(crow){ return {data:that.batch_param_convert('start',{id:crow.id})} }, refresh: true, callback: function (thatc) { thatc.start_batch({}, function (list) { var html = '' for (var i = 0; i < list.length; i++) { var item = list[i]; html += '<tr><td>' + item.name + '</td><td><div style="float:right;"><span style="color:' + (item.request.status ? '#20a53a' : 'red') + '">' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '</span></div></td></tr>'; } dk_container_table.$batch_success_table({ title: lan.site.batch_text + lan.docker.container.start_container, th: lan.docker.container.start_container, html: html }); dk_container_table.$refresh_table_list(true); }); } },{ title: lan.docker.container.stop_container, url: that.global_api, load: true, param:function(crow){ return {data:that.batch_param_convert('stop',{id:crow.id})} }, refresh: true, callback: function (thatc) { thatc.start_batch({}, function (list) { var html = '' for (var i = 0; i < list.length; i++) { var item = list[i]; html += '<tr><td>' + item.name + '</td><td><div style="float:right;"><span style="color:' + (item.request.status ? '#20a53a' : 'red') + '">' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '</span></div></td></tr>'; } dk_container_table.$batch_success_table({ title: lan.site.batch_text + lan.docker.container.stop_container, th: lan.docker.container.stop_container, html: html }); dk_container_table.$refresh_table_list(true); }); } },{ title: lan.docker.container.pause_container, url: that.global_api, load: true, param:function(crow){ return {data:that.batch_param_convert('pause',{id:crow.id})} }, refresh: true, callback: function (thatc) { thatc.start_batch({}, function (list) { var html = '' for (var i = 0; i < list.length; i++) { var item = list[i]; html += '<tr><td>' + item.name + '</td><td><div style="float:right;"><span style="color:' + (item.request.status ? '#20a53a' : 'red') + '">' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '</span></div></td></tr>'; } dk_container_table.$batch_success_table({ title: lan.site.batch_text + lan.docker.container.pause_container, th: lan.docker.container.pause_container, html: html }); dk_container_table.$refresh_table_list(true); }); } },{ title: lan.docker.container.unpause_container, url: that.global_api, load: true, param:function(crow){ return {data:that.batch_param_convert('unpause',{id:crow.id})} }, refresh: true, callback: function (thatc) { thatc.start_batch({}, function (list) { var html = '' for (var i = 0; i < list.length; i++) { var item = list[i]; html += '<tr><td>' + item.name + '</td><td><div style="float:right;"><span style="color:' + (item.request.status ? '#20a53a' : 'red') + '">' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '</span></div></td></tr>'; } dk_container_table.$batch_success_table({ title: lan.site.batch_text + lan.docker.container.unpause_container, th: lan.docker.container.unpause_container, html: html }); dk_container_table.$refresh_table_list(true); }); } },{ title: lan.docker.container.restart_container, url: that.global_api, load: true, param:function(crow){ return {data:that.batch_param_convert('restart',{id:crow.id})} }, refresh: true, callback: function (thatc) { thatc.start_batch({}, function (list) { var html = '' for (var i = 0; i < list.length; i++) { var item = list[i]; html += '<tr><td>' + item.name + '</td><td><div style="float:right;"><span style="color:' + (item.request.status ? '#20a53a' : 'red') + '">' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '</span></div></td></tr>'; } dk_container_table.$batch_success_table({ title: lan.site.batch_text + lan.docker.container.restart_container, th: lan.docker.container.restart_container, html: html }); dk_container_table.$refresh_table_list(true); }); } },{ title: lan.docker.container.reload_container, url: that.global_api, load: true, param:function(crow){ return {data:that.batch_param_convert('reload',{id:crow.id})} }, refresh: true, callback: function (thatc) { thatc.start_batch({}, function (list) { var html = '' for (var i = 0; i < list.length; i++) { var item = list[i]; html += '<tr><td>' + item.name + '</td><td><div style="float:right;"><span style="color:' + (item.request.status ? '#20a53a' : 'red') + '">' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '</span></div></td></tr>'; } dk_container_table.$batch_success_table({ title: lan.site.batch_text + lan.docker.container.reload_container, th: lan.docker.container.reload_container, html: html }); dk_container_table.$refresh_table_list(true); }); } },{ title: lan.docker.container.del_container, url: that.global_api, load: true, param:function(crow){ return {data:that.batch_param_convert('del_container',{id:crow.id})} }, refresh: true, callback: function (thatc) { bt.show_confirm(lan.site.batch_text + lan.docker.container.del_container, "<span style='color:red'>" + lan.docker.container.batch_del_container_tips + "</span>", function () { thatc.start_batch({}, function (list) { var html = '' for (var i = 0; i < list.length; i++) { var item = list[i]; html += '<tr><td>' + item.name + '</td><td><div style="float:right;"><span style="color:' + (item.request.status ? '#20a53a' : 'red') + '">' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '</span></div></td></tr>'; } dk_container_table.$batch_success_table({ title: lan.site.batch_text + lan.docker.container.del_container, th: lan.docker.container.del_container, html: html }); dk_container_table.$refresh_table_list(true); }); }); } }] }], success:function(){ $('#dk_container_table tbody td').unbind('mouseenter').mouseenter(function(e){ var _tdSPAN = $(this).find('span:first-child').not('.glyphicon') if(e.target.cellIndex == 2){ _tdSPAN.addClass('dk_status_select') }else{ _tdSPAN.removeClass('dk_status_select') $('.dk_status_select_list').remove() } }) $('#dk_container_table tbody td').unbind('mouseleave').mouseleave(function(e){ var _tdSPAN = $(this).find('span:first-child').not('.glyphicon') _tdSPAN.removeClass('dk_status_select') $('.dk_status_select_list').remove() }) } }) }, /** * @description 获取容器编排列表 */ get_compose: function () { var that = this; var _config = $.extend({},this.global,{dk_def_name:'compose_project_list'}) var dk_compose_table = bt_tools.table({ el:'#dk_compose_table', load: true, url:this.global_api, minWidth: '820px', height:750, param: {data:JSON.stringify(_config)}, dataFilter: function (res) { if(!res.msg.installed || !res.msg.service_status) that.stop_user_operation(res.msg.installed,res.msg.service_status) that.dk_template = res['msg']['template'] return { data: res['msg']['project_list'] }; }, default: lan.docker.public.no_data(lan.docker.public.compose), column:[{ type: 'checkbox', class: '', width: 20 },{ width:266, title: lan.docker.compose.project_name, template:function(row){ return '<span class="size_ellipsis" style="width:250px" title="'+row.name+'">'+row.name+'</span>' } },{ title: lan.docker.compose.container_number, template:function(row){ return '<span>'+row.container.length+'</span>' }, },{ title: lan.docker.compose.startup_time, template:function(row){ return '<span>'+bt.format_data(row.time)+'</span>' } }, { fid: 'remark', title: lan.one_click.description, type: 'input', blur: function (row, index, ev, key, thatc) { if (row.remark == ev.target.value) return false; that.ajax_task_method('edit_project_remark',{data:{project_id:row.id,remark:ev.target.value}}) }, keyup: function (row, index, ev) { if (ev.keyCode === 13) { $(this).blur(); } } },{ title: lan.public.operate, type: 'group', width: 150, align: 'right', group: [{ title: lan.docker.compose.container_list, event:function(dk_cont,index){ if(dk_cont.container.length == 0) return layer.msg(lan.docker.compose.no_container,{icon:0}); bt_tools.open({ title: '['+dk_cont.name+'] ' + lan.docker.compose.container_list, area:'1000px', content:'<div class="pd20" id="project_compose_table"></div>', success:function($layer){ var project_compose_table = bt_tools.table({ el:'#project_compose_table', url:that.global_api, param: {data:JSON.stringify(_config)}, dataFilter: function (res) { var top = ($(window).height() - $layer.height()) / 2; $layer.css({ 'top': top + 'px' }); return { data: res['msg']['project_list'][index]['container'] }; }, column:[ { fid: 'name', title: lan.docker.container.name, template:function(row){ return '<span class="size_ellipsis" style="width:120px" title="'+row.name+'">'+row.name+'</span>' } },{ title: lan.docker.container.status, width: 100, template:function(row){ var _class = '',_icon = '',text = '' switch(row.status){ case 'running': _class = 'bt_success' _icon = 'glyphicon-play' text = lan.docker.public.activated break; case 'paused': _class = 'bt_warning' _icon = 'glyphicon-pause' text = lan.docker.public.paused break; default: _class = 'bt_danger' _icon = 'glyphicon-pause' text = lan.docker.public.stopped break; } return '<a class="btlink '+_class+'">'+text+'<span class="glyphicon '+_icon+'"></span></a>' }, event:function(row){ if($('.dk_status_select_list').length == 0){ $('.dk_status_select').append('<ul class="dk_status_select_list"><li data-key="start">' + lan.docker.container.start + '</li><li data-key="stop">' + lan.docker.container.stop + '</li><li data-key="pause">' + lan.docker.container.pause + '</li><li data-key="unpause">' + lan.docker.container.unpause + '</li><li data-key="restart">' + lan.docker.container.restart + '</li><li data-key="reload">' + lan.docker.container.reload + '</li></ul>') //事件 $('.dk_status_select_list li').click(function(){ var _type = $(this).data('key') that.container_status_setting(_type,row.detail.Id,project_compose_table,'project') }) //下拉定位 var thLeft = $('#project_compose_table .divtable').scrollLeft(), //当前滚动条位置 _thSpan = $('.dk_status_select')[0] $('.dk_status_select_list').css({'left':_thSpan.offsetLeft+20-thLeft,'top':_thSpan.offsetTop+120}) } } },{ fid: 'image', width:110, title: lan.docker.container.mirror_image, template:function(row){ return '<span class="size_ellipsis" style="width:84px" title="'+row.image+'">'+row.image+'</span>' } },{ width:150, title: lan.docker.container.time, template:function(row){ return '<span>'+that.utc2beijing(row.time)+'</span>' } },{ fid:'ip', width:116, title:'IP', template:function(row){ return '<span class="size_ellipsis" style="width:100px" title="'+row.ip+'">'+row.ip+'</span>' } },{ fid:'port', width: 180, title: lan.docker.container.port, template:function(row){ var _port = [] $.each(row.ports,function(index,item){ if(item != null){ _port.push(item[0]['HostPort']+'-->'+index) } }) return '<span class="size_ellipsis" style="width:92px" title="'+_port.join()+'">'+_port.join()+'</span>' } },{ title: lan.public.operate, type: 'group', width: 180, align: 'right', group: [{ title: lan.public.terminal, event:function(row){ that.open_container_shell_view(row); } },{ title: lan.public.log, event:function(row){ that.ajax_task_method('get_logs', { data:{id:row.detail.Id}, tips: lan.docker.container.get_logs_tips, model_name: {dk_model_name:'container'} },function(res){ layer.open({ type:1, title:'['+row.name+'] ' + lan.docker.container.log, area: '700px', shadeClose: false, closeBtn: 2, btn:false, content: '<div class="setchmod bt-form" style="padding: 0">' + '<pre class="dk-container-log" style="overflow: auto; border: 0px none; line-height:23px;padding: 15px; margin: 0px; white-space: pre-wrap; height: 405px; background-color: rgb(51,51,51);color:#f1f1f1;border-radius:0px;font-family: \"微软雅黑\"">' + (res.msg == '' ? lan.docker.container.log_none : res.msg) + '</pre>' +'</div>', success:function(){ $('.dk-container-log').scrollTop(100000000000) } }) }) } },{ title: lan.docker.container.path, event:function(row){ if(row.merged == '') return layer.msg(lan.docker.container.path_not,{icon:0}) openPath(row.merged); } },{ title: lan.public.del, event:function(row){ bt.confirm({ title: lan.docker.container.del_container + ' [' + row.name + ']', msg: lan.docker.container.del_container_msg }, function () { that.ajax_task_method('del_container',{data:{id:row.detail.Id},tips:lan.docker.container.del_container_tips,model_name:{dk_model_name:'container'}},function(res){ if(res.status) project_compose_table.$refresh_table_list(true) //刷新列表 bt_tools.msg(res) }) }); } }] }], tootls:false, success:function(){ $('#project_compose_table tbody td').unbind('mouseenter').mouseenter(function(e){ var _tdSPAN = $(this).find('span:first-child').not('.glyphicon') if(e.target.cellIndex == 1){ _tdSPAN.addClass('dk_status_select') }else{ _tdSPAN.removeClass('dk_status_select') $('.dk_status_select_list').remove() } }) $('#project_compose_table tbody td').unbind('mouseleave').mouseleave(function(e){ var _tdSPAN = $(this).find('span:first-child').not('.glyphicon') _tdSPAN.removeClass('dk_status_select') $('.dk_status_select_list').remove() }) if($('#project_compose_table .tootls_group.tootls_top').length == 0){ $('#project_compose_table').prepend('<div class="tootls_group tootls_top"><div class="pull-left"><span>Compose ' + lan.public.operate + ': <span><select class="bt-input-text ml5" style="width:130px" name="set_project_status"><option value="start">' + lan.docker.container.start + ' Compose</option><option value="stop">' + lan.docker.container.stop + ' Compose</option><option value="pause">' + lan.docker.container.pause + ' Compose</option><option value="unpause">' + lan.docker.container.unpause + '</option><option value="restart">' + lan.docker.container.restart + ' Compose</option></select></div>') $('[name=set_project_status]').change(function(){ that.ajax_task_method($(this).val(),{data:{project_id:dk_cont.id},tips:$('[name=set_project_status]').find('option:selected').text()},function(res){ if(res.status) project_compose_table.$refresh_table_list(true) bt_tools.msg(res) }) }) } } }); } }) } },{ title: lan.public.del, event:function(row){ bt.confirm({ title: lan.docker.compose.del_compose + ' [' + row.name + ']', msg: lan.docker.compose.del_compose_tips }, function () { that.ajax_task_method('remove', { data: { project_id: row.id }, tips: lan.docker.compose.deleting_compose }, function(res){ if (res.status) that.initTabConfig('compose') // 刷新列表 bt_tools.msg(res); }) }); } }] }], tootls:[{ type: 'group', positon: ['left', 'top'], list: [{ title: lan.docker.compose.add_btn, active: true, event: function () { that.add_project(); } }] },{ // 批量操作 type: 'batch', //batch_btn positon: ['left', 'bottom'], placeholder: lan.public.please_choose, buttonValue: lan.public.exec, disabledSelectValue: lan.docker.compose.batch_select_tips, selectList: [{ title: lan.public.del + " compose", url: that.global_api, load: true, param:function(crow){ return {data:that.batch_param_convert('remove',{project_id:crow.id})} }, refresh: true, callback: function (thatc) { bt.show_confirm(lan.docker.compose.batch_del_compose, "<span style='color:red'>" + lan.docker.compose.batch_del_tips + "</span>", function () { thatc.start_batch({}, function (list) { var html = '' for (var i = 0; i < list.length; i++) { var item = list[i]; html += '<tr><td>' + item.name + '</td><td><div style="float:right;"><span style="color:' + (item.request.status ? '#20a53a' : 'red') + '">' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '</span></div></td></tr>'; } dk_compose_table.$batch_success_table({ title: lan.docker.compose.batch_del_compose, th: 'compose', html: html }); dk_compose_table.$refresh_table_list(true); }); }); } }] }] }) }, /** * @description 获取compose模板列表 */ get_model:function(){ var that = this; var _config = $.extend({},this.global,{dk_def_name:'template_list'}) var dk_model_table = bt_tools.table({ el:'#dk_model_table', load: true, url:this.global_api, minWidth: '980px', height:750, param: {data:JSON.stringify(_config)}, dataFilter: function (res) { if(!res.msg.installed || !res.msg.service_status) that.stop_user_operation(res.msg.installed,res.msg.service_status) return { data: res['msg']['template'] }; }, default: lan.docker.public.no_data(lan.docker.public.compose_template), column:[{ type: 'checkbox', class: '', width: 20 }, { fid: 'name', width: 266, title: lan.docker.compose_template.template_name, template:function(row){ return '<span class="size_ellipsis" style="width:250px" title="'+row.name+'">'+row.name+'</span>' } }, { width: 266, title: lan.site.path, template:function(row){ return '<a class="btlink size_ellipsis" style="width:250px" title="'+row.path+'">'+row.path+'</a>' }, event: function (row) { openEditorView(0,row.path) } }, { fid: 'remark', title: lan.one_click.description, type: 'input', blur: function (row, index, ev, key, thatc) { if (row.remark == ev.target.value) return false; that.ajax_task_method('edit_template_remark',{data:{templates_id:row.id,remark:ev.target.value}}) }, keyup: function (row, index, ev) { if (ev.keyCode === 13) { $(this).blur(); } } }, { title: lan.public.operate, type: 'group', width: 200, align: 'right', group: [{ title: lan.public.edit, event:function(row){ that.ajax_task_method('get_template', { data: { id: row.id }, tips: lan.docker.compose_template.getting_template }, function (res) { if (res.status) { that.edit_model_view($.extend({content:res['msg']},row)) } }); } },{ title: lan.docker.compose_template.pull_mirror_image, event:function(row){ that.get_log_situation() that.ajax_task_method('pull',{data:{template_id:row.id},tips:false},function(res){ that.remove_log_clearinterval(); bt_tools.msg(res); }) } },{ title: lan.public.del, event:function(row){ bt.confirm({ title: lan.docker.compose_template.del_template + ' [' + row.name + ']', msg: lan.docker.compose_template.del_template_tips }, function () { that.ajax_task_method('remove_template',{ data: { template_id: row.id }, tips: lan.docker.compose_template.del_template },function(res){ bt_tools.msg(res); that.initTabConfig('model') //刷新列表 }) }); } }] }], tootls:[{ type: 'group', positon: ['left', 'top'], list: [{ title: lan.public.add, active: true, event: function (ev) { that.add_model_view(); } }] },{ // 批量操作 type: 'batch', //batch_btn positon: ['left', 'bottom'], placeholder: lan.public.please_choose, buttonValue: lan.public.exec, disabledSelectValue: lan.docker.compose_template.batch_select_tips, selectList: [ { title: lan.docker.compose_template.del_template, url: that.global_api, load: true, param:function(crow){ return {data:that.batch_param_convert('remove_template',{template_id:crow.id})} }, refresh: true, callback: function (thatc) { bt.show_confirm(lan.docker.compose_template.batch_del_template, "<span style='color:red'>" + lan.docker.compose_template.batch_del_tips + "</span>", function () { thatc.start_batch({}, function (list) { var html = '' for (var i = 0; i < list.length; i++) { var item = list[i]; html += '<tr><td>' + item.name + '</td><td><div style="float:right;"><span style="color:' + (item.request.status ? '#20a53a' : 'red') + '">' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '</span></div></td></tr>'; } dk_model_table.$batch_success_table({ title: lan.docker.compose_template.batch_del_template, th: lan.docker.compose_template.template_name, html: html }); dk_model_table.$refresh_table_list(true); }); }); } } ] }] }) }, /** * @description 获取网络列表 */ get_network:function(){ var that = this; var _config = $.extend({},this.global,{dk_def_name:'get_host_network'}) var dk_network_table = bt_tools.table({ el:'#dk_network_table', load: true, url:this.global_api, param: {data:JSON.stringify(_config)}, height:750, dataFilter: function (res) { if(!res.msg.installed || !res.msg.service_status) that.stop_user_operation(res.msg.installed,res.msg.service_status) return { data: res['msg']['network'] }; }, default: lan.docker.public.no_data(lan.docker.public.network), column:[{ type: 'checkbox', class: '', width: 20 }, { width:266, title: lan.docker.network.name, template:function(row){ return '<span class="size_ellipsis" style="width:250px" title="'+row.name+'">'+row.name+'</span>' } }, {fid:'driver',title: lan.docker.network.show}, {fid:'subnet',title: lan.docker.network.num}, {fid:'gateway',title: lan.docker.network.gateway}, { width:226, title: lan.docker.container.tag, template:function(row){ var _label = [] if(!$.isEmptyObject(row.labels)){ $.each(row.labels,function(index,item){ _label.push(index+'-'+item) }) } return '<span class="size_ellipsis" style="width:210px">'+_label.join() +'</span>' } }, { width:150, title: lan.docker.image.creation_time, template:function(row){ return '<span>'+that.utc2beijing(row.time)+'</span>' } }, { title: lan.public.operate, type: 'group', width: 60, align: 'right', group: [{ title: lan.public.del, event:function(row){ bt.confirm({ title: lan.docker.network.del(row.name), msg: lan.docker.network.del_tips }, function () { that.ajax_task_method('del_network', { data: { id: row.id }, tips: lan.docker.network.deleting },function(res){ if(res.status) that.initTabConfig('network') //刷新列表 bt_tools.msg(res); }) }); } }] }], tootls:[{ type: 'group', positon: ['left', 'top'], list: [{ title: lan.docker.network.add, active: true, event: function (ev) { that.add_network(); } }] },{ // 批量操作 type: 'batch', //batch_btn positon: ['left', 'bottom'], placeholder: lan.public.please_choose, buttonValue: lan.public.exec, disabledSelectValue: lan.docker.public.batch_select_tips(lan.docker.public.network), selectList: [{ title: lan.docker.network.del(), url: that.global_api, load: true, param:function(crow){ return {data:that.batch_param_convert('del_network',{id:crow.id})} }, refresh: true, callback: function (thatc) { bt.show_confirm(lan.docker.public.batch_del(lan.docker.public.network), "<span style='color:red'>" + lan.docker.public.batch_del_tips(lan.docker.public.network) + "</span>", function () { thatc.start_batch({}, function (list) { var html = '' for (var i = 0; i < list.length; i++) { var item = list[i]; html += '<tr><td>' + item.name + '</td><td><div style="float:right;"><span style="color:' + (item.request.status ? '#20a53a' : 'red') + '">' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '</span></div></td></tr>'; } dk_network_table.$batch_success_table({ title: lan.docker.public.batch_del(lan.docker.public.network), th: lan.docker.network.name, html: html }); dk_network_table.$refresh_table_list(true); }); }); } }] }] }) }, /** * @description 获取存储卷列表 */ get_volume:function(){ var that = this; var _config = $.extend({},this.global,{dk_def_name:'get_volume_list'}) var dk_volume_table = bt_tools.table({ el:'#dk_volume_table', load: true, url:this.global_api, minWidth: '1020px', height:750, param: {data:JSON.stringify(_config)}, dataFilter: function (res) { if(!res.msg.installed || !res.msg.service_status) that.stop_user_operation(res.msg.installed,res.msg.service_status) return { data: res['msg']['volume'] }; }, default: lan.docker.public.no_data(lan.docker.public.volume), column:[{ type: 'checkbox', class: '', width: 20 }, {fid:'Name',width:216,title: lan.docker.public.volume,template:function(row){ return '<span class="size_ellipsis" style="width:200px" title="'+row.Name+'">'+row.Name+'</span>' }}, { type: 'link', title: lan.docker.volume.mount, template:function(row){ return '<a class="btlink size_ellipsis" style="width:250px" title="'+row.Mountpoint+'">'+row.Mountpoint+'</a>' }, event: function (row) { openPath(row.Mountpoint); } }, { fid:'container', title: lan.docker.public.container }, {fid: 'Driver',title: lan.docker.volume.driver}, { fid:'CreatedAt', width:150, title: lan.docker.public.creation_time, template:function(row){ return '<span>'+that.utc2beijing(row.CreatedAt)+'</span>' } }, { width:206, title: lan.docker.public.tag, template:function(row){ var _label = [] if(!$.isEmptyObject(row.Labels)){ $.each(row.Labels,function(index,item){ _label.push(index+'-'+item) }) } return '<span class="size_ellipsis" style="width:190px">'+_label.join() +'</span>' } }, { title: lan.public.operate, type: 'group', width: 60, align: 'right', group: [{ title: lan.public.del, event:function(row){ bt.confirm({ title: lan.docker.volume.del(row.Name), msg: lan.docker.public.del_tips(lan.docker.public.volume) }, function () { that.ajax_task_method('remove',{data:{name:row.Name},tips:lan.docker.volume.deleting},function(res){ if(res.status)that.initTabConfig('volume') //刷新列表 bt_tools.msg(res); }) }); } }] }], tootls:[{ type: 'group', positon: ['left', 'top'], list: [{ title: lan.docker.volume.add, active: true, event: function (ev) { that.add_volume(); } }] },{ // 批量操作 type: 'batch', //batch_btn positon: ['left', 'bottom'], placeholder: lan.public.please_choose, buttonValue: lan.public.exec, disabledSelectValue: lan.docker.public.batch_select_tips(lan.docker.public.volume), selectList: [{ title: lan.docker.volume.del(), url: that.global_api, load: true, param:function(crow){ return {data:that.batch_param_convert('remove',{name:crow.Name})} }, refresh: true, callback: function (thatc) { bt.show_confirm(lan.docker.public.batch_del(lan.docker.public.volume), "<span style='color:red'>" + lan.docker.public.batch_del_tips(lan.docker.public.volume) + "</span>", function () { thatc.start_batch({}, function (list) { var html = '' for (var i = 0; i < list.length; i++) { var item = list[i]; html += '<tr><td>' + item.name + '</td><td><div style="float:right;"><span style="color:' + (item.request.status ? '#20a53a' : 'red') + '">' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '</span></div></td></tr>'; } dk_volume_table.$batch_success_table({ title: lan.docker.public.batch_del(lan.docker.public.volume), th: lan.docker.volume.name, html: html }); dk_volume_table.$refresh_table_list(true); }); }); } }] }] }) }, /** * @description 获取仓库列表 */ get_registry:function(){ var that = this; var _config = $.extend({},this.global,{dk_def_name:'registry_list'}) var dk_registry_table = bt_tools.table({ el:'#dk_registry_table', load: true, url:this.global_api, height:750, param: {data:JSON.stringify(_config)}, dataFilter: function (res) { if(!res.msg.installed || !res.msg.service_status) that.stop_user_operation(res.msg.installed,res.msg.service_status) return { data: res['msg']['registry'] }; }, default: lan.docker.public.no_data(lan.docker.public.repository), column:[{ type: 'checkbox', class: '', width: 20 }, {width:266,title: 'URL',template:function(row){ return '<span class="size_ellipsis" style="width:250px">'+row.url+'</span>' }}, {fid: 'username',title: lan.docker.repository.username }, {fid: 'name',title: lan.docker.repository.name }, { fid: 'remark', title: lan.one_click.description, type: 'input', blur: function (row, index, ev, key, thatc) { if (row.remark == ev.target.value) return false; row['remark'] = ev.target.value row['registry'] = row.url that.ajax_task_method('edit',{data:row}) }, keyup: function (row, index, ev) { if (ev.keyCode === 13) { $(this).blur(); } } }, { title: lan.public.operate, type: 'group', width: 100, align: 'right', group: [{ title: lan.public.edit, event:function(row){ that.render_registry_view(row); } },{ title: lan.public.del, event:function(row){ bt.confirm({ title: lan.docker.repository.del(row.name), msg: lan.docker.public.del_tips(lan.docker.public.repository) }, function () { that.ajax_task_method('remove',{data:{id:row.id},tips: lan.docker.repository.deleting},function(res){ bt_tools.msg(res); that.initTabConfig('registry') //刷新列表 }) }); } }] }], tootls:[{ type: 'group', positon: ['left', 'top'], list: [{ title: lan.docker.repository.add, active: true, event: function (ev) { that.render_registry_view(); } }] },{ // 批量操作 type: 'batch', //batch_btn positon: ['left', 'bottom'], placeholder: lan.public.please_choose, buttonValue: lan.public.exec, disabledSelectValue: lan.docker.public.batch_select_tips(lan.docker.public.repository), selectList: [{ title: lan.docker.repository.del(), url: that.global_api, load: true, param:function(crow){ return {data:that.batch_param_convert('remove',{id:crow.id})} }, refresh: true, callback: function (thatc) { bt.show_confirm(lan.docker.public.batch_del(lan.docker.public.repository), "<span style='color:red'>" + lan.docker.public.batch_del_tips(lan.docker.public.repository) + "</span>", function () { thatc.start_batch({}, function (list) { var html = '' for (var i = 0; i < list.length; i++) { var item = list[i]; html += '<tr><td>' + item.name + '</td><td><div style="float:right;"><span style="color:' + (item.request.status ? '#20a53a' : 'red') + '">' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '</span></div></td></tr>'; } dk_registry_table.$batch_success_table({ title: lan.docker.public.batch_del(lan.docker.public.repository), th: lan.docker.repository.name, html: html }); dk_registry_table.$refresh_table_list(true); }); }); } }] }] }) }, /** * @description 获取镜像列表 */ get_image:function(){ var that = this; var _config = $.extend({},this.global,{dk_def_name:'image_list'}) var dk_image_table = bt_tools.table({ el:'#dk_image_table', load: true, url:this.global_api, minWidth: '1020px', height:750, param: {data:JSON.stringify(_config)}, dataFilter: function (res) { if(!res.msg.installed || !res.msg.service_status) that.stop_user_operation(res.msg.installed,res.msg.service_status) that.dk_registry = res['msg']['registry_list'] return { data: res['msg']['images_list'] }; }, default: lan.docker.public.no_data(lan.docker.public.mirror_image), column:[{ type: 'checkbox', class: '', width: 20 }, { width:200, title: 'ID', template:function(row){ return '<span class="size_ellipsis" style="width:184px" title="'+row.id+'">'+row.id+'</span>' } }, { fid: 'name', title: lan.docker.image.name }, { width:86, title: lan.database.size, template: function (row) { return '<span>'+bt.format_size(row.size)+'</span>' } }, { width:150, title: lan.docker.image.creation_time, template:function(row){ return '<span>'+that.utc2beijing(row.time)+'</span>' } }, { title: lan.public.operate, type: 'group', width: 140, align: 'right', group: [{ title: lan.docker.image.push, event:function(row){ var _registry = [] if(that.dk_registry.length > 0){ $.each(that.dk_registry,function(index,item){ _registry.push({title:item.name+'['+item.url+'/'+item.namespace+']',value:item.name}) }) }else{ _registry = [{title: lan.docker.image.push_tips1,value:'dk_registry_false'}] } bt_tools.open({ type: 1, title: lan.docker.image.push_title1 + ' [' + row.name + '] ' + lan.docker.image.push_title2, area: '580px', btn: [lan.public.submit, lan.site.no], content: { 'class': "pd20", form: [{ label: lan.docker.image.warehouse_name, group: { name:'name', type:'select', width: "400px", list:_registry } },{ label: lan.docker.container.tag, group: { name: "tag", type: "text", value: '', width: "400px", placeholder: lan.docker.image.tag_input } }] }, yes: function (formD,indexs) { if (formD.name === 'dk_registry_false') return bt_tools.msg(lan.docker.image.push_tips2, 2) if (formD.tag === '') return bt_tools.msg(lan.docker.image.push_tips3, 2) formD['id'] = row.id that.get_log_situation() that.ajax_task_method('push',{data:formD,tips:false},function(res){ that.remove_log_clearinterval(); if(res.status){ layer.closeAll(); that.initTabConfig('image') //刷新列表 } bt_tools.msg(res) }) } }) } },{ title: lan.docker.image.export, event:function(row){ bt_tools.open({ type: 1, title: lan.docker.image.export_title(row.name), area: '480px', btn: [lan.docker.image.export, lan.site.no], content: { 'class': "pd20", form: [{ label: lan.site.path, group: { name: "path", type: "text", value: '', width: "240px", placeholder: lan.docker.image.path_input, icon: { type: 'glyphicon-folder-open', event:function(){} } } },{ label: lan.files.file_name, group: { name: "name", type: "text", value: '', width: "240px", placeholder: lan.docker.image.file_input, unit:'.tar' } }] }, yes: function (formD,indexs) { if (formD.path === '') return bt_tools.msg(lan.docker.image.export_tips1, 2) if (formD.name === '') return bt_tools.msg(lan.docker.image.export_tips, 2) formD['id'] = row.id that.ajax_task_method('save', { data: formD, tips: lan.docker.image.exporting }, function(res){ if(res.status){ layer.close(indexs); that.initTabConfig('image') //刷新列表 } bt_tools.msg(res) }) } }) } },{ title: lan.public.del, event:function(row){ bt.confirm({ title: lan.docker.image.del(row.name), msg: lan.docker.image.del_tips }, function () { that.ajax_task_method('remove', { data: { id: row.id, force: 0, name: row.name }, tips: lan.docker.image.deleting }, function (res) { if (res.status) that.initTabConfig('image') //刷新列表 bt_tools.msg(res); }) }); } }] }], tootls:[{ type: 'group', positon: ['left', 'top'], list: [{ title: lan.docker.image.btn1, active: true, event:function(ev){ var _registry = [] if(that.dk_registry.length > 0){ $.each(that.dk_registry,function(index,item){ _registry.push({title:item.name+'['+item.url+'/'+item.namespace+']',value:item.name}) }) }else{ _registry = [{title:lan.docker.image.warehouse_select,value:'dk_registry_false'}] } bt_tools.open({ type: 1, title: lan.docker.image.pull_title, area: '580px', btn: [lan.public.submit, lan.site.no], content: { 'class': "pd20", form: [{ label: lan.docker.image.warehouse_name, group: { name:'name', type:'select', width: "400px", list:_registry } },{ label: lan.docker.image.mirror_name, group: { name: "image", type: "text", value: '', width: "400px", placeholder: lan.docker.image.mirror_input } }] }, yes: function (formD, indexs) { if (formD.name === 'dk_registry_false') return bt_tools.msg(lan.docker.image.pull_tips1, 2) if (formD.image === '') return bt_tools.msg(lan.docker.image.pull_tips2, 2) that.get_log_situation() that.ajax_task_method('pull_from_some_registry',{data:formD,tips:false},function(res){ that.remove_log_clearinterval() if(res.status){ layer.close(indexs); that.initTabConfig('image') //刷新列表 } bt_tools.msg(res) }) } }) } },{ title: lan.docker.image.btn2, event:function(ev){ bt_tools.open({ type: 1, title: lan.docker.image.btn2, area: '460px', btn: [lan.docker.image.import, lan.site.no], content: { 'class': "pd20", form: [{ label: lan.site.path, group: { name: "path", type: "text", value: '', width: "240px", placeholder: lan.docker.image.path_input, icon: { type: 'glyphicon-folder-open', select:'file', event:function(){} } } }] }, yes: function (formD, indexs) { if (formD.path === '') return bt_tools.msg(lan.docker.image.export_tips1, 2); that.ajax_task_method('load',{data:formD,tips: lan.docker.image.importing},function(res){ if(res.status){ layer.close(indexs); that.initTabConfig('image') //刷新列表 } bt_tools.msg(res) }) } }) } },{ title: lan.docker.image.btn3, event: function () { that.construction_image(); } }] },{ // 批量操作 type: 'batch', //batch_btn positon: ['left', 'bottom'], placeholder: lan.public.please_choose, buttonValue: lan.public.exec, disabledSelectValue: lan.docker.image.batch_tips, selectList: [{ title: lan.docker.image.del(), url: that.global_api, load: true, param:function(crow){ return {data:that.batch_param_convert('remove',{id:crow.id,force:0,name:crow.name})} }, refresh: true, callback: function (thatc) { bt.show_confirm(lan.docker.image.batch_del, "<span style='color:red'>" + lan.docker.image.batch_del_tips + "</span>", function () { thatc.start_batch({}, function (list) { var html = '' for (var i = 0; i < list.length; i++) { var item = list[i]; html += '<tr><td>' + item.name + '</td><td><div style="float:right;"><span style="color:' + (item.request.status ? '#20a53a' : 'red') + '">' + (item.request.status ? lan.public.setup_success : lan.public.setup_fail) + '</span></div></td></tr>'; } dk_image_table.$batch_success_table({ title: lan.docker.image.batch_del, th: lan.docker.image.name, html: html }); dk_image_table.$refresh_table_list(true); }); }); } }] }] }) }, /** * @description 获取设置页面 */ get_setup:function(){ var _html = '',that = this; this.ajax_task_method('get_config',{},function(res){ var info = res.msg; var status_info = info.service_status ? ['Enable', '#20a53a', 'play'] : ['Stopped', 'red', 'pause']; _html = '<div class="bt-form">\ <div class="line">\ <span class="tname">Docker server: </span>\ <div class="info-r"><div style="height: 33px;line-height: 33px;display: inline-block;">Current status: <span>' + status_info[0] + '</span><span style="color:' + status_info[1] + '; margin-left: 3px;" class="glyphicon glyphicon glyphicon-' + status_info[2] + '"></span></div><div style="display: inline-block;margin-left: 49px;">\ <button class="btn btn-default btn-sm serveSetup" data-setup="'+(info.service_status?'stop':'start')+'">'+(info.service_status?'Stop':'Start up')+'</button>\ <button class="btn btn-default btn-sm serveSetup" data-setup="restart">Restart</button>\ </div></div>\ </div>\ <div class="line">\ <span class="tname">Container monitor: </span>\ <div class="info-r">\ <div class="inlineBlock mr50" style="margin-top: 5px;vertical-align: -6px;">\ <input class="btswitch btswitch-ios" id="monitor_status" type="checkbox" name="monitor">\ <label class="btswitch-btn" for="monitor_status" style="margin-bottom: 0;"></label>\ </div>\ <span class="unit">* Set the container page monitoring switch. After this switch is turned off, the CPU usage will not be monitored.</span>\ </div>\ </div>\ <div class="line">\ <span class="tname">Save days: </span>\ <div class="info-r">\ <input class="bt-input-text" type="number" name="monitor_save_day" value="'+info.monitor_save_date+'" style="width:310px" placeholder="Monitoring Save days">\ <button class="btn btn-success btn-sm mr10 monitorSubmit">Save</button>\ <span class="unit">* Set the container page monitoring savory days</span>\ </div>\ </div>\ <div class="line">\ <span class="tname">Registry mirrors: </span>\ <div class="info-r">\ <input class="bt-input-text" readonly disabled value="'+info.registry_mirrors+'" style="width:310px" placeholder="Unprocessed acceleration URL">\ <button class="btn btn-success btn-sm editSpeed">Modify</button>\ </div>\ </div>\ </div>' $('#dk_setup_form').html(_html) $('#monitor_status').prop('checked',info.monitor_status) //监控状态 //服务按钮 $('.serveSetup').click(function(){ var _set = $(this).data('setup'); that.ajax_task_method('docker_service',{data:{act:_set},tips:'Set the docker service status'},function(ress){ if(ress.status) that.initTabConfig('setup') bt_tools.msg(ress) }) }) //容器监控开关 $("#monitor_status").change(function(){ var _status = $(this).prop('checked'); that.ajax_task_method('set_docker_monitor',{data:{act:_status?'start':'stop'},tips:'Set container monitoring configuration'},function(res){ if(res.status) that.initTabConfig('setup') bt_tools.msg(res) }) }) //容器监控天数 $('.monitorSubmit').click(function(){ var save_num = $('[name=monitor_save_day]').val(); if(save_num <= 0)return layer.msg('The number of monitoring and preservation cannot be less than 0',{icon:2}) that.ajax_task_method('set_monitor_save_date',{data:{save_date:save_num},tips:'Set container monitoring configuration'},function(res){ if(res.status) that.initTabConfig('setup') bt_tools.msg(res) }) }) //设置加速url $('.editSpeed').click(function(){ bt_tools.open({ title:'Set the acceleration URL', type:1, shadeClose: false, closeBtn: 2, area:'520px', content:{ 'class':'pd20', form:[{ label:'Accelerate URL', group:{ type:'text', name:'registry_mirrors_address', value:info.registry_mirrors, width:'360px', placeholder:'Please enter the acceleration URL' } },{ label:'', group:{ type:'help', style:{'margin-top':'0'}, list:[ 'Priority use the acceleration URL to perform operations, and the request timeout will skip the use of the default acceleration method', 'After setting acceleration, you need to restart the docker manually', 'Turn off acceleration, please set it to empty' ] } }] },yes:function(formD,index){ that.ajax_task_method('set_registry_mirrors',{data:formD,tips:false},function(uRes){ if(uRes.status){ layer.close(index) that.initTabConfig('setup') } bt_tools.msg(uRes) }) } }) }) }) }, /** * @description 添加容器 */ add_container:function(){ var that = this, _imageList = '', _volumesList = '', add_pro = null; if (this.dk_images.length > 0) { $.each(this.dk_images, function (index, item) { _imageList += '<option value="' + item.name + '">' + item.name + '</option>' }) } if (this.dk_volumes.length > 0) { $.each(this.dk_volumes, function (index, item) { _volumesList +='<li data-key="' + item.Name + '" title="' + item.Name + '">' + item.Name + '</li>' }) } layer.open({ type: 1, closeBtn: 2, title: lan.docker.container.add_container, area: ['720px','630px'], skin: 'add_container', btn: [lan.public.submit, lan.site.no], shadeClose: false, content: '\ <div class="pd20">\ <div class="tab-nav mb15">\ <span class="on">' + lan.docker.container.create_container + '</span>\ <span>' + lan.docker.container.container_arr + '</span>\ </div>\ <div class="tabs_content">\ <div class="tabpanel">\ <div class="bt-form" style="height: 450px;overflow: overlay;">\ <div class="line"><span class="tname">' + lan.docker.public.container + '</span>\ <div class="info-r">\ <input class="bt-input-text" name="dk_container_name" style="width: 200px" placeholder="' + lan.docker.container.container_input_tips + '">\ <span class="line-tname">' + lan.docker.container.mirror_image + '</span>\ <select class="bt-input-text" name="dk_image" style="width: 160px">'+_imageList+'</select>\ </div>\ </div>\ <div class="line">\ <span class="tname">' + lan.public.port + '</span>\ <div class="info-r">\ <select class="bt-input-text" name="dk_port" style="width: 200px">\ <option value="0">' + lan.docker.container.port_select1 + '</option>\ <option value="1">' + lan.docker.container.port_select2 + '</option>\ </select>\ <div class="mt10 dk_port_setting">\ <input class="bt-input-text" name="dk_port_map" style="width:200px" placeholder="' + lan.docker.container.container_port + '">\ <span class="minus">-</span>\ <input class="bt-input-text" name="dk_server_map" style="width:200px" placeholder="' + lan.docker.container.server_port + '">\ <span class="plus" data-type="port">+</span>\ <div class="divtable dk_port_table mt10">\ <table class="table table-hover">\ <thead>\ <tr>\ <th>' + lan.docker.container.container_port + '</th>\ <th>' + lan.docker.container.server_port + '</th>\ <th width="70" class="text-right">' + lan.public.operate + '</th>\ </tr>\ </thead>\ <tbody>\ <tr><td colspan="3" class="text-center">' + lan.site.data_empty + '</td></tr>\ </tbody>\ </table>\ </div>\ </div>\ </div>\ </div>\ <div class="line">\ <span class="tname">' + lan.docker.container.boot_command + '</span>\ <div class="info-r">\ <input class="bt-input-text" name="dk_start_cmd" style="width:482px" placeholder="' + lan.docker.container.boot_command_input_tips + '">\ </div>\ </div>\ <div class="line">\ <span class="tname"></span>\ <div class="info-r" style="min-height: auto; height: auto; line-height: 1.4;">\ <span class="shop_container_del cu-pointer">\ <i class="cust—checkbox form-checkbox" style="position: relative; top: -2px; margin-right: 5px;"></i>\ <span>' + lan.docker.container.shop_container_del + '</span>\ <input type="checkbox" class="hide">\ </span>\ </div>\ </div>\ <div class="line">\ <span class="tname">' + lan.docker.container.limit_cpu + '</span>\ <div class="info-r">\ <input class="bt-input-text" value="1.0" type="number" name="dk_cpu_num" style="width:200px;border-top-right-radius: 0;border-bottom-right-radius: 0;">\ <span class="line-tname">' + lan.index.process_mem + '</span>\ <input class="bt-input-text" value="100" type="number" name="dk_cpu_size" style="width:124px">\ <select class="bt-input-text" name="dk_cpu_unit" style="width:60px">\ <option value="k">KB</option>\ <option value="MB" selected>MB</option>\ <option value="g">GB</option>\ </select>\ </div>\ </div>\ <div class="line">\ <span class="tname">' + lan.docker.container.mount_volume + '</span>\ <div class="info-r">\ <div class="">\ <div class="dk_volumes_box">\ <input class="bt-input-text" name="dk_server_path" style="width: 175px" placeholder="' + lan.docker.container.server_directory + '">\ <ul class="dk_volumes">' + _volumesList + '</ul>\ <select class="bt-input-text" name="volumes_type" style="width: 100px">\ <option value="rw">' + lan.index.process_disk + '</option>\ <option value="ro">' + lan.docker.container.read_only + '</option>\ </select>\ <input class="bt-input-text" name="dk_volumes_path" style="width:170px" placeholder="' + lan.docker.container.container_directory + '">\ <span class="plus" data-type="path">+</span>\ <div class="divtable dk_path_table mt10">\ <table class="table table-hover">\ <thead>\ <tr>\ <th>' + lan.docker.container.server_directory + '</th>\ <th>' + lan.public.permission + '</th>\ <th>' + lan.docker.container.container_directory + '</th>\ <th width="70" class="text-right">' + lan.public.operate + '</th>\ </tr>\ </thead>\ <tbody>\ <tr><td colspan="4" class="text-center">' + lan.site.data_empty + '</td></tr>\ </tbody>\ </table>\ </div>\ </div>\ </div>\ </div>\ </div>\ <div class="line">\ <span class="tname">' + lan.docker.container.tag + '</span>\ <div class="info-r">\ <textarea placeholder="' + lan.docker.container.tag_textarea_tips + '" name="dk_tag" class="bt-input-text" style="width: 482px; height: 80px; resize: auto; line-height: 20px;"></textarea>\ </div>\ </div>\ <div class="line">\ <span class="tname" style="height: auto;line-height: 20px;">' + lan.docker.container.env_variable + '</br>' + lan.docker.container.one_line + '</span>\ <div class="info-r">\ <textarea placeholder="' + lan.docker.container.env_variable_textarea_tips + 'java_home =/usr/local/java8 HOSTNAME=master" class="bt-input-text" name="dk_config" style="width: 482px; height: 80px; resize: auto; line-height: 20px;"></textarea>\ </div>\ </div>\ <div class="line">\ <span class="tname">' + lan.docker.container.restart_rule + '</span>\ <div class="info-r">\ <select class="bt-input-text" name="dk_reset" style="width:200px">\ <option value="always">' + lan.docker.container.restart_rule_select1 + '</option>\ <option value="on-failure">' + lan.docker.container.restart_rule_select2 + '</option>\ <option value="" selected>' + lan.docker.container.restart_rule_select3 + '</option>\ </select>\ <span class="c9 ml5">*' + lan.docker.container.restart_rule_select_tips + '</span>\ </div>\ </div>\ </div>\ </div>\ <div class="tabpanel" style="display:none;">\ <div id="add_project_form"></div>\ </div>\ </div>\ </div>', success:function(){ $(".add_container").on('click', '.tab-nav span', function () { var index = $(this).index(); $(this).addClass('on').siblings().removeClass('on'); $('.tabs_content .tabpanel').eq(index).removeAttr('style').siblings().attr('style','display:none') }); // <----------容器-----------> //服务器目录事件 $('[name=dk_server_path]').click(function(e){ var _ul = $(this).siblings('ul') if (_ul.hasClass('show')) { _ul.removeClass('show') } else { _ul.addClass('show') } $(document).one('click',function(){ _ul.removeClass('show'); }) e.stopPropagation(); }) // 服务器目录ul $('.dk_volumes li').click(function(){ $('[name=dk_server_path]').val($(this).data('key')) }) // 端口类型触发 $('[name=dk_port]').change(function(){ $(this).val() == 1 ? $('.dk_port_setting').hide() : $('.dk_port_setting').show(); }) //添加端口、目录tbody $('.plus').click(function(){ var _Arrinput = $(this).siblings('input'), _val_one = $(_Arrinput[0]).val(), _val_two = $(_Arrinput[1]).val(), THbody = $(this).siblings('.divtable').find('tbody'), _td = ''; if (_val_one == '') return layer.msg(lan.docker.public.please_enter + $(_Arrinput[0]).attr('placeholder'),{icon:2}) if (_val_two == '') return layer.msg(lan.docker.public.please_enter + $(_Arrinput[1]).attr('placeholder'),{icon:2}) switch($(this).data('type')){ case 'port': _td = '\ <tr>\ <td>' + _val_one + '</td>\ <td>' + _val_two + '</td>\ <td><a class="btlink pull-right del-change-td">' + lan.public.del + '</a></td>\ </tr>' break; case 'path': var pess_type = $('[name=volumes_type]').val(); _td = '\ <tr>\ <td>\ <span style="display: flex;">\ <span class="size_ellipsis" style="flex: 1; width: 0;" title="' + _val_one + '">' + _val_one + '</span>\ </span>\ </td>\ <td>' + pess_type + '</td>\ <td>\ <span style="display: flex;">\ <span class="size_ellipsis" style="flex: 1; width: 0;" title="'+_val_two+'">'+_val_two+'</span>\ </span>\ </td>\ <td><a class="btlink pull-right del-change-td">' + lan.public.del + '</a></td>\ </tr>' break; } if (THbody.find('td').length === 1) { $(THbody).html(_td) } else { $(THbody).append(_td) } //清空输入框内容 $(_Arrinput[0]).val('') $(_Arrinput[1]).val('') }) // 端口、目录删除 $('.add_container').on('click','.del-change-td',function(){ var tbody = $(this).parents('tbody') $(this).parents('tr').remove() if (tbody.find('tr').length == 0) { tbody.append('<tr><td colspan="4" class="text-center">' + lan.site.data_empty + '</td></tr>'); } }) // 停止后自动删除容器事件 $('.add_container .shop_container_del').click(function(){ if ($(this).find('i').hasClass('active')) { $(this).find('i').removeClass('active').siblings('input').prop('checked',false) } else { $(this).find('i').addClass('active').siblings('input').prop('checked',true) } }); // <-----------------容器编排-------------------> var modelList = [] render_model_list() add_pro = bt_tools.form({ el:'#add_project_form', form: [ { label: lan.docker.public.compose_template, group:[ { type: 'select', name: 'template_id', width: '440px', list: modelList }, { type: 'link', title: lan.public_backup.create, event: function () { that.add_model_view(function(resolve){ if(resolve){ that.ajax_task_method('template_list', { tips: lan.docker.compose_template.getting_template, model_name: { dk_model_name: 'compose' } }, function (model_list) { that.dk_template = model_list['msg']['template'] render_model_list() add_pro['config']['form'][0]['group'][0]['list'] = modelList; // 模板列表 add_pro.$local_refresh("template_id", add_pro['config']['form'][0]['group'][0]) // 刷新局部数据 }) } }) } } ] }, { label: lan.public.name, group: { type: 'text', name: 'project_name', width: '440px', placeholder: lan.docker.compose.name_input_tips } }, { label: lan.one_click.description, group: { type: 'textarea', name: 'remark', style: { 'width': '440px', 'min-width': '380px', 'min-height': '130px', 'line-height': '22px', 'padding-top': '5px', 'resize': 'both' }, placeholder: lan.docker.compose.description_input_tips } } ] }) function render_model_list () { if (that.dk_template.length > 0) { $.each(that.dk_template,function(index,item){ modelList.push({title:item.name,value:item.id}) }) } else { modelList = [ { value:'dk_project_false', title: lan.docker.compose.compose_template_select_tips } ] } } }, yes: function (indexs) { // 创建容器 if ($('.add_container .tab-nav span.on').index() == 0) { var _name = $('[name=dk_container_name]').val(), _image = $('[name=dk_image]').val(), _port = $('[name=dk_port]').val(), _start_cmd = $('[name=dk_start_cmd]').val(), auto_remove = $('.form-checkbox').siblings('input').prop('checked')?1:0, _cpus = $('[name=dk_cpu_num]').val(), _size = $('[name=dk_cpu_size]').val(), _unit = $('[name=dk_cpu_unit]').val(), _tag = $('[name=dk_tag]').val(), _config = $('[name=dk_config]').val(), _reset = $('[name=dk_reset]').val(); // 验证 if (_name == '') return layer.msg(lan.docker.container.add_container_tips1, { icon: 2 }); if (_image == '') return layer.msg(lan.docker.container.add_container_tips2, { icon: 2 }); if (_cpus != '' && _cpus <= 0)return layer.msg(lan.docker.container.add_container_tips3, { icon: 2 }) if (_size != '' && _size <= 0)return layer.msg(lan.docker.container.add_container_tips4, { icon: 2 }) var _form = { name: _name, image:_image, publish_all_ports:_port, command:_start_cmd, auto_remove:auto_remove, environment:_config, cpuset_cpus:_cpus, mem_limit:_size+_unit, labels:_tag, restart_policy:{Name:_reset,MaximumRetryCount:5} } var port_array = {},path_array = {} // 端口 if ($('.dk_port_table tbody tr').length > 0) { $.each($('.dk_port_table tbody tr'), function(index, item) { if ($(item).find('td').length == 3) { port_array[$(item).find('td').eq(0).text()+'/tcp'] = $(item).find('td').eq(1).text(); } }); _form['ports'] = port_array; } // 路径 if ($('.dk_path_table tbody tr').length > 0) { $.each($('.dk_path_table tbody tr'),function(index,item){ if ($(item).find('td').length == 4) { path_array[$(item).find('td').eq(0).find('.size_ellipsis').text()] = { bind: $(item).find('td').eq(2).find('.size_ellipsis').text(), mode: $(item).find('td').eq(1).text() } } }) _form['volumes'] = path_array } //接口参数 that.ajax_task_method('run', { data: $.extend(_form,that.global), tips: lan.docker.container.add_container_api_tips }, function (res) { if (res.status) { layer.close(indexs); that.initTabConfig('container'); // 刷新列表 } bt_tools.msg(res); }) } else { var formValue = add_pro.$get_form_value() if (formValue.template_id === 'dk_project_false') return bt_tools.msg(lan.docker.compose.add_compose_tips1, 2) if (formValue.project_name == '') return layer.msg(lan.docker.compose.add_compose_tips2, { icon: 2 }) that.get_log_situation(); that.ajax_task_method('create', { data: formValue, tips: false, model_name: { dk_model_name: 'compose' } }, function (res) { that.remove_log_clearinterval(); if (res.status) { layer.closeAll(); $('#cutMode .tabs-item').eq(2).click() // 跳转到容器编排 } bt_tools.msg(res) }); } } }) }, /** * @description 添加Compose */ add_project:function(){ var that = this,add_pro = null bt_tools.open({ title: lan.docker.compose.add_btn, btn: [lan.public.submit, lan.site.no], area: ['560px', '380px'], content: '<div class="pd20 add_project_form" id="add_project_form"></div>', success: function () { var modelList = [] render_model_list() add_pro = bt_tools.form({ el:'#add_project_form', form: [{ label: lan.docker.public.compose_template, group:[ { type: 'select', name:'template_id', width:'300px', list:modelList }, { type:'link', title: lan.public_backup.create, event:function(){ that.add_model_view(function(resolve){ if (resolve) { that.ajax_task_method('template_list', { tips: lan.docker.compose_template.getting_template, model_name: { dk_model_name: 'compose' } }, function (model_list) { that.dk_template = model_list['msg']['template'] render_model_list() add_pro['config']['form'][0]['group'][0]['list'] = modelList; // 模板列表 add_pro.$local_refresh("template_id", add_pro['config']['form'][0]['group'][0]) // 刷新局部数据 }) } }) } } ] },{ label: lan.public.name, group: { type: 'text', name: 'project_name', width: '300px', placeholder: lan.docker.compose.name_input_tips } },{ label: lan.one_click.description, group: { type: 'textarea', name: 'remark', style: { 'width': '300px', 'min-width': '300px', 'min-height': '130px', 'line-height': '22px', 'padding-top': '5px', 'resize': 'both' }, placeholder: lan.docker.compose.description_input_tips } }] }) function render_model_list () { if (that.dk_template.length > 0) { $.each(that.dk_template, function(index, item) { modelList.push({ title: item.name, value: item.id }); }); }else{ modelList = [ { value:'dk_project_false', title: lan.docker.compose.compose_template_select_tips } ] } } }, yes:function(indexs){ var formValue = add_pro.$get_form_value() if (formValue.template_id === 'dk_project_false') return bt_tools.msg(lan.docker.compose.add_compose_tips1, 2) if(formValue.project_name == '')return layer.msg(lan.docker.compose.add_compose_tips2,{icon:2}) that.get_log_situation() that.ajax_task_method('create',{data:formValue,tips:false},function(res){ that.remove_log_clearinterval(); if(res.status){ layer.closeAll(); that.initTabConfig('compose') //刷新列表 } bt_tools.msg(res) }) } }) }, /** * @description 添加Compose模板 */ add_model_view:function(callback){ var that = this,loca_compose = null,search_list = [] var model_tabl = bt_tools.tab({ class:'pd20', type:0, active:1, theme: { nav: 'yaml' }, list:[{ title: lan.docker.compose_template.add_title, name:"addCompose", content: '<div class="bt-form">\ <div class="line">\ <span class="tname">' + lan.docker.compose_template.create_template + '</span>\ <div class="info-r">\ <input class="bt-input-text" name="model_name" style="width:350px" placeholder="' + lan.docker.compose_template.create_template_input + '">\ </div>\ </div>\ <div class="line">\ <span class="tname">' + lan.one_click.remark + '</span>\ <div class="info-r">\ <input class="bt-input-text" name="model_desc" style="width:350px" placeholder="' + lan.one_click.remark + '">\ </div>\ </div>\ <div class="line">\ <span class="tname">' + lan.docker.compose_template.content + '</span>\ <div class="info-r">\ <div class="bt-input-text" style="width:470px;height: 350px;min-height:300px;line-height:18px;" id="dkContntBody"></div>\ </div>\ </div>\ </div>', success:function(){ _aceEditor = bt.aceEditor({ el: 'dkContntBody', content: '' }); } },{ title: lan.docker.compose_template.search_local_template, name:'searchCompose', content:'\ <div class="bt-form ptb15 loca_compose_box">\ <div class="model_sc_top">\ <input class="bt-input-text" style="width:515px;padding-right: 95px;" id="model_sc_path" placeholder="' + lan.docker.compose_template.search_input_tips + '">\ <div class="model_sc_child">\ <i class="cust—checkbox form-checkbox"></i>\ <input type="checkbox" class="hide">\ </div>\ <i class="glyphicon glyphicon-folder-open ml5 mr20 cu-pointer" onclick="bt.select_path(\'model_sc_path\',\'dir\')"></i>\ <button type="button" class="btn btn-success btn-sm model_search_btn">' + lan.docker.compose_template.search + '</button>\ </div>\ <div id="model_sc_table"></div>\ </div>', success:function(){ var one = 0; loca_compose = bt_tools.table({ el:'#model_sc_table', data:search_list, height: '330px', column:[{ type: 'checkbox', class: '', width: 20 },{ width:180, title: lan.docker.compose_template.compose_template_name, template:function(row){ return '<span class="size_ellipsis" style="width:164px" title="'+row.project_name+'">'+row.project_name+'</span>' } },{ width:180, title: lan.docker.container.path, template:function(row){ return '<span class="size_ellipsis" style="width:164px" title="'+row.conf_file+'">'+row.conf_file+'</span>' } },{ fid: 'remark', title: lan.one_click.description, type: 'input', blur: function (row, index, ev, key, thatc) { row.remark = ev.target.value }, keyup: function (row, index, ev) { if (ev.keyCode === 13) { $(this).blur(); } } }], success:function(){ if(one == 0){ one++ $('#model_sc_table').on('click', '.cust—checkbox', function (e) { var len = loca_compose.checkbox_list $('.lc_select').html(len.length+'个') }) $('.loca_compose_box').append('\ <ul class="help-info-text red">\ <li>' + lan.docker.compose_template.add_search_tips1 + ' [' + lan.docker.compose_template.selected + ': <span class="lc_select">0</span>]</li>\ </ul>'); } } }) //停止后自动删除容器事件 $('.model_sc_child').click(function(){ if($(this).find('i').hasClass('active')){ $(this).find('i').removeClass('active').siblings('input').prop('checked',false) }else{ $(this).find('i').addClass('active').siblings('input').prop('checked',true) } }) // 模板搜索按钮 $('.model_search_btn').click(function(){ var _val = $('#model_sc_path').val(), _child = $('.form-checkbox').siblings('input').prop('checked')?1:0 if(_val == '') return bt_tools.msg(lan.docker.compose_template.search_folder_tips1, 2) that.ajax_task_method('get_compose_project',{ data: { path: _val, sub_dir: _child }, tips: lan.docker.compose.getting_compose, model_name:{ dk_model_name: 'compose' } }, function (mlist) { if(mlist.status == false)return bt_tools.msg(mlist.msg,2) if(mlist.length == 0)return bt_tools.msg(lan.docker.compose_template.search_folder_tips2, 0) loca_compose.$reader_content(mlist) }) }) } }] }) bt_tools.open({ title: lan.docker.compose_template.add_yaml_template, btn: [lan.public.submit, lan.site.no], skin:'model_sc_view', area: ['680px', '640px'], content:model_tabl.$reader_content(), success:function(){ model_tabl.$init(); }, yes:function(layers){ if (model_tabl.active == 0) { var _mName = $('[name=model_name]').val(), _mDesc = $('[name=model_desc]').val(), _Con = _aceEditor.ACE.getValue(); if (_mName == '') return layer.msg(lan.docker.compose_template.add_template_tips1,{icon:2}) if (_Con == '') return layer.msg(lan.docker.compose_template.add_template_tips2,{icon:2}) var _param = {name:_mName,remark:_mDesc,data:_Con} that.ajax_task_method('add_template', { data: _param, tips: lan.docker.compose_template.adding_template, model_name: { dk_model_name: 'compose' } }, function (res) { if (res.status) { layer.close(layers) if (callback) { callback(res.status) } else { that.initTabConfig('model') //刷新列表 } } var entry = { "'": "'", '"': '"', '<': '<', '>': '>' }; res.msg = res.msg.replace(/(['")-><&\\\/\.])/g, function ($0) { return entry[$0] || $0; }); bt_tools.msg(res) }) } else { var check_len = loca_compose.checkbox_list.length, array = [] $.each(loca_compose.data,function(index,item){ if ($.inArray(index,loca_compose.checkbox_list) != -1) { array.push(item); } }) if(check_len == 0) return layer.msg(lan.docker.compose_template.add_path_tips1,{icon:2}) layer.confirm(lan.docker.compose_template.add_path_tips2 + check_len + lan.docker.compose_template.add_path_tips3, { title: lan.docker.compose_template.add_template, icon: 3, closeBtn: 2 }, function () { that.ajax_task_method('add_template_in_path',{ data: { template_list: array }, tips: lan.docker.compose_template.adding_template, model_name: { dk_model_name: 'compose' } }, function (res) { if(res.status){ layer.close(layers) if (callback) { callback(res.status) }else{ that.initTabConfig('model') // 刷新列表 } } bt_tools.msg(res) }) }); } } }) }, /** * @description 模板添加、编辑界面 * @param {Object} edit 编辑数据 * @param callback 成功后回调 */ edit_model_view:function(edit){ var that = this,_aceEditor = null; layer.open({ type: 1, title: 'Edit template', btn: [lan.public.save, lan.site.no], area:'650px', shadeClose: false, closeBtn: 2, content: '<div class="pd20 bt-form">\ <div class="line"><span class="tname">' + lan.docker.compose_template.template_name + '</span>\ <div class="info-r">\ <input class="bt-input-text" name="model_name" style="width:350px" placeholder="' + lan.docker.compose_template.create_template_input + '" value="'+edit.name+'">\ </div>\ </div>\ <div class="line"><span class="tname">' + lan.one_click.description + '</span>\ <div class="info-r">\ <input class="bt-input-text" name="model_desc" style="width:350px" placeholder="' + lan.one_click.description + '" value="'+edit.remark+'">\ </div>\ </div>\ <div class="line"><span class="tname">' + lan.docker.compose_template.content + '</span>\ <div class="info-r">\ <div class="bt-input-text" style="width:470px;height: 350px;min-height:300px;line-height:18px;" id="dkContntBody"></div>\ </div>\ </div>\ </div>', success:function(){ _aceEditor = bt.aceEditor({ el: 'dkContntBody', content: edit.content }); }, yes:function(layers){ var _mName = $('[name=model_name]').val(), _mDesc = $('[name=model_desc]').val(), _Con = _aceEditor.ACE.getValue(); if(_mName == '') return layer.msg(lan.docker.compose_template.add_template_tips1,{icon:2}) if(_mDesc == '') return layer.msg(lan.docker.compose.description_input_tips,{icon:2}) if(_Con == '') return layer.msg(lan.docker.compose_template.add_template_tips2,{icon:2}) var _param = {name:_mName,remark:_mDesc,data:_Con} if(edit) _param['id'] = edit.id that.ajax_task_method('edit_template',{data:_param,tips: lan.docker.compose_template.saving,model_name:{dk_model_name:'compose'}},function(res){ if(res.status){ layer.close(layers) that.initTabConfig('model') //刷新列表 } bt_tools.msg(res) }) } }) }, /** * @description 添加网络 */ add_network:function(){ var that = this,add_network = null bt_tools.open({ title: lan.docker.network.add, btn: [lan.public.submit, lan.site.no], area: ['540px','510px'], content: '<div class="ptb20" id="add_network_form"></div>', success: function (layers) { add_network = bt_tools.form({ el:'#add_network_form', form: [{ label: lan.docker.network.name, group: { type: 'text', name: 'name', width: '384px', placeholder: lan.docker.network.name_input } },{ label: lan.docker.network.device, group:{ type: 'select', name:'driver', width:'160px', list:[ {title:'bridge',value:'bridge'}, {title:'ipvlan',value:'ipvlan'}, {title:'macvlan',value:'macvlan'}, {title:'overlay',value:'overlay'} ] } },{ label: lan.docker.network.parameter, group: { type: 'textarea', name: 'options', style: { 'width': '384px', 'min-width': '384px', 'min-height': '70px', 'line-height': '22px', 'padding-top': '5px', 'resize': 'both' }, placeholder: lan.docker.network.parameter_textarea } },{ label: lan.docker.network.sub_network, group:[{ type: 'text', name: 'subnet', width: '160px', placeholder: lan.docker.network.sub_network_input },{ label: lan.docker.network.gateway, type: 'text', name: 'gateway', width: '160px', placeholder: lan.docker.network.gateway_input }] },{ label: lan.docker.network.ip_range, group: { type: 'text', name: 'iprange', width: '384px', placeholder: lan.docker.network.ip_range_input } },{ label: lan.docker.container.tag, group: { type: 'textarea', name: 'labels', style: { 'width': '384px', 'min-width': '384px', 'min-height': '70px', 'line-height': '22px', 'padding-top': '5px', 'resize': 'both' }, placeholder: lan.docker.network.tag_textarea } }] }) }, yes:function(layers){ var formValue = add_network.$get_form_value() if(formValue.name == '')return layer.msg(lan.docker.network.add_tips1,{icon:2}) if(formValue.options == '')return layer.msg(lan.docker.network.add_tips2,{icon:2}) if(formValue.subnet == '')return layer.msg(lan.docker.network.add_tips3,{icon:2}) if(formValue.gateway == '')return layer.msg(lan.docker.network.add_tips4,{icon:2}) if(formValue.iprange == '')return layer.msg(lan.docker.network.add_tips5,{icon:2}) that.ajax_task_method('add',{data:formValue,tips:lan.docker.network.adding},function(res){ if(res.status){ layer.close(layers) that.initTabConfig('network') //刷新列表 } bt_tools.msg(res) }) } }) }, /** * @description 添加存储卷 */ add_volume:function(){ var that = this,add_volume = null bt_tools.open({ title: lan.docker.volume.add, btn: [lan.public.submit, lan.site.no], area:['540px','420px'], content: '<div class="ptb20" id="add_volume_form"></div>', success: function (layers) { add_volume = bt_tools.form({ el:'#add_volume_form', form: [{ label: lan.docker.public.volume, group: { type: 'text', name: 'name', width: '358px', placeholder: lan.docker.volume.name_input } },{ label: lan.docker.volume.driver, group:{ type: 'select', name:'driver', width:'160px', list:[ {title:'local',value:'local'} ] } },{ label: lan.docker.volume.option, group: { type: 'textarea', name: 'driver_opts', style: { 'width': '358px', 'min-width': '358px', 'min-height': '70px', 'line-height': '22px', 'padding-top': '5px', 'resize': 'both' }, placeholder: lan.docker.volume.option } },{ label: lan.docker.public.tag, group: { type: 'textarea', name: 'labels', style: { 'width': '358px', 'min-width': '358px', 'min-height': '70px', 'line-height': '22px', 'padding-top': '5px', 'resize': 'both' }, placeholder: lan.docker.volume.tag_textarea } }] }) }, yes:function(indexs){ var formValue = add_volume.$get_form_value() if(formValue.name == '')return layer.msg(lan.docker.volume.add_tips1,{icon:2}) that.ajax_task_method('add',{data:formValue,tips:lan.docker.volume.adding},function(res){ if(res.status){ layer.close(indexs); that.initTabConfig('volume') //刷新列表 } bt_tools.msg(res) }) } }) }, /** * @description 仓库添加、编辑界面 * @param {Object} edit 编辑数据 */ render_registry_view:function(edit){ var that = this,add_registry = null,is_edit = false if(edit){ edit['registry'] = edit['url'] is_edit = true } bt_tools.open({ title: (is_edit ? lan.public.edit : lan.public.add) + ' ' + lan.docker.public.repository.toLowerCase(), btn: [is_edit ? lan.site.save: lan.public.submit, lan.site.no], area:['580px','420px'], content: '<div class="ptb20 add_registry_form" id="add_registry_form"></div>', success: function (layers) { add_registry = bt_tools.form({ el:'#add_registry_form', form: [{ label: lan.docker.repository.address, group: { type: 'text', name: 'registry', width: '340px', placeholder: lan.docker.repository.address_input } },{ label: lan.docker.repository.name, group: { type: 'text', name: 'name', width: '340px', placeholder: lan.docker.repository.name_input } },{ label: lan.docker.repository.username, group:[{ type: 'text', name: 'username', width: '340px', placeholder: lan.docker.repository.user_input }] }, { label: lan.docker.repository.pwd, group: [ { type: 'text', name: 'password', width: '340px', placeholder: lan.docker.repository.pwd_input } ] }, { label: lan.docker.repository.namespaces, group: [{ type: 'text', name: 'namespace', width: '340px', placeholder: lan.docker.repository.namespaces_input },{ type:'link', title: '?', class:'bt-ico-ask', event:function(){ window.open('https://www.bt.cn/bbs/thread-80965-1-1.html') } }] },{ label: lan.one_click.description, group: { type: 'text', name: 'remark', width: '340px', placeholder: lan.docker.compose.description_input_tips } }], data:edit?edit:{} }) }, yes:function(indexs){ var formValue = add_registry.$get_form_value() if(formValue.registry == '')return layer.msg(lan.docker.repository.form_tips1,{icon:2}) if(formValue.name == '')return layer.msg(lan.docker.repository.form_tips2,{icon:2}) if(formValue.username == '')return layer.msg(lan.docker.repository.form_tips3,{icon:2}) if(formValue.password == '')return layer.msg(lan.docker.repository.form_tips4,{icon:2}) if(formValue.namespace == '')return layer.msg(lan.docker.repository.form_tips5,{icon:2}) if(edit) formValue['id'] = edit['id'] that.ajax_task_method(is_edit?'edit':'add',{data:formValue,tips:(edit? lan.public.save : lan.public.add) + ' ' + lan.docker.public.repository.toLowerCase()},function(res){ if(res.status){ layer.close(indexs); that.initTabConfig('registry') //刷新列表 } bt_tools.msg(res) }) } }) }, /** * @description 构建镜像 */ construction_image:function(){ var that = this,_aceEditor = null; layer.open({ type: 1, title: lan.docker.image.build_title, btn: [lan.public.submit, lan.site.no], area:'580px', content: '<div class="bt-form pd20 constr_image">\ <div class="line"><span class="tname">Dockerfile</span>\ <div class="info-r">\ <select class="bt-input-text" name="dockerfile_type" style="width:100px">\ <option value="0">' + lan.site.path + '</option>\ <option value="1">' + lan.docker.compose_template.content + '</option>\ </select>\ <div class="df_type" style="display: inline-block;">\ <input class="bt-input-text" name="df_path" style="width:288px" id="df_path" placeholder="' + lan.docker.image.dockerfile_input + '">\ <i class="glyphicon glyphicon-folder-open ml5 cu-pointer" onclick="bt.select_path(\'df_path\',\'file\')"></i>\ </div>\ <div class="df_type" style="display:none">\ <div class="bt-input-text" style="margin-top:7px; width:393px;height: 230px;min-height:200px;line-height:18px;" id="dkFileBody"></div>\ </div>\ </div>\ </div>\ <div class="line"><span class="tname">' + lan.docker.container.tag + '</span>\ <div class="info-r">\ <textarea placeholder="' + lan.docker.container.tag_textarea_tips + '" name="dk_tag" class="bt-input-text" style="width: 393px; height: 70px; resize: auto; line-height: 20px;"></textarea>\ </div>\ </div>\ </div>', success:function(){ _aceEditor = bt.aceEditor({ el: 'dkFileBody', content:'' }); $('[name=dockerfile_type]').change(function(){ switch($(this).val()){ case '0': $('.constr_image .df_type:eq(0)').show(); $('.constr_image .df_type:eq(1)').hide(); $('[name=df_path]').val(''); break; case '1': $('.constr_image .df_type:eq(1)').show(); $('.constr_image .df_type:eq(0)').hide(); _aceEditor.ACE.setValue('') break; } }) }, yes:function(layers){ var _mType = $('[name=dockerfile_type]').val(), _mDesc = $('[name=dk_tag]').val(), _Con = _aceEditor.ACE.getValue(), param = {tag:_mDesc} if(_mType == '0'){ param['path'] = $('[name=df_path]').val() }else{ param['data'] = _Con } that.get_log_situation() that.ajax_task_method('build',{data:param,tips:false},function(res){ that.remove_log_clearinterval(); if(res.status){ layer.closeAll() that.initTabConfig('model') //刷新列表 } bt_tools.msg(res) }) } }) }, /** * @description 容器监控【获取并整理实时数据,刷新图表】 * @param {Object} row 容器信息 */ transform_cont_chart_data:function(row){ var that = this,_time = new Date().getTime(); this.ajax_task_method('stats',{data:{id:row.id},tips:false,model_name:{dk_model_name:'status'}},function(res){ var _data = res.msg; if(!res.status){ that.remove_cont_chart_data(); bt_tools.msg(res); return false } //基础信息 $('.cont_chart_basis').eq(0).find('span').html(bt.format_size(_data.limit)) $('.cont_chart_basis').eq(1).find('span').html(lan.index.net_up + ': ' + bt.format_size(_data.tx_total)+' - '+ lan.index.net_down + ': '+bt.format_size(_data.rx_total)) that.cont_chart.time_list.push(_time) that.cont_chart.mem_list['usage'].push([_time, bt.format_size(_data.usage,false,null,'MB')]) that.cont_chart.mem_list['cache'].push([_time,bt.format_size(_data.cache,false,null,'MB')]) that.cont_chart.cpu_list.push([_time,_data.cpu_usage]) that.cont_chart.disk_list['read'].push([_time, bt.format_size(_data.read_total,false,null,'MB')]) that.cont_chart.disk_list['write'].push([_time, bt.format_size(_data.write_total,false,null,'MB')]) that.cont_chart.network_list['tx'].push([_time, bt.format_size(_data.tx,false,null,'KB')]) that.cont_chart.network_list['rx'].push([_time, bt.format_size(_data.rx,false,null,'KB')]) // console.log(that.cont_chart_id.cpu.getOption()); //实时更新图表数据 that.cont_chart_id.cpu.setOption({ series:[ { name: 'CPU', data: that.cont_chart.cpu_list } ], xAxis:that.cont_chart.time_list }) that.cont_chart_id.mem.setOption({ series: [ { name: lan.pythonmamager.mem, data: that.cont_chart.mem_list['usage'] }, { name: lan.site.cache, data: that.cont_chart.mem_list['cache'] } ] }) that.cont_chart_id.disk.setOption({ series: [ { name: lan.files.file_read, data: that.cont_chart.disk_list['read'] }, { name: lan.files.file_write, data: that.cont_chart.disk_list['write'] } ] }) that.cont_chart_id.network.setOption({ series: [ { name: lan.index.net_up, data: that.cont_chart.network_list['tx'] }, { name: lan.index.net_down, data: that.cont_chart.network_list['rx'] } ] }) }) }, /** * @description 容器监控【图表配置处理】 * @param {String} type 图表类型【CPU/内存/磁盘/网络】 * @return 返回处理好的图表配置 */ transform_cont_chart_option:function(type){ var _unit = '/MB' var _option = this.get_default_option(); switch(type){ case 'cpu': _option.tooltip.formatter = function (config) { var data = config[0]; return bt.format_data(data.data[0]) + '<br>' + data.seriesName + ': ' + data.data[1] + '%'; }; _option.yAxis.min = 0; _option.series = [ { name: 'CPU', type: 'line', symbol: 'none', smooth: true, itemStyle: { normal: { color: 'rgb(0, 153, 238)' } } } ] break; case 'network': _unit = '/KB' case 'mem': case 'disk': var third = { mem:[lan.pythonmamager.mem, lan.site.cache], disk:[lan.files.file_read, lan.files.file_write], network:[lan.index.net_up, lan.index.net_down], color:[ { mem:['rgb(185, 220, 253)','rgb(185, 220, 253,0.6)','rgb(185, 220, 253,0.3)','rgba(229,147,187)','rgba(229,147,187,0.6)','rgba(229,147,187,0.3)'], disk:['rgb(255, 70, 131)','rgb(255, 70, 131,0.6)','rgb(255, 70, 131,0.3)','rgba(46, 165, 186)','rgba(46, 165, 186,0.6)','rgba(46, 165, 186,0.3)'], network:['rgb(255, 140, 0)','rgb(255, 140, 0,0.6)','rgb(255, 140, 0,0.3)','rgb(30, 144, 255)','rgb(30, 144, 255,0.6)','rgb(30, 144, 255,0.3)'] } ] } _option.tooltip.formatter = function (config) { var data = config[0]; var time = data.data[0]; var date = bt.format_data(time / 1000); var _tips = ''; var _style = '<span style="display: inline-block; width: 10px; height: 10px; margin-rigth:10px; border-radius: 50%; background: '; for (var i = 0; i < config.length; i++) { _tips += _style + config[i].color + ';"></span> ' + config[i].seriesName + ':' _tips += config[i].data[1] + _unit + (config.length - 1 !== i ? '<br />' : ''); } return "时间:" + date + "<br />" + _tips; }; _option.legend = { top: '18px', data: third[type] }; _option.series = [ { name: third[type][0], type: 'line', symbol: 'none', itemStyle: { normal: { color: third['color'][0][type][0], areaStyle: { color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{ offset: 0, color: third['color'][0][type][1] }, { offset: 1, color: third['color'][0][type][2] }]) } } } }, { name: third[type][1], type: 'line', symbol: 'none', itemStyle: { normal: { color: third['color'][0][type][4], areaStyle: { color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [{ offset: 0, color: third['color'][0][type][4] }, { offset: 1, color: third['color'][0][type][5] }]) } } } } ]; break; } return _option }, /** * @description 渲染容器监控图表 * @param {Object} row 容器信息 */ render_cont_chart:function(row){ var that = this; this.cont_chart_id.cpu = echarts.init(document.getElementById('cont_cpu')) this.cont_chart_id.mem = echarts.init(document.getElementById('cont_mem')) this.cont_chart_id.disk = echarts.init(document.getElementById('cont_disk')) this.cont_chart_id.network = echarts.init(document.getElementById('cont_network')) $.each(['cpu','mem','disk','network'],function(index,item){ that.cont_chart_id[item].setOption(that.transform_cont_chart_option(item)) }) this.transform_cont_chart_data(row) //默认加载数据 }, /** * @description 获取默认图表配置 * @return 返回默认图表配置 */ get_default_option:function(){ return { tooltip: { trigger: 'axis', axisPointer: { type: 'cross' } }, grid: { x: 50, //左 y: 50, //上 x2: 30,//右 y2: 30 //下 }, xAxis: { type: 'time', scale:true, splitNumber:4, boundaryGap: true, axisLine: { lineStyle: { color: "#666" } }, axisLabel: { // interval:0, formatter: function (value) { return bt.format_data(value / 1000, 'hh:mm:ss'); } }, }, yAxis: { type: 'value', boundaryGap: [0, '100%'], splitLine: { lineStyle: { color: "#ddd" } }, axisLine: { lineStyle: { color: "#666" } } } } }, /** * @description 容器详情配置 * @param {Object} row 容器信息 */ open_container_config:function(obj){ var that = this; layer.open({ type:1, title:'Container ['+obj.name+']', area:['780px','720px'], shadeClose: false, closeBtn: 2, btn:false, content:'<div class="bt-tabs" style="height:100%">\ <div class="bt-w-menu cn_menu pull-left" style="height:100%">\ <p class="bgw" data-type="config">Container configuration</p>\ <p data-type="create_image">Generate mirror image</p>\ </div>\ <div id="container_box" class="bt-w-con pd15"></div>\ </div>', success:function(){ that.set_cont_config(obj); // 菜单事件 $('.cn_menu p').click(function () { $('#container_box').html('').removeAttr('style'); $(this).addClass('bgw').siblings().removeClass('bgw'); that['set_cont_'+$(this).data('type')](obj); }) } }) }, /** * @description 容器终端 * @param {Object} row 容器信息 */ open_container_shell_view:function(row){ var that = this; web_shell(); var shell = setInterval(function(){ if($('.term-box').length == 0){ pdata_socket['data'] = 'exit\n' socket.emit('webssh',pdata_socket); setTimeout(function(){socket.emit('webssh',pdata_socket['data']);},1000); clearInterval(shell); } },500); setTimeout(function(){ that.ajax_task_method('docker_shell', { data: { container_id: row.id }, tips: lan.docker.container.execute_container_command, model_name: { dk_model_name: 'container' } }, function (res) { if (res.status) { pdata_socket['data'] = 'clear && ' + res.msg +'\n' socket.emit('webssh',pdata_socket); setTimeout(function(){ socket.emit('webssh',pdata_socket['data']); }, 1000); }else{ bt_tools.msg(res) } }) }); }, /** * @description 容器配置 * @param {Object} row 容器信息 */ set_cont_config:function(row){ $('#container_box').css({'padding-right':'25px','overflow':'overlay'}); var wrapper = document.getElementById("container_box") jsonTree.create(row.detail,wrapper) }, /** * @description 容器生成镜像 【可导出文件】 * @param {Object} row 容器信息 */ set_cont_create_image:function(row){ var that = this; bt_tools.form({ el:'#container_box', form:[{ label:'Mirror name', group:{ name:'repository', type: 'text', placeholder: 'Please enter the mirror name', width:'350px' } },{ label:'Tag', group:{ name:'tag', type: 'text', placeholder: 'Please enter the tag', width:'350px' } },{ label:'Submit description', group:{ name:'message', type: 'text', placeholder: 'Description before submission', width:'350px' } },{ label:'Author', group:{ name:'author', type: 'text', placeholder: 'Please enter the author', width:'350px' } },{ label: '', group: [{ type: 'button', size: '', name: 'cont_caimage_btn', title: 'Generate mirror image', event: function (formData) { if( formData.repository == '' || formData.tag == '' || formData.message == '' || formData.author == '' ){ return layer.msg('Please fill in the generated mirror information first',{icon:2}) } formData['id'] = row.id submitImage(formData) } },{ type: 'button', size: '', name: 'cont_caimage_export_btn', style: { 'display': 'block', 'margin-top': '15px' }, title: 'Export the compressed package after the image is generated', event: function (formData) { if( formData.repository == '' || formData.tag == '' || formData.message == '' || formData.author == '' ){ return layer.msg('Please fill in the generated mirror information first',{icon:2}) } bt_tools.open({ type: 1, title: 'Export ['+row.name+'] mirror image', area: '430px', btn: ['Export', lan.site.no], content: { 'class': "pd20", form: [{ label: "Path", group: { name: "path", type: "text", value: '', width: "240px", placeholder:'Please enter the mirror path', icon: { type: 'glyphicon-folder-open', event:function(){} } } },{ label: "File name", group: { name: "name", type: "text", value: formData.repository, width: "240px", disabled:true, placeholder:'Please enter the exposed file name', unit:'.tar' } }] }, yes: function (formD,indexs) { if (formD.path === '') return bt_tools.msg('The path cannot be empty!', 2) if (formD.name === '') return bt_tools.msg('Export file name cannot be empty!', 2) formData['id'] = row.id formData['path'] = formD.path formData['name'] = formD.name submitImage(formData,indexs) } }) } }] }] }) // 生成镜像 --导出文件 function submitImage(form,closeView){ that.ajax_task_method('commit',{data:form,tips:'Generate mirror image'},function(res){ if(res.status){ if(closeView) layer.close(closeView) } bt_tools.msg(res) }) } }, /** * @description 容器状态设置 * @param {String} type 设置状态 * @param {String} id 容器id * @param {Object} table 需要重新渲染的表格 */ container_status_setting:function(type,id,table,is_compose){ var config = {id:id}, tips = {start:'Start up',stop:'Stop',pause:'Pause',unpause:'Unpause',restart:'Restart',reload:'Reload'}, param = {tips:tips[type]+' container'} if(is_compose){ param['model_name'] = {dk_model_name:'container'} } param['data'] = config; this.ajax_task_method(type,param,function(res){ if(res.status){ table.$refresh_table_list(true) //刷新列表 } layer.msg(res.msg,{icon:res.status?1:2}) }) }, /** * @description 获取日志窗口状态 */ get_log_situation:function(){ var that = this; that.log_layer_open = layer.open({ title: lan.docker.public.execution, type: 1, closeBtn: false, maxmin: true, skin: 'dockertmp', area: ["730px", '450px'], content:"<pre style='width:100%;margin-bottom: 0px;height:100%;border-radius:0px; text-align: left;background-color: #000;color: #fff;white-space: pre-wrap;' id='dockertmp_pre'></pre>", success:function(){ that.log_file_setInterval = setInterval(function(){that.get_log_speed()},1500) } }) }, /** * @description 获取日志进度 */ get_log_speed:function(){ this.ajax_task_method('get_logs',{data:{logs_file:'/tmp/dockertmp.log'},tips:false,model_name:{dk_model_name:"image"}},function(ires){ $("#dockertmp_pre").text(ires.msg); $('#dockertmp_pre').animate({ scrollTop: $('#dockertmp_pre').prop("scrollHeight") }, 400); }) }, /** * @description 删除容器监控数据和图表dom */ remove_cont_chart_data:function(){ clearInterval(this.cont_setInterval) this.cont_chart = { cpu_list:[], mem_list:{ usage:[], cache:[] }, disk_list:{ read:[], write:[] }, network_list:{ tx:[], rx:[] }, time_list:[] } this.cont_chart_id = { cpu:null, mem:null, disk:null, network:null } }, //删除日志定时器 remove_log_clearinterval:function(){ layer.close(layer.index) //最新的弹层 clearInterval(this.log_file_setInterval) }, /** * @description 停止用户操作 * @param {Boolean} is_install 是否docker安装 * @param {Boolean} is_service 是否启动docker */ stop_user_operation:function(is_install,is_service){ var that = this; var tips = 'Docker service is not currently started. Please enable it in <a class="btlink setting_docker">Docker Settings</a>'; if(!is_install) tips = 'Currently not installed docker or docker-compose, <a class="btlink install_docker">click install</a>' $('.mask_layer').removeAttr('style'); $('.prompt_description').html(tips) //安装docker $('.install_docker').click(function(){ that.ajax_task_method('install_docker_program',{model_name:{dk_model_name:'setup'}},function(res){ bt_tools.msg(res) messagebox() }) }); $('.setting_docker').click(function () { $('.tab-list .tabs-item[data-type="setup"]').click() }) }, /** * @description docker请求方式转换 * @param {String} action 请求方法 * @param {Object} param data填写请求所需参数,tips填写请求时展示文字 * @param {any} callback 数据回调 */ ajax_task_method:function(action,param,callback){ var _config = $.extend({},param['data'] || {},this.global,{dk_def_name:action},param['model_name'] || {}) bt_tools.send({ url:this.global_api+'?action='+_config.dk_model_name+'-'+_config.dk_def_name+'', data:{data:JSON.stringify(_config)} },function(res){ if(callback)callback(res) },{load:param['tips'],verify: false}) }, /** * @description docker批量操作参数处理 * @param {String} action 请求方法 * @param {Object} param 请求所需参数 * @return 返回JSON格式参数 */ batch_param_convert:function(action,param){ return JSON.stringify($.extend({},this.global,{dk_def_name:action},param || {})) }, /** * @description UTC时间转换 * @param {Object} utc_datetime utc时间 * @return 返回处理后的时间 */ utc2beijing:function(utc_datetime) { // 转为正常的时间格式 年-月-日 时:分:秒 var T_pos = utc_datetime.indexOf('T'); var Z_pos = utc_datetime.indexOf('Z'); var year_month_day = utc_datetime.substr(0,T_pos); var hour_minute_second = utc_datetime.substr(T_pos+1,Z_pos-T_pos-1); var new_datetime = year_month_day+" "+hour_minute_second; // 处理成为时间戳 timestamp = new Date(Date.parse(new_datetime)); timestamp = timestamp.getTime(); timestamp = timestamp/1000; // 增加8个小时,北京时间比utc时间多八个时区 var timestamp = timestamp+8*60*60; return bt.format_data(timestamp) }, initTabConfig:function(type){ this.tabName = type; this.global.dk_model_name = type if(type == 'model') this.global.dk_model_name = 'compose' $('.mask_layer').hide(); //隐藏未安装或未启动提醒 $('#dk_'+type+'_table').empty(); //清除Table this['get_'+type](); } } //默认触发 $('#cutMode .tabs-item[data-type="' + (bt.get_cookie('docker_model') || 'container') + '"]').trigger('click');
Close