From ee81a86d24dc65b645017238569620b7faecea06 Mon Sep 17 00:00:00 2001 From: midoks Date: Sat, 1 Jul 2023 15:17:43 +0800 Subject: [PATCH] update --- plugins/docker/index.py | 50 ++++++++++++++++++++ plugins/docker/js/docker.js | 92 +++++++++++++++++++++++++++---------- 2 files changed, 118 insertions(+), 24 deletions(-) diff --git a/plugins/docker/index.py b/plugins/docker/index.py index afb9f0386..72c19df80 100755 --- a/plugins/docker/index.py +++ b/plugins/docker/index.py @@ -187,6 +187,52 @@ def conListData(): return mw.returnJson(True, 'ok', clist) +def dockerRemoveCon(): + args = getArgs() + data = checkArgs(args, ['Hostname']) + if not data[0]: + return data[1] + + Hostname = args['Hostname'] + + c = getDClient() + try: + conFind = c.containers.get(Hostname) + try: + path_list = conFind.attrs['GraphDriver'][ + 'Data']['LowerDir'].split(':') + for i in path_list: + mw.execShell('chattr -R -i %s' % i) + except: + pass + conFind.remove(force=True) + return mw.returnJson(True, '成功删除!') + except docker.errors.APIError as ex: + return mw.returnJson(False, '删除失败!' + str(ex)) + + +def dockerLogCon(): + + args = getArgs() + data = checkArgs(args, ['Hostname']) + if not data[0]: + return data[1] + + Hostname = args['Hostname'] + + c = getDClient() + try: + conFind = c.containers.get(Hostname) + if not conFind: + return mw.returnJson(False, 'The specified container does not exist!') + log = conFind.logs() + if not isinstance(log, str): + log = log.decode() + return mw.returnJson(True, log) + except docker.errors.APIError as ex: + return mw.returnJson(False, 'Get Logs failed') + + def imageList(): imageList = [] c = getDClient() @@ -378,6 +424,10 @@ if __name__ == "__main__": print(getConf()) elif func == 'con_list': print(conListData()) + elif func == 'docker_con_log': + print(dockerLogCon()) + elif func == 'docker_remove_con': + print(dockerRemoveCon()) elif func == 'image_list': print(imageListData()) elif func == 'docker_remove_image': diff --git a/plugins/docker/js/docker.js b/plugins/docker/js/docker.js index d60fb3a31..401b800dd 100755 --- a/plugins/docker/js/docker.js +++ b/plugins/docker/js/docker.js @@ -53,31 +53,48 @@ function dPostCallbak(method, version, args,callback){ },'json'); } -function dockerConList(){ - var con = '
\ - \ - \ - \ - \ -
\ -
\ - \ - \ - \ - \ - \ - \ - \ - \ - ' + '
名称镜像创建时间状态操作
\ -
\ -
\ -
\ -
'; +function logsCon(id){ + dPost('docker_con_log','',{Hostname:id},function(rdata){ + var rdata = $.parseJSON(rdata.data); + if(!rdata.status) { + layer.msg(rdata.msg,{icon:2}); + return; + }; + layer.open({ + type:1, + title:'Docker日志', + area: '600px', + closeBtn: 2, + content:'
' + +'
'+ (rdata.msg == '' ? 'No logs':rdata.msg) +'
' + +'
', + success:function(index,layers){ + $(".crontab-log").scrollTop(1000000); + } + }); + }); +} - $(".soft-man-con").html(con); +function deleteCon(Hostname){ + // 删除容器 + safeMessage('删除容器 ', '删除容器 ['+Hostname+'], 确定?',function(){ + dPost('docker_remove_con','',{Hostname:Hostname},function(rdata){ + var rdata = $.parseJSON(rdata.data); + showMsg(rdata.msg,function(){ + if(rdata.status) { + dockerConListRender(); + } + },{icon:rdata.status?1:2}); + }); + }); +} +function dockerConListRender(){ dPost('con_list', '', {}, function(rdata){ // console.log(rdata); var rdata = $.parseJSON(rdata.data); @@ -99,8 +116,8 @@ function dockerConList(){ var op = ''; op += '终端 | '; - op += '日志 | '; - op += '删除'; + op += '日志 | '; + op += '删除'; list += ''; @@ -114,6 +131,33 @@ function dockerConList(){ $('#con_list tbody').html(list); }); +} +function dockerConList(){ + + var con = '
\ + \ + \ + \ + \ +
\ +
\ + \ + \ + \ + \ + \ + \ + \ + \ + ' + '
名称镜像创建时间状态操作
\ +
\ +
\ +
\ +
'; + + $(".soft-man-con").html(con); + + dockerConListRender(); }