|
|
|
extends layout
|
|
|
|
|
|
|
|
block headContent
|
|
|
|
title Admin
|
|
|
|
|
|
|
|
block content
|
|
|
|
h1.h3 Admin
|
|
|
|
hr
|
|
|
|
|
|
|
|
ul.nav.nav-tabs.mb-3
|
|
|
|
li.nav-item
|
|
|
|
a.nav-link.active(data-toggle="tab", href="#tab-details", role="tab") Details
|
|
|
|
li.nav-item
|
|
|
|
a.nav-link(data-toggle="tab", href="#tab-json", role="tab") JSON
|
|
|
|
|
|
|
|
div.tab-content
|
|
|
|
div.tab-pane.active(id="tab-details", role="tabpanel")
|
|
|
|
div.card.shadow-sm.mb-3
|
|
|
|
div.card-body
|
|
|
|
h3.h6 Basics
|
|
|
|
hr
|
|
|
|
|
|
|
|
div.clearfix
|
|
|
|
div.row
|
|
|
|
div.summary-table-label Uptime
|
|
|
|
div.summary-table-content.text-monospace
|
|
|
|
- var uptime = moment.duration(new Date().getTime() - appStartTime);
|
|
|
|
span #{uptime.format()}
|
|
|
|
|
|
|
|
div.card.shadow-sm.mb-3
|
|
|
|
div.card-body
|
|
|
|
h3.h6 Memory Stats
|
|
|
|
hr
|
|
|
|
|
|
|
|
div.clearfix
|
|
|
|
div.row
|
|
|
|
div.summary-table-label Heap Size
|
|
|
|
div.summary-table-content.text-monospace
|
|
|
|
- var data = utils.formatLargeNumber(memstats.total_heap_size, 2);
|
|
|
|
span #{data[0]}
|
|
|
|
small #{data[1].abbreviation}B
|
|
|
|
|
|
|
|
div.row
|
|
|
|
div.summary-table-label Used Heap
|
|
|
|
div.summary-table-content.text-monospace
|
|
|
|
- var data = utils.formatLargeNumber(memstats.used_heap_size, 2);
|
|
|
|
span #{data[0]}
|
|
|
|
small #{data[1].abbreviation}B
|
|
|
|
|
|
|
|
div.row
|
|
|
|
div.summary-table-label Heap Limit
|
|
|
|
div.summary-table-content.text-monospace
|
|
|
|
- var data = utils.formatLargeNumber(memstats.heap_size_limit, 2);
|
|
|
|
span #{data[0]}
|
|
|
|
small #{data[1].abbreviation}B
|
|
|
|
|
|
|
|
div.row
|
|
|
|
div.summary-table-label Physical Size
|
|
|
|
div.summary-table-content.text-monospace
|
|
|
|
- var data = utils.formatLargeNumber(memstats.total_physical_size, 2);
|
|
|
|
span #{data[0]}
|
|
|
|
small #{data[1].abbreviation}B
|
|
|
|
|
|
|
|
div.row
|
|
|
|
div.summary-table-label Available Size
|
|
|
|
div.summary-table-content.text-monospace
|
|
|
|
- var data = utils.formatLargeNumber(memstats.total_available_size, 2);
|
|
|
|
span #{data[0]}
|
|
|
|
small #{data[1].abbreviation}B
|
|
|
|
|
|
|
|
if (JSON.stringify(cacheStats) != "{}")
|
|
|
|
div.card.shadow-sm.mb-3
|
|
|
|
div.card-body
|
|
|
|
h3.h6 Cache Stats
|
|
|
|
hr
|
|
|
|
|
|
|
|
div.table-responsive
|
|
|
|
table.table.table-hover
|
|
|
|
thead
|
|
|
|
tr
|
|
|
|
th Cache
|
|
|
|
th.text-right Hit
|
|
|
|
th.text-right Miss
|
|
|
|
th.text-right Hit Rate
|
|
|
|
|
|
|
|
tbody
|
|
|
|
each item, itemName in cacheStats
|
|
|
|
tr.text-monospace
|
|
|
|
td #{itemName}
|
|
|
|
td.text-right #{item.hit.toLocaleString()}
|
|
|
|
td.text-right #{item.miss.toLocaleString()}
|
|
|
|
td.text-right
|
|
|
|
if (item.hit > 0 || item.miss > 0)
|
|
|
|
span #{(100 * item.hit / (item.hit + item.miss)).toLocaleString()}
|
|
|
|
small %
|
|
|
|
else
|
|
|
|
span -
|
|
|
|
|
|
|
|
div.card.shadow-sm.mb-3
|
|
|
|
div.card-body
|
|
|
|
h3.h6 RPC Stats
|
|
|
|
hr
|
|
|
|
|
|
|
|
div.table-responsive
|
|
|
|
table.table.table-hover.table-striped
|
|
|
|
thead
|
|
|
|
tr
|
|
|
|
th Method
|
|
|
|
th.text-right Count
|
|
|
|
th.text-right Time
|
|
|
|
small (s)
|
|
|
|
th.text-right Avg Time
|
|
|
|
small (ms)
|
|
|
|
th.text-right Successes / Failures
|
|
|
|
th.text-right Success Rate
|
|
|
|
|
|
|
|
tbody
|
|
|
|
each item, itemName in rpcStats
|
|
|
|
tr.text-monospace
|
|
|
|
td #{itemName}
|
|
|
|
td.text-right #{item.count.toLocaleString()}
|
|
|
|
td.text-right #{(item.time / 1000).toLocaleString()}
|
|
|
|
td.text-right #{(item.time / item.count).toLocaleString()}
|
|
|
|
td.text-right
|
|
|
|
span.text-success #{item.successes.toLocaleString()}
|
|
|
|
span.mx-1 /
|
|
|
|
span.text-danger #{item.failures.toLocaleString()}
|
|
|
|
|
|
|
|
td.text-right
|
|
|
|
span #{new Decimal(item.successes).dividedBy(new Decimal(item.successes + item.failures)).times(100).toDP(1)}
|
|
|
|
small %
|
|
|
|
|
|
|
|
div.card.shadow-sm.mb-3
|
|
|
|
div.card-body
|
|
|
|
h3.h6 Error Stats
|
|
|
|
hr
|
|
|
|
|
|
|
|
if (JSON.stringify(errorStats) == "{}")
|
|
|
|
span.text-success No errors encountered
|
|
|
|
|
|
|
|
else
|
|
|
|
div.table-responsive
|
|
|
|
table.table.table-hover.table-striped
|
|
|
|
thead
|
|
|
|
tr
|
|
|
|
th Error ID
|
|
|
|
th.text-right Count
|
|
|
|
th.text-right First Seen
|
|
|
|
th.text-right Last Seen
|
|
|
|
|
|
|
|
tbody
|
|
|
|
each item, itemName in errorStats
|
|
|
|
tr.text-monospace
|
|
|
|
td #{itemName}
|
|
|
|
td.text-right #{item.count.toLocaleString()}
|
|
|
|
td.text-right #{moment.duration(new Date().getTime() - item.firstSeen).format()} ago
|
|
|
|
td.text-right #{moment.duration(new Date().getTime() - item.lastSeen).format()} ago
|
|
|
|
|
|
|
|
|
|
|
|
div.tab-pane(id="tab-json", role="tabpanel")
|
|
|
|
div.card.shadow-sm.mb-3
|
|
|
|
div.card-body
|
|
|
|
h3.h6 Memory Stats
|
|
|
|
hr
|
|
|
|
|
|
|
|
div.highlight
|
|
|
|
pre
|
|
|
|
code.json #{JSON.stringify(memstats, null, 4)}
|
|
|
|
|
|
|
|
div.card.shadow-sm.mb-3
|
|
|
|
div.card-body
|
|
|
|
h3.h6 Error Stats
|
|
|
|
hr
|
|
|
|
|
|
|
|
div.highlight
|
|
|
|
pre
|
|
|
|
code.json #{JSON.stringify(errorStats, null, 4)}
|