refactoring of messages 05/41305/1
authorKoren Lev <korenlev@gmail.com>
Thu, 7 Sep 2017 13:07:17 +0000 (16:07 +0300)
committerKoren Lev <korenlev@gmail.com>
Thu, 7 Sep 2017 13:07:17 +0000 (16:07 +0300)
Change-Id: Ia0de54892a5175194234d887e617715398c9a639
Signed-off-by: Koren Lev <korenlev@gmail.com>
ui/imports/api/configurations/configurations.js
ui/imports/api/messages/server/publications.js
ui/imports/ui/components/configuration/configuration.html
ui/imports/ui/components/configuration/configuration.js
ui/imports/ui/components/configuration/configuration.styl
ui/imports/ui/components/dashboard/dashboard.html
ui/imports/ui/components/dashboard/dashboard.js
ui/imports/ui/components/environment-dashboard/environment-dashboard.js

index 067b69f..44cf4ee 100644 (file)
@@ -20,7 +20,7 @@ let schema = {
   messages_view_backward_delta: {
     type: Number,
     minCount: 1,
-    defaultValue: '1209600000', // 2 weeks
+    defaultValue: '1209600000', // 14 days
   }
 };
 
index 6b147f0..8c5b59d 100644 (file)
@@ -103,6 +103,22 @@ Meteor.publish('messages/count?backDelta&level', function (backDelta, level) {
   return new Counter(counterName, Messages.find(query));
 });
 
