diff --git a/webadmin/src/index.html b/webadmin/src/index.html index 2fd39cc37..996f5ade6 100644 --- a/webadmin/src/index.html +++ b/webadmin/src/index.html @@ -222,10 +222,10 @@
  • Account
  • Activity
  • API Access
  • +
  • Debug
  • Domain & Certs
  • Email
  • Graphs
  • -
  • Logs
  • Settings
  • Support
  • diff --git a/webadmin/src/js/index.js b/webadmin/src/js/index.js index 2a3233f14..a36de3606 100644 --- a/webadmin/src/js/index.js +++ b/webadmin/src/js/index.js @@ -43,9 +43,9 @@ app.config(['$routeProvider', function ($routeProvider) { }).when('/graphs', { controller: 'GraphsController', templateUrl: 'views/graphs.html' - }).when('/logs', { - controller: 'LogsController', - templateUrl: 'views/logs.html' + }).when('/debug', { + controller: 'DebugController', + templateUrl: 'views/debug.html' }).when('/certs', { controller: 'CertsController', templateUrl: 'views/certs.html' diff --git a/webadmin/src/views/logs.html b/webadmin/src/views/debug.html similarity index 63% rename from webadmin/src/views/logs.html rename to webadmin/src/views/debug.html index 489e9845b..8d0a8a041 100644 --- a/webadmin/src/views/logs.html +++ b/webadmin/src/views/debug.html @@ -7,7 +7,14 @@ + + Download + + + + + diff --git a/webadmin/src/views/logs.js b/webadmin/src/views/debug.js similarity index 75% rename from webadmin/src/views/logs.js rename to webadmin/src/views/debug.js index fa2632c70..37de47472 100644 --- a/webadmin/src/views/logs.js +++ b/webadmin/src/views/debug.js @@ -3,7 +3,7 @@ /* global moment */ /* global Terminal */ -angular.module('Application').controller('LogsController', ['$scope', '$location', 'Client', function ($scope, $location, Client) { +angular.module('Application').controller('DebugController', ['$scope', '$location', 'Client', function ($scope, $location, Client) { Client.onReady(function () { if (!Client.getUserInfo().admin) $location.path('/'); }); $scope.config = Client.getConfig(); @@ -13,6 +13,7 @@ angular.module('Application').controller('LogsController', ['$scope', '$location $scope.selected = ''; $scope.activeEventSource = null; $scope.terminal = null; + $scope.terminalSocket = null; $scope.lines = 10; $scope.terminalVisible = false; @@ -46,6 +47,10 @@ angular.module('Application').controller('LogsController', ['$scope', '$location $scope.terminal.destroy(); $scope.terminal = null; } + + if ($scope.terminalSocket) { + $scope.terminalSocket = null; + } } $scope.showLogs = function () { @@ -81,22 +86,31 @@ angular.module('Application').controller('LogsController', ['$scope', '$location }); }; - $scope.showTerminal = function () { + $scope.showTerminal = function (retry) { $scope.terminalVisible = true; reset(); + // we can only connect to apps here + if ($scope.selected.type !== 'app') { + var tmp = $('.logs-and-term-container'); + var logLine = $('
    '); + logLine.html('Terminal is only supported for app, not for ' + $scope.selected.name); + tmp.append(logLine); + return; + } + $scope.terminal = new Terminal(); try { // websocket cannot use relative urls - var url = Client.apiOrigin.replace('https', 'wss') + '/api/v1/apps/' + $scope.selected.value + '/exec?tty=true'; - var socket = new WebSocket(url); - $scope.terminal.attach(socket); + var url = Client.apiOrigin.replace('https', 'wss') + '/api/v1/apps/' + $scope.selected.value + '/execws?tty=true'; + $scope.terminalSocket = new WebSocket(url); + $scope.terminal.attach($scope.terminalSocket); - socket.onclose = function () { + $scope.terminalSocket.onclose = function () { // retry in one second - setTimeout($scope.showTerminal, 1000); + setTimeout($scope.showTerminal.bind(null, true), 1000); }; } catch (e) { console.error(e); @@ -104,6 +118,15 @@ angular.module('Application').controller('LogsController', ['$scope', '$location $scope.terminal.open(document.querySelector('.logs-and-term-container')); $scope.terminal.fit(); + + if (retry) $scope.terminal.writeln('Reconnecting...'); + else $scope.terminal.writeln('Connecting...'); + }; + + $scope.terminalInjectMysql = function () { + if (!$scope.terminalSocket) return; + + $scope.terminalSocket.send('mysql --user=${MYSQL_USERNAME} --password=${MYSQL_PASSWORD} --host=${MYSQL_HOST} ${MYSQL_DATABASE}\n'); }; $scope.$watch('selected', function (newVal) {