diff options
Diffstat (limited to 'web/gui/main.js')
-rw-r--r-- | web/gui/main.js | 100 |
1 files changed, 34 insertions, 66 deletions
diff --git a/web/gui/main.js b/web/gui/main.js index 0635b07a..5bf11e5f 100644 --- a/web/gui/main.js +++ b/web/gui/main.js @@ -499,10 +499,26 @@ function toggleAgentItem(e, guid) { // When you stream metrics from netdata to netdata, the recieving netdata now // has multiple host databases. It's own, and multiple mirrored. Mirrored databases // can be accessed with <http://localhost:19999/host/NAME/> +const OLD_DASHBOARD_SUFFIX = "old" +let isOldSuffix = true +try { + const currentScriptMainJs = document.currentScript; + const mainJsSrc = currentScriptMainJs.getAttribute("src") + isOldSuffix = mainJsSrc.startsWith("../main.js") +} catch { + console.warn("current script not detecting, assuming the dashboard is running with /old suffix") +} + +function transformWithOldSuffix(url) { + return isOldSuffix ? `../${url}` : url +} + function renderStreamedHosts(options) { let html = `<div class="info-item">Databases streamed to this agent</div>`; - var base = document.location.origin.toString() + document.location.pathname.toString(); + var base = document.location.origin.toString() + + document.location.pathname.toString() + .replace(isOldSuffix ? `/${OLD_DASHBOARD_SUFFIX}` : "", ""); if (base.endsWith("/host/" + options.hostname + "/")) { base = base.substring(0, base.length - ("/host/" + options.hostname + "/").toString().length); } @@ -536,10 +552,10 @@ function renderStreamedHosts(options) { displayedDatabases = true; if (hostname === master) { - url = `${base}/`; + url = isOldSuffix ? `${base}/${OLD_DASHBOARD_SUFFIX}/` : `${base}/`; icon = 'home'; } else { - url = `${base}/host/${hostname}/`; + url = isOldSuffix ? `${base}/host/${hostname}/${OLD_DASHBOARD_SUFFIX}/` : `${base}/host/${hostname}/`; icon = 'window-restore'; } @@ -707,10 +723,9 @@ function clearMyNetdataMenu() { } function errorMyNetdataMenu() { - setMyNetdataMenu(`<div class="agent-item" style="white-space: nowrap"> + setMyNetdataMenu(`<div class="agent-item" style="padding: 0 8px"> <i class="fas fa-exclamation-triangle" style="color: red"></i> - Cannot load known netdata agents from netdata.cloud! - <div></div> + Cannot load known Netdata agents from Netdata Cloud! Please make sure you have the latest version of Netdata. </div>`); } @@ -791,11 +806,6 @@ function renderMyNetdataMenu(machinesArray) { if (!isSignedIn()) { html += ( `<div class="agent-item"> - <i class="fas fa-tv"></i> - <a onClick="openAuthenticatedUrl('console.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> @@ -965,7 +975,7 @@ function gotoServerModalHandler(guid) { if (!isSignedIn()) { // When the registry is enabled, if the user's known URLs are not working - // we consult the registry to get additional URLs. + // we consult the registry to get additional URLs. setTimeout(function () { if (gotoServerStop === false) { document.getElementById('gotoServerResponse').innerHTML = '<b>Added all the known URLs for this machine.</b>'; @@ -1805,8 +1815,8 @@ function renderPage(menus, data) { const isMemoryModeDbEngine = data.memory_mode === "dbengine"; - sidebar += '<li class="" style="padding-top:15px;"><a href="https://github.com/netdata/netdata/blob/master/docs/Add-more-charts-to-netdata.md#add-more-charts-to-netdata" target="_blank"><i class="fas fa-plus"></i> add more charts</a></li>'; - sidebar += '<li class=""><a href="https://github.com/netdata/netdata/tree/master/health#Health-monitoring" target="_blank"><i class="fas fa-plus"></i> add more alarms</a></li>'; + sidebar += '<li class="" style="padding-top:15px;"><a href="https://docs.netdata.cloud/collectors/quickstart/" target="_blank"><i class="fas fa-plus"></i> Add more charts</a></li>'; + sidebar += '<li class=""><a href="https://docs.netdata.cloud/health/quickstart/" target="_blank"><i class="fas fa-plus"></i> Add more alarms</a></li>'; sidebar += '<li class="" style="margin:20px;color:#666;"><small>Every ' + ((data.update_every === 1) ? 'second' : data.update_every.toString() + ' seconds') + ', ' + 'Netdata collects <strong>' + data.dimensions_count.toLocaleString() + '</strong> metrics on ' + @@ -1818,7 +1828,7 @@ function renderPage(menus, data) { if (!isMemoryModeDbEngine) { sidebar += '<br /> <br />Get more history by ' + - '<a href="https://docs.netdata.cloud/docs/configuration-guide/#increase-the-metrics-retention-period" target=_blank>configuring Netdata\'s <strong>history</strong></a> or using the <a href="https://docs.netdata.cloud/database/engine/" target=_blank>DB engine.</a>' + '<a href="https://docs.netdata.cloud/docs/configuration-guide/#increase-the-metrics-retention-period" target=_blank>configuring Netdata\'s <strong>history</strong></a> or using the <a href="https://docs.netdata.cloud/database/engine/" target=_blank>DB engine.</a>'; } sidebar += '<br/> <br/><strong>netdata</strong><br/>' + data.version.toString() + '</small></li>'; @@ -1933,7 +1943,7 @@ function renderChartsAndMenu(data) { function loadJs(url, callback) { $.ajax({ - url: url, + url: url.startsWith("http") ? url : transformWithOldSuffix(url), cache: true, dataType: "script", xhrFields: { withCredentials: true } // required for the cookie @@ -1980,7 +1990,7 @@ function loadBootstrapSlider(callback) { if (bootstrapSliderLoaded === false) { bootstrapSliderLoaded = true; loadJs('lib/bootstrap-slider-10.0.0.min.js', function () { - NETDATA._loadCSS('css/bootstrap-slider-10.0.0.min.css'); + NETDATA._loadCSS(transformWithOldSuffix("css/bootstrap-slider-10.0.0.min.css")); callback(); }); } else { @@ -4806,11 +4816,7 @@ function signInDidClick(e) { } function shouldShowSignInBanner() { - if (isSignedIn()) { - return false; - } - - return localStorage.getItem("signInBannerClosed") != "true"; + return false; } function closeSignInBanner() { @@ -4894,43 +4900,6 @@ function signOut() { cloudSSOSignOut(); } -function renderAccountUI() { - if (!NETDATA.registry.isCloudEnabled) { - return - } - - const container = document.getElementById("account-menu-container"); - if (isSignedIn()) { - container.removeAttribute("title"); - container.removeAttribute("data-original-title"); - container.removeAttribute("data-placement"); - 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.html');" target="_blank" class="btn"> - <i class="fas fa-tv"></i> <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> <span class="hidden-sm hidden-md">Sign Out</span> - </a> - </li> - </ul>` - ) - document.getElementById("amc-account-name").textContent = cloudAccountName; // Anti-XSS - } else { - container.setAttribute("data-original-title", "sign in"); - container.setAttribute("data-placement", "bottom"); - container.innerHTML = ( - `<a href="#" class="btn sign-in-btn theme-${netdataTheme}" onclick="signInDidClick(event); return false"> - <i class="fas fa-sign-in-alt"></i> <span class="hidden-sm hidden-md">Sign In</span> - </a>` - ) - } -} - function handleMessage(e) { switch (e.data.type) { case "sign-in": @@ -4956,13 +4925,13 @@ function handleSignInMessage(e) { netdataRegistryCallback(registryAgents); if (e.data.redirectURI && !window.location.href.includes(e.data.redirectURI)) { - window.location.replace(e.data.redirectURI); + // lgtm false-positive - redirectURI does not come from user input, but from iframe callback + window.location.replace(e.data.redirectURI); // lgtm[js/client-side-unvalidated-url-redirection] } } function handleSignOutMessage(e) { clearCloudVariables(); - renderAccountUI(); renderMyNetdataMenu(registryAgents); } @@ -5116,7 +5085,6 @@ function initCloud() { } touchAgent(); - renderAccountUI(); } // This callback is called after NETDATA.registry is initialized. @@ -5128,7 +5096,7 @@ function netdataRegistryCallback(machinesArray) { registryAgents = machinesArray; if (isSignedIn()) { - // We call getCloudAccountAgents() here because it requires that + // We call getCloudAccountAgents() here because it requires that // NETDATA.registry is initialized. clearMyNetdataMenu(); getCloudAccountAgents().then((agents) => { @@ -5154,8 +5122,8 @@ function netdataRegistryCallback(machinesArray) { } }; -// If we know the cloudBaseURL and agentID from local storage render (eagerly) -// the account ui before receiving the definitive response from the web server. +// If we know the cloudBaseURL and agentID from local storage render (eagerly) +// the account ui before receiving the definitive response from the web server. // This improves the perceived performance. function tryFastInitCloud() { const baseURL = localStorage.getItem("cloud.baseURL"); @@ -5183,5 +5151,5 @@ if (document.readyState === "complete") { if (document.readyState === "complete") { initializeApp(); } - }) + }); } |