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
To reply to this bug, email your comments to 46435 AT debbugs.gnu.org.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
guix-patches <at> gnu.org
:bug#46435
; Package guix-patches
.
(Thu, 11 Feb 2021 08:11:02 GMT) Full text and rfc822 format available.Léo Le Bouter <lle-bout <at> zaclys.net>
:guix-patches <at> gnu.org
.
(Thu, 11 Feb 2021 08:11:02 GMT) Full text and rfc822 format available.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
guix-patches <at> gnu.org
:bug#46435
; Package guix-patches
.
(Thu, 11 Feb 2021 08:15:01 GMT) Full text and rfc822 format available.Message #8 received at 46435 <at> debbugs.gnu.org (full text, mbox):
From: Léo Le Bouter <lle-bout <at> zaclys.net> To: 46435 <at> debbugs.gnu.org Subject: Re: [PATCH] gnu: Add netdata. Date: Thu, 11 Feb 2021 09:14:21 +0100
[Message part 1 (text/plain, inline)]
I would need help to write a service for it. Here's the systemd service for it: https://salsa.debian.org/debian/netdata/-/raw/master/system/netdata.service.in Thank you
[signature.asc (application/pgp-signature, inline)]
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.