From 30b94862648cdbf4f537337d2e2f01c369a9dee9 Mon Sep 17 00:00:00 2001 From: Lennart Weller Date: Thu, 21 Apr 2016 14:27:29 +0200 Subject: Imported Upstream version 1.1.0 --- web/Makefile.am | 89 ++-- web/Makefile.in | 699 +++++++++++++++++++++++++++ web/css/bootstrap-theme.min.css | 0 web/css/bootstrap.min.css | 0 web/css/font-awesome.min.css | 0 web/dashboard.css | 46 ++ web/dashboard.html | 3 +- web/dashboard.js | 558 +++++++++++++++------ web/dashboard.slate.css | 46 ++ web/demo.html | 0 web/demo2.html | 0 web/favicon.ico | Bin 1453926 -> 56875 bytes web/fonts/FontAwesome.otf | Bin web/fonts/fontawesome-webfont.eot | Bin web/fonts/fontawesome-webfont.svg | 0 web/fonts/fontawesome-webfont.ttf | Bin web/fonts/fontawesome-webfont.woff | Bin web/fonts/fontawesome-webfont.woff2 | Bin web/fonts/glyphicons-halflings-regular.eot | Bin web/fonts/glyphicons-halflings-regular.svg | 0 web/fonts/glyphicons-halflings-regular.ttf | Bin web/fonts/glyphicons-halflings-regular.woff | Bin web/fonts/glyphicons-halflings-regular.woff2 | Bin web/images/README.md | 1 - web/images/seo-performance-114.png | Bin web/images/seo-performance-128.png | Bin web/images/seo-performance-16.png | Bin web/images/seo-performance-24.png | Bin web/images/seo-performance-256.png | Bin web/images/seo-performance-32.png | Bin web/images/seo-performance-48.png | Bin web/images/seo-performance-512.png | Bin web/images/seo-performance-64.png | Bin web/images/seo-performance-72.png | Bin web/images/seo-performance-multi-size.icns | Bin web/images/seo-performance-multi-size.ico | Bin 1453926 -> 56875 bytes web/index.html | 470 ++++++++++++++++-- web/lib/ElementQueries.js | 0 web/lib/ResizeSensor.js | 0 web/lib/bootstrap.min.js | 0 web/lib/dygraph-combined.js | 0 web/lib/jquery.peity.min.js | 0 web/lib/jquery.sparkline.min.js | 0 web/netdata-swagger.json | 0 web/netdata-swagger.yaml | 3 +- web/old/index.js | 0 web/old/netdata.js | 0 web/tv.html | 239 +++++++++ web/version.txt | 1 + 49 files changed, 1909 insertions(+), 246 deletions(-) create mode 100644 web/Makefile.in mode change 100755 => 100644 web/css/bootstrap-theme.min.css mode change 100755 => 100644 web/css/bootstrap.min.css mode change 100755 => 100644 web/css/font-awesome.min.css mode change 100755 => 100644 web/dashboard.css mode change 100755 => 100644 web/dashboard.html mode change 100755 => 100644 web/dashboard.js mode change 100755 => 100644 web/dashboard.slate.css mode change 100755 => 100644 web/demo.html mode change 100755 => 100644 web/demo2.html mode change 100755 => 100644 web/favicon.ico mode change 100755 => 100644 web/fonts/FontAwesome.otf mode change 100755 => 100644 web/fonts/fontawesome-webfont.eot mode change 100755 => 100644 web/fonts/fontawesome-webfont.svg mode change 100755 => 100644 web/fonts/fontawesome-webfont.ttf mode change 100755 => 100644 web/fonts/fontawesome-webfont.woff mode change 100755 => 100644 web/fonts/fontawesome-webfont.woff2 mode change 100755 => 100644 web/fonts/glyphicons-halflings-regular.eot mode change 100755 => 100644 web/fonts/glyphicons-halflings-regular.svg mode change 100755 => 100644 web/fonts/glyphicons-halflings-regular.ttf mode change 100755 => 100644 web/fonts/glyphicons-halflings-regular.woff mode change 100755 => 100644 web/fonts/glyphicons-halflings-regular.woff2 delete mode 100644 web/images/README.md mode change 100755 => 100644 web/images/seo-performance-114.png mode change 100755 => 100644 web/images/seo-performance-128.png mode change 100755 => 100644 web/images/seo-performance-16.png mode change 100755 => 100644 web/images/seo-performance-24.png mode change 100755 => 100644 web/images/seo-performance-256.png mode change 100755 => 100644 web/images/seo-performance-32.png mode change 100755 => 100644 web/images/seo-performance-48.png mode change 100755 => 100644 web/images/seo-performance-512.png mode change 100755 => 100644 web/images/seo-performance-64.png mode change 100755 => 100644 web/images/seo-performance-72.png mode change 100755 => 100644 web/images/seo-performance-multi-size.icns mode change 100755 => 100644 web/images/seo-performance-multi-size.ico mode change 100755 => 100644 web/index.html mode change 100755 => 100644 web/lib/ElementQueries.js mode change 100755 => 100644 web/lib/ResizeSensor.js mode change 100755 => 100644 web/lib/bootstrap.min.js mode change 100755 => 100644 web/lib/dygraph-combined.js mode change 100755 => 100644 web/lib/jquery.peity.min.js mode change 100755 => 100644 web/lib/jquery.sparkline.min.js mode change 100755 => 100644 web/netdata-swagger.json mode change 100755 => 100644 web/netdata-swagger.yaml mode change 100755 => 100644 web/old/index.js mode change 100755 => 100644 web/old/netdata.js create mode 100644 web/tv.html create mode 100644 web/version.txt (limited to 'web') diff --git a/web/Makefile.am b/web/Makefile.am index f762ce373..1b6b918be 100644 --- a/web/Makefile.am +++ b/web/Makefile.am @@ -4,73 +4,75 @@ MAINTAINERCLEANFILES= $(srcdir)/Makefile.in dist_web_DATA = \ - robots.txt \ - index.html \ + robots.txt \ + index.html \ demo.html \ demo2.html \ - dashboard.html \ - dashboard.js \ - dashboard.css \ - dashboard.slate.css \ + tv.html \ + dashboard.html \ + dashboard.js \ + dashboard.css \ + dashboard.slate.css \ favicon.ico \ netdata-swagger.yaml \ netdata-swagger.json \ - $(NULL) + version.txt \ + $(NULL) webolddir=$(webdir)/old dist_webold_DATA = \ - old/datasource.html \ - old/index.html \ - old/index.js \ - old/netdata.js \ - old/theme.css \ - $(NULL) + old/datasource.html \ + old/index.html \ + old/index.js \ + old/netdata.js \ + old/theme.css \ + $(NULL) weblibdir=$(webdir)/lib dist_weblib_DATA = \ - lib/dygraph-combined.js \ - lib/dygraph-smooth-plotter.js \ - lib/jquery-1.12.0.min.js \ - lib/jquery.peity.min.js \ - lib/jquery.sparkline.min.js \ - lib/morris.min.js \ - lib/raphael-min.js \ + lib/dygraph-combined.js \ + lib/dygraph-smooth-plotter.js \ + lib/jquery-1.12.0.min.js \ + lib/jquery.peity.min.js \ + lib/jquery.sparkline.min.js \ + lib/morris.min.js \ + lib/raphael-min.js \ lib/jquery.easypiechart.min.js \ lib/jquery.nanoscroller.min.js \ - lib/bootstrap.min.js \ + lib/bootstrap.min.js \ lib/ElementQueries.js \ lib/ResizeSensor.js \ - lib/bootstrap-toggle.min.js \ - lib/c3.min.js \ - lib/d3.min.js \ - lib/gauge.min.js \ - $(NULL) + lib/bootstrap-toggle.min.js \ + lib/c3.min.js \ + lib/d3.min.js \ + lib/gauge.min.js \ + $(NULL) webcssdir=$(webdir)/css dist_webcss_DATA = \ - css/morris.css \ - css/bootstrap.min.css \ - css/bootstrap-theme.min.css \ - css/bootstrap.slate.min.css \ + css/morris.css \ + css/bootstrap.min.css \ + css/bootstrap-theme.min.css \ + css/bootstrap.slate.min.css \ css/font-awesome.min.css \ - css/bootstrap-toggle.min.css \ - css/c3.min.css \ - $(NULL) + css/bootstrap-toggle.min.css \ + css/c3.min.css \ + $(NULL) webfontsdir=$(webdir)/fonts dist_webfonts_DATA = \ - fonts/glyphicons-halflings-regular.eot \ - fonts/glyphicons-halflings-regular.svg \ - fonts/glyphicons-halflings-regular.ttf \ - fonts/glyphicons-halflings-regular.woff \ - fonts/glyphicons-halflings-regular.woff2 \ + fonts/glyphicons-halflings-regular.eot \ + fonts/glyphicons-halflings-regular.svg \ + fonts/glyphicons-halflings-regular.ttf \ + fonts/glyphicons-halflings-regular.woff \ + fonts/glyphicons-halflings-regular.woff2 \ fonts/FontAwesome.otf \ fonts/fontawesome-webfont.eot \ fonts/fontawesome-webfont.svg \ fonts/fontawesome-webfont.ttf \ fonts/fontawesome-webfont.woff \ fonts/fontawesome-webfont.woff2 \ - $(NULL) + $(NULL) webimagesdir=$(webdir)/images dist_webimages_DATA = \ @@ -86,6 +88,13 @@ dist_webimages_DATA = \ images/seo-performance-512.png \ images/seo-performance-multi-size.ico \ images/seo-performance-multi-size.icns \ - $(NULL) + $(NULL) +version.txt: + if test -d "$(top_srcdir)/.git"; then \ + git --git-dir="$(top_srcdir)/.git" log -n 1 --format=%H; \ + fi > $@.tmp + test -s $@.tmp || echo 0 > $@.tmp + mv $@.tmp $@ +.PHONY: version.txt diff --git a/web/Makefile.in b/web/Makefile.in new file mode 100644 index 000000000..98d5dcc76 --- /dev/null +++ b/web/Makefile.in @@ -0,0 +1,699 @@ +# Makefile.in generated by automake 1.14.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2013 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = web +DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ + $(dist_web_DATA) $(dist_webcss_DATA) $(dist_webfonts_DATA) \ + $(dist_webimages_DATA) $(dist_weblib_DATA) $(dist_webold_DATA) +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pthread.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +SOURCES = +DIST_SOURCES = +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__uninstall_files_from_dir = { \ + test -z "$$files" \ + || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ + || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ + $(am__cd) "$$dir" && rm -f $$files; }; \ + } +am__installdirs = "$(DESTDIR)$(webdir)" "$(DESTDIR)$(webcssdir)" \ + "$(DESTDIR)$(webfontsdir)" "$(DESTDIR)$(webimagesdir)" \ + "$(DESTDIR)$(weblibdir)" "$(DESTDIR)$(webolddir)" +DATA = $(dist_web_DATA) $(dist_webcss_DATA) $(dist_webfonts_DATA) \ + $(dist_webimages_DATA) $(dist_weblib_DATA) $(dist_webold_DATA) +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBMNL_CFLAGS = @LIBMNL_CFLAGS@ +LIBMNL_LIBS = @LIBMNL_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MATH_CFLAGS = @MATH_CFLAGS@ +MATH_LIBS = @MATH_LIBS@ +MKDIR_P = @MKDIR_P@ +NFACCT_CFLAGS = @NFACCT_CFLAGS@ +NFACCT_LIBS = @NFACCT_LIBS@ +OBJEXT = @OBJEXT@ +OPTIONAL_MATH_CLFAGS = @OPTIONAL_MATH_CLFAGS@ +OPTIONAL_MATH_LIBS = @OPTIONAL_MATH_LIBS@ +OPTIONAL_NFACCT_CLFAGS = @OPTIONAL_NFACCT_CLFAGS@ +OPTIONAL_NFACCT_LIBS = @OPTIONAL_NFACCT_LIBS@ +OPTIONAL_ZLIB_CLFAGS = @OPTIONAL_ZLIB_CLFAGS@ +OPTIONAL_ZLIB_LIBS = @OPTIONAL_ZLIB_LIBS@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_RPM_RELEASE = @PACKAGE_RPM_RELEASE@ +PACKAGE_RPM_VERSION = @PACKAGE_RPM_VERSION@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +PTHREAD_CC = @PTHREAD_CC@ +PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ +PTHREAD_LIBS = @PTHREAD_LIBS@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +ZLIB_CFLAGS = @ZLIB_CFLAGS@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +ax_pthread_config = @ax_pthread_config@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +cachedir = @cachedir@ +chartsdir = @chartsdir@ +configdir = @configdir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +logdir = @logdir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +nodedir = @nodedir@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pluginsdir = @pluginsdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +webdir = @webdir@ + +# +# Copyright (C) 2015 Alon Bar-Lev +# +MAINTAINERCLEANFILES = $(srcdir)/Makefile.in +dist_web_DATA = \ + robots.txt \ + index.html \ + demo.html \ + demo2.html \ + tv.html \ + dashboard.html \ + dashboard.js \ + dashboard.css \ + dashboard.slate.css \ + favicon.ico \ + netdata-swagger.yaml \ + netdata-swagger.json \ + version.txt \ + $(NULL) + +webolddir = $(webdir)/old +dist_webold_DATA = \ + old/datasource.html \ + old/index.html \ + old/index.js \ + old/netdata.js \ + old/theme.css \ + $(NULL) + +weblibdir = $(webdir)/lib +dist_weblib_DATA = \ + lib/dygraph-combined.js \ + lib/dygraph-smooth-plotter.js \ + lib/jquery-1.12.0.min.js \ + lib/jquery.peity.min.js \ + lib/jquery.sparkline.min.js \ + lib/morris.min.js \ + lib/raphael-min.js \ + lib/jquery.easypiechart.min.js \ + lib/jquery.nanoscroller.min.js \ + lib/bootstrap.min.js \ + lib/ElementQueries.js \ + lib/ResizeSensor.js \ + lib/bootstrap-toggle.min.js \ + lib/c3.min.js \ + lib/d3.min.js \ + lib/gauge.min.js \ + $(NULL) + +webcssdir = $(webdir)/css +dist_webcss_DATA = \ + css/morris.css \ + css/bootstrap.min.css \ + css/bootstrap-theme.min.css \ + css/bootstrap.slate.min.css \ + css/font-awesome.min.css \ + css/bootstrap-toggle.min.css \ + css/c3.min.css \ + $(NULL) + +webfontsdir = $(webdir)/fonts +dist_webfonts_DATA = \ + fonts/glyphicons-halflings-regular.eot \ + fonts/glyphicons-halflings-regular.svg \ + fonts/glyphicons-halflings-regular.ttf \ + fonts/glyphicons-halflings-regular.woff \ + fonts/glyphicons-halflings-regular.woff2 \ + fonts/FontAwesome.otf \ + fonts/fontawesome-webfont.eot \ + fonts/fontawesome-webfont.svg \ + fonts/fontawesome-webfont.ttf \ + fonts/fontawesome-webfont.woff \ + fonts/fontawesome-webfont.woff2 \ + $(NULL) + +webimagesdir = $(webdir)/images +dist_webimages_DATA = \ + images/seo-performance-16.png \ + images/seo-performance-24.png \ + images/seo-performance-32.png \ + images/seo-performance-48.png \ + images/seo-performance-64.png \ + images/seo-performance-72.png \ + images/seo-performance-114.png \ + images/seo-performance-128.png \ + images/seo-performance-256.png \ + images/seo-performance-512.png \ + images/seo-performance-multi-size.ico \ + images/seo-performance-multi-size.icns \ + $(NULL) + +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu web/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu web/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-dist_webDATA: $(dist_web_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_web_DATA)'; test -n "$(webdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(webdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(webdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(webdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(webdir)" || exit $$?; \ + done + +uninstall-dist_webDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_web_DATA)'; test -n "$(webdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(webdir)'; $(am__uninstall_files_from_dir) +install-dist_webcssDATA: $(dist_webcss_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_webcss_DATA)'; test -n "$(webcssdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(webcssdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(webcssdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(webcssdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(webcssdir)" || exit $$?; \ + done + +uninstall-dist_webcssDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_webcss_DATA)'; test -n "$(webcssdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(webcssdir)'; $(am__uninstall_files_from_dir) +install-dist_webfontsDATA: $(dist_webfonts_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_webfonts_DATA)'; test -n "$(webfontsdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(webfontsdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(webfontsdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(webfontsdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(webfontsdir)" || exit $$?; \ + done + +uninstall-dist_webfontsDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_webfonts_DATA)'; test -n "$(webfontsdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(webfontsdir)'; $(am__uninstall_files_from_dir) +install-dist_webimagesDATA: $(dist_webimages_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_webimages_DATA)'; test -n "$(webimagesdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(webimagesdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(webimagesdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(webimagesdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(webimagesdir)" || exit $$?; \ + done + +uninstall-dist_webimagesDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_webimages_DATA)'; test -n "$(webimagesdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(webimagesdir)'; $(am__uninstall_files_from_dir) +install-dist_weblibDATA: $(dist_weblib_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_weblib_DATA)'; test -n "$(weblibdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(weblibdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(weblibdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(weblibdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(weblibdir)" || exit $$?; \ + done + +uninstall-dist_weblibDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_weblib_DATA)'; test -n "$(weblibdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(weblibdir)'; $(am__uninstall_files_from_dir) +install-dist_weboldDATA: $(dist_webold_DATA) + @$(NORMAL_INSTALL) + @list='$(dist_webold_DATA)'; test -n "$(webolddir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(webolddir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(webolddir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(webolddir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(webolddir)" || exit $$?; \ + done + +uninstall-dist_weboldDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_webold_DATA)'; test -n "$(webolddir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(webolddir)'; $(am__uninstall_files_from_dir) +tags TAGS: + +ctags CTAGS: + +cscope cscopelist: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(webdir)" "$(DESTDIR)$(webcssdir)" "$(DESTDIR)$(webfontsdir)" "$(DESTDIR)$(webimagesdir)" "$(DESTDIR)$(weblibdir)" "$(DESTDIR)$(webolddir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-dist_webDATA install-dist_webcssDATA \ + install-dist_webfontsDATA install-dist_webimagesDATA \ + install-dist_weblibDATA install-dist_weboldDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_webDATA uninstall-dist_webcssDATA \ + uninstall-dist_webfontsDATA uninstall-dist_webimagesDATA \ + uninstall-dist_weblibDATA uninstall-dist_weboldDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic cscopelist-am \ + ctags-am distclean distclean-generic distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dist_webDATA install-dist_webcssDATA \ + install-dist_webfontsDATA install-dist_webimagesDATA \ + install-dist_weblibDATA install-dist_weboldDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \ + uninstall-am uninstall-dist_webDATA uninstall-dist_webcssDATA \ + uninstall-dist_webfontsDATA uninstall-dist_webimagesDATA \ + uninstall-dist_weblibDATA uninstall-dist_weboldDATA + + +version.txt: + if test -d "$(top_srcdir)/.git"; then \ + git --git-dir="$(top_srcdir)/.git" log -n 1 --format=%H; \ + fi > $@.tmp + test -s $@.tmp || echo 0 > $@.tmp + mv $@.tmp $@ + +.PHONY: version.txt + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/web/css/bootstrap-theme.min.css b/web/css/bootstrap-theme.min.css old mode 100755 new mode 100644 diff --git a/web/css/bootstrap.min.css b/web/css/bootstrap.min.css old mode 100755 new mode 100644 diff --git a/web/css/font-awesome.min.css b/web/css/font-awesome.min.css old mode 100755 new mode 100644 diff --git a/web/dashboard.css b/web/dashboard.css old mode 100755 new mode 100644 index 5c756d552..a7b090d66 --- a/web/dashboard.css +++ b/web/dashboard.css @@ -66,6 +66,43 @@ body { margin: 0px; } +.netdata-legend-toolbox { + display: block; + position: absolute; + bottom: 0px; + right: 30px; + height: 15px; + width: 110px; + background-color: White; + font-size: 12px; + vertical-align: middle; + line-height: 15px; + color: #DDDDDD; + text-align: center; + overflow: hidden; + z-index: 20; + padding: 0px; + margin: 0px; +} + +.netdata-legend-toolbox-button { + display: inline-block; + position: relative; + height: 15px; + width: 18px; + background-color: White; + font-size: 12px; + vertical-align: middle; + line-height: 15px; + color: #CDCDCD; + text-align: center; + overflow: hidden; + z-index: 21; + padding: 0px; + margin: 0px; + cursor: pointer; +} + .netdata-message { display: inline-block; text-align: left; @@ -102,6 +139,7 @@ body { height: calc(100% - 15px); /* 10px for the resize handler and 5px for the top margin */ font-size: 10px; margin-top: 5px; + text-align: left; /* width and height is calculated (depends on the appearance of the legend) */ } @@ -452,3 +490,11 @@ body { color: #999999; font-weight: normal; } + +.popover-title { + font-weight: bold; + font-size: 12px; +} +.popover-content { + font-size: 11px; +} diff --git a/web/dashboard.html b/web/dashboard.html old mode 100755 new mode 100644 index 8b8a69900..fd505078d --- a/web/dashboard.html +++ b/web/dashboard.html @@ -177,7 +177,7 @@ Sparklines using dygraphs data-height="20" data-after="-300" > - are also possible! This + are also possible! This
- diff --git a/web/dashboard.js b/web/dashboard.js old mode 100755 new mode 100644 index 079209d78..b6c62ae3c --- a/web/dashboard.js +++ b/web/dashboard.js @@ -11,6 +11,7 @@ // var netdataNoC3 = true; // do not use C3 // var netdataNoBootstrap = true; // do not load bootstrap // var netdataDontStart = true; // do not start the thread to process the charts +// var netdataErrorCallback = null; // Callback function that will be invoked upon error // // You can also set the default netdata server, using the following. // When this variable is not set, we assume the page is hosted on your @@ -155,7 +156,7 @@ after: -600, // panning pixels_per_point: 1, // the detail of the chart fill_luminance: 0.8 // luminance of colors in solit areas - } + }; // ---------------------------------------------------------------------------------------------------------------- // global options @@ -242,6 +243,10 @@ destroy_on_hide: false, // destroy charts when they are not visible + show_help: true, // when enabled the charts will show some help + show_help_delay_show_ms: 500, + show_help_delay_hide_ms: 0, + eliminate_zero_dimensions: true, // do not show dimensions with just zeros stop_updates_when_focus_is_lost: true, // boolean - shall we stop auto-refreshes when document does not have user focus @@ -257,6 +262,11 @@ color_fill_opacity_area: 0.2, color_fill_opacity_stacked: 0.8, + pan_and_zoom_factor: 0.25, // the increment when panning and zooming with the toolbox + pan_and_zoom_factor_multiplier_control: 2.0, + pan_and_zoom_factor_multiplier_shift: 3.0, + pan_and_zoom_factor_multiplier_alt: 4.0, + setOptionCallback: function() { ; } }, @@ -272,7 +282,7 @@ libraries: false, dygraph: false } - } + }; // ---------------------------------------------------------------------------------------------------------------- @@ -320,7 +330,7 @@ NETDATA.localStorage.current[key.toString()] = ret; return ret; - } + }; NETDATA.localStorageSet = function(key, value, callback) { if(typeof value === 'undefined' || value === 'undefined') { @@ -345,7 +355,7 @@ NETDATA.localStorage.current[key.toString()] = value; return value; - } + }; NETDATA.localStorageGetRecursive = function(obj, prefix, callback) { for(var i in obj) { @@ -357,7 +367,7 @@ obj[i] = NETDATA.localStorageGet(prefix + '.' + i.toString(), obj[i], callback); } - } + }; NETDATA.setOption = function(key, value) { if(key.toString() === 'setOptionCallback') { @@ -382,11 +392,11 @@ } return true; - } + }; NETDATA.getOption = function(key) { return NETDATA.options.current[key.toString()]; - } + }; // read settings from local storage NETDATA.localStorageGetRecursive(NETDATA.options.current, 'options', null); @@ -449,7 +459,9 @@ 101: { message: "Cannot load jQuery", alert: true }, 402: { message: "Chart library not found", alert: false }, 403: { message: "Chart library not enabled/is failed", alert: false }, - 404: { message: "Chart not found", alert: false } + 404: { message: "Chart not found", alert: false }, + 405: { message: "Cannot download charts index from server", alert: true }, + 406: { message: "Invalid charts index downloaded from server", alert: true } }; NETDATA.errorLast = { code: 0, @@ -464,9 +476,14 @@ console.log("ERROR " + code + ": " + NETDATA.errorCodes[code].message + ": " + msg); - if(NETDATA.errorCodes[code].alert) + var ret = true; + if(typeof netdataErrorCallback === 'function') { + ret = netdataErrorCallback('system', code, msg); + } + + if(ret && NETDATA.errorCodes[code].alert) alert("ERROR " + code + ": " + NETDATA.errorCodes[code].message + ": " + msg); - } + }; NETDATA.errorReset = function() { NETDATA.errorLast.code = 0; @@ -529,13 +546,18 @@ cache: false }) .done(function(data) { - var h = NETDATA.chartRegistry.fixid(host); - //console.log('downloaded all charts from ' + host + ' (' + h + ')'); - self.charts[h] = data.charts; + if(data !== null) { + var h = NETDATA.chartRegistry.fixid(host); + self.charts[h] = data.charts; + } + else NETDATA.error(406, host + '/api/v1/charts'); + if(typeof callback === 'function') callback(data); }) .fail(function() { + NETDATA.error(405, host + '/api/v1/charts'); + if(typeof callback === 'function') callback(null); }); @@ -560,7 +582,7 @@ master: null, // the master chart (state), to which all others // are synchronized - force_before_ms: null, // the timespan to sync all other charts + force_before_ms: null, // the timespan to sync all other charts force_after_ms: null, // set a new master @@ -621,7 +643,7 @@ return true; } - } + }; // ---------------------------------------------------------------------------------------------------------------- // dimensions selection @@ -637,19 +659,19 @@ this.value_div = null; this.color = NETDATA.themes.current.foreground; - if(parent.selected === parent.unselected) + if(parent.selected_count > parent.unselected_count) this.selected = true; else this.selected = false; this.setOptions(name_div, value_div, color); - } + }; dimensionStatus.prototype.invalidate = function() { this.name_div = null; this.value_div = null; this.enabled = false; - } + }; dimensionStatus.prototype.setOptions = function(name_div, value_div, color) { this.color = color; @@ -676,7 +698,7 @@ this.enabled = true; this.setHandler(); - } + }; dimensionStatus.prototype.setHandler = function() { if(this.enabled === false) return; @@ -721,7 +743,7 @@ ds.parent.state.redrawChart(); } - } + }; dimensionStatus.prototype.select = function() { if(this.enabled === false) return; @@ -729,7 +751,7 @@ this.name_div.className = 'netdata-legend-name selected'; this.value_div.className = 'netdata-legend-value selected'; this.selected = true; - } + }; dimensionStatus.prototype.unselect = function() { if(this.enabled === false) return; @@ -737,11 +759,11 @@ this.name_div.className = 'netdata-legend-name not-selected'; this.value_div.className = 'netdata-legend-value hidden'; this.selected = false; - } + }; dimensionStatus.prototype.isSelected = function() { return(this.enabled === true && this.selected === true); - } + }; // ---------------------------------------------------------------------------------------------------------------- @@ -751,7 +773,7 @@ this.dimensions = {}; this.selected_count = 0; this.unselected_count = 0; - } + }; dimensionsVisibility.prototype.dimensionAdd = function(label, name_div, value_div, color) { if(typeof this.dimensions[label] === 'undefined') { @@ -762,21 +784,21 @@ this.dimensions[label].setOptions(name_div, value_div, color); return this.dimensions[label]; - } + }; dimensionsVisibility.prototype.dimensionGet = function(label) { return this.dimensions[label]; - } + }; dimensionsVisibility.prototype.invalidateAll = function() { for(var d in this.dimensions) this.dimensions[d].invalidate(); - } + }; dimensionsVisibility.prototype.selectAll = function() { for(var d in this.dimensions) this.dimensions[d].select(); - } + }; dimensionsVisibility.prototype.countSelected = function() { var i = 0; @@ -784,12 +806,12 @@ if(this.dimensions[d].isSelected()) i++; return i; - } + }; dimensionsVisibility.prototype.selectNone = function() { for(var d in this.dimensions) this.dimensions[d].unselect(); - } + }; dimensionsVisibility.prototype.selected2BooleanArray = function(array) { var ret = new Array(); @@ -820,7 +842,7 @@ } return ret; - } + }; // ---------------------------------------------------------------------------------------------------------------- @@ -859,10 +881,18 @@ * show an error instead of the chart */ var error = function(msg) { - that.element.innerHTML = that.id + ': ' + msg; - that.enabled = false; - that.current = that.pan; - } + var ret = true; + + if(typeof netdataErrorCallback === 'function') { + ret = netdataErrorCallback('chart', that.id, msg); + } + + if(ret) { + that.element.innerHTML = that.id + ': ' + msg; + that.enabled = false; + that.current = that.pan; + } + }; // GUID - a unique identifier for the chart this.uuid = NETDATA.guid(); @@ -1081,10 +1111,10 @@ that.tm.last_dom_created = new Date().getTime(); showLoading(); - } + }; /* init() private - * initialize state viariables + * initialize state variables * destroy all (possibly) created state elements * create the basic DOM for a chart */ @@ -1114,7 +1144,7 @@ last_hidden: 0, // the time the chart was hidden last_unhidden: 0, // the time the chart was unhidden last_autorefreshed: 0 // the time the chart was last refreshed - }, + }; that.data = null; // the last data as downloaded from the netdata server that.data_url = 'invalid://'; // string - the last url used to update the chart @@ -1127,7 +1157,7 @@ createDOM(); that.setMode('auto'); - } + }; var maxMessageFontSize = function() { // normally we want a font size, as tall as the element @@ -1158,29 +1188,29 @@ // set it that.element_message.style.fontSize = h.toString() + 'px'; that.element_message.style.paddingTop = paddingTop.toString() + 'px'; - } + }; var showMessage = function(msg) { that.element_message.className = 'netdata-message'; that.element_message.innerHTML = msg; - this.element_message.style.fontSize = 'x-small'; + that.element_message.style.fontSize = 'x-small'; that.element_message.style.paddingTop = '0px'; that.___messageHidden___ = undefined; - } + }; var showMessageIcon = function(icon) { that.element_message.innerHTML = icon; that.element_message.className = 'netdata-message icon'; maxMessageFontSize(); that.___messageHidden___ = undefined; - } + }; var hideMessage = function() { if(typeof that.___messageHidden___ === 'undefined') { that.___messageHidden___ = true; that.element_message.className = 'netdata-message hidden'; } - } + }; var showRendering = function() { var icon; @@ -1194,7 +1224,7 @@ icon = ''; showMessageIcon(icon + ' netdata'); - } + }; var showLoading = function() { if(that.chart_created === false) { @@ -1202,14 +1232,14 @@ return true; } return false; - } + }; var isHidden = function() { if(typeof that.___chartIsHidden___ !== 'undefined') return true; return false; - } + }; // hide the chart, when it is not visible - called from isVisible() var hideChart = function() { @@ -1228,9 +1258,9 @@ that.tm.last_hidden = new Date().getTime(); } } - + that.___chartIsHidden___ = true; - } + }; // unhide the chart, when it is visible - called from isVisible() var unhideChart = function() { @@ -1251,14 +1281,14 @@ resizeChart(); hideMessage(); } - } + }; var canBeRendered = function() { if(isHidden() === true || that.isVisible(true) === false) return false; return true; - } + }; // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers var callChartLibraryUpdateSafely = function(data) { @@ -1284,7 +1314,7 @@ } return true; - } + }; // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers var callChartLibraryCreateSafely = function(data) { @@ -1312,7 +1342,7 @@ that.chart_created = true; that.updates_since_last_creation = 0; return true; - } + }; // ---------------------------------------------------------------------------------------------------------------- // Chart Resize @@ -1338,7 +1368,7 @@ that.tm.last_resized = new Date().getTime(); } - } + }; // this is the actual chart resize algorithm // it will: @@ -1434,8 +1464,8 @@ }; // process end event - document.onmouseup = - document.ontouchend = + document.onmouseup = + document.ontouchend = this.element_legend_childs.resize_handler.onmouseup = this.element_legend_childs.resize_handler.ontouchend = function(e) { @@ -1455,7 +1485,7 @@ NETDATA.options.auto_refresher_stop_until = 0; }; } - } + }; var noDataToShow = function() { @@ -1466,14 +1496,14 @@ //that.element_chart.style.display = 'none'; //if(that.element_legend !== null) that.element_legend.style.display = 'none'; //that.___chartIsHidden___ = true; - } + }; // ============================================================================================================ // PUBLIC FUNCTIONS this.error = function(msg) { error(msg); - } + }; this.setMode = function(m) { if(this.current !== null && this.current.name === m) return; @@ -1492,7 +1522,7 @@ this.current.force_after_ms = null; this.tm.last_mode_switch = new Date().getTime(); - } + }; // ---------------------------------------------------------------------------------------------------------------- // global selection sync @@ -1506,7 +1536,7 @@ NETDATA.globalSelectionSync.dont_sync_before = new Date().getTime() + ms; else NETDATA.globalSelectionSync.dont_sync_before = new Date().getTime() + NETDATA.options.current.sync_selection_delay; - } + }; // can we globally apply selection sync? this.globalSelectionSyncAbility = function() { @@ -1517,14 +1547,14 @@ return false; return true; - } + }; this.globalSelectionSyncIsMaster = function() { if(NETDATA.globalSelectionSync.state === this) return true; else return false; - } + }; // this chart is the master of the global selection sync this.globalSelectionSyncBeMaster = function() { @@ -1569,7 +1599,7 @@ } // this.globalSelectionSyncDelay(100); - } + }; // can the chart participate to the global selection sync as a slave? this.globalSelectionSyncIsEligible = function() { @@ -1581,13 +1611,13 @@ return true; return false; - } + }; // this chart becomes a slave of the global selection sync this.globalSelectionSyncBeSlave = function() { if(NETDATA.globalSelectionSync.state !== this) NETDATA.globalSelectionSync.slaves.push(this); - } + }; // sync all the visible charts to the given time // this is to be called from the chart libraries @@ -1617,7 +1647,7 @@ $.each(NETDATA.globalSelectionSync.slaves, function(i, st) { st.setSelection(t); }); - } + }; // stop syncing all charts to the given time this.globalSelectionSyncStop = function() { @@ -1644,7 +1674,7 @@ } this.clearSelection(); - } + }; this.setSelection = function(t) { if(typeof this.library.setSelection === 'function') { @@ -1659,7 +1689,7 @@ this.log('selection set to ' + t.toString()); return this.selected; - } + }; this.clearSelection = function() { if(this.selected === true) { @@ -1678,26 +1708,26 @@ } return this.selected; - } + }; // find if a timestamp (ms) is shown in the current chart this.timeIsVisible = function(t) { if(t >= this.data_after && t <= this.data_before) return true; return false; - }, + }; this.calculateRowForTime = function(t) { if(this.timeIsVisible(t) === false) return -1; return Math.floor((t - this.data_after) / this.data_update_every); - } + }; // ---------------------------------------------------------------------------------------------------------------- // console logging this.log = function(msg) { console.log(this.id + ' (' + this.library_name + ' ' + this.uuid + '): ' + msg); - } + }; this.pauseChart = function() { if(this.paused === false) { @@ -1706,7 +1736,7 @@ this.paused = true; } - } + }; this.unpauseChart = function() { if(this.paused === true) { @@ -1715,7 +1745,7 @@ this.paused = false; } - } + }; this.resetChart = function(dont_clear_master, dont_update) { if(this.debug === true) @@ -1757,7 +1787,7 @@ if(dont_update !== true && this.isVisible() === true) { this.updateChart(); } - } + }; this.updateChartPanOrZoom = function(after, before) { var logme = 'updateChartPanOrZoom(' + after + ', ' + before + '): '; @@ -1767,13 +1797,15 @@ this.log(logme); if(before < after) { - this.log(logme + 'flipped parameters, rejecting it.'); + if(this.debug === true) + this.log(logme + 'flipped parameters, rejecting it.'); + return false; } if(typeof this.fixed_min_duration === 'undefined') this.fixed_min_duration = Math.round((this.chartWidth() / 30) * this.chart.update_every * 1000); - + var min_duration = this.fixed_min_duration; var current_duration = Math.round(this.view_before - this.view_after); @@ -1788,7 +1820,7 @@ // the final wanted duration var wanted_duration = before - after; - + // to allow panning, accept just a point below our minimum if((current_duration - this.data_update_every) < min_duration) min_duration = current_duration - this.data_update_every; @@ -1831,7 +1863,7 @@ this.current.force_before_ms = before; NETDATA.globalPanAndZoom.setMaster(this, after, before); return ret; - } + }; this.legendFormatValue = function(value) { if(value === null || value === 'undefined') return '-'; @@ -1843,7 +1875,7 @@ if(abs >= 1 ) return (Math.round(value * 100) / 100).toLocaleString(); if(abs >= 0.1 ) return (Math.round(value * 1000) / 1000).toLocaleString(); return (Math.round(value * 10000) / 10000).toLocaleString(); - } + }; this.legendSetLabelValue = function(label, value) { var series = this.element_legend_childs.series[label]; @@ -1873,7 +1905,7 @@ if(series.value !== null) series.value.innerHTML = s; if(series.user !== null) series.user.innerHTML = r; - } + }; this.legendSetDate = function(ms) { if(typeof ms !== 'number') { @@ -1891,7 +1923,7 @@ if(this.element_legend_childs.title_units) this.element_legend_childs.title_units.innerHTML = this.units; - } + }; this.legendShowUndefined = function() { if(this.element_legend_childs.title_date) @@ -1914,7 +1946,7 @@ this.legendSetLabelValue(label, null); } } - } + }; this.legendShowLatestValues = function() { if(this.chart === null) return; @@ -1949,11 +1981,11 @@ else this.legendSetLabelValue(label, this.data.view_latest_values[i]); } - } + }; this.legendReset = function() { this.legendShowLatestValues(); - } + }; // this should be called just ONCE per dimension per chart this._chartDimensionColor = function(label) { @@ -1977,13 +2009,14 @@ this.colors.push(this.colors_assigned[label]); return this.colors_assigned[label]; - } + }; this.chartColors = function() { if(this.colors !== null) return this.colors; this.colors = new Array(); this.colors_available = new Array(); + var i, len; var c = $(this.element).data('colors'); // this.log('read colors: ' + c); @@ -1996,7 +2029,7 @@ var added = 0; while(added < 20) { - for(var i = 0, len = c.length; i < len ; i++) { + for(i = 0, len = c.length; i < len ; i++) { added++; this.colors_available.push(c[i]); // this.log('adding color: ' + c[i]); @@ -2006,11 +2039,11 @@ } // push all the standard colors too - for(var i = 0, len = NETDATA.themes.current.colors.length; i < len ; i++) + for(i = 0, len = NETDATA.themes.current.colors.length; i < len ; i++) this.colors_available.push(NETDATA.themes.current.colors[i]); return this.colors; - } + }; this.legendUpdateDOM = function() { var needed = false; @@ -2079,7 +2112,7 @@ if(user_id !== null) { user_element = document.getElementById(user_id) || null; if(user_element === null) - me.log('Cannot find element with id: ' + user_id); + state.log('Cannot find element with id: ' + user_id); } state.element_legend_childs.series[name] = { @@ -2117,6 +2150,13 @@ this.element_legend_childs = { content: content, resize_handler: document.createElement('div'), + toolbox: document.createElement('div'), + toolbox_left: document.createElement('div'), + toolbox_right: document.createElement('div'), + toolbox_reset: document.createElement('div'), + toolbox_zoomin: document.createElement('div'), + toolbox_zoomout: document.createElement('div'), + toolbox_volume: document.createElement('div'), title_date: document.createElement('span'), title_time: document.createElement('span'), title_units: document.createElement('span'), @@ -2137,9 +2177,171 @@ this.element_legend.innerHTML = ''; + if(this.library.toolboxPanAndZoom !== null) { + + function get_pan_and_zoom_step(event) { + if (event.ctrlKey) + return NETDATA.options.current.pan_and_zoom_factor * NETDATA.options.current.pan_and_zoom_factor_multiplier_control; + + else if (event.shiftKey) + return NETDATA.options.current.pan_and_zoom_factor * NETDATA.options.current.pan_and_zoom_factor_multiplier_shift; + + else if (event.altKey) + return NETDATA.options.current.pan_and_zoom_factor * NETDATA.options.current.pan_and_zoom_factor_multiplier_alt; + + else + return NETDATA.options.current.pan_and_zoom_factor; + } + + this.element_legend_childs.toolbox.className += ' netdata-legend-toolbox'; + this.element.appendChild(this.element_legend_childs.toolbox); + + this.element_legend_childs.toolbox_left.className += ' netdata-legend-toolbox-button'; + this.element_legend_childs.toolbox_left.innerHTML = ''; + this.element_legend_childs.toolbox.appendChild(this.element_legend_childs.toolbox_left); + this.element_legend_childs.toolbox_left.onclick = function(e) { + e.preventDefault(); + + var step = (that.view_before - that.view_after) * get_pan_and_zoom_step(e); + var before = that.view_before - step; + var after = that.view_after - step; + if(after >= that.netdata_first) + that.library.toolboxPanAndZoom(that, after, before); + }; + if(NETDATA.options.current.show_help === true) + $(this.element_legend_childs.toolbox_left).popover({ + container: "body", + animation: false, + html: true, + trigger: 'hover', + placement: 'bottom', + delay: { show: NETDATA.options.current.show_help_delay_show_ms, hide: NETDATA.options.current.show_help_delay_hide_ms }, + title: 'Pan Left', + content: 'Pan the chart to the left. You can also drag it with your mouse or your finger (on touch devices).
Help, can be disabled from the settings.' + }); + + + this.element_legend_childs.toolbox_reset.className += ' netdata-legend-toolbox-button'; + this.element_legend_childs.toolbox_reset.innerHTML = ''; + this.element_legend_childs.toolbox.appendChild(this.element_legend_childs.toolbox_reset); + this.element_legend_childs.toolbox_reset.onclick = function(e) { + e.preventDefault(); + NETDATA.resetAllCharts(that); + }; + if(NETDATA.options.current.show_help === true) + $(this.element_legend_childs.toolbox_reset).popover({ + container: "body", + animation: false, + html: true, + trigger: 'hover', + placement: 'bottom', + delay: { show: NETDATA.options.current.show_help_delay_show_ms, hide: NETDATA.options.current.show_help_delay_hide_ms }, + title: 'Chart Reset', + content: 'Reset all the charts to their default auto-refreshing state. You can also double click the chart contents with your mouse or your finger (on touch devices).
Help, can be disabled from the settings.' + }); + + this.element_legend_childs.toolbox_right.className += ' netdata-legend-toolbox-button'; + this.element_legend_childs.toolbox_right.innerHTML = ''; + this.element_legend_childs.toolbox.appendChild(this.element_legend_childs.toolbox_right); + this.element_legend_childs.toolbox_right.onclick = function(e) { + e.preventDefault(); + var step = (that.view_before - that.view_after) * get_pan_and_zoom_step(e); + var before = that.view_before + step; + var after = that.view_after + step; + if(before <= that.netdata_last) + that.library.toolboxPanAndZoom(that, after, before); + }; + if(NETDATA.options.current.show_help === true) + $(this.element_legend_childs.toolbox_right).popover({ + container: "body", + animation: false, + html: true, + trigger: 'hover', + placement: 'bottom', + delay: { show: NETDATA.options.current.show_help_delay_show_ms, hide: NETDATA.options.current.show_help_delay_hide_ms }, + title: 'Pan Right', + content: 'Pan the chart to the right. You can also drag it with your mouse or your finger (on touch devices).
Help, can be disabled from the settings.' + }); + + + this.element_legend_childs.toolbox_zoomin.className += ' netdata-legend-toolbox-button'; + this.element_legend_childs.toolbox_zoomin.innerHTML = ''; + this.element_legend_childs.toolbox.appendChild(this.element_legend_childs.toolbox_zoomin); + this.element_legend_childs.toolbox_zoomin.onclick = function(e) { + e.preventDefault(); + var dt = ((that.view_before - that.view_after) * (get_pan_and_zoom_step(e) * 0.8) / 2); + var before = that.view_before - dt; + var after = that.view_after + dt; + that.library.toolboxPanAndZoom(that, after, before); + }; + if(NETDATA.options.current.show_help === true) + $(this.element_legend_childs.toolbox_zoomin).popover({ + container: "body", + animation: false, + html: true, + trigger: 'hover', + placement: 'bottom', + delay: { show: NETDATA.options.current.show_help_delay_show_ms, hide: NETDATA.options.current.show_help_delay_hide_ms }, + title: 'Chart Zoom In', + content: 'Zoom in the chart. You can also press SHIFT and select an area of the chart to zoom in. On Chrome and Opera, you can press the SHIFT or the ALT keys and then use the mouse wheel to zoom in or out.
Help, can be disabled from the settings.' + }); + + this.element_legend_childs.toolbox_zoomout.className += ' netdata-legend-toolbox-button'; + this.element_legend_childs.toolbox_zoomout.innerHTML = ''; + this.element_legend_childs.toolbox.appendChild(this.element_legend_childs.toolbox_zoomout); + this.element_legend_childs.toolbox_zoomout.onclick = function(e) { + e.preventDefault(); + var dt = (((that.view_before - that.view_after) / (1.0 - (get_pan_and_zoom_step(e) * 0.8)) - (that.view_before - that.view_after)) / 2); + var before = that.view_before + dt; + var after = that.view_after - dt; + + that.library.toolboxPanAndZoom(that, after, before); + }; + if(NETDATA.options.current.show_help === true) + $(this.element_legend_childs.toolbox_zoomout).popover({ + container: "body", + animation: false, + html: true, + trigger: 'hover', + placement: 'bottom', + delay: { show: NETDATA.options.current.show_help_delay_show_ms, hide: NETDATA.options.current.show_help_delay_hide_ms }, + title: 'Chart Zoom Out', + content: 'Zoom out the chart. On Chrome and Opera, you can also press the SHIFT or the ALT keys and then use the mouse wheel to zoom in or out.
Help, can be disabled from the settings.' + }); + + //this.element_legend_childs.toolbox_volume.className += ' netdata-legend-toolbox-button'; + //this.element_legend_childs.toolbox_volume.innerHTML = ''; + //this.element_legend_childs.toolbox_volume.title = 'Visible Volume'; + //this.element_legend_childs.toolbox.appendChild(this.element_legend_childs.toolbox_volume); + //this.element_legend_childs.toolbox_volume.onclick = function(e) { + //e.preventDefault(); + //alert('clicked toolbox_volume on ' + that.id); + //} + } + else { + this.element_legend_childs.toolbox = null; + this.element_legend_childs.toolbox_left = null; + this.element_legend_childs.toolbox_reset = null; + this.element_legend_childs.toolbox_right = null; + this.element_legend_childs.toolbox_zoomin = null; + this.element_legend_childs.toolbox_zoomout = null; + this.element_legend_childs.toolbox_volume = null; + } + this.element_legend_childs.resize_handler.className += " netdata-legend-resize-handler"; this.element_legend_childs.resize_handler.innerHTML = ''; this.element.appendChild(this.element_legend_childs.resize_handler); + if(NETDATA.options.current.show_help === true) + $(this.element_legend_childs.resize_handler).popover({ + container: "body", + animation: false, + html: true, + trigger: 'hover', + placement: 'bottom', + delay: { show: NETDATA.options.current.show_help_delay_show_ms, hide: NETDATA.options.current.show_help_delay_hide_ms }, + title: 'Chart Resize', + content: 'Drag this point with your mouse or your finger (on touch devices), to resize the chart vertically. You can also double click it or double tap it to reset between 2 states: the default and the one that fits all the values.
Help, can be disabled from the settings.' + }); // mousedown event this.element_legend_childs.resize_handler.onmousedown = @@ -2172,11 +2374,30 @@ content.className = 'netdata-legend-series-content'; this.element_legend_childs.nano.appendChild(content); + + if(NETDATA.options.current.show_help === true) + $(content).popover({ + container: "body", + animation: false, + html: true, + trigger: 'hover', + placement: 'bottom', + title: 'Chart Legend', + delay: { show: NETDATA.options.current.show_help_delay_show_ms, hide: NETDATA.options.current.show_help_delay_hide_ms }, + content: 'You can click or tap on the values or the labels to select dimentions. By pressing SHIFT or CONTROL, you can enable or disable multiple dimensions.
Help, can be disabled from the settings.' + }); } else { this.element_legend_childs = { content: content, resize_handler: null, + toolbox: null, + toolbox_left: null, + toolbox_right: null, + toolbox_reset: null, + toolbox_zoomin: null, + toolbox_zoomout: null, + toolbox_volume: null, title_date: null, title_time: null, title_units: null, @@ -2220,7 +2441,7 @@ $(this.element_legend_childs.nano).nanoScroller(this.element_legend_childs.nano_options); this.legendShowLatestValues(); - } + }; this.hasLegend = function() { if(typeof this.___hasLegendCache___ !== 'undefined') @@ -2234,23 +2455,23 @@ this.___hasLegendCache___ = leg; return leg; - } + }; this.legendWidth = function() { return (this.hasLegend())?140:0; - } + }; this.legendHeight = function() { return $(this.element).height(); - } + }; this.chartWidth = function() { return $(this.element).width() - this.legendWidth(); - } + }; this.chartHeight = function() { return $(this.element).height(); - } + }; this.chartPixelsPerPoint = function() { // force an options provided detail @@ -2263,7 +2484,7 @@ px = NETDATA.options.current.pixels_per_point; return px; - } + }; this.needsRecreation = function() { return ( @@ -2272,7 +2493,7 @@ && this.library.autoresize() === false && this.tm.last_resized < NETDATA.options.last_resized ); - } + }; this.chartURL = function() { var after, before, points_multiplier = 1; @@ -2348,12 +2569,12 @@ if(NETDATA.options.debug.chart_data_url === true || this.debug === true) this.log('chartURL(): ' + this.data_url + ' WxH:' + this.chartWidth() + 'x' + this.chartHeight() + ' points: ' + this.data_points + ' library: ' + this.library_name); - } + }; this.redrawChart = function() { if(this.data !== null) this.updateChartWithData(this.data); - } + }; this.updateChartWithData = function(data) { if(this.debug === true) @@ -2385,7 +2606,7 @@ // console.log('adusting view_after from ' + this.view_after + ' to ' + this.data_after); this.view_after = this.data_after; } - + if(this.view_before > this.data_before) { // console.log('adusting view_before from ' + this.view_before + ' to ' + this.data_before); this.view_before = this.data_before; @@ -2466,7 +2687,7 @@ if(this.refresh_dt_element !== null) this.refresh_dt_element.innerHTML = this.refresh_dt_ms.toString(); - } + }; this.updateChart = function(callback) { if(this.debug === true) @@ -2536,12 +2757,12 @@ error('data download failed for url: ' + that.data_url); }) .always(function() { - this._updating = false; + that._updating = false; if(typeof callback === 'function') callback(); }); return true; - } + }; this.isVisible = function(nocache) { if(typeof nocache === 'undefined') @@ -2590,14 +2811,14 @@ this.___isVisible___ = true; return this.___isVisible___; } - } + }; this.isAutoRefreshed = function() { return (this.current.autorefresh); - } + }; this.canBeAutoRefreshed = function() { - now = new Date().getTime(); + var now = new Date().getTime(); if(this.enabled === false) { if(this.debug === true) @@ -2686,7 +2907,7 @@ } return false; - } + }; this.autoRefresh = function(callback) { if(this.canBeAutoRefreshed() === true) { @@ -2696,7 +2917,7 @@ if(typeof callback !== 'undefined') callback(); } - } + }; this._defaultsFromDownloadedChart = function(chart) { this.chart = chart; @@ -2710,7 +2931,7 @@ if(this.units === null) this.units = chart.units; - } + }; // fetch the chart description from the netdata server this.getChart = function(callback) { @@ -2744,13 +2965,13 @@ if(typeof callback === 'function') callback(); }); } - } + }; // ============================================================================================================ // INITIALIZATION init(); - } + }; NETDATA.resetAllCharts = function(state) { // first clear the global selection sync @@ -2771,10 +2992,10 @@ // if we were not the master, reset our status too // this is required because most probably the mouse - // is over this chart, blocking it from autorefreshing + // is over this chart, blocking it from auto-refreshing if(master === false && (state.paused === true || state.selected === true)) state.resetChart(); - } + }; // get or create a chart state, given a DOM element NETDATA.chartState = function(element) { @@ -2784,7 +3005,7 @@ $(element).data('netdata-state-object', state); } return state; - } + }; // ---------------------------------------------------------------------------------------------------------------- // Library functions @@ -2811,7 +3032,7 @@ } else if(typeof callback === "function") callback(); - } + }; NETDATA._loadCSS = function(filename) { // don't use jQuery here @@ -2825,7 +3046,7 @@ if (typeof fileref !== 'undefined') document.getElementsByTagName("head")[0].appendChild(fileref); - } + }; NETDATA.colorHex2Rgb = function(hex) { // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF") @@ -2840,7 +3061,7 @@ g: parseInt(result[2], 16), b: parseInt(result[3], 16) } : null; - } + }; NETDATA.colorLuminance = function(hex, lum) { // validate hex string @@ -2859,7 +3080,7 @@ } return rgb; - } + }; NETDATA.guid = function() { function s4() { @@ -2869,35 +3090,35 @@ } return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4(); - } + }; NETDATA.zeropad = function(x) { if(x > -10 && x < 10) return '0' + x.toString(); else return x.toString(); - } + }; // user function to signal us the DOM has been // updated. NETDATA.updatedDom = function() { NETDATA.options.updated_dom = true; - } + }; NETDATA.ready = function(callback) { NETDATA.options.pauseCallback = callback; - } + }; NETDATA.pause = function(callback) { if(NETDATA.options.pause === true) callback(); else NETDATA.options.pauseCallback = callback; - } + }; NETDATA.unpause = function() { NETDATA.options.pauseCallback = null; NETDATA.options.updated_dom = true; NETDATA.options.pause = false; - } + }; // ---------------------------------------------------------------------------------------------------------------- @@ -2945,7 +3166,7 @@ }, NETDATA.options.current.idle_between_charts); } } - } + }; // this is part of the parallel refresher // its cause is to refresh sequencially all the charts @@ -2953,7 +3174,7 @@ // it will call the parallel refresher back // as soon as it sees a chart that its chart library // is initialized - NETDATA.chartRefresher_unitialized = function() { + NETDATA.chartRefresher_uninitialized = function() { if(NETDATA.options.updated_dom === true) { // the dom has been updated // get the dom parts again @@ -2968,20 +3189,20 @@ if(state.library.initialized === true) NETDATA.chartRefresher(); else - state.autoRefresh(NETDATA.chartRefresher_unitialized); + state.autoRefresh(NETDATA.chartRefresher_uninitialized); } - } + }; NETDATA.chartRefresherWaitTime = function() { return NETDATA.options.current.idle_parallel_loops; - } + }; // the default refresher // it will create 2 sets of charts: // - the ones that can be refreshed in parallel // - the ones that depend on something else // the first set will be executed in parallel - // the second will be given to NETDATA.chartRefresher_unitialized() + // the second will be given to NETDATA.chartRefresher_uninitialized() NETDATA.chartRefresher = function() { if(NETDATA.options.pause === true) { // console.log('auto-refresher is paused'); @@ -3050,7 +3271,7 @@ setTimeout(NETDATA.chartRefresher, NETDATA.chartRefresherWaitTime()); } - } + }; NETDATA.parseDom = function(callback) { NETDATA.options.last_page_scroll = new Date().getTime(); @@ -3070,7 +3291,7 @@ } if(typeof callback === 'function') callback(); - } + }; // this is the main function - where everything starts NETDATA.start = function() { @@ -3108,9 +3329,9 @@ // bootstrap modal switching $('.modal').on('hidden.bs.modal', NETDATA.onscroll); $('.modal').on('shown.bs.modal', NETDATA.onscroll); - + NETDATA.parseDom(NETDATA.chartRefresher); - } + }; // ---------------------------------------------------------------------------------------------------------------- // peity @@ -3154,7 +3375,7 @@ $(state.peity_instance).peity('line', state.peity_options); return true; - } + }; NETDATA.peityChartCreate = function(state, data) { state.peity_instance = document.createElement('div'); @@ -3171,7 +3392,7 @@ NETDATA.peityChartUpdate(state, data); return true; - } + }; // ---------------------------------------------------------------------------------------------------------------- // sparkline @@ -3197,7 +3418,7 @@ } else { NETDATA.chartLibraries.sparkline.enabled = false; - if(typeof callback === "function") + if(typeof callback === "function") callback(); } }; @@ -3208,7 +3429,7 @@ $(state.element_chart).sparkline(data.result, state.sparkline_options); return true; - } + }; NETDATA.sparklineChartCreate = function(state, data) { var self = $(state.element); @@ -3236,7 +3457,6 @@ var drawNormalOnTop = self.data('sparkline-drawnormalontop') || undefined; var xvalues = self.data('sparkline-xvalues') || undefined; var chartRangeClip = self.data('sparkline-chartrangeclip') || undefined; - var xvalues = self.data('sparkline-xvalues') || undefined; var chartRangeMinX = self.data('sparkline-chartrangeminx') || undefined; var chartRangeMaxX = self.data('sparkline-chartrangemaxx') || undefined; var disableInteraction = self.data('sparkline-disableinteraction') || false; @@ -3321,6 +3541,22 @@ smooth: false }; + NETDATA.dygraphToolboxPanAndZoom = function(state, after, before) { + if(after < state.netdata_first) + after = state.netdata_first; + + if(before > state.netdata_last) + before = state.netdata_last; + + state.setMode('zoom'); + state.globalSelectionSyncStop(); + state.globalSelectionSyncDelay(); + state.dygraph_user_action = true; + state.dygraph_force_zoom = true; + state.updateChartPanOrZoom(after, before); + NETDATA.globalPanAndZoom.setMaster(state, after, before); + }; + NETDATA.dygraphSetSelection = function(state, t) { if(typeof state.dygraph_instance !== 'undefined') { var r = state.calculateRowForTime(t); @@ -3359,7 +3595,7 @@ if(typeof callback === "function") callback(); }); - } + }; NETDATA.dygraphInitialize = function(callback) { if(typeof netdataNoDygraphs === 'undefined' || !netdataNoDygraphs) { @@ -3732,7 +3968,7 @@ state.log('interactionModel.mousewheel()'); // Take the offset of a mouse event on the dygraph canvas and - // convert it to a pair of percentages from the bottom left. + // convert it to a pair of percentages from the bottom left. // (Not top left, bottom is where the lower value is.) function offsetToPercentage(g, offsetX, offsetY) { // This is calculating the pixel offset of the leftmost date. @@ -4003,7 +4239,7 @@ } else // stacked state.morris_instance = new Morris.Area(state.morris_options); - + return true; }; @@ -4340,7 +4576,7 @@ NETDATA.percentFromValueMax = function(value, max) { if(value === null) value = 0; if(max < value) max = value; - + var pcent = 0; if(max !== 0) { pcent = Math.round(value * 100 / max); @@ -4348,7 +4584,7 @@ } return pcent; - } + }; // ---------------------------------------------------------------------------------------------------------------- // easy-pie-chart @@ -4411,7 +4647,7 @@ state.easyPieChartEvent = { timer: null, value: 0, - pcent: 0, + pcent: 0 }; } @@ -4461,7 +4697,7 @@ var value = data.result[0]; var max = self.data('easypiechart-max-value') || null; var adjust = self.data('easypiechart-adjust') || null; - + if(max === null) { max = data.max; state.easyPieChartMax = null; @@ -4528,7 +4764,7 @@ animate: self.data('easypiechart-rotate') || {duration: 500, enabled: true}, easing: self.data('easypiechart-easing') || undefined }); - + // when we just re-create the chart // do not animate the first update var animate = true; @@ -4578,10 +4814,10 @@ speed = 1000000000; else if(typeof status === 'number') speed = status; - + state.gauge_instance.animationSpeed = speed; state.___gaugeOld__.speed = speed; - } + }; NETDATA.gaugeSet = function(state, value, min, max) { if(typeof value !== 'number') value = 0; @@ -4715,7 +4951,7 @@ NETDATA.gaugeChartCreate = function(state, data) { var self = $(state.element); - var chart = $(state.element_chart); + // var chart = $(state.element_chart); var value = data.result[0]; var max = self.data('gauge-max-value') || null; @@ -4834,7 +5070,7 @@ minLabel: null, maxLabel: null }; - + // we will always feed a percentage state.gauge_instance.minValue = 0; state.gauge_instance.maxValue = 100; @@ -4860,6 +5096,7 @@ }, setSelection: NETDATA.dygraphSetSelection, clearSelection: NETDATA.dygraphClearSelection, + toolboxPanAndZoom: NETDATA.dygraphToolboxPanAndZoom, initialized: false, enabled: true, format: function(state) { return 'json'; }, @@ -4898,6 +5135,7 @@ resize: null, setSelection: undefined, // function(state, t) { return true; }, clearSelection: undefined, // function(state) { return true; }, + toolboxPanAndZoom: null, initialized: false, enabled: true, format: function(state) { return 'array'; }, @@ -4915,6 +5153,7 @@ resize: null, setSelection: undefined, // function(state, t) { return true; }, clearSelection: undefined, // function(state) { return true; }, + toolboxPanAndZoom: null, initialized: false, enabled: true, format: function(state) { return 'ssvcomma'; }, @@ -4932,6 +5171,7 @@ resize: null, setSelection: undefined, // function(state, t) { return true; }, clearSelection: undefined, // function(state) { return true; }, + toolboxPanAndZoom: null, initialized: false, enabled: true, format: function(state) { return 'json'; }, @@ -4949,6 +5189,7 @@ resize: null, setSelection: undefined, //function(state, t) { return true; }, clearSelection: undefined, //function(state) { return true; }, + toolboxPanAndZoom: null, initialized: false, enabled: true, format: function(state) { return 'datatable'; }, @@ -4966,6 +5207,7 @@ resize: null, setSelection: undefined, // function(state, t) { return true; }, clearSelection: undefined, // function(state) { return true; }, + toolboxPanAndZoom: null, initialized: false, enabled: true, format: function(state) { return 'json'; }, @@ -4983,6 +5225,7 @@ resize: null, setSelection: undefined, // function(state, t) { return true; }, clearSelection: undefined, // function(state) { return true; }, + toolboxPanAndZoom: null, initialized: false, enabled: true, format: function(state) { return 'csvjsonarray'; }, @@ -5000,6 +5243,7 @@ resize: null, setSelection: undefined, // function(state, t) { return true; }, clearSelection: undefined, // function(state) { return true; }, + toolboxPanAndZoom: null, initialized: false, enabled: true, format: function(state) { return 'json'; }, @@ -5017,6 +5261,7 @@ resize: null, setSelection: NETDATA.easypiechartSetSelection, clearSelection: NETDATA.easypiechartClearSelection, + toolboxPanAndZoom: null, initialized: false, enabled: true, format: function(state) { return 'array'; }, @@ -5035,6 +5280,7 @@ resize: null, setSelection: NETDATA.gaugeSetSelection, clearSelection: NETDATA.gaugeClearSelection, + toolboxPanAndZoom: null, initialized: false, enabled: true, format: function(state) { return 'array'; }, @@ -5055,7 +5301,7 @@ NETDATA.chartLibraries[library].url = url; NETDATA.chartLibraries[library].initialized = true; NETDATA.chartLibraries[library].enabled = true; - } + }; // ---------------------------------------------------------------------------------------------------------------- // Start up @@ -5137,7 +5383,7 @@ .fail(function() { alert('Cannot load required JS library: ' + NETDATA.requiredJs[index].url); }) - } + }; NETDATA.loadRequiredCSS = function(index) { if(index >= NETDATA.requiredCSS.length) @@ -5153,7 +5399,7 @@ NETDATA._loadCSS(NETDATA.requiredCSS[index].url); NETDATA.loadRequiredCSS(++index); - } + }; NETDATA.errorReset(); NETDATA.loadRequiredCSS(0); diff --git a/web/dashboard.slate.css b/web/dashboard.slate.css old mode 100755 new mode 100644 index 0a6e955ed..662731061 --- a/web/dashboard.slate.css +++ b/web/dashboard.slate.css @@ -74,6 +74,43 @@ body { margin: 0px; } +.netdata-legend-toolbox { + display: block; + position: absolute; + bottom: 0px; + right: 30px; + height: 15px; + width: 110px; + background-color: #272b30; + font-size: 12px; + vertical-align: middle; + line-height: 15px; + color: #373b40; + text-align: center; + overflow: hidden; + z-index: 20; + padding: 0px; + margin: 0px; +} + +.netdata-legend-toolbox-button { + display: inline-block; + position: relative; + height: 15px; + width: 18px; + background-color: #272b30; + font-size: 12px; + vertical-align: middle; + line-height: 15px; + color: #474b50; + text-align: center; + overflow: hidden; + z-index: 21; + padding: 0px; + margin: 0px; + cursor: pointer; +} + .netdata-message { display: inline-block; text-align: left; @@ -110,6 +147,7 @@ body { height: calc(100% - 15px); /* 10px for the resize handler and 5px for the top margin */ font-size: 10px; margin-top: 5px; + text-align: left; /* width and height is calculated (depends on the appearance of the legend) */ } @@ -464,3 +502,11 @@ body { color: #676b70; font-weight: normal; } + +.popover-title { + font-weight: bold; + font-size: 12px; +} +.popover-content { + font-size: 11px; +} diff --git a/web/demo.html b/web/demo.html old mode 100755 new mode 100644 diff --git a/web/demo2.html b/web/demo2.html old mode 100755 new mode 100644 diff --git a/web/favicon.ico b/web/favicon.ico old mode 100755 new mode 100644 index bba4043e5..821f7c402 Binary files a/web/favicon.ico and b/web/favicon.ico differ diff --git a/web/fonts/FontAwesome.otf b/web/fonts/FontAwesome.otf old mode 100755 new mode 100644 diff --git a/web/fonts/fontawesome-webfont.eot b/web/fonts/fontawesome-webfont.eot old mode 100755 new mode 100644 diff --git a/web/fonts/fontawesome-webfont.svg b/web/fonts/fontawesome-webfont.svg old mode 100755 new mode 100644 diff --git a/web/fonts/fontawesome-webfont.ttf b/web/fonts/fontawesome-webfont.ttf old mode 100755 new mode 100644 diff --git a/web/fonts/fontawesome-webfont.woff b/web/fonts/fontawesome-webfont.woff old mode 100755 new mode 100644 diff --git a/web/fonts/fontawesome-webfont.woff2 b/web/fonts/fontawesome-webfont.woff2 old mode 100755 new mode 100644 diff --git a/web/fonts/glyphicons-halflings-regular.eot b/web/fonts/glyphicons-halflings-regular.eot old mode 100755 new mode 100644 diff --git a/web/fonts/glyphicons-halflings-regular.svg b/web/fonts/glyphicons-halflings-regular.svg old mode 100755 new mode 100644 diff --git a/web/fonts/glyphicons-halflings-regular.ttf b/web/fonts/glyphicons-halflings-regular.ttf old mode 100755 new mode 100644 diff --git a/web/fonts/glyphicons-halflings-regular.woff b/web/fonts/glyphicons-halflings-regular.woff old mode 100755 new mode 100644 diff --git a/web/fonts/glyphicons-halflings-regular.woff2 b/web/fonts/glyphicons-halflings-regular.woff2 old mode 100755 new mode 100644 diff --git a/web/images/README.md b/web/images/README.md deleted file mode 100644 index 0c250fe59..000000000 --- a/web/images/README.md +++ /dev/null @@ -1 +0,0 @@ -Icons provided by [IconsDB.com](http://www.iconsdb.com/red-icons/seo-performance-icon.html) diff --git a/web/images/seo-performance-114.png b/web/images/seo-performance-114.png old mode 100755 new mode 100644 diff --git a/web/images/seo-performance-128.png b/web/images/seo-performance-128.png old mode 100755 new mode 100644 diff --git a/web/images/seo-performance-16.png b/web/images/seo-performance-16.png old mode 100755 new mode 100644 diff --git a/web/images/seo-performance-24.png b/web/images/seo-performance-24.png old mode 100755 new mode 100644 diff --git a/web/images/seo-performance-256.png b/web/images/seo-performance-256.png old mode 100755 new mode 100644 diff --git a/web/images/seo-performance-32.png b/web/images/seo-performance-32.png old mode 100755 new mode 100644 diff --git a/web/images/seo-performance-48.png b/web/images/seo-performance-48.png old mode 100755 new mode 100644 diff --git a/web/images/seo-performance-512.png b/web/images/seo-performance-512.png old mode 100755 new mode 100644 diff --git a/web/images/seo-performance-64.png b/web/images/seo-performance-64.png old mode 100755 new mode 100644 diff --git a/web/images/seo-performance-72.png b/web/images/seo-performance-72.png old mode 100755 new mode 100644 diff --git a/web/images/seo-performance-multi-size.icns b/web/images/seo-performance-multi-size.icns old mode 100755 new mode 100644 diff --git a/web/images/seo-performance-multi-size.ico b/web/images/seo-performance-multi-size.ico old mode 100755 new mode 100644 index bba4043e5..821f7c402 Binary files a/web/images/seo-performance-multi-size.ico and b/web/images/seo-performance-multi-size.ico differ diff --git a/web/index.html b/web/index.html old mode 100755 new mode 100644 index 8c86e16c6..6f6013da1 --- a/web/index.html +++ b/web/index.html @@ -12,7 +12,7 @@ - + @@ -28,7 +28,7 @@