From b18cef0219b6061b6d8e3a66ce56d79cd252f299 Mon Sep 17 00:00:00 2001 From: bergware Date: Thu, 11 Nov 2021 02:44:35 +0100 Subject: [PATCH] Replace openWindow() for openTerminal() Use ttyd for logging windows --- .../dynamix.docker.manager/include/Events.php | 40 ------------- .../javascript/docker.js | 15 +---- plugins/dynamix.vm.manager/VMSettings.page | 7 ++- .../javascript/vmmanager.js | 2 +- plugins/dynamix/LogButton.page | 6 +- plugins/dynamix/TerminalButton.page | 11 +--- plugins/dynamix/default.cfg | 1 + plugins/dynamix/include/DefaultPageLayout.php | 35 +++++++++++- plugins/dynamix/include/OpenTerminal.php | 56 +++++++++++++++++++ 9 files changed, 103 insertions(+), 70 deletions(-) create mode 100644 plugins/dynamix/include/OpenTerminal.php diff --git a/plugins/dynamix.docker.manager/include/Events.php b/plugins/dynamix.docker.manager/include/Events.php index b413d29cd..c580e9426 100644 --- a/plugins/dynamix.docker.manager/include/Events.php +++ b/plugins/dynamix.docker.manager/include/Events.php @@ -61,46 +61,6 @@ switch ($action) { } } break; - case 'log': - if ($container) { - $since = unscript($_REQUEST['since']??''); - $title = unbundle($_REQUEST['title']??''); - require_once "$docroot/webGui/include/ColorCoding.php"; - if (!$since) { - readfile("$docroot/plugins/dynamix.docker.manager/log.htm"); - echo ""; - echo ""; - $tail = 350; - } else { - $tail = null; - } - $echo = function($s) use ($match) { - $line = substr(trim($s), 8); - $span = "span"; - foreach ($match as $type) { - foreach ($type['text'] as $text) { - if (preg_match("/$text/i",$line)) { - $span = "span class='{$type['class']}'"; - break 2; - } - } - } - echo ""; - @flush(); - }; - $DockerClient->getContainerLog($container, $echo, $tail, $since); - echo ''; - @flush(); - exit; - } - break; - case 'terminal': - $shell = $_REQUEST['shell'] ?: 'sh'; - $pid = exec("pgrep -a ttyd|awk '/\\/$name\\.sock/{print \$1}'"); - if ($pid) exec("kill $pid"); - @unlink("/var/tmp/$name.sock"); - exec("ttyd-exec -o -i '/var/tmp/$name.sock' docker exec -it '$name' $shell"); - break; default: $arrResponse = ['error' => _('Unknown action')." '$action'"]; break; diff --git a/plugins/dynamix.docker.manager/javascript/docker.js b/plugins/dynamix.docker.manager/javascript/docker.js index 0a7e4c6d8..b79f0c874 100644 --- a/plugins/dynamix.docker.manager/javascript/docker.js +++ b/plugins/dynamix.docker.manager/javascript/docker.js @@ -54,12 +54,7 @@ function addDockerImageContext(image, imageTag) { context.attach('#'+image, opts); } function dockerTerminal(container,shell) { - var height = 600; - var width = 900; - var top = (screen.height-height)/2; - var left = (screen.width-width)/2; - var win = window.open('', container, 'resizeable=yes,scrollbars=yes,height='+height+',width='+width+',top='+top+',left='+left); - $.get(eventURL,{action:'terminal',name:container,shell:shell},function(){win.location='/dockerterminal/'+container+'/'; win.focus();}); + openTerminal('docker',container,shell,600,900); } function popupWithIframe(title, cmd, reload, func) { pauseEvents(); @@ -214,11 +209,5 @@ function rebuildAll() { $.get('/plugins/dynamix.docker.manager/include/CreateDocker.php',{updateContainer:true,mute:true,ct},function(){loadlist();}); } function containerLogs(container, id) { - var height = 600; - var width = 900; - var run = eventURL+'?action=log&container='+id+'&title='+_('Log for:')+' '+container; - var top = (screen.height-height) / 2; - var left = (screen.width-width) / 2; - var options = 'resizeable=yes,scrollbars=yes,height='+height+',width='+width+',top='+top+',left='+left; - window.open(run, _('log'), options); + openTerminal('docker',container,id,600,900); } diff --git a/plugins/dynamix.vm.manager/VMSettings.page b/plugins/dynamix.vm.manager/VMSettings.page index e9ffa66e3..06ee7ff1f 100644 --- a/plugins/dynamix.vm.manager/VMSettings.page +++ b/plugins/dynamix.vm.manager/VMSettings.page @@ -57,6 +57,7 @@ $vfio_allow_unsafe = detect($syslinux, 'allow_unsafe_interrupts'); $bgcolor = strstr('white,azure',$display['theme']) ? '#f2f2f2' : '#1c1c1c'; $started = $var['fsState']=='Started'; $libvirt_up = $libvirt_running=='yes'; +$libvirt_log = file_exists("/var/log/libvirt/libvirtd.log"); ?> @@ -196,15 +197,15 @@ _(VFIO allow unsafe interrupts)_: :vms_vfio_interupts_help: - - + +   : - + :vms_libvirt_log_help: diff --git a/plugins/dynamix.vm.manager/javascript/vmmanager.js b/plugins/dynamix.vm.manager/javascript/vmmanager.js index 728248178..801cafc01 100644 --- a/plugins/dynamix.vm.manager/javascript/vmmanager.js +++ b/plugins/dynamix.vm.manager/javascript/vmmanager.js @@ -73,7 +73,7 @@ function addVMContext(name, uuid, template, state, vncurl, log){ } opts.push({divider:true}); if (log !== "") { - opts.push({text:_("Logs"), icon:"fa-navicon", action:function(e){e.preventDefault(); openWindow('/webGui/scripts/tail_log&arg1='+log, _('Log for:')+name, 600, 900);}}); + opts.push({text:_("Logs"), icon:"fa-navicon", action:function(e){e.preventDefault(); openTerminal('log',name,log,600,900);}}); } opts.push({text:_("Edit"), icon:"fa-pencil", href:path+'/UpdateVM?uuid='+uuid}); if (state == "shutoff") { diff --git a/plugins/dynamix/LogButton.page b/plugins/dynamix/LogButton.page index bd6bc0f0d..cca61d979 100644 --- a/plugins/dynamix/LogButton.page +++ b/plugins/dynamix/LogButton.page @@ -4,8 +4,8 @@ Icon="icon-u-log" Code="e936" --- diff --git a/plugins/dynamix/TerminalButton.page b/plugins/dynamix/TerminalButton.page index e9bedf4dc..ef2f1fb3a 100644 --- a/plugins/dynamix/TerminalButton.page +++ b/plugins/dynamix/TerminalButton.page @@ -5,8 +5,8 @@ Href="/webterminal/" Code="e93f" --- _(Please try a different browser)_",html:true,type:'error',confirmButtonText:"_(Ok)_"}); return; } - var d = new Date(); - var height = 600; - var width = 900; - var top = (screen.height-height)/2; - var left = (screen.width-width)/2; - window.open('/webterminal/', 'Web Terminal '+d.getTime(), 'resizeable=yes,scrollbars=yes,height='+height+',width='+width+',top='+top+',left='+left).focus(); + openTerminal('ttyd','ttyd','',600,900); } diff --git a/plugins/dynamix/default.cfg b/plugins/dynamix/default.cfg index 18c071784..4bbbf1172 100644 --- a/plugins/dynamix/default.cfg +++ b/plugins/dynamix/default.cfg @@ -3,6 +3,7 @@ down="1" stop="1" [display] font="" +tty="15" date="%c" time="%R" number=".," diff --git a/plugins/dynamix/include/DefaultPageLayout.php b/plugins/dynamix/include/DefaultPageLayout.php index f52b08b64..478358e38 100644 --- a/plugins/dynamix/include/DefaultPageLayout.php +++ b/plugins/dynamix/include/DefaultPageLayout.php @@ -99,6 +99,19 @@ var before = new Date(); var timers = {}; timers.bannerWarning = null; +// opened tty windows +var tty_window = {}; +var _cookies_ = document.cookie.split(';'); +for (var i=0,_cookie_; _cookie_=_cookies_[i]; i++) { + var _tag_ = _cookie_.split('=')[0]; + if (_tag_.search(/^.win-open-/)!=-1) { + var _name_ = _tag_.split('-')[2]; + var _size_ = _cookie_.split('=')[1]; + var _height_ = _size_.split('-')[0]; + var _width_ = _size_.split('-')[1]; + tty_window[_name_] = makeWindow(_name_,_height_,_width_); + } +} // current csrf_token var csrf_token = ""; @@ -189,6 +202,13 @@ function chkDelete(form, button) { button.value = form.confirmDelete.checked ? "" : ""; button.disabled = false; } +function makeWindow(name,height,width) { + var top = (screen.height-height)/2; + if (top < 0) {top = 0; height = screen.availHeight;} + var left = (screen.width-width)/2; + if (left < 0) {left = 0; width = screen.availWidth;} + return window.open('',name,'resizeable=yes,scrollbars=yes,height='+height+',width='+width+',top='+top+',left='+left); +} function openBox(cmd,title,height,width,load,func,id) { // open shadowbox window (run in foreground) var uri = cmd.split('?'); @@ -213,10 +233,21 @@ function openWindow(cmd,title,height,width) { if (top < 0) {top = 0; height = screen.availHeight;} var left = (screen.availWidth-width)/2; if (left < 0) {left = 0; width = screen.availWidth;} - var options = 'resizeable=yes,scrollbars=yes,height='+height+',width='+width+',top='+top+',left='+left; - window.open('', window_name, options); + makeWindow(window_name,height,width); form.submit(); } +function openTerminal(tag,name,more,height,width) { + // open terminal window (run in background) + var top = (screen.height-height)/2; + if (top < 0) {top = 0; height = screen.availHeight;} + var left = (screen.width-width)/2; + if (left < 0) {left = 0; width = screen.availWidth;} + name = name.replace(/ /g,"_"); + tty_window[name] = makeWindow(name,height,width); + $.cookie('win-open-'+name,height+'-'+width,{path:'/'}); + var socket = (['ttyd','syslog'].includes(tag) ? '/webterminal/' : '/logterminal/')+(more.length==12 ? more : name)+'/'; + $.get('/webGui/include/OpenTerminal.php',{tag:tag,name:name,more:more},function(){tty_window[name].location=socket; tty_window[name].focus();}); +} function showStatus(name,plugin,job) { $.post('/webGui/include/ProcessStatus.php',{name:name,plugin:plugin,job:job},function(status){$(".tabs").append(status);}); } diff --git a/plugins/dynamix/include/OpenTerminal.php b/plugins/dynamix/include/OpenTerminal.php new file mode 100644 index 000000000..1dca1496f --- /dev/null +++ b/plugins/dynamix/include/OpenTerminal.php @@ -0,0 +1,56 @@ + +