Package: guix-patches;
Reported by: Léo Le Bouter <lle-bout <at> zaclys.net>
Date: Thu, 11 Feb 2021 08:11:02 UTC
Severity: normal
Tags: patch
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Léo Le Bouter <lle-bout <at> zaclys.net> To: guix-patches <at> gnu.org Cc: Léo Le Bouter <lle-bout <at> zaclys.net> Subject: [PATCH] gnu: Add netdata. Date: Thu, 11 Feb 2021 09:09:44 +0100
* gnu/packages/monitoring.scm (netdata): New variable. * gnu/packages/patches/netdata-0001-use-system-python.patch, gnu/packages/patches/netdata-0002-use-system-exim4.patch, gnu/packages/patches/netdata-0003-use-python3.patch, gnu/packages/patches/netdata-0004-use-sh.patch, gnu/packages/patches/netdata-0005-use-bash.patch, gnu/packages/patches/netdata-no-files-in-etc-and-var.patch, gnu/packages/patches/netdata-web-remove-antifeatures-spyware.patch: New patches. * gnu/local.mk (dist_patch_DATA): Register them. --- gnu/local.mk | 7 + gnu/packages/monitoring.scm | 106 + .../netdata-0001-use-system-python.patch | 131 + .../netdata-0002-use-system-exim4.patch | 12 + .../patches/netdata-0003-use-python3.patch | 29 + .../patches/netdata-0004-use-sh.patch | 12 + .../patches/netdata-0005-use-bash.patch | 13 + .../netdata-no-files-in-etc-and-var.patch | 129 + ...data-web-remove-antifeatures-spyware.patch | 4466 +++++++++++++++++ 9 files changed, 4905 insertions(+) create mode 100644 gnu/packages/patches/netdata-0001-use-system-python.patch create mode 100644 gnu/packages/patches/netdata-0002-use-system-exim4.patch create mode 100644 gnu/packages/patches/netdata-0003-use-python3.patch create mode 100644 gnu/packages/patches/netdata-0004-use-sh.patch create mode 100644 gnu/packages/patches/netdata-0005-use-bash.patch create mode 100644 gnu/packages/patches/netdata-no-files-in-etc-and-var.patch create mode 100644 gnu/packages/patches/netdata-web-remove-antifeatures-spyware.patch diff --git a/gnu/local.mk b/gnu/local.mk index 8a31bfef64..8d1e6a6fa5 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1388,6 +1388,13 @@ dist_patch_DATA = \ %D%/packages/patches/m4-gnulib-libio.patch \ %D%/packages/patches/ncompress-fix-softlinks.patch \ %D%/packages/patches/netcdf-date-time.patch \ + %D%/packages/patches/netdata-0001-use-system-python.patch \ + %D%/packages/patches/netdata-0002-use-system-exim4.patch \ + %D%/packages/patches/netdata-0003-use-python3.patch \ + %D%/packages/patches/netdata-0004-use-sh.patch \ + %D%/packages/patches/netdata-0005-use-bash.patch \ + %D%/packages/patches/netdata-no-files-in-etc-and-var.patch \ + %D%/packages/patches/netdata-web-remove-antifeatures-spyware.patch %D%/packages/patches/netpbm-CVE-2017-2586.patch \ %D%/packages/patches/netpbm-CVE-2017-2587.patch \ %D%/packages/patches/netsurf-message-timestamp.patch \ diff --git a/gnu/packages/monitoring.scm b/gnu/packages/monitoring.scm index 75a422921c..b0673c8321 100644 --- a/gnu/packages/monitoring.scm +++ b/gnu/packages/monitoring.scm @@ -41,24 +41,31 @@ #:use-module (gnu packages curl) #:use-module (gnu packages check) #:use-module (gnu packages compression) + #:use-module (gnu packages cups) #:use-module (gnu packages databases) + #:use-module (gnu packages disk) #:use-module (gnu packages django) + #:use-module (gnu packages gawk) #:use-module (gnu packages gd) #:use-module (gnu packages gettext) #:use-module (gnu packages image) #:use-module (gnu packages mail) #:use-module (gnu packages ncurses) #:use-module (gnu packages networking) + #:use-module (gnu packages node) #:use-module (gnu packages libevent) + #:use-module (gnu packages linux) #:use-module (gnu packages pcre) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) + #:use-module (gnu packages protobuf) #:use-module (gnu packages python) #:use-module (gnu packages python-web) #:use-module (gnu packages python-xyz) #:use-module (gnu packages rrdtool) #:use-module (gnu packages time) #:use-module (gnu packages tls) + #:use-module (gnu packages version-control) #:use-module (gnu packages web)) (define-public nagios @@ -575,3 +582,102 @@ future system load (i.e., capacity planning).") ;; license:gpl2 for other plugins (license (list license:expat license:gpl2)))) +(define-public netdata + ;; TODO: Support go plugins, if not more. + (package + (name "netdata") + (version "1.29.1") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/netdata/netdata") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "137qx7m9h2qk1pcy3i8rf7yk744zi7ps3867psy2r45l7k3flrss")) + (patches + (search-patches + ;; Remove Google Analytics, Google Tag Manager, update popups, + ;; global default registry and Netdata Cloud support (nonfree + ;; service). + "netdata-web-remove-antifeatures-spyware.patch" + ;; From Nix + "netdata-no-files-in-etc-and-var.patch" + ;; From Debian + "netdata-0001-use-system-python.patch" + "netdata-0002-use-system-exim4.patch" + "netdata-0003-use-python3.patch" + "netdata-0004-use-sh.patch" + "netdata-0005-use-bash.patch")))) + (build-system gnu-build-system) + (arguments + `(#:configure-flags (list "--localstatedir=/var" + "--sysconfdir=/etc" + "--disable-cloud") + #:phases + (modify-phases %standard-phases + (add-after 'install 'wrap-netdata + (lambda* (#:key inputs outputs #:allow-other-keys) + (wrap-program + (string-append (assoc-ref outputs "out") "/sbin/netdata") + `("DO_NOT_TRACK" = (,"1")) + `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH"))) + `("PATH" ":" prefix ,(map + (lambda (input) + (string-append + (assoc-ref inputs input) + "/bin")) + '("coreutils" "grep" "findutils" "sed" + "dmidecode" "hddtemp" "iproute2" + "iw" "lm-sensors" "netcat" "curl" + "fping" "procps" "which" "gawk" + "node")))) + #t))))) + (native-inputs + `(("git" ,git-minimal) + ("pkg-config" ,pkg-config) + ("protobuf-c" ,protobuf-c) + ("autoconf" ,autoconf) + ("automake" ,automake))) + (inputs + ;; TODO: Add optional libnetfilter-acct + `(("util-linux:lib" ,util-linux "lib") ;; for libuuid + ("libuv" ,libuv) + ("zlib" ,zlib) + ("openssl" ,openssl) + ("lz4" ,lz4) + ("libcap" ,libcap) + ("libmnl" ,libmnl) + ("snappy" ,snappy) + ("cups" ,cups-minimal) + ("python" ,python) + ("python-pyyaml" ,python-pyyaml) + ("python-urllib3" ,python-urllib3) + ("python-six" ,python-six) + ("python-psycopg2" ,python-psycopg2) + ("python-pymysql" ,python-pymysql) + ("python-requests" ,python-requests) + ;; TODO: Add apcupsd + ("coreutils" ,coreutils) + ("grep" ,grep) + ("findutils" ,findutils) + ("sed" ,sed) + ("dmidecode" ,dmidecode) + ("hddtemp" ,hddtemp) + ("iproute2" ,iproute) + ("iw" ,iw) + ("lm-sensors" ,lm-sensors) + ("netcat" ,netcat-openbsd) + ("curl" ,curl) + ("fping" ,fping) + ("procps" ,procps) + ("which" ,which) + ("gawk" ,gawk) + ("node" ,node))) + (home-page "https://www.netdata.cloud/") + (synopsis "Zero-configuration real-time performance monitoring") + (description "Netdata's distributed, real-time monitoring Agent collects +thousands of metrics from systems, hardware, containers, and applications with +zero configuration.") + (license license:gpl3))) diff --git a/gnu/packages/patches/netdata-0001-use-system-python.patch b/gnu/packages/patches/netdata-0001-use-system-python.patch new file mode 100644 index 0000000000..5a14159d52 --- /dev/null +++ b/gnu/packages/patches/netdata-0001-use-system-python.patch @@ -0,0 +1,131 @@ +Author: Lennart Weller <lhw <at> ring0.de> +Description: Ignore embedded python modules. + +diff -Naurp netdata.orig/collectors/python.d.plugin/Makefile.am netdata/collectors/python.d.plugin/Makefile.am +--- netdata.orig/collectors/python.d.plugin/Makefile.am ++++ netdata/collectors/python.d.plugin/Makefile.am +@@ -145,109 +145,3 @@ dist_third_party_DATA = \ + python_modules/third_party/monotonic.py \ + python_modules/third_party/filelock.py \ + $(NULL) +- +-pythonyaml2dir=$(pythonmodulesdir)/pyyaml2 +-dist_pythonyaml2_DATA = \ +- python_modules/pyyaml2/__init__.py \ +- python_modules/pyyaml2/composer.py \ +- python_modules/pyyaml2/constructor.py \ +- python_modules/pyyaml2/cyaml.py \ +- python_modules/pyyaml2/dumper.py \ +- python_modules/pyyaml2/emitter.py \ +- python_modules/pyyaml2/error.py \ +- python_modules/pyyaml2/events.py \ +- python_modules/pyyaml2/loader.py \ +- python_modules/pyyaml2/nodes.py \ +- python_modules/pyyaml2/parser.py \ +- python_modules/pyyaml2/reader.py \ +- python_modules/pyyaml2/representer.py \ +- python_modules/pyyaml2/resolver.py \ +- python_modules/pyyaml2/scanner.py \ +- python_modules/pyyaml2/serializer.py \ +- python_modules/pyyaml2/tokens.py \ +- $(NULL) +- +-pythonyaml3dir=$(pythonmodulesdir)/pyyaml3 +-dist_pythonyaml3_DATA = \ +- python_modules/pyyaml3/__init__.py \ +- python_modules/pyyaml3/composer.py \ +- python_modules/pyyaml3/constructor.py \ +- python_modules/pyyaml3/cyaml.py \ +- python_modules/pyyaml3/dumper.py \ +- python_modules/pyyaml3/emitter.py \ +- python_modules/pyyaml3/error.py \ +- python_modules/pyyaml3/events.py \ +- python_modules/pyyaml3/loader.py \ +- python_modules/pyyaml3/nodes.py \ +- python_modules/pyyaml3/parser.py \ +- python_modules/pyyaml3/reader.py \ +- python_modules/pyyaml3/representer.py \ +- python_modules/pyyaml3/resolver.py \ +- python_modules/pyyaml3/scanner.py \ +- python_modules/pyyaml3/serializer.py \ +- python_modules/pyyaml3/tokens.py \ +- $(NULL) +- +-python_urllib3dir=$(pythonmodulesdir)/urllib3 +-dist_python_urllib3_DATA = \ +- python_modules/urllib3/__init__.py \ +- python_modules/urllib3/_collections.py \ +- python_modules/urllib3/connection.py \ +- python_modules/urllib3/connectionpool.py \ +- python_modules/urllib3/exceptions.py \ +- python_modules/urllib3/fields.py \ +- python_modules/urllib3/filepost.py \ +- python_modules/urllib3/response.py \ +- python_modules/urllib3/poolmanager.py \ +- python_modules/urllib3/request.py \ +- $(NULL) +- +-python_urllib3_utildir=$(python_urllib3dir)/util +-dist_python_urllib3_util_DATA = \ +- python_modules/urllib3/util/__init__.py \ +- python_modules/urllib3/util/connection.py \ +- python_modules/urllib3/util/request.py \ +- python_modules/urllib3/util/response.py \ +- python_modules/urllib3/util/retry.py \ +- python_modules/urllib3/util/selectors.py \ +- python_modules/urllib3/util/ssl_.py \ +- python_modules/urllib3/util/timeout.py \ +- python_modules/urllib3/util/url.py \ +- python_modules/urllib3/util/wait.py \ +- $(NULL) +- +-python_urllib3_packagesdir=$(python_urllib3dir)/packages +-dist_python_urllib3_packages_DATA = \ +- python_modules/urllib3/packages/__init__.py \ +- python_modules/urllib3/packages/ordered_dict.py \ +- python_modules/urllib3/packages/six.py \ +- $(NULL) +- +-python_urllib3_backportsdir=$(python_urllib3_packagesdir)/backports +-dist_python_urllib3_backports_DATA = \ +- python_modules/urllib3/packages/backports/__init__.py \ +- python_modules/urllib3/packages/backports/makefile.py \ +- $(NULL) +- +-python_urllib3_ssl_match_hostnamedir=$(python_urllib3_packagesdir)/ssl_match_hostname +-dist_python_urllib3_ssl_match_hostname_DATA = \ +- python_modules/urllib3/packages/ssl_match_hostname/__init__.py \ +- python_modules/urllib3/packages/ssl_match_hostname/_implementation.py \ +- $(NULL) +- +-python_urllib3_contribdir=$(python_urllib3dir)/contrib +-dist_python_urllib3_contrib_DATA = \ +- python_modules/urllib3/contrib/__init__.py \ +- python_modules/urllib3/contrib/appengine.py \ +- python_modules/urllib3/contrib/ntlmpool.py \ +- python_modules/urllib3/contrib/pyopenssl.py \ +- python_modules/urllib3/contrib/securetransport.py \ +- python_modules/urllib3/contrib/socks.py \ +- $(NULL) +- +-python_urllib3_securetransportdir=$(python_urllib3_contribdir)/_securetransport +-dist_python_urllib3_securetransport_DATA = \ +- python_modules/urllib3/contrib/_securetransport/__init__.py \ +- python_modules/urllib3/contrib/_securetransport/bindings.py \ +- python_modules/urllib3/contrib/_securetransport/low_level.py \ +- $(NULL) +diff -Naurp netdata.orig/collectors/python.d.plugin/python_modules/bases/loaders.py netdata/collectors/python.d.plugin/python_modules/bases/loaders.py +--- netdata.orig/collectors/python.d.plugin/python_modules/bases/loaders.py ++++ netdata/collectors/python.d.plugin/python_modules/bases/loaders.py +@@ -9,10 +9,7 @@ from sys import version_info + PY_VERSION = version_info[:2] + + try: +- if PY_VERSION > (3, 1): +- from pyyaml3 import SafeLoader as YamlSafeLoader +- else: +- from pyyaml2 import SafeLoader as YamlSafeLoader ++ from yaml import SafeLoader as YamlSafeLoader + except ImportError: + from yaml import SafeLoader as YamlSafeLoader + diff --git a/gnu/packages/patches/netdata-0002-use-system-exim4.patch b/gnu/packages/patches/netdata-0002-use-system-exim4.patch new file mode 100644 index 0000000000..0e23618399 --- /dev/null +++ b/gnu/packages/patches/netdata-0002-use-system-exim4.patch @@ -0,0 +1,12 @@ +Author: Sven Hartge <sven <at> svenhartge.de> +Description: Debian has exim in /usr/sbin which is not in the default path. + +diff -Naurp netdata.orig/collectors/python.d.plugin/exim/exim.conf netdata/collectors/python.d.plugin/exim/exim.conf +--- netdata.orig/collectors/python.d.plugin/exim/exim.conf ++++ netdata/collectors/python.d.plugin/exim/exim.conf +@@ -88,4 +88,4 @@ update_every: 10 + # AUTO-DETECTION JOBS + + local: +- command: 'exim -bpc' ++ command: '/usr/sbin/exim -bpc' diff --git a/gnu/packages/patches/netdata-0003-use-python3.patch b/gnu/packages/patches/netdata-0003-use-python3.patch new file mode 100644 index 0000000000..e55089271a --- /dev/null +++ b/gnu/packages/patches/netdata-0003-use-python3.patch @@ -0,0 +1,29 @@ +Author: Sander Klein <debian-bugs <at> roedie.nl> +Description: Debian uses by default python 2 instead of python3. + +diff -Naurp netdata.orig/collectors/python.d.plugin/python.d.plugin.in netdata/collectors/python.d.plugin/python.d.plugin.in +--- netdata.orig/collectors/python.d.plugin/python.d.plugin.in ++++ netdata/collectors/python.d.plugin/python.d.plugin.in +@@ -1,21 +1,4 @@ +-#!/usr/bin/env bash +-'''':; +-pybinary=$(which python || which python3 || which python2) +-filtered=() +-for arg in "$@" +-do +- case $arg in +- -p*) pybinary=${arg:2} +- shift 1 ;; +- *) filtered+=("$arg") ;; +- esac +-done +-if [ "$pybinary" = "" ] +-then +- echo "ERROR python IS NOT AVAILABLE IN THIS SYSTEM" +- exit 1 +-fi +-exec "$pybinary" "$0" "${filtered[@]}" # ''' ++#!/usr/bin/python3 + + # -*- coding: utf-8 -*- + # Description: diff --git a/gnu/packages/patches/netdata-0004-use-sh.patch b/gnu/packages/patches/netdata-0004-use-sh.patch new file mode 100644 index 0000000000..6c8e93bfba --- /dev/null +++ b/gnu/packages/patches/netdata-0004-use-sh.patch @@ -0,0 +1,12 @@ +Author: Daniel Baumann <daniel.baumann <at> progress-linux.org> +Description: Fix shebang hack to not depend on bash. + +diff -Naurp netdata.orig/collectors/node.d.plugin/node.d.plugin.in netdata/collectors/node.d.plugin/node.d.plugin.in +--- netdata.orig/collectors/node.d.plugin/node.d.plugin.in ++++ netdata/collectors/node.d.plugin/node.d.plugin.in +@@ -1,4 +1,4 @@ +-#!/usr/bin/env bash ++#!/bin/sh + ':' //; exec "$(command -v nodejs || command -v node || echo "ERROR node IS NOT AVAILABLE IN THIS SYSTEM")" "$0" "$@" + + // shebang hack from: diff --git a/gnu/packages/patches/netdata-0005-use-bash.patch b/gnu/packages/patches/netdata-0005-use-bash.patch new file mode 100644 index 0000000000..53b7fc5b31 --- /dev/null +++ b/gnu/packages/patches/netdata-0005-use-bash.patch @@ -0,0 +1,13 @@ +Author: Daniel Baumann <daniel.baumann <at> progress-linux.org> +Description: Using bash instead of sh for edit-config. + It reads /etc/profile which often contains bash specific configuration. + +diff -Naurp netdata.orig/system/edit-config.in netdata/system/edit-config.in +--- netdata.orig/system/edit-config.in ++++ netdata/system/edit-config.in +@@ -1,4 +1,4 @@ +-#!/usr/bin/env sh ++#!/bin/bash + + [ -f /etc/profile ] && . /etc/profile + diff --git a/gnu/packages/patches/netdata-no-files-in-etc-and-var.patch b/gnu/packages/patches/netdata-no-files-in-etc-and-var.patch new file mode 100644 index 0000000000..594805fdf1 --- /dev/null +++ b/gnu/packages/patches/netdata-no-files-in-etc-and-var.patch @@ -0,0 +1,129 @@ +From 4ecc1475be94a384c122594b5f7d455beb64a2f0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= <joerg <at> thalheim.io> +Date: Sat, 22 Feb 2020 06:42:14 +0000 +Subject: [PATCH] no files in etc and var +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Signed-off-by: Jörg Thalheim <joerg <at> thalheim.io> +--- + collectors/Makefile.am | 2 +- + collectors/charts.d.plugin/Makefile.am | 2 +- + collectors/node.d.plugin/Makefile.am | 2 +- + collectors/python.d.plugin/Makefile.am | 2 +- + collectors/statsd.plugin/Makefile.am | 2 +- + health/Makefile.am | 2 +- + system/Makefile.am | 3 +-- + web/Makefile.am | 2 +- + 8 files changed, 8 insertions(+), 9 deletions(-) + +diff --git a/collectors/Makefile.am b/collectors/Makefile.am +index 9bb52958..c9799165 100644 +--- a/collectors/Makefile.am ++++ b/collectors/Makefile.am +@@ -32,7 +32,7 @@ usercustompluginsconfigdir=$(configdir)/custom-plugins.d + usergoconfigdir=$(configdir)/go.d + + # Explicitly install directories to avoid permission issues due to umask +-install-exec-local: ++no-install-exec-local: + $(INSTALL) -d $(DESTDIR)$(usercustompluginsconfigdir) + $(INSTALL) -d $(DESTDIR)$(usergoconfigdir) + +diff --git a/collectors/charts.d.plugin/Makefile.am b/collectors/charts.d.plugin/Makefile.am +index 03c7f0a9..01985db0 100644 +--- a/collectors/charts.d.plugin/Makefile.am ++++ b/collectors/charts.d.plugin/Makefile.am +@@ -34,7 +34,7 @@ dist_userchartsconfig_DATA = \ + $(NULL) + + # Explicitly install directories to avoid permission issues due to umask +-install-exec-local: ++no-install-exec-local: + $(INSTALL) -d $(DESTDIR)$(userchartsconfigdir) + + chartsconfigdir=$(libconfigdir)/charts.d +diff --git a/collectors/node.d.plugin/Makefile.am b/collectors/node.d.plugin/Makefile.am +index c3142d43..95e32445 100644 +--- a/collectors/node.d.plugin/Makefile.am ++++ b/collectors/node.d.plugin/Makefile.am +@@ -26,7 +26,7 @@ dist_usernodeconfig_DATA = \ + $(NULL) + + # Explicitly install directories to avoid permission issues due to umask +-install-exec-local: ++no-install-exec-local: + $(INSTALL) -d $(DESTDIR)$(usernodeconfigdir) + + nodeconfigdir=$(libconfigdir)/node.d +diff --git a/collectors/python.d.plugin/Makefile.am b/collectors/python.d.plugin/Makefile.am +index e678f86a..29a319da 100644 +--- a/collectors/python.d.plugin/Makefile.am ++++ b/collectors/python.d.plugin/Makefile.am +@@ -32,7 +32,7 @@ dist_userpythonconfig_DATA = \ + $(NULL) + + # Explicitly install directories to avoid permission issues due to umask +-install-exec-local: ++no-install-exec-local: + $(INSTALL) -d $(DESTDIR)$(userpythonconfigdir) + + pythonconfigdir=$(libconfigdir)/python.d +diff --git a/collectors/statsd.plugin/Makefile.am b/collectors/statsd.plugin/Makefile.am +index b01302d1..f5b77da4 100644 +--- a/collectors/statsd.plugin/Makefile.am ++++ b/collectors/statsd.plugin/Makefile.am +@@ -17,5 +17,5 @@ dist_userstatsdconfig_DATA = \ + $(NULL) + + # Explicitly install directories to avoid permission issues due to umask +-install-exec-local: ++no-install-exec-local: + $(INSTALL) -d $(DESTDIR)$(userstatsdconfigdir) +diff --git a/health/Makefile.am b/health/Makefile.am +index 853ed0d7..210330a6 100644 +--- a/health/Makefile.am ++++ b/health/Makefile.am +@@ -19,7 +19,7 @@ dist_userhealthconfig_DATA = \ + $(NULL) + + # Explicitly install directories to avoid permission issues due to umask +-install-exec-local: ++no-install-exec-local: + $(INSTALL) -d $(DESTDIR)$(userhealthconfigdir) + + healthconfigdir=$(libconfigdir)/health.d +diff --git a/system/Makefile.am b/system/Makefile.am +index ad68c655..74f032f9 100644 +--- a/system/Makefile.am ++++ b/system/Makefile.am +@@ -17,11 +17,10 @@ include $(top_srcdir)/build/subst.inc + SUFFIXES = .in + + dist_config_SCRIPTS = \ +- edit-config \ + $(NULL) + + # Explicitly install directories to avoid permission issues due to umask +-install-exec-local: ++no-install-exec-local: + $(INSTALL) -d $(DESTDIR)$(configdir) + + nodist_noinst_DATA = \ +diff --git a/web/Makefile.am b/web/Makefile.am +index ccaccd76..16a2977e 100644 +--- a/web/Makefile.am ++++ b/web/Makefile.am +@@ -12,7 +12,7 @@ SUBDIRS = \ + usersslconfigdir=$(configdir)/ssl + + # Explicitly install directories to avoid permission issues due to umask +-install-exec-local: ++no-install-exec-local: + $(INSTALL) -d $(DESTDIR)$(usersslconfigdir) + + dist_noinst_DATA = \ +-- +2.25.0 + diff --git a/gnu/packages/patches/netdata-web-remove-antifeatures-spyware.patch b/gnu/packages/patches/netdata-web-remove-antifeatures-spyware.patch new file mode 100644 index 0000000000..0b3be9a5d2 --- /dev/null +++ b/gnu/packages/patches/netdata-web-remove-antifeatures-spyware.patch @@ -0,0 +1,4466 @@ +diff --git a/registry/registry_init.c b/registry/registry_init.c +index ffdb83f3..2d5460fd 100644 +--- a/registry/registry_init.c ++++ b/registry/registry_init.c +@@ -36,7 +36,7 @@ int registry_init(void) { + registry.save_registry_every_entries = (unsigned long long)config_get_number(CONFIG_SECTION_REGISTRY, "registry save db every new entries", 1000000); + registry.persons_expiration = config_get_number(CONFIG_SECTION_REGISTRY, "registry expire idle persons days", 365) * 86400; + registry.registry_domain = config_get(CONFIG_SECTION_REGISTRY, "registry domain", ""); +- registry.registry_to_announce = config_get(CONFIG_SECTION_REGISTRY, "registry to announce", "https://registry.my-netdata.io"); ++ registry.registry_to_announce = config_get(CONFIG_SECTION_REGISTRY, "registry to announce", ""); + registry.hostname = config_get(CONFIG_SECTION_REGISTRY, "registry hostname", netdata_configured_hostname); + registry.verify_cookies_redirects = config_get_boolean(CONFIG_SECTION_REGISTRY, "verify browser cookies support", 1); + +diff --git a/web/gui/Makefile.am b/web/gui/Makefile.am +index c69380f9..8a8f01e5 100644 +--- a/web/gui/Makefile.am ++++ b/web/gui/Makefile.am +@@ -46,10 +46,6 @@ dist_noinst_DATA = \ + $(NULL) + + dist_web_DATA = \ +- demo.html \ +- demo2.html \ +- demosites.html \ +- demosites2.html \ + dashboard.html \ + dashboard.js \ + dashboard_info.js \ +@@ -62,7 +58,6 @@ dist_web_DATA = \ + main.css \ + main.js \ + console.html \ +- infographic.html \ + robots.txt \ + refresh-badges.js \ + sitemap.xml \ +diff --git a/web/gui/console.html b/web/gui/console.html +index b85b4ffb..2debd1c5 100644 +--- a/web/gui/console.html ++++ b/web/gui/console.html +@@ -12,18 +12,6 @@ + <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" /> + <link rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAP9JREFUeNpiYBgFo+A/w34gpiZ8DzWzAYgNiHGAA5UdgA73g+2gcyhgg/0DGQoweB6IBQYyFCCOGOBQwBMd/xnW09ERDtgcoEBHB+zHFQrz6egIBUasocDAcJ9OxWAhE4YQI8MDILmATg7wZ8QRDfQKhQf4Cie6pAVGPA4AhQKo0BCgZRAw4ZSBpIWJNI6CD4wEKikBaFqgVSgcYMIrzcjwgcahcIGRiPYCLUPBkNhWUwP9akVcoQBpatG4MsLviAIqWj6f3Absfdq2igg7IIEKDVQKEzN5ofAenJCp1I8gJRTug5tfkGIdR1FDniMI+QZUjF8Amn5htOdHCAAEGACE6B0cS6mrEwAAAABJRU5ErkJggg==" /> + <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'); +- window.dataLayer = window.dataLayer || []; +- </script> +- <!-- End Google Tag Manager --> + <script> + function loadJSFile(filename) { + const s = document.createElement("script") +@@ -39,28 +27,13 @@ + 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" +diff --git a/web/gui/dashboard.js b/web/gui/dashboard.js +index 53e9090b..0afa0d0f 100644 +--- a/web/gui/dashboard.js ++++ b/web/gui/dashboard.js +@@ -9926,25 +9926,14 @@ NETDATA.alarms = { + + NETDATA.registry = { + server: null, // the netdata registry server +- isCloudEnabled: false,// is netdata.cloud functionality enabled? +- cloudBaseURL: null, // the netdata cloud base url + person_guid: null, // the unique ID of this browser / user + machine_guid: null, // the unique ID the netdata server that served dashboard.js + hostname: 'unknown', // the hostname of the netdata server that served dashboard.js + machines: null, // the user's other URLs + machines_array: null, // the user's other URLs in an array + person_urls: null, +- anonymous_statistics_checked: false, + MASKED_DATA: "***", + +- isUsingGlobalRegistry: function() { +- return NETDATA.registry.server == "https://registry.my-netdata.io"; +- }, +- +- isRegistryEnabled: function() { +- return !(NETDATA.registry.isUsingGlobalRegistry() || isSignedIn()) +- }, +- + parsePersonUrls: function (person_urls) { + NETDATA.registry.person_urls = person_urls; + +@@ -9998,26 +9987,8 @@ NETDATA.registry = { + NETDATA.registry.hello(NETDATA.serverDefault, function (data) { + if (data) { + NETDATA.registry.server = data.registry; +- if (data.cloud_base_url !== "") { +- NETDATA.registry.isCloudEnabled = true; +- NETDATA.registry.cloudBaseURL = data.cloud_base_url; +- } else { +- NETDATA.registry.isCloudEnabled = false; +- NETDATA.registry.cloudBaseURL = ""; +- } + NETDATA.registry.machine_guid = data.machine_guid; + NETDATA.registry.hostname = data.hostname; +- if (!NETDATA.registry.anonymous_statistics_checked) { +- NETDATA.registry.anonymous_statistics_checked=true; +- if (data.anonymous_statistics) { +- (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=false;j.src= +- 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); +- })(window,document,'script','dataLayer','GTM-N6CBMJD'); +- dataLayer.push({"anonymous_statistics" : "true", "machine_guid" : data.machine_guid}); +- } +- } + NETDATA.registry.access(2, function (person_urls) { + NETDATA.registry.parsePersonUrls(person_urls); + }); +@@ -10066,12 +10037,8 @@ NETDATA.registry = { + let name = NETDATA.registry.MASKED_DATA; + let url = NETDATA.registry.MASKED_DATA; + +- if (!NETDATA.registry.isUsingGlobalRegistry()) { +- // If the user is using a private registry keep sending identifiable +- // data. +- name = NETDATA.registry.hostname; +- url = NETDATA.serverDefault; +- } ++ name = NETDATA.registry.hostname; ++ url = NETDATA.serverDefault; + + console.log("ACCESS", name, url); + +diff --git a/web/gui/dashboard_info.js b/web/gui/dashboard_info.js +index 1f289ba0..889b6827 100644 +--- a/web/gui/dashboard_info.js ++++ b/web/gui/dashboard_info.js +@@ -196,11 +196,6 @@ netdataDashboard.menu = { + info: 'Performance metrics for the operation of netdata itself and its plugins.' + }, + +- 'aclk_test': { +- title: 'ACLK Test Generator', +- info: 'For internal use to perform integration testing.' +- }, +- + 'example': { + title: 'Example Charts', + info: 'Example charts, demonstrating the external plugin architecture.' +@@ -3353,21 +3348,6 @@ netdataDashboard.context = { + info: 'Difference between the number of process created and the number of threads created per period(<code>process</code> dimension), it also shows the number of possible zombie process running on system.' + }, + +- // ------------------------------------------------------------------------ +- // ACLK Internal Stats +- 'netdata.aclk_status': { +- valueRange: "[0, 1]", +- info: 'This chart shows if ACLK was online during entirety of the sample duration.' +- }, +- +- 'netdata.aclk_query_per_second': { +- info: 'This chart shows how many queries were added for ACLK_query thread to process and how many it was actually able to process.' +- }, +- +- 'netdata.aclk_latency_mqtt': { +- info: 'Measures latency between MQTT publish of the message and it\'s PUB_ACK being received' +- }, +- + // ------------------------------------------------------------------------ + // VerneMQ + +diff --git a/web/gui/demo.html b/web/gui/demo.html +deleted file mode 100644 +index b096bef3..00000000 +--- a/web/gui/demo.html ++++ /dev/null +@@ -1,51 +0,0 @@ +-<!DOCTYPE html> +-<!-- SPDX-License-Identifier: GPL-3.0-or-later --> +-<html lang="en"> +-<head> +- <title>NetData Dashboard</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"> +- <meta name="author" content="costa <at> tsaousis.gr"> +- +- <meta property="og:locale" content="en_US" /> +- <meta property="og:image" content="https://cloud.githubusercontent.com/assets/2662304/22945737/e98cd0c6-f2fd-11e6-96f1-5501934b0955.png"/> +- <meta property="og:url" content="http://my-netdata.io/"/> +- <meta property="og:type" content="website"/> +- <meta property="og:site_name" content="netdata"/> +- <meta property="og:title" content="netdata - real-time performance monitoring, done right!"/> +- <meta property="og:description" content="Stunning real-time dashboards, blazingly fast and extremely interactive. Zero configuration, zero dependencies, zero maintenance." /> +-</head> +-<script type="text/javascript" src="dashboard.js?v20190902-0"></script> +-<body> +- +-<div style="width: 100%; text-align: center;"> +- <div data-netdata="netdata.server_cpu" +- data-dimensions="user" +- data-chart-library="gauge" +- data-width="150px" +- data-after="-60" +- data-points="60" +- data-title="Yes! Realtime!" +- data-units="I am alive!" +- data-colors="#FF5555" +- ></div> +- <br/> +- <div data-netdata="netdata.server_cpu" +- data-dimensions="user" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-width="200px" +- data-height="30px" +- data-after="-60" +- data-points="60" +- data-colors="#FF5555" +- ></div> +-</div> +-</body> +-</html> +diff --git a/web/gui/demo2.html b/web/gui/demo2.html +deleted file mode 100644 +index 650acfe0..00000000 +--- a/web/gui/demo2.html ++++ /dev/null +@@ -1,143 +0,0 @@ +-<!DOCTYPE html> +-<!-- SPDX-License-Identifier: GPL-3.0-or-later --> +-<html lang="en"> +-<head> +- <title>NetData Dashboard</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"> +- <meta name="author" content="costa <at> tsaousis.gr"> +- +- <meta property="og:locale" content="en_US" /> +- <meta property="og:image" content="https://cloud.githubusercontent.com/assets/2662304/22945737/e98cd0c6-f2fd-11e6-96f1-5501934b0955.png"/> +- <meta property="og:url" content="https://my-netdata.io/"/> +- <meta property="og:type" content="website"/> +- <meta property="og:site_name" content="netdata"/> +- <meta property="og:title" content="netdata - real-time performance monitoring, done right!"/> +- <meta property="og:description" content="Stunning real-time dashboards, blazingly fast and extremely interactive. Zero configuration, zero dependencies, zero maintenance." /> +-</head> +-<script>var netdataTheme = 'slate';</script> +-<script type="text/javascript" src="https://my-netdata.io/dashboard.js?v20190902-0"></script> +-<body> +- +-<div class="container" style="width: 90%; padding-top: 10px; text-align: center; color: #AAA"> +- <div style="font-size: 7vw;">why netdata?</div> +- <br/> +- <div style="font-size: 2vw; color: white;">These charts visualize the same data...</div> +- +- +- <!-- Nav tabs --> +- <ul class="nav nav-tabs" role="tablist"> +- <li role="presentation" class="active"><a href="#gauge" aria-controls="gauge" role="tab" data-toggle="tab">Gauge.js</a></li> +- <li role="presentation"><a href="#easypiechart" aria-controls="easypiechart" role="tab" data-toggle="tab">Easy Pie Chart</a></li> +- </ul> +- +- <!-- Tab panes --> +- <div class="tab-content"> +- <div role="tabpanel" class="tab-pane active" id="gauge"> +- +- <div style="display: inline-block; width: 35.8%"> +- <div style="font-size: 1.2vw; color: #666; padding-top: 10px;"><i class="fa fa-comment"></i> I can trace an issue like this</div> +- <br/> +- <div data-netdata="example.random2" +- data-dimensions="random" +- data-chart-library="gauge" +- data-gauge-max-value="32767" +- data-width="100%" +- data-after="-600" +- data-points="600" +- data-title="1/second (netdata default)" +- data-units="important metric" +- data-colors="#5A5" +- ></div> +- </div> +- <div style="display: inline-block; width: 50%"> +- <div style="font-size: 1.2vw; color: #666;"><i class="fa fa-comment"></i> Can you trace an issue like these?<br/> <br/></div> +- <div data-netdata="example.random2" +- data-dimensions="random" +- data-chart-library="gauge" +- data-gauge-max-value="32767" +- data-width="45%" +- data-after="-600" +- data-points="60" +- data-title="Updates Every 10 Sec" +- data-units="important metric" +- data-colors="#C55" +- ></div> +- <div data-netdata="example.random2" +- data-dimensions="random" +- data-chart-library="gauge" +- data-gauge-max-value="32767" +- data-width="45%" +- data-after="-600" +- data-points="2" +- data-title="Updates Every 5 Mins" +- data-units="important metric" +- data-colors="#C55" +- ></div> +- </div> +- </div> +- <div role="tabpanel" class="tab-pane" id="easypiechart"> +- +- <div style="display: inline-block; width: 25%"> +- <div style="font-size: 1.2vw; color: #666; padding-top: 10px;"><i class="fa fa-comment"></i> I can trace an issue like this</div> +- <br/> +- <div data-netdata="example.random2" +- data-dimensions="random" +- data-chart-library="easypiechart" +- data-easypiechart-max-value="32767" +- data-width="100%" +- data-after="-600" +- data-points="600" +- data-title="1/second (netdata default)" +- data-units="important metric" +- data-colors="#5A5" +- ></div> +- </div> +- <div style="display: inline-block; width: 40%"> +- <div style="font-size: 1.2vw; color: #666;"><i class="fa fa-comment"></i> Can you trace an issue like these?<br/> <br/></div> +- <div data-netdata="example.random2" +- data-dimensions="random" +- data-chart-library="easypiechart" +- data-easypiechart-max-value="32767" +- data-width="45%" +- data-after="-600" +- data-points="60" +- data-title="Updates Every 10 Sec" +- data-units="important metric" +- data-colors="#C55" +- ></div> +- <div data-netdata="example.random2" +- data-dimensions="random" +- data-chart-library="easypiechart" +- data-easypiechart-max-value="32767" +- data-width="45%" +- data-after="-600" +- data-points="2" +- data-title="Updates Every 5 Mins" +- data-units="important metric" +- data-colors="#C55" +- ></div> +- </div> +- </div> +- </div> +- <div style="font-size: 1.5vw;">Hover on the chart below, to see the selected value on the charts above!</div> +- <div data-netdata="example.random2" +- data-dimensions="random" +- data-dygraph-theme="sparkline" +- data-width="100%" +- data-height="20vh" +- data-after="-600" +- data-points="600" +- data-title="1/second (netdata default)" +- data-units="something" +- data-colors="#888" +- ></div> +-</div> +-</body> +-</html> +diff --git a/web/gui/demosites.html b/web/gui/demosites.html +deleted file mode 100644 +index e8a310a1..00000000 +--- a/web/gui/demosites.html ++++ /dev/null +@@ -1,1469 +0,0 @@ +-<!doctype html> +-<!-- SPDX-License-Identifier: GPL-3.0-or-later --> +-<html lang=en-us xmlns="http://www.w3.org/1999/html"> +-<head> +- <meta http-equiv="Refresh" content="0; url=https://www.netdata.cloud"> +- <meta charset=utf-8> +- <title>NetData: Get control of your Linux Servers. Simple. Effective. Awesome.</title> +- <meta name=author content="Costa Tsaousis"> +- <meta name=description content="Unparalleled insights, in real-time, of everything happening on your Linux systems and applications, with stunning, interactive web dashboards and powerful performance and health alarms."> +- +- <meta name=viewport content="width=device-width,initial-scale=1"> +- <link rel=apple-touch-icon href=apple-touch-icon.png> +- <link rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAP9JREFUeNpiYBgFo+A/w34gpiZ8DzWzAYgNiHGAA5UdgA73g+2gcyhgg/0DGQoweB6IBQYyFCCOGOBQwBMd/xnW09ERDtgcoEBHB+zHFQrz6egIBUasocDAcJ9OxWAhE4YQI8MDILmATg7wZ8QRDfQKhQf4Cie6pAVGPA4AhQKo0BCgZRAw4ZSBpIWJNI6CD4wEKikBaFqgVSgcYMIrzcjwgcahcIGRiPYCLUPBkNhWUwP9akVcoQBpatG4MsLviAIqWj6f3Absfdq2igg7IIEKDVQKEzN5ofAenJCp1I8gJRTug5tfkGIdR1FDniMI+QZUjF8Amn5htOdHCAAEGACE6B0cS6mrEwAAAABJRU5ErkJggg==" /> +- +- <meta property="og:url" content="https://my-netdata.io" /> +- <meta property="og:type" content="website" /> +- <meta property="og:title" content="Get control of your Linux Servers. Simple. Effective. Awesome." /> +- <meta property="og:description" content="Unparalleled insights, in real-time, of everything happening on your Linux systems and applications, with stunning, interactive web dashboards and powerful performance and health alarms." /> +- <meta property="og:image" content="https://cloud.githubusercontent.com/assets/2662304/22945737/e98cd0c6-f2fd-11e6-96f1-5501934b0955.png" /> +- <meta property="og:image:type" content="image/png" /> +- <meta property="fb:app_id" content="1200089276712916" /> +- +- <meta name="twitter:card" content="summary" /> +- <meta name="twitter:site" content="@linuxnetdata" /> +- <meta name="twitter:title" content="Get control of your Linux Servers. Simple. Effective. Awesome." /> +- <meta name="twitter:description" content="Unparalleled insights, in real-time, of everything happening on your Linux systems and applications, with stunning, interactive web dashboards and powerful performance and health alarms." /> +- <meta name="twitter:image" content="https://cloud.githubusercontent.com/assets/2662304/14092712/93b039ea-f551-11e5-822c-beadbf2b2a2e.gif" /> +- +- <meta name="google-site-verification" content="3Xmk2kyCvai8p9HEnYHoQ9RBW20-b1NvPAgu07Fkkds" /> +- <meta name="msvalidate.01" content="896DCA31C9A664CE359FCF1A645DD476" /> +- +- <style>/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */ +-html { +- line-height: 1.15; +- -ms-text-size-adjust: 100%; +- -webkit-text-size-adjust: 100%; +- color: #fff; +- font: 17px/1.4 'Open Sans', sans-serif; +- text-align: center +-} +- +-body { +- margin: 0; +- background-color: #2f3135; +- background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADoAAAA9BAMAAAAOkGejAAAAGFBMVEUKCgoUFBQAAAAPDw8ZGRkeHh4jIyMFBQUUJmucAAAACHRSTlMzMzMzMzMzM85JBgUAAAV1SURBVDjLBQC3tkMA9OqrbtWtCKwErLoVhDUP5PffAUvqhtJFWytU/UqOWbf0nG8ZSVyyfSPwrjqzxYailPJtJu/uihN7np+51RrBgYosPTzBElTZCg8JieV4W/HJciqhFwhQLBmkX5JnNzzMlOGvQChGCKbanFWBgVeRCr9L6BZCgZxB/0wN7zTO2QuP80SIL3F5Ydbnhz12iE/nSOMrqwK/OMfbAYHkioJlnlj9CKUbeomN61U5LQ6nWRmg+tfrDusm2LHGDnRDdHUp5CLTvoHrwgtZlIr/+FyoPz2tz/HiQzc8x1TWqAZp99yto4qGuAs20qucNqPyUAyqHuAp2Hhv0OR1LC+g2voMngjB2uvyVvf0aFhD1Mi/f5Q6MER7SzJWu2AW3my9l8mB4W3WfCqwf+ikfc7pudFVvOMy0ikuSoF47zw6UYPxdqWRRSRo91RZtWYa/sQeri7tMPKcCao0vs9QTQC+8CuoReAkHuKRZCi2qtv9zJLAHfSoRltH/+sj9rlgdBTsfUbTEb7oTbTJ8acxbjMQnaftBkRVVerOeKhKr3jkRzTzqS6RpJNvF0MhOBQm/BRXor/MU/YjObdYIu1/iaQ+IviYnlsG6r3cbQoB7cj4SPgMSkLzgIM24+LSjb2sYxWDtIhCdzBfS5Kh768XgH5jkSLjrvRX/nQnv+SXQMvagpPVScAZwWhVbvPdPqcr3X/u8z558ddIdjmVMH9CIVvrW+8rPVq6M54Pf+tebGkIXwPevaCgdQ59wWbULrPB4dPT8suLWr13YKUuDNTpGBspJ9fPGSNOEjp2TYXTIgF8QgEtzX0gIbXRP8JGMbxh1uHA/CwE4a/KHUc8KzV868fO4o+8GNcNvdPaKfzprkunXIthFS9MqpEG1p7ozWTJTcnAlvUnjixEaGn5ll1yuZbtIgS/r2ISBSDE2nsksYx7YFwH2ytB0rXzqh52qJowchJSI3RJmxHeJGZFDq37LWVmzvkgA7zjT2iOsHsdb9viBQLPx3gUmys1cQG6HOEsopo6glj0VXdyli/FJsnSbg5FQLpDO1xiy0ozQy0InDVNZTuXbhENG9gu28ZoHg/de53YTAVqCwl966V7VX/g+AW3ysMyMjXNhOuaLFmBJ2Z1x9LfG55m/34snAnOgXbMqZIbaop8Zjk5P3fAw9h8vkwHKZAC7yqW6+85ZdpAFD8iAjbVRj8BI3PMYJ2oiKNrZHKSnfNJ2UZwtcT9IryvNrGxdqtCx4vc74z39odPA/h5f/MJu46HKUOcbURZd/E2QH6Kgv8Aa2PSevG2gMfoYHWdN38kadbiFHonAjv50PjgyFZwannFGebUjVmxFnokoTbwWBNVd7qx9KG1joZ69npEk0jRr7/aBYQ5ipNcGRvqjeT+kFjTgv7n33L0zlBIH6CoeaPm9eQN6uKmSwE/LAtDPgMNAOQ5X1Vr8Zd0BQlLTV88U6LzD+6iwQp9NSHD5uCcqml/N0NgRmDN9vNS6A/QJBm2jvBbFTLvly/mtLX1rg5kwgPvA4rA+LIdN3bkVvhrqk8OUYZpuYxaXW/gPVlDxtru6+3Z0KY5DMac3pQzo8y7hO2qxdd6lnvUSdXfFRduigV0YuZv9peBHwHix+d4M7fL/Y44jX6S5ZdOzBoEC2fEohdSE7PTjRBUT3T+jclLxWbKdEOoiuB81dV0xo2pFPOXZmpEMueTDrAjAr8k6y15pMsoCHOyT5qlyWn85HLLuyyAWMlmmjYSNKnv9nRsTib5DSbWLPkJjoVihW/eRQqy/dja151zycTHTBmuroDeXRvVzJ3VFWB65e+L6xu+D5fa+D0BESL4VjlKSKrvs9W69lhj2345pBjIr3+RSJFuS0A/sQAAAABJRU5ErkJggg==) +-} +- +-a { +- background-color: transparent; +- -webkit-text-decoration-skip: objects; +- color: #069; +- text-decoration: none +-} +- +-a:active, a:hover { +- outline-width: 0 +-} +- +-strong { +- font-weight: bolder +-} +- +-h1 { +- font-size: 2.9em; +- line-height: 1.2em; +- margin: 0 .5em .75em +-} +- +-img { +- border-style: none; +- vertical-align: middle +-} +- +-[type=button]::-moz-focus-inner, [type=reset]::-moz-focus-inner, [type=submit]::-moz-focus-inner, button::-moz-focus-inner { +- border-style: none; +- padding: 0 +-} +- +-[type=button]:-moz-focusring, [type=reset]:-moz-focusring, [type=submit]:-moz-focusring, button:-moz-focusring { +- outline: 1px dotted ButtonText +-} +- +-a:active, a:focus, a:hover { +- text-decoration: underline; +-} +- +-::-moz-selection { +- background-color: #b3d4fc; +- text-shadow: none; +-} +- +-::selection { +- background-color: #b3d4fc; +- text-shadow: none; +-} +- +-h2 { +- font-size: 2em; +- margin: 1.5em 0; +-} +- +-h3 { +- color: #555; +- font-size: 1.5em; +- margin: 0 0 .5em; +-} +- +-p { +- margin: 0 0 2em; +-} +- +-.quote { +- font-size: 1.15em; +- margin: 0 0 .5em; +- text-align: center; +-} +- +-.title { +- /* opacity: 0; */ +- /* transition: opacity 500ms; */ +-} +- +-.titlefadein { +- opacity: 1; +- transition: opacity 500ms; +-} +- +-.grid { +- margin: 0 -15px; +- letter-spacing: -.31em; +- word-spacing: -.43em; +- text-rendering: optimizespeed +-} +- +-.grid-title { +- text-align: left; +-} +- +-.grid-cell { +- display: inline-block; +- letter-spacing: normal; +- text-align: left; +- text-rendering: auto; +- vertical-align: top; +- width: 50%; +- word-spacing: normal +-} +- +-.grid-cell > * { +- padding: 0 15px +-} +- +-.inline-block-list { +- list-style-type: none; +- margin: 0; +- padding: 0 +-} +- +-.inline-block-list li { +- display: inline-block; +- margin: 0 0 0 1.5em; +- padding: 0; +- vertical-align: top +-} +- +-.inline-block-list li:first-child { +- margin-left: 0 +-} +- +-.flex-embed { +- background-color: #000; +- box-shadow: 0 0 10px #000; +- height: 0; +- overflow: hidden; +- padding-bottom: 56.25%; +- position: relative +-} +- +-.flex-embed a, .flex-embed img { +- bottom: 0; +- height: 100%; +- left: 0; +- position: absolute; +- top: 0; +- width: 100% +-} +- +-.flex-embed .play-btn { +- background: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjMDAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1MTIgNTEyIj48cGF0aCBkPSJNMjU2LDkyLjQ4MWM0NC40MzMsMCw4Ni4xOCwxNy4wNjgsMTE3LjU1Myw0OC4wNjRDNDA0Ljc5NCwxNzEuNDExLDQyMiwyMTIuNDEzLDQyMiwyNTUuOTk5cy0xNy4yMDYsODQuNTg4LTQ4LjQ0OCwxMTUuNDU1Yy0zMS4zNzIsMzAuOTk0LTczLjEyLDQ4LjA2NC0xMTcuNTUyLDQ4LjA2NHMtODYuMTc5LTE3LjA3LTExNy41NTItNDguMDY0QzEwNy4yMDYsMzQwLjU4Nyw5MCwyOTkuNTg1LDkwLDI1NS45OTlzMTcuMjA2LTg0LjU4OCw0OC40NDgtMTE1LjQ1M0MxNjkuODIxLDEwOS41NSwyMTEuNTY4LDkyLjQ4MSwyNTYsOTIuNDgxIE0yNTYsNTIuNDgxIGMtMTEzLjc3MSwwLTIwNiw5MS4xMTctMjA2LDIwMy41MThjMCwxMTIuMzk4LDkyLjIyOSwyMDMuNTIsMjA2LDIwMy41MmMxMTMuNzcyLDAsMjA2LTkxLjEyMSwyMDYtMjAzLjUyQzQ2MiwxNDMuNTk5LDM2OS43NzIsNTIuNDgxLDI1Niw1Mi40ODFMMjU2LDUyLjQ4MXogTTIwNi41NDQsMzU3LjE2MVYxNTkuODMzbDE2MC45MTksOTguNjY2TDIwNi41NDQsMzU3LjE2MXoiPjwvcGF0aD48L3N2Zz4K); +- height: 150px; +- left: 50%; +- margin-left: -75px; +- margin-top: -75px; +- position: absolute; +- top: 50%; +- -webkit-transition: 1s; +- transition: 1s; +- width: 150px +-} +- +-.flex-embed:hover .play-btn { +- opacity: .5 +-} +- +-.clearfix:after, .clearfix:before { +- content: ' '; +- display: table +-} +- +-.clearfix:after { +- clear: both +-} +- +-.clearfix { +- *zoom: 1 +-} +- +-.container { +- margin: 0 auto; +- max-width: 760px; +- padding: 0 10px +-} +- +-.aside { +- background-color: #eee; +- border: solid #e3e3e3; +- border-width: 1px 0; +- font-size: 1.125em; +- padding: 1em 0 +-} +- +-.btn, .cta-option { +- display: inline-block; +- position: relative +-} +- +-.cta-option { +- margin: 2.5em .5em 0; +- vertical-align: top +-} +- +-.btn { +- color: #fff; +- font-size: 1.5em; +- padding: .6em 1em; +- text-decoration: none; +- text-shadow: 0 -1px 0 rgba(0, 0, 0, .5); +- vertical-align: middle; +- border-radius: 4px; +- border: 1px solid #333 +-} +- +-.btn:active, .btn:focus, .btn:hover { +- text-decoration: none +-} +- +-.btn-download { +- background-color: #d9750b; +- background-image: -webkit-linear-gradient(#f90 10%, #e76a00 100%); +- background-image: linear-gradient(#f90 10%, #e76a00 100%); +- box-shadow: 0 1px 0 rgba(255, 255, 255, .5) inset, 0 1px 3px rgba(0, 0, 0, .2); +- border: 1px solid #995309 +-} +- +-.btn-download:active, .btn-download:focus, .btn-download:hover { +- background-color: #e0811b; +- background-image: -webkit-linear-gradient(#f0a100 10%, #f70 100%); +- background-image: linear-gradient(#f0a100 10%, #f70 100%) +-} +- +-.btn-download:active { +- background-color: #cf6a00; +- box-shadow: 0 2px 3px 0 rgba(0, 0, 0, .2) inset +-} +- +-.btn-alt { +- background-color: #444; +- border-color: #222; +- box-shadow: none; +- font-size: 1.25em; +- margin-top: .25em +-} +- +-.btn-alt:active, .btn-alt:focus, .btn-alt:hover { +- background-color: #555 +-} +- +-.star { +- color: #e08524 +-} +- +-.Icon { +- display: inline-block; +- height: 16px; +- margin: -3px 1px 0 0; +- vertical-align: middle; +- width: 16px +-} +- +-.Icon--github { +- background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMjEgMTIxIj48ZyBmaWxsPSIjMTkxNzE3Ij48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTYwLjUgMS42Yy0zMy4zIDAtNjAuNCAyNy02MC40IDYwLjQgMCAyNi43IDE3LjMgNDkuMyA0MS4zIDU3LjMgMyAuNiA0LjEtMS4zIDQuMS0yLjkgMC0xLjQtLjEtNi4yLS4xLTExLjItMTYuNyAzLjYtMjAuMy03LjItMjAuMy03LjItMi43LTctNi43LTguOC02LjctOC44LTUuNS0zLjcuNC0zLjcuNC0zLjcgNi4xLjQgOS4zIDYuMiA5LjMgNi4yIDUuNCA5LjIgMTQuMSA2LjYgMTcuNiA1IC41LTMuOSAyLjEtNi42IDMuOC04LjEtMTMuNC0xLjQtMjcuNS02LjYtMjcuNS0yOS44IDAtNi42IDIuNC0xMiA2LjItMTYuMi0uNi0xLjUtMi43LTcuNy42LTE2IDAgMCA1LjEtMS42IDE2LjYgNi4yIDQuOC0xLjMgMTAtMiAxNS4xLTJzMTAuMy43IDE1LjEgMmMxMS41LTcuOCAxNi42LTYuMiAxNi42LTYuMiAzLjMgOC4zIDEuMiAxNC41LjYgMTYgMy45IDQuMiA2LjIgOS42IDYuMiAxNi4yIDAgMjMuMi0xNC4xIDI4LjMtMjcuNSAyOS44IDIuMiAxLjkgNC4xIDUuNSA0LjEgMTEuMiAwIDguMS0uMSAxNC42LS4xIDE2LjYgMCAxLjYgMS4xIDMuNSA0LjEgMi45IDI0LTggNDEuMy0zMC42IDQxLjMtNTcuMyAwLTMzLjQtMjctNjAuNC02MC40LTYwLjR6Ii8+PHBhdGggZD0iTTIzIDg4LjNjLS4xLjMtLjYuNC0xIC4ycy0uNy0uNi0uNS0uOWMuMS0uMy42LS40IDEtLjJzLjYuNi41Ljl6bS0uOC0uNU0yNS40IDkxYy0uMy4zLS45LjEtMS4yLS4zLS40LS40LS41LTEtLjItMS4zLjMtLjMuOC0uMSAxLjIuMy41LjUuNSAxLjEuMiAxLjN6bS0uNS0uNk0yNy44IDk0LjVjLS40LjMtMSAwLTEuMy0uNS0uNC0uNS0uNC0xLjIgMC0xLjQuNC0uMyAxIDAgMS4zLjUuNC41LjQgMS4xIDAgMS40em0wIDBNMzEuMSA5Ny45Yy0uMy40LTEgLjMtMS42LS4yLS41LS41LS43LTEuMi0uMy0xLjUuMy0uNCAxLS4zIDEuNi4yLjUuNC42IDEuMS4zIDEuNXptMCAwTTM1LjYgOTkuOGMtLjEuNS0uOC43LTEuNS41LS43LS4yLTEuMS0uOC0xLTEuMi4xLS41LjgtLjcgMS41LS41LjcuMiAxLjEuNyAxIDEuMnptMCAwTTQwLjUgMTAwLjJjMCAuNS0uNi45LTEuMy45LS43IDAtMS4zLS40LTEuMy0uOXMuNi0uOSAxLjMtLjljLjcgMCAxLjMuNCAxLjMuOXptMCAwTTQ1LjEgOTkuNGMuMS41LS40IDEtMS4xIDEuMS0uNy4xLTEuMy0uMi0xLjQtLjctLjEtLjUuNC0xIDEuMS0xLjEuNy0uMSAxLjMuMiAxLjQuN3ptMCAwIi8+PC9nPjwvc3ZnPgo=) +-} +- +-.Icon--html5 { +- background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjUwIDEwMSA0MTIgNDEyIj48cGF0aCBmaWxsPSIjRTQ0RDI2IiBkPSJNMTA3LjY0NCA0NzAuODc3bC0zMy4wMTEtMzcwLjI1N2gzNjIuNzM0bC0zMy4wNDYgMzcwLjE5OS0xNDguNTQzIDQxLjE4MXoiLz48cGF0aCBmaWxsPSIjRjE2NTI5IiBkPSJNMjU2IDQ4MC41MjNsMTIwLjAzLTMzLjI3NyAyOC4yNC0zMTYuMzUyaC0xNDguMjd6Ii8+PHBhdGggZmlsbD0iI0VCRUJFQiIgZD0iTTI1NiAyNjguMjE3aC02MC4wOWwtNC4xNS00Ni41MDFoNjQuMjR2LTQ1LjQxMWgtMTEzLjg2OGwxLjA4NyAxMi4xODMgMTEuMTYxIDEyNS4xMzloMTAxLjYyem0wIDExNy45MzZsLS4xOTkuMDUzLTUwLjU3NC0xMy42NTYtMy4yMzMtMzYuMjE3aC00NS41ODVsNi4zNjIgNzEuMzAxIDkzLjAyIDI1LjgyMy4yMDktLjA1OHoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMjU1Ljg0MyAyNjguMjE3djQ1LjQxaDU1LjkxOGwtNS4yNzEgNTguODk0LTUwLjY0NyAxMy42N3Y0Ny4yNDRsOTMuMDk0LTI1LjgwMS42ODMtNy42NzIgMTAuNjcxLTExOS41NTEgMS4xMDgtMTIuMTk0aC0xMi4yMzd6bTAtOTEuOTEydjQ1LjQxMWgxMDkuNjg4bC45MTEtMTAuMjA3IDIuMDY5LTIzLjAyMSAxLjA4Ni0xMi4xODN6Ii8+PC9zdmc+Cg==) +-} +- +-.Icon--stackoverflow { +- background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjMgMi44IDU4LjIgNTgiPjxwYXRoIGQ9Ik05LjMwNSAzNi44NDhsNC40MDEuMDQzLS4xNTMgMTkuNTk4aDI5LjI5MXYtMTkuNTI4aDQuNjM4djI0LjI4N2gtMzguMjAxbC4wMjQtMjQuNDAxem03LjE3NyAxMS41ODZoMjIuOTQ1djQuODgyaC0yMi45NDV6IiBmaWxsPSIjOTE5MTkxIi8+PHBhdGggZmlsbD0iI2E3OGI2OCIgZD0iTTE3LjAyIDM5LjY0OGwyMi45NiAyLjIxNi0uNDgxIDQuOTgxLTIyLjk2LTIuMjE2eiIvPjxwYXRoIGZpbGw9IiNjMTk2NTMiIGQ9Ik0xOS4xMjEgMjkuNzEzbDIyLjIgNi4yNjYtMS4zNTkgNC44MTYtMjIuMi02LjI2NnoiLz48cGF0aCBmaWxsPSIjZDQ4YzI4IiBkPSJNMjQuNTAxIDE4LjQ4NGwxOS43NDUgMTEuOTI2LTIuNTg3IDQuMjgzLTE5Ljc0NS0xMS45MjZ6Ii8+PHBhdGggZmlsbD0iI2ZlODkwOCIgZD0iTTM1LjczMyA3Ljg0OWwxMy40MzUgMTguNzUxLTQuMDY4IDIuOTE0LTEzLjQzNS0xOC43NTF6Ii8+PHBhdGggZmlsbD0iI2ZmN2ExNSIgZD0iTTUxLjM0IDIuNzUxbDMuODAyIDIyLjc1Mi00LjkzNi44MjUtMy44MDItMjIuNzUyeiIvPjwvc3ZnPgo=) +-} +- +-.site-header { +- padding-top: 50px +-} +- +-.site-logo { +- color: #fff; +- float: left; +- font-size: 25px; +- font-weight: 700; +- line-height: 32px; +- text-decoration: none; +- text-shadow: 2px 2px 0 #000; +- text-transform: uppercase +-} +- +-.site-nav { +- float: right; +- list-style-type: none; +- margin: 7px 0 0; +- padding: 0 +-} +- +-.site-nav a { +- color: #ffa000; +- display: block; +- text-decoration: none; +- text-transform: uppercase +-} +- +-.site-nav a:active, .site-nav a:focus, .site-nav a:hover { +- color: #fff +-} +- +-.site-promo { +- padding: 4em 0 6em; +- color: white; +-} +- +-.site-promo .description { +- color: #ddd; +- font-size: 1.2em; +- margin: 1em 2em 0 +-} +- +-.last-update { +- color: #999; +- display: block; +- font-size: .75em; +- margin-top: 10px +-} +- +-.site-section { +- background-color: #f9f9f9; +- color: #333; +- overflow: hidden; +- padding: 2em 0 2em +-} +- +-.site-section-gray { +- background-color: #f5f5f5; +- color: #333; +- overflow: hidden; +- padding: 2em 0 2em +-} +- +-.site-section-dark { +- background-color: transparent; +- color: #fff; +- text-align: center; +- padding: 2em 0 3em +-} +- +-.site-section-dark .content { +- max-width: 720px; +- margin: auto; +- padding: 10px +-} +- +-.site-section-dark h2 { +- margin: 1em 0 +-} +-.site-section-dark h3 { +- color: white; +-} +- +-.in-the-wild { +- font-size: 1.25em; +- margin: 0 auto; +- max-width: 720px +-} +- +-.site-footer { +- font-size: .875em; +- padding: 2em +-} +- +-.site-footer a { +- color: #ffa000 +-} +- +-@media only screen and (max-width: 800px) { +- .site-logo, .site-nav { +- float: none +- } +- +- .site-nav li { +- margin: 0 .5em +- } +- +- .site-header { +- padding-top: 40px +- } +- +- .site-promo { +- padding: 3em 0; +- color: white; +- } +- +- .site-section { +- padding: 0 1em 4em +- } +-} +- +-@media only screen and (max-width: 600px) { +- html { +- font-size: 14px +- } +- +- .last-update, .site-footer { +- font-size: 1em +- } +-} +- +-@media only screen and (max-width: 460px) { +- .grid-cell { +- width: 100% +- } +-} +- +-@media only screen and (max-width: 420px) { +- h1 { +- font-size: 2.5em +- } +- +- html { +- font-size: 13px +- } +-} +- +-@media print { +- * { +- background-color: transparent !important; +- box-shadow: none !important; +- color: #000 !important; +- text-shadow: none !important +- } +- +- a, a:visited { +- text-decoration: underline +- } +- +- img { +- page-break-inside: avoid; +- max-width: 100% !important +- } +- +- h1 { +- padding: 1em 0 0 +- } +- +- .site-promo { +- margin: 1em; +- padding: 0; +- color: white; +- } +- +- .site-section { +- padding: 0; +- margin: 2em 1em +- } +- +- .site-section-dark { +- display: none +- } +- +- h2, h3, p { +- orphans: 3; +- widows: 3 +- } +- +- h2, h3 { +- page-break-after: avoid +- } +-} +-</style> +- +-<script> +- // --- OPTIONS FOR THE DASHBOARD -- +- +- // this section has to appear before loading dashboard.js +- +- // Select a theme. +- // uncomment on of the two themes: +- +- // var netdataTheme = 'default'; // this is white +- var netdataTheme = 'slate'; // this is dark +- +- var netdataNoBootstrap = true; +- +- // Set the default netdata server. +- // on charts without a 'data-host', this one will be used. +- // the default is the server that dashboard.js is downloaded from. +- +- // var netdataServer = 'http://my.server:19999/'; +-</script> +- +-<!-- +- --- LOAD dashboard.js --- +- +- to host this HTML file on your web server, +- you have to load dashboard.js from the netdata server. +- +- So, pick one the two below +- If you pick the first, set the server name/IP. +- +- The second assumes you host this file on /usr/share/netdata/web +- and that you have chown it to be owned by netdata:netdata +---> +-<!-- <script type="text/javascript" src="http://my.server:19999/dashboard.js"></script> --> +-<script type="text/javascript" src="dashboard.js?v20190902-0"></script> +- +-<script> +- // --- OPTIONS FOR THE CHARTS -- +- +- // destroy charts not shown (lowers memory on the browsers) +- // set this to 'true' to destroy, 'false' to hide the charts +- NETDATA.options.current.destroy_on_hide = false; +- +- // set this to false, to always show all dimensions +- NETDATA.options.current.eliminate_zero_dimensions = true; +- +- // set this to false, to lower the pressure on the browser +- NETDATA.options.current.concurrent_refreshes = true; +- +- // if you need to support slow mobile phones, set this to false +- NETDATA.options.current.parallel_refresher = true; +- +- // set this to false, to always update the charts, even if focus is lost +- NETDATA.options.current.stop_updates_when_focus_is_lost = true; +- +- // since we have many servers and limited sockets, +- // abort ajax calls when we scroll +- NETDATA.options.current.abort_ajax_on_scroll = true; +- +- // do not to give errors on netdata demo servers for 60 seconds +- NETDATA.options.current.retries_on_data_failures = 60; +-</script> +- +-<style> +- .mygauge-combo { +- display: inline-block; +- } +- +- .mygauge-combo20 { +- display: inline-block; +- min-width: 150px; +- width: 49%; +- padding-top: 40px; +- text-align: center; +- } +- +- .mygauge-combo30 { +- display: inline-block; +- min-width: 150px; +- width: 32%; +- padding-top: 40px; +- text-align: center; +- } +- +- .mygauge { +- position: relative; +- display: block; +- width: 171px; +- /* height: 150px; */ +- } +- +- .mygauge-button { +- display: block; +- } +- +- .mygauge-legend-button { +- font-size: 13px; +- } +- +- .mygause-donation { +- font-size: 9px; +- color: #999; +- } +- +- .mysparkline { +- position: relative; +- display: inline-block; +- width: 100%; +- height: 50px; +- text-align: left; +- } +- +- .mysparkline-overchart-label { +- position: absolute; +- display: block; +- top: -15px; +- left: 10px; +- bottom: 0; +- right: 0; +- font-size: 14px; +- z-index: 1; +- pointer-events: none; +- } +- +- .mysparkline-overchart-label2 { +- position: absolute; +- display: block; +- top: -15px; +- left: 10px; +- bottom: 0; +- right: 0; +- font-size: 8px; +- color: #676b70; +- z-index: 1; +- pointer-events: none; +- } +- +- .mysparkline-overchart-value { +- position: absolute; +- display: block; +- top: 0px; +- left: 10px; +- bottom: 0; +- right: 0; +- font-size: 40px; +- z-index: 2; +- text-shadow: #333 0px 0px 2px; +- pointer-events: none; +- } +- +- .mysparkline-overchart-value-center { +- position: absolute; +- display: block; +- top: 5px; +- left: 0px; +- bottom: 0; +- right: 0; +- font-size: 35px; +- font-weight: bold; +- text-align: center; +- z-index: 2; +- text-shadow: #333 0px 0px 2px; +- pointer-events: none; +- } +- +- .fb-share-button span { +- top: 0px; +- } +- .fb-like span { +- top: 0px; +- } +- .fb-follow span { +- top: 0px; +- } +- +-</style> +-</head> +-<body> +-<div class=container> +- <div class="site-header clearfix" role=banner> +- <div class=site-logo>my-netdata.io</div> +- <ul class="site-nav inline-block-list"> +- <li><a href=https://github.com/netdata/netdata data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label="Source code" target="_blank">Source code</a> +- <li><a href=https://docs.netdata.cloud data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=Docs target="_blank">Docs</a> +- </ul> +- </div> +- <div class=site-promo><h1><span class="title">Monitor your systems and applications, the right way!</span></h1> +- <p class=description> +- <strong>Unparalleled</strong> insights, in <strong>real-time</strong>, +- of <strong>everything</strong> happening on your systems and applications, +- with stunning, <strong>interactive</strong> web dashboards +- and powerful <strong>performance</strong> and <strong>health</strong> alarms. +- <div class=cta-option> +- <a class="btn btn-download" href="https://docs.netdata.cloud/packaging/installer/" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=Install><strong>Install netdata now</strong></a> +- <a class=last-update href="https://github.com/netdata/netdata/releases" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=Releases>See netdata releases</a></div> +- <div class=cta-option> +- <a class="btn btn-alt" href="#demosites" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=Demo>netdata live demo</a> +- </div> +- </div> +-</div> +-<div class=site-section> +- <div class=container><h2>Enter the world of Netdata!</h2> +- <div class="grid-title"> +- <h3><span class=star>★</span> 1s granularity</h3> +- </div> +- <div class=grid> +- <div class=grid-cell> +- <p> +- <b>Per second</b> data collection and visualization, for all metrics! +- </p> +- <p> +- Netdata <b>zooms into the problems</b> by providing higher resolution information, compared to any other monitoring solution. +- </p> +- </div> +- <div class=grid-cell> +- <p class="quote"><i> +- The world goes real-time. +- <br/> <br/> +- High resolution metrics are required to effectively monitor and troubleshoot systems and applications, especially on virtual environments. +- </i></p> +- </div> +- </div> +- </div> +- <div> +- <a href="https://docs.netdata.cloud/docs/why-netdata/1s-granularity/">Learn more about high resolution metrics</a> +- </div> +-</div> +- +-<div class="site-section site-section-gray"> +- <div class=container> +- <div class="grid-title"> +- <h3><span class=star>★</span> Unlimited metrics</h3> +- </div> +- <div class=grid> +- <div class=grid-cell> +- <p> +- Use all the metrics, from all available sources! +- </p> +- <p> +- Netdata collects all the metrics native console tools do. It has been <b>designed to kill the console</b> for troubleshooting infrastructure slowdowns and outages. +- </p> +- </div> +- <div class=grid-cell> +- <p class="quote"><i> +- All metrics are important and all should be available when you need them. +- <br/> <br/> +- Filtering out most metrics is like reading a book by skipping most of its pages. +- </i></p> +- </div> +- </div> +- </div> +- <div> +- <a href="https://docs.netdata.cloud/docs/why-netdata/unlimited-metrics/">Learn more about unlimited metrics</a> +- </div> +-</div> +-<div class="site-section"> +- <div class=container> +- <div class="grid-title"> +- <h3><span class=star>★</span> Meaningful presentation</h3> +- </div> +- <div class=grid> +- <div class=grid-cell> +- <p> +- Explore all metrics in a meaningful, easy to understand way! +- </p> +- <p> +- Netdata engineers and experts on our community organize metrics in a meaningful way, so that you can learn and understand them right on the job, while troubleshooting issues of your infrastructure. +- </p> +- </div> +- <div class=grid-cell> +- <p class="quote"><i> +- Metrics are a lot more than name-value pairs over time. +- <br/> <br/> +- It is just not practical to require from all users to have a deep understanding of all metrics for monitoring their systems and applications. +- </i></p> +- </div> +- </div> +- </div> +- <div> +- <a href="https://docs.netdata.cloud/docs/why-netdata/meaningful-presentation/">Learn more about meaningful presentation</a> +- </div> +-</div> +- +-<div class="site-section site-section-gray"> +- <div class=container> +- <div class="grid-title"> +- <h3><span class=star>★</span> Immediate results</h3> +- </div> +- <div class=grid> +- <div class=grid-cell> +- <p> +- Install and use immediately! Get fully functional visualization and alarms, in just a couple of seconds after installation! +- </p> +- <p> +- Netdata <b>decouples your skills from your monitoring infrastructure</b>. +- No matter how skillful or novice you are, Netdata will apply all the community knowledge and expertise to your monitoring infrastructure. +- </p> +- </div> +- <div class=grid-cell> +- <p class="quote"><i> +- Most of our infrastructure is based on standardized systems and applications. +- <br/> <br/> +- It is a tremendous waste of time and effort, in a global scale, to require from all users to configure their infrastructure dashboards and alarms metric by metric. +- </i></p> +- </div> +- </div> +- </div> +- <div> +- <a href="https://docs.netdata.cloud/docs/why-netdata/immediate-results/">Learn more about immediate results</a> +- </div> +-</div> +- +-<div class="site-section site-section-dark"> +- <div class=container><h2>How it works</h2> +- <div style="padding-bottom: 1em"> +- <p> +- Netdata is a monitoring agent you install on all your systems: +- <br/> +- <b>physical servers</b>, <b>virtual servers</b>, <b>containers</b>, <b>IoT</b>. +- </p> +- <p> +- Netdata is lightweight, designed to permanently run on all systems without disrupting their core function. +- By default, it needs just 1% CPU of a single core, a few MB or RAM and no disk I/O at all. +- </p> +- <p> +- Each Netdata is (by default) autonomous, taking care of all the following. +- <br/>But all your Netdata are integrated into one large distributed application. +- </p> +- </div> +- <div class=grid> +- <div class=grid-cell><h3><span class=star>★</span> Collect</h3> +- <p> +- Netdata automatically detects data collection sources on the host it runs. +- It comes with hundreds of plugins for collecting system and application metrics, +- including databases, web servers, and commonly used application servers. +- <br/> <br/> +- Netdata is also a high performance, distributed <b>statsd server</b>, allowing custom +- application metrics to be collected and visualized. +- </p> +- </div> +- <div class=grid-cell><h3><span class=star>★</span> Check (alarms)</h3> +- <p> +- Each Netdata spawns a thread that examines the metrics as they get collected, +- evaluates pre-configured alarm expressions and triggers alarm notifications. +- <br/> <br/> +- Netdata comes with hundreds of alarms to detect common system and application issues, +- that are automatically attached to the collected metrics, +- supporting dozens of alarm notification integrations. +- </p> +- </div> +- <div class=grid-cell><h3><span class=star>★</span> Stream</h3> +- <p> +- Each Netdata can stream its metrics, in real-time, to any other Netdata. +- Streaming allows Netdata to be used in ephemeral nodes and containers in auto-scaled environments, +- but it also allows building Netdata hierarchies for aggregating the metrics of multiple Netdata nodes. +- </p> +- </div> +- <div class=grid-cell><h3><span class=star>★</span> Store</h3> +- <p> +- Each Netdata has its own internal metrics database. This database is optimized +- for minimal memory footprint, and due to its lockless design allows one writer +- and multiple readers per metric, concurrently, contributing significantly to +- the performance of Netdata. +- </p> +- </div> +- <div class=grid-cell><h3><span class=star>★</span> Archive</h3> +- <p> +- Netdata can archive its metrics to time-series databases (prometheus, graphite, opentsdb, json document dbs, etc) +- so that Netdata can be integrated to existing monitoring tool-chains. +- </p> +- </div> +- <div class=grid-cell><h3><span class=star>★</span> Visualize</h3> +- <p> +- The best part of Netdata is its visualization. Low latency, speedy and snazzy. +- <br/> <br/> +- Netdata dashboards are optimized for visual anomaly detection, a powerful tool to troubleshoot +- performance issues. +- </p> +- </div> +- </div> +- </div> +-</div> +- +-<div class="site-section"> +- +-</div> +- +- +-<div id="demosites" class="site-section site-section-dark"><h2>netdata live demo sites</h2> +- <div class="content"> +- <div class="container" style="text-align: center;"> +- +- <div class="mygauge-combo"> +- <div class="mygauge"> +- <div data-netdata="netdata.requests" +- data-host="//london.my-netdata.io" +- data-title="EU - London" +- data-chart-library="gauge" +- data-decimal-digits="0" +- data-common-max="top-gauges" +- data-width="100%" +- data-after="-300" +- data-points="300" +- data-colors="#558855" +- ></div> +- </div> +- <div class="mygauge-button"> +- <a class="btn btn-alt mygauge-legend-button" href=//london.my-netdata.io/default.html data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=DemoLondon><strong>Enter London!</strong></a> +- <div class="mygause-donation"> +- Donated by DigitalOcean.com +- </div> +- </div> +- </div> +- <div class="mygauge-combo"> +- <div class="mygauge"> +- <div data-netdata="netdata.requests" +- data-host="//atlanta.my-netdata.io" +- data-title="US - Atlanta" +- data-chart-library="gauge" +- data-decimal-digits="0" +- data-common-max="top-gauges" +- data-width="100%" +- data-after="-300" +- data-points="300" +- data-colors="#AA5555" +- ></div> +- </div> +- <div class="mygauge-button"> +- <a class="btn btn-alt mygauge-legend-button" href=//atlanta.my-netdata.io/default.html data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=DemoAtlanta><strong>Enter Atlanta!</strong></a> +- <div class="mygause-donation"> +- Donated by CDN77.com +- </div> +- </div> +- </div> +- <div class="mygauge-combo"> +- <div class="mygauge"> +- <div data-netdata="netdata.requests" +- data-host="//sanfrancisco.my-netdata.io" +- data-title="US - California" +- data-chart-library="gauge" +- data-decimal-digits="0" +- data-common-max="top-gauges" +- data-width="100%" +- data-after="-300" +- data-points="300" +- data-colors="#5555AA" +- ></div> +- </div> +- <div class="mygauge-button"> +- <a class="btn btn-alt mygauge-legend-button" href=//sanfrancisco.my-netdata.io/default.html data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=DemoSanfrancisco><strong>Enter California!</strong></a> +- <div class="mygause-donation"> +- Donated by DigitalOcean.com +- </div> +- </div> +- </div> +- <div class="mygauge-combo"> +- <div class="mygauge"> +- <div data-netdata="netdata.requests" +- data-host="//toronto.my-netdata.io" +- data-title="Canada" +- data-chart-library="gauge" +- data-decimal-digits="0" +- data-common-max="top-gauges" +- data-width="100%" +- data-after="-300" +- data-points="300" +- data-colors="#885588" +- ></div> +- </div> +- <div class="mygauge-button"> +- <a class="btn btn-alt mygauge-legend-button" href=//toronto.my-netdata.io/default.html data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=DemoToronto><strong>Enter Canada!</strong></a> +- <div class="mygause-donation"> +- Donated by DigitalOcean.com +- </div> +- </div> +- </div> +- <br/> <br/> +- <div class="mygauge-combo"> +- <div class="mygauge"> +- <div data-netdata="netdata.requests" +- data-host="//frankfurt.my-netdata.io" +- data-title="EU - Germany" +- data-chart-library="easypiechart" +- data-decimal-digits="0" +- data-common-max="top-gauges" +- data-width="75%" +- data-after="-300" +- data-points="300" +- data-colors="#AAAA55" +- ></div> +- </div> +- <div class="mygauge-button"> +- <a class="btn btn-alt mygauge-legend-button" href=//frankfurt.my-netdata.io/default.html data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=DemoFrankfurt><strong>Enter Germany!</strong></a> +- <div class="mygause-donation"> +- Donated by DigitalOcean.com +- </div> +- </div> +- </div> +- <div class="mygauge-combo"> +- <div class="mygauge"> +- <div data-netdata="netdata.requests" +- data-host="//newyork.my-netdata.io" +- data-title="US - New York" +- data-chart-library="easypiechart" +- data-decimal-digits="0" +- data-common-max="top-gauges" +- data-width="75%" +- data-after="-300" +- data-points="300" +- data-colors="#BB5533" +- ></div> +- </div> +- <div class="mygauge-button"> +- <a class="btn btn-alt mygauge-legend-button" href=//newyork.my-netdata.io/default.html data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=DemoNewYork><strong>Enter New York!</strong></a> +- <div class="mygause-donation"> +- Donated by DigitalOcean.com +- </div> +- </div> +- </div> +- <div class="mygauge-combo"> +- <div class="mygauge"> +- <div data-netdata="netdata.requests" +- data-host="//singapore.my-netdata.io" +- data-title="Singapore" +- data-chart-library="easypiechart" +- data-decimal-digits="0" +- data-common-max="top-gauges" +- data-width="75%" +- data-after="-300" +- data-points="300" +- data-colors="#5588BB" +- ></div> +- </div> +- <div class="mygauge-button"> +- <a class="btn btn-alt mygauge-legend-button" href=//singapore.my-netdata.io/default.html data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=DemoSingapore><strong>Enter Singapore!</strong></a> +- <div class="mygause-donation"> +- Donated by DigitalOcean.com +- </div> +- </div> +- </div> +- <div class="mygauge-combo"> +- <div class="mygauge"> +- <div data-netdata="netdata.requests" +- data-host="//bangalore.my-netdata.io" +- data-title="India" +- data-chart-library="easypiechart" +- data-decimal-digits="0" +- data-common-max="top-gauges" +- data-width="75%" +- data-after="-300" +- data-points="300" +- data-colors="#BB55BB" +- ></div> +- </div> +- <div class="mygauge-button"> +- <a class="btn btn-alt mygauge-legend-button" href=//bangalore.my-netdata.io/default.html data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=DemoBangalore><strong>Enter India!</strong></a> +- <div class="mygause-donation"> +- Donated by DigitalOcean.com +- </div> +- </div> +- </div> +- <div style="padding-top: 20px;"> +- <div class="mygauge-combo"> +- <div class="mygauge"> +- <div style="padding-bottom: 20px; font-size: 10px; color: #676b70;"> +- <b>Israel</b> +- </div> +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label2"> +- requests/s +- </div> +- <div class="mysparkline-overchart-value" id="octopuscs.requests.netdata" > +- </div> +- <div data-netdata="netdata.requests" +- data-dimensions="requests" +- data-host="//octopuscs.my-netdata.io" +- data-common-max="top-gauges" +- data-decimal-digits="0" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#4BFF91" +- data-show-value-of-requests-at="octopuscs.requests.netdata" +- ></div> +- </div> +- </div> +- <div class="mygauge-button"> +- <a class="btn btn-alt mygauge-legend-button" href=//octopuscs.my-netdata.io/default.html data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=DemoOctopuscs><strong>Enter Israel!</strong></a> +- <div class="mygause-donation"> +- Donated by octopuscs.com +- </div> +- </div> +- </div> +- +- <div class="mygauge-combo"> +- <div class="mygauge"> +- <div style="padding-bottom: 20px; font-size: 10px; color: #676b70;"> +- <b>EU - Spain</b> +- </div> +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label2"> +- requests/s +- </div> +- <div class="mysparkline-overchart-value" id="stackscale.requests.netdata" > +- </div> +- <div data-netdata="netdata.requests" +- data-dimensions="requests" +- data-host="//stackscale.my-netdata.io" +- data-common-max="top-gauges" +- data-decimal-digits="0" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#4B91FF" +- data-show-value-of-requests-at="stackscale.requests.netdata" +- ></div> +- </div> +- </div> +- <div class="mygauge-button"> +- <a class="btn btn-alt mygauge-legend-button" href=//stackscale.my-netdata.io/default.html data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=DemoStackScale><strong>Enter Madrid!</strong></a> +- <div class="mygause-donation"> +- Donated by stackscale.com +- </div> +- </div> +- </div> +- <div class="mygauge-combo"> +- <div class="mygauge"> +- </div> +- </div> +- </div> +- </div> +- +- <div class="container" style="padding-top: 40px; text-align: center;"> +- Charts are coming from all servers, <b>in parallel</b>. +- <br/> +- The servers are <b>not aware</b> of this multi-server dashboard. +- </div> +- +- <div class="container" style="padding-top: 40px; padding-bottom: 40px; text-align: center;"> +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- <b>EU - London</b> connected clients +- </div> +- <div class="mysparkline-overchart-value" id="nginx_local.connections.netdata" > +- </div> +- <div data-netdata="nginx_local.connections" +- data-dimensions="active" +- data-host="//london.my-netdata.io" +- data-decimal-digits="0" +- data-common-max="web-connections" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#558855" +- data-show-value-of-active-at="nginx_local.connections.netdata" +- ></div> +- </div> +- </div> +- +- <div class="container" style="padding-top: 0px; text-align: center;"> +- Each server is <b>not aware</b> of the other servers. +- <br/> +- But on this dashboard <b>they are one</b>! (hover on the chart above) +- </div> +- +- +- <!-- +- <div style="padding-top: 40px; color: #999;"> +- <small>We would love to show demos of IoT devices running netdata.<br/> +- If you can host at your DC an RPi or a Linux IoT, <a href="mailto:costa <at> tsaousis.gr?subject=I can host IoT for netdata&body=Hi Costa,%0D%0A%0D%0AI would love to host an IoT device to demo netdata on it.%0D%0A%0D%0A-- please tell me who you are and what infrastructure you have --%0D%0A-- Take into account I would need SSH access to it --%0D%0A-- You have to have a DC - a home is not good enough - sorry. --%0D%0A%0D%0AThanks!">contact me</a>.</small> +- </div> +- --> +- </div> +-</div> +- +-<div class=site-section><h2>Who uses netdata?</h2> +- <div class="content"> +- <div class="container" style="text-align: center;"> +- <p> +- Netdata is used by hundreds of thousands of users all over the world. +- <br/> <br/> +- Check our <a href="https://github.com/netdata/netdata/watchers">GitHub watchers</a> list. +- <br/> +- You will find people working for <b>Amazon</b>, <b>Atos</b>, <b>Baidu</b>, <b>Cisco Systems</b>, <b>Citrix</b>, +- <b>Deutsche Telekom</b>, <b>DigitalOcean</b>, <b>Elastic</b>, <b>EPAM Systems</b>, <b>Ericsson</b>, <b>Google</b>, +- <b>Groupon</b>, <b>Hortonworks</b>, <b>HP</b>, <b>Huawei</b>, <b>IBM</b>, <b>Microsoft</b>, <b>NewRelic</b>, +- <b>Nvidia</b>, <b>Red Hat</b>, <b>SAP</b>, <b>Selectel</b>, <b>TicketMaster</b>, <b>Vimeo</b>, and many more! +- </p> +- <small> +- The following figures come from users using the <a href="https://github.com/netdata/netdata/tree/master/registry" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=GlobalRegistry>netdata public global registry</a>.<br/>Counting since May 16th 2016. Actual figures may be a lot higher.<br/></small> +- <div class="container" style="padding-top: 40px; text-align: center; width: 30%; min-width: 220px; display: inline-block;"> +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- netdata <b>unique users</b> +- </div> +- <div class="mysparkline-overchart-value-center" id="netdata.registry_entries.persons.netdata" > +- </div> +- <div data-netdata="netdata.registry_entries" +- data-dimensions="persons" +- data-host="//london.my-netdata.io" +- data-decimal-digits="0" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#558855" +- data-show-value-of-persons-at="netdata.registry_entries.persons.netdata" +- ></div> +- </div> +- </div> +- <div class="container" style="padding-top: 40px; text-align: center; width: 30%; min-width: 220px; display: inline-block;"> +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- netdata <b>monitored servers</b> +- </div> +- <div class="mysparkline-overchart-value-center" id="netdata.registry_entries.machines.netdata" > +- </div> +- <div data-netdata="netdata.registry_entries" +- data-dimensions="machines" +- data-host="//london.my-netdata.io" +- data-decimal-digits="0" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#558855 #558855 #558855" +- data-show-value-of-machines-at="netdata.registry_entries.machines.netdata" +- ></div> +- </div> +- </div> +- <div class="container" style="padding-top: 40px; text-align: center; width: 30%; min-width: 220px; display: inline-block;"> +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- netdata <b>sessions served</b> +- </div> +- <div class="mysparkline-overchart-value-center" id="netdata.registry_sessions.sessions.netdata" > +- </div> +- <div data-netdata="netdata.registry_sessions" +- data-dimensions="sessions" +- data-host="//london.my-netdata.io" +- data-decimal-digits="0" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#558855 #558855 #558855" +- data-show-value-of-sessions-at="netdata.registry_sessions.sessions.netdata" +- ></div> +- </div> +- </div> +- <p> +- +- <!-- +- <embed src="//registry.my-netdata.io/api/v1/badge.svg?chart=netdata.registry_entries&dimensions=persons&label=user%20base&units=null&value_color=blue&precision=0&refresh=30&v42" type="image/svg+xml" height="20" /> +- <embed src="//registry.my-netdata.io/api/v1/badge.svg?chart=netdata.registry_entries&dimensions=machines&label=servers%20monitored&units=null&value_color=orange&precision=0&refresh=30&v42" type="image/svg+xml" height="20" /> +- <embed src="//registry.my-netdata.io/api/v1/badge.svg?chart=netdata.registry_sessions&label=sessions%20served&units=null&value_color=yellowgreen&precision=0&refresh=30&v42" type="image/svg+xml" height="20" /> +- <br/><i>(figures come from <a href="https://github.com/netdata/netdata/tree/master/registry" target="_blank">the public netdata registry</a> data, showing only installations that use this registry, counting since May 16th 2016)</i> +- <br/> +- --> +- </p> +- <p> +- <small> +- netdata can generate auto-refreshing <strong><a href="https://github.com/netdata/netdata/tree/master/web/api/badges#netdata-badges" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=Badges>badges</a></strong>, like these: +- </small> +- <br/> +- <embed style="padding-top: 10px; padding-bottom: 25px;" src="//registry.my-netdata.io/api/v1/badge.svg?chart=netdata.registry_entries&dimensions=persons&after=-86400&options=unaligned&group=incremental-sum&label=new%20users%20today&units=null&value_color=blue&precision=0&refresh=60&v42" type="image/svg+xml" height="20" /> +- <embed style="padding-top: 10px; padding-bottom: 25px;" src="//registry.my-netdata.io/api/v1/badge.svg?chart=netdata.registry_entries&dimensions=machines&group=incremental-sum&after=-86400&options=unaligned&label=servers%20added%20today&units=null&value_color=orange&precision=0&refresh=60&v42" type="image/svg+xml" height="20" /> +- <embed style="padding-top: 10px; padding-bottom: 25px;" src="//registry.my-netdata.io/api/v1/badge.svg?chart=netdata.registry_sessions&after=-86400&group=incremental-sum&options=unaligned&label=sessions%20served%20today&units=null&value_color=yellowgreen&precision=0&refresh=60&v42" type="image/svg+xml" height="20" /> +- <br/> +- <small>These badges auto-refresh every minute.</small> +- </p> +- </div> +- <div class="container" style="text-align: center;"> +- <strong>netdata</strong> is featured at the <a href="https://octoverse.github.com/2016/" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=Octoverse>GitHub's state of the Octoverse 2016</a> +- <div style="padding-top: 10px;"> +- <a href="https://octoverse.github.com/2016/" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=OctoverseImage> +- <img src="https://cloud.githubusercontent.com/assets/2662304/21743260/23ebe62c-d507-11e6-80c0-76b95f53e464.png" width="90%" style="border-radius: 4px; border: 1px solid #fff;"/> +- </a> +- </div> +- </div> +- <div class=cta-option> +- <a class="btn btn-download" href="https://docs.netdata.cloud/packaging/installer/" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=InstallAfterDemo><strong>Install netdata now</strong></a> +- </div> +- </div> +-</div> +-<div class=aside> +- <div class=container> +- <!-- Place this tag where you want the button to render. --> +- <a class="github-button" href="https://github.com/netdata/netdata/subscription" data-style="mega" data-show-count="true" aria-label="Watch netdata/netdata on GitHub"><img src="https://img.shields.io/github/watchers/netdata/netdata.svg?style=flat&label=Github%20Watchers"></a> +- <!-- Place this tag where you want the button to render. --> +- <a class="github-button" href="https://github.com/netdata/netdata" data-style="mega" data-show-count="true" aria-label="Star netdata/netdata on GitHub"><img src="https://img.shields.io/github/stars/netdata/netdata.svg?style=flat&label=Github%20Stars"></a> +- <!-- Place this tag where you want the button to render. --> +- <a class="github-button" href="https://github.com/netdata/netdata/fork" data-style="mega" data-show-count="true" aria-label="Fork netdata/netdata on GitHub"><img src="https://img.shields.io/github/forks/netdata/netdata.svg?style=flat&label=Github%20Repo%20Forks"></a> +- </div> +-</div> +- +-<!-- the footer --> +-<div class=site-footer role=contentinfo> +- <p> +- <div style="display: inline-block;"> +- <div style="vertical-align:top;display:inline-block; height: 34px;">twitter:</div> +- <div style="vertical-align:top;display:inline-block; height: 34px;"><a class=twitter-share-button href=https://twitter.com/share data-count=none data-lang=en data-via=linuxnetdata data-size=small data-text="Get control of your Linux servers. Simple. Effective. Awesome." data-url=https://my-netdata.io/ >Tweet</a></div> +- <div style="vertical-align:top;display:inline-block; height: 34px;"><a class=twitter-follow-button href=https://twitter.com/linuxnetdata data-show-count=false data-lang=en data-size=small>Follow @linuxnetdata</a></div> +- </div> +- <div style="display: inline-block;"> +- <div style="vertical-align:top;display:inline-block; height: 34px; padding-left: 10px;">facebook:</div> +- <div class="fb-like" data-href="https://my-netdata.io/" data-layout="button" data-action="like" data-show-faces="false" data-share="false" style="vertical-align:top;display:inline-block; height: 34px;"></div> +- <div class="fb-share-button" data-href="https://my-netdata.io/" data-layout="button" data-size="small" data-mobile-iframe="true"><a class="fb-xfbml-parse-ignore" target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fmy-netdata.io%2F&src=sdkpreparse" style="vertical-align:top;display:inline-block; height: 34px;">Share</a></div> +- <div class="fb-follow" data-href="https://www.facebook.com/linuxnetdata/" data-layout="standard" data-size="small" data-show-faces="false" data-colorscheme="dark" width="225" style="vertical-align:top;display:inline-block; height: 34px;"></div> +- </div> +- </p> +- <p> +- <strong>netdata</strong><br/> +- © Copyright 2018-2019, <a href="https://github.com/netdata" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=NetdataInc>Netdata</a><br/> +- © Copyright 2016-2018, <a href="https://github.com/ktsaou" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=CostaTsaousis>Costa Tsaousis</a><br/> +- Released under <a href="https://github.com/netdata/netdata/blob/master/LICENSE.md" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=License>GPL v3+</a><br/> +- </p> +- </p> +- <p style="padding-top: 20px;"> +- netdata has received significant contributions from:<br/> <br/> +- <a href="https://github.com/philwhineray" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=Phil>Phil Whineray</a> (release management),<br/> +- <a href="https://github.com/alonbl" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=Alon>Alon Bar-Lev</a> (autoconf and automake),<br/> +- <a href="https://github.com/titpetric" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=titpetric>Tit Petric</a> (docker image maintainer),<br/> +- <a href="https://github.com/paulfantom" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=Pawel>Paweł Krupa</a> (python.d.plugin and modules),<br/> +- <a href="https://github.com/simonnagl" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=simonnagl>simonnagl</a> (disk plugin and more),<br/> +- <a href="https://github.com/fredericopissarra" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=Frederico>Frederico Lamberti Pissarra</a> (performance improvements)<br/> +- <a href="https://github.com/vlvkobal" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=VladimirKobal>Vladimir Kobal</a> (FreeBSD port)<br/> +- <a href="https://github.com/l2isbad" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=l2isbad>Ilya Mashchenko</a> (python plugin modules)<br/> +- <br/> +- and dozens more enthusiasts, engineers and professionals.<br/> <br/> +- </p> +- </p> +- Thank you! You are awesome! +- <p> +-</div> +-</body> +- +-<script> +- if(window.location.hostname != 'my-netdata.io' || window.location.protocol != 'https:') { +- var canonical = document.createElement('link'); +- canonical.rel = 'canonical'; +- canonical.href = 'https://my-netdata.io/'; +- document.head.appendChild(canonical); +- } +-</script> +- +-<script>!function (t, e) { +- "use strict"; +- function a(t, n) { +- return t.hasAttribute(n) === !0 ? t : t.parentNode !== r.body ? a(t.parentNode, n) : e +- } +- +- function n(n) { +- var o, i, r, c, g, u = a(n.target, "data-ga-action"), l = !1; +- u !== e && (o = u.getAttribute("data-ga-action") || e, i = u.getAttribute("data-ga-category") || e, r = u.getAttribute("data-ga-label") || e, c = u.getAttribute("href"), g = parseInt(u.getAttribute("data-ga-value"), 10) || e, ga !== e && i !== e && o !== e && (n.preventDefault(), "Download" !== i && n.ctrlKey !== !0 && n.metaKey !== !0 && 2 !== n.which || (l = !0, t.open(c)), function (a) { +- var n; +- ga("send", "event", i, o, r, g, { +- hitCallback: function () { +- l === !1 && (n !== e && clearTimeout(n), t.location = a) +- } +- }), n = setTimeout(function () { +- l === !1 && (t.location.href = a) +- }, 1e3) +- }(c))) +- } +- +- function o() { +- !function (t, e, a, n, o, i) { +- t.GoogleAnalyticsObject = n, t[n] || (t[n] = function () { +- (t[n].q = t[n].q || []).push(arguments) +- }), t[n].l = +new Date, o = e.createElement(a), i = e.getElementsByTagName(a)[0], o.src = "//www.google-analytics.com/analytics.js", i.parentNode.insertBefore(o, i) +- }(t, r, "script", "ga"), ga("create", "UA-64295674-3", "auto"), ga("send", "pageview", "/site"+window.location.pathname), t.document.addEventListener("click", n) +- } +- +- function i() { +- !function (t, e, a) { +- var n, o = t.getElementsByTagName(e)[0]; +- t.getElementById(a) || (n = t.createElement(e), n.id = a, n.src = "//platform.twitter.com/widgets.js", o.parentNode.insertBefore(n, o)) +- }(r, "script", "twitter-wjs") +- } +- +- var r = t.document; +- o(), t.onload = i +-}(window)</script> +- +-<!-- facebook sdk --> +-<div id="fb-root"></div> +-<script> +- window.fbAsyncInit = function() { +- FB.init({ +- appId : '1200089276712916', +- xfbml : true, +- version : 'v2.8' +- }); +- }; +- +- (function(d, s, id){ +- var js, fjs = d.getElementsByTagName(s)[0]; +- if (d.getElementById(id)) {return;} +- js = d.createElement(s); js.id = id; +- js.src = "//connect.facebook.net/en_US/sdk.js"; +- fjs.parentNode.insertBefore(js, fjs); +- }(document, 'script', 'facebook-jssdk')); +-</script> +- +-<script> +- var allTitles = [ +- 'Get control<br/>of your Linux servers' +- , 'Get control<br/>of your FreeBSD servers' +- , 'Monitor<br/>your containers' +- , 'Monitor<br/>your virtual machines' +- , 'Monitor<br/>your web servers' +- , 'Monitor<br/>your databases' +- , 'Monitor<br/>your applications' +- , 'Monitor<br/>your SNMP devices' +- , 'Monitor<br/>your IoT devices' +- , 'Monitor<br/>your MacOS systems' +- ]; +- var lastTitle = -1; +- +- function updateTitle(){ +- lastTitle++; +- if(lastTitle >= allTitles.length) +- lastTitle = 0; +- +- var os = document.getElementsByClassName('title'); +- var len = os.length; +- while (len--) { +- var el = os[len]; +- el.innerHTML = allTitles[lastTitle]; +- el.classList.add('titlefadein'); +- } +- +- setTimeout(function() { +- var os = document.getElementsByClassName('title'); +- var len = os.length; +- while (len--) +- os[len].classList.remove('titlefadein'); +- +- }, 5750); +- setTimeout(updateTitle, 6000); +- } +- //updateTitle(); +-</script> +- +-<!-- Start of HubSpot Embed Code --> +-<script type="text/javascript" id="hs-script-loader" async defer src="//js.hs-scripts.com/4567453.js"></script> +-<!-- End of HubSpot Embed Code --> +diff --git a/web/gui/demosites2.html b/web/gui/demosites2.html +deleted file mode 100644 +index fe35cfb6..00000000 +--- a/web/gui/demosites2.html ++++ /dev/null +@@ -1,1112 +0,0 @@ +-<!DOCTYPE html> +-<!-- SPDX-License-Identifier: GPL-3.0-or-later --> +-<html lang="en"> +-<head> +- <title>NetData - Real-time performance monitoring, done right!</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"> +- +- <meta property="og:locale" content="en_US" /> +- <meta property="og:image" content="https://cloud.githubusercontent.com/assets/2662304/22945737/e98cd0c6-f2fd-11e6-96f1-5501934b0955.png"/> +- <meta property="og:url" content="http://my-netdata.io/"/> +- <meta property="og:type" content="website"/> +- <meta property="og:site_name" content="netdata"/> +- <meta property="og:title" content="netdata - real-time performance monitoring, done right!"/> +- <meta property="og:description" content="Stunning real-time dashboards, blazingly fast and extremely interactive. Zero configuration, zero dependencies, zero maintenance." /> +-</head> +- +-<script> +- // --- OPTIONS FOR THE DASHBOARD -- +- +- // this section has to appear before loading dashboard.js +- +- // Select a theme. +- // uncomment on of the two themes: +- +- // var netdataTheme = 'default'; // this is white +- var netdataTheme = 'slate'; // this is dark +- +- +- // Set the default netdata server. +- // on charts without a 'data-host', this one will be used. +- // the default is the server that dashboard.js is downloaded from. +- +- // var netdataServer = 'http://my.server:19999/'; +- </script> +- +- <!-- +- --- LOAD dashboard.js --- +- +- to host this HTML file on your web server, +- you have to load dashboard.js from the netdata server. +- +- So, pick one the two below +- If you pick the first, set the server name/IP. +- +- The second assumes you host this file on /usr/share/netdata/web +- and that you have chown it to be owned by netdata:netdata +- --> +- <!-- <script type="text/javascript" src="http://my.server:19999/dashboard.js"></script> --> +- <script type="text/javascript" src="dashboard.js?v20190902-0"></script> +- +- <script> +- // --- OPTIONS FOR THE CHARTS -- +- +- // destroy charts not shown (lowers memory on the browsers) +- // set this to 'true' to destroy, 'false' to hide the charts +- NETDATA.options.current.destroy_on_hide = false; +- +- // set this to false, to always show all dimensions +- NETDATA.options.current.eliminate_zero_dimensions = true; +- +- // set this to false, to lower the pressure on the browser +- NETDATA.options.current.concurrent_refreshes = true; +- +- // if you need to support slow mobile phones, set this to false +- NETDATA.options.current.parallel_refresher = true; +- +- // set this to false, to always update the charts, even if focus is lost +- NETDATA.options.current.stop_updates_when_focus_is_lost = true; +- +- // since we have many servers and limited sockets, +- // abort ajax calls when we scroll +- NETDATA.options.current.abort_ajax_on_scroll = true; +-</script> +-<style> +- body { +- font-size: 1vw; +- } +- +- .mysparkline { +- position: relative; +- display: inline-block; +- min-height: 50px; +- width: 100%; +- height: 7vmax; +- text-align: left; +- } +- +- .mysparkline-overchart-label { +- position: absolute; +- display: block; +- top: 0; +- left: 10px; +- bottom: 0; +- right: 0; +- font-size: 1vmax; +- z-index: 1; +- } +- +- .mysparkline-overchart-value { +- position: absolute; +- display: block; +- top: 1.1vmax; +- left: 10px; +- bottom: 0; +- right: 0; +- font-size: 5vmax; +- z-index: 2; +- text-shadow: #333 0px 0px 2px; +- } +- +- .myfullchart { +- position: relative; +- display: inline-block; +- width: 100%; +- height: 12vmax; +- min-height: 150px; +- text-align: left; +- } +- +- .mygauge-combo { +- display: inline-block; +- } +- +- .mygauge { +- position: relative; +- display: block; +- width: 18vw; +- height: 11vw; +- } +- +- .mygauge-button { +- display: block; +- } +- +- .mytitle { +- padding-top: 6vw; +- padding-bottom: 1vw; +- text-align: center; +- font-size: 2.4vw; +- } +- +- .mysubtitle { +- padding-top: 2vw; +- padding-bottom: 1vw; +- text-align: center; +- font-size: 1.8vw; +- } +- +- .mycontent { +- text-align: center; +- font-size: 1.5vw; +- } +- +- @media only screen and (min-width : 992px) { +- .container { +- width: 80%; +- } +- } +- @media only screen and (max-width : 992px) { +- .container { +- width: 100%; +- } +- } +-</style> +- +-<body style="text-align: center; background-color: #272b30;"> +- +-<div class="container"> +- +- <div style="text-align: center; font-size: 13vw; height: 14vw;"> +- <b>netdata</b> +- </div> +- <div style="text-align: center; font-size: 2vw; height: 2.5vw;"> +- real-time performance monitoring +- </div> +- <div style="width:80%; text-align: right; font-size: 2.7vw;"> +- <strong>scaled out</strong>! +- </div> +- <div class="mytitle"> +- pick a <b>netdata</b> demo server +- </div> +- <div class="mycontent"> +- these demo servers show what you will get by installing <b>netdata</b> +- </div> +- +- <div style="width: 100%; text-align: center; padding-top: 2vw;"> +- <div style="width: 100%; text-align: center;"> +- +- <div class="mygauge-combo"> +- <div class="mygauge"> +- <div data-netdata="netdata.requests" +- data-host="//london.my-netdata.io" +- data-title="EU - London" +- data-chart-library="gauge" +- data-decimal-digits="0" +- data-common-max="top-gauges" +- data-width="100%" +- data-after="-300" +- data-points="300" +- data-colors="#558855" +- ></div> +- </div> +- <div class="mygauge-button"> +- <br/> <br/> +- <button type="button" class="btn btn-default" data-toggle="button" aria-pressed="false" autocomplete="off" onclick="window.location='//london.my-netdata.io/default.html'" style="font-size: 1.0vw;">Enter London!</button> +- <div style="font-size: 0.8vw;"> +- Donated by DigitalOcean.com +- </div> +- </div> +- </div> +- <div class="mygauge-combo"> +- <div class="mygauge"> +- <div data-netdata="netdata.requests" +- data-host="//atlanta.my-netdata.io" +- data-title="US - Atlanta" +- data-chart-library="gauge" +- data-decimal-digits="0" +- data-common-max="top-gauges" +- data-width="100%" +- data-after="-300" +- data-points="300" +- data-colors="#AA5555" +- ></div> +- </div> +- <div class="mygauge-button"> +- <br/> <br/> +- <button type="button" class="btn btn-default" data-toggle="button" aria-pressed="false" autocomplete="off" onclick="window.location='//atlanta.my-netdata.io/default.html'" style="font-size: 1.0vw;">Enter Atlanta!</button> +- <div style="font-size: 0.8vw;"> +- Donated by CDN77.com +- </div> +- </div> +- </div> +- <div class="mygauge-combo"> +- <div class="mygauge"> +- <div data-netdata="netdata.requests" +- data-host="//sanfrancisco.netdata.rocks" +- data-title="US - California" +- data-chart-library="gauge" +- data-decimal-digits="0" +- data-common-max="top-gauges" +- data-width="100%" +- data-after="-300" +- data-points="300" +- data-colors="#5555AA" +- ></div> +- </div> +- <div class="mygauge-button"> +- <br/> <br/> +- <button type="button" class="btn btn-default" data-toggle="button" aria-pressed="false" autocomplete="off" onclick="window.location='//sanfrancisco.netdata.rocks/default.html'" style="font-size: 1.0vw;">Enter California!</button> +- <div style="font-size: 0.8vw;"> +- Donated by DigitalOcean.com +- </div> +- </div> +- </div> +- <div class="mygauge-combo"> +- <div class="mygauge"> +- <div data-netdata="netdata.requests" +- data-host="//toronto.netdata.rocks" +- data-title="Canada" +- data-chart-library="gauge" +- data-decimal-digits="0" +- data-common-max="top-gauges" +- data-width="100%" +- data-after="-300" +- data-points="300" +- data-colors="#885588" +- ></div> +- </div> +- <div class="mygauge-button"> +- <br/> <br/> +- <button type="button" class="btn btn-default" data-toggle="button" aria-pressed="false" autocomplete="off" onclick="window.location='//toronto.netdata.rocks/default.html'" style="font-size: 1.0vw;">Enter Canada!</button> +- <div style="font-size: 0.8vw;"> +- Donated by DigitalOcean.com +- </div> +- </div> +- </div> +- <br/> <br/> +- <div class="mygauge-combo"> +- <div class="mygauge"> +- <div data-netdata="netdata.requests" +- data-host="//frankfurt.netdata.rocks" +- data-title="EU - Germany" +- data-chart-library="easypiechart" +- data-decimal-digits="0" +- data-common-max="top-gauges" +- data-width="75%" +- data-after="-300" +- data-points="300" +- data-colors="#AAAA55" +- ></div> +- </div> +- <div class="mygauge-button"> +- <br/> <br/> +- <button type="button" class="btn btn-default" data-toggle="button" aria-pressed="false" autocomplete="off" onclick="window.location='//frankfurt.netdata.rocks/default.html'" style="font-size: 1.0vw;">Enter Germany!</button> +- <div style="font-size: 0.8vw;"> +- Donated by DigitalOcean.com +- </div> +- </div> +- </div> +- <div class="mygauge-combo"> +- <div class="mygauge"> +- <div data-netdata="netdata.requests" +- data-host="//newyork.netdata.rocks" +- data-title="US - New York" +- data-chart-library="easypiechart" +- data-decimal-digits="0" +- data-common-max="top-gauges" +- data-width="75%" +- data-after="-300" +- data-points="300" +- data-colors="#BB5533" +- ></div> +- </div> +- <div class="mygauge-button"> +- <br/> <br/> +- <button type="button" class="btn btn-default" data-toggle="button" aria-pressed="false" autocomplete="off" onclick="window.location='//newyork.netdata.rocks/default.html'" style="font-size: 1.0vw;">Enter New York!</button> +- <div style="font-size: 0.8vw;"> +- Donated by DigitalOcean.com +- </div> +- </div> +- </div> +- <div class="mygauge-combo"> +- <div class="mygauge"> +- <div data-netdata="netdata.requests" +- data-host="//singapore.netdata.rocks" +- data-title="Singapore" +- data-chart-library="easypiechart" +- data-decimal-digits="0" +- data-common-max="top-gauges" +- data-width="75%" +- data-after="-300" +- data-points="300" +- data-colors="#5588BB" +- ></div> +- </div> +- <div class="mygauge-button"> +- <br/> <br/> +- <button type="button" class="btn btn-default" data-toggle="button" aria-pressed="false" autocomplete="off" onclick="window.location='//singapore.netdata.rocks/default.html'" style="font-size: 1.0vw;">Enter Singapore!</button> +- <div style="font-size: 0.8vw;"> +- Donated by DigitalOcean.com +- </div> +- </div> +- </div> +- <div class="mygauge-combo"> +- <div class="mygauge"> +- <div data-netdata="netdata.requests" +- data-host="//bangalore.netdata.rocks" +- data-title="India" +- data-chart-library="easypiechart" +- data-decimal-digits="0" +- data-common-max="top-gauges" +- data-width="75%" +- data-after="-300" +- data-points="300" +- data-colors="#BB55BB" +- ></div> +- </div> +- <div class="mygauge-button"> +- <br/> <br/> +- <button type="button" class="btn btn-default" data-toggle="button" aria-pressed="false" autocomplete="off" onclick="window.location='//bangalore.netdata.rocks/default.html'" style="font-size: 1.0vw;">Enter India!</button> +- <div style="font-size: 0.8vw;"> +- Donated by DigitalOcean.com +- </div> +- </div> +- </div> +- </div> +- </div> +- +- <div class="mytitle"> +- this page is a custom <b>netdata</b> dashboard +- </div> +- <div class="mycontent"> +- charts are coming from 8 servers, in parallel +- <br/> +- the servers are not aware of this multi-server dashboard, +- <br/> +- each server is not aware of the other servers, +- <br/> +- but on this dashboard <b>they are one</b>! +- </div> +- <div style="padding-top: 1vw; width: 100%; text-align: center; font-size: 1.5vw;"> +- <i class="fa fa-comment" aria-hidden="true"></i> +- hover on a chart below, or drag it to show the past - <b>the others will follow</b>! +- <br/> +- double click on a chart to reset them all +- </div> +- +- <div class="mytitle"> +- our <code>nginx</code> performance +- </div> +- <div class="mycontent"> +- (we proxy netdata through nginx, on the demo sites) +- </div> +- +- <!-- Nav tabs --> +- <ul class="nav nav-tabs" role="tablist" style="padding-top: 1vw;"> +- <li role="presentation" class="active"><a href="#nginx_requests" aria-controls="nginx_requests" role="tab" data-toggle="tab">Requests</a></li> +- <li role="presentation"><a href="#nginx_connections" aria-controls="nginx_connections" role="tab" data-toggle="tab">Connections</a></li> +- </ul> +- +- <!-- Tab panes --> +- <div class="tab-content"> +- <div role="tabpanel" class="tab-pane active" id="nginx_requests"> +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- <b>EU - London</b> web requests/s +- </div> +- <div class="mysparkline-overchart-value" id="nginx_local.requests.netdata" > +- </div> +- <div data-netdata="nginx_local.requests" +- data-dimensions="requests" +- data-host="//london.my-netdata.io" +- data-decimal-digits="0" +- data-common-max="web-requests" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#558855" +- data-show-value-of-requests-at="nginx_local.requests.netdata" +- ></div> +- </div> +- +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- <b>US - Atlanta</b> web requests/s +- </div> +- <div class="mysparkline-overchart-value" id="nginx_local.requests.netdata2" > +- </div> +- <div data-netdata="nginx_local.requests" +- data-dimensions="requests" +- data-host="//atlanta.my-netdata.io" +- data-decimal-digits="0" +- data-common-max="web-requests" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#AA5555" +- data-show-value-of-requests-at="nginx_local.requests.netdata2" +- ></div> +- </div> +- +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- <b>US - California</b> web requests/s +- </div> +- <div class="mysparkline-overchart-value" id="nginx_local.requests.netdata3" > +- </div> +- <div data-netdata="nginx_local.requests" +- data-dimensions="requests" +- data-host="//sanfrancisco.netdata.rocks" +- data-decimal-digits="0" +- data-common-max="web-requests" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#5555AA" +- data-show-value-of-requests-at="nginx_local.requests.netdata3" +- ></div> +- </div> +- +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- <b>Canada</b> web requests/s +- </div> +- <div class="mysparkline-overchart-value" id="nginx_local.requests.netdata4" > +- </div> +- <div data-netdata="nginx_local.requests" +- data-dimensions="requests" +- data-host="//toronto.netdata.rocks" +- data-decimal-digits="0" +- data-common-max="web-requests" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#885588" +- data-show-value-of-requests-at="nginx_local.requests.netdata4" +- ></div> +- </div> +- </div> +- +- <div role="tabpanel" class="tab-pane" id="nginx_connections"> +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- <b>EU - London</b> active connections +- </div> +- <div class="mysparkline-overchart-value" id="nginx_local.connections.netdata1" > +- </div> +- <div data-netdata="nginx_local.connections" +- data-dimensions="active" +- data-host="//london.my-netdata.io" +- data-decimal-digits="0" +- data-common-max="web-connections" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#558855" +- data-show-value-of-active-at="nginx_local.connections.netdata1" +- ></div> +- </div> +- +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- <b>US - Atlanta</b> active connections +- </div> +- <div class="mysparkline-overchart-value" id="nginx_local.connections.netdata2" > +- </div> +- <div data-netdata="nginx_local.connections" +- data-dimensions="active" +- data-host="//atlanta.my-netdata.io" +- data-decimal-digits="0" +- data-common-max="web-connections" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#AA5555" +- data-show-value-of-active-at="nginx_local.connections.netdata2" +- ></div> +- </div> +- +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- <b>US - California</b> active connections +- </div> +- <div class="mysparkline-overchart-value" id="nginx_local.connections.netdata3" > +- </div> +- <div data-netdata="nginx_local.connections" +- data-dimensions="active" +- data-host="//sanfrancisco.netdata.rocks" +- data-decimal-digits="0" +- data-common-max="web-connections" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#5555AA" +- data-show-value-of-active-at="nginx_local.connections.netdata3" +- ></div> +- </div> +- +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- <b>Canada</b> active connections +- </div> +- <div class="mysparkline-overchart-value" id="nginx_local.connections.netdata4" > +- </div> +- <div data-netdata="nginx_local.connections" +- data-dimensions="active" +- data-host="//toronto.netdata.rocks" +- data-decimal-digits="0" +- data-common-max="web-connections" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#885588" +- data-show-value-of-active-at="nginx_local.connections.netdata4" +- ></div> +- </div> +- </div> +- </div> +- +- <div style="width: 100%; text-align: right; font-size: 1vw;"> +- <i class="fa fa-comment" aria-hidden="true"></i> these charts are draggable and touchable, double click them to reset them +- </div> +- +- +- <div class="mytitle"> +- bandwidth consumption on the demo sites +- </div> +- <div class="mycontent"> +- Linux QoS is configured by <a href="https://github.com/netdata/netdata/tree/master/collectors/tc.plugin#tcplugin">FireQOS</a> +- </div> +- +- <!-- Nav tabs --> +- <ul class="nav nav-tabs" role="tablist" style="padding-top: 1vw;"> +- <li role="presentation" class="active"><a href="#outbout" aria-controls="outbout" role="tab" data-toggle="tab">Outbound</a></li> +- <li role="presentation"><a href="#inbound" aria-controls="inbound" role="tab" data-toggle="tab">Inbound</a></li> +- </ul> +- +- <!-- Tab panes --> +- <div class="tab-content"> +- <div role="tabpanel" class="tab-pane active" id="outbout"> +- <div class="myfullchart"> +- <div data-netdata="tc.world_out" +- data-host="//london.my-netdata.io" +- data-common-max="tc-world-out" +- data-chart-library="dygraph" +- data-title="EU - London, traffic we send per service" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- ></div> +- </div> +- +- <div class="myfullchart"> +- <div data-netdata="tc.world_out" +- data-host="//atlanta.my-netdata.io" +- data-chart-library="dygraph" +- data-common-max="tc-world-out" +- data-title="US - Atlanta, traffic we send per service" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- ></div> +- +- </div> +- +- <div class="myfullchart"> +- <div data-netdata="tc.world_out" +- data-host="//sanfrancisco.netdata.rocks" +- data-chart-library="dygraph" +- data-common-max="tc-world-out" +- data-title="US - California, traffic we send per service" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- ></div> +- </div> +- +- <div class="myfullchart"> +- <div data-netdata="tc.world_out" +- data-host="//toronto.netdata.rocks" +- data-chart-library="dygraph" +- data-common-max="tc-world-out" +- data-title="Canada, traffic we send per service" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- ></div> +- </div> +- </div> +- +- <div role="tabpanel" class="tab-pane" id="inbound"> +- <div class="myfullchart"> +- <div data-netdata="tc.world_in" +- data-host="//london.my-netdata.io" +- data-common-max="tc-world-in" +- data-chart-library="dygraph" +- data-title="EU - London, traffic we receive per service" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- ></div> +- +- </div> +- +- <div class="myfullchart"> +- <div data-netdata="tc.world_in" +- data-host="//atlanta.my-netdata.io" +- data-common-max="tc-world-in" +- data-chart-library="dygraph" +- data-title="US - Atlanta, traffic we receive per service" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- ></div> +- +- </div> +- +- <div class="myfullchart"> +- <div data-netdata="tc.world_in" +- data-host="//sanfrancisco.netdata.rocks" +- data-common-max="tc-world-in" +- data-chart-library="dygraph" +- data-title="US - California, traffic we receive per service" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- ></div> +- </div> +- +- <div class="myfullchart"> +- <div data-netdata="tc.world_in" +- data-host="//toronto.netdata.rocks" +- data-common-max="tc-world-in" +- data-chart-library="dygraph" +- data-title="Canada, traffic we receive per service" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- ></div> +- </div> +- </div> +- </div> +- <div style="width: 100%; text-align: right; font-size: 1vw;"> +- <i class="fa fa-comment" aria-hidden="true"></i> <i>these legends are interactive and the charts are resizable here ^^^</i> +- </div> +- +- <div class="mytitle"> +- DDoS protection performance on the demo sites +- </div> +- <div class="mycontent"> +- iptables SYNPROXY configured by <a href="https://github.com/netdata/netdata/blob/master/collectors/proc.plugin/README.md#linux-anti-ddos">FireHOL</a> +- </div> +- +- <div style="padding-top: 4vw; width: 100%; text-align: center; font-size: 1.5vw;"> +- +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- <b>EU - London</b>, TCP SYN packets/s received +- </div> +- <div class="mysparkline-overchart-value" id="netfilter.synproxy_syn_received.netdata1" > +- </div> +- <div data-netdata="netfilter.synproxy_syn_received" +- data-dimensions="received" +- data-host="//london.my-netdata.io" +- data-decimal-digits="0" +- data-common-max="synproxy-in" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#558855" +- data-show-value-of-received-at="netfilter.synproxy_syn_received.netdata1" +- ></div> +- </div> +- +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- <b>US - Atlanta</b>, TCP SYN packets/s received +- </div> +- <div class="mysparkline-overchart-value" id="netfilter.synproxy_syn_received.netdata2" > +- </div> +- <div data-netdata="netfilter.synproxy_syn_received" +- data-dimensions="received" +- data-host="//atlanta.my-netdata.io" +- data-decimal-digits="0" +- data-common-max="synproxy-in" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#885555" +- data-show-value-of-received-at="netfilter.synproxy_syn_received.netdata2" +- ></div> +- </div> +- +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- <b>US - California</b>, TCP SYN packets/s received +- </div> +- <div class="mysparkline-overchart-value" id="netfilter.synproxy_syn_received.netdata3" > +- </div> +- <div data-netdata="netfilter.synproxy_syn_received" +- data-dimensions="received" +- data-host="//sanfrancisco.netdata.rocks" +- data-decimal-digits="0" +- data-common-max="synproxy-in" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#555588" +- data-show-value-of-received-at="netfilter.synproxy_syn_received.netdata3" +- ></div> +- </div> +- +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- <b>Canada</b>, TCP SYN packets/s received +- </div> +- <div class="mysparkline-overchart-value" id="netfilter.synproxy_syn_received.netdata4" > +- </div> +- <div data-netdata="netfilter.synproxy_syn_received" +- data-dimensions="received" +- data-host="//toronto.netdata.rocks" +- data-decimal-digits="0" +- data-common-max="synproxy-in" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#885588" +- data-show-value-of-received-at="netfilter.synproxy_syn_received.netdata4" +- ></div> +- </div> +- </div> +- <div style="width: 100%; text-align: right; font-size: 1vw;"> +- <i class="fa fa-comment" aria-hidden="true"></i> <i>did you notice the decimal numbers? +- <br/>netdata interpolates collected values at second boundaries, with nanosecond detail!</i> +- </div> +- +- +- <div class="mytitle"> +- CPU Utilization of the demo sites +- </div> +- +- <div style="padding-top: 1vw;"> +- <div class="myfullchart"> +- <div data-netdata="system.cpu" +- data-host="//london.my-netdata.io" +- data-chart-library="dygraph" +- data-title="EU - London, CPU Usage" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-dygraph-valuerange="[0, 100]" +- ></div> +- </div> +- +- <div class="myfullchart"> +- <div data-netdata="system.cpu" +- data-host="//atlanta.my-netdata.io" +- data-chart-library="dygraph" +- data-title="US - Atlanta, CPU Usage" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-dygraph-valuerange="[0, 100]" +- ></div> +- </div> +- +- <div class="myfullchart"> +- <div data-netdata="system.cpu" +- data-host="//sanfrancisco.netdata.rocks" +- data-chart-library="dygraph" +- data-title="US - California, CPU Usage" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-dygraph-valuerange="[0, 100]" +- ></div> +- </div> +- +- <div class="myfullchart"> +- <div data-netdata="system.cpu" +- data-host="//toronto.netdata.rocks" +- data-chart-library="dygraph" +- data-title="Canada, CPU Usage" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-dygraph-valuerange="[0, 100]" +- ></div> +- </div> +- </div> +- <div style="width: 100%; text-align: right; font-size: 1vw;"> +- <i class="fa fa-comment" aria-hidden="true"></i> <i>what is using so much CPU? +- <br/>The site <a href="//iplists.firehol.org/">iplists.firehol.org</a> is maintained by FireHOL - the CPU is used for comparing security IP Lists.</i> +- </div> +- +- <div class="mytitle"> +- Netdata performance +- </div> +- <div class="mycontent"> +- netdata monitors <b>users</b>, <b>user groups</b>, <b>applications (process trees)</b> +- <br/> +- <b>containers</b> (<code>lxc</code>, <code>docker</code>, etc.) and SNMP devices. +- </div> +- +- <!-- Nav tabs --> +- <ul class="nav nav-tabs" role="tablist" style="padding-top: 1vw;"> +- <li role="presentation" class="active"><a href="#netdata_cpu" aria-controls="netdata_cpu" role="tab" data-toggle="tab">CPU</a></li> +- <li role="presentation"><a href="#netdata_avgtime" aria-controls="netdata_avgtime" role="tab" data-toggle="tab">Average Response Time</a></li> +- </ul> +- +- <!-- Tab panes --> +- <div class="tab-content"> +- <div role="tabpanel" class="tab-pane active" id="netdata_cpu"> +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- <b>EU - London</b>, CPU % of a single core +- </div> +- <div class="mysparkline-overchart-value" id="users.cpu.netdata1" > +- </div> +- <div data-netdata="apps.cpu" +- data-dimensions="netdata" +- data-common-max="users-cpu" +- data-decimal-digits="1" +- data-host="//london.my-netdata.io" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#558855" +- data-show-value-of-netdata-at="users.cpu.netdata1" +- ></div> +- </div> +- +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- <b>US - Atlanta</b>, CPU % of a single core +- </div> +- <div class="mysparkline-overchart-value" id="users.cpu.netdata2" > +- </div> +- <div data-netdata="apps.cpu" +- data-dimensions="netdata" +- data-common-max="users-cpu" +- data-decimal-digits="1" +- data-host="//atlanta.my-netdata.io" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#885555" +- data-show-value-of-netdata-at="users.cpu.netdata2" +- ></div> +- </div> +- +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- <b>US - California</b>, CPU % of a single core +- </div> +- <div class="mysparkline-overchart-value" id="users.cpu.netdata3" > +- </div> +- <div data-netdata="apps.cpu" +- data-dimensions="netdata" +- data-common-max="users-cpu" +- data-decimal-digits="1" +- data-host="//sanfrancisco.netdata.rocks" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#555588" +- data-show-value-of-netdata-at="users.cpu.netdata3" +- ></div> +- </div> +- +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- <b>Toronto</b>, CPU % of a single core +- </div> +- <div class="mysparkline-overchart-value" id="users.cpu.netdata4" > +- </div> +- <div data-netdata="apps.cpu" +- data-dimensions="netdata" +- data-common-max="users-cpu" +- data-decimal-digits="1" +- data-host="//toronto.netdata.rocks" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#885588" +- data-show-value-of-netdata-at="users.cpu.netdata4" +- ></div> +- </div> +- +- <div style="width: 100%; text-align: right; font-size: 1vw;"> +- <i class="fa fa-comment" aria-hidden="true"></i> <i>this utilization is about the whole netdata process tree and the percentage is of <b>a single core</b>! +- <br/>including <b>BASH</b> plugins (it monitors <code>mysql</code> on the demo sites), <b>node.js</b> plugins (it monitors <code>bind9</code> on the demo sites), etc. +- <br/>and including the chart refreshes for the dashboards of all viewers.</i> +- </div> +- </div> +- +- <div role="tabpanel" class="tab-pane" id="netdata_avgtime"> +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- <b>EU - London</b>, API average response time in milliseconds +- </div> +- <div class="mysparkline-overchart-value" id="netdata.response_time1" > +- </div> +- <div data-netdata="netdata.response_time" +- data-host="//london.my-netdata.io" +- data-common-max="netdata-response-time" +- data-decimal-digits="1" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#558855 #356835" +- data-show-value-of-average-at="netdata.response_time1" +- ></div> +- </div> +- +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- <b>US - Atlanta</b>, API average response time in milliseconds +- </div> +- <div class="mysparkline-overchart-value" id="netdata.response_time2" > +- </div> +- <div data-netdata="netdata.response_time" +- data-host="//atlanta.my-netdata.io" +- data-common-max="netdata-response-time" +- data-decimal-digits="1" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#885555 #683535" +- data-show-value-of-average-at="netdata.response_time2" +- ></div> +- </div> +- +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- <b>US - California</b>, API average response time in milliseconds +- </div> +- <div class="mysparkline-overchart-value" id="netdata.response_time3" > +- </div> +- <div data-netdata="netdata.response_time" +- data-host="//sanfrancisco.netdata.rocks" +- data-common-max="netdata-response-time" +- data-decimal-digits="1" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#555588 #353568" +- data-show-value-of-average-at="netdata.response_time3" +- ></div> +- </div> +- +- <div class="mysparkline"> +- <div class="mysparkline-overchart-label"> +- <b>Canada</b>, API average response time in milliseconds +- </div> +- <div class="mysparkline-overchart-value" id="netdata.response_time4" > +- </div> +- <div data-netdata="netdata.response_time" +- data-host="//toronto.netdata.rocks" +- data-decimal-digits="1" +- data-common-max="netdata-response-time" +- data-chart-library="dygraph" +- data-dygraph-theme="sparkline" +- data-dygraph-type="area" +- data-width="100%" +- data-height="100%" +- data-after="-300" +- data-colors="#885588 #683568" +- data-show-value-of-average-at="netdata.response_time4" +- ></div> +- </div> +- +- <div style="width: 100%; text-align: right; font-size: 1vw;"> +- <i class="fa fa-comment" aria-hidden="true"></i> <i>netdata is really <b>fast</b> (the values are milliseconds!) +- <br/> +- These values include everything, from the reception of the first byte to the dispatch of the last, including gzip compression. +- <br/> +- Values above 2-3ms are usually chart refreshes of charts with several dimensions, charts with very long durations (zoomed out), or file transfers. +- </i> +- </div> +- </div> +- </div> +- +- <div style="padding-top: 6vw; width: 100%; text-align: center; font-size: 2vw;"> +- want to know more? +- <br/> +- jump to <a href="https://github.com/netdata/netdata/">the netdata page at github</a> +- <br/> +- it needs just 3 mins to be installed on your servers! +- <br/> +- +- </div> +-</div> +-</body> +-<script> +- // google analytics when this is used for the home page of the demo sites +- // you don't need this if you customize this dashboard for your needs +- setTimeout(function() { +- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ +- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), +- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) +- })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); +- +- ga('create', 'UA-64295674-3', 'auto'); +- ga('send', 'pageview'); +- }, 2000); +-</script> +-</html> +diff --git a/web/gui/goto-host-from-alarm.html b/web/gui/goto-host-from-alarm.html +index 7d12f848..af9db7ea 100644 +--- a/web/gui/goto-host-from-alarm.html ++++ b/web/gui/goto-host-from-alarm.html +@@ -2,13 +2,6 @@ + <!-- SPDX-License-Identifier: GPL-3.0-or-later --> + <html lang="en"> + <head> +- <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'); +- dataLayer.push({"anonymous_statistics" : "false"}); +- </script> + <title>Goto a host you know...</title> + <meta name="application-name" content="netdata"> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +diff --git a/web/gui/index.html b/web/gui/index.html +index d3099101..47baa548 100644 +--- a/web/gui/index.html ++++ b/web/gui/index.html +@@ -17,22 +17,6 @@ + + <link rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAP9JREFUeNpiYBgFo+A/w34gpiZ8DzWzAYgNiHGAA5UdgA73g+2gcyhgg/0DGQoweB6IBQYyFCCOGOBQwBMd/xnW09ERDtgcoEBHB+zHFQrz6egIBUasocDAcJ9OxWAhE4YQI8MDILmATg7wZ8QRDfQKhQf4Cie6pAVGPA4AhQKo0BCgZRAw4ZSBpIWJNI6CD4wEKikBaFqgVSgcYMIrzcjwgcahcIGRiPYCLUPBkNhWUwP9akVcoQBpatG4MsLviAIqWj6f3Absfdq2igg7IIEKDVQKEzN5ofAenJCp1I8gJRTug5tfkGIdR1FDniMI+QZUjF8Amn5htOdHCAAEGACE6B0cS6mrEwAAAABJRU5ErkJggg==" /> + +- <meta property="og:locale" content="en_US" /> +- <meta property="og:url" content="https://my-netdata.io" /> +- <meta property="og:type" content="website" /> +- <meta property="og:site_name" content="netdata"/> +- <meta property="og:title" content="Get control of your Linux Servers. Simple. Effective. Awesome." /> +- <meta property="og:description" content="Unparalleled insights, in real-time, of everything happening on your Linux systems and applications, with stunning, interactive web dashboards and powerful performance and health alarms." /> +- <meta property="og:image" content="https://cloud.githubusercontent.com/assets/2662304/22945737/e98cd0c6-f2fd-11e6-96f1-5501934b0955.png" /> +- <meta property="og:image:type" content="image/png" /> +- <meta property="fb:app_id" content="1200089276712916" /> +- +- <meta name="twitter:card" content="summary" /> +- <meta name="twitter:site" content="@linuxnetdata" /> +- <meta name="twitter:title" content="Get control of your Linux Servers. Simple. Effective. Awesome." /> +- <meta name="twitter:description" content="Unparalleled insights, in real-time, of everything happening on your Linux systems and applications, with stunning, interactive web dashboards and powerful performance and health alarms." /> +- <meta name="twitter:image" content="https://cloud.githubusercontent.com/assets/2662304/14092712/93b039ea-f551-11e5-822c-beadbf2b2a2e.gif" /> +- + <script src="main.js?v20190905-0"></script> + </head> + +@@ -90,13 +74,9 @@ + </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.html');" class="btn" target="_blank"><i class="fas fa-tv"></i> <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> <span class="hidden-sm hidden-md">Alarms </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> <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> + <li title="the netdata wiki home at github<br/>remember to <b>give netdata a <i class="fas fa-star"></i></b> !" data-toggle="tooltip" data-placement="bottom" class="hidden-xs hidden-sm hidden-md"><a href="https://github.com/netdata/netdata" class="btn" target="_blank"><i class="fab fa-github"></i></a></li> +- <li title="follow netdata on twitter" data-toggle="tooltip" data-placement="bottom" class="hidden-xs hidden-sm hidden-md"><a href="https://twitter.com/linuxnetdata" class="btn" target="_blank"><i class="fab fa-twitter"></i></a></li> +- <li title="like netdata on facebook" data-toggle="tooltip" data-placement="bottom" class="hidden-xs hidden-sm hidden-md"><a href="https://www.facebook.com/linuxnetdata/" class="btn" target="_blank"><i class="fab fa-facebook"></i></a></li> + <li title="import / load a netdata snapshot" data-toggle="tooltip" data-placement="bottom" id="loadButton"><a href="#" class="btn" data-toggle="modal" data-target="#loadSnapshotModal"><i class="fas fa-download"></i> <span class="hidden-sm hidden-md hidden-lg">Import</span></a></li> + <li title="export / save a netdata snapshot" data-toggle="tooltip" data-placement="bottom" id="saveButton"><a href="#" class="btn" data-toggle="modal" data-target="#saveSnapshotModal"><i class="fas fa-upload"></i> <span class="hidden-sm hidden-md hidden-lg">Export</span></a></li> + <li title="print this dashboard to PDF" data-toggle="tooltip" data-placement="bottom" id="printButton"><a href="#" class="btn" data-toggle="modal" data-target="#printPreflightModal"><i class="fas fa-print"></i> <span class="hidden-sm hidden-md hidden-lg">Print</span></a></li> +@@ -109,17 +89,6 @@ + <div class="navbar-highlight"> + <div id="navbar-highlight-content" class="navbar-highlight-content"></div> + </div> +- +- <div id="sign-in-banner" style="display: none"> +- <div class="container"> +- Like what you see? +- <strong><a href="#" class="__link" onclick="signInDidClick(event); return false">Sign in</a> +- to experience the full-range of netdata capabilities!</strong> +- <div class="__close" onclick="closeSignInBannerDidClick(event)"> +- Close <i class="fas fa-times"></i> +- </div> +- </div> +- </div> + + <div id="masthead" style="display: none;"> + <div class="container"> +@@ -1140,92 +1109,6 @@ + </div> + </div> + +- +- <div class="modal fade" id="updateModal" tabindex="-1" role="dialog" aria-labelledby="updateModalLabel"> +- <div class="modal-dialog" role="document"> +- <div class="modal-content"> +- <div class="modal-header"> +- <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> +- <h4 class="modal-title" id="updateModalLabel">Update Check</h4> +- </div> +- <div class="modal-body"> +- Your netdata version: <b><code><span id="netdataVersion">Unknown</span></code></b><br/> +- <br/> +- <div style="padding: 10px;"></div> +- <div id="versionCheckLog">Not checked yet. Please press the Check Now button.</div> +- <div> +- <hr/> +- </div> +- <div> +- For progress reports and key netdata updates: <strong><a href="https://twitter.com/linuxnetdata" target="_blank">follow netdata on <i class="fab fa-twitter"></i> twitter</a></strong>. +- <br/> +- You can also <a href="https://www.facebook.com/linuxnetdata/" target="_blank">follow netdata on <i class="fab fa-facebook"></i> facebook</a>, +- or <a href="https://github.com/netdata/netdata" target="_blank">watch netdata on <i class="fab fa-github"></i> github</a>. +- </div> +- </div> +- <div class="modal-footer"> +- <a href="#" onclick="notifyForUpdate(true); return false;" type="button" class="btn btn-default">Check Now</a> +- <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> +- </div> +- </div> +- </div> +- </div> +- +- <div class="modal fade" id="signInModal" tabindex="-1" role="dialog" aria-labelledby="signInModalLabel"> +- <div class="modal-dialog" role="document"> +- <div class="modal-content"> +- <div class="modal-header"> +- <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> +- <h4 class="modal-title" id="signInModalLabel">Sign In</h4> +- </div> +- <div class="modal-body"> +- <p> +- Signing-in to netdata.cloud will synchronize the list of +- your netdata monitored nodes known at registry +- <strong><span id="sim-registry"></span></strong>. This +- may include server hostnames, urls and identification +- GUIDs. +- </p> +- <p> +- After you upgrade all your netdata servers, your private +- registry will not be needed any more. +- </p> +- <p> +- Are you sure you want to proceed? +- </p> +- </div> +- <div class="modal-footer"> +- <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button> +- <a href="#" onclick="explicitlySignIn(); return false;" type="button" class="btn btn-success">Sign In</a> +- </div> +- </div> +- </div> +- </div> +- +- <div class="modal fade" id="syncRegistryModal" tabindex="-1" role="dialog" aria-labelledby="syncRegistryModalLabel"> +- <div class="modal-dialog" role="document"> +- <div class="modal-content"> +- <div class="modal-header"> +- <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> +- <h4 class="modal-title" id="syncRegistryModalLabel">Synchronize netdata.cloud with registry?</h4> +- </div> +- <div class="modal-body"> +- <p> +- You are about to synchronize your netdata.cloud account with data from the registry at <strong><span id="sync-registry-modal-registry"></span></strong>. +- This may include server hostnames, urls and identification GUIDs. +- </p> +- <p> +- Are you sure you want to proceed? +- </p> +- </div> +- <div class="modal-footer"> +- <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button> +- <a href="#" onclick="explicitlySyncAgents(); return false;" type="button" class="btn btn-success">Synchronize</a> +- </div> +- </div> +- </div> +- </div> +- + <div class="modal fade" id="deleteRegistryModal" tabindex="-1" role="dialog" aria-labelledby="deleteRegistryModalLabel"> + <div class="modal-dialog" role="document"> + <div class="modal-content"> +diff --git a/web/gui/infographic.html b/web/gui/infographic.html +deleted file mode 100644 +index 24ff8f4e..00000000 +--- a/web/gui/infographic.html ++++ /dev/null +@@ -1,171 +0,0 @@ +-<!doctype html> +-<!-- SPDX-License-Identifier: GPL-3.0-or-later --> +-<html lang=en-us> +-<head> +- <meta charset=utf-8> +- <title>NetData: Get control of your Linux Servers. Simple. Effective. Awesome.</title> +- <meta name=author content="Costa Tsaousis"> +- <meta name=description content="Unparalleled insights, in real-time, of everything happening on your Linux systems and applications, with stunning, interactive web dashboards and powerful performance and health alarms."> +- +- <meta name=viewport content="width=device-width,initial-scale=1"> +- <link rel=apple-touch-icon href=apple-touch-icon.png> +- <link rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAP9JREFUeNpiYBgFo+A/w34gpiZ8DzWzAYgNiHGAA5UdgA73g+2gcyhgg/0DGQoweB6IBQYyFCCOGOBQwBMd/xnW09ERDtgcoEBHB+zHFQrz6egIBUasocDAcJ9OxWAhE4YQI8MDILmATg7wZ8QRDfQKhQf4Cie6pAVGPA4AhQKo0BCgZRAw4ZSBpIWJNI6CD4wEKikBaFqgVSgcYMIrzcjwgcahcIGRiPYCLUPBkNhWUwP9akVcoQBpatG4MsLviAIqWj6f3Absfdq2igg7IIEKDVQKEzN5ofAenJCp1I8gJRTug5tfkGIdR1FDniMI+QZUjF8Amn5htOdHCAAEGACE6B0cS6mrEwAAAABJRU5ErkJggg==" /> +- +- <meta property="og:url" content="https://my-netdata.io/infographic.html" /> +- <meta property="og:type" content="website" /> +- <meta property="og:title" content="netdata infographic" /> +- <meta property="og:description" content="Unparalleled insights, in real-time, of everything happening on your Linux systems and applications, with stunning, interactive web dashboards and powerful performance and health alarms." /> +- <meta property="og:image" content="https://user-images.githubusercontent.com/43294513/60951037-8ba5d180-a2f8-11e9-906e-e27356f168bc.png" /> +- <meta property="og:image:type" content="image/png" /> +- <meta property="fb:app_id" content="1200089276712916" /> +- +- <meta name="twitter:card" content="summary" /> +- <meta name="twitter:site" content="@linuxnetdata" /> +- <meta name="twitter:title" content="netdata infographic" /> +- <meta name="twitter:description" content="Unparalleled insights, in real-time, of everything happening on your Linux systems and applications, with stunning, interactive web dashboards and powerful performance and health alarms." /> +- <meta name="twitter:image" content="https://cloud.githubusercontent.com/assets/2662304/25580009/bf7016a4-2e85-11e7-9a7a-b36c57db7b91.png" /> +- +- <meta name="google-site-verification" content="3Xmk2kyCvai8p9HEnYHoQ9RBW20-b1NvPAgu07Fkkds" /> +- <meta name="msvalidate.01" content="896DCA31C9A664CE359FCF1A645DD476" /> +- +- <style>/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */ +- html { +- line-height: 1.15; +- -ms-text-size-adjust: 100%; +- -webkit-text-size-adjust: 100%; +- font: 17px/1.4 'Open Sans', sans-serif; +- text-align: center +- } +- </style> +-</head> +-<body> +-<div style="width: 100%;text-align:center;"> +- <div> +- <p style="font-size: 16pt"> +- <b>Interactive infographic of netdata features and functions</b> +- </p> +- <p> +- Hover and click on the infographic, to open the related wiki page. +- <br/> +- <small> +- The links and the docs are still a work in progress. +- The interactive infographic is a feature of <b>draw.io</b>. +- </small> +- </p> +- </div> +- <div class=site-footer role=contentinfo> +- <p> +- <div style="display: inline-block;"> +- <div style="vertical-align:top;display:inline-block; height: 34px;margin-top:3px;"><a class=twitter-share-button href=https://twitter.com/share data-count=none data-lang=en data-via=linuxnetdata data-size=small data-text="Get control of your Linux servers. Simple. Effective. Awesome." data-url=https://my-netdata.io/infographic.html >Tweet</a></div> +- <div style="vertical-align:top;display:inline-block; height: 34px;margin-top:3px;"><a class=twitter-follow-button href=https://twitter.com/linuxnetdata data-show-count=false data-lang=en data-size=small>Follow @linuxnetdata</a></div> +- </div> +- <div style="display: inline-block;"> +- <div class="fb-like" data-href="https://my-netdata.io/" data-layout="button" data-action="like" data-show-faces="false" data-share="false" style="vertical-align:top;display:inline-block; height: 34px;"></div> +- <div class="fb-share-button" data-href="https://my-netdata.io/" data-layout="button" data-size="small" data-mobile-iframe="true"><a class="fb-xfbml-parse-ignore" target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fmy-netdata.io%2Finfographic.html&src=sdkpreparse" style="vertical-align:top;display:inline-block; height: 34px;">Share</a></div> +- </div> +- </div> +- <div> +- <p style="font-size: 14pt"> +- <b>New to netdata?</b> <a href="//my-netdata.io" target="_blank">Have a look at a netdata demo</a>. You will love it! +- </p> +- <p> +- <embed style="padding-top: 10px; padding-botton: 25px;" src="//registry.my-netdata.io/api/v1/badge.svg?chart=netdata.registry_entries&dimensions=persons&label=user%20base&units=null&value_color=blue&precision=0&v42" type="image/svg+xml" height="20" /> +- <embed style="padding-top: 10px; padding-botton: 25px;" src="//registry.my-netdata.io/api/v1/badge.svg?chart=netdata.registry_entries&dimensions=machines&label=servers%20monitored&units=null&value_color=orange&precision=0&v42" type="image/svg+xml" height="20" /> +- <embed style="padding-top: 10px; padding-botton: 25px;" src="//registry.my-netdata.io/api/v1/badge.svg?chart=netdata.registry_sessions&label=sessions%20served&units=null&value_color=yellowgreen&precision=0&v42" type="image/svg+xml" height="20" /> +- </p> +- <hr/> +- </div> +- <div style="width:90%;display:inline-block;max-width:1300px;text-align:left;"> +- <div id="drawing" class="mxgraph" style="max-width:100%;border:1px solid transparent;"></div> +- </div> +-</div> +-</body> +- +-<script> +- var opts = { +- "highlight":"#0000ff", +- "target":"blank", +- "lightbox":false, +- "nav":false, +- "resize":true, +- "toolbar":"", +- "auto-fit":true, +- "check-visible-state":false, +- "edit":"https://raw.githubusercontent.com/netdata/netdata/master/diagrams/netdata-overview.xml", +- "url":"https://raw.githubusercontent.com/netdata/netdata/master/diagrams/netdata-overview.xml" +- }; +- document.getElementById("drawing").dataset.mxgraph = JSON.stringify(opts); +-</script> +- +-<script> +- if(window.location.hostname != 'my-netdata.io' || window.location.protocol != 'https:') { +- var canonical = document.createElement('link'); +- canonical.rel = 'canonical'; +- canonical.href = 'https://my-netdata.io/infographic.html'; +- document.head.appendChild(canonical); +- } +-</script> +- +-<script>!function (t, e) { +- "use strict"; +- function a(t, n) { +- return t.hasAttribute(n) === !0 ? t : t.parentNode !== r.body ? a(t.parentNode, n) : e +- } +- +- function n(n) { +- var o, i, r, c, g, u = a(n.target, "data-ga-action"), l = !1; +- u !== e && (o = u.getAttribute("data-ga-action") || e, i = u.getAttribute("data-ga-category") || e, r = u.getAttribute("data-ga-label") || e, c = u.getAttribute("href"), g = parseInt(u.getAttribute("data-ga-value"), 10) || e, ga !== e && i !== e && o !== e && (n.preventDefault(), "Download" !== i && n.ctrlKey !== !0 && n.metaKey !== !0 && 2 !== n.which || (l = !0, t.open(c)), function (a) { +- var n; +- ga("send", "event", i, o, r, g, { +- hitCallback: function () { +- l === !1 && (n !== e && clearTimeout(n), t.location = a) +- } +- }), n = setTimeout(function () { +- l === !1 && (t.location.href = a) +- }, 1e3) +- }(c))) +- } +- +- function o() { +- !function (t, e, a, n, o, i) { +- t.GoogleAnalyticsObject = n, t[n] || (t[n] = function () { +- (t[n].q = t[n].q || []).push(arguments) +- }), t[n].l = +new Date, o = e.createElement(a), i = e.getElementsByTagName(a)[0], o.src = "//www.google-analytics.com/analytics.js", i.parentNode.insertBefore(o, i) +- }(t, r, "script", "ga"), ga("create", "UA-64295674-3", "auto"), ga("send", "pageview"), t.document.addEventListener("click", n) +- } +- +- function i() { +- !function (t, e, a) { +- var n, o = t.getElementsByTagName(e)[0]; +- t.getElementById(a) || (n = t.createElement(e), n.id = a, n.src = "//platform.twitter.com/widgets.js", o.parentNode.insertBefore(n, o)) +- }(r, "script", "twitter-wjs") +- } +- +- var r = t.document; +- o(), t.onload = i +-}(window)</script> +- +-<!-- facebook sdk --> +-<div id="fb-root"></div> +-<script> +- window.fbAsyncInit = function() { +- FB.init({ +- appId : '1200089276712916', +- xfbml : true, +- version : 'v2.8' +- }); +- }; +- +- (function(d, s, id){ +- var js, fjs = d.getElementsByTagName(s)[0]; +- if (d.getElementById(id)) {return;} +- js = d.createElement(s); js.id = id; +- js.src = "//connect.facebook.net/en_US/sdk.js"; +- fjs.parentNode.insertBefore(js, fjs); +- }(document, 'script', 'facebook-jssdk')); +-</script> +- +-<script type="text/javascript" src="https://www.draw.io/embed2.js?s=arrows2;mscae/cloud;azure;office/users;office/servers&fetch=https%3A%2F%2Fraw.githubusercontent.com%2Fnetdata%2Fnetdata%2Fmaster%2Fdiagrams%2Fnetdata-overview.xml"></script> +- +-</html> +- +diff --git a/web/gui/main.js b/web/gui/main.js +index 5bf11e5f..d30192b4 100644 +--- a/web/gui/main.js ++++ b/web/gui/main.js +@@ -17,9 +17,6 @@ var netdataServer = undefined; + var netdataServerStatic = undefined; + var netdataCheckXSS = undefined; + +-// control the welcome modal and analytics +-var this_is_demo = null; +- + function escapeUserInputHTML(s) { + return s.toString() + .replace(/&/g, '&') +@@ -206,7 +203,6 @@ var urlOptions = { + + netdataShowAlarms = false; + netdataRegistry = false; +- this_is_demo = false; + break; + + case 'live': +@@ -678,32 +674,6 @@ function renderMachines(machinesArray) { + </div>` + ) + } +- +- html += `<hr />`; +- html += `<div class="info-item">Demo netdata nodes</div>`; +- +- const demoServers = [ +- { url: "//london.netdata.rocks/default.html", title: "UK - London (DigitalOcean.com)" }, +- { url: "//newyork.netdata.rocks/default.html", title: "US - New York (DigitalOcean.com)" }, +- { url: "//sanfrancisco.netdata.rocks/default.html", title: "US - San Francisco (DigitalOcean.com)" }, +- { url: "//atlanta.netdata.rocks/default.html", title: "US - Atlanta (CDN77.com)" }, +- { url: "//frankfurt.netdata.rocks/default.html", title: "Germany - Frankfurt (DigitalOcean.com)" }, +- { url: "//toronto.netdata.rocks/default.html", title: "Canada - Toronto (DigitalOcean.com)" }, +- { url: "//singapore.netdata.rocks/default.html", title: "Japan - Singapore (DigitalOcean.com)" }, +- { url: "//bangalore.netdata.rocks/default.html", title: "India - Bangalore (DigitalOcean.com)" }, +- +- ] +- +- for (var server of demoServers) { +- html += ( +- `<div class="agent-item"> +- <i class="fas fa-chart-bar" style="color: #fff"></i> +- <a href="${server.url}">${server.title}</a> +- <div></div> +- </div> +- ` +- ); +- } + } + + return html; +@@ -723,25 +693,9 @@ function clearMyNetdataMenu() { + } + + function errorMyNetdataMenu() { +- 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! Please make sure you have the latest version of Netdata. +- </div>`); + } + + function restrictMyNetdataMenu() { +- setMyNetdataMenu(`<div class="info-item" style="white-space: nowrap"> +- <span>Please <a href="#" onclick="signInDidClick(event); return false">sign in to netdata.cloud</a> to view your nodes!</span> +- <div></div> +- </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 + "/")}&redirect_uri=${encodeURIComponent(window.location.origin + "/" + url)}`); +- } + } + + function renderMyNetdataMenu(machinesArray) { +@@ -750,42 +704,10 @@ function renderMyNetdataMenu(machinesArray) { + + if (machinesArray == registryAgents) { + console.log("Rendering my-netdata menu from registry"); +- } else { +- console.log("Rendering my-netdata menu from netdata.cloud", machinesArray); + } + + let html = ''; + +- if (!isSignedIn()) { +- if (!NETDATA.registry.isRegistryEnabled()) { +- html += ( +- `<div class="info-item" style="white-space: nowrap"> +- <span>Please <a href="#" onclick="signInDidClick(event); return false">sign in to netdata.cloud</a> to view your nodes!</span> +- <div></div> +- </div> +- <hr />` +- ); +- } +- } +- +- if (isSignedIn()) { +- html += ( +- `<div class="filter-control"> +- <input +- id="my-netdata-menu-filter-input" +- type="text" +- placeholder="filter nodes..." +- autofocus +- autocomplete="off" +- value="${myNetdataMenuFilterValue}" +- onkeydown="myNetdataFilterDidChange(event)" +- /> +- <span class="filter-control__clear" onclick="myNetdataFilterClearDidClick(event)"><i class="fas fa-times"></i><span> +- </div> +- <hr />` +- ); +- } +- + // options.hosts = [ + // { + // hostname: "streamed1", +@@ -799,73 +721,15 @@ function renderMyNetdataMenu(machinesArray) { + html += `<div id="my-netdata-menu-streamed">${renderStreamedHosts(options)}</div><hr />`; + } + +- if (isSignedIn() || NETDATA.registry.isRegistryEnabled()) { ++ if (NETDATA.registry.isRegistryEnabled()) { + html += `<div id="my-netdata-menu-machines">${renderMachines(machinesArray)}</div><hr />`; + } + +- if (!isSignedIn()) { +- html += ( +- `<div class="agent-item"> +- <i class="fas fa-cog""></i> +- <a href="#" onclick="switchRegistryModalHandler(); return false;">Switch Identity</a> +- <div></div> +- </div> +- <div class="agent-item"> +- <i class="fas fa-question-circle""></i> +- <a href="https://github.com/netdata/netdata/tree/master/registry#netdata-registry" target="_blank">What is this?</a> +- <div></div> +- </div>` +- ) +- } else { +- 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-sync"></i> +- <a href="#" onclick="showSyncModal(); return false">Synchronize with netdata.cloud</a> +- <div></div> +- </div> +- <div class="agent-item"> +- <i class="fas fa-question-circle""></i> +- <a href="https://netdata.cloud/about" target="_blank">What is this?</a> +- <div></div> +- </div>` +- ) +- } +- + el.innerHTML = html; + + gotoServerInit(); + } + +-function isdemo() { +- if (this_is_demo !== null) { +- return this_is_demo; +- } +- this_is_demo = false; +- +- try { +- if (typeof document.location.hostname === 'string') { +- if (document.location.hostname.endsWith('.my-netdata.io') || +- document.location.hostname.endsWith('.mynetdata.io') || +- document.location.hostname.endsWith('.netdata.rocks') || +- document.location.hostname.endsWith('.netdata.ai') || +- document.location.hostname.endsWith('.netdata.live') || +- document.location.hostname.endsWith('.firehol.org') || +- document.location.hostname.endsWith('.netdata.online') || +- document.location.hostname.endsWith('.netdata.cloud')) { +- this_is_demo = true; +- } +- } +- } +- catch (error) { +- } +- return this_is_demo; +-} +- + function netdataURL(url, forReload) { + if (typeof url === 'undefined') + // url = document.location.toString(); +@@ -973,28 +837,26 @@ function gotoServerModalHandler(guid) { + gotoServerValidateUrl(count++, guid, url); + } + +- if (!isSignedIn()) { +- // When the registry is enabled, if the user's known URLs are not working +- // 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>'; +- NETDATA.registry.search(guid, function (data) { +- // console.log(data); +- len = data.urls.length; +- while (len--) { +- var url = data.urls[len][1]; +- // console.log(url); +- if (typeof checked[url] === 'undefined') { +- gotoServerValidateRemaining++; +- checked[url] = true; +- gotoServerValidateUrl(count++, guid, url); +- } ++ // When the registry is enabled, if the user's known URLs are not working ++ // 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>'; ++ NETDATA.registry.search(guid, function (data) { ++ // console.log(data); ++ len = data.urls.length; ++ while (len--) { ++ var url = data.urls[len][1]; ++ // console.log(url); ++ if (typeof checked[url] === 'undefined') { ++ gotoServerValidateRemaining++; ++ checked[url] = true; ++ gotoServerValidateUrl(count++, guid, url); + } +- }); +- } +- }, 2000); +- } ++ } ++ }); ++ } ++ }, 2000); + + return false; + } +@@ -1057,34 +919,15 @@ function notifyForDeleteRegistry() { + const responseEl = document.getElementById('deleteRegistryResponse'); + + if (deleteRegistryUrl) { +- if (isSignedIn()) { +- deleteCloudAgentURL(deleteRegistryGuid, deleteRegistryUrl) +- .then((count) => { +- if (!count) { +- responseEl.innerHTML = "<b>Sorry, this command was rejected by netdata.cloud!</b>"; +- return; +- } +- NETDATA.registry.delete(deleteRegistryUrl, function (result) { +- if (result === null) { +- console.log("Received error from registry", result); +- } +- +- deleteRegistryUrl = null; +- $('#deleteRegistryModal').modal('hide'); +- NETDATA.registry.init(); +- }); +- }); +- } else { +- NETDATA.registry.delete(deleteRegistryUrl, function (result) { +- if (result !== null) { +- deleteRegistryUrl = null; +- $('#deleteRegistryModal').modal('hide'); +- NETDATA.registry.init(); +- } else { +- responseEl.innerHTML = "<b>Sorry, this command was rejected by the registry server!</b>"; +- } +- }); +- } ++ NETDATA.registry.delete(deleteRegistryUrl, function (result) { ++ if (result !== null) { ++ deleteRegistryUrl = null; ++ $('#deleteRegistryModal').modal('hide'); ++ NETDATA.registry.init(); ++ } else { ++ responseEl.innerHTML = "<b>Sorry, this command was rejected by the registry server!</b>"; ++ } ++ }); + } + } + +@@ -2367,11 +2210,7 @@ function alarmsUpdateModal() { + void ($element); + let main_url; + let common_url = "&host=" + encodeURIComponent(row['hostname']) + "&chart=" + encodeURIComponent(row['chart']) + "&family=" + encodeURIComponent(row['family']) + "&alarm=" + encodeURIComponent(row['name']) + "&alarm_unique_id=" + row['unique_id'] + "&alarm_id=" + row['alarm_id'] + "&alarm_event_id=" + row['alarm_event_id'] + "&alarm_when=" + row['when']; +- if (NETDATA.registry.isUsingGlobalRegistry() && NETDATA.registry.machine_guid != null) { +- main_url = "https://netdata.cloud/alarms/redirect?agentID=" + NETDATA.registry.machine_guid + common_url; +- } else { +- main_url = NETDATA.registry.server + "/goto-host-from-alarm.html?" + common_url ; +- } ++ main_url = NETDATA.registry.server + "/goto-host-from-alarm.html?" + common_url ; + window.open(main_url,"_blank"); + }, + rowStyle: function (row, index) { +@@ -2803,7 +2642,6 @@ function initializeDynamicDashboardWithData(data) { + // update the dashboard hostname + document.getElementById('hostname').innerHTML = '<span id="hostnametext">' + options.hostname + ((netdataSnapshotData !== null) ? ' (snap)' : '').toString() + '</span> <strong class="caret">'; + document.getElementById('hostname').href = NETDATA.serverDefault; +- document.getElementById('netdataVersion').innerHTML = options.version; + + if (netdataSnapshotData !== null) { + $('#alarmsButton').hide(); +@@ -2836,7 +2674,7 @@ function initializeDynamicDashboardWithData(data) { + renderChartsAndMenu(data); + + // Ensure MyNetdata menu is rendered with latest host info #5370 +- renderMyNetdataMenu(isSignedIn() ? cloudAgents : registryAgents); ++ renderMyNetdataMenu(registryAgents); + } + } + +@@ -4136,18 +3974,10 @@ function runOnceOnDashboardWithjQuery() { + // ------------------------------------------------------------------------ + // sidebar / affix + +- if (shouldShowSignInBanner()) { +- const el = document.getElementById("sign-in-banner"); +- if (el) { +- el.style.display = "initial"; +- el.classList.add(`theme-${netdataTheme}`); +- } +- } +- + $('#sidebar') + .affix({ + offset: { +- top: (isdemo()) ? 150 : 0, ++ top: 0, + bottom: 0 + } + }) +@@ -4457,32 +4287,6 @@ function finalizePage() { + $(".shorten").shorten(); + enableTooltipsAndPopovers(); + +- if (isdemo()) { +- // do not to give errors on netdata demo servers for 60 seconds +- NETDATA.options.current.retries_on_data_failures = 60; +- +- // google analytics when this is used for the home page of the demo sites +- // this does not run on user's installations +- setTimeout(function () { +- (function (i, s, o, g, r, a, m) { +- i['GoogleAnalyticsObject'] = r; +- i[r] = i[r] || function () { +- (i[r].q = i[r].q || []).push(arguments) +- }, i[r].l = 1 * new Date(); +- a = s.createElement(o), +- m = s.getElementsByTagName(o)[0]; +- a.async = 1; +- a.src = g; +- m.parentNode.insertBefore(a, m) +- })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga'); +- +- ga('create', 'UA-64295674-3', 'auto'); +- ga('send', 'pageview', '/demosite/' + window.location.host); +- }, 2000); +- } else { +- notifyForUpdate(); +- } +- + if (urlOptions.show_alarms === true) { + setTimeout(function () { + $('#alarmsModal').modal('show'); +@@ -4547,12 +4351,9 @@ var netdataPrepCallback = function () { + } + }); + +- if (isdemo()) { +- document.getElementById('masthead').style.display = 'block'; +- } else { +- if (urlOptions.update_always === true) { +- NETDATA.setOption('stop_updates_when_focus_is_lost', !urlOptions.update_always); +- } ++ ++ if (urlOptions.update_always === true) { ++ NETDATA.setOption('stop_updates_when_focus_is_lost', !urlOptions.update_always); + } + }; + +@@ -4614,542 +4415,4 @@ var selected_server_timezone = function (timezone, status) { + // our entry point + // var netdataStarted = performance.now(); + +-var netdataCallback = initializeDynamicDashboard; +- +-// ================================================================================================= +-// netdata.cloud +- +-let registryAgents = []; +- +-let cloudAgents = []; +- +-let myNetdataMenuFilterValue = ""; +- +-let cloudAccountID = null; +- +-let cloudAccountName = null; +- +-let cloudToken = null; +- +-/// Enforces a maximum string length while retaining the prefix and the postfix of +-/// the string. +-function truncateString(str, maxLength) { +- if (str.length <= maxLength) { +- return str; +- } +- +- const spanLength = Math.floor((maxLength - 3) / 2); +- return `${str.substring(0, spanLength)}...${str.substring(str.length - spanLength)}`; +-} +- +-// ------------------------------------------------------------------------------------------------- +-// netdata.cloud API Client +-// ------------------------------------------------------------------------------------------------- +- +-function isValidAgent(a) { +- return a.urls != null && a.urls.length > 0; +-} +- +-// https://github.com/netdata/hub/issues/146 +-function getCloudAccountAgents() { +- if (!isSignedIn()) { +- return []; +- } +- +- return fetch( +- `${NETDATA.registry.cloudBaseURL}/api/v1/accounts/${cloudAccountID}/agents`, +- { +- method: "GET", +- mode: "cors", +- headers: { +- "Authorization": `Bearer ${cloudToken}` +- } +- } +- ).then((response) => { +- if (!response.ok) { +- throw Error("Cannot fetch known accounts"); +- } +- return response.json(); +- }).then((payload) => { +- const agents = payload.result ? payload.result.agents : null; +- +- if (!agents) { +- return []; +- } +- +- return agents.filter((a) => isValidAgent(a)).map((a) => { +- return { +- "guid": a.id, +- "name": a.name, +- "url": a.urls[0], +- "alternate_urls": a.urls +- } +- }) +- }).catch(function (error) { +- console.log(error); +- return null; +- }); +-} +- +-/** 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()) { +- return []; +- } +- +- const maskedURL = NETDATA.registry.MASKED_DATA; +- +- const agents = agentsToSync.map((a) => { +- const urls = a.alternate_urls.filter((url) => url != maskedURL); +- +- return { +- "id": a.guid, +- "name": a.name, +- "urls": urls +- } +- }).filter((a) => isValidAgent(a)) +- +- const payload = { +- "accountID": cloudAccountID, +- "agents": agents, +- "merge": false, +- }; +- +- return fetch( +- `${NETDATA.registry.cloudBaseURL}/api/v1/accounts/${cloudAccountID}/agents`, +- { +- method: "POST", +- mode: "cors", +- headers: { +- "Content-Type": "application/json; charset=utf-8", +- "Authorization": `Bearer ${cloudToken}` +- }, +- body: JSON.stringify(payload) +- } +- ).then((response) => { +- return response.json(); +- }).then((payload) => { +- const agents = payload.result ? payload.result.agents : null; +- +- if (!agents) { +- return []; +- } +- +- return agents.filter((a) => isValidAgent(a)).map((a) => { +- return { +- "guid": a.id, +- "name": a.name, +- "url": a.urls[0], +- "alternate_urls": a.urls +- } +- }) +- }); +-} +- +-function deleteCloudAgentURL(agentID, url) { +- if (!isSignedIn()) { +- return []; +- } +- +- return fetch( +- `${NETDATA.registry.cloudBaseURL}/api/v1/accounts/${cloudAccountID}/agents/${agentID}/url?value=${encodeURIComponent(url)}`, +- { +- method: "DELETE", +- mode: "cors", +- headers: { +- "Content-Type": "application/json; charset=utf-8", +- "Authorization": `Bearer ${cloudToken}` +- }, +- } +- ).then((response) => { +- return response.json(); +- }).then((payload) => { +- const count = payload.result ? payload.result.count : 0; +- return count; +- }); +-} +- +-// ------------------------------------------------------------------------------------------------- +- +-function signInDidClick(e) { +- e.preventDefault(); +- e.stopPropagation(); +- +- if (!NETDATA.registry.isUsingGlobalRegistry()) { +- // If user is using a private registry, request his consent for +- // synchronizing with cloud. +- showSignInModal(); +- return; +- } +- +- signIn(); +-} +- +-function shouldShowSignInBanner() { +- return false; +-} +- +-function closeSignInBanner() { +- localStorage.setItem("signInBannerClosed", "true"); +- const el = document.getElementById("sign-in-banner"); +- if (el) { +- el.style.display = "none"; +- } +-} +- +-function closeSignInBannerDidClick(e) { +- closeSignInBanner(); +-} +- +-function signOutDidClick(e) { +- e.preventDefault(); +- e.stopPropagation(); +- signOut(); +-} +- +-// ------------------------------------------------------------------------------------------------- +- +-function updateMyNetdataAfterFilterChange() { +- const machinesEl = document.getElementById("my-netdata-menu-machines") +- machinesEl.innerHTML = renderMachines(cloudAgents); +- +- if (options.hosts.length > 1) { +- const streamedEl = document.getElementById("my-netdata-menu-streamed") +- streamedEl.innerHTML = renderStreamedHosts(options); +- } +-} +- +-function myNetdataMenuDidShow() { +- const filterEl = document.getElementById("my-netdata-menu-filter-input"); +- if (filterEl) { +- filterEl.focus(); +- } +-} +- +-function myNetdataFilterDidChange(e) { +- const inputEl = e.target; +- setTimeout(() => { +- myNetdataMenuFilterValue = inputEl.value; +- updateMyNetdataAfterFilterChange(); +- }, 1); +-} +- +-function myNetdataFilterClearDidClick(e) { +- e.preventDefault(); +- e.stopPropagation(); +- +- const inputEl = document.getElementById("my-netdata-menu-filter-input"); +- inputEl.value = ""; +- myNetdataMenuFilterValue = ""; +- +- updateMyNetdataAfterFilterChange(); +- +- inputEl.focus(); +-} +- +-// ------------------------------------------------------------------------------------------------- +- +-function clearCloudVariables() { +- cloudAccountID = null; +- cloudAccountName = null; +- cloudToken = null; +-} +- +-function clearCloudLocalStorageItems() { +- localStorage.removeItem("cloud.baseURL"); +- localStorage.removeItem("cloud.agentID"); +- localStorage.removeItem("cloud.sync"); +-} +- +-function signIn() { +- const url = `${NETDATA.registry.cloudBaseURL}/account/sign-in-agent?id=${NETDATA.registry.machine_guid}&name=${encodeURIComponent(NETDATA.registry.hostname)}&origin=${encodeURIComponent(window.location.origin + "/")}`; +- window.open(url); +-} +- +-function signOut() { +- cloudSSOSignOut(); +-} +- +-function handleMessage(e) { +- switch (e.data.type) { +- case "sign-in": +- handleSignInMessage(e); +- break; +- +- case "sign-out": +- handleSignOutMessage(e); +- break; +- +- default: +- return; +- } +-} +- +-function handleSignInMessage(e) { +- closeSignInBanner(); +- localStorage.setItem("cloud.baseURL", NETDATA.registry.cloudBaseURL); +- +- cloudAccountID = e.data.accountID; +- cloudAccountName = e.data.accountName; +- cloudToken = e.data.token; +- +- netdataRegistryCallback(registryAgents); +- if (e.data.redirectURI && !window.location.href.includes(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(); +- renderMyNetdataMenu(registryAgents); +-} +- +-function isSignedIn() { +- return cloudToken != null && cloudAccountID != null; +-} +- +-function sortedArraysEqual(a, b) { +- if (a.length != b.length) return false; +- +- for (var i = 0; i < a.length; ++i) { +- if (a[i] !== b[i]) return false; +- } +- +- return true; +-} +- +-// If merging is needed returns the merged agents set, otherwise returns null. +-function mergeAgents(cloud, local) { +- let dirty = false; +- +- const union = new Map(); +- +- for (const cagent of cloud) { +- union.set(cagent.guid, cagent); +- } +- +- for (const lagent of local) { +- const cagent = union.get(lagent.guid); +- if (cagent) { +- for (const u of lagent.alternate_urls) { +- if (u === NETDATA.registry.MASKED_DATA) { // TODO: temp until registry is updated. +- continue; +- } +- +- if (!cagent.alternate_urls.includes(u)) { +- dirty = true; +- cagent.alternate_urls.push(u); +- } +- } +- } else { +- dirty = true; +- union.set(lagent.guid, lagent); +- } +- } +- +- if (dirty) { +- return Array.from(union.values()); +- } +- +- return null; +-} +- +-function showSignInModal() { +- document.getElementById("sim-registry").innerHTML = NETDATA.registry.server; +- $("#signInModal").modal("show"); +-} +- +-function explicitlySignIn() { +- $("#signInModal").modal("hide"); +- signIn(); +-} +- +-function showSyncModal() { +- document.getElementById("sync-registry-modal-registry").innerHTML = NETDATA.registry.server; +- $("#syncRegistryModal").modal("show"); +-} +- +-function explicitlySyncAgents() { +- $("#syncRegistryModal").modal("hide"); +- +- const json = localStorage.getItem("cloud.sync"); +- const sync = json ? JSON.parse(json) : {}; +- delete sync[cloudAccountID]; +- localStorage.setItem("cloud.sync", JSON.stringify(sync)); +- +- NETDATA.registry.init(); +-} +- +-function syncAgents(callback) { +- const json = localStorage.getItem("cloud.sync"); +- const sync = json ? JSON.parse(json) : {}; +- +- const currentAgent = { +- guid: NETDATA.registry.machine_guid, +- name: NETDATA.registry.hostname, +- url: NETDATA.serverDefault, +- alternate_urls: [NETDATA.serverDefault], +- } +- +- const localAgents = sync[cloudAccountID] +- ? [currentAgent] +- : registryAgents.concat([currentAgent]); +- +- console.log("Checking if sync is needed.", localAgents); +- +- const agentsToSync = mergeAgents(cloudAgents, localAgents); +- +- if ((!sync[cloudAccountID]) || agentsToSync) { +- sync[cloudAccountID] = new Date().getTime(); +- localStorage.setItem("cloud.sync", JSON.stringify(sync)); +- } +- +- if (agentsToSync) { +- console.log("Synchronizing with netdata.cloud."); +- +- postCloudAccountAgents(agentsToSync).then((agents) => { +- // TODO: clear syncTime on error! +- cloudAgents = agents; +- callback(cloudAgents); +- }); +- +- return +- } +- +- callback(cloudAgents); +-} +- +-let isCloudSSOInitialized = false; +- +-function cloudSSOInit() { +- const iframeEl = document.getElementById("ssoifrm"); +- const url = `${NETDATA.registry.cloudBaseURL}/account/sso-agent?id=${NETDATA.registry.machine_guid}`; +- iframeEl.src = url; +- isCloudSSOInitialized = true; +-} +- +-function cloudSSOSignOut() { +- const iframe = document.getElementById("ssoifrm"); +- const url = `${NETDATA.registry.cloudBaseURL}/account/sign-out-agent`; +- iframe.src = url; +-} +- +-function initCloud() { +- if (!NETDATA.registry.isCloudEnabled) { +- clearCloudVariables(); +- clearCloudLocalStorageItems(); +- return; +- } +- +- if (NETDATA.registry.cloudBaseURL != localStorage.getItem("cloud.baseURL")) { +- clearCloudVariables(); +- clearCloudLocalStorageItems(); +- if (NETDATA.registry.cloudBaseURL) { +- localStorage.setItem("cloud.baseURL", NETDATA.registry.cloudBaseURL); +- } +- } +- +- if (!isCloudSSOInitialized) { +- cloudSSOInit(); +- } +- +- touchAgent(); +-} +- +-// This callback is called after NETDATA.registry is initialized. +-function netdataRegistryCallback(machinesArray) { +- localStorage.setItem("cloud.agentID", NETDATA.registry.machine_guid); +- +- initCloud(); +- +- registryAgents = machinesArray; +- +- if (isSignedIn()) { +- // We call getCloudAccountAgents() here because it requires that +- // NETDATA.registry is initialized. +- clearMyNetdataMenu(); +- getCloudAccountAgents().then((agents) => { +- if (!agents) { +- errorMyNetdataMenu(); +- return; +- } +- cloudAgents = agents; +- syncAgents((agents) => { +- const agentsMap = {} +- for (const agent of agents) { +- agentsMap[agent.guid] = agent; +- } +- +- NETDATA.registry.machines = agentsMap; +- NETDATA.registry.machines_array = agents; +- +- renderMyNetdataMenu(agents); +- }); +- }); +- } else { +- renderMyNetdataMenu(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. +-// This improves the perceived performance. +-function tryFastInitCloud() { +- const baseURL = localStorage.getItem("cloud.baseURL"); +- const agentID = localStorage.getItem("cloud.agentID"); +- +- if (baseURL && agentID) { +- NETDATA.registry.cloudBaseURL = baseURL; +- NETDATA.registry.machine_guid = agentID; +- NETDATA.registry.isCloudEnabled = true; +- +- initCloud(); +- } +-} +- +-function initializeApp() { +- window.addEventListener("message", handleMessage, false); +- +- // tryFastInitCloud(); +-} +- +-if (document.readyState === "complete") { +- initializeApp(); +-} else { +- document.addEventListener("readystatechange", () => { +- if (document.readyState === "complete") { +- initializeApp(); +- } +- }); +-} ++var netdataCallback = initializeDynamicDashboard; +\ No newline at end of file +diff --git a/web/gui/old/index.html b/web/gui/old/index.html +index 94ec12b7..cffa335e 100644 +--- a/web/gui/old/index.html ++++ b/web/gui/old/index.html +@@ -108,17 +108,6 @@ + <div class="navbar-highlight"> + <div id="navbar-highlight-content" class="navbar-highlight-content"></div> + </div> +- +- <div id="sign-in-banner" style="display: none"> +- <div class="container"> +- Like what you see? +- <strong><a href="#" class="__link" onclick="signInDidClick(event); return false">Sign in</a> +- to experience the full-range of netdata capabilities!</strong> +- <div class="__close" onclick="closeSignInBannerDidClick(event)"> +- Close <i class="fas fa-times"></i> +- </div> +- </div> +- </div> + + <div id="masthead" style="display: none;"> + <div class="container"> +@@ -1139,92 +1128,6 @@ + </div> + </div> + +- +- <div class="modal fade" id="updateModal" tabindex="-1" role="dialog" aria-labelledby="updateModalLabel"> +- <div class="modal-dialog" role="document"> +- <div class="modal-content"> +- <div class="modal-header"> +- <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> +- <h4 class="modal-title" id="updateModalLabel">Update Check</h4> +- </div> +- <div class="modal-body"> +- Your netdata version: <b><code><span id="netdataVersion">Unknown</span></code></b><br/> +- <br/> +- <div style="padding: 10px;"></div> +- <div id="versionCheckLog">Not checked yet. Please press the Check Now button.</div> +- <div> +- <hr/> +- </div> +- <div> +- For progress reports and key netdata updates: <strong><a href="https://twitter.com/linuxnetdata" target="_blank">follow netdata on <i class="fab fa-twitter"></i> twitter</a></strong>. +- <br/> +- You can also <a href="https://www.facebook.com/linuxnetdata/" target="_blank">follow netdata on <i class="fab fa-facebook"></i> facebook</a>, +- or <a href="https://github.com/netdata/netdata" target="_blank">watch netdata on <i class="fab fa-github"></i> github</a>. +- </div> +- </div> +- <div class="modal-footer"> +- <a href="#" onclick="notifyForUpdate(true); return false;" type="button" class="btn btn-default">Check Now</a> +- <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> +- </div> +- </div> +- </div> +- </div> +- +- <div class="modal fade" id="signInModal" tabindex="-1" role="dialog" aria-labelledby="signInModalLabel"> +- <div class="modal-dialog" role="document"> +- <div class="modal-content"> +- <div class="modal-header"> +- <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> +- <h4 class="modal-title" id="signInModalLabel">Sign In</h4> +- </div> +- <div class="modal-body"> +- <p> +- Signing-in to netdata.cloud will synchronize the list of +- your netdata monitored nodes known at registry +- <strong><span id="sim-registry"></span></strong>. This +- may include server hostnames, urls and identification +- GUIDs. +- </p> +- <p> +- After you upgrade all your netdata servers, your private +- registry will not be needed any more. +- </p> +- <p> +- Are you sure you want to proceed? +- </p> +- </div> +- <div class="modal-footer"> +- <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button> +- <a href="#" onclick="explicitlySignIn(); return false;" type="button" class="btn btn-success">Sign In</a> +- </div> +- </div> +- </div> +- </div> +- +- <div class="modal fade" id="syncRegistryModal" tabindex="-1" role="dialog" aria-labelledby="syncRegistryModalLabel"> +- <div class="modal-dialog" role="document"> +- <div class="modal-content"> +- <div class="modal-header"> +- <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> +- <h4 class="modal-title" id="syncRegistryModalLabel">Synchronize netdata.cloud with registry?</h4> +- </div> +- <div class="modal-body"> +- <p> +- You are about to synchronize your netdata.cloud account with data from the registry at <strong><span id="sync-registry-modal-registry"></span></strong>. +- This may include server hostnames, urls and identification GUIDs. +- </p> +- <p> +- Are you sure you want to proceed? +- </p> +- </div> +- <div class="modal-footer"> +- <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button> +- <a href="#" onclick="explicitlySyncAgents(); return false;" type="button" class="btn btn-success">Synchronize</a> +- </div> +- </div> +- </div> +- </div> +- + <div class="modal fade" id="deleteRegistryModal" tabindex="-1" role="dialog" aria-labelledby="deleteRegistryModalLabel"> + <div class="modal-dialog" role="document"> + <div class="modal-content"> +diff --git a/web/gui/src/dashboard.js/registry.js b/web/gui/src/dashboard.js/registry.js +index 090ef52f..a2322fb7 100644 +--- a/web/gui/src/dashboard.js/registry.js ++++ b/web/gui/src/dashboard.js/registry.js +@@ -3,25 +3,14 @@ + + NETDATA.registry = { + server: null, // the netdata registry server +- isCloudEnabled: false,// is netdata.cloud functionality enabled? +- cloudBaseURL: null, // the netdata cloud base url + person_guid: null, // the unique ID of this browser / user + machine_guid: null, // the unique ID the netdata server that served dashboard.js + hostname: 'unknown', // the hostname of the netdata server that served dashboard.js + machines: null, // the user's other URLs + machines_array: null, // the user's other URLs in an array + person_urls: null, +- anonymous_statistics_checked: false, + MASKED_DATA: "***", + +- isUsingGlobalRegistry: function() { +- return NETDATA.registry.server == "https://registry.my-netdata.io"; +- }, +- +- isRegistryEnabled: function() { +- return !(NETDATA.registry.isUsingGlobalRegistry() || isSignedIn()) +- }, +- + parsePersonUrls: function (person_urls) { + NETDATA.registry.person_urls = person_urls; + +@@ -75,26 +64,8 @@ NETDATA.registry = { + NETDATA.registry.hello(NETDATA.serverDefault, function (data) { + if (data) { + NETDATA.registry.server = data.registry; +- if (data.cloud_base_url !== "") { +- NETDATA.registry.isCloudEnabled = true; +- NETDATA.registry.cloudBaseURL = data.cloud_base_url; +- } else { +- NETDATA.registry.isCloudEnabled = false; +- NETDATA.registry.cloudBaseURL = ""; +- } + NETDATA.registry.machine_guid = data.machine_guid; + NETDATA.registry.hostname = data.hostname; +- if (!NETDATA.registry.anonymous_statistics_checked) { +- NETDATA.registry.anonymous_statistics_checked=true; +- if (data.anonymous_statistics) { +- (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=false;j.src= +- 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); +- })(window,document,'script','dataLayer','GTM-N6CBMJD'); +- dataLayer.push({"anonymous_statistics" : "true", "machine_guid" : data.machine_guid}); +- } +- } + NETDATA.registry.access(2, function (person_urls) { + NETDATA.registry.parsePersonUrls(person_urls); + }); +@@ -143,12 +114,8 @@ NETDATA.registry = { + let name = NETDATA.registry.MASKED_DATA; + let url = NETDATA.registry.MASKED_DATA; + +- if (!NETDATA.registry.isUsingGlobalRegistry()) { +- // If the user is using a private registry keep sending identifiable +- // data. +- name = NETDATA.registry.hostname; +- url = NETDATA.serverDefault; +- } ++ name = NETDATA.registry.hostname; ++ url = NETDATA.serverDefault; + + console.log("ACCESS", name, url); + -- 2.30.0
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.