diff --git a/webadmin/src/index.html b/webadmin/src/index.html
index e1db892c5..5cd479e3c 100644
--- a/webadmin/src/index.html
+++ b/webadmin/src/index.html
@@ -66,6 +66,9 @@
+
+
+
@@ -213,6 +216,7 @@
-
+
-
+
-
-
-
-
-
Logs
- Select the log to view
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/webadmin/src/views/logs.js b/webadmin/src/views/logs.js
index 8bc0f988e..3d2bcd4d3 100644
--- a/webadmin/src/views/logs.js
+++ b/webadmin/src/views/logs.js
@@ -4,22 +4,56 @@ angular.module('Application').controller('LogsController', ['$scope', '$location
$scope.config = Client.getConfig();
$scope.user = Client.getUserInfo();
- $scope.logs = {
- types: null,
- selectedUrl: '' // index into types
- };
+ $scope.logs = [];
+ $scope.selected = null;
+
+ function ab2str(buf) {
+ return String.fromCharCode.apply(null, new Uint16Array(buf));
+ }
$scope.populateLogTypes = function () {
- $scope.logs.types = [
- { name: 'System (All)', url: Client.makeURL('/api/v1/cloudron/logs?units=all') },
- { name: 'Box', url: Client.makeURL('/api/v1/cloudron/logs?units=box') },
- { name: 'Mail', url: Client.makeURL('/api/v1/cloudron/logs?units=mail') }
- ];
+ $scope.logs.push({ name: 'System (All)', type: 'platform', units: 'all' });
+ $scope.logs.push({ name: 'Box', type: 'platform', units: 'box' });
+ $scope.logs.push({ name: 'Mail', type: 'platform', units: 'mail' });
Client.getInstalledApps().forEach(function (app) {
- $scope.logs.types.push({ name: app.fqdn, url: Client.makeURL('/api/v1/apps/' + app.id + '/logs') });
+ $scope.logs.types.push({ name: app.fqdn, type: 'app', id: app.id });
});
};
+ $scope.$watch('selected', function (newVal) {
+ if (!newVal) return;
+
+ if (newVal.type === 'platform') {
+ Client.getPlatformLogs(newVal.units, true, function (error, result) {
+ if (error) return console.error(error);
+
+ var logViewer = $('.log-line-container');
+ logViewer.empty();
+ });
+ } else {
+ Client.getAppLogs(newVal.id, true, function (error, result) {
+ if (error) return console.error(error);
+
+ var logViewer = $('.log-line-container');
+ logViewer.empty();
+
+ result.onmessage = function (e) {
+ var data;
+
+ try {
+ data = JSON.parse(e.data);
+ } catch (e) {
+ return console.error(e);
+ }
+
+ var logLine = $('
');
+ logLine.html(window.ansiToHTML(ab2str(data.message)));
+ logViewer.append(logLine);
+ };
+ });
+ }
+ });
+
Client.onReady($scope.populateLogTypes);
}]);