+Meteor.publish('messages/count?backDelta&level&env', function (backDelta, level, env) {
+  const counterName = `messages/count?backDelta=${backDelta}&level=${level}&env=${env}`; 
+  console.log(`subscribe - counter: ${counterName}`);
+
+  let begining = moment().subtract(backDelta);
+  let query = { 
+    level: level,
+    environment: env,
+    timestamp: { $gte: begining.toDate() } 
+  };
+
+  console.log(`query: ${R.toString(query)}`);
+
+  return new Counter(counterName, Messages.find(query));
+});
+
 Meteor.publish('messages/count?level&env', function (level, env) {
   const counterName = `messages/count?level=${level}&env=${env}`; 
   console.log(`subscribe - counter: ${counterName}`);
index f381453..c8d81b2 100644 (file)
@@ -4,14 +4,18 @@
   <form>
     <div class="cl-field-group">
       <label class="cl-field-label">Message view backward delta</label>
-      <input name="msgsViewBackDelta" 
-        value="{{ getModelField 'messages_view_backward_delta' }}"     
-        class="cl-msgs-view-back-delta cl-input" 
-        type="number" 
-        placeholder="" />
-      <div class="cl-field-desc">Backward duration of {{ durationHumanize (getModelField 'messages_view_backward_delta') }} from current date (miliseconds)</div>
+      <div class="input-box">
+        <input name="msgsViewBackDelta" 
+          value="{{ getModelField 'messages_view_backward_delta' }}"     
+          class="sm-msgs-view-back-delta cl-input" 
+          type="number" 
+          placeholder="" />
+        <div class="input-hint">
+          {{ durationAsText (getModelField 'messages_view_backward_delta') }}
+        </div>
+      </div>
+      <div class="cl-field-desc">Change the start duration of message display (miliseconds)</div>    
     </div>
-
     <button type="button" 
       class="js-submit-button mdl-button mdl-js-button mdl-button--raised 
         mdl-js-ripple-effect mdl-button--colored"
index 493cc36..a3582df 100644 (file)
@@ -55,9 +55,16 @@ Template.Configuration.rendered = function() {
 Template.Configuration.events({
   'click .js-submit-button': function (event, instance) {
     event.preventDefault(); 
-    let msgsViewBackDelta = instance.$('.cl-msgs-view-back-delta')[0].value;
+    let msgsViewBackDelta = Number.parseInt(instance.$('.sm-msgs-view-back-delta')[0].value);
     saveForm(instance, msgsViewBackDelta);
-  }
+  },
+
+  'input .sm-msgs-view-back-delta': function (_e, instance) {
+    let msgsViewBackDelta = Number.parseInt(instance.$('.sm-msgs-view-back-delta')[0].value);
+    let model = instance.state.get('model');
+    model = R.assoc('messages_view_backward_delta', msgsViewBackDelta, model);
+    instance.state.set('model', model);
+  },
 });
    
 /*  
@@ -85,9 +92,11 @@ Template.Configuration.helpers({
     return instance.state.get('actionResult') === 'success';
   },
 
-  durationHumanize: function (duration) {
-    return moment.duration(duration).humanize();
-  }
+  durationAsText: function (delta) {
+    let duration = moment.duration(delta);
+    let text = `${duration.years()} years, ${duration.months()} months, ${duration.days()} days, ${duration.hours()} hours and ${duration.minutes()} minutes from current time.`;
+    return text;
+  },
 }); // end: helpers
 
 function saveForm(instance, msgsViewBackDelta) {
index b8be180..b14ce7d 100644 (file)
       width: 120px;
       margin: 0 5px;
 
-    >.cl-input
+    .input-box
       display: block;
-      width: 100%;
-      min-height: 34px;
-      padding: 6px 12px;
-      font-size: 14px;
-      line-height: 1.42857143;
-      color: #555;
-      background-color: #fff;
-      background-image: none;
-      border: 1px solid #ccc;
-      border-radius: 4px;
-      box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
       width: 400px;
       margin: 0 5px;
 
+      .cl-input
+        display: block;
+        width: 100%;
+        min-height: 34px;
+        padding: 6px 12px;
+        font-size: 14px;
+        line-height: 1.42857143;
+        color: #555;
+        background-color: #fff;
+        background-image: none;
+        border: 1px solid #ccc;
+        border-radius: 4px;
+        box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+        width: 400px;
+
+      .input-hint 
+        position: absolute;
+        margin: 5px 0;
+        
+
     .cl-field-desc
       margin: 0 5px;
 
index fcc1d6e..1edf507 100644 (file)
@@ -36,7 +36,7 @@
                     (vconnectorsCount envItem.name)
                   ) }}
             </div>
-        {{/each}} <!-- envItem in envList -->
+          {{/each}} <!-- envItem in envList -->
 
         </div> <!-- flex box for environment cards -->
         
@@ -47,7 +47,7 @@
             {{#each messagesInfoBox in (getListMessagesInfoBox) }}
             <div class="sm-message-box">
                 {{> MessagesInfoBox (argsMessagesInfoBox messagesInfoBox 
-                      (messageCount messagesInfoBox.level)) }}
+                      (countOf (msgCounterName messagesInfoBox.level))) }}
             </div>
             {{/each }}
           </div>
index 6fdc184..fb42d70 100644 (file)
@@ -19,10 +19,11 @@ import { //Messages,
 import { Template } from 'meteor/templating';
 import { Inventory } from '/imports/api/inventories/inventories';
 import { Counts } from 'meteor/tmeasday:publish-counts';
-import { Counter } from 'meteor/natestrauser:publish-performant-counts';
+//import { Counter } from 'meteor/natestrauser:publish-performant-counts';
 //import { Messages } from '/imports/api/messages/messages';
 import { store } from '/imports/ui/store/store';
 import { setMainAppSelectedEnvironment } from '/imports/ui/actions/main-app.actions';
+import { Configurations } from '/imports/api/configurations/configurations';
 
 import '/imports/ui/components/messages-info-box/messages-info-box';
 import '/imports/ui/components/environment-box/environment-box';
@@ -36,6 +37,11 @@ import './dashboard.html';
 Template.Dashboard.onCreated(function () {
   var instance = this;
 
+  instance.state = new ReactiveDict();
+  instance.state.setDefault({
+    msgsViewBackDelta: 1
+  });
+
   instance.autorun(function () {
     instance.subscribe('environments_config');
 
@@ -54,6 +60,21 @@ Template.Dashboard.onCreated(function () {
 
     store.dispatch(setMainAppSelectedEnvironment(null));
   });
+
+  instance.autorun(function () {
+    instance.subscribe('configurations?user');
+    Configurations.find({user_id: Meteor.userId()}).forEach((conf) => {
+      instance.state.set('msgsViewBackDelta', conf.messages_view_backward_delta); 
+    });
+  });
+
+  instance.autorun(function () {
+    let msgsViewBackDelta = instance.state.get('msgsViewBackDelta');
+
+    instance.subscribe('messages/count?backDelta&level', msgsViewBackDelta, 'info');
+    instance.subscribe('messages/count?backDelta&level', msgsViewBackDelta, 'warning');
+    instance.subscribe('messages/count?backDelta&level', msgsViewBackDelta, 'error');
+  });
 });
 
 Template.Dashboard.rendered = function(){
@@ -170,7 +191,7 @@ Template.Dashboard.helpers({
     return Counts.get('messages?level!counter?' +
       'level=' + 'error');
   },
-/*
+  /*
   notificationsTimestamp: function(){
     var msgTimestamp = Messages.findOne({state:'added'},{fields: {'timestamp': 1} });
     return msgTimestamp.timestamp;
@@ -197,8 +218,12 @@ Template.Dashboard.helpers({
     ];
   },
 
-  messageCount: function (level) {
-    return Counter.get(`messages/count?level=${level}`);
+  msgCounterName: function (level) {
+    let instance = Template.instance();
+    let msgsViewBackDelta = instance.state.get('msgsViewBackDelta');
+    let counterName = `messages/count?backDelta=${msgsViewBackDelta}&level=${level}`;
+
+    return counterName;
   },
 
   argsMessagesInfoBox: function(boxDef, messageCount) {
index 82fbb52..4fb6366 100644 (file)
@@ -26,6 +26,7 @@ import { calcIconForMessageLevel, lastMessageTimestamp, calcColorClassForMessage
 import { Counts } from 'meteor/tmeasday:publish-counts';
 import { Roles } from 'meteor/alanning:roles';
 //import { idToStr } from '/imports/lib/utilities';
+import { Configurations } from '/imports/api/configurations/configurations';
 import { Counter } from 'meteor/natestrauser:publish-performant-counts';
         
 import '/imports/ui/components/data-cubic/data-cubic';
@@ -87,6 +88,7 @@ Template.EnvironmentDashboard.onCreated(function() {
     _id: null,
     envName: null,
     allowEdit: false,
+    msgsViewBackDelta: 1,
   });
 
   instance.autorun(function () {
@@ -125,9 +127,11 @@ Template.EnvironmentDashboard.onCreated(function() {
       instance.subscribe('inventory?env+type', env.name, 'project');
       instance.subscribe('inventory?env+type', env.name, 'region');
 
+      /*
       instance.subscribe('messages/count?level&env', 'info', env.name);
       instance.subscribe('messages/count?level&env', 'warning', env.name);
       instance.subscribe('messages/count?level&env', 'error', env.name);
+      */
 
       let vConnectorCounterName = 'inventory?env+type!counter?env=' +
         env.name + '&type=' + 'vconnector';
@@ -161,6 +165,22 @@ Template.EnvironmentDashboard.onCreated(function() {
     });
 
   });
