0
0
Fork 0
mirror of https://github.com/netdata/netdata.git synced 2025-04-24 05:13:08 +00:00

Rename doc to docs and move htmldoc ()

* rename doc dir; move htmldoc under docs/generator

* run shellcheck and shfmt on docs generator
This commit is contained in:
Paweł Krupa 2018-11-25 20:11:50 +02:00 committed by GitHub
parent e7e2e3ce7c
commit 5ed8653246
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
33 changed files with 199 additions and 197 deletions

6
.gitignore vendored
View file

@ -145,6 +145,6 @@ sitespeed-result/
python.d/python-modules-installer.sh python.d/python-modules-installer.sh
# documentation generated files # documentation generated files
htmldoc/src docs/generator/src
htmldoc/build docs/generator/build
htmldoc/mkdocs.yml docs/generator/mkdocs.yml

View file

@ -62,22 +62,22 @@ dist_noinst_DATA= \
netdata.cppcheck \ netdata.cppcheck \
netdata.spec \ netdata.spec \
package.json \ package.json \
doc/Add-more-charts-to-netdata.md \ docs/Add-more-charts-to-netdata.md \
doc/Demo-Sites.md \ docs/Demo-Sites.md \
doc/Donations-netdata-has-received.md \ docs/Donations-netdata-has-received.md \
doc/Netdata-Security-and-Disclosure-Information.md \ docs/Netdata-Security-and-Disclosure-Information.md \
doc/Performance.md \ docs/Performance.md \
doc/Running-behind-apache.md \ docs/Running-behind-apache.md \
doc/Running-behind-caddy.md \ docs/Running-behind-caddy.md \
doc/Running-behind-lighttpd.md \ docs/Running-behind-lighttpd.md \
doc/Running-behind-nginx.md \ docs/Running-behind-nginx.md \
doc/Third-Party-Plugins.md \ docs/Third-Party-Plugins.md \
doc/a-github-star-is-important.md \ docs/a-github-star-is-important.md \
doc/high-performance-netdata.md \ docs/high-performance-netdata.md \
doc/netdata-for-IoT.md \ docs/netdata-for-IoT.md \
doc/netdata-security.md \ docs/netdata-security.md \
doc/Why-Netdata.md \ docs/Why-Netdata.md \
htmldoc/themes/material/partials/footer.html \ docs/generator/themes/material/partials/footer.html \
installer/README.md \ installer/README.md \
installer/UNINSTALL.md \ installer/UNINSTALL.md \
installer/UPDATE.md \ installer/UPDATE.md \
@ -92,11 +92,11 @@ dist_noinst_SCRIPTS= \
kickstart-static64.sh \ kickstart-static64.sh \
netdata-installer.sh \ netdata-installer.sh \
installer/functions.sh \ installer/functions.sh \
htmldoc/buildhtml.sh \ docs/generator/buildhtml.sh \
htmldoc/buildyaml.sh \ docs/generator/buildyaml.sh \
htmldoc/checklinks.sh \ docs/generator/checklinks.sh \
htmldoc/requirements.txt \ docs/generator/requirements.txt \
htmldoc/runtime.txt \ docs/generator/runtime.txt \
$(NULL) $(NULL)
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------

View file

