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