Support for aggregate node view (#5902)

* Introduce sign-in banner

* Show/hide sign-in banner

* Improvements

* Fixed banner for white theme.

* Preliminary work on integrating console with agent

* Updated console

* Fetch js and css from cloud #431

* Minor

* Fixed for better console embedding

* Fixed a problem with the Makefile

* Minor

* Dynamically generate index fragment based on cloudBaseURL

* Relative path to console

* Added cache-busters

* Add Nodes view access

* Improved console/index.html

* Fixes in console/index

* Version bump

* Removed extraneous react import (thanks Nicolas)

* Use netdataNoBootstrap

* Use white theme

* Touch agent API call (updates lastseen timestamp)

* Revert to API version 1

* Move touch to init cloud

* Remove logs

* Updated js file href

* Nodes view on unsigned redirect

* Revert yellow color

* Remove comment

* Beta color update

* Move styles to CSS

* Cloud console link fix

* Remove cloudBaseUrl

* Use local dashboard.js, duh!

* Added GoogleTagManager

* Remove duplicate dashboard.js

* Analytics fix

Analytics fix
This commit is contained in:
George Moschovitis 2019-05-15 16:50:01 +03:00 committed by Chris Akritidis
parent 288787a54c
commit 4721ed4f14
8 changed files with 250 additions and 100 deletions

1
.gitignore vendored
View File

@ -130,6 +130,7 @@ cmake_install.cmake
.jetbrains*
.DS_Store
webcopylocal*
contrib/debian/changelog

View File

@ -69,6 +69,17 @@ dist_web_DATA = \
version.txt \
$(NULL)
webconsoledir=$(webdir)/console
dist_webconsole_DATA = \
console/index.html \
$(NULL)
webstaticdir=$(webdir)/static/img
dist_webstatic_DATA = \
static/img/netdata-logomark.svg \
$(NULL)
weblibdir=$(webdir)/lib
dist_weblib_DATA = \
lib/bootstrap-3.3.7.min.js \

View File

@ -0,0 +1,72 @@
<!DOCTYPE html>
<html>
<head>
<title>Netdata Console</title>
<meta name="application-name" content="netdata" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<link rel="icon" href="/favicon.ico" />
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" />
<!-- Google Tag Manager -->
<script>(function (w, d, s, l, i) {
w[l] = w[l] || []; w[l].push({
'gtm.start':
new Date().getTime(), event: 'gtm.js'
}); var f = d.getElementsByTagName(s)[0],
j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src =
'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', 'GTM-N6CBMJD');
googleTagManager = window.dataLayer || [];
</script>
<!-- End Google Tag Manager -->
<script>
function loadJSFile(filename) {
const s = document.createElement("script")
s.setAttribute("type", "text/javascript")
s.setAttribute("src", filename)
document.getElementsByTagName("head")[0].appendChild(s)
}
function loadCSSFile(filename) {
const l = document.createElement("link")
l.setAttribute("rel", "stylesheet")
l.setAttribute("type", "text/css")
l.setAttribute("href", filename)
document.getElementsByTagName("head")[0].appendChild(l)
}
var cloudBaseURL = localStorage.getItem("cloud.baseURL") || "https://netdata.cloud"
loadCSSFile(`${cloudBaseURL}/static/console/main.css?v=4`)
</script>
</head>
<body class="mdc-theme--background mdc-typography">
<!-- Google Tag Manager (noscript) -->
<noscript>
<iframe src="https://www.googletagmanager.com/ns.html?id=GTM-N6CBMJD" height="0" width="0"
style="display:none;visibility:hidden"></iframe>
</noscript>
<!-- End Google Tag Manager (noscript) -->
<main id="app" class="console-app" data-host="agent"></main>
<script>
const main = document.getElementById("app")
main.setAttribute("data-static-base-url", cloudBaseURL)
main.setAttribute("data-api-base-url", cloudBaseURL)
main.setAttribute("data-api-base-url-v2", cloudBaseURL)
loadJSFile(`${cloudBaseURL}/static/console/main.js?v=4`)
</script>
<script>
var netdataTheme = "white"
var netdataNoBootstrap = true
</script>
<script type="text/javascript" src="/dashboard.js?v20190515"></script>
</body>
</html>

View File

@ -124,6 +124,7 @@
</div>
<nav class="collapse navbar-collapse navbar-right" role="navigation">
<ul class="nav navbar-nav">
<li title="Nodes view" data-toggle="tooltip" data-placement="bottom"><a onclick="openAuthenticatedUrl('console/index.html');" class="btn" target="_blank"><i class="fas fa-tv"></i>&nbsp;<span class="hidden-sm hidden-md">Nodes<sup class="beta"> beta</sup></span></a></li>
<li id="alarmsButton" title="check the health monitoring alarms and their log" data-toggle="tooltip" data-placement="bottom"><a href="#" class="btn" data-toggle="modal" data-target="#alarmsModal"><i class="fas fa-bell"></i>&nbsp;<span class="hidden-sm hidden-md">Alarms&nbsp;</span><span id="alarms_count_badge" class="badge"></span></a></li>
<li title="change dashboard settings" data-toggle="tooltip" data-placement="bottom"><a href="#" class="btn" data-toggle="modal" data-target="#optionsModal"><i class="fas fa-cog"></i>&nbsp;<span class="hidden-sm hidden-md">Settings</span></a></li>
<li title="check for netdata updates<br/>you should keep your netdata updated" data-toggle="tooltip" data-placement="bottom" class="hidden-sm" id="updateButton"><a href="#" class="btn" data-toggle="modal" data-target="#updateModal"><i class="fas fa-cloud-download-alt"></i> <span class="hidden-sm hidden-md">Update </span><span id="update_badge" class="badge"></span></a></li>

View File

@ -713,3 +713,7 @@ body.modal-open {
margin-left: 5px;
color: #17CE8A;
}
.beta {
color:#FFCC00;
}

View File

@ -704,6 +704,14 @@ function restrictMyNetdataMenu() {
</div>`);
}
function openAuthenticatedUrl(url) {
if (isSignedIn()) {
window.open(url);
} else {
window.open(`${NETDATA.registry.cloudBaseURL}/account/sign-in-agent?id=${NETDATA.registry.machine_guid}&name=${encodeURIComponent(NETDATA.registry.hostname)}&origin=${encodeURIComponent(window.location.origin + "/")}`);
}
}
function renderMyNetdataMenu(machinesArray) {
const el = document.getElementById('my-netdata-dropdown-content');
el.classList.add(`theme-${netdataTheme}`);
@ -766,6 +774,11 @@ function renderMyNetdataMenu(machinesArray) {
if (!isSignedIn()) {
html += (
`<div class="agent-item">
<i class="fas fa-tv"></i>
<a onClick="openAuthenticatedUrl('console/index.html');" target="_blank">Nodes<sup class="beta"> beta</sup></a>
<div></div>
</div>
<div class="agent-item">
<i class="fas fa-cog""></i>
<a href="#" onclick="switchRegistryModalHandler(); return false;">Switch Identity</a>
<div></div>
@ -779,6 +792,11 @@ function renderMyNetdataMenu(machinesArray) {
} else {
html += (
`<div class="agent-item">
<i class="fas fa-tv"></i>
<a onclick="openAuthenticatedUrl('console/index.html');" target="_blank">Nodes<sup class="beta"> beta</sup></a>
<div></div>
</div>
<div class="agent-item">
<i class="fas fa-sync"></i>
<a href="#" onclick="showSyncModal(); return false">Synchronize with netdata.cloud</a>
<div></div>
@ -4599,6 +4617,36 @@ function getCloudAccountAgents() {
});
}
/** Updates the lastAccessTime and accessCount properties of the agent for the account. */
function touchAgent() {
if (!isSignedIn()) {
return [];
}
const touchUrl = `${NETDATA.registry.cloudBaseURL}/api/v1/agents/${NETDATA.registry.machine_guid}/touch?account_id=${cloudAccountID}`;
return fetch(
touchUrl,
{
method: "post",
body: "",
mode: "cors",
headers: {
"Authorization": `Bearer ${cloudToken}`
}
}
).then((response) => {
if (!response.ok) {
throw Error("Cannot touch agent" + JSON.stringify(response));
}
return response.json();
}).then((payload) => {
}).catch(function (error) {
console.log(error);
return null;
});
}
// https://github.com/netdata/hub/issues/128
function postCloudAccountAgents(agentsToSync) {
if (!isSignedIn()) {
@ -4792,9 +4840,15 @@ function renderAccountUI() {
container.removeAttribute("title");
container.removeAttribute("data-original-title");
container.removeAttribute("data-placement");
// <a href="/console/index.html#/charts/${NETDATA.registry.machine_guid}" target="_blank" class="btn">
container.innerHTML = (
`<a href="#" class="dropdown-toggle" data-toggle="dropdown"><span id="amc-account-name"></span> <strong class="caret"></strong></a>
<ul id="cloud-menu" class="dropdown-menu scrollable-menu inpagemenu" role="menu">
<li>
<a onclick="openAuthenticatedUrl('console/index.html');" target="_blank" class="btn">
<i class="fas fa-tv"></i>&nbsp;&nbsp;<span class="hidden-sm hidden-md">Nodes<sup class="beta"> beta</sup></span>
</a>
</li>
<li>
<a href="#" class="btn" onclick="signOutDidClick(event); return false">
<i class="fas fa-sign-out-alt"></i>&nbsp;&nbsp;<span class="hidden-sm hidden-md">Sign Out</span>
@ -4995,6 +5049,7 @@ function initCloud() {
cloudSSOInit();
}
touchAgent();
renderAccountUI();
}

View File

@ -0,0 +1,3 @@
<svg width="1723" height="1723" viewBox="0 0 1723 1723" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.628784 849.678C0.628784 473.909 235.042 153.621 563.766 30.7914C701.438 19.0613 843.892 50.2449 970.557 129.297C1052.47 180.42 1119.71 246.528 1170.96 321.982C1161.21 207.568 1122.97 96.4678 1058.94 0.187012C1220.56 38.587 1364.64 123.126 1476.91 239.343C1518.34 297.634 1548.55 365.545 1563.67 440.489C1578.54 514.244 1577.35 587.545 1562.5 656.661C1601.04 613.105 1632.22 563.24 1654.63 509.251C1698.41 613.852 1722.63 728.899 1722.63 849.678C1722.63 1331.55 1337.15 1722.19 861.629 1722.19C386.112 1722.19 0.628784 1331.55 0.628784 849.678ZM1178.87 1369.04C1286.71 1369.04 1374.13 1280.45 1374.13 1171.17C1374.13 1061.88 1286.71 973.293 1178.87 973.293C1071.03 973.293 983.603 1061.88 983.603 1171.17C983.603 1280.45 1071.03 1369.04 1178.87 1369.04Z" fill="#00C853"/>
</svg>

After

Width:  |  Height:  |  Size: 934 B

View File

@ -0,0 +1,3 @@
<svg width="1723" height="1723" viewBox="0 0 1723 1723" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M0.628784 849.678C0.628784 473.909 235.042 153.621 563.766 30.7914C701.438 19.0613 843.892 50.2449 970.557 129.297C1052.47 180.42 1119.71 246.528 1170.96 321.982C1161.21 207.568 1122.97 96.4678 1058.94 0.187012C1220.56 38.587 1364.64 123.126 1476.91 239.343C1518.34 297.634 1548.55 365.545 1563.67 440.489C1578.54 514.244 1577.35 587.545 1562.5 656.661C1601.04 613.105 1632.22 563.24 1654.63 509.251C1698.41 613.852 1722.63 728.899 1722.63 849.678C1722.63 1331.55 1337.15 1722.19 861.629 1722.19C386.112 1722.19 0.628784 1331.55 0.628784 849.678ZM1178.87 1369.04C1286.71 1369.04 1374.13 1280.45 1374.13 1171.17C1374.13 1061.88 1286.71 973.293 1178.87 973.293C1071.03 973.293 983.603 1061.88 983.603 1171.17C983.603 1280.45 1071.03 1369.04 1178.87 1369.04Z" fill="#00C853"/>
</svg>

After

Width:  |  Height:  |  Size: 934 B