loleaflet/dist/admin/admin.html             |    1 
 loleaflet/src/admin/AdminSocketAnalytics.js |    2 -
 loleaflet/src/admin/AdminSocketOverview.js  |   35 ++++++++++++++++++++++++----
 loleaflet/src/admin/Util.js                 |   33 +++++++++++++++++++++++++-
 loolwsd/AdminModel.cpp                      |    4 ++-
 loolwsd/AdminModel.hpp                      |    2 +
 6 files changed, 69 insertions(+), 8 deletions(-)

New commits:
commit 28cf20b0913dc3ad95a4e695e7f94f95080a5bdd
Author: Pranav Kant <pran...@collabora.com>
Date:   Fri Apr 1 13:20:14 2016 +0530

    bccu#1640: Add elapsed time field to admin console
    
    Time increment is handled on client-side, server only sends the
    elapsed time during first page-load.
    
    Change-Id: I73e98fd95ca9f391b625a8dcfc7e3490878c6a40

diff --git a/loleaflet/dist/admin/admin.html b/loleaflet/dist/admin/admin.html
index 4fc7567..5663b80 100644
--- a/loleaflet/dist/admin/admin.html
+++ b/loleaflet/dist/admin/admin.html
@@ -101,6 +101,7 @@
                  <th>Document</th>
                  <th>Number of views</th>
                  <th>Memory consumed</th>
+                 <th>Elapsed time</th>
                </tr>
              </thead>
              <tbody id="doclist">
