<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<meta name="author" content="costa@tsaousis.gr">
- <link rel="shortcut icon" href="images/seo-performance-multi-size.ico">
+ <!-- <link rel="shortcut icon" href="images/seo-performance-multi-size.ico"> -->
- <link rel="apple-touch-icon" href="images/seo-performance-72.png">
- <link rel="apple-touch-icon" sizes="72x72" href="images/seo-performance-72.png">
- <link rel="apple-touch-icon" sizes="114x114" href="images/seo-performance-114.png">
+ <!-- <link rel="apple-touch-icon" href="images/seo-performance-72.png"> -->
+ <!-- <link rel="apple-touch-icon" sizes="72x72" href="images/seo-performance-72.png"> -->
+ <!-- <link rel="apple-touch-icon" sizes="114x114" href="images/seo-performance-114.png"> -->
- <link rel="icon" type="image/png" sizes="512x512" href="images/seo-performance-512.png">
- <link rel="icon" type="image/png" sizes="256x256" href="images/seo-performance-256.png">
- <link rel="icon" type="image/png" sizes="128x128" href="images/seo-performance-128.png">
- <link rel="icon" type="image/png" sizes="64x64" href="images/seo-performance-64.png">
- <link rel="icon" type="image/png" sizes="48x48" href="images/seo-performance-48.png">
- <link rel="icon" type="image/png" sizes="32x32" href="images/seo-performance-32.png">
- <link rel="icon" type="image/png" sizes="24x24" href="images/seo-performance-24.png">
- <link rel="icon" type="image/png" sizes="16x16" href="images/seo-performance-16.png">
+ <!-- <link rel="icon" type="image/png" sizes="512x512" href="images/seo-performance-512.png"> -->
+ <!-- <link rel="icon" type="image/png" sizes="256x256" href="images/seo-performance-256.png"> -->
+ <!-- <link rel="icon" type="image/png" sizes="128x128" href="images/seo-performance-128.png"> -->
+ <!-- <link rel="icon" type="image/png" sizes="64x64" href="images/seo-performance-64.png"> -->
+ <!-- <link rel="icon" type="image/png" sizes="48x48" href="images/seo-performance-48.png"> -->
+ <!-- <link rel="icon" type="image/png" sizes="24x24" href="images/seo-performance-24.png"> -->
+ <!-- <link rel="icon" type="image/png" sizes="16x16" href="images/seo-performance-16.png"> -->
+ <!-- <link rel="icon" type="image/png" sizes="32x32" href="images/seo-performance-32.png"> -->
+
+ <link rel="icon" type="image/png" sizes="32x32" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACNklEQVRYhcXXv2tUQRAH8M+FEIJISBHCIWIhIQSUILERi4AiiqCggiIiomAjlhaC4j+ghYWISgqNohZaCBZBC8Ei8QdEUCutFBsxCBqDYkgci/cunkfuJffjJQPD8mZm5/vd2WV2HzlJ0Bs8CvrywsgCHwy+BpGOg0sJfjj4nYKX9FdwKG9gwZlgtgK8pLOpPxfw1mCoCnClDgWtzQTvCEYWCV7SkWAlFBoEb8dlDKBF8t2bMWUSH/AHr3CiEfz5CPUusPJLkRCdk5ZqyeqUrQv4R7E5TwK7M3zTeIKduRAIitiWEfIY69GdCwGcRFuG/xqONRkzkaA7+J5x+MaDtWmHvJ4HgeEM8Nn0bridfv9HoOFyBAdwJCPkqqTzHWwUaz7wgeBHxupfBKuCj2W25mxBsCGYyAB/FxTT27HcPlyep64tCLbjKbqqhLzBlgKfF8pVE4FgRXABI+ioEnYfOyzcFWsCbg+OV+xlpU4ER4O+4HVwL51b3xYEXcGu4Ao+YQhr5gmdxHmsQyfG0b/YxbWmLfRWmnxa0s06VbTMCpnBS9zFzQKTwR5cXCzwHIE02Sl8wSZsRI/kgLVJqjSd+t9LVjiG1diPszhdK3A5gR48k5zYMTwscC59sfT799CYKvA8EttbSeXgTr3gJQKl91kR+yTlvyG5uUbLYh9gb+ovltkb6qYtNSRo3kOygsBSzGlKsubf43USWLYK5CLLXoFWyU/CtzLbVDpW2n+m40yN9ukqdvAX9ac/EIgOapcAAAAASUVORK5CYII=">
<meta property="og:locale" content="en_US" />
- <meta property="og:image" content="http://my-netdata.io/images/post.png"/>
+ <meta property="og:image" content="https://cloud.githubusercontent.com/assets/2662304/19168687/f6a567be-8c19-11e6-8561-ce8d589e8346.gif"/>
<meta property="og:url" content="http://my-netdata.io/"/>
<meta property="og:type" content="website"/>
<meta property="og:site_name" content="netdata"/>
var error = 'failed';
if(document.location.toString().startsWith('http://') && url.toString().startsWith('https://'))
- // we penalize https only if the current url is http
- // to allow the user walk through all its servers.
- penaldy = 500;
+ // we penalize https only if the current url is http
+ // to allow the user walk through all its servers.
+ penaldy = 500;
else if(document.location.toString().startsWith('https://') && url.toString().startsWith('http://'))
error = 'can\'t check';
gotoServerMiddleClick = false;
document.getElementById('gotoServerResponse').innerHTML = '<b>Opening new window to ' + NETDATA.registry.machines[guid].name + '<br/><a href="' + finalURL + '">' + url + '</a></b><br/>(check your pop-up blocker if it fails)';
}
- else
+ else {
+ document.getElementById('gotoServerResponse').innerHTML += 'found it! It is at:<br/><small>' + url + '</small>';
document.location = finalURL;
+ }
}
}
else {
if(gotoServerStop === false) {
document.getElementById('gotoServerResponse').innerHTML = '<b>Added all the known URLs for this machine.</b>';
NETDATA.registry.search(guid, function(data) {
- console.log(data);
+ // console.log(data);
len = data.urls.length;
while(len--) {
var url = data.urls[len][1];
- console.log(url);
+ // console.log(url);
if(typeof checked[url] === 'undefined') {
gotoServerValidateRemaining++;
checked[url] = true;
// scroll to a section, without changing the browser history
function scrollToId(hash) {
- if(hash && hash != '') {
+ if(hash && hash != '' && document.getElementById(hash) !== null) {
var offset = $('#' + hash).offset();
if(typeof offset !== 'undefined')
$('html, body').animate({ scrollTop: offset.top }, 0);
function loadBootstrapTable(callback) {
if(bootstrapTableLoaded === false) {
bootstrapTableLoaded === true;
- loadJs(NETDATA.serverDefault + 'lib/bootstrap-table.min.js?v1.11.0', function() {
- loadJs(NETDATA.serverDefault + 'lib/bootstrap-table-export.min.js?v1.11.0', function() {
- loadJs(NETDATA.serverDefault + 'lib/tableExport.js', callback);
+ loadJs(NETDATA.serverDefault + 'lib/bootstrap-table-1.11.0.min.js', function() {
+ loadJs(NETDATA.serverDefault + 'lib/bootstrap-table-export-1.11.0.min.js', function() {
+ loadJs(NETDATA.serverDefault + 'lib/tableExport-1.6.0.min.js', callback);
})
});
}
return t.toLocaleDateString() + space + t.toLocaleTimeString();
}
- function seconds4human(seconds, sfx, space) {
- if(typeof space === 'undefined')
- space = ' ';
+ function seconds4human(seconds, options) {
+ var default_options = {
+ now: 'now',
+ space: ' ',
+ negative_suffix: 'ago',
+ hour: 'hour',
+ hours: 'hours',
+ minute: 'minute',
+ minutes: 'minutes',
+ second: 'second',
+ seconds: 'seconds',
+ and: 'and'
+ };
+
+ if(typeof options !== 'object')
+ options = default_options;
+ else {
+ var x;
+ for(x in default_options) {
+ if(typeof options[x] !== 'string')
+ options[x] = default_options[x];
+ }
+ }
+
+ if(typeof seconds === 'string')
+ seconds = parseInt(seconds);
if(seconds === 0)
- return 'now';
+ return options.now;
var suffix = '';
if(seconds < 0) {
seconds = -seconds;
- if(sfx) suffix = space + 'ago';
+ if(options.negative_suffix !== '') suffix = options.space + options.negative_suffix;
}
var hours = Math.floor(seconds / 3600);
var txt = '';
- if(hours > 1) txt += hours.toString() + space + 'hours';
- else if(hours === 1) txt += hours.toString() + space + 'hour';
+ if(hours > 1) txt += hours.toString() + options.space + options.hours;
+ else if(hours === 1) txt += hours.toString() + options.space + options.hour;
if(hours > 0 && minutes > 0 && seconds == 0)
- txt += space + 'and' + space;
+ txt += options.space + options.and + options.space;
else if(hours > 0 && minutes > 0 && seconds > 0)
- txt += ',' + space;
+ txt += ',' + options.space;
- if(minutes > 1) txt += minutes.toString() + space + 'minutes';
- else if(minutes === 1) txt += minutes.toString() + space + 'minute';
+ if(minutes > 1) txt += minutes.toString() + options.space + options.minutes;
+ else if(minutes === 1) txt += minutes.toString() + options.space + options.minute;
if((minutes > 0 || minutes > 0) && seconds > 0)
- txt += space + 'and' + space;
+ txt += options.space + options.and + options.space;
- if(seconds > 1) txt += seconds.toString() + space + 'seconds';
- else if(seconds === 1) txt += seconds.toString() + space + 'second';
+ if(seconds > 1) txt += Math.floor(seconds).toString() + options.space + options.seconds;
+ else if(seconds === 1) txt += Math.floor(seconds).toString() + options.space + options.second;
return txt + suffix;
}
return '<code>' + alarm.lookup_method + '</code> '
+ dimensions + ', of chart <code>' + alarm.chart + '</code>'
- + ', starting <code>' + seconds4human(alarm.lookup_after + alarm.lookup_before, true) + '</code> and up to <code>' + seconds4human(alarm.lookup_before, true) + '</code>'
+ + ', starting <code>' + seconds4human(alarm.lookup_after + alarm.lookup_before) + '</code> and up to <code>' + seconds4human(alarm.lookup_before) + '</code>'
+ ((alarm.lookup_options)?(', with options <code>' + alarm.lookup_options.replace(' ', ', ') + '</code>'):'')
+ '.';
}
var delay = '';
if((alarm.delay_up_duration > 0 || alarm.delay_down_duration > 0) && alarm.delay_multiplier != 0 && alarm.delay_max_duration > 0) {
if(alarm.delay_up_duration == alarm.delay_down_duration) {
- delay += '<small><br/>hysteresis ' + seconds4human(alarm.delay_up_duration);
+ delay += '<small><br/>hysteresis ' + seconds4human(alarm.delay_up_duration, { negative_suffix: '' });
}
else {
delay = '<small><br/>hysteresis ';
if(alarm.delay_up_duration > 0) {
- delay += 'on escalation <code>' + seconds4human(alarm.delay_up_duration) + '</code>, ';
+ delay += 'on escalation <code>' + seconds4human(alarm.delay_up_duration, { negative_suffix: '' }) + '</code>, ';
}
if(alarm.delay_down_duration > 0) {
- delay += 'on recovery <code>' + seconds4human(alarm.delay_down_duration) + '</code>, ';
+ delay += 'on recovery <code>' + seconds4human(alarm.delay_down_duration, { negative_suffix: '' }) + '</code>, ';
}
}
if(alarm.delay_multiplier != 1.0) {
delay += 'multiplied by <code>' + alarm.delay_multiplier.toString() + '</code>';
- delay += ', up to <code>' + seconds4human(alarm.delay_max_duration) + '</code>';
+ delay += ', up to <code>' + seconds4human(alarm.delay_max_duration, { negative_suffix: '' }) + '</code>';
}
delay += '</small>';
}
- html += '<tr><td width="10%" style="text-align:right">check every</td><td>' + seconds4human(alarm.update_every) + '</td></tr>'
+ html += '<tr><td width="10%" style="text-align:right">check every</td><td>' + seconds4human(alarm.update_every, { negative_suffix: '' }) + '</td></tr>'
+ '<tr><td width="10%" style="text-align:right">execute</td><td><span style="font-family: monospace;">' + alarm.exec + '</span>' + delay + '</td></tr>'
+ '<tr><td width="10%" style="text-align:right">source</td><td><span style="font-family: monospace;">' + alarm.source + '</span></td></tr>'
+ '</table></td></tr>';
field: 'when',
title: 'Event Date',
valign: 'middle',
+ titleTooltip: 'The date and time the even took place',
switchable: false,
sortable: true,
formatter: function(value, row, index) { return timestamp4human(value, ' '); },
field: 'hostname',
title: 'Host',
valign: 'middle',
+ titleTooltip: 'The host that generated this event',
visible: false,
sortable: true
},
{
field: 'unique_id',
title: 'Unique ID',
+ titleTooltip: 'The host unique ID for this event',
valign: 'middle',
visible: false,
sortable: true
{
field: 'alarm_id',
title: 'Alarm ID',
+ titleTooltip: 'The ID of the alarm that generated this event',
valign: 'middle',
visible: false,
sortable: true
{
field: 'alarm_event_id',
title: 'Alarm Event ID',
+ titleTooltip: 'The incremental ID of this event for the given alarm',
valign: 'middle',
visible: false,
sortable: true
{
field: 'chart',
title: 'Chart',
+ titleTooltip: 'The chart the alarm is attached to',
valign: 'middle',
switchable: false,
sortable: true
{
field: 'family',
title: 'Family',
+ titleTooltip: 'The family of the chart the alarm is attached to',
valign: 'middle',
visible: false,
sortable: true
{
field: 'name',
title: 'Alarm',
+ titleTooltip: 'The alarm name that generated this event',
formatter: function(value, row, index) {
return value.toString().replace(/_/g, ' ');
},
{
field: 'old_value',
title: 'Old Value',
+ titleTooltip: 'The value of the alarm, just before this event',
valign: 'middle',
visible: false,
sortable: true
{
field: 'value',
title: 'Value',
+ titleTooltip: 'The value of the alarm, that triggered this event',
formatter: function(value, row, index) {
return ((value !== null)?Math.floor(value):'NaN').toString();
},
{
field: 'units',
title: 'Units',
+ titleTooltip: 'The units of the value of the alarm',
valign: 'middle',
sortable: true
},
{
field: 'old_status',
title: 'Old Status',
+ titleTooltip: 'The status of the alarm, just before this event',
valign: 'middle',
visible: false,
sortable: true
{
field: 'status',
title: 'Status',
+ titleTooltip: 'The status of the alarm, that was set due to this event',
valign: 'middle',
switchable: false,
sortable: true
},
{
field: 'duration',
- title: 'Duration',
- formatter: function(value, row, index) { return seconds4human(value, false, ' '); },
+ title: 'Last Duration',
+ titleTooltip: 'The duration the alarm was at its previous state, just before this event',
+ formatter: function(value, row, index) { return seconds4human(value, { negative_suffix: '', space: ' ', now: 'no time' }); },
valign: 'middle',
visible: false,
sortable: true
{
field: 'non_clear_duration',
title: 'Raised Duration',
- formatter: function(value, row, index) { return seconds4human(value, false, ' '); },
+ titleTooltip: 'The duration the alarm was raised, just before this event',
+ formatter: function(value, row, index) { return seconds4human(value, { negative_suffix: '', space: ' ', now: 'no time' }); },
valign: 'middle',
visible: false,
sortable: true
{
field: 'recipient',
title: 'Recipient',
+ titleTooltip: 'The recipient of this event',
valign: 'middle',
visible: false,
sortable: true
{
field: 'processed',
title: 'Processed Status',
+ titleTooltip: 'True when this event is processed',
valign: 'middle',
visible: false,
sortable: true
{
field: 'updated',
title: 'Updated Status',
+ titleTooltip: 'True when this event has been updated by another event',
valign: 'middle',
visible: false,
sortable: true
{
field: 'updated_by_id',
title: 'Updated By ID',
+ titleTooltip: 'The unique ID of the event that obsoleted this one',
valign: 'middle',
visible: false,
sortable: true
{
field: 'updates_id',
title: 'Updates ID',
+ titleTooltip: 'The unique ID of the event obsoleted because of this event',
valign: 'middle',
visible: false,
sortable: true
{
field: 'exec',
title: 'Script',
+ titleTooltip: 'The script to handle the event notification',
valign: 'middle',
visible: false,
sortable: true
{
field: 'exec_run',
title: 'Script Run At',
+ titleTooltip: 'The date and time the script has been ran',
formatter: function(value, row, index) { return timestamp4human(value, ' '); },
valign: 'middle',
visible: false,
{
field: 'exec_code',
title: 'Script Return Value',
+ titleTooltip: 'The return code of the script',
valign: 'middle',
visible: false,
sortable: true
{
field: 'delay',
title: 'Script Delay',
- formatter: function(value, row, index) { return seconds4human(value, false, ' '); },
+ titleTooltip: 'The hysteresis of the notification',
+ formatter: function(value, row, index) { return seconds4human(value, { negative_suffix: '', space: ' ', now: 'no time' }); },
valign: 'middle',
visible: false,
sortable: true
{
field: 'delay_up_to_timestamp',
title: 'Script Delay Run At',
+ titleTooltip: 'The date and time the script should be run, after hysteresis',
formatter: function(value, row, index) { return timestamp4human(value, ' '); },
valign: 'middle',
visible: false,
{
field: 'info',
title: 'Description',
+ titleTooltip: 'A short description of the alarm',
valign: 'middle',
visible: false,
sortable: true
{
field: 'source',
title: 'Alarm Source',
+ titleTooltip: 'The source of configuration of the alarm',
valign: 'middle',
visible: false,
sortable: true
// callback to add the dashboard info to the
// parallel javascript downloader in netdata
var netdataPrepCallback = function() {
+ NETDATA.requiredCSS.push({
+ url: NETDATA.serverDefault + 'css/bootstrap-toggle-2.2.2.min.css',
+ isAlreadyLoaded: function() { return false; }
+ });
+
NETDATA.requiredJs.push({
- url: NETDATA.serverDefault + 'lib/bootstrap-toggle.min.js',
+ url: NETDATA.serverDefault + 'lib/bootstrap-toggle-2.2.2.min.js',
isAlreadyLoaded: function() { return false; }
});
NETDATA.requiredJs.push({
- url: NETDATA.serverDefault + 'dashboard_info.js?v58',
+ url: NETDATA.serverDefault + 'dashboard_info.js?v20161002-1',
async: false,
isAlreadyLoaded: function() { return false; }
});
</div>
</body>
</html>
-<script type="text/javascript" src="dashboard.js?v58"></script>
+<script type="text/javascript" src="dashboard.js?v20161009-1"></script>