@ -36,7 +36,7 @@ debug log|`/var/log/netdata/debug.log`|The filename to save debug information. T
error log|`/var/log/netdata/error.log`|The filename to save error messages for netdata daemon and all plugins (`stderr` is sent here for all netdata programs, including the plugins). You can also set it to `syslog` to send the errors to syslog, or `none` to disable this log. error log|`/var/log/netdata/error.log`|The filename to save error messages for netdata daemon and all plugins (`stderr` is sent here for all netdata programs, including the plugins). You can also set it to `syslog` to send the errors to syslog, or `none` to disable this log.
access log|`/var/log/netdata/access.log`|The filename to save the log of web clients accessing netdata charts. You can also set it to `syslog` to send the access log to syslog, or `none` to disable this log. access log|`/var/log/netdata/access.log`|The filename to save the log of web clients accessing netdata charts. You can also set it to `syslog` to send the access log to syslog, or `none` to disable this log.
memory mode|save|When set to `save` netdata will save its round robin database on exit and load it on startup. When set to `map` the cache files will be updated in real time (check `man mmap` - do not set this on systems with heavy load or slow disks - the disks will continuously sync the in-memory database of netdata). When set to `ram` the round robin database will be temporary and it will be lost when netdata exits. memory mode|save|When set to `save` netdata will save its round robin database on exit and load it on startup. When set to `map` the cache files will be updated in real time (check `man mmap` - do not set this on systems with heavy load or slow disks - the disks will continuously sync the in-memory database of netdata). When set to `ram` the round robin database will be temporary and it will be lost when netdata exits.
update every|1|The frequency in seconds, for data collection. For more information see [Performance](../../doc/Performance.md#performance). update every|1|The frequency in seconds, for data collection. For more information see [Performance](../../docs/Performance.md#performance).
run as user|`netdata`|The user netdata will run as. run as user|`netdata`|The user netdata will run as.
web files owner|`netdata`|The user that owns the web static files. Netdata will refuse to serve a file that is not owned by this user, even if it has read access to that file. If the user given is not found, netdata will only serve files owned by user given in `run as user`. web files owner|`netdata`|The user that owns the web static files. Netdata will refuse to serve a file that is not owned by this user, even if it has read access to that file. If the user given is not found, netdata will only serve files owned by user given in `run as user`.
http port listen backlog|100|The port backlog. Check `man 2 listen`. http port listen backlog|100|The port backlog. Check `man 2 listen`.
@ -107,7 +107,7 @@ External plugins will have only 2 options at `netdata.conf`:
setting | default | info setting | default | info
:------:|:-------:|:---- :------:|:-------:|:----
update every|the value of `[global].update every` setting|The frequency in seconds the plugin should collect values. For more information check [Performance](../../doc/Performance.md#performance). update every|the value of `[global].update every` setting|The frequency in seconds the plugin should collect values. For more information check [Performance](../../docs/Performance.md#performance).
command options|*empty*|Additional command line options to pass to the plugin. command options|*empty*|Additional command line options to pass to the plugin.
External plugins that need additional configuration may support a dedicated file in `/etc/netdata`. Check their documentation. External plugins that need additional configuration may support a dedicated file in `/etc/netdata`. Check their documentation.

View file

@ -88,7 +88,7 @@ COPY --from=builder /app /
RUN \ RUN \
# Apply permissions as described in # Apply permissions as described in
# https://github.com/netdata/netdata/tree/master/doc/netdata-security.md#netdata-directories # https://github.com/netdata/netdata/tree/master/docs/netdata-security.md#netdata-directories
chown -R root:netdata /etc/netdata && \ chown -R root:netdata /etc/netdata && \
chown -R netdata:netdata /var/cache/netdata /var/lib/netdata /usr/share/netdata && \ chown -R netdata:netdata /var/cache/netdata /var/lib/netdata /usr/share/netdata && \
chown -R root:netdata /usr/lib/netdata && \ chown -R root:netdata /usr/lib/netdata && \

60
docs/generator/buildhtml.sh Executable file
View file

@ -0,0 +1,60 @@
#!/bin/bash
# buildhtml.sh
# Builds the html static site, using mkdocs
# Assumes that the script is executed either from the htmldoc folder (by netlify), or from the root repo dir (as originally intended)
currentdir=$(pwd | awk -F '/' '{print $NF}')
echo "$currentdir"
if [ "$currentdir" = "generator" ]; then
cd ../..
fi
GENERATOR_DIR="docs/generator"
# Copy all netdata .md files to docs/generator/src. Exclude htmldoc itself and also the directory node_modules generatord by Netlify
echo "Copying files"
rm -rf ${GENERATOR_DIR}/src
find . -type d \( -path ./${GENERATOR_DIR} -o -path ./node_modules \) -prune -o -name "*.md" -print | cpio -pd ${GENERATOR_DIR}/src
# Modify the first line of the main README.md, to enable proper static html generation
sed -i '0,/# netdata /s//# Introduction\n\n/' ${GENERATOR_DIR}/src/README.md
# Remove specific files that don't belong in the documentation
declare -a EXCLUDE_LIST=(
"HISTORICAL_CHANGELOG.md"
"collectors/charts.d.plugin/mem_apps/README.md"
"collectors/charts.d.plugin/postfix/README.md"
"collectors/charts.d.plugin/tomcat/README.md"
"collectors/charts.d.plugin/sensors/README.md"
"collectors/charts.d.plugin/cpu_apps/README.md"
"collectors/charts.d.plugin/squid/README.md"
"collectors/charts.d.plugin/nginx/README.md"
"collectors/charts.d.plugin/hddtemp/README.md"
"collectors/charts.d.plugin/cpufreq/README.md"
"collectors/charts.d.plugin/mysql/README.md"
"collectors/charts.d.plugin/exim/README.md"
"collectors/charts.d.plugin/apache/README.md"
"collectors/charts.d.plugin/load_average/README.md"
"collectors/charts.d.plugin/phpfpm/README.md"
)
for f in "${EXCLUDE_LIST[@]}"; do
rm "${GENERATOR_DIR}/src/$f"
done
echo "Creating mkdocs.yaml"
# Generate mkdocs.yaml
${GENERATOR_DIR}/buildyaml.sh >${GENERATOR_DIR}/mkdocs.yml
echo "Fixing links"
# Fix links (recursively, all types, executing replacements)
${GENERATOR_DIR}/checklinks.sh -rax
if [ $? -eq 1 ]; then exit 1; fi
echo "Calling mkdocs"
# Build html docs
mkdocs build --config-file=${GENERATOR_DIR}/mkdocs.yml
echo "Finished"

View file

@ -1,6 +1,7 @@
#!/bin/bash #!/bin/bash
cd htmldoc/src GENERATOR_DIR="docs/generator"
cd ${GENERATOR_DIR}/src
# create yaml nav subtree with all the files directly under a specific directory # create yaml nav subtree with all the files directly under a specific directory
# arguments: # arguments:
@ -11,36 +12,35 @@ cd htmldoc/src
# maxdepth - how many levels of subdirectories do I include in the yaml in this section. 1 means just the top level and is the default if left empty # maxdepth - how many levels of subdirectories do I include in the yaml in this section. 1 means just the top level and is the default if left empty
# excludefirstlevel - Optional param. If passed, mindepth is set to 2, to exclude the READMEs in the first directory level # excludefirstlevel - Optional param. If passed, mindepth is set to 2, to exclude the READMEs in the first directory level
navpart () { navpart() {
tabs=$1 tabs=$1
dir=$2 dir=$2
file=$3 file=$3
section=$4 section=$4
maxdepth=$5 maxdepth=$5
excludefirstlevel=$6 excludefirstlevel=$6
spc="" spc=""
i=1
while [ ${i} -lt ${tabs} ] ; do
spc=" $spc"
i=$[$i + 1]
done
if [ -z "$file" ] ; then file='*' ; fi
if [[ ! -z "$section" ]] ; then echo "$spc- ${section}:" ; fi
if [ -z "$maxdepth" ] ; then maxdepth=1; fi
if [[ ! -z "$excludefirstlevel" ]] ; then mindepth=2 ; else mindepth=1; fi
for f in $(find $dir -mindepth $mindepth -maxdepth $maxdepth -name "${file}.md" -printf '%h\0%d\0%p\n' | sort -t '\0' -n | awk -F '\0' '{print $3}'); do
# If I'm adding a section, I need the child links to be one level deeper than the requested level in "tabs"
if [ -z "$section" ] ; then
echo "$spc- '$f'"
else
echo "$spc - '$f'"
fi
done
}
i=1
while [ ${i} -lt ${tabs} ]; do
spc=" $spc"
i=$((i + 1))
done
if [ -z "$file" ]; then file='*'; fi
if [[ -n $section ]]; then echo "$spc- ${section}:"; fi
if [ -z "$maxdepth" ]; then maxdepth=1; fi
if [[ -n $excludefirstlevel ]]; then mindepth=2; else mindepth=1; fi
for f in $(find $dir -mindepth $mindepth -maxdepth $maxdepth -name "${file}.md" -printf '%h\0%d\0%p\n' | sort -t '\0' -n | awk -F '\0' '{print $3}'); do
# If I'm adding a section, I need the child links to be one level deeper than the requested level in "tabs"
if [ -z "$section" ]; then
echo "$spc- '$f'"
else
echo "$spc - '$f'"
fi
done
}
echo -e 'site_name: NetData Documentation echo -e 'site_name: NetData Documentation
repo_url: https://github.com/netdata/netdata repo_url: https://github.com/netdata/netdata
@ -51,6 +51,7 @@ copyright: NetData, 2018
docs_dir: src docs_dir: src
site_dir: build site_dir: build
#use_directory_urls: false #use_directory_urls: false
strict: true
theme: theme:
name: "material" name: "material"
custom_dir: themes/material custom_dir: themes/material
@ -100,11 +101,11 @@ nav:'
navpart 1 . README "About" navpart 1 . README "About"
echo -ne " - 'doc/Why-Netdata.md' echo -ne " - 'docs/Why-Netdata.md'
- 'doc/Demo-Sites.md' - 'docs/Demo-Sites.md'
- 'doc/netdata-security.md' - 'docs/netdata-security.md'
- 'doc/Donations-netdata-has-received.md' - 'docs/Donations-netdata-has-received.md'
- 'doc/a-github-star-is-important.md' - 'docs/a-github-star-is-important.md'
- REDISTRIBUTED.md - REDISTRIBUTED.md
- CHANGELOG.md - CHANGELOG.md
" "
@ -116,7 +117,7 @@ echo -ne "- Installation:
- 'installer/UNINSTALL.md' - 'installer/UNINSTALL.md'
" "
echo -ne "- 'doc/GettingStarted.md' echo -ne "- 'docs/GettingStarted.md'
" "
echo -ne "- Running netdata: echo -ne "- Running netdata:
@ -127,23 +128,22 @@ navpart 2 daemon/config
navpart 2 web/server "" "Web server" navpart 2 web/server "" "Web server"
navpart 3 web/server "" "" 2 excludefirstlevel navpart 3 web/server "" "" 2 excludefirstlevel
echo -ne " - Running behind another web server: echo -ne " - Running behind another web server:
- 'doc/Running-behind-nginx.md' - 'docs/Running-behind-nginx.md'
- 'doc/Running-behind-apache.md' - 'docs/Running-behind-apache.md'
- 'doc/Running-behind-lighttpd.md' - 'docs/Running-behind-lighttpd.md'
- 'doc/Running-behind-caddy.md' - 'docs/Running-behind-caddy.md'
" "
#navpart 2 system #navpart 2 system
navpart 2 database navpart 2 database
navpart 2 registry navpart 2 registry
echo -ne " - 'doc/Performance.md' echo -ne " - 'docs/Performance.md'
- 'doc/netdata-for-IoT.md' - 'docs/netdata-for-IoT.md'
- 'doc/high-performance-netdata.md' - 'docs/high-performance-netdata.md'
" "
navpart 1 collectors "" "Data collection" 1 navpart 1 collectors "" "Data collection" 1
echo -ne " - 'doc/Add-more-charts-to-netdata.md' echo -ne " - 'docs/Add-more-charts-to-netdata.md'
- Internal plugins: - Internal plugins:
" "
navpart 3 collectors/proc.plugin navpart 3 collectors/proc.plugin
@ -165,7 +165,7 @@ navpart 3 collectors/apps.plugin
navpart 3 collectors/fping.plugin navpart 3 collectors/fping.plugin
navpart 3 collectors/freeipmi.plugin navpart 3 collectors/freeipmi.plugin
echo -ne " - 'doc/Third-Party-Plugins.md' echo -ne " - 'docs/Third-Party-Plugins.md'
" "
navpart 1 health README "Alarms and notifications" navpart 1 health README "Alarms and notifications"
@ -189,7 +189,7 @@ navpart 2 web/api/queries "" "Queries" 2
echo -ne "- Hacking netdata: echo -ne "- Hacking netdata:
- CONTRIBUTING.md - CONTRIBUTING.md
- CODE_OF_CONDUCT.md - CODE_OF_CONDUCT.md
- 'doc/Netdata-Security-and-Disclosure-Information.md' - 'docs/Netdata-Security-and-Disclosure-Information.md'
- CONTRIBUTORS.md - CONTRIBUTORS.md
" "
navpart 2 makeself "" "" 4 navpart 2 makeself "" "" 4
@ -198,9 +198,3 @@ navpart 2 libnetdata "" "libnetdata" 4
navpart 2 contrib navpart 2 contrib
navpart 2 tests navpart 2 tests
navpart 2 diagrams/data_structures navpart 2 diagrams/data_structures

View file

@ -1,15 +1,18 @@
#!/bin/bash #!/bin/bash
# shellcheck disable=SC2181
# Doc link checker # Doc link checker
# Validates and tries to fix all links that will cause issues either in the repo, or in the html site # Validates and tries to fix all links that will cause issues either in the repo, or in the html site
GENERATOR_DIR="docs/generator"
dbg () { dbg () {
if [ $VERBOSE -eq 1 ] ; then printf "%s\n" "${1}" ; fi if [ "$VERBOSE" -eq 1 ] ; then printf "%s\\n" "${1}" ; fi
} }
printhelp () { printhelp () {
echo "Usage: htmldoc/checklinks.sh [-r OR -f <fname>] [OPTIONS] echo "Usage: docs/generator/checklinks.sh [-r OR -f <fname>] [OPTIONS]
-r Recursively check all mds in all child directories, except htmldoc and node_modules (which is generated by netlify) -r Recursively check all mds in all child directories, except docs/generator and node_modules (which is generatord by netlify)
-f Just check the passed md file -f Just check the passed md file
General Options: General Options:
-x Execute commands. By default the script runs in test mode with no files changed by the script (results and fixes are just shown). Use -x to have it apply the changes. -x Execute commands. By default the script runs in test mode with no files changed by the script (results and fixes are just shown). Use -x to have it apply the changes.
@ -19,13 +22,13 @@ printhelp () {
-a Check all link types -a Check all link types
-w Check wiki links (and just warn if you see one) -w Check wiki links (and just warn if you see one)
-b Check absolute links to the netdata repo (and change them to relative). Only checks links to https://github.com/netdata/netdata/????/master* -b Check absolute links to the netdata repo (and change them to relative). Only checks links to https://github.com/netdata/netdata/????/master*
-l Check relative links to the netdata repo (and replace them with links that the html static site can live with, under htmldoc/src only) -l Check relative links to the netdata repo (and replace them with links that the html static site can live with, under docs/generator/src only)
-e Check external links, outside the wiki or the repo (useless without adding the -u option, to verify that they're not broken) -e Check external links, outside the wiki or the repo (useless without adding the -u option, to verify that they're not broken)
" "
} }
fix () { fix () {
if [ $EXECUTE -eq 0 ] ; then if [ "$EXECUTE" -eq 0 ] ; then
echo "-- SHOULD EXECUTE: $1" echo "-- SHOULD EXECUTE: $1"
else else
dbg "-- EXECUTING: $1" dbg "-- EXECUTING: $1"
@ -37,7 +40,7 @@ ck_netdata_absolute () {
f=$1 f=$1
alnk=$2 alnk=$2
lnkinfile=$3 lnkinfile=$3
testURL $alnk testURL "$alnk"
if [[ $f =~ ^(.*)/([^/]*)$ ]] ; then if [[ $f =~ ^(.*)/([^/]*)$ ]] ; then
fpath="${BASH_REMATCH[1]}" fpath="${BASH_REMATCH[1]}"
@ -45,7 +48,7 @@ ck_netdata_absolute () {
fi fi
if [ $? -eq 0 ] ; then if [ $? -eq 0 ] ; then
rlnk=$(echo $alnk | sed 's/https:\/\/github.com\/netdata\/netdata\/....\/master\///g') rlnk=$(echo "$alnk" | sed 's/https:\/\/github.com\/netdata\/netdata\/....\/master\///g')
case $rlnk in case $rlnk in
\#* ) dbg "-- (#somelink)" ;; \#* ) dbg "-- (#somelink)" ;;
*/ ) dbg "-- # (path/)" ;; */ ) dbg "-- # (path/)" ;;
@ -80,13 +83,13 @@ ck_netdata_absolute () {
rest="${BASH_REMATCH[2]}" rest="${BASH_REMATCH[2]}"
dbg "-- Target file is at $abspath" dbg "-- Target file is at $abspath"
fi fi
relativelink=$(realpath --relative-to=$fpath $abspath) relativelink=$(realpath --relative-to="$fpath" "$abspath")
if [ $? -eq 0 ] ; then if [ $? -eq 0 ] ; then
srch=$(echo $lnkinfile | sed 's/\//\\\//g') srch=$(echo "$lnkinfile" | sed 's/\//\\\//g')
if [ $relativelink = "." ] ; then if [ "$relativelink" = "." ] ; then
rplc=$(echo $rest | sed 's/\//\\\//g') rplc=$(echo "$rest" | sed 's/\//\\\//g')
else else
rplc=$(echo $relativelink/$rest | sed 's/\//\\\//g') rplc=$(echo "$relativelink/$rest" | sed 's/\//\\\//g')
fi fi
fix "sed -i 's/($srch)/($rplc)/g' $f" fix "sed -i 's/($srch)/($rplc)/g' $f"
else else
@ -100,9 +103,9 @@ ck_netdata_absolute () {
} }
testURL () { testURL () {
if [ $TESTURLS -eq 0 ] ; then return 0 ; fi if [ "$TESTURLS" -eq 0 ] ; then return 0 ; fi
dbg "-- Testing URL $1" dbg "-- Testing URL $1"
curl -sS $1 > /dev/null curl -sS "$1" > /dev/null
if [ $? -gt 0 ] ; then if [ $? -gt 0 ] ; then
return 1 return 1
fi fi
@ -116,7 +119,7 @@ testinternal () {
ilnk=${3} ilnk=${3}
header=${ilnk//-/} header=${ilnk//-/}
dbg "-- Searching for \"$header\" in $ifile" dbg "-- Searching for \"$header\" in $ifile"
tr -d ',_.:? `'< $ifile | sed 's/-//g' | grep -i "^\#*$header\$" >/dev/null tr -d ',_.:? `'< "$ifile" | sed 's/-//g' | grep -i "^\\#*$header\$" >/dev/null
if [ $? -eq 0 ] ; then if [ $? -eq 0 ] ; then
dbg "-- $ilnk found in $ifile" dbg "-- $ilnk found in $ifile"
return 0 return 0
@ -171,34 +174,34 @@ ck_netdata_relative () {
case "$rlnk" in case "$rlnk" in
\#* ) \#* )
dbg "-- # (#somelink)" dbg "-- # (#somelink)"
testinternal $f $f $rlnk testinternal "$f" "$f" "$rlnk"
;; ;;
*/ ) */ )
dbg "-- # (path/)" dbg "-- # (path/)"
TRGT="$fpath/${rlnk}README.md" TRGT="$fpath/${rlnk}README.md"
testf $f $TRGT testf "$f" "$TRGT"
if [ $? -eq 0 ] ; then if [ $? -eq 0 ] ; then
if [ $fname != "README.md" ] ; then s="../$rlnk"; fi if [ "$fname" != "README.md" ] ; then s="../$rlnk"; fi
fi fi
;; ;;
*/#* ) */\#* )
dbg "-- # (path/#somelink)" dbg "-- # (path/#somelink)"
if [[ $rlnk =~ ^(.*)/#(.*)$ ]] ; then if [[ $rlnk =~ ^(.*)/#(.*)$ ]] ; then
TRGT="$fpath/${BASH_REMATCH[1]}/README.md" TRGT="$fpath/${BASH_REMATCH[1]}/README.md"
LNK="#${BASH_REMATCH[2]}" LNK="#${BASH_REMATCH[2]}"
dbg "-- Look for $LNK in $TRGT" dbg "-- Look for $LNK in $TRGT"
testf $f $TRGT testf "$f" "$TRGT"
if [ $? -eq 0 ] ; then if [ $? -eq 0 ] ; then
testinternal $f $TRGT $LNK testinternal "$f" "$TRGT" "$LNK"
if [ $? -eq 0 ] ; then if [ $? -eq 0 ] ; then
if [ $fname != "README.md" ] ; then s="../$rlnk"; fi if [ "$fname" != "README.md" ] ; then s="../$rlnk"; fi
fi fi
fi fi
fi fi
;; ;;
*.md ) *.md )
dbg "-- # (path/filename.md) -> htmldoc (path/filename/)" dbg "-- # (path/filename.md) -> htmldoc (path/filename/)"
testf $f "$fpath/$rlnk" testf "$f" "$fpath/$rlnk"
if [ $? -eq 0 ] ; then if [ $? -eq 0 ] ; then
if [[ $rlnk =~ ^(.*)/(.*).md$ ]] ; then if [[ $rlnk =~ ^(.*)/(.*).md$ ]] ; then
if [ "${BASH_REMATCH[2]}" = "README" ] ; then if [ "${BASH_REMATCH[2]}" = "README" ] ; then
@ -206,18 +209,18 @@ ck_netdata_relative () {
else else
s="../${BASH_REMATCH[1]}/${BASH_REMATCH[2]}/" s="../${BASH_REMATCH[1]}/${BASH_REMATCH[2]}/"
fi fi
if [ $fname != "README.md" ] ; then s="../$s"; fi if [ "$fname" != "README.md" ] ; then s="../$s"; fi
fi fi
fi fi
;; ;;
*.md#* ) *.md\#* )
dbg "-- # (path/filename.md#somelink) -> htmldoc (path/filename/#somelink)" dbg "-- # (path/filename.md#somelink) -> htmldoc (path/filename/#somelink)"
if [[ $rlnk =~ ^(.*)#(.*)$ ]] ; then if [[ $rlnk =~ ^(.*)#(.*)$ ]] ; then
TRGT="$fpath/${BASH_REMATCH[1]}" TRGT="$fpath/${BASH_REMATCH[1]}"
LNK="#${BASH_REMATCH[2]}" LNK="#${BASH_REMATCH[2]}"
testf $f $TRGT testf "$f" "$TRGT"
if [ $? -eq 0 ] ; then if [ $? -eq 0 ] ; then
testinternal $f $TRGT $LNK testinternal "$f" "$TRGT" "$LNK"
if [ $? -eq 0 ] ; then if [ $? -eq 0 ] ; then
if [[ $lnk =~ ^(.*)/(.*).md#(.*)$ ]] ; then if [[ $lnk =~ ^(.*)/(.*).md#(.*)$ ]] ; then
if [ "${BASH_REMATCH[2]}" = "README" ] ; then if [ "${BASH_REMATCH[2]}" = "README" ] ; then
@ -225,24 +228,24 @@ ck_netdata_relative () {
else else
s="../${BASH_REMATCH[1]}/${BASH_REMATCH[2]}/#${BASH_REMATCH[3]}" s="../${BASH_REMATCH[1]}/${BASH_REMATCH[2]}/#${BASH_REMATCH[3]}"
fi fi
if [ $fname != "README.md" ] ; then s="../$s"; fi if [ "$fname" != "README.md" ] ; then s="../$s"; fi
fi fi
fi fi
fi fi
fi fi
;; ;;
*#* ) *\#* )
dbg "-- # (path#somelink) -> (path/#somelink)" dbg "-- # (path#somelink) -> (path/#somelink)"
if [[ $rlnk =~ ^(.*)#(.*)$ ]] ; then if [[ $rlnk =~ ^(.*)#(.*)$ ]] ; then
TRGT="$fpath/${BASH_REMATCH[1]}/README.md" TRGT="$fpath/${BASH_REMATCH[1]}/README.md"
LNK="#${BASH_REMATCH[2]}" LNK="#${BASH_REMATCH[2]}"
testf $f $TRGT testf "$f" "$TRGT"
if [ $? -eq 0 ] ; then if [ $? -eq 0 ] ; then
testinternal $f $TRGT $LNK testinternal "$f" "$TRGT" "$LNK"
if [ $? -eq 0 ] ; then if [ $? -eq 0 ] ; then
if [[ $rlnk =~ ^(.*)#(.*)$ ]] ; then if [[ $rlnk =~ ^(.*)#(.*)$ ]] ; then
s="${BASH_REMATCH[1]}/#${BASH_REMATCH[2]}" s="${BASH_REMATCH[1]}/#${BASH_REMATCH[2]}"
if [ $fname != "README.md" ] ; then s="../$s"; fi if [ "$fname" != "README.md" ] ; then s="../$s"; fi
fi fi
fi fi
fi fi
@ -251,7 +254,7 @@ ck_netdata_relative () {
* ) * )
if [ -f "$fpath/$rlnk" ] ; then if [ -f "$fpath/$rlnk" ] ; then
dbg "-- # (path/someotherfile) $rlnk" dbg "-- # (path/someotherfile) $rlnk"
if [ $fpath = "." ] ; then if [ "$fpath" = "." ] ; then
s="https://github.com/netdata/netdata/tree/master/$rlnk" s="https://github.com/netdata/netdata/tree/master/$rlnk"
else else
s="https://github.com/netdata/netdata/tree/master/$fpath/$rlnk" s="https://github.com/netdata/netdata/tree/master/$fpath/$rlnk"
@ -259,10 +262,10 @@ ck_netdata_relative () {
else else
if [ -d "$fpath/$rlnk" ] ; then if [ -d "$fpath/$rlnk" ] ; then
dbg "-- # (path) -> htmldoc (path/)" dbg "-- # (path) -> htmldoc (path/)"
testf $f "$fpath/$rlnk/README.md" testf "$f" "$fpath/$rlnk/README.md"
if [ $? -eq 0 ] ; then if [ $? -eq 0 ] ; then
s="$rlnk/" s="$rlnk/"
if [ $fname != "README.md" ] ; then s="../$s"; fi if [ "$fname" != "README.md" ] ; then s="../$s"; fi
fi fi
else else
echo "-- ERROR: $f - $rlnk is neither a file or a directory. Giving up!" echo "-- ERROR: $f - $rlnk is neither a file or a directory. Giving up!"
@ -273,9 +276,9 @@ ck_netdata_relative () {
esac esac
if [[ ! -z $s ]] ; then if [[ ! -z $s ]] ; then
srch=$(echo $rlnk | sed 's/\//\\\//g') srch=$(echo "$rlnk" | sed 's/\//\\\//g')
rplc=$(echo $s | sed 's/\//\\\//g') rplc=$(echo "$s" | sed 's/\//\\\//g')
fix "sed -i 's/($srch)/($rplc)/g' htmldoc/src/$f" fix "sed -i 's/($srch)/($rplc)/g' $GENERATOR_DIR/src/$f"
fi fi
} }
@ -283,26 +286,26 @@ ck_netdata_relative () {
checklinks () { checklinks () {
f=$1 f=$1
dbg "Checking $f" dbg "Checking $f"
while read l ; do while read -r l ; do
for word in $l ; do for word in $l ; do
if [[ $word =~ .*\]\(([^\(\) ]*)\).* ]] ; then if [[ $word =~ .*\]\(([^\(\) ]*)\).* ]] ; then
lnk="${BASH_REMATCH[1]}" lnk="${BASH_REMATCH[1]}"
if [ -z $lnk ] ; then continue ; fi if [ -z "$lnk" ] ; then continue ; fi
dbg "-$lnk" dbg "-$lnk"
case "$lnk" in case "$lnk" in
mailto:* ) dbg "-- Mailto link, ignoring" ;; mailto:* ) dbg "-- Mailto link, ignoring" ;;
https://github.com/netdata/netdata/wiki* ) https://github.com/netdata/netdata/wiki* )
dbg "-- Wiki Link $lnk" dbg "-- Wiki Link $lnk"
if [ $CHKWIKI -eq 1 ] ; then echo "-- WARNING: $f - $lnk points to the wiki. Please replace it manually" ; fi if [ "$CHKWIKI" -eq 1 ] ; then echo "-- WARNING: $f - $lnk points to the wiki. Please replace it manually" ; fi
;; ;;
https://github.com/netdata/netdata/????/master* ) https://github.com/netdata/netdata/????/master* )
dbg "-- Absolute link $lnk" dbg "-- Absolute link $lnk"
if [ $CHKABSOLUTE -eq 1 ] ; then ck_netdata_absolute $f $lnk $lnk ; fi if [ "$CHKABSOLUTE" -eq 1 ] ; then ck_netdata_absolute "$f" "$lnk" "$lnk" ; fi
;; ;;
http* ) http* )
dbg "-- External link $lnk" dbg "-- External link $lnk"
if [ $CHKEXTERNAL -eq 1 ] ; then if [ "$CHKEXTERNAL" -eq 1 ] ; then
testURL $lnk testURL "$lnk"
if [ $? -eq 1 ] ; then if [ $? -eq 1 ] ; then
echo "-- ERROR: $f - $lnk is a broken link" echo "-- ERROR: $f - $lnk is a broken link"
EXITCODE=1 EXITCODE=1
@ -311,12 +314,12 @@ checklinks () {
;; ;;
* ) * )
dbg "-- Relative link $lnk" dbg "-- Relative link $lnk"
if [ $CHKRELATIVE -eq 1 ] ; then ck_netdata_relative $f $lnk ; fi if [ "$CHKRELATIVE" -eq 1 ] ; then ck_netdata_relative "$f" "$lnk" ; fi
;; ;;
esac esac
fi fi
done done
done < $f done < "$f"
} }
TESTURLS=0 TESTURLS=0
@ -372,20 +375,20 @@ done
EXITCODE=0 EXITCODE=0
if [ -z ${file} ] ; then if [ -z "${file}" ] ; then
if [ $RECURSIVE -eq 0 ] ; then if [ $RECURSIVE -eq 0 ] ; then
printhelp printhelp
exit 1 exit 1
fi fi
for f in $(find . -type d \( -path ./htmldoc -o -path ./node_modules \) -prune -o -name "*.md" -print); do for f in $(find . -type d \( -path ./${GENERATOR_DIR} -o -path ./node_modules \) -prune -o -name "*.md" -print); do
checklinks $f checklinks "$f"
done done
else else
if [ $RECURSIVE -eq 1 ] ; then if [ $RECURSIVE -eq 1 ] ; then
printhelp printhelp
exit 1 exit 1
fi fi
checklinks $file checklinks "$file"
fi fi
exit $EXITCODE exit $EXITCODE

View file

@ -1,55 +0,0 @@
#!/bin/bash
# buildhtml.sh
# Builds the html static site, using mkdocs
# Assumes that the script is executed either from the htmldoc folder (by netlify), or from the root repo dir (as originally intended)
currentdir=$(pwd | awk -F '/' '{print $NF}')
if [ $currentdir = "htmldoc" ] ; then
cd ..
fi
# Copy all netdata .md files to htmldoc/src. Exclude htmldoc itself and also the directory node_modules generated by Netlify
echo "Copying files"
rm -rf htmldoc/src
find . -type d \( -path ./htmldoc -o -path ./node_modules \) -prune -o -name "*.md" -print | cpio -pd htmldoc/src
# Modify the first line of the main README.md, to enable proper static html generation
sed -i '0,/# netdata /s//# Introduction\n\n/' htmldoc/src/README.md
# Remove specific files that don't belong in the documentation
rm htmldoc/src/HISTORICAL_CHANGELOG.md
rm htmldoc/src/collectors/charts.d.plugin/mem_apps/README.md
rm htmldoc/src/collectors/charts.d.plugin/postfix/README.md
rm htmldoc/src/collectors/charts.d.plugin/tomcat/README.md
rm htmldoc/src/collectors/charts.d.plugin/sensors/README.md
rm htmldoc/src/collectors/charts.d.plugin/cpu_apps/README.md
rm htmldoc/src/collectors/charts.d.plugin/squid/README.md
rm htmldoc/src/collectors/charts.d.plugin/nginx/README.md
rm htmldoc/src/collectors/charts.d.plugin/hddtemp/README.md
rm htmldoc/src/collectors/charts.d.plugin/cpufreq/README.md
rm htmldoc/src/collectors/charts.d.plugin/mysql/README.md
rm htmldoc/src/collectors/charts.d.plugin/exim/README.md
rm htmldoc/src/collectors/charts.d.plugin/apache/README.md
rm htmldoc/src/collectors/charts.d.plugin/load_average/README.md
rm htmldoc/src/collectors/charts.d.plugin/phpfpm/README.md
echo "Creating mkdocs.yaml"
# Generate mkdocs.yaml
htmldoc/buildyaml.sh > htmldoc/mkdocs.yml
echo "Fixing links"
# Fix links (recursively, all types, executing replacements)
htmldoc/checklinks.sh -rax
if [ $? -eq 1 ] ; then exit 1 ; fi
echo "Calling mkdocs"
# Build html docs
mkdocs build --config-file=htmldoc/mkdocs.yml
echo "Finished"

View file

@ -63,7 +63,7 @@ For automated installs, append a space + `--dont-wait` to the command line. You
</details>&nbsp;<br/> </details>&nbsp;<br/>
Once Netdata is installed, see [Getting Started](../doc/GettingStarted.md). Once Netdata is installed, see [Getting Started](../docs/GettingStarted.md).
--- ---
@ -128,7 +128,7 @@ sh /tmp/kickstart-static64.sh
</details>&nbsp;<br/> </details>&nbsp;<br/>
Once Netdata is installed, see [Getting Started](../doc/GettingStarted.md). Once Netdata is installed, see [Getting Started](../docs/GettingStarted.md).
--- ---
@ -390,7 +390,7 @@ When Netdata is first installed, it will run as _root_. This may or may not be a
1. Creat a group `netdata` via the Synology group interface. Give it no access to anything. 1. Creat a group `netdata` via the Synology group interface. Give it no access to anything.
2. Create a user `netdata` via the Synology user interface. Give it no access to anything and a random password. Assign the user to the `netdata` group. Netdata will chuid to this user when running. 2. Create a user `netdata` via the Synology user interface. Give it no access to anything and a random password. Assign the user to the `netdata` group. Netdata will chuid to this user when running.
3. Change ownership of the following directories, as defined in [Netdata Security](../doc/netdata-security.md#security-design): 3. Change ownership of the following directories, as defined in [Netdata Security](../docs/netdata-security.md#security-design):
``` ```
$ chown -R root:netdata /opt/netdata/usr/share/netdata $ chown -R root:netdata /opt/netdata/usr/share/netdata

View file

@ -2,11 +2,11 @@
# unless otherwise overridden by more specific contexts. # unless otherwise overridden by more specific contexts.
[build] [build]
# Directory to change to before starting a build. # Directory to change to before starting a build.
base = "htmldoc/" base = "/docs/generator"
# Directory (relative to root of your repo) that contains the deploy-ready # Directory (relative to root of your repo) that contains the deploy-ready
# HTML files and assets generated by the build. # HTML files and assets generated by the build.
publish = "htmldoc/build" publish = "docs/generator/build"
# Default build command. # Default build command.
command = "./buildhtml.sh" command = "./buildhtml.sh"

View file

@ -46,7 +46,7 @@ The registry keeps track of 3 entities:
## Who talks to the registry? ## Who talks to the registry?
Your web browser **only**! Check here if this is against your policies: [how to not send any information to a thirdparty server](../doc/netdata-security.md#security-design) Your web browser **only**! Check here if this is against your policies: [how to not send any information to a thirdparty server](../docs/netdata-security.md#security-design)
Your netdata servers do not talk to the registry. This is a UML diagram of its operation: Your netdata servers do not talk to the registry. This is a UML diagram of its operation:

View file

@ -699,21 +699,21 @@ p {
network, firewall, <a href="https://github.com/netdata/netdata/tree/master/collectors/tc.plugin" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=QoS>QoS</a>, NFS, ZFS, etc). network, firewall, <a href="https://github.com/netdata/netdata/tree/master/collectors/tc.plugin" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=QoS>QoS</a>, NFS, ZFS, etc).
<br/> <br/>
Detailed performance metrics for dozens of Detailed performance metrics for dozens of
<b><a href="https://github.com/netdata/netdata/blob/master/doc/Add-more-charts-to-netdata.md#add-more-charts-to-netdata" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=AddMoreCharts>applications</a></b> <b><a href="https://github.com/netdata/netdata/blob/master/docs/Add-more-charts-to-netdata.md#add-more-charts-to-netdata" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=AddMoreCharts>applications</a></b>
(such as web servers, databases servers, email servers, DNS servers, etc). (such as web servers, databases servers, email servers, DNS servers, etc).
<br/> <br/>
Visualize metrics collected from <b><a href="https://github.com/netdata/netdata/blob/master/collectors/node.d.plugin/snmp" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=SNMP>SNMP devices</a></b>, Visualize metrics collected from <b><a href="https://github.com/netdata/netdata/blob/master/collectors/node.d.plugin/snmp" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=SNMP>SNMP devices</a></b>,
and APM metrics via the embedded <b><a href="https://github.com/netdata/netdata/tree/master/collectors/statsd.plugin" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=statsd>statsd server</a></b>. and APM metrics via the embedded <b><a href="https://github.com/netdata/netdata/tree/master/collectors/statsd.plugin" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=statsd>statsd server</a></b>.
</div> </div>
<div class=grid-cell><h3><span class=star>&#x2605;</span> Out of the box</h3> <div class=grid-cell><h3><span class=star>&#x2605;</span> Out of the box</h3>
<p>netdata supports <a href="https://github.com/netdata/netdata/tree/master/doc/Why-Netdata.md#simplicity" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=AutoDetection>auto-detection</a> for everything. It collects more than 5000 metrics automatically, with <p>netdata supports <a href="https://github.com/netdata/netdata/tree/master/docs/Why-Netdata.md#simplicity" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=AutoDetection>auto-detection</a> for everything. It collects more than 5000 metrics automatically, with
<strong>zero configuration</strong>, it has <strong>zero dependencies</strong>, requires <strong>zero <strong>zero configuration</strong>, it has <strong>zero dependencies</strong>, requires <strong>zero
maintenance</strong> and comes with more than <a href="https://github.com/netdata/netdata/tree/master/health/health.d" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=AlarmConfigs>100 alarms</a> pre-configured to detect common maintenance</strong> and comes with more than <a href="https://github.com/netdata/netdata/tree/master/health/health.d" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=AlarmConfigs>100 alarms</a> pre-configured to detect common
failures, performance and availability issues. failures, performance and availability issues.
</div> </div>
<div class=grid-cell><h3><span class=star>&#x2605;</span> In real-time</h3> <div class=grid-cell><h3><span class=star>&#x2605;</span> In real-time</h3>
<p>netdata collects thousands of metrics per server <strong>per second</strong>, <p>netdata collects thousands of metrics per server <strong>per second</strong>,
with <a href="https://github.com/netdata/netdata/blob/master/doc/Performance.md#netdata-performance" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=Performance>just 1% CPU</a> with <a href="https://github.com/netdata/netdata/blob/master/docs/Performance.md#netdata-performance" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=Performance>just 1% CPU</a>
utilization of a single core, <a href="https://github.com/netdata/netdata/tree/master/database" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=MemoryRequirements>a few MB of RAM</a> utilization of a single core, <a href="https://github.com/netdata/netdata/tree/master/database" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=MemoryRequirements>a few MB of RAM</a>
and no disk I/O at all. and no disk I/O at all.
View everything on <strong>stunning</strong> real-time interactive web dashboards, even when netdata is View everything on <strong>stunning</strong> real-time interactive web dashboards, even when netdata is
@ -727,7 +727,7 @@ p {
(such as email, slack.com, pushover.net, pushbullet.com, telegram.org, twilio.com). (such as email, slack.com, pushover.net, pushbullet.com, telegram.org, twilio.com).
</div> </div>
<div class=grid-cell><h3><span class=star>&#x2605;</span> Embeddable</h3> <div class=grid-cell><h3><span class=star>&#x2605;</span> Embeddable</h3>
<p>netdata has minimal dependencies and can run <b><a href="https://github.com/netdata/netdata/blob/master/doc/netdata-for-IoT.md#netdata-for-iot" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=IoT>even weak on IoT devices</a></b>. Also, its charts can be embedded on any web site. <p>netdata has minimal dependencies and can run <b><a href="https://github.com/netdata/netdata/blob/master/docs/netdata-for-IoT.md#netdata-for-iot" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=IoT>even weak on IoT devices</a></b>. Also, its charts can be embedded on any web site.
</div> </div>
<div class=grid-cell><h3><span class=star>&#x2605;</span> Customizable</h3> <div class=grid-cell><h3><span class=star>&#x2605;</span> Customizable</h3>
<p><a href="https://github.com/netdata/netdata/tree/master/web/gui/custom#custom-dashboards" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=CustomDashboards>Custom dashboards</a> can be built using simple HTML (no javascript necessary). <p><a href="https://github.com/netdata/netdata/tree/master/web/gui/custom#custom-dashboards" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=CustomDashboards>Custom dashboards</a> can be built using simple HTML (no javascript necessary).

View file

@ -418,7 +418,7 @@
<div class="p"> <div class="p">
<b><a href="https://github.com/netdata/netdata/wiki" target="_blank">netdata</a></b> is free, <b><a href="https://github.com/netdata/netdata/wiki" target="_blank">netdata</a></b> is free,
open-source software. If you decide to use it, open-source software. If you decide to use it,
<strong><a href="https://github.com/netdata/netdata/tree/master/doc/a-github-star-is-important.md" target="_blank">it is important to give netdata a star at GitHub</a></strong>. <strong><a href="https://github.com/netdata/netdata/tree/master/docs/a-github-star-is-important.md" target="_blank">it is important to give netdata a star at GitHub</a></strong>.
</div> </div>
<div class="p"> <div class="p">
Enjoy real-time performance monitoring! Enjoy real-time performance monitoring!

View file

@ -1612,7 +1612,7 @@ function renderPage(menus, data) {
html += mhead + shtml + '</div></div><hr role="separator"/>'; html += mhead + shtml + '</div></div><hr role="separator"/>';
} }
sidebar += '<li class="" style="padding-top:15px;"><a href="https://github.com/netdata/netdata/blob/master/doc/Add-more-charts-to-netdata.md#add-more-charts-to-netdata" target="_blank"><i class="fas fa-plus"></i> add more charts</a></li>'; sidebar += '<li class="" style="padding-top:15px;"><a href="https://github.com/netdata/netdata/blob/master/docs/Add-more-charts-to-netdata.md#add-more-charts-to-netdata" target="_blank"><i class="fas fa-plus"></i> add more charts</a></li>';
sidebar += '<li class=""><a href="https://github.com/netdata/netdata/tree/master/health#Health-monitoring" target="_blank"><i class="fas fa-plus"></i> add more alarms</a></li>'; sidebar += '<li class=""><a href="https://github.com/netdata/netdata/tree/master/health#Health-monitoring" target="_blank"><i class="fas fa-plus"></i> add more alarms</a></li>';
sidebar += '<li class="" style="margin:20px;color:#666;"><small>netdata on <b>' + data.hostname.toString() + '</b>, collects every ' + ((data.update_every === 1) ? 'second' : data.update_every.toString() + ' seconds') + ' <b>' + data.dimensions_count.toLocaleString() + '</b> metrics, presented as <b>' + data.charts_count.toLocaleString() + '</b> charts and monitored by <b>' + data.alarms_count.toLocaleString() + '</b> alarms, using ' + Math.round(data.rrd_memory_bytes / 1024 / 1024).toLocaleString() + ' MB of memory for ' + NETDATA.seconds4human(data.update_every * data.history, {space: '&nbsp;'}) + ' of real-time history.<br/>&nbsp;<br/><b>netdata</b><br/>v' + data.version.toString() + '</small></li>'; sidebar += '<li class="" style="margin:20px;color:#666;"><small>netdata on <b>' + data.hostname.toString() + '</b>, collects every ' + ((data.update_every === 1) ? 'second' : data.update_every.toString() + ' seconds') + ' <b>' + data.dimensions_count.toLocaleString() + '</b> metrics, presented as <b>' + data.charts_count.toLocaleString() + '</b> charts and monitored by <b>' + data.alarms_count.toLocaleString() + '</b> alarms, using ' + Math.round(data.rrd_memory_bytes / 1024 / 1024).toLocaleString() + ' MB of memory for ' + NETDATA.seconds4human(data.update_every * data.history, {space: '&nbsp;'}) + ' of real-time history.<br/>&nbsp;<br/><b>netdata</b><br/>v' + data.version.toString() + '</small></li>';
sidebar += '</ul>'; sidebar += '</ul>';