259
260
$('.highlight-tooltip').tooltip({
261
html: true,
262
- delay: {show: 500, hide: 0},
262
+ delay: { show: 500, hide: 0 },
263
container: 'body'
264
});
265
}
464
// --------------------------------------------------------------------
465
// registry call back to render my-netdata menu
466
467
-var netdataRegistryCallback = function (machines_array) {
468
- var el = '';
469
- var a1 = '';
470
- var found = 0, hosted = 0;
471
- var len, i, url, hostname, icon;
467
+function toggleExpandIcon(svgEl) {
468
+ if (svgEl.getAttribute('data-icon') === 'caret-down') {
469
+ svgEl.setAttribute('data-icon', 'caret-up');
470
+ } else {
471
+ svgEl.setAttribute('data-icon', 'caret-down');
472
+ }
473
+}
474
473
- if (options.hosts.length > 1) {
474
- // there are mirrored hosts here
475
+function toggleAgentItem(e, guid) {
476
+ e.stopPropagation();
477
+ e.preventDefault();
478
476
- el += '<li><a href="#" onClick="return false;" style="color: #666;" target="_blank">databases available on this host</a></li>';
477
- a1 += '<li><a href="#" onClick="return false;"><i class="fas fa-info-circle" style="color: #666;"></i></a></li>';
479
+ toggleExpandIcon(e.currentTarget.children[0]);
480
479
- var base = document.location.origin.toString() + document.location.pathname.toString();
480
- if (base.endsWith("/host/" + options.hostname + "/")) {
481
- base = base.substring(0, base.length - ("/host/" + options.hostname + "/").toString().length);
482
- }
481
+ const el = document.querySelector(`.agent-alternate-urls.agent-${guid}`);
482
+ if (el) {
483
+ el.classList.toggle('collapsed');
484
+ }
485
+}
486
484
- if (base.endsWith("/")) {
485
- base = base.substring(0, base.length - 1);
486
- }
487
+// TODO: consider renaming to `truncateString`
488
488
- var master = options.hosts[0].hostname;
489
- var sorted = options.hosts.sort(function (a, b) {
490
- if (a.hostname === master) {
491
- return -1;
492
- }
493
- return naturalSortCompare(a.hostname, b.hostname);
494
- });
489
+/// Enforces a maximum string length while retaining the prefix and the postfix of
490
+/// the string.
491
+function clipString(str, maxLength) {
492
+ if (str.length <= maxLength) {
493
+ return str;
494
+ }
495
496
- i = 0;
497
- len = sorted.length;
498
- while (len--) {
499
- hostname = sorted[i].hostname;
500
- if (hostname === master) {
501
- url = base + "/";
502
- icon = "home";
503
- }
504
- else {
505
- url = base + "/host/" + hostname + "/";
506
- icon = "window-restore";
507
- }
496
+ const spanLength = Math.floor((maxLength - 3) / 2);
497
+ return `${str.substring(0, spanLength)}...${str.substring(str.length - spanLength)}`;
498
+}
499
+
500
+// When you stream metrics from netdata to netdata, the recieving netdata now
501
+// has multiple host databases. It's own, and multiple mirrored. Mirrored databases
502
+// can be accessed with <http://localhost:19999/host/NAME/>
503
+function renderStreamedHosts(options) {
504
+ let html = `<div class="info-item">Databases streamed to this agent</div>`;
505
509
- el += '<li id="registry_server_hosted_' + len.toString() + '"><a class="registry_link" href="' + url + '#" onClick="return gotoHostedModalHandler(\'' + url + '\');">' + hostname + '</a></li>';
510
- a1 += '<li id="registry_action_hosted_' + len.toString() + '"><a class="registry_link" href="' + url + '#" onClick="return gotoHostedModalHandler(\'' + url + '\');"><i class="fas fa-' + icon + '" style="color: #999;"></i></a></li>';
511
- hosted++;
512
- i++;
506
+ var base = document.location.origin.toString() + document.location.pathname.toString();
507
+ if (base.endsWith("/host/" + options.hostname + "/")) {
508
+ base = base.substring(0, base.length - ("/host/" + options.hostname + "/").toString().length);
509
+ }
510
+
511
+ if (base.endsWith("/")) {
512
+ base = base.substring(0, base.length - 1);
513
+ }
514
+
515
+ var master = options.hosts[0].hostname;
516
+ var sorted = options.hosts.sort(function (a, b) {
517
+ if (a.hostname === master) {
518
+ return -1;
519
}
520
+ return naturalSortCompare(a.hostname, b.hostname);
521
+ });
522
+
523
+ for (const s of sorted) {
524
+ let url, icon;
525
+ const hostname = s.hostname;
526
515
- el += '<li role="separator" class="divider"></li>';
516
- a1 += '<li role="separator" class="divider"></li>';
527
+ if (hostname === master) {
528
+ url = `base${'/'}`;
529
+ icon = 'home';
530
+ } else {
531
+ url = `${base}/host/${hostname}/`;
532
+ icon = 'window-restore';
533
+ }
534
+
535
+ html += (
536
+ `<div class="agent-item">
537
+ <a class="registry_link" href="${url}#" onClick="return gotoHostedModalHandler('${url}');">
538
+ <i class="fas fa-${icon}" style="color: #999;"></i>
539
+ </a>
540
+ <a class="registry_link" href="${url}#" onClick="return gotoHostedModalHandler('${url}');">${hostname}</a>
541
+ <div></div>
542
+ </div>`
543
+ )
544
}
545
519
- if (machines_array === null) {
520
- var ret = loadLocalStorage("registryCallback");
521
- if (typeof ret !== 'undefined' && ret !== null) {
522
- machines_array = JSON.parse(ret);
546
+ return html;
547
+}
548
+
549
+function renderMachines(machinesArray) {
550
+ let html = `<div class="info-item">My netdata agents</div>`;
551
+
552
+ if (machinesArray === null) {
553
+ let ret = loadLocalStorage("registryCallback");
554
+ if (ret) {
555
+ machinesArray = JSON.parse(ret);
556
console.log("failed to contact the registry - loaded registry data from browser local storage");
557
}
558
}
559
527
- if (machines_array) {
528
- saveLocalStorage("registryCallback", JSON.stringify(machines_array));
560
+ let found = false;
561
+
562
+ if (machinesArray) {
563
+ saveLocalStorage("registryCallback", JSON.stringify(machinesArray));
564
530
- var machines = machines_array.sort(function (a, b) {
565
+ var machines = machinesArray.sort(function (a, b) {
566
return naturalSortCompare(a.name, b.name);
567
});
568
534
- i = 0;
535
- len = machines.length;
536
- while (len--) {
537
- var u = machines[i++];
538
- found++;
539
- el += '<li id="registry_server_' + u.guid + '"><a class="registry_link" href="' + u.url + '#" onClick="return gotoServerModalHandler(\'' + u.guid + '\');">' + u.name + '</a></li>';
540
- a1 += '<li id="registry_action_' + u.guid + '"><a href="#" onclick="deleteRegistryModalHandler(\'' + u.guid + '\',\'' + u.name + '\',\'' + u.url + '\'); return false;"><i class="fas fa-trash" style="color: #999;"></i></a></li>';
569
+ for (const machine of machines) {
570
+ found = true;
571
+
572
+ const alternateUrlItems = (
573
+ `<div class="agent-alternate-urls agent-${machine.guid} collapsed">
574
+ ${machine.alternate_urls.reduce(
575
+ (str, url) => str + (
576
+ `<div class="agent-item agent-item--alternate">
577
+ <div></div>
578
+ <a href="${url}" title="${url}">${clipString(url, 64)}</a>
579
+ <a href="#" onclick="deleteRegistryModalHandler('${machine.guid}', '${machine.name}', '${url}'); return false;">
580
+ <i class="fas fa-trash" style="color: #777;"></i>
581
+ </a>
582
+ </div>`
583
+ ),
584
+ ''
585
+ )}
586
+ </div>`
587
+ )
588
+
589
+ html += (
590
+ `<div class="agent-item agent-${machine.guid}">
591
+ <i class="fas fa-chart-bar" color: #fff"></i>
592
+ <span>
593
+ <a class="registry_link" href="${machine.url}#" onClick="return gotoServerModalHandler('${machine.guid}');">${machine.name}</a>
594
+ </span>
595
+ <a href="#" onClick="toggleAgentItem(event, '${machine.guid}');">
596
+ <i class="fas fa-caret-down" style="color: #999"></i>
597
+ </a>
598
+ </div>
599
+ ${alternateUrlItems}`
600
+ )
601
}
602
}
603
604
if (!found) {
605
if (machines) {
546
- el += '<li><a href="https://github.com/netdata/netdata/tree/master/registry#netdata-registry" style="color: #666;" target="_blank">your netdata server list is empty...</a></li>';
606
+ html += (
607
+ `<div class="info-item">
608
+ <a href="https://github.com/netdata/netdata/tree/master/registry#netdata-registry" target="_blank">Your netdata server list is empty</a>
609
+ </div>`
610
+ )
611
} else {
548
- el += '<li><a href="https://github.com/netdata/netdata/tree/master/registry#netdata-registry" style="color: #666;" target="_blank">failed to contact the registry...</a></li>';
549
- }
550
-
551
- a1 += '<li><a href="#" onClick="return false;"> </a></li>';
552
-
553
- el += '<li role="separator" class="divider"></li>' +
554
- '<li><a href="//london.netdata.rocks/default.html">UK - London (DigitalOcean.com)</a></li>' +
555
- '<li><a href="//newyork.netdata.rocks/default.html">US - New York (DigitalOcean.com)</a></li>' +
556
- '<li><a href="//sanfrancisco.netdata.rocks/default.html">US - San Francisco (DigitalOcean.com)</a></li>' +
557
- '<li><a href="//atlanta.netdata.rocks/default.html">US - Atlanta (CDN77.com)</a></li>' +
558
- '<li><a href="//frankfurt.netdata.rocks/default.html">Germany - Frankfurt (DigitalOcean.com)</a></li>' +
559
- '<li><a href="//toronto.netdata.rocks/default.html">Canada - Toronto (DigitalOcean.com)</a></li>' +
560
- '<li><a href="//singapore.netdata.rocks/default.html">Japan - Singapore (DigitalOcean.com)</a></li>' +
561
- '<li><a href="//bangalore.netdata.rocks/default.html">India - Bangalore (DigitalOcean.com)</a></li>';
562
- a1 += '<li role="separator" class="divider"></li>' +
563
- '<li><a href="#"> </a></li>' +
564
- '<li><a href="#"> </a></li>' +
565
- '<li><a href="#"> </a></li>' +
566
- '<li><a href="#"> </a></li>' +
567
- '<li><a href="#"> </a></li>' +
568
- '<li><a href="#"> </a></li>' +
569
- '<li><a href="#"> </a></li>' +
570
- '<li><a href="#"> </a></li>';
612
+ el += '<li></li>';
613
+ html += (
614
+ `<div class="info-item">
615
+ <a href="https://github.com/netdata/netdata/tree/master/registry#netdata-registry" target="_blank">Failed to contact the registry</a>
616
+ </div>`
617
+ )
618
+ }
619
+
620
+ html += `<hr />`;
621
+ html += `<div class="info-item">Demo netdata agents</div>`;
622
+
623
+ const demoServers = [
624
+ {url: "//london.netdata.rocks/default.html", title: "UK - London (DigitalOcean.com)"},
625
+ {url: "//newyork.netdata.rocks/default.html", title: "US - New York (DigitalOcean.com)"},
626
+ {url: "//sanfrancisco.netdata.rocks/default.html", title: "US - San Francisco (DigitalOcean.com)"},
627
+ {url: "//atlanta.netdata.rocks/default.html", title: "US - Atlanta (CDN77.com)"},
628
+ {url: "//frankfurt.netdata.rocks/default.html", title: "Germany - Frankfurt (DigitalOcean.com)"},
629
+ {url: "//toronto.netdata.rocks/default.html", title: "Canada - Toronto (DigitalOcean.com)"},
630
+ {url: "//singapore.netdata.rocks/default.html", title: "Japan - Singapore (DigitalOcean.com)"},
631
+ {url: "//bangalore.netdata.rocks/default.html", title: "India - Bangalore (DigitalOcean.com)"},
632
+
633
+ ]
634
+
635
+ for (const server of demoServers) {
636
+ html += (
637
+ `<div class="agent-item">
638
+ <i class="fas fa-chart-bar" color: #fff"></i>
639
+ <a href="${server.url}">${server.title}</a>
640
+ <div></div>
641
+ </div>
642
+ `
643
+ );
644
+ }
645
}
646
573
- el += '<li role="separator" class="divider"></li>';
574
- a1 += '<li role="separator" class="divider"></li>';
647
+ return html;
648
+}
649
+
650
+// Populates the my-netdata menu.
651
+function netdataRegistryCallback(machinesArray) {
652
+ let html = '';
653
576
- el += '<li><a href="https://github.com/netdata/netdata/tree/master/registry#netdata-registry" style="color: #999;" target="_blank">What is this?</a></li>';
577
- a1 += '<li><a href="#" style="color: #999;" onclick="switchRegistryModalHandler(); return false;"><i class="fas fa-cog" style="color: #999;"></i></a></li>';
654
+ if (options.hosts.length > 1) {
655
+ html += renderStreamedHosts(options) + `<hr />`;
656
+ }
657
579
- document.getElementById('mynetdata_servers').innerHTML = el;
580
- document.getElementById('mynetdata_servers2').innerHTML = el;
581
- document.getElementById('mynetdata_actions1').innerHTML = a1;
658
+ html += renderMachines(machinesArray);
659
+
660
+ html += (
661
+ `<hr />
662
+ <div class="agent-item">
663
+ <i class="fas fa-cog""></i>
664
+ <a href="#" onclick="switchRegistryModalHandler(); return false;">Switch Identity</a>
665
+ <div></div>
666
+ </div>
667
+ <div class="agent-item">
668
+ <i class="fas fa-question-circle""></i>
669
+ <a href="https://github.com/netdata/netdata/tree/master/registry#netdata-registry" target="_blank">What is this?</a>
670
+ <div></div>
671
+ </div>`
672
+ )
673
+
674
+ const el = document.getElementById('my-netdata-dropdown-content')
675
+ el.classList.add(`theme-${netdataTheme}`);
676
+ el.innerHTML = html;
677
678
gotoServerInit();
679
};
976
var offset = $('#' + hash).offset();
977
if (typeof offset !== 'undefined') {
978
//console.log('scrolling to ' + hash + ' at ' + offset.top.toString());
884
- $('html, body').animate({scrollTop: offset.top - 30}, 0);
979
+ $('html, body').animate({ scrollTop: offset.top - 30 }, 0);
980
}
981
}
982
1028
}
1029
1030
if (typeof this.sparklines_registry[key] === 'undefined') {
936
- this.sparklines_registry[key] = {count: 1};
1031
+ this.sparklines_registry[key] = { count: 1 };
1032
} else {
1033
this.sparklines_registry[key].count++;
1034
}
1628
1629
sidebar += '<li class="" style="padding-top:15px;"><a href="https://github.com/netdata/netdata/wiki/Add-more-charts-to-netdata" target="_blank"><i class="fas fa-plus"></i> add more charts</a></li>';
1630
sidebar += '<li class=""><a href="https://github.com/netdata/netdata/wiki/Add-more-alarms-to-netdata" target="_blank"><i class="fas fa-plus"></i> add more alarms</a></li>';
1536
- sidebar += '<li class="" style="margin:20px;color:#666;"><small>netdata on <b>' + data.hostname.toString() + '</b>, collects every ' + ((data.update_every === 1) ? 'second' : data.update_every.toString() + ' seconds') + ' <b>' + data.dimensions_count.toLocaleString() + '</b> metrics, presented as <b>' + data.charts_count.toLocaleString() + '</b> charts and monitored by <b>' + data.alarms_count.toLocaleString() + '</b> alarms, using ' + Math.round(data.rrd_memory_bytes / 1024 / 1024).toLocaleString() + ' MB of memory for ' + NETDATA.seconds4human(data.update_every * data.history, {space: ' '}) + ' of real-time history.<br/> <br/><b>netdata</b><br/>v' + data.version.toString() + '</small></li>';
1631
+ sidebar += '<li class="" style="margin:20px;color:#666;"><small>netdata on <b>' + data.hostname.toString() + '</b>, collects every ' + ((data.update_every === 1) ? 'second' : data.update_every.toString() + ' seconds') + ' <b>' + data.dimensions_count.toLocaleString() + '</b> metrics, presented as <b>' + data.charts_count.toLocaleString() + '</b> charts and monitored by <b>' + data.alarms_count.toLocaleString() + '</b> alarms, using ' + Math.round(data.rrd_memory_bytes / 1024 / 1024).toLocaleString() + ' MB of memory for ' + NETDATA.seconds4human(data.update_every * data.history, { space: ' ' }) + ' of real-time history.<br/> <br/><b>netdata</b><br/>v' + data.version.toString() + '</small></li>';
1632
sidebar += '</ul>';
1633
div.innerHTML = html;
1634
document.getElementById('sidebar').innerHTML = sidebar;
1745
url: url,
1746
cache: true,
1747
dataType: "script",
1653
- xhrFields: {withCredentials: true} // required for the cookie
1748
+ xhrFields: { withCredentials: true } // required for the cookie
1749
})
1750
.fail(function () {
1751
alert('Cannot load required JS library: ' + url);
1852
if (data === null) {
1853
document.getElementById('alarms_active').innerHTML =
1854
document.getElementById('alarms_all').innerHTML =
1760
- document.getElementById('alarms_log').innerHTML =
1761
- 'failed to load alarm data!';
1855
+ document.getElementById('alarms_log').innerHTML =
1856
+ 'failed to load alarm data!';
1857
return;
1858
}
1859
1903
1904
return '<code>' + alarm.lookup_method + '</code> '
1905
+ dimensions + ', of chart <code>' + alarm.chart + '</code>'
1811
- + ', starting <code>' + NETDATA.seconds4human(alarm.lookup_after + alarm.lookup_before, {space: ' '}) + '</code> and up to <code>' + NETDATA.seconds4human(alarm.lookup_before, {space: ' '}) + '</code>'
1906
+ + ', starting <code>' + NETDATA.seconds4human(alarm.lookup_after + alarm.lookup_before, { space: ' ' }) + '</code> and up to <code>' + NETDATA.seconds4human(alarm.lookup_before, { space: ' ' }) + '</code>'
1907
+ ((alarm.lookup_options) ? (', with options <code>' + alarm.lookup_options.replace(/ /g, ', ') + '</code>') : '')
1908
+ '.';
1909
}
1980
}
1981
1982
html += '<tr><td width="10%" style="text-align:right">check every</td><td>' + NETDATA.seconds4human(alarm.update_every, {
1888
- space: ' ',
1889
- negative_suffix: ''
1890
- }) + '</td></tr>'
1983
+ space: ' ',
1984
+ negative_suffix: ''
1985
+ }) + '</td></tr>'
1986
+ ((has_alarm === true) ? ('<tr><td width="10%" style="text-align:right">execute</td><td><span style="font-family: monospace;">' + alarm.exec + '</span>' + delay + '</td></tr>') : '')
1987
+ '<tr><td width="10%" style="text-align:right">source</td><td><span style="font-family: monospace;">' + alarm.source + '</span></td></tr>'
1988
+ '</table></td></tr>';
2027
// not found - this should never happen!
2028
if (typeof chart === 'undefined') {
2029
console.log('WARNING: alarm ' + x + ' is linked to chart ' + alarm.chart + ', which is not found in the list of chart got from the server.');
1935
- chart = {priority: 9999999};
2030
+ chart = { priority: 9999999 };
2031
}
2032
else if (typeof chart.menu !== 'undefined' && typeof chart.submenu !== 'undefined')
2033
// the family based on the chart
2164
2165
switch (row.status) {
2166
case 'CRITICAL':
2072
- return {classes: 'danger'};
2167
+ return { classes: 'danger' };
2168
break;
2169
case 'WARNING':
2075
- return {classes: 'warning'};
2170
+ return { classes: 'warning' };
2171
break;
2172
case 'UNDEFINED':
2078
- return {classes: 'info'};
2173
+ return { classes: 'info' };
2174
break;
2175
case 'CLEAR':
2081
- return {classes: 'success'};
2176
+ return { classes: 'success' };
2177
break;
2178
}
2179
return {};
2361
formatter: function (value, row, index) {
2362
void (row);
2363
void (index);
2269
- return NETDATA.seconds4human(value, {negative_suffix: '', space: ' ', now: 'no time'});
2364
+ return NETDATA.seconds4human(value, { negative_suffix: '', space: ' ', now: 'no time' });
2365
},
2366
align: 'center',
2367
valign: 'middle',
2375
formatter: function (value, row, index) {
2376
void (row);
2377
void (index);
2283
- return NETDATA.seconds4human(value, {negative_suffix: '', space: ' ', now: 'no time'});
2378
+ return NETDATA.seconds4human(value, { negative_suffix: '', space: ' ', now: 'no time' });
2379
},
2380
align: 'center',
2381
valign: 'middle',
2507
void (row);
2508
void (index);
2509
2415
- return NETDATA.seconds4human(value, {negative_suffix: '', space: ' ', now: 'no time'});
2510
+ return NETDATA.seconds4human(value, { negative_suffix: '', space: ' ', now: 'no time' });
2511
},
2512
align: 'center',
2513
valign: 'middle',
2727
url: 'version.txt',
2728
async: true,
2729
cache: false,
2635
- xhrFields: {withCredentials: true} // required for the cookie
2730
+ xhrFields: { withCredentials: true } // required for the cookie
2731
})
2732
.done(function (data) {
2733
data = data.replace(/(\r\n|\n|\r| |\t)/gm, "");
2978
bytes_per_point_disk: 1.9,
2979
2980
compress: function (s) {
2886
- return btoa(pako.deflate(s, {to: 'string'}));
2981
+ return btoa(pako.deflate(s, { to: 'string' }));
2982
},
2983
2984
compressed_length: function (s) {
2986
},
2987
2988
uncompress: function (s) {
2894
- return pako.inflate(atob(s), {to: 'string'});
2989
+ return pako.inflate(atob(s), { to: 'string' });
2990
}
2991
},
2992
2995
bytes_per_point_disk: 3.2,
2996
2997
compress: function (s) {
2903
- return pako.deflate(s, {to: 'string'});
2998
+ return pako.deflate(s, { to: 'string' });
2999
},
3000
3001
compressed_length: function (s) {
3003
},
3004
3005
uncompress: function (s) {
2911
- return pako.inflate(s, {to: 'string'});
3006
+ return pako.inflate(s, { to: 'string' });
3007
}
3008
},
3009
3804
animated: 'fade',
3805
trigger: 'hover',
3806
html: true,
3712
- delay: {show: 500, hide: 0},
3807
+ delay: { show: 500, hide: 0 },
3808
container: 'body'
3809
});
3810
$('[data-toggle="popover"]').popover();
3883
3884
// scroll to the position we had open before the modal
3885
$('html, body')
3791
- .animate({scrollTop: scrollPos}, 0);
3886
+ .animate({ scrollTop: scrollPos }, 0);
3887
3888
// unpause netdata, if we paused it
3889
if (netdata_paused_on_modal === true) {
3983
// ------------------------------------------------------------------------
3984
// my-netdata menu
3985
3891
- Ps.initialize(document.getElementById('myNetdataDropdownUL'), {
3986
+ Ps.initialize(document.getElementById('my-netdata-dropdown-content'), {
3987
wheelSpeed: 1,
3988
wheelPropagation: false,
3989
swipePropagation: false,
4008
});
4009
})
4010
.on('shown.bs.dropdown', function () {
3916
- Ps.update(document.getElementById('myNetdataDropdownUL'));
4011
+ Ps.update(document.getElementById('my-netdata-dropdown-content'));
4012
})
4013
.on('hidden.bs.dropdown', function () {
4014
NETDATA.unpause();
4040
.on('hidden.bs.modal', function () {
4041
document.getElementById('alarms_active').innerHTML =
4042
document.getElementById('alarms_all').innerHTML =
3948
- document.getElementById('alarms_log').innerHTML =
3949
- 'loading...';
4043
+ document.getElementById('alarms_log').innerHTML =
4044
+ 'loading...';
4045
});
4046
4047
// ------------------------------------------------------------------------
4091
if ($this.hasClass('less')) {
4092
$this.removeClass('less');
4093
$this.html(config.moreText);
3999
- $this.parent().prev().animate({'height': '0' + '%'}, 0, function () {
4094
+ $this.parent().prev().animate({ 'height': '0' + '%' }, 0, function () {
4095
$this.parent().prev().prev().show();
4096
}).hide(0, function () {
4097
config.onLess();
4100
} else {
4101
$this.addClass('less');
4102
$this.html(config.lessText);
4008
- $this.parent().prev().animate({'height': '100' + '%'}, 0, function () {
4103
+ $this.parent().prev().animate({ 'height': '100' + '%' }, 0, function () {
4104
$this.parent().prev().prev().hide();
4105
}).show(0, function () {
4106
config.onMore();
4264
4265
NETDATA.onresizeCallback = function () {
4266
Ps.update(document.getElementById('sidebar'));
4172
- Ps.update(document.getElementById('myNetdataDropdownUL'));
4267
+ Ps.update(document.getElementById('my-netdata-dropdown-content'));
4268
};
4269
NETDATA.onresizeCallback();
4270