From ae947cd5f2d69e40185db6c0252e60a71934e6d8 Mon Sep 17 00:00:00 2001
From: cgeek <cem.moreau@gmail.com>
Date: Thu, 24 Mar 2016 11:53:00 +0100
Subject: [PATCH] Logs: added log level customization

---
 .../main/home/tabs/LogsController.js          | 20 ++++++++++++---
 app/js/lib/conf/i18n/en.json                  |  5 ++++
 app/styles/main.styl                          | 25 ++++++++++++++++++-
 app/views/main/home/tabs/logs.jade            | 16 +++++++++++-
 4 files changed, 61 insertions(+), 5 deletions(-)

diff --git a/app/js/controllers/main/home/tabs/LogsController.js b/app/js/controllers/main/home/tabs/LogsController.js
index 30f5640..fb8307b 100644
--- a/app/js/controllers/main/home/tabs/LogsController.js
+++ b/app/js/controllers/main/home/tabs/LogsController.js
@@ -11,6 +11,21 @@ module.exports = ($scope, ws, UIUtils) => {
   $scope.logs = _.range(0, $scope.logsSize).map(() => "");
   $scope.logsString = "";
   $scope.follow = true;
+  $scope.levels = {
+    error: localStorage.getItem('log_error') == "true",
+    warn: localStorage.getItem('log_warn') == "true",
+    info: localStorage.getItem('log_info') == "true",
+    debug: localStorage.getItem('log_debug') == "true",
+    trace: localStorage.getItem('log_trace') == "true"
+  };
+
+  _.keys($scope.levels).map((level) => {
+    $scope.$watch('levels.' + level, (newValue) => {
+      localStorage.setItem('log_' + level, newValue);
+      $scope.logs.splice(0, $scope.logs.length);
+      ws.send();
+    });
+  });
 
   $scope.$watch('logsSize', () => {
     addLogs({ value: [] }, true);
@@ -21,16 +36,15 @@ module.exports = ($scope, ws, UIUtils) => {
   function addLogs(res, autoDigest) {
 
     if (!$scope.pause) {
-      let newlogs = res.value;
+      let newlogs = _.filter(res.value, (log) => $scope.levels[log.level]);
       // Add at max LOGS_FLOW_SIZE new lines
       newlogs.splice(0, Math.max(0, newlogs.length - $scope.logsSize));
       // Add just enough space for incoming logs
       $scope.logs.splice(0, Math.max(0, $scope.logs.length + newlogs.length - $scope.logsSize));
       for (let i = 0, len = newlogs.length; i < len; i++) {
         let log = newlogs[i];
-        $scope.logs.push(log.msg);
+        $scope.logs.push(log);
       }
-      $scope.logsString = $scope.logs.join('\n');
       if (!autoDigest) {
         $scope.$apply();
       }
diff --git a/app/js/lib/conf/i18n/en.json b/app/js/lib/conf/i18n/en.json
index 5034431..a297a97 100644
--- a/app/js/lib/conf/i18n/en.json
+++ b/app/js/lib/conf/i18n/en.json
@@ -89,6 +89,11 @@
   "home.tabs.logs": "Logs",
   "home.tabs.logs.follow.logs": "Follow logs",
   "home.tabs.logs.pause.logs": "Pause logs",
+  "home.tabs.logs.level.error": "Error",
+  "home.tabs.logs.level.warn": "Warning",
+  "home.tabs.logs.level.info": "Info",
+  "home.tabs.logs.level.debug": "Debug",
+  "home.tabs.logs.level.trace": "Trace",
   "sync.title": "Synchronize",
   "sync.message": "Your node will be synchronized with an existing currency: just enter technical details about a node to sync with it.",
   "sync.host": "Host",
diff --git a/app/styles/main.styl b/app/styles/main.styl
index 56f3588..8eaed5e 100644
--- a/app/styles/main.styl
+++ b/app/styles/main.styl
@@ -133,9 +133,32 @@ blockquote
   font-size 12px
   max-height 600px
 
+#logs p
+  line-height 21px
+  margin-top 0
+  margin-bottom 0
+
 #follow-logs
   float right
 
 .logs
   label
-    margin-right 30px
\ No newline at end of file
+    margin-right 30px
+
+.log-level.info
+  color: blue
+
+.log-level.warn
+  color: #C9C826
+
+.log-level.error
+  color: red
+
+.log-level.debug
+  color: cyan
+
+.log-level.trace
+  color: #d0f
+
+.log-time
+  color: #888888
\ No newline at end of file
diff --git a/app/views/main/home/tabs/logs.jade b/app/views/main/home/tabs/logs.jade
index 5af9fbf..53235d8 100644
--- a/app/views/main/home/tabs/logs.jade
+++ b/app/views/main/home/tabs/logs.jade
@@ -7,7 +7,21 @@
           label(for="follow-logs") {{ 'home.tabs.logs.follow.logs' | translate }}
           input#pause-logs.filled-in(type="checkbox" ng-model="pause")
           label(for="pause-logs") {{ 'home.tabs.logs.pause.logs' | translate }}
+          input#level-error.filled-in(type="checkbox" ng-model="levels.error")
+          label(for="level-error") {{ 'home.tabs.logs.level.error' | translate }}
+          input#level-warn.filled-in(type="checkbox" ng-model="levels.warn")
+          label(for="level-warn") {{ 'home.tabs.logs.level.warn' | translate }}
+          input#level-info.filled-in(type="checkbox" ng-model="levels.info")
+          label(for="level-info") {{ 'home.tabs.logs.level.info' | translate }}
+          input#level-debug.filled-in(type="checkbox" ng-model="levels.debug")
+          label(for="level-debug") {{ 'home.tabs.logs.level.debug' | translate }}
+          input#level-trace.filled-in(type="checkbox" ng-model="levels.trace")
+          label(for="level-trace") {{ 'home.tabs.logs.level.trace' | translate }}
         p {{ 'graphs.blockchain.range' | translate }}
         .range-field
           input(type="range" min="10" max="10000" ng-model="logsSize" ng-mouseup="changeSize()")
-        pre#logs {{ logsString }}
+        pre#logs
+          p(ng-repeat="log in logs track by $index")
+            span.log-time {{ log.timestamp }}&nbsp;
+            span.log-level(class="{{ log.level }}") {{ log.level }}&nbsp;
+            span {{ log.msg }}
-- 
GitLab