+
+  instance.autorun(function () {
+    instance.subscribe('configurations?user');
+    Configurations.find({user_id: Meteor.userId()}).forEach((conf) => {
+      instance.state.set('msgsViewBackDelta', conf.messages_view_backward_delta); 
+    });
+  });
+
+  instance.autorun(function () {
+    let msgsViewBackDelta = instance.state.get('msgsViewBackDelta');
+    let env = instance.state.get('envName');
+
+    instance.subscribe('messages/count?backDelta&level&env', msgsViewBackDelta, 'info', env);
+    instance.subscribe('messages/count?backDelta&level&env', msgsViewBackDelta, 'warning', env);
+    instance.subscribe('messages/count?backDelta&level&env', msgsViewBackDelta, 'error', env);
+  });
 });  
 
 /*
@@ -312,13 +332,16 @@ Template.EnvironmentDashboard.helpers({
   argsMessagesInfoBox: function(boxDef, env) {
     let instance = Template.instance();
     let envName = instance.state.get('envName');
+    let msgsViewBackDelta = instance.state.get('msgsViewBackDelta');
+
     if (R.isNil(envName)) { 
       return { 
         title: '', count: 0, lastScanTimestamp: '', onMoreDetailsReq: function () {} 
       };
     }
 
-    let counterName = `messages/count?level=${boxDef.level}&env=${envName}`;
+    //let counterName = `messages/count?level=${boxDef.level}&env=${envName}`;
+    let counterName = `messages/count?backDelta=${msgsViewBackDelta}&level=${boxDef.level}&env=${envName}`;
     let count = Counter.get(counterName);
 
     //let count =  Counts.get('messages?env+level!counter?env=' +