diff --git a/loleaflet/src/admin/AdminSocketAnalytics.js 
b/loleaflet/src/admin/AdminSocketAnalytics.js
index fa25324..4f93626 100644
--- a/loleaflet/src/admin/AdminSocketAnalytics.js
+++ b/loleaflet/src/admin/AdminSocketAnalytics.js
@@ -92,7 +92,7 @@ var AdminSocketAnalytics = AdminSocketBase.extend({
                this._d3yAxis = d3.svg.axis()
                        .scale(this._yScale)
                        .tickFormat(function (d) {
-                               return Util.humanize(d);
+                               return Util.humanizeMem(d);
                        })
                        .orient('left');
 
diff --git a/loleaflet/src/admin/AdminSocketOverview.js 
b/loleaflet/src/admin/AdminSocketOverview.js
index afced98..5bcb54e 100644
--- a/loleaflet/src/admin/AdminSocketOverview.js
+++ b/loleaflet/src/admin/AdminSocketOverview.js
@@ -10,6 +10,8 @@ var AdminSocketOverview = AdminSocketBase.extend({
 
        _basicStatsIntervalId: 0,
 
+       _docElapsedTimeIntervalId: 0,
+
        _getBasicStats: function() {
                this.socket.send('total_mem');
                this.socket.send('active_docs_count');
@@ -27,6 +29,15 @@ var AdminSocketOverview = AdminSocketBase.extend({
                        return socketOverview._getBasicStats();
                }, 5000);
 
+               this._docElapsedTimeIntervalId =
+               setInterval(function() {
+                       $('td.elapsed_time').each(function() {
+                               var newSecs = parseInt($(this).val()) + 1;
+                               $(this).val(newSecs);
+                               $(this).html(Util.humanizeSecs(newSecs));
+                       });
+               }, 1000);
+
                // Allow table rows to have a context menu for terminating 
sessions
                $('body').on('contextmenu', 'table tr', function(ev) {
                        $('#rowContextMenu').css({
@@ -67,9 +78,9 @@ var AdminSocketOverview = AdminSocketBase.extend({
 
                var tableContainer = document.getElementById('doclist');
                var rowContainer;
-               var pidEle, urlEle, viewsEle, memEle, docEle;
+               var pidEle, urlEle, viewsEle, memEle, sDocTimeEle, docEle;
                var nViews, nTotalViews;
-               var docProps, sPid, sUrl, sViews, sMem;
+               var docProps, sPid, sUrl, sViews, sMem, sDocTime;
                if (textMsg.startsWith('documents')) {
                        var documents = textMsg.substring('documents'.length);
                        documents = documents.trim().split('\n');
@@ -82,6 +93,7 @@ var AdminSocketOverview = AdminSocketBase.extend({
                                sUrl = docProps[1];
                                sViews = docProps[2];
                                sMem = docProps[3];
+                               sDocTime = docProps[4];
                                if (sUrl === '0') {
                                        continue;
                                }
@@ -103,8 +115,14 @@ var AdminSocketOverview = AdminSocketBase.extend({
                                rowContainer.appendChild(viewsEle);
 
                                memEle = document.createElement('td');
-                               memEle.innerHTML = 
Util.humanize(parseInt(sMem));
+                               memEle.innerHTML = 
Util.humanizeMem(parseInt(sMem));
                                rowContainer.appendChild(memEle);
+
+                               sDocTimeEle = document.createElement('td');
+                               sDocTimeEle.className = 'elapsed_time';
+                               sDocTimeEle.value = parseInt(sDocTime);
+                               sDocTimeEle.innerHTML = 
Util.humanizeSecs(sDocTime);
+                               rowContainer.appendChild(sDocTimeEle);
                        }
                }
                else if (textMsg.startsWith('addview')) {
@@ -154,9 +172,15 @@ var AdminSocketOverview = AdminSocketBase.extend({
                        rowContainer.appendChild(viewsEle);
 
                        memEle = document.createElement('td');
-                       memEle.innerHTML = Util.humanize(parseInt(sMem));
+                       memEle.innerHTML = Util.humanizeMem(parseInt(sMem));
                        rowContainer.appendChild(memEle);
 
+                       sDocTimeEle = document.createElement('td');
+                       sDocTimeEle.className = 'elapsed_time';
+                       sDocTimeEle.value = 0;
+                       sDocTimeEle.innerHTML = Util.humanizeSecs(0);
+                       rowContainer.appendChild(sDocTimeEle);
+
                        var totalUsersEle = 
document.getElementById('active_docs_count');
                        totalUsersEle.innerHTML = 
parseInt(totalUsersEle.innerHTML) + 1;
                }
@@ -169,7 +193,7 @@ var AdminSocketOverview = AdminSocketBase.extend({
                        var nData = parseInt(textMsg[1]);
 
                        if (sCommand === 'total_mem') {
-                               nData = Util.humanize(nData);
+                               nData = Util.humanizeMem(nData);
                        }
                        document.getElementById(sCommand).innerHTML = nData;
                }
@@ -186,5 +210,6 @@ var AdminSocketOverview = AdminSocketBase.extend({
 
        onSocketClose: function() {
                clearInterval(this._basicStatsIntervalId);
+               clearInterval(this._docElapsedTimeIntervalId);
        }
 });
diff --git a/loleaflet/src/admin/Util.js b/loleaflet/src/admin/Util.js
index 61db108..dd0cac1 100644
--- a/loleaflet/src/admin/Util.js
+++ b/loleaflet/src/admin/Util.js
@@ -8,7 +8,7 @@ var Util = Base.extend({
 
 }, { // class itnerface
 
-       humanize: function humanFileSize(kbytes) {
+       humanizeMem: function (kbytes) {
                var unit = 1000;
                var units = ['kB', 'MB', 'GB', 'TB'];
                for (var i = 0; Math.abs(kbytes) >= unit && i < units.length; 
i++) {
@@ -16,5 +16,36 @@ var Util = Base.extend({
                }
 
                return kbytes.toFixed(1) + ' ' + units[i];
+       },
+
+       humanizeSecs: function(secs) {
+               var mins = 0;
+               var hrs = 0;
+               var res = '';
+
+               secs = parseInt(secs);
+               if (isNaN(secs))
+                       return res;
+
+               if (secs >= 60) {
+                       mins = Math.floor(secs / 60);
+                       secs = secs - mins * 60;
+               }
+               if (mins >= 60) {
+                       hrs = Math.floor(mins / 60);
+                       mins = mins - hrs * 60;
+               }
+
+               if (hrs) {
+                       res = hrs + ':' + mins + ' hrs';
+               } else if (mins) {
+                       res = mins + ':' + secs + ' mins';
+               } else if (secs) {
+                       res = secs + ' s';
+               } else {
+                       res = '';
+               }
+
+               return res;
        }
 });
diff --git a/loolwsd/AdminModel.cpp b/loolwsd/AdminModel.cpp
index 644fa9c..7498fc9 100644
--- a/loolwsd/AdminModel.cpp
+++ b/loolwsd/AdminModel.cpp
@@ -348,11 +348,13 @@ std::string AdminModel::getDocuments()
         std::string sUrl = it.second.getUrl();
         std::string sViews = std::to_string(it.second.getActiveViews());
         std::string sMem = 
std::to_string(Util::getMemoryUsage(it.second.getPid()));
+        std::string sElapsed = std::to_string(it.second.getElapsedTime());
 
         oss << sPid << " "
             << sUrl << " "
             << sViews << " "
-            << sMem << " \n ";
+            << sMem << " "
+            << sElapsed << " \n ";
     }
 
     return oss.str();
diff --git a/loolwsd/AdminModel.hpp b/loolwsd/AdminModel.hpp
index 444689b..7f7bf76 100644
--- a/loolwsd/AdminModel.hpp
+++ b/loolwsd/AdminModel.hpp
@@ -62,6 +62,8 @@ public:
 
     bool isExpired() const { return _end != 0 && std::time(nullptr) >= _end; }
 
+    std::time_t getElapsedTime() const { return std::time(nullptr) - _start; }
+
     void addView(int nSessionId);
 
     void removeView(int nSessionId);
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to