diff --git a/.github/scripts/package_cloud_wrapper.sh b/.github/scripts/package_cloud_wrapper.sh
index 7640ef484d..85d8c481e9 100755
--- a/.github/scripts/package_cloud_wrapper.sh
+++ b/.github/scripts/package_cloud_wrapper.sh
@@ -1,4 +1,5 @@
 #!/usr/bin/env bash
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This is a tool to help removal of packages from packagecloud.io
 # It utilizes the package_cloud utility provided from packagecloud.io
@@ -10,10 +11,8 @@
 # 1) PKG_CLOUD_TOKEN variable exported
 # 2) To properly install package_cloud when not found, it requires: ruby gcc gcc-c++ ruby-devel
 #
-# Copyright: SPDX-License-Identifier: GPL-3.0-or-later
-#
-# Author  : Pavlos Emm. Katsoulakis (paul@netdata.cloud)
 #shellcheck disable=SC2068,SC2145
+
 set -e
 PKG_CLOUD_CONFIG="$HOME/.package_cloud_configuration.cfg"
 
diff --git a/REDISTRIBUTED.md b/REDISTRIBUTED.md
index 6572931414..6d98eef398 100644
--- a/REDISTRIBUTED.md
+++ b/REDISTRIBUTED.md
@@ -1,7 +1,7 @@
 # Redistributed software
 
 Netdata copyright info:<br/>
-Copyright 2023, Netdata Inc.<br/>
+Copyright 2018-2025 Netdata Inc.<br/>
 Released under [GPL v3 or later](https://raw.githubusercontent.com/netdata/netdata/master/LICENSE).
 
 Netdata uses SPDX license tags to identify the license for its files.
diff --git a/docs/developer-and-contributor-corner/style-guide.md b/docs/developer-and-contributor-corner/style-guide.md
index 6d63be3782..878af664ee 100644
--- a/docs/developer-and-contributor-corner/style-guide.md
+++ b/docs/developer-and-contributor-corner/style-guide.md
@@ -160,15 +160,15 @@ capitalization. In summary:
   Docker, Apache, NGINX)
 - Avoid camel case (NetData) or all caps (NETDATA).
 
-Whenever you refer to the company Netdata, Inc., or the open-source monitoring Agent the company develops, capitalize both words.
+Whenever you refer to the company Netdata Inc., or the open-source monitoring Agent the company develops, capitalize both words.
 
 However, if you’re referring to a process, user, or group on a Linux system, use lowercase and fence the word in an
 inline code block: `` `netdata` ``.
 
 |                 |                                                                                                |
 |-----------------|------------------------------------------------------------------------------------------------|
-| Not recommended | The netdata agent, which spawns the netdata process, is actively maintained by netdata, inc.   |
-| **Recommended** | The Netdata Agent, which spawns the `netdata` process, is actively maintained by Netdata, Inc. |
+| Not recommended | The netdata agent, which spawns the netdata process, is actively maintained by Netdata Inc.    |
+| **Recommended** | The Netdata Agent, which spawns the `netdata` process, is actively maintained by Netdata Inc.  |
 
 #### Capitalization of document titles and page headings
 
diff --git a/docs/diagrams/netdata-overview.xml b/docs/diagrams/netdata-overview.xml
index 2967f915c2..53a95ad3a8 100644
--- a/docs/diagrams/netdata-overview.xml
+++ b/docs/diagrams/netdata-overview.xml
@@ -294,7 +294,7 @@
         <mxCell id="110" value="" style="shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;shape=mxgraph.mscae.cloud.api_management;fillColor=#0079D6;fontSize=20;align=center;" parent="1" vertex="1">
           <mxGeometry x="91" y="562" width="35" height="30" as="geometry" />
         </mxCell>
-        <UserObject label="&lt;div style=&quot;text-align: right&quot;&gt;&lt;b&gt;&lt;font style=&quot;font-size: 24px&quot;&gt;netdata&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: right&quot;&gt;simple. effective. awesome!&lt;/div&gt;&lt;div style=&quot;text-align: right&quot;&gt;&lt;b&gt;https://netdata.cloud&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: right&quot;&gt;&lt;span style=&quot;font-size: 14px&quot;&gt;&lt;br&gt;(C) Copyright 2023&lt;br&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 14px&quot;&gt;Netdata, Inc.&lt;/span&gt;&lt;/div&gt;" link="https://netdata.cloud" id="111">
+        <UserObject label="&lt;div style=&quot;text-align: right&quot;&gt;&lt;b&gt;&lt;font style=&quot;font-size: 24px&quot;&gt;netdata&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: right&quot;&gt;simple. effective. awesome!&lt;/div&gt;&lt;div style=&quot;text-align: right&quot;&gt;&lt;b&gt;https://netdata.cloud&lt;/b&gt;&lt;/div&gt;&lt;div style=&quot;text-align: right&quot;&gt;&lt;span style=&quot;font-size: 14px&quot;&gt;&lt;br&gt;(C) Copyright 2018-2025&lt;br&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 14px&quot;&gt;Netdata Inc.&lt;/span&gt;&lt;/div&gt;" link="https://netdata.cloud" id="111">
           <mxCell style="text;html=1;resizable=0;points=[];autosize=1;align=left;verticalAlign=top;spacingTop=-4;fontSize=20;" parent="1" vertex="1">
             <mxGeometry x="994" y="1763.666748046875" width="270" height="160" as="geometry" />
           </mxCell>
diff --git a/docs/netdata-agent/securing-netdata-agents.md b/docs/netdata-agent/securing-netdata-agents.md
index 32a7a437fb..53cc741fc4 100644
--- a/docs/netdata-agent/securing-netdata-agents.md
+++ b/docs/netdata-agent/securing-netdata-agents.md
@@ -1,130 +1,130 @@
-# Securing Netdata Agents
-
-By default, the Agent exposes its **local dashboard** on port `19999`. If the node has a public IP address, the dashboard and metrics are accessible to anyone at `http://NODE:19999`.
-
-Protect your Agents by implementing any of these security measures:
-
-**Recommended**:
-
-- [Disable the local dashboard](#disable-the-local-dashboard): Best for users who monitor their systems through Netdata Cloud dashboards.
-- [Use Netdata Parents as Web Application Firewalls](#use-netdata-parents-as-web-application-firewalls): Deploy Parent nodes as border gateways to isolate production systems from direct internet exposure, even when using Netdata Cloud.
-
-**Alternative Approaches**:
-
-- [Restrict dashboard access to private LAN](#restrict-dashboard-access-to-private-lan): Suitable for accessing the local dashboard via a LAN connection.
-- [Configure granular access control](#configure-granular-access-control): Limit local dashboard access to specific IP addresses, such as trusted static IPs or management LAN connections.
-- [Deploy a reverse proxy](#deploy-a-reverse-proxy): Secure your dashboard with password protection and TLS encryption.
-
-## Disable the local dashboard
-
-Secure your nodes by disabling local dashboard access while maintaining Cloud monitoring capabilities:
-
-- Eliminates public exposure of metrics and system information.
-- Maintains secure metrics viewing through Netdata Cloud via [ACLK](/src/aclk/README.md).
-
-Edit the `[web]` section in `netdata.conf` using the [`edit-config`](/docs/netdata-agent/configuration/README.md#edit-a-configuration-file-using-edit-config) script:
-
-```text
-[web]
-    mode = none
-```
-
-Restart your Agent to apply changes. After restart, the local dashboard (http://NODE:19999) will no longer be accessible, but all metrics remain available through Netdata Cloud.
-
-> **Note**
->
-> For Docker deployments, set `NETDATA_HEALTHCHECK_TARGET=cli` in your environment variables.
-
-## Use Netdata Parents as Web Application Firewalls
-
-Enhance security by deploying Parent nodes as border gateways, eliminating the need for direct internet access from production Agents. Parent nodes:
-
-- Act as application firewalls.
-- Receive metrics from Child Agents securely.
-- Serve dashboard requests using local data.
-- Maintain Netdata Cloud connectivity through encrypted connection.
-
-For more information, see [Observability Centralization Points](/docs/observability-centralization-points/README.md).
-
-## Restrict dashboard access to private LAN
-
-Enhance security by binding the Agent to your organization's private management network interface. This limits dashboard access to your administrative LAN only.
-
-Edit the `[web]` section in `netdata.conf` using the [`edit-config`](/docs/netdata-agent/configuration/README.md#edit-a-configuration-file-using-edit-config) script:
-
-```text
-[web]
-    bind to = 10.1.1.1:19999 localhost:19999
-```
-
-The Agent supports binding to multiple IPs and ports. When using hostnames, all resolved IPs will be used (for example, `localhost` typically resolves to both `127.0.0.1` and `::1`).
-
-<details><summary>More info for cloud-based installations</summary>
-
-For cloud environments without private LAN capabilities or multi-cloud deployments, you can create a virtual management network using mesh VPN tools like `tincd` or `gvpe`. These tools enable secure, private communication between servers while allowing administration stations to access management functions across your cloud infrastructure.
-
-For `gvpe` specifically, we maintain a [deployment tool](https://github.com/netdata/netdata-demo-site/tree/master/gvpe) that includes:
-
-- Pre-compiled binaries for Linux and FreeBSD.
-- macOS compilation script.
-- Configuration templates.
-
-We use this tool to manage our Netdata demo sites across multiple hosting providers.
-
-</details>
-
-## Configure granular access control
-
-Restrict access to your local dashboard while maintaining Netdata Cloud connectivity by using [access lists](/src/web/server/README.md#access-lists).
-
-Edit the `[web]` section in `netdata.conf` using the [`edit-config`](/docs/netdata-agent/configuration/README.md#edit-a-configuration-file-using-edit-config) script.
-
-Use the `allow connections from` setting to permit specific IP addresses or hostnames:
-
-```text
-[web]
-    # Allow only localhost connections
-    allow connections from = localhost
-
-    # Allow only from management LAN running on `10.X.X.X`
-    allow connections from = 10.*
-
-    # Allow connections only from a specific FQDN/hostname
-    allow connections from = example*
-```
-
-The default setting `localhost *` allows both localhost and all external connections. You can customize this using Netdata's [simple patterns](/src/libnetdata/simple_pattern/README.md).
-
-While `allow connections from` globally controls access to all Netdata services, you can set specific permissions for individual features:
-
-```text
-[web]
-    allow connections from = localhost *
-    allow dashboard from = localhost *
-    allow badges from = *
-    allow streaming from = *
-    allow netdata.conf from = localhost fd* 10.* 192.168.* 172.16.* 172.17.* 172.18.* 172.19.* 172.20.* 172.21.* 172.22.* 172.23.* 172.24.* 172.25.* 172.26.* 172.27.* 172.28.* 172.29.* 172.30.* 172.31.*
-    allow management from = localhost
-```
-
-For additional security:
-
-- Review detailed access list options in the [Web Server documentation](/src/web/server/README.md#access-lists).
-- Consider [enabling SSL](/src/web/server/README.md#enable-httpstls-support) to encrypt local dashboard traffic (Netdata Cloud connections are always TLS-encrypted).
-
-## Deploy a reverse proxy
-
-Secure multiple Agents using a single authenticating web server as a reverse proxy. This provides:
-
-- Unified access through URLs like `http://{HOST}/netdata/{NETDATA_HOSTNAME}/`.
-- Single sign-on across all Agents.
-- Optional TLS encryption.
-
-We provide detailed configuration guides for popular web servers:
-
-- [nginx](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-nginx.md)
-- [HAProxy](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-haproxy.md)
-- [Apache](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-apache.md)
-- [Lighttpd](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-lighttpd.md)
-- [Caddy](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-caddy.md)
-- [H2O](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-h2o.md)
+# Securing Netdata Agents
+
+By default, the Agent exposes its **local dashboard** on port `19999`. If the node has a public IP address, the dashboard and metrics are accessible to anyone at `http://NODE:19999`.
+
+Protect your Agents by implementing any of these security measures:
+
+**Recommended**:
+
+- [Disable the local dashboard](#disable-the-local-dashboard): Best for users who monitor their systems through Netdata Cloud dashboards.
+- [Use Netdata Parents as Web Application Firewalls](#use-netdata-parents-as-web-application-firewalls): Deploy Parent nodes as border gateways to isolate production systems from direct internet exposure, even when using Netdata Cloud.
+
+**Alternative Approaches**:
+
+- [Restrict dashboard access to private LAN](#restrict-dashboard-access-to-private-lan): Suitable for accessing the local dashboard via a LAN connection.
+- [Configure granular access control](#configure-granular-access-control): Limit local dashboard access to specific IP addresses, such as trusted static IPs or management LAN connections.
+- [Deploy a reverse proxy](#deploy-a-reverse-proxy): Secure your dashboard with password protection and TLS encryption.
+
+## Disable the local dashboard
+
+Secure your nodes by disabling local dashboard access while maintaining Cloud monitoring capabilities:
+
+- Eliminates public exposure of metrics and system information.
+- Maintains secure metrics viewing through Netdata Cloud via [ACLK](/src/aclk/README.md).
+
+Edit the `[web]` section in `netdata.conf` using the [`edit-config`](/docs/netdata-agent/configuration/README.md#edit-a-configuration-file-using-edit-config) script:
+
+```text
+[web]
+    mode = none
+```
+
+Restart your Agent to apply changes. After restart, the local dashboard (http://NODE:19999) will no longer be accessible, but all metrics remain available through Netdata Cloud.
+
+> **Note**
+>
+> For Docker deployments, set `NETDATA_HEALTHCHECK_TARGET=cli` in your environment variables.
+
+## Use Netdata Parents as Web Application Firewalls
+
+Enhance security by deploying Parent nodes as border gateways, eliminating the need for direct internet access from production Agents. Parent nodes:
+
+- Act as application firewalls.
+- Receive metrics from Child Agents securely.
+- Serve dashboard requests using local data.
+- Maintain Netdata Cloud connectivity through encrypted connection.
+
+For more information, see [Observability Centralization Points](/docs/observability-centralization-points/README.md).
+
+## Restrict dashboard access to private LAN
+
+Enhance security by binding the Agent to your organization's private management network interface. This limits dashboard access to your administrative LAN only.
+
+Edit the `[web]` section in `netdata.conf` using the [`edit-config`](/docs/netdata-agent/configuration/README.md#edit-a-configuration-file-using-edit-config) script:
+
+```text
+[web]
+    bind to = 10.1.1.1:19999 localhost:19999
+```
+
+The Agent supports binding to multiple IPs and ports. When using hostnames, all resolved IPs will be used (for example, `localhost` typically resolves to both `127.0.0.1` and `::1`).
+
+<details><summary>More info for cloud-based installations</summary>
+
+For cloud environments without private LAN capabilities or multi-cloud deployments, you can create a virtual management network using mesh VPN tools like `tincd` or `gvpe`. These tools enable secure, private communication between servers while allowing administration stations to access management functions across your cloud infrastructure.
+
+For `gvpe` specifically, we maintain a [deployment tool](https://github.com/netdata/netdata-demo-site/tree/master/gvpe) that includes:
+
+- Pre-compiled binaries for Linux and FreeBSD.
+- macOS compilation script.
+- Configuration templates.
+
+We use this tool to manage our Netdata demo sites across multiple hosting providers.
+
+</details>
+
+## Configure granular access control
+
+Restrict access to your local dashboard while maintaining Netdata Cloud connectivity by using [access lists](/src/web/server/README.md#access-lists).
+
+Edit the `[web]` section in `netdata.conf` using the [`edit-config`](/docs/netdata-agent/configuration/README.md#edit-a-configuration-file-using-edit-config) script.
+
+Use the `allow connections from` setting to permit specific IP addresses or hostnames:
+
+```text
+[web]
+    # Allow only localhost connections
+    allow connections from = localhost
+
+    # Allow only from management LAN running on `10.X.X.X`
+    allow connections from = 10.*
+
+    # Allow connections only from a specific FQDN/hostname
+    allow connections from = example*
+```
+
+The default setting `localhost *` allows both localhost and all external connections. You can customize this using Netdata's [simple patterns](/src/libnetdata/simple_pattern/README.md).
+
+While `allow connections from` globally controls access to all Netdata services, you can set specific permissions for individual features:
+
+```text
+[web]
+    allow connections from = localhost *
+    allow dashboard from = localhost *
+    allow badges from = *
+    allow streaming from = *
+    allow netdata.conf from = localhost fd* 10.* 192.168.* 172.16.* 172.17.* 172.18.* 172.19.* 172.20.* 172.21.* 172.22.* 172.23.* 172.24.* 172.25.* 172.26.* 172.27.* 172.28.* 172.29.* 172.30.* 172.31.*
+    allow management from = localhost
+```
+
+For additional security:
+
+- Review detailed access list options in the [Web Server documentation](/src/web/server/README.md#access-lists).
+- Consider [enabling SSL](/src/web/server/README.md#enable-httpstls-support) to encrypt local dashboard traffic (Netdata Cloud connections are always TLS-encrypted).
+
+## Deploy a reverse proxy
+
+Secure multiple Agents using a single authenticating web server as a reverse proxy. This provides:
+
+- Unified access through URLs like `http://{HOST}/netdata/{NETDATA_HOSTNAME}/`.
+- Single sign-on across all Agents.
+- Optional TLS encryption.
+
+We provide detailed configuration guides for popular web servers:
+
+- [nginx](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-nginx.md)
+- [HAProxy](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-haproxy.md)
+- [Apache](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-apache.md)
+- [Lighttpd](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-lighttpd.md)
+- [Caddy](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-caddy.md)
+- [H2O](/docs/netdata-agent/configuration/running-the-netdata-agent-behind-a-reverse-proxy/Running-behind-h2o.md)
diff --git a/netdata-installer.sh b/netdata-installer.sh
index 78946c7560..dd1d436650 100755
--- a/netdata-installer.sh
+++ b/netdata-installer.sh
@@ -429,7 +429,7 @@ if [ "$(id -u)" -ne 0 ] && [ -z "${NETDATA_PREPARE_ONLY}" ]; then
 fi
 
 netdata_banner
-progress "real-time performance monitoring, done right!"
+progress "monitoring and troubleshooting, transformed!"
 cat << BANNER1
 
   You are about to build and install netdata to your system.
@@ -999,7 +999,7 @@ fi
 # -----------------------------------------------------------------------------
 # check if we can re-start netdata
 
-# TODO(paulfantom): Creation of configuration file should be handled by a build system. Additionally we shouldn't touch configuration files in /etc/netdata/...
+# TODO: Creation of configuration file should be handled by a build system. Additionally we shouldn't touch configuration files in /etc/netdata/...
 started=0
 if [ ${DONOTSTART} -eq 1 ]; then
   create_netdata_conf "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
diff --git a/netdata.spec.in b/netdata.spec.in
index e7cd1c3f56..04eaf43b15 100644
--- a/netdata.spec.in
+++ b/netdata.spec.in
@@ -120,7 +120,7 @@ AutoReqProv: yes
 # Filter known bogus deps that would be caught by AutoReqProv.
 %global __requires_exclude_from ^%{_libdir}/%{name}/system/.*$
 
-Summary:	Real-time performance monitoring, done right!
+Summary:	Netdata - Monitoring and troubleshooting, transformed!
 Name:		netdata
 Version:	%{version}
 Release:	1%{?dist}
@@ -1051,7 +1051,7 @@ fi
 - Fix /etc/netdata permissions
 * Mon Sep 23 2019 Konstantinos Natsakis <konstantinos.natsakis@gmail.com> 0.0.0-9
 - Do not build CUPS plugin subpackage on CentOS 6 and CentOS 7
-* Tue Aug 20 2019 Pavlos Emm. Katsoulakis <paul@netdat.acloud> - 0.0.0-8
+* Tue Aug 20 2019 Pavlos Emm. Katsoulakis <paul@netdata.cloud> - 0.0.0-8
 - Split CUPS functionality on separate package
 * Fri Jun 28 2019 Pavlos Emm. Katsoulakis <paul@netdata.cloud> - 0.0.0-7
 - Raise the path overrides to the spec file level, not just the configure.
diff --git a/packaging/check-for-go-toolchain.sh b/packaging/check-for-go-toolchain.sh
index 97cd936218..a6fbd6e210 100644
--- a/packaging/check-for-go-toolchain.sh
+++ b/packaging/check-for-go-toolchain.sh
@@ -1,6 +1,4 @@
 #!/bin/sh
-#
-# Copyright (c) 2024 Netdata Inc.
 # SPDX-License-Identifier: GPL-v3+
 #
 # Check if we need to install a Go toolchain.
diff --git a/packaging/cmake/Modules/FindGo.cmake b/packaging/cmake/Modules/FindGo.cmake
index 69e23fda67..ebd4cf7775 100644
--- a/packaging/cmake/Modules/FindGo.cmake
+++ b/packaging/cmake/Modules/FindGo.cmake
@@ -1,9 +1,7 @@
-# Custom CMake module to find the Go toolchain
-#
-# Copyright (c) 2024 Netdata Inc
-#
 # SPDX-License-Identifier: GPL-3.0-or-later
 #
+# Custom CMake module to find the Go toolchain
+#
 # This is a relatively orthodox CMake Find Module. It can be used by
 # simply including it and then invoking `find_package(Go)`.
 #
diff --git a/packaging/cmake/Modules/NetdataCompilerFlags.cmake b/packaging/cmake/Modules/NetdataCompilerFlags.cmake
index 28b43b4ec4..04f94d4aee 100644
--- a/packaging/cmake/Modules/NetdataCompilerFlags.cmake
+++ b/packaging/cmake/Modules/NetdataCompilerFlags.cmake
@@ -1,7 +1,5 @@
-# Functions to simplify handling of extra compiler flags.
-#
-# Copyright (c) 2024 Netdata Inc.
 # SPDX-License-Identifier: GPL-3.0-or-later
+# Functions to simplify handling of extra compiler flags.
 
 include(CheckCCompilerFlag)
 include(CheckCXXCompilerFlag)
diff --git a/packaging/cmake/Modules/NetdataDashboard.cmake b/packaging/cmake/Modules/NetdataDashboard.cmake
index 070ce18e8d..098eaffcf3 100644
--- a/packaging/cmake/Modules/NetdataDashboard.cmake
+++ b/packaging/cmake/Modules/NetdataDashboard.cmake
@@ -1,7 +1,5 @@
-# CMake module to handle fetching and installing the dashboard code
-#
-# Copyright (c) 2024 Netdata Inc.
 # SPDX-License-Identifier: GPL-3.0-or-later
+# CMake module to handle fetching and installing the dashboard code
 
 include(NetdataUtil)
 
diff --git a/packaging/cmake/Modules/NetdataDetectSystemd.cmake b/packaging/cmake/Modules/NetdataDetectSystemd.cmake
index ecac7aaf84..642ea37a84 100644
--- a/packaging/cmake/Modules/NetdataDetectSystemd.cmake
+++ b/packaging/cmake/Modules/NetdataDetectSystemd.cmake
@@ -1,7 +1,5 @@
-# CMake Module to handle all the systemd-related checks for Netdata.
-#
-# Copyright (c) 2024 Netdata Inc.
 # SPDX-License-Identifier: GPL-3.0-or-later
+# CMake Module to handle all the systemd-related checks for Netdata.
 
 macro(detect_systemd)
    find_library(SYSTEMD_LIBRARY NAMES systemd)
diff --git a/packaging/cmake/Modules/NetdataEBPFCORE.cmake b/packaging/cmake/Modules/NetdataEBPFCORE.cmake
index bf98ce5811..c65e3c8af9 100644
--- a/packaging/cmake/Modules/NetdataEBPFCORE.cmake
+++ b/packaging/cmake/Modules/NetdataEBPFCORE.cmake
@@ -1,7 +1,5 @@
-# Handling for eBPF CO-RE files
-#
-# Copyright (c) 2024 Netdata Inc.
 # SPDX-License-Identifier: GPL-3.0-or-later
+# Handling for eBPF CO-RE files
 
 include(ExternalProject)
 
diff --git a/packaging/cmake/Modules/NetdataEBPFLegacy.cmake b/packaging/cmake/Modules/NetdataEBPFLegacy.cmake
index 251ef464cd..15b4f9d9eb 100644
--- a/packaging/cmake/Modules/NetdataEBPFLegacy.cmake
+++ b/packaging/cmake/Modules/NetdataEBPFLegacy.cmake
@@ -1,7 +1,5 @@
-# Handling for eBPF legacy programs
-#
-# Copyright (c) 2024 Netdata Inc.
 # SPDX-License-Identifier: GPL-3.0-or-later
+# Handling for eBPF legacy programs
 
 include(ExternalProject)
 include(NetdataUtil)
diff --git a/packaging/cmake/Modules/NetdataFetchContentExtra.cmake b/packaging/cmake/Modules/NetdataFetchContentExtra.cmake
index e82fe413b7..8867268ead 100644
--- a/packaging/cmake/Modules/NetdataFetchContentExtra.cmake
+++ b/packaging/cmake/Modules/NetdataFetchContentExtra.cmake
@@ -1,7 +1,5 @@
-# Extra tools for working with FetchContent on older CMake
-#
-# Copyright (c) 2024 Netdata Inc.
 # SPDX-License-Identifier: GPL-3.0-or-later
+# Extra tools for working with FetchContent on older CMake
 
 # FetchContent_MakeAvailable_NoInstall
 #
diff --git a/packaging/cmake/Modules/NetdataGoTools.cmake b/packaging/cmake/Modules/NetdataGoTools.cmake
index c8b8b9c013..eb290d1e1e 100644
--- a/packaging/cmake/Modules/NetdataGoTools.cmake
+++ b/packaging/cmake/Modules/NetdataGoTools.cmake
@@ -1,8 +1,5 @@
+# SPDX-License-Identifier: GPL-3.0-or-later
 # Macros and functions to assist in working with Go
-#
-# Copyright (c) 2024 Netdata Inc
-#
-# SPDX-License-Identifier: GPL
 
 if(CMAKE_BUILD_TYPE STREQUAL Debug)
     set(GO_LDFLAGS "-X github.com/netdata/netdata/go/plugins/pkg/buildinfo.Version=${NETDATA_VERSION_STRING}")
diff --git a/packaging/cmake/Modules/NetdataJSONC.cmake b/packaging/cmake/Modules/NetdataJSONC.cmake
index db18c14b21..b7684bb94d 100644
--- a/packaging/cmake/Modules/NetdataJSONC.cmake
+++ b/packaging/cmake/Modules/NetdataJSONC.cmake
@@ -1,7 +1,5 @@
-# Functions and macros for handling of JSON-C
-#
-# Copyright (c) 2024 Netdata Inc.
 # SPDX-License-Identifier: GPL-3.0-or-later
+# Functions and macros for handling of JSON-C
 
 # Handle bundling of json-c.
 #
diff --git a/packaging/cmake/Modules/NetdataLibBPF.cmake b/packaging/cmake/Modules/NetdataLibBPF.cmake
index bc41e53362..20261478f9 100644
--- a/packaging/cmake/Modules/NetdataLibBPF.cmake
+++ b/packaging/cmake/Modules/NetdataLibBPF.cmake
@@ -1,7 +1,5 @@
-# Handling for libbpf (used by the eBPF plugin)
-#
-# Copyright (c) 2024 Netdata Inc.
 # SPDX-License-Identifier: GPL-3.0-or-later
+# Handling for libbpf (used by the eBPF plugin)
 
 include(ExternalProject)
 include(NetdataUtil)
diff --git a/packaging/cmake/Modules/NetdataProtobuf.cmake b/packaging/cmake/Modules/NetdataProtobuf.cmake
index 62448440e2..ff50f5d16a 100644
--- a/packaging/cmake/Modules/NetdataProtobuf.cmake
+++ b/packaging/cmake/Modules/NetdataProtobuf.cmake
@@ -1,7 +1,5 @@
-# Macros and functions for handling of Protobuf
-#
-# Copyright (c) 2024 Netdata Inc.
 # SPDX-License-Identifier: GPL-3.0-or-later
+# Macros and functions for handling of Protobuf
 
 # Prepare a vendored copy of Protobuf for use with Netdata.
 function(netdata_bundle_protobuf)
diff --git a/packaging/cmake/Modules/NetdataSentry.cmake b/packaging/cmake/Modules/NetdataSentry.cmake
index b20aeedd5f..d5bbd5fa37 100644
--- a/packaging/cmake/Modules/NetdataSentry.cmake
+++ b/packaging/cmake/Modules/NetdataSentry.cmake
@@ -1,8 +1,6 @@
+# SPDX-License-Identifier: GPL-3.0-or-later
 # Functions and macros for handling of Sentry
 #
-# Copyright (c) 2024 Netdata Inc.
-# SPDX-License-Identifier: GPL-3.0-or-later
-
 # Handle bundling of Sentry.
 #
 # This pulls it in as a sub-project using FetchContent functionality.
diff --git a/packaging/cmake/Modules/NetdataUtil.cmake b/packaging/cmake/Modules/NetdataUtil.cmake
index 0c1d803ea3..02301314a4 100644
--- a/packaging/cmake/Modules/NetdataUtil.cmake
+++ b/packaging/cmake/Modules/NetdataUtil.cmake
@@ -1,7 +1,5 @@
-# Utility functions used by other modules.
-#
-# Copyright (c) 2024 Netdata Inc.
 # SPDX-License-Identifier: GPL-3.0-or-later
+# Utility functions used by other modules.
 
 include_guard()
 
diff --git a/packaging/cmake/Modules/NetdataVersion.cmake b/packaging/cmake/Modules/NetdataVersion.cmake
index b4bdd43b07..c15231b7d4 100644
--- a/packaging/cmake/Modules/NetdataVersion.cmake
+++ b/packaging/cmake/Modules/NetdataVersion.cmake
@@ -1,6 +1,4 @@
-# Copyright (c) 2024 Netdata Inc.
 # SPDX-License-Identifier: GPL-3.0-or-later
-
 # Function to provide information regarding the Netdata version.
 #
 # The high-level logic is (a) use git-describe, (b) fallback to info from
diff --git a/packaging/cmake/Modules/NetdataYAML.cmake b/packaging/cmake/Modules/NetdataYAML.cmake
index 9fc7132545..0d2ac28f5b 100644
--- a/packaging/cmake/Modules/NetdataYAML.cmake
+++ b/packaging/cmake/Modules/NetdataYAML.cmake
@@ -1,7 +1,5 @@
-# Functions and macros for handling of libYAML
-#
-# Copyright (c) 2024 Netdata Inc.
 # SPDX-License-Identifier: GPL-3.0-or-later
+# Functions and macros for handling of libYAML
 
 # Handle bundling of libyaml.
 #
diff --git a/packaging/cmake/pkg-files/copyright b/packaging/cmake/pkg-files/copyright
index 085580ea15..93a865e2b0 100644
--- a/packaging/cmake/pkg-files/copyright
+++ b/packaging/cmake/pkg-files/copyright
@@ -1,10 +1,10 @@
 Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
 Upstream-Name: Netdata
-Upstream-Contact: Costa Tsaousis <costa@tsaousis.gr>
+Upstream-Contact: Netdata Inc. <info@netdata.cloud>
 Source: https://github.com/netdata/netdata
 
 Files: *
-Copyright: 2014-2016, Costa Tsaousis
+Copyright: Copyright 2018-2025 Netdata Inc.
 License: GPL-3+
  On Debian systems, the complete text of the GNU General Public
  License version 3 can be found in /usr/share/common-licenses/GPL-3.
diff --git a/packaging/docker/Dockerfile b/packaging/docker/Dockerfile
index bbc223a205..1eda7e4b98 100644
--- a/packaging/docker/Dockerfile
+++ b/packaging/docker/Dockerfile
@@ -1,5 +1,4 @@
 # SPDX-License-Identifier: GPL-3.0-or-later
-# author  : paulfantom
 
 # This image contains preinstalled dependencies
 # hadolint ignore=DL3007
diff --git a/packaging/docker/run.sh b/packaging/docker/run.sh
index 56a818d2f8..d17c4f241c 100755
--- a/packaging/docker/run.sh
+++ b/packaging/docker/run.sh
@@ -1,12 +1,8 @@
 #!/usr/bin/env bash
-#
-# Entry point script for netdata
-#
-# Copyright: 2018 and later Netdata Inc.
 # SPDX-License-Identifier: GPL-3.0-or-later
 #
-# Author  : Pavlos Emm. Katsoulakis <paul@netdata.cloud>
-# Author  : Austin S. Hemmelgarn <austin@netdata.cloud>
+# Entry point script for netdata
+
 set -e
 
 if [ ! -w / ] && [ "${EUID}" -eq 0 ]; then
diff --git a/packaging/installer/netdata-uninstaller.sh b/packaging/installer/netdata-uninstaller.sh
index c69bbd56ee..3b438ffc3e 100755
--- a/packaging/installer/netdata-uninstaller.sh
+++ b/packaging/installer/netdata-uninstaller.sh
@@ -1,4 +1,5 @@
 #!/bin/sh
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This is the netdata uninstaller script
 #
@@ -6,11 +7,6 @@
 #  - NETDATA_PREFIX
 #  - NETDATA_ADDED_TO_GROUPS
 #
-# Copyright: SPDX-License-Identifier: GPL-3.0-or-later
-#
-# Author: Paweł Krupa <paulfantom@gmail.com>
-# Author: Pavlos Emm. Katsoulakis <paul@netdata.cloud>
-#
 # Next unused error code: R0005
 
 usage="$(basename "$0") [-h] [-f ] -- program to calculate the answer to life, the universe and everything
diff --git a/packaging/installer/netdata-updater.sh b/packaging/installer/netdata-updater.sh
index 51b5b14aca..a4776aa515 100755
--- a/packaging/installer/netdata-updater.sh
+++ b/packaging/installer/netdata-updater.sh
@@ -1,5 +1,6 @@
 #!/bin/sh
-
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
 # Netdata updater utility
 #
 # Variables needed by script:
@@ -20,13 +21,6 @@
 #
 #  - TMPDIR (set to a usable temporary directory)
 #  - NETDATA_NIGHTLIES_BASEURL (set the base url for downloading the dist tarball)
-#
-# Copyright: 2018-2023 Netdata Inc.
-# SPDX-License-Identifier: GPL-3.0-or-later
-#
-# Author: Paweł Krupa <paulfantom@gmail.com>
-# Author: Pavlos Emm. Katsoulakis <paul@netdata.cloud>
-# Author: Austin S. Hemmelgarn <austin@netdata.cloud>
 
 # Next unused error code: U001D
 
diff --git a/packaging/makeself/install-alpine-packages.sh b/packaging/makeself/install-alpine-packages.sh
index d7974339ee..7e4e4316ea 100755
--- a/packaging/makeself/install-alpine-packages.sh
+++ b/packaging/makeself/install-alpine-packages.sh
@@ -1,11 +1,8 @@
 #!/usr/bin/env sh
+# Copyright: SPDX-License-Identifier: GPL-3.0-or-later
 #
 # Installation script for the alpine host
 # to prepare the static binary
-#
-# Copyright: SPDX-License-Identifier: GPL-3.0-or-later
-#
-# Author: Paul Emm. Katsoulakis <paul@netdata.cloud>
 
 apk update || exit 1
 apk upgrade || exit 1
diff --git a/packaging/makeself/makeself-help-header.txt b/packaging/makeself/makeself-help-header.txt
index 8ed15e2e7f..2c4817ebb1 100644
--- a/packaging/makeself/makeself-help-header.txt
+++ b/packaging/makeself/makeself-help-header.txt
@@ -1,12 +1,11 @@
 
   ^
   |.-.   .-.   .-.   .-.   .  netdata
-  |   '-'   '-'   '-'   '-'   real-time performance monitoring, done right!
+  |   '-'   '-'   '-'   '-'   monitoring and troubleshooting, transformed!
   +----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--->
 
-  (C) Copyright 2017, Costa Tsaousis
-  All rights reserved
-  Released under GPL v3+
+  Copyright 2018-2025 Netdata Inc.
+  SPDX-License-Identifier: GPL-3.0-or-later
 
   You are about to install netdata to this system.
   netdata will be installed at:
diff --git a/packaging/makeself/makeself-license.txt b/packaging/makeself/makeself-license.txt
index 684f16ae7e..0881483243 100644
--- a/packaging/makeself/makeself-license.txt
+++ b/packaging/makeself/makeself-license.txt
@@ -1,12 +1,11 @@
 
   ^
   |.-.   .-.   .-.   .-.   .  netdata
-  |   '-'   '-'   '-'   '-'   real-time performance monitoring, done right!
+  |   '-'   '-'   '-'   '-'   monitoring and troubleshooting, transformed!
   +----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--->
 
-  (C) Copyright 2017-2023, Costa Tsaousis
-  All rights reserved
-  Released under GPL v3+
+  Copyright 2018-2025 Netdata Inc.
+  SPDX-License-Identifier: GPL-3.0-or-later
 
   You are about to install netdata to this system.
   netdata will be installed at:
diff --git a/packaging/makeself/makeself.lsm b/packaging/makeself/makeself.lsm
index 7d6356468e..cb4429726d 100644
--- a/packaging/makeself/makeself.lsm
+++ b/packaging/makeself/makeself.lsm
@@ -1,15 +1,15 @@
 Begin3
 Title:          netdata
 Version:        NETDATA_VERSION
-Description:    netdata is a system for distributed real-time performance and health monitoring.
+Description:    Netdata - Monitoring and troubleshooting, transformed!
                 It provides unparalleled insights, in real-time, of everything happening on the
-                system it runs (including applications such as web and database servers), using
+                systems it runs (including applications such as web and database servers), using
                 modern interactive web dashboards. netdata is fast and efficient, designed to
                 permanently run on all systems (physical & virtual servers, containers, IoT
                 devices), without disrupting their core function.
 Keywords:       real-time performance and health monitoring
-Author:         Costa Tsaousis (costa@tsaousis.gr)
-Maintained-by:  Costa Tsaousis (costa@tsaousis.gr)
+Author:         Netdata Inc.
+Maintained-by:  Netdata Inc.
 Original-site:  https://netdata.cloud/
 Platform:       Unix
 Copying-policy: GPL
diff --git a/packaging/utils/coverity-scan.sh b/packaging/utils/coverity-scan.sh
index ebb82102d5..74b0c5e5c8 100755
--- a/packaging/utils/coverity-scan.sh
+++ b/packaging/utils/coverity-scan.sh
@@ -1,14 +1,9 @@
 #!/usr/bin/env bash
+# SPDX-License-Identifier: GPL-3.0-or-later
+# shellcheck disable=SC1091,SC2230,SC2086
 #
 # Coverity scan script
 #
-# Copyright: SPDX-License-Identifier: GPL-3.0-or-later
-#
-# Author  : Costa Tsaousis (costa@netdata.cloud)
-# Author  : Pawel Krupa (paulfantom)
-# Author  : Pavlos Emm. Katsoulakis (paul@netdata.cloud)
-# shellcheck disable=SC1091,SC2230,SC2086
-
 # To run manually, save configuration to .coverity-scan.conf like this:
 #
 # the repository to report to coverity - devs can set here their own fork
diff --git a/src/aclk/mqtt_websockets/test.c b/src/aclk/mqtt_websockets/test.c
index 59a9f34748..c5aa584978 100644
--- a/src/aclk/mqtt_websockets/test.c
+++ b/src/aclk/mqtt_websockets/test.c
@@ -1,5 +1,4 @@
 // SPDX-License-Identifier: GPL-3.0-only
-// Copyright (C) 2020 Timotej Šiškovič
 
 #include <unistd.h>
 #include <stdio.h>
diff --git a/src/claim/netdata-claim.sh.in b/src/claim/netdata-claim.sh.in
index 15c166e3f3..0c6da59819 100755
--- a/src/claim/netdata-claim.sh.in
+++ b/src/claim/netdata-claim.sh.in
@@ -1,6 +1,4 @@
 #!/bin/sh
-#
-# Copyright (c) 2024 Netdata Inc.
 # SPDX-License-Identifier: GPL-3.0-or-later
 #
 # %%NEW_CLAIMING_METHOD%%
diff --git a/src/collectors/apps.plugin/apps_plugin.c b/src/collectors/apps.plugin/apps_plugin.c
index 1f9386a095..796ca8af68 100644
--- a/src/collectors/apps.plugin/apps_plugin.c
+++ b/src/collectors/apps.plugin/apps_plugin.c
@@ -1,11 +1,5 @@
 // SPDX-License-Identifier: GPL-3.0-or-later
 
-/*
- * netdata apps.plugin
- * (C) Copyright 2023 Netdata Inc.
- * Released under GPL v3+
- */
-
 #include "apps_plugin.h"
 #include "libnetdata/required_dummies.h"
 
@@ -509,7 +503,7 @@ static void parse_args(int argc, char **argv)
             fprintf(stderr,
                     "\n"
                     " netdata apps.plugin %s\n"
-                    " Copyright (C) 2016-2017 Costa Tsaousis <costa@tsaousis.gr>\n"
+                    " Copyright 2018-2025 Netdata Inc.\n"
                     " Released under GNU General Public License v3 or later.\n"
                     " All rights reserved.\n"
                     "\n"
diff --git a/src/collectors/cgroups.plugin/cgroup-name.sh.in b/src/collectors/cgroups.plugin/cgroup-name.sh.in
index 18755b622d..6dc515cc78 100755
--- a/src/collectors/cgroups.plugin/cgroup-name.sh.in
+++ b/src/collectors/cgroups.plugin/cgroup-name.sh.in
@@ -1,13 +1,9 @@
 #!/usr/bin/env bash
-#shellcheck disable=SC2001
-
-# netdata
-# real-time performance and health monitoring, done right!
-# (C) 2023 Netdata Inc.
 # SPDX-License-Identifier: GPL-3.0-or-later
 #
 # Script to find a better name for cgroups
 #
+#shellcheck disable=SC2001
 
 export PATH="${PATH}:/sbin:/usr/sbin:/usr/local/sbin:@sbindir_POST@"
 export LC_ALL=C
diff --git a/src/collectors/cgroups.plugin/cgroup-network-helper.sh.in b/src/collectors/cgroups.plugin/cgroup-network-helper.sh.in
index da9b9162a8..0b074e20bf 100755
--- a/src/collectors/cgroups.plugin/cgroup-network-helper.sh.in
+++ b/src/collectors/cgroups.plugin/cgroup-network-helper.sh.in
@@ -1,11 +1,9 @@
 #!/usr/bin/env bash
-# shellcheck disable=SC1117
-
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
 # cgroup-network-helper.sh
 # detect container and virtual machine interfaces
 #
-# (C) 2023 Netdata Inc.
-# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This script is called as root (by cgroup-network), with either a pid, or a cgroup path.
 # It tries to find all the network interfaces that belong to the same cgroup.
@@ -20,6 +18,7 @@
 #
 # 3. this script, calls virsh to find libvirt network interfaces.
 #
+# shellcheck disable=SC1117
 
 # -----------------------------------------------------------------------------
 
diff --git a/src/collectors/charts.d.plugin/charts.d.plugin.in b/src/collectors/charts.d.plugin/charts.d.plugin.in
index e8018aaffa..cc4773a2b2 100755
--- a/src/collectors/charts.d.plugin/charts.d.plugin.in
+++ b/src/collectors/charts.d.plugin/charts.d.plugin.in
@@ -1,10 +1,5 @@
 #!/usr/bin/env bash
 # SPDX-License-Identifier: GPL-3.0-or-later
-
-# netdata
-# real-time performance and health monitoring, done right!
-# (C) 2017 Costa Tsaousis <costa@tsaousis.gr>
-# GPL v3+
 #
 # charts.d.plugin allows easy development of BASH plugins
 #
diff --git a/src/collectors/charts.d.plugin/example/example.chart.sh b/src/collectors/charts.d.plugin/example/example.chart.sh
index 6bbbcf1d7d..2b56f79f8f 100644
--- a/src/collectors/charts.d.plugin/example/example.chart.sh
+++ b/src/collectors/charts.d.plugin/example/example.chart.sh
@@ -1,11 +1,6 @@
-# shellcheck shell=bash
 # no need for shebang - this file is loaded from charts.d.plugin
 # SPDX-License-Identifier: GPL-3.0-or-later
-
-# netdata
-# real-time performance and health monitoring, done right!
-# (C) 2016 Costa Tsaousis <costa@tsaousis.gr>
-#
+# shellcheck shell=bash
 
 # if this chart is called X.chart.sh, then all functions and global variables
 # must start with X_
diff --git a/src/collectors/charts.d.plugin/example/example.conf b/src/collectors/charts.d.plugin/example/example.conf
index 6232ca5840..81a871da46 100644
--- a/src/collectors/charts.d.plugin/example/example.conf
+++ b/src/collectors/charts.d.plugin/example/example.conf
@@ -1,9 +1,5 @@
 # no need for shebang - this file is loaded from charts.d.plugin
-
-# netdata
-# real-time performance and health monitoring, done right!
-# (C) 2018 Costa Tsaousis <costa@tsaousis.gr>
-# GPL v3+
+# SPDX-License-Identifier: GPL-3.0-or-later
 
 # to enable this chart, you have to set this to 12345
 # (just a demonstration for something that needs to be checked)
diff --git a/src/collectors/charts.d.plugin/libreswan/libreswan.chart.sh b/src/collectors/charts.d.plugin/libreswan/libreswan.chart.sh
index d526f7a917..c9f5ca8a75 100644
--- a/src/collectors/charts.d.plugin/libreswan/libreswan.chart.sh
+++ b/src/collectors/charts.d.plugin/libreswan/libreswan.chart.sh
@@ -1,12 +1,7 @@
-# shellcheck shell=bash disable=SC1117
 # no need for shebang - this file is loaded from charts.d.plugin
 # SPDX-License-Identifier: GPL-3.0-or-later
-
-# netdata
-# real-time performance and health monitoring, done right!
-# (C) 2018 Costa Tsaousis <costa@tsaousis.gr>
+# shellcheck shell=bash disable=SC1117
 #
-
 # _update_every is a special variable - it holds the number of seconds
 # between the calls of the _update() function
 libreswan_update_every=1
diff --git a/src/collectors/charts.d.plugin/libreswan/libreswan.conf b/src/collectors/charts.d.plugin/libreswan/libreswan.conf
index 9b3ee77b73..8a97a8f5f9 100644
--- a/src/collectors/charts.d.plugin/libreswan/libreswan.conf
+++ b/src/collectors/charts.d.plugin/libreswan/libreswan.conf
@@ -1,10 +1,5 @@
 # no need for shebang - this file is loaded from charts.d.plugin
-
-# netdata
-# real-time performance and health monitoring, done right!
-# (C) 2018 Costa Tsaousis <costa@tsaousis.gr>
-# GPL v3+
-#
+# SPDX-License-Identifier: GPL-3.0-or-later
 
 # the data collection frequency
 # if unset, will inherit the netdata update frequency
diff --git a/src/collectors/charts.d.plugin/opensips/opensips.chart.sh b/src/collectors/charts.d.plugin/opensips/opensips.chart.sh
index 02401fd592..7fc6de62d6 100644
--- a/src/collectors/charts.d.plugin/opensips/opensips.chart.sh
+++ b/src/collectors/charts.d.plugin/opensips/opensips.chart.sh
@@ -1,11 +1,6 @@
-# shellcheck shell=bash disable=SC1117,SC2154,SC2086
 # no need for shebang - this file is loaded from charts.d.plugin
 # SPDX-License-Identifier: GPL-3.0-or-later
-
-# netdata
-# real-time performance and health monitoring, done right!
-# (C) 2016 Costa Tsaousis <costa@tsaousis.gr>
-#
+# shellcheck shell=bash disable=SC1117,SC2154,SC2086
 
 opensips_opts="fifo get_statistics all"
 opensips_cmd=
diff --git a/src/collectors/charts.d.plugin/opensips/opensips.conf b/src/collectors/charts.d.plugin/opensips/opensips.conf
index e25111dce2..183325c095 100644
--- a/src/collectors/charts.d.plugin/opensips/opensips.conf
+++ b/src/collectors/charts.d.plugin/opensips/opensips.conf
@@ -1,9 +1,5 @@
 # no need for shebang - this file is loaded from charts.d.plugin
-
-# netdata
-# real-time performance and health monitoring, done right!
-# (C) 2018 Costa Tsaousis <costa@tsaousis.gr>
-# GPL v3+
+# SPDX-License-Identifier: GPL-3.0-or-later
 
 #opensips_opts="fifo get_statistics all"
 #opensips_cmd=
diff --git a/src/collectors/common-contexts/common-contexts.h b/src/collectors/common-contexts/common-contexts.h
index 4c7e58e7fb..eeab93b142 100644
--- a/src/collectors/common-contexts/common-contexts.h
+++ b/src/collectors/common-contexts/common-contexts.h
@@ -1,39 +1,39 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef NETDATA_COMMON_CONTEXTS_H
-#define NETDATA_COMMON_CONTEXTS_H
-
-#include "../../libnetdata/libnetdata.h"
-#include "../../database/rrd.h"
-
-#ifndef _COMMON_PLUGIN_NAME
-#error You need to set _COMMON_PLUGIN_NAME before including common-contexts.h
-#endif
-
-#ifndef _COMMON_PLUGIN_MODULE_NAME
-#error You need to set _COMMON_PLUGIN_MODULE_NAME before including common-contexts.h
-#endif
-
-#define _COMMON_CONFIG_SECTION "plugin:" _COMMON_PLUGIN_NAME ":" _COMMON_PLUGIN_MODULE_NAME
-
-typedef void (*instance_labels_cb_t)(RRDSET *st, void *data);
-
-#include "system-io.h"
-#include "system-ram.h"
-#include "system-interrupts.h"
-#include "system-processes.h"
-#include "system-ipc.h"
-#include "mem-swap.h"
-#include "mem-pgfaults.h"
-#include "mem-available.h"
-#include "disk-io.h"
-#include "disk-ops.h"
-#include "disk-qops.h"
-#include "disk-util.h"
-#include "disk-busy.h"
-#include "disk-iotime.h"
-#include "disk-await.h"
-#include "disk-svctm.h"
-#include "disk-avgsz.h"
-
-#endif //NETDATA_COMMON_CONTEXTS_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_COMMON_CONTEXTS_H
+#define NETDATA_COMMON_CONTEXTS_H
+
+#include "../../libnetdata/libnetdata.h"
+#include "../../database/rrd.h"
+
+#ifndef _COMMON_PLUGIN_NAME
+#error You need to set _COMMON_PLUGIN_NAME before including common-contexts.h
+#endif
+
+#ifndef _COMMON_PLUGIN_MODULE_NAME
+#error You need to set _COMMON_PLUGIN_MODULE_NAME before including common-contexts.h
+#endif
+
+#define _COMMON_CONFIG_SECTION "plugin:" _COMMON_PLUGIN_NAME ":" _COMMON_PLUGIN_MODULE_NAME
+
+typedef void (*instance_labels_cb_t)(RRDSET *st, void *data);
+
+#include "system-io.h"
+#include "system-ram.h"
+#include "system-interrupts.h"
+#include "system-processes.h"
+#include "system-ipc.h"
+#include "mem-swap.h"
+#include "mem-pgfaults.h"
+#include "mem-available.h"
+#include "disk-io.h"
+#include "disk-ops.h"
+#include "disk-qops.h"
+#include "disk-util.h"
+#include "disk-busy.h"
+#include "disk-iotime.h"
+#include "disk-await.h"
+#include "disk-svctm.h"
+#include "disk-avgsz.h"
+
+#endif //NETDATA_COMMON_CONTEXTS_H
diff --git a/src/collectors/common-contexts/disk-avgsz.h b/src/collectors/common-contexts/disk-avgsz.h
index 16cca247a2..8a1f70337f 100644
--- a/src/collectors/common-contexts/disk-avgsz.h
+++ b/src/collectors/common-contexts/disk-avgsz.h
@@ -1,44 +1,44 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef NETDATA_DISK_AVGSZ_H
-#define NETDATA_DISK_AVGSZ_H
-
-#include "common-contexts.h"
-
-typedef struct {
-    RRDSET *st_avgsz;
-    RRDDIM *rd_avgsz_reads;
-    RRDDIM *rd_avgsz_writes;
-} ND_DISK_AVGSZ;
-
-static inline void common_disk_avgsz(ND_DISK_AVGSZ *d, const char *id, const char *name, uint64_t avg_bytes_read, uint64_t avg_bytes_write, int update_every, instance_labels_cb_t cb, void *data) {
-    if(unlikely(!d->st_avgsz)) {
-        d->st_avgsz = rrdset_create_localhost(
-            "disk_avgsz"
-            , id
-            , name
-            , "io"
-            , "disk.avgsz"
-            , "Average Completed I/O Operation Bandwidth"
-            , "KiB/operation"
-            , _COMMON_PLUGIN_NAME
-            , _COMMON_PLUGIN_MODULE_NAME
-            , NETDATA_CHART_PRIO_DISK_AVGSZ
-            , update_every
-            , RRDSET_TYPE_AREA
-        );
-
-        d->rd_avgsz_reads  = rrddim_add(d->st_avgsz, "reads",  NULL,  1, 1024, RRD_ALGORITHM_ABSOLUTE);
-        d->rd_avgsz_writes = rrddim_add(d->st_avgsz, "writes", NULL, -1, 1024, RRD_ALGORITHM_ABSOLUTE);
-
-        if(cb)
-            cb(d->st_avgsz, data);
-    }
-
-    // this always have to be in base units, so that exporting sends base units to other time-series db
-    rrddim_set_by_pointer(d->st_avgsz, d->rd_avgsz_reads, (collected_number)avg_bytes_read);
-    rrddim_set_by_pointer(d->st_avgsz, d->rd_avgsz_writes, (collected_number)avg_bytes_write);
-    rrdset_done(d->st_avgsz);
-}
-
-#endif //NETDATA_DISK_AVGSZ_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_DISK_AVGSZ_H
+#define NETDATA_DISK_AVGSZ_H
+
+#include "common-contexts.h"
+
+typedef struct {
+    RRDSET *st_avgsz;
+    RRDDIM *rd_avgsz_reads;
+    RRDDIM *rd_avgsz_writes;
+} ND_DISK_AVGSZ;
+
+static inline void common_disk_avgsz(ND_DISK_AVGSZ *d, const char *id, const char *name, uint64_t avg_bytes_read, uint64_t avg_bytes_write, int update_every, instance_labels_cb_t cb, void *data) {
+    if(unlikely(!d->st_avgsz)) {
+        d->st_avgsz = rrdset_create_localhost(
+            "disk_avgsz"
+            , id
+            , name
+            , "io"
+            , "disk.avgsz"
+            , "Average Completed I/O Operation Bandwidth"
+            , "KiB/operation"
+            , _COMMON_PLUGIN_NAME
+            , _COMMON_PLUGIN_MODULE_NAME
+            , NETDATA_CHART_PRIO_DISK_AVGSZ
+            , update_every
+            , RRDSET_TYPE_AREA
+        );
+
+        d->rd_avgsz_reads  = rrddim_add(d->st_avgsz, "reads",  NULL,  1, 1024, RRD_ALGORITHM_ABSOLUTE);
+        d->rd_avgsz_writes = rrddim_add(d->st_avgsz, "writes", NULL, -1, 1024, RRD_ALGORITHM_ABSOLUTE);
+
+        if(cb)
+            cb(d->st_avgsz, data);
+    }
+
+    // this always have to be in base units, so that exporting sends base units to other time-series db
+    rrddim_set_by_pointer(d->st_avgsz, d->rd_avgsz_reads, (collected_number)avg_bytes_read);
+    rrddim_set_by_pointer(d->st_avgsz, d->rd_avgsz_writes, (collected_number)avg_bytes_write);
+    rrdset_done(d->st_avgsz);
+}
+
+#endif //NETDATA_DISK_AVGSZ_H
diff --git a/src/collectors/common-contexts/disk-await.h b/src/collectors/common-contexts/disk-await.h
index b4142569ef..2c4fcb2aaa 100644
--- a/src/collectors/common-contexts/disk-await.h
+++ b/src/collectors/common-contexts/disk-await.h
@@ -1,44 +1,44 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef NETDATA_DISK_AWAIT_H
-#define NETDATA_DISK_AWAIT_H
-
-#include "common-contexts.h"
-
-typedef struct {
-    RRDSET *st_await;
-    RRDDIM *rd_await_reads;
-    RRDDIM *rd_await_writes;
-} ND_DISK_AWAIT;
-
-static inline void common_disk_await(ND_DISK_AWAIT *d, const char *id, const char *name, double read_avg_ms, double write_avg_ms, int update_every, instance_labels_cb_t cb, void *data) {
-    if(unlikely(!d->st_await)) {
-        d->st_await = rrdset_create_localhost(
-            "disk_await"
-            , id
-            , name
-            , "latency"
-            , "disk.await"
-            , "Average Completed I/O Operation Time"
-            , "milliseconds/operation"
-            , _COMMON_PLUGIN_NAME
-            , _COMMON_PLUGIN_MODULE_NAME
-            , NETDATA_CHART_PRIO_DISK_AWAIT
-            , update_every
-            , RRDSET_TYPE_LINE
-        );
-
-        d->rd_await_reads  = rrddim_add(d->st_await, "reads",  NULL,  1, 1000, RRD_ALGORITHM_ABSOLUTE);
-        d->rd_await_writes = rrddim_add(d->st_await, "writes", NULL, -1, 1000, RRD_ALGORITHM_ABSOLUTE);
-
-        if(cb)
-            cb(d->st_await, data);
-    }
-
-    // this always have to be in base units, so that exporting sends base units to other time-series db
-    rrddim_set_by_pointer(d->st_await, d->rd_await_reads, (collected_number)(read_avg_ms * 1000.0));
-    rrddim_set_by_pointer(d->st_await, d->rd_await_writes, (collected_number)(write_avg_ms * 1000.0));
-    rrdset_done(d->st_await);
-}
-
-#endif //NETDATA_DISK_AWAIT_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_DISK_AWAIT_H
+#define NETDATA_DISK_AWAIT_H
+
+#include "common-contexts.h"
+
+typedef struct {
+    RRDSET *st_await;
+    RRDDIM *rd_await_reads;
+    RRDDIM *rd_await_writes;
+} ND_DISK_AWAIT;
+
+static inline void common_disk_await(ND_DISK_AWAIT *d, const char *id, const char *name, double read_avg_ms, double write_avg_ms, int update_every, instance_labels_cb_t cb, void *data) {
+    if(unlikely(!d->st_await)) {
+        d->st_await = rrdset_create_localhost(
+            "disk_await"
+            , id
+            , name
+            , "latency"
+            , "disk.await"
+            , "Average Completed I/O Operation Time"
+            , "milliseconds/operation"
+            , _COMMON_PLUGIN_NAME
+            , _COMMON_PLUGIN_MODULE_NAME
+            , NETDATA_CHART_PRIO_DISK_AWAIT
+            , update_every
+            , RRDSET_TYPE_LINE
+        );
+
+        d->rd_await_reads  = rrddim_add(d->st_await, "reads",  NULL,  1, 1000, RRD_ALGORITHM_ABSOLUTE);
+        d->rd_await_writes = rrddim_add(d->st_await, "writes", NULL, -1, 1000, RRD_ALGORITHM_ABSOLUTE);
+
+        if(cb)
+            cb(d->st_await, data);
+    }
+
+    // this always have to be in base units, so that exporting sends base units to other time-series db
+    rrddim_set_by_pointer(d->st_await, d->rd_await_reads, (collected_number)(read_avg_ms * 1000.0));
+    rrddim_set_by_pointer(d->st_await, d->rd_await_writes, (collected_number)(write_avg_ms * 1000.0));
+    rrdset_done(d->st_await);
+}
+
+#endif //NETDATA_DISK_AWAIT_H
diff --git a/src/collectors/common-contexts/disk-busy.h b/src/collectors/common-contexts/disk-busy.h
index 92679d9ef9..f308065339 100644
--- a/src/collectors/common-contexts/disk-busy.h
+++ b/src/collectors/common-contexts/disk-busy.h
@@ -1,41 +1,41 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef NETDATA_DISK_BUSY_H
-#define NETDATA_DISK_BUSY_H
-
-#include "common-contexts.h"
-
-typedef struct {
-    RRDSET *st_busy;
-    RRDDIM *rd_busy;
-} ND_DISK_BUSY;
-
-static inline void common_disk_busy(ND_DISK_BUSY *d, const char *id, const char *name, uint64_t busy_ms, int update_every, instance_labels_cb_t cb, void *data) {
-    if(unlikely(!d->st_busy)) {
-        d->st_busy = rrdset_create_localhost(
-                "disk_busy"
-                , id
-                , name
-                , "utilization"
-                , "disk.busy"
-                , "Disk Busy Time"
-                , "milliseconds"
-                , _COMMON_PLUGIN_NAME
-                , _COMMON_PLUGIN_MODULE_NAME
-                , NETDATA_CHART_PRIO_DISK_BUSY
-                , update_every
-                , RRDSET_TYPE_AREA
-        );
-
-        d->rd_busy  = rrddim_add(d->st_busy, "busy",  NULL,  1, 1, RRD_ALGORITHM_INCREMENTAL);
-
-        if(cb)
-            cb(d->st_busy, data);
-    }
-
-    // this always have to be in base units, so that exporting sends base units to other time-series db
-    rrddim_set_by_pointer(d->st_busy, d->rd_busy, (collected_number)busy_ms);
-    rrdset_done(d->st_busy);
-}
-
-#endif //NETDATA_DISK_BUSY_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_DISK_BUSY_H
+#define NETDATA_DISK_BUSY_H
+
+#include "common-contexts.h"
+
+typedef struct {
+    RRDSET *st_busy;
+    RRDDIM *rd_busy;
+} ND_DISK_BUSY;
+
+static inline void common_disk_busy(ND_DISK_BUSY *d, const char *id, const char *name, uint64_t busy_ms, int update_every, instance_labels_cb_t cb, void *data) {
+    if(unlikely(!d->st_busy)) {
+        d->st_busy = rrdset_create_localhost(
+                "disk_busy"
+                , id
+                , name
+                , "utilization"
+                , "disk.busy"
+                , "Disk Busy Time"
+                , "milliseconds"
+                , _COMMON_PLUGIN_NAME
+                , _COMMON_PLUGIN_MODULE_NAME
+                , NETDATA_CHART_PRIO_DISK_BUSY
+                , update_every
+                , RRDSET_TYPE_AREA
+        );
+
+        d->rd_busy  = rrddim_add(d->st_busy, "busy",  NULL,  1, 1, RRD_ALGORITHM_INCREMENTAL);
+
+        if(cb)
+            cb(d->st_busy, data);
+    }
+
+    // this always have to be in base units, so that exporting sends base units to other time-series db
+    rrddim_set_by_pointer(d->st_busy, d->rd_busy, (collected_number)busy_ms);
+    rrdset_done(d->st_busy);
+}
+
+#endif //NETDATA_DISK_BUSY_H
diff --git a/src/collectors/common-contexts/disk-io.h b/src/collectors/common-contexts/disk-io.h
index 26f98b9bea..42ab07b706 100644
--- a/src/collectors/common-contexts/disk-io.h
+++ b/src/collectors/common-contexts/disk-io.h
@@ -1,44 +1,44 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef NETDATA_DISK_IO_H
-#define NETDATA_DISK_IO_H
-
-#include "common-contexts.h"
-
-typedef struct {
-    RRDSET *st_io;
-    RRDDIM *rd_io_reads;
-    RRDDIM *rd_io_writes;
-} ND_DISK_IO;
-
-static inline void common_disk_io(ND_DISK_IO *d, const char *id, const char *name, uint64_t bytes_read, uint64_t bytes_write, int update_every, instance_labels_cb_t cb, void *data) {
-    if(unlikely(!d->st_io)) {
-        d->st_io = rrdset_create_localhost(
-            "disk"
-            , id
-            , name
-            , "io"
-            , "disk.io"
-            , "Disk I/O Bandwidth"
-            , "KiB/s"
-            , _COMMON_PLUGIN_NAME
-            , _COMMON_PLUGIN_MODULE_NAME
-            , NETDATA_CHART_PRIO_DISK_IO
-            , update_every
-            , RRDSET_TYPE_AREA
-        );
-
-        d->rd_io_reads  = rrddim_add(d->st_io, "reads",  NULL,  1, 1024, RRD_ALGORITHM_INCREMENTAL);
-        d->rd_io_writes = rrddim_add(d->st_io, "writes", NULL, -1, 1024, RRD_ALGORITHM_INCREMENTAL);
-
-        if(cb)
-            cb(d->st_io, data);
-    }
-
-    // this always have to be in base units, so that exporting sends base units to other time-series db
-    rrddim_set_by_pointer(d->st_io, d->rd_io_reads, (collected_number)bytes_read);
-    rrddim_set_by_pointer(d->st_io, d->rd_io_writes, (collected_number)bytes_write);
-    rrdset_done(d->st_io);
-}
-
-#endif //NETDATA_DISK_IO_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_DISK_IO_H
+#define NETDATA_DISK_IO_H
+
+#include "common-contexts.h"
+
+typedef struct {
+    RRDSET *st_io;
+    RRDDIM *rd_io_reads;
+    RRDDIM *rd_io_writes;
+} ND_DISK_IO;
+
+static inline void common_disk_io(ND_DISK_IO *d, const char *id, const char *name, uint64_t bytes_read, uint64_t bytes_write, int update_every, instance_labels_cb_t cb, void *data) {
+    if(unlikely(!d->st_io)) {
+        d->st_io = rrdset_create_localhost(
+            "disk"
+            , id
+            , name
+            , "io"
+            , "disk.io"
+            , "Disk I/O Bandwidth"
+            , "KiB/s"
+            , _COMMON_PLUGIN_NAME
+            , _COMMON_PLUGIN_MODULE_NAME
+            , NETDATA_CHART_PRIO_DISK_IO
+            , update_every
+            , RRDSET_TYPE_AREA
+        );
+
+        d->rd_io_reads  = rrddim_add(d->st_io, "reads",  NULL,  1, 1024, RRD_ALGORITHM_INCREMENTAL);
+        d->rd_io_writes = rrddim_add(d->st_io, "writes", NULL, -1, 1024, RRD_ALGORITHM_INCREMENTAL);
+
+        if(cb)
+            cb(d->st_io, data);
+    }
+
+    // this always have to be in base units, so that exporting sends base units to other time-series db
+    rrddim_set_by_pointer(d->st_io, d->rd_io_reads, (collected_number)bytes_read);
+    rrddim_set_by_pointer(d->st_io, d->rd_io_writes, (collected_number)bytes_write);
+    rrdset_done(d->st_io);
+}
+
+#endif //NETDATA_DISK_IO_H
diff --git a/src/collectors/common-contexts/disk-iotime.h b/src/collectors/common-contexts/disk-iotime.h
index 29707287a4..f355ecf0d1 100644
--- a/src/collectors/common-contexts/disk-iotime.h
+++ b/src/collectors/common-contexts/disk-iotime.h
@@ -1,44 +1,44 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef NETDATA_DISK_IOTIME_H
-#define NETDATA_DISK_IOTIME_H
-
-#include "common-contexts.h"
-
-typedef struct {
-    RRDSET *st_iotime;
-    RRDDIM *rd_reads_ms;
-    RRDDIM *rd_writes_ms;
-} ND_DISK_IOTIME;
-
-static inline void common_disk_iotime(ND_DISK_IOTIME *d, const char *id, const char *name, uint64_t reads_ms, uint64_t writes_ms, int update_every, instance_labels_cb_t cb, void *data) {
-    if(unlikely(!d->st_iotime)) {
-        d->st_iotime = rrdset_create_localhost(
-                "disk_iotime"
-                , id
-                , name
-                , "utilization"
-                , "disk.iotime"
-                , "Disk Total I/O Time"
-                , "milliseconds/s"
-                , _COMMON_PLUGIN_NAME
-                , _COMMON_PLUGIN_MODULE_NAME
-                , NETDATA_CHART_PRIO_DISK_IOTIME
-                , update_every
-                , RRDSET_TYPE_AREA
-        );
-
-        d->rd_reads_ms  = rrddim_add(d->st_iotime, "reads", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
-        d->rd_writes_ms = rrddim_add(d->st_iotime, "writes", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
-
-        if(cb)
-            cb(d->st_iotime, data);
-    }
-
-    // this always have to be in base units, so that exporting sends base units to other time-series db
-    rrddim_set_by_pointer(d->st_iotime, d->rd_reads_ms, (collected_number)reads_ms);
-    rrddim_set_by_pointer(d->st_iotime, d->rd_writes_ms, (collected_number)writes_ms);
-    rrdset_done(d->st_iotime);
-}
-
-#endif //NETDATA_DISK_IOTIME_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_DISK_IOTIME_H
+#define NETDATA_DISK_IOTIME_H
+
+#include "common-contexts.h"
+
+typedef struct {
+    RRDSET *st_iotime;
+    RRDDIM *rd_reads_ms;
+    RRDDIM *rd_writes_ms;
+} ND_DISK_IOTIME;
+
+static inline void common_disk_iotime(ND_DISK_IOTIME *d, const char *id, const char *name, uint64_t reads_ms, uint64_t writes_ms, int update_every, instance_labels_cb_t cb, void *data) {
+    if(unlikely(!d->st_iotime)) {
+        d->st_iotime = rrdset_create_localhost(
+                "disk_iotime"
+                , id
+                , name
+                , "utilization"
+                , "disk.iotime"
+                , "Disk Total I/O Time"
+                , "milliseconds/s"
+                , _COMMON_PLUGIN_NAME
+                , _COMMON_PLUGIN_MODULE_NAME
+                , NETDATA_CHART_PRIO_DISK_IOTIME
+                , update_every
+                , RRDSET_TYPE_AREA
+        );
+
+        d->rd_reads_ms  = rrddim_add(d->st_iotime, "reads", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
+        d->rd_writes_ms = rrddim_add(d->st_iotime, "writes", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
+
+        if(cb)
+            cb(d->st_iotime, data);
+    }
+
+    // this always have to be in base units, so that exporting sends base units to other time-series db
+    rrddim_set_by_pointer(d->st_iotime, d->rd_reads_ms, (collected_number)reads_ms);
+    rrddim_set_by_pointer(d->st_iotime, d->rd_writes_ms, (collected_number)writes_ms);
+    rrdset_done(d->st_iotime);
+}
+
+#endif //NETDATA_DISK_IOTIME_H
diff --git a/src/collectors/common-contexts/disk-ops.h b/src/collectors/common-contexts/disk-ops.h
index 6e1ac46901..e493f446e7 100644
--- a/src/collectors/common-contexts/disk-ops.h
+++ b/src/collectors/common-contexts/disk-ops.h
@@ -1,44 +1,44 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef NETDATA_DISK_OPS_H
-#define NETDATA_DISK_OPS_H
-
-#include "common-contexts.h"
-
-typedef struct {
-    RRDSET *st_ops;
-    RRDDIM *rd_ops_reads;
-    RRDDIM *rd_ops_writes;
-} ND_DISK_OPS;
-
-static inline void common_disk_ops(ND_DISK_OPS *d, const char *id, const char *name, uint64_t ops_read, uint64_t ops_write, int update_every, instance_labels_cb_t cb, void *data) {
-    if(unlikely(!d->st_ops)) {
-        d->st_ops = rrdset_create_localhost(
-                "disk_ops"
-                , id
-                , name
-                , "ops"
-                , "disk.ops"
-                , "Disk Completed I/O Operations"
-                , "operations/s"
-                , _COMMON_PLUGIN_NAME
-                , _COMMON_PLUGIN_MODULE_NAME
-                , NETDATA_CHART_PRIO_DISK_OPS
-                , update_every
-                , RRDSET_TYPE_LINE
-        );
-
-        d->rd_ops_reads  = rrddim_add(d->st_ops, "reads",  NULL,  1, 1, RRD_ALGORITHM_INCREMENTAL);
-        d->rd_ops_writes = rrddim_add(d->st_ops, "writes", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
-
-        if(cb)
-            cb(d->st_ops, data);
-    }
-
-    // this always have to be in base units, so that exporting sends base units to other time-series db
-    rrddim_set_by_pointer(d->st_ops, d->rd_ops_reads, (collected_number)ops_read);
-    rrddim_set_by_pointer(d->st_ops, d->rd_ops_writes, (collected_number)ops_write);
-    rrdset_done(d->st_ops);
-}
-
-#endif //NETDATA_DISK_OPS_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_DISK_OPS_H
+#define NETDATA_DISK_OPS_H
+
+#include "common-contexts.h"
+
+typedef struct {
+    RRDSET *st_ops;
+    RRDDIM *rd_ops_reads;
+    RRDDIM *rd_ops_writes;
+} ND_DISK_OPS;
+
+static inline void common_disk_ops(ND_DISK_OPS *d, const char *id, const char *name, uint64_t ops_read, uint64_t ops_write, int update_every, instance_labels_cb_t cb, void *data) {
+    if(unlikely(!d->st_ops)) {
+        d->st_ops = rrdset_create_localhost(
+                "disk_ops"
+                , id
+                , name
+                , "ops"
+                , "disk.ops"
+                , "Disk Completed I/O Operations"
+                , "operations/s"
+                , _COMMON_PLUGIN_NAME
+                , _COMMON_PLUGIN_MODULE_NAME
+                , NETDATA_CHART_PRIO_DISK_OPS
+                , update_every
+                , RRDSET_TYPE_LINE
+        );
+
+        d->rd_ops_reads  = rrddim_add(d->st_ops, "reads",  NULL,  1, 1, RRD_ALGORITHM_INCREMENTAL);
+        d->rd_ops_writes = rrddim_add(d->st_ops, "writes", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
+
+        if(cb)
+            cb(d->st_ops, data);
+    }
+
+    // this always have to be in base units, so that exporting sends base units to other time-series db
+    rrddim_set_by_pointer(d->st_ops, d->rd_ops_reads, (collected_number)ops_read);
+    rrddim_set_by_pointer(d->st_ops, d->rd_ops_writes, (collected_number)ops_write);
+    rrdset_done(d->st_ops);
+}
+
+#endif //NETDATA_DISK_OPS_H
diff --git a/src/collectors/common-contexts/disk-qops.h b/src/collectors/common-contexts/disk-qops.h
index 89f38cb27e..ae41e70a7b 100644
--- a/src/collectors/common-contexts/disk-qops.h
+++ b/src/collectors/common-contexts/disk-qops.h
@@ -1,41 +1,41 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef NETDATA_DISK_QOPS_H
-#define NETDATA_DISK_QOPS_H
-
-#include "common-contexts.h"
-
-typedef struct {
-    RRDSET *st_qops;
-    RRDDIM *rd_qops;
-} ND_DISK_QOPS;
-
-static inline void common_disk_qops(ND_DISK_QOPS *d, const char *id, const char *name, uint64_t queued_ops, int update_every, instance_labels_cb_t cb, void *data) {
-    if(unlikely(!d->st_qops)) {
-        d->st_qops = rrdset_create_localhost(
-                "disk_qops"
-                , id
-                , name
-                , "ops"
-                , "disk.qops"
-                , "Disk Current I/O Operations"
-                , "operations"
-                , _COMMON_PLUGIN_NAME
-                , _COMMON_PLUGIN_MODULE_NAME
-                , NETDATA_CHART_PRIO_DISK_QOPS
-                , update_every
-                , RRDSET_TYPE_LINE
-        );
-
-        d->rd_qops  = rrddim_add(d->st_qops, "operations", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
-
-        if(cb)
-            cb(d->st_qops, data);
-    }
-
-    // this always have to be in base units, so that exporting sends base units to other time-series db
-    rrddim_set_by_pointer(d->st_qops, d->rd_qops, (collected_number)queued_ops);
-    rrdset_done(d->st_qops);
-}
-
-#endif //NETDATA_DISK_QOPS_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_DISK_QOPS_H
+#define NETDATA_DISK_QOPS_H
+
+#include "common-contexts.h"
+
+typedef struct {
+    RRDSET *st_qops;
+    RRDDIM *rd_qops;
+} ND_DISK_QOPS;
+
+static inline void common_disk_qops(ND_DISK_QOPS *d, const char *id, const char *name, uint64_t queued_ops, int update_every, instance_labels_cb_t cb, void *data) {
+    if(unlikely(!d->st_qops)) {
+        d->st_qops = rrdset_create_localhost(
+                "disk_qops"
+                , id
+                , name
+                , "ops"
+                , "disk.qops"
+                , "Disk Current I/O Operations"
+                , "operations"
+                , _COMMON_PLUGIN_NAME
+                , _COMMON_PLUGIN_MODULE_NAME
+                , NETDATA_CHART_PRIO_DISK_QOPS
+                , update_every
+                , RRDSET_TYPE_LINE
+        );
+
+        d->rd_qops  = rrddim_add(d->st_qops, "operations", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
+
+        if(cb)
+            cb(d->st_qops, data);
+    }
+
+    // this always have to be in base units, so that exporting sends base units to other time-series db
+    rrddim_set_by_pointer(d->st_qops, d->rd_qops, (collected_number)queued_ops);
+    rrdset_done(d->st_qops);
+}
+
+#endif //NETDATA_DISK_QOPS_H
diff --git a/src/collectors/common-contexts/disk-svctm.h b/src/collectors/common-contexts/disk-svctm.h
index f1d07c150a..85796cb03b 100644
--- a/src/collectors/common-contexts/disk-svctm.h
+++ b/src/collectors/common-contexts/disk-svctm.h
@@ -1,41 +1,41 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef NETDATA_DISK_SVCTM_H
-#define NETDATA_DISK_SVCTM_H
-
-#include "common-contexts.h"
-
-typedef struct {
-    RRDSET *st_svctm;
-    RRDDIM *rd_svctm;
-} ND_DISK_SVCTM;
-
-static inline void common_disk_svctm(ND_DISK_SVCTM *d, const char *id, const char *name, double svctm_ms, int update_every, instance_labels_cb_t cb, void *data) {
-    if(unlikely(!d->st_svctm)) {
-        d->st_svctm = rrdset_create_localhost(
-            "disk_svctm"
-            , id
-            , name
-            , "latency"
-            , "disk.svctm"
-            , "Average Service Time"
-            , "milliseconds/operation"
-            , _COMMON_PLUGIN_NAME
-            , _COMMON_PLUGIN_MODULE_NAME
-            , NETDATA_CHART_PRIO_DISK_SVCTM
-            , update_every
-            , RRDSET_TYPE_LINE
-        );
-
-        d->rd_svctm  = rrddim_add(d->st_svctm, "svctm", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
-
-        if(cb)
-            cb(d->st_svctm, data);
-    }
-
-    // this always have to be in base units, so that exporting sends base units to other time-series db
-    rrddim_set_by_pointer(d->st_svctm, d->rd_svctm, (collected_number)(svctm_ms * 1000.0));
-    rrdset_done(d->st_svctm);
-}
-
-#endif //NETDATA_DISK_SVCTM_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_DISK_SVCTM_H
+#define NETDATA_DISK_SVCTM_H
+
+#include "common-contexts.h"
+
+typedef struct {
+    RRDSET *st_svctm;
+    RRDDIM *rd_svctm;
+} ND_DISK_SVCTM;
+
+static inline void common_disk_svctm(ND_DISK_SVCTM *d, const char *id, const char *name, double svctm_ms, int update_every, instance_labels_cb_t cb, void *data) {
+    if(unlikely(!d->st_svctm)) {
+        d->st_svctm = rrdset_create_localhost(
+            "disk_svctm"
+            , id
+            , name
+            , "latency"
+            , "disk.svctm"
+            , "Average Service Time"
+            , "milliseconds/operation"
+            , _COMMON_PLUGIN_NAME
+            , _COMMON_PLUGIN_MODULE_NAME
+            , NETDATA_CHART_PRIO_DISK_SVCTM
+            , update_every
+            , RRDSET_TYPE_LINE
+        );
+
+        d->rd_svctm  = rrddim_add(d->st_svctm, "svctm", NULL, 1, 1000, RRD_ALGORITHM_ABSOLUTE);
+
+        if(cb)
+            cb(d->st_svctm, data);
+    }
+
+    // this always have to be in base units, so that exporting sends base units to other time-series db
+    rrddim_set_by_pointer(d->st_svctm, d->rd_svctm, (collected_number)(svctm_ms * 1000.0));
+    rrdset_done(d->st_svctm);
+}
+
+#endif //NETDATA_DISK_SVCTM_H
diff --git a/src/collectors/common-contexts/disk-util.h b/src/collectors/common-contexts/disk-util.h
index 8733975f63..26005878ff 100644
--- a/src/collectors/common-contexts/disk-util.h
+++ b/src/collectors/common-contexts/disk-util.h
@@ -1,41 +1,41 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef NETDATA_DISK_UTIL_H
-#define NETDATA_DISK_UTIL_H
-
-#include "common-contexts.h"
-
-typedef struct {
-    RRDSET *st_util;
-    RRDDIM *rd_util;
-} ND_DISK_UTIL;
-
-static inline void common_disk_util(ND_DISK_UTIL *d, const char *id, const char *name, uint64_t percent, int update_every, instance_labels_cb_t cb, void *data) {
-    if(unlikely(!d->st_util)) {
-        d->st_util = rrdset_create_localhost(
-                "disk_util"
-                , id
-                , name
-                , "utilization"
-                , "disk.util"
-                , "Disk Utilization Time"
-                , "% of time working"
-                , _COMMON_PLUGIN_NAME
-                , _COMMON_PLUGIN_MODULE_NAME
-                , NETDATA_CHART_PRIO_DISK_UTIL
-                , update_every
-                , RRDSET_TYPE_AREA
-        );
-
-        d->rd_util  = rrddim_add(d->st_util, "utilization",  NULL,  1, 1, RRD_ALGORITHM_ABSOLUTE);
-
-        if(cb)
-            cb(d->st_util, data);
-    }
-
-    // this always have to be in base units, so that exporting sends base units to other time-series db
-    rrddim_set_by_pointer(d->st_util, d->rd_util, (collected_number)percent);
-    rrdset_done(d->st_util);
-}
-
-#endif //NETDATA_DISK_UTIL_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_DISK_UTIL_H
+#define NETDATA_DISK_UTIL_H
+
+#include "common-contexts.h"
+
+typedef struct {
+    RRDSET *st_util;
+    RRDDIM *rd_util;
+} ND_DISK_UTIL;
+
+static inline void common_disk_util(ND_DISK_UTIL *d, const char *id, const char *name, uint64_t percent, int update_every, instance_labels_cb_t cb, void *data) {
+    if(unlikely(!d->st_util)) {
+        d->st_util = rrdset_create_localhost(
+                "disk_util"
+                , id
+                , name
+                , "utilization"
+                , "disk.util"
+                , "Disk Utilization Time"
+                , "% of time working"
+                , _COMMON_PLUGIN_NAME
+                , _COMMON_PLUGIN_MODULE_NAME
+                , NETDATA_CHART_PRIO_DISK_UTIL
+                , update_every
+                , RRDSET_TYPE_AREA
+        );
+
+        d->rd_util  = rrddim_add(d->st_util, "utilization",  NULL,  1, 1, RRD_ALGORITHM_ABSOLUTE);
+
+        if(cb)
+            cb(d->st_util, data);
+    }
+
+    // this always have to be in base units, so that exporting sends base units to other time-series db
+    rrddim_set_by_pointer(d->st_util, d->rd_util, (collected_number)percent);
+    rrdset_done(d->st_util);
+}
+
+#endif //NETDATA_DISK_UTIL_H
diff --git a/src/collectors/common-contexts/mem-available.h b/src/collectors/common-contexts/mem-available.h
index 3f763fe18a..f5cb6d9382 100644
--- a/src/collectors/common-contexts/mem-available.h
+++ b/src/collectors/common-contexts/mem-available.h
@@ -1,35 +1,35 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef NETDATA_MEM_AVAILABLE_H
-#define NETDATA_MEM_AVAILABLE_H
-#include "common-contexts.h"
-
-static inline void common_mem_available(uint64_t available_bytes, int update_every) {
-    static RRDSET *st_mem_available = NULL;
-    static RRDDIM *rd_avail = NULL;
-
-    if(unlikely(!st_mem_available)) {
-        st_mem_available = rrdset_create_localhost(
-            "mem"
-            , "available"
-            , NULL
-            , "overview"
-            , NULL
-            , "Available RAM for applications"
-            , "MiB"
-            , _COMMON_PLUGIN_NAME
-            , _COMMON_PLUGIN_MODULE_NAME
-            , NETDATA_CHART_PRIO_MEM_SYSTEM_AVAILABLE
-            , update_every
-            , RRDSET_TYPE_AREA
-        );
-
-        rd_avail   = rrddim_add(st_mem_available, "avail", NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE);
-    }
-
-    // this always have to be in base units, so that exporting sends base units to other time-series db
-    rrddim_set_by_pointer(st_mem_available, rd_avail, (collected_number)available_bytes);
-    rrdset_done(st_mem_available);
-}
-
-#endif //NETDATA_MEM_AVAILABLE_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_MEM_AVAILABLE_H
+#define NETDATA_MEM_AVAILABLE_H
+#include "common-contexts.h"
+
+static inline void common_mem_available(uint64_t available_bytes, int update_every) {
+    static RRDSET *st_mem_available = NULL;
+    static RRDDIM *rd_avail = NULL;
+
+    if(unlikely(!st_mem_available)) {
+        st_mem_available = rrdset_create_localhost(
+            "mem"
+            , "available"
+            , NULL
+            , "overview"
+            , NULL
+            , "Available RAM for applications"
+            , "MiB"
+            , _COMMON_PLUGIN_NAME
+            , _COMMON_PLUGIN_MODULE_NAME
+            , NETDATA_CHART_PRIO_MEM_SYSTEM_AVAILABLE
+            , update_every
+            , RRDSET_TYPE_AREA
+        );
+
+        rd_avail   = rrddim_add(st_mem_available, "avail", NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE);
+    }
+
+    // this always have to be in base units, so that exporting sends base units to other time-series db
+    rrddim_set_by_pointer(st_mem_available, rd_avail, (collected_number)available_bytes);
+    rrdset_done(st_mem_available);
+}
+
+#endif //NETDATA_MEM_AVAILABLE_H
diff --git a/src/collectors/common-contexts/mem-pgfaults.h b/src/collectors/common-contexts/mem-pgfaults.h
index 8a10449e6a..763f11fe59 100644
--- a/src/collectors/common-contexts/mem-pgfaults.h
+++ b/src/collectors/common-contexts/mem-pgfaults.h
@@ -1,38 +1,38 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef NETDATA_MEM_PGFAULTS_H
-#define NETDATA_MEM_PGFAULTS_H
-
-#include "common-contexts.h"
-
-static inline void common_mem_pgfaults(uint64_t minor, uint64_t major, int update_every) {
-    static RRDSET *st_pgfaults = NULL;
-    static RRDDIM *rd_minor = NULL, *rd_major = NULL;
-
-    if(unlikely(!st_pgfaults)) {
-        st_pgfaults = rrdset_create_localhost(
-            "mem"
-            , "pgfaults"
-            , NULL
-            , "page faults"
-            , NULL
-            , "Memory Page Faults"
-            , "faults/s"
-            , _COMMON_PLUGIN_NAME
-            , _COMMON_PLUGIN_MODULE_NAME
-            , NETDATA_CHART_PRIO_MEM_SYSTEM_PGFAULTS
-            , update_every
-            , RRDSET_TYPE_LINE
-        );
-
-        rd_minor = rrddim_add(st_pgfaults, "minor", NULL,  1, 1, RRD_ALGORITHM_INCREMENTAL);
-        rd_major = rrddim_add(st_pgfaults, "major", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
-    }
-
-    // this always have to be in base units, so that exporting sends base units to other time-series db
-    rrddim_set_by_pointer(st_pgfaults, rd_minor, minor);
-    rrddim_set_by_pointer(st_pgfaults, rd_major, major);
-    rrdset_done(st_pgfaults);
-}
-
-#endif //NETDATA_MEM_PGFAULTS_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_MEM_PGFAULTS_H
+#define NETDATA_MEM_PGFAULTS_H
+
+#include "common-contexts.h"
+
+static inline void common_mem_pgfaults(uint64_t minor, uint64_t major, int update_every) {
+    static RRDSET *st_pgfaults = NULL;
+    static RRDDIM *rd_minor = NULL, *rd_major = NULL;
+
+    if(unlikely(!st_pgfaults)) {
+        st_pgfaults = rrdset_create_localhost(
+            "mem"
+            , "pgfaults"
+            , NULL
+            , "page faults"
+            , NULL
+            , "Memory Page Faults"
+            , "faults/s"
+            , _COMMON_PLUGIN_NAME
+            , _COMMON_PLUGIN_MODULE_NAME
+            , NETDATA_CHART_PRIO_MEM_SYSTEM_PGFAULTS
+            , update_every
+            , RRDSET_TYPE_LINE
+        );
+
+        rd_minor = rrddim_add(st_pgfaults, "minor", NULL,  1, 1, RRD_ALGORITHM_INCREMENTAL);
+        rd_major = rrddim_add(st_pgfaults, "major", NULL, -1, 1, RRD_ALGORITHM_INCREMENTAL);
+    }
+
+    // this always have to be in base units, so that exporting sends base units to other time-series db
+    rrddim_set_by_pointer(st_pgfaults, rd_minor, minor);
+    rrddim_set_by_pointer(st_pgfaults, rd_major, major);
+    rrdset_done(st_pgfaults);
+}
+
+#endif //NETDATA_MEM_PGFAULTS_H
diff --git a/src/collectors/common-contexts/mem-swap.h b/src/collectors/common-contexts/mem-swap.h
index d4c0cfc892..96bce46151 100644
--- a/src/collectors/common-contexts/mem-swap.h
+++ b/src/collectors/common-contexts/mem-swap.h
@@ -1,41 +1,41 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#include "common-contexts.h"
-
-static inline void common_mem_swap(uint64_t free_bytes, uint64_t used_bytes, int update_every) {
-    static RRDSET *st_system_swap = NULL;
-    static RRDDIM *rd_free = NULL, *rd_used = NULL;
-
-    if (free_bytes == 0 && used_bytes == 0 && st_system_swap) {
-        rrdset_is_obsolete___safe_from_collector_thread(st_system_swap);
-        st_system_swap = NULL;
-        rd_free = NULL;
-        rd_used = NULL;
-        return;
-    }
-
-    if(unlikely(!st_system_swap)) {
-        st_system_swap = rrdset_create_localhost(
-            "mem"
-            , "swap"
-            , NULL
-            , "swap"
-            , NULL
-            , "System Swap"
-            , "MiB"
-            , _COMMON_PLUGIN_NAME
-            , _COMMON_PLUGIN_MODULE_NAME
-            , NETDATA_CHART_PRIO_MEM_SWAP
-            , update_every
-            , RRDSET_TYPE_STACKED
-        );
-
-        rd_free = rrddim_add(st_system_swap, "free",    NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE);
-        rd_used = rrddim_add(st_system_swap, "used",    NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE);
-    }
-
-    // this always have to be in base units, so that exporting sends base units to other time-series db
-    rrddim_set_by_pointer(st_system_swap, rd_used, (collected_number)used_bytes);
-    rrddim_set_by_pointer(st_system_swap, rd_free, (collected_number)free_bytes);
-    rrdset_done(st_system_swap);
-}
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#include "common-contexts.h"
+
+static inline void common_mem_swap(uint64_t free_bytes, uint64_t used_bytes, int update_every) {
+    static RRDSET *st_system_swap = NULL;
+    static RRDDIM *rd_free = NULL, *rd_used = NULL;
+
+    if (free_bytes == 0 && used_bytes == 0 && st_system_swap) {
+        rrdset_is_obsolete___safe_from_collector_thread(st_system_swap);
+        st_system_swap = NULL;
+        rd_free = NULL;
+        rd_used = NULL;
+        return;
+    }
+
+    if(unlikely(!st_system_swap)) {
+        st_system_swap = rrdset_create_localhost(
+            "mem"
+            , "swap"
+            , NULL
+            , "swap"
+            , NULL
+            , "System Swap"
+            , "MiB"
+            , _COMMON_PLUGIN_NAME
+            , _COMMON_PLUGIN_MODULE_NAME
+            , NETDATA_CHART_PRIO_MEM_SWAP
+            , update_every
+            , RRDSET_TYPE_STACKED
+        );
+
+        rd_free = rrddim_add(st_system_swap, "free",    NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE);
+        rd_used = rrddim_add(st_system_swap, "used",    NULL, 1, 1024 * 1024, RRD_ALGORITHM_ABSOLUTE);
+    }
+
+    // this always have to be in base units, so that exporting sends base units to other time-series db
+    rrddim_set_by_pointer(st_system_swap, rd_used, (collected_number)used_bytes);
+    rrddim_set_by_pointer(st_system_swap, rd_free, (collected_number)free_bytes);
+    rrdset_done(st_system_swap);
+}
diff --git a/src/collectors/common-contexts/system-interrupts.h b/src/collectors/common-contexts/system-interrupts.h
index 4b78e94694..aae0bfb0e8 100644
--- a/src/collectors/common-contexts/system-interrupts.h
+++ b/src/collectors/common-contexts/system-interrupts.h
@@ -1,37 +1,37 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef NETDATA_SYSTEM_INTERRUPTS_H
-#define NETDATA_SYSTEM_INTERRUPTS_H
-
-#include "common-contexts.h"
-
-#define _
-
-static inline void common_interrupts(uint64_t interrupts, int update_every, char *ext_module) {
-    static RRDSET *st_intr = NULL;
-    static RRDDIM *rd_interrupts = NULL;
-
-    char *module =  (!ext_module) ? _COMMON_PLUGIN_MODULE_NAME: ext_module;
-
-    if(unlikely(!st_intr)) {
-        st_intr = rrdset_create_localhost( "system"
-                                          , "intr"
-                                          , NULL
-                                          , "interrupts"
-                                          , NULL
-                                          , "CPU Interrupts"
-                                          , "interrupts/s"
-                                          , _COMMON_PLUGIN_NAME
-                                          , module
-                                          , NETDATA_CHART_PRIO_SYSTEM_INTR
-                                          , update_every
-                                          , RRDSET_TYPE_LINE);
-
-        rd_interrupts = rrddim_add(st_intr, "interrupts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
-    }
-
-    rrddim_set_by_pointer(st_intr, rd_interrupts, (collected_number)interrupts);
-    rrdset_done(st_intr);
-}
-
-#endif //NETDATA_SYSTEM_INTERRUPTS_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_SYSTEM_INTERRUPTS_H
+#define NETDATA_SYSTEM_INTERRUPTS_H
+
+#include "common-contexts.h"
+
+#define _
+
+static inline void common_interrupts(uint64_t interrupts, int update_every, char *ext_module) {
+    static RRDSET *st_intr = NULL;
+    static RRDDIM *rd_interrupts = NULL;
+
+    char *module =  (!ext_module) ? _COMMON_PLUGIN_MODULE_NAME: ext_module;
+
+    if(unlikely(!st_intr)) {
+        st_intr = rrdset_create_localhost( "system"
+                                          , "intr"
+                                          , NULL
+                                          , "interrupts"
+                                          , NULL
+                                          , "CPU Interrupts"
+                                          , "interrupts/s"
+                                          , _COMMON_PLUGIN_NAME
+                                          , module
+                                          , NETDATA_CHART_PRIO_SYSTEM_INTR
+                                          , update_every
+                                          , RRDSET_TYPE_LINE);
+
+        rd_interrupts = rrddim_add(st_intr, "interrupts", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
+    }
+
+    rrddim_set_by_pointer(st_intr, rd_interrupts, (collected_number)interrupts);
+    rrdset_done(st_intr);
+}
+
+#endif //NETDATA_SYSTEM_INTERRUPTS_H
diff --git a/src/collectors/common-contexts/system-io.h b/src/collectors/common-contexts/system-io.h
index 84440c9b84..10a063817c 100644
--- a/src/collectors/common-contexts/system-io.h
+++ b/src/collectors/common-contexts/system-io.h
@@ -1,38 +1,38 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef NETDATA_SYSTEM_IO_H
-#define NETDATA_SYSTEM_IO_H
-
-#include "common-contexts.h"
-
-static inline void common_system_io(uint64_t read_bytes, uint64_t write_bytes, int update_every) {
-    static RRDSET *st_io = NULL;
-    static RRDDIM *rd_in = NULL, *rd_out = NULL;
-
-    if(unlikely(!st_io)) {
-        st_io = rrdset_create_localhost(
-            "system"
-            , "io"
-            , NULL
-            , "disk"
-            , NULL
-            , "Disk I/O"
-            , "KiB/s"
-            , _COMMON_PLUGIN_NAME
-            , _COMMON_PLUGIN_MODULE_NAME
-            , NETDATA_CHART_PRIO_SYSTEM_IO
-            , update_every
-            , RRDSET_TYPE_AREA
-        );
-
-        rd_in  = rrddim_add(st_io, "in",  "reads",  1, 1024, RRD_ALGORITHM_INCREMENTAL);
-        rd_out = rrddim_add(st_io, "out", "writes", -1, 1024, RRD_ALGORITHM_INCREMENTAL);
-    }
-
-    // this always have to be in base units, so that exporting sends base units to other time-series db
-    rrddim_set_by_pointer(st_io, rd_in, (collected_number)read_bytes);
-    rrddim_set_by_pointer(st_io, rd_out, (collected_number)write_bytes);
-    rrdset_done(st_io);
-}
-
-#endif //NETDATA_SYSTEM_IO_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_SYSTEM_IO_H
+#define NETDATA_SYSTEM_IO_H
+
+#include "common-contexts.h"
+
+static inline void common_system_io(uint64_t read_bytes, uint64_t write_bytes, int update_every) {
+    static RRDSET *st_io = NULL;
+    static RRDDIM *rd_in = NULL, *rd_out = NULL;
+
+    if(unlikely(!st_io)) {
+        st_io = rrdset_create_localhost(
+            "system"
+            , "io"
+            , NULL
+            , "disk"
+            , NULL
+            , "Disk I/O"
+            , "KiB/s"
+            , _COMMON_PLUGIN_NAME
+            , _COMMON_PLUGIN_MODULE_NAME
+            , NETDATA_CHART_PRIO_SYSTEM_IO
+            , update_every
+            , RRDSET_TYPE_AREA
+        );
+
+        rd_in  = rrddim_add(st_io, "in",  "reads",  1, 1024, RRD_ALGORITHM_INCREMENTAL);
+        rd_out = rrddim_add(st_io, "out", "writes", -1, 1024, RRD_ALGORITHM_INCREMENTAL);
+    }
+
+    // this always have to be in base units, so that exporting sends base units to other time-series db
+    rrddim_set_by_pointer(st_io, rd_in, (collected_number)read_bytes);
+    rrddim_set_by_pointer(st_io, rd_out, (collected_number)write_bytes);
+    rrdset_done(st_io);
+}
+
+#endif //NETDATA_SYSTEM_IO_H
diff --git a/src/collectors/common-contexts/system-ipc.h b/src/collectors/common-contexts/system-ipc.h
index 129ce6dfad..5bab22a618 100644
--- a/src/collectors/common-contexts/system-ipc.h
+++ b/src/collectors/common-contexts/system-ipc.h
@@ -1,34 +1,34 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef NETDATA_SYSTEM_IPC_H
-#define NETDATA_SYSTEM_IPC_H
-
-#include "common-contexts.h"
-
-static inline void common_semaphore_ipc(uint64_t semaphore, NETDATA_DOUBLE red, char *module, int update_every) {
-    static RRDSET *st_semaphores = NULL;
-    static RRDDIM *rd_semaphores = NULL;
-    if(unlikely(!st_semaphores)) {
-        st_semaphores = rrdset_create_localhost("system"
-                                                , "ipc_semaphores"
-                                                , NULL
-                                                , "ipc semaphores"
-                                                , NULL
-                                                , "IPC Semaphores"
-                                                , "semaphores"
-                                                , _COMMON_PLUGIN_NAME
-                                                , module
-                                                , NETDATA_CHART_PRIO_SYSTEM_IPC_SEMAPHORES
-                                                , update_every
-                                                , RRDSET_TYPE_AREA
-                                                );
-        rd_semaphores = rrddim_add(st_semaphores, "semaphores", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
-    }
-
-    rrddim_set_by_pointer(st_semaphores, rd_semaphores, semaphore);
-    rrdset_done(st_semaphores);
-    if (!strcmp(module, "ipc"))
-        st_semaphores->red = red;
-}
-
-#endif //NETDATA_SYSTEM_IPC_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_SYSTEM_IPC_H
+#define NETDATA_SYSTEM_IPC_H
+
+#include "common-contexts.h"
+
+static inline void common_semaphore_ipc(uint64_t semaphore, NETDATA_DOUBLE red, char *module, int update_every) {
+    static RRDSET *st_semaphores = NULL;
+    static RRDDIM *rd_semaphores = NULL;
+    if(unlikely(!st_semaphores)) {
+        st_semaphores = rrdset_create_localhost("system"
+                                                , "ipc_semaphores"
+                                                , NULL
+                                                , "ipc semaphores"
+                                                , NULL
+                                                , "IPC Semaphores"
+                                                , "semaphores"
+                                                , _COMMON_PLUGIN_NAME
+                                                , module
+                                                , NETDATA_CHART_PRIO_SYSTEM_IPC_SEMAPHORES
+                                                , update_every
+                                                , RRDSET_TYPE_AREA
+                                                );
+        rd_semaphores = rrddim_add(st_semaphores, "semaphores", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
+    }
+
+    rrddim_set_by_pointer(st_semaphores, rd_semaphores, semaphore);
+    rrdset_done(st_semaphores);
+    if (!strcmp(module, "ipc"))
+        st_semaphores->red = red;
+}
+
+#endif //NETDATA_SYSTEM_IPC_H
diff --git a/src/collectors/common-contexts/system-processes.h b/src/collectors/common-contexts/system-processes.h
index 1b886d65fd..83a68112e9 100644
--- a/src/collectors/common-contexts/system-processes.h
+++ b/src/collectors/common-contexts/system-processes.h
@@ -1,115 +1,115 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef NETDATA_SYSTEM_PROCESSES_H
-#define NETDATA_SYSTEM_PROCESSES_H
-
-#include "common-contexts.h"
-
-#define _system_process_chart() \
-    rrdset_create_localhost( \
-        "system" \
-        , "processes" \
-        , NULL  \
-        , "processes" \
-        , NULL \
-        , "System Processes" \
-        , "processes" \
-        , _COMMON_PLUGIN_NAME \
-        , _COMMON_PLUGIN_MODULE_NAME \
-        , NETDATA_CHART_PRIO_SYSTEM_PROCESSES \
-        , update_every \
-        , RRDSET_TYPE_LINE \
-        )
-
-#if defined(OS_WINDOWS)
-static inline void common_system_processes(uint64_t running, int update_every) {
-    static RRDSET *st_processes = NULL;
-    static RRDDIM *rd_running = NULL;
-
-    if(unlikely(!st_processes)) {
-        st_processes = _system_process_chart();
-
-        rd_running = rrddim_add(st_processes, "running", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
-    }
-
-    rrddim_set_by_pointer(st_processes, rd_running, running);
-    rrdset_done(st_processes);
-}
-
-// EBPF COUNTER PART
-static inline void common_system_threads(uint64_t threads, int update_every) {
-    static RRDSET *st_threads = NULL;
-    static RRDDIM *rd_threads = NULL;
-
-    if(unlikely(!st_threads)) {
-        st_threads = rrdset_create_localhost(
-            "system"
-            , "threads"
-            , NULL
-            , "processes"
-            , NULL
-            , "Threads"
-            , "threads"
-            , _COMMON_PLUGIN_NAME
-            , _COMMON_PLUGIN_MODULE_NAME
-            , NETDATA_CHART_PRIO_WINDOWS_THREADS
-            , update_every
-            , RRDSET_TYPE_LINE
-            );
-
-        rd_threads = rrddim_add(st_threads, "threads", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
-    }
-
-    rrddim_set_by_pointer(st_threads, rd_threads, threads);
-    rrdset_done(st_threads);
-}
-#endif
-
-#if defined(OS_LINUX)
-static inline void common_system_processes(uint64_t running, uint64_t blocked, int update_every) {
-    static RRDSET *st_processes = NULL;
-    static RRDDIM *rd_running = NULL;
-    static RRDDIM *rd_blocked = NULL;
-
-    if(unlikely(!st_processes)) {
-        st_processes = _system_process_chart();
-
-        rd_running = rrddim_add(st_processes, "running", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
-        rd_blocked = rrddim_add(st_processes, "blocked", NULL, -1, 1, RRD_ALGORITHM_ABSOLUTE);
-    }
-
-    rrddim_set_by_pointer(st_processes, rd_running, (collected_number)running);
-    rrddim_set_by_pointer(st_processes, rd_blocked, (collected_number)blocked);
-    rrdset_done(st_processes);
-}
-#endif
-
-static inline void common_system_context_switch(uint64_t value, int update_every) {
-    static RRDSET *st_ctxt = NULL;
-    static RRDDIM *rd_switches = NULL;
-
-    if(unlikely(!st_ctxt)) {
-        st_ctxt = rrdset_create_localhost(
-         "system"
-        , "ctxt"
-        , NULL
-        , "processes"
-        , NULL
-        , "CPU Context Switches"
-        , "context switches/s"
-        , _COMMON_PLUGIN_NAME
-        , _COMMON_PLUGIN_MODULE_NAME
-        , NETDATA_CHART_PRIO_SYSTEM_CTXT
-        , update_every
-        , RRDSET_TYPE_LINE
-        );
-
-        rd_switches = rrddim_add(st_ctxt, "switches", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
-    }
-
-    rrddim_set_by_pointer(st_ctxt, rd_switches,  (collected_number)value);
-    rrdset_done(st_ctxt);
-}
-
-
-#endif //NETDATA_SYSTEM_PROCESSES_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_SYSTEM_PROCESSES_H
+#define NETDATA_SYSTEM_PROCESSES_H
+
+#include "common-contexts.h"
+
+#define _system_process_chart() \
+    rrdset_create_localhost( \
+        "system" \
+        , "processes" \
+        , NULL  \
+        , "processes" \
+        , NULL \
+        , "System Processes" \
+        , "processes" \
+        , _COMMON_PLUGIN_NAME \
+        , _COMMON_PLUGIN_MODULE_NAME \
+        , NETDATA_CHART_PRIO_SYSTEM_PROCESSES \
+        , update_every \
+        , RRDSET_TYPE_LINE \
+        )
+
+#if defined(OS_WINDOWS)
+static inline void common_system_processes(uint64_t running, int update_every) {
+    static RRDSET *st_processes = NULL;
+    static RRDDIM *rd_running = NULL;
+
+    if(unlikely(!st_processes)) {
+        st_processes = _system_process_chart();
+
+        rd_running = rrddim_add(st_processes, "running", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
+    }
+
+    rrddim_set_by_pointer(st_processes, rd_running, running);
+    rrdset_done(st_processes);
+}
+
+// EBPF COUNTER PART
+static inline void common_system_threads(uint64_t threads, int update_every) {
+    static RRDSET *st_threads = NULL;
+    static RRDDIM *rd_threads = NULL;
+
+    if(unlikely(!st_threads)) {
+        st_threads = rrdset_create_localhost(
+            "system"
+            , "threads"
+            , NULL
+            , "processes"
+            , NULL
+            , "Threads"
+            , "threads"
+            , _COMMON_PLUGIN_NAME
+            , _COMMON_PLUGIN_MODULE_NAME
+            , NETDATA_CHART_PRIO_WINDOWS_THREADS
+            , update_every
+            , RRDSET_TYPE_LINE
+            );
+
+        rd_threads = rrddim_add(st_threads, "threads", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
+    }
+
+    rrddim_set_by_pointer(st_threads, rd_threads, threads);
+    rrdset_done(st_threads);
+}
+#endif
+
+#if defined(OS_LINUX)
+static inline void common_system_processes(uint64_t running, uint64_t blocked, int update_every) {
+    static RRDSET *st_processes = NULL;
+    static RRDDIM *rd_running = NULL;
+    static RRDDIM *rd_blocked = NULL;
+
+    if(unlikely(!st_processes)) {
+        st_processes = _system_process_chart();
+
+        rd_running = rrddim_add(st_processes, "running", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
+        rd_blocked = rrddim_add(st_processes, "blocked", NULL, -1, 1, RRD_ALGORITHM_ABSOLUTE);
+    }
+
+    rrddim_set_by_pointer(st_processes, rd_running, (collected_number)running);
+    rrddim_set_by_pointer(st_processes, rd_blocked, (collected_number)blocked);
+    rrdset_done(st_processes);
+}
+#endif
+
+static inline void common_system_context_switch(uint64_t value, int update_every) {
+    static RRDSET *st_ctxt = NULL;
+    static RRDDIM *rd_switches = NULL;
+
+    if(unlikely(!st_ctxt)) {
+        st_ctxt = rrdset_create_localhost(
+         "system"
+        , "ctxt"
+        , NULL
+        , "processes"
+        , NULL
+        , "CPU Context Switches"
+        , "context switches/s"
+        , _COMMON_PLUGIN_NAME
+        , _COMMON_PLUGIN_MODULE_NAME
+        , NETDATA_CHART_PRIO_SYSTEM_CTXT
+        , update_every
+        , RRDSET_TYPE_LINE
+        );
+
+        rd_switches = rrddim_add(st_ctxt, "switches", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
+    }
+
+    rrddim_set_by_pointer(st_ctxt, rd_switches,  (collected_number)value);
+    rrdset_done(st_ctxt);
+}
+
+
+#endif //NETDATA_SYSTEM_PROCESSES_H
diff --git a/src/collectors/cups.plugin/cups_plugin.c b/src/collectors/cups.plugin/cups_plugin.c
index c1b06c25d8..011c51872f 100644
--- a/src/collectors/cups.plugin/cups_plugin.c
+++ b/src/collectors/cups.plugin/cups_plugin.c
@@ -1,11 +1,5 @@
 // SPDX-License-Identifier: GPL-3.0-or-later
 
-/*
- * netdata cups.plugin
- * (C) Copyright 2017-2018 Simon Nagl <simon.nagl@gmx.de>
- * Released under GPL v3+
- */
-
 #include "libnetdata/libnetdata.h"
 #include "libnetdata/required_dummies.h"
 
@@ -53,9 +47,9 @@ void print_help() {
             "\n"
             "netdata cups.plugin %s\n"
             "\n"
-            "Copyright (C) 2017-2018 Simon Nagl <simon.nagl@gmx.de>\n"
+            "Copyright 2018-2025 Netdata Inc.\n"
+            "Original Author: Simon Nagl <simon.nagl@gmx.de>\n"
             "Released under GNU General Public License v3+.\n"
-            "All rights reserved.\n"
             "\n"
             "This program is a data collector plugin for netdata.\n"
             "\n"
diff --git a/src/collectors/ebpf.plugin/ebpf.c b/src/collectors/ebpf.plugin/ebpf.c
index ac50c1517a..bc16e45759 100644
--- a/src/collectors/ebpf.plugin/ebpf.c
+++ b/src/collectors/ebpf.plugin/ebpf.c
@@ -2201,21 +2201,11 @@ void ebpf_update_disabled_plugin_stats(ebpf_module_t *em)
  */
 void ebpf_print_help()
 {
-    const time_t t = time(NULL);
-    struct tm ct;
-    struct tm *test = localtime_r(&t, &ct);
-    int year;
-    if (test)
-        year = ct.tm_year;
-    else
-        year = 0;
-
     fprintf(stderr,
             "\n"
             " Netdata ebpf.plugin %s\n"
-            " Copyright (C) 2016-%d Costa Tsaousis <costa@tsaousis.gr>\n"
+            " Copyright 2018-2025 Netdata Inc.\n"
             " Released under GNU General Public License v3 or later.\n"
-            " All rights reserved.\n"
             "\n"
             " This eBPF.plugin is a data collector plugin for netdata.\n"
             "\n"
@@ -2267,8 +2257,7 @@ void ebpf_print_help()
             "\n"
             " [-]-core              Use CO-RE when available(Working in progress).\n"
             "\n",
-            NETDATA_VERSION,
-            (year >= 116) ? year + 1900 : 2020);
+            NETDATA_VERSION);
 }
 
 /*****************************************************************
diff --git a/src/collectors/freeipmi.plugin/freeipmi_plugin.c b/src/collectors/freeipmi.plugin/freeipmi_plugin.c
index 5ca5843207..ec698ead0b 100644
--- a/src/collectors/freeipmi.plugin/freeipmi_plugin.c
+++ b/src/collectors/freeipmi.plugin/freeipmi_plugin.c
@@ -1,9 +1,5 @@
 // SPDX-License-Identifier: GPL-3.0-or-later
 /*
- *  netdata freeipmi.plugin
- *  Copyright (C) 2023 Netdata Inc.
- *  GPL v3+
- *
  *  Based on:
  *  ipmimonitoring-sensors.c,v 1.51 2016/11/02 23:46:24 chu11 Exp
  *  ipmimonitoring-sel.c,v 1.51 2016/11/02 23:46:24 chu11 Exp
@@ -1740,9 +1736,8 @@ int main (int argc, char **argv) {
             fprintf(stderr,
                     "\n"
                     " netdata %s %s\n"
-                    " Copyright (C) 2023 Netdata Inc.\n"
+                    " Copyright 2018-2025 Netdata Inc.\n"
                     " Released under GNU General Public License v3 or later.\n"
-                    " All rights reserved.\n"
                     "\n"
                     " This program is a data collector plugin for netdata.\n"
                     "\n"
diff --git a/src/collectors/ioping.plugin/ioping.plugin.in b/src/collectors/ioping.plugin/ioping.plugin.in
index 171e384dbf..5a067bc28e 100755
--- a/src/collectors/ioping.plugin/ioping.plugin.in
+++ b/src/collectors/ioping.plugin/ioping.plugin.in
@@ -1,10 +1,5 @@
 #!/usr/bin/env bash
 # SPDX-License-Identifier: GPL-3.0-or-later
-
-# netdata
-# real-time performance and health monitoring, done right!
-# (C) 2017 Costa Tsaousis <costa@tsaousis.gr>
-# GPL v3+
 #
 # This plugin requires a latest version of ioping.
 # You can compile it from source, by running me with option: install
diff --git a/src/collectors/nfacct.plugin/plugin_nfacct.c b/src/collectors/nfacct.plugin/plugin_nfacct.c
index 7cc44ff2c6..edf17bfac6 100644
--- a/src/collectors/nfacct.plugin/plugin_nfacct.c
+++ b/src/collectors/nfacct.plugin/plugin_nfacct.c
@@ -774,9 +774,8 @@ int main(int argc, char **argv) {
             fprintf(stderr,
                     "\n"
                     " netdata nfacct.plugin %s\n"
-                    " Copyright (C) 2015-2017 Costa Tsaousis <costa@tsaousis.gr>\n"
+                    " Copyright 2018-2025 Netdata Inc.\n"
                     " Released under GNU General Public License v3 or later.\n"
-                    " All rights reserved.\n"
                     "\n"
                     " This program is a data collector plugin for netdata.\n"
                     "\n"
diff --git a/src/collectors/perf.plugin/perf_plugin.c b/src/collectors/perf.plugin/perf_plugin.c
index 272b4b60b8..aea14bf2b7 100644
--- a/src/collectors/perf.plugin/perf_plugin.c
+++ b/src/collectors/perf.plugin/perf_plugin.c
@@ -1212,9 +1212,8 @@ void parse_command_line(int argc, char **argv) {
             fprintf(stderr,
                     "\n"
                     " netdata perf.plugin %s\n"
-                    " Copyright (C) 2019 Netdata Inc.\n"
+                    " Copyright 2018-2025 Netdata Inc.\n"
                     " Released under GNU General Public License v3 or later.\n"
-                    " All rights reserved.\n"
                     "\n"
                     " This program is a data collector plugin for netdata.\n"
                     "\n"
diff --git a/src/collectors/python.d.plugin/python.d.plugin.in b/src/collectors/python.d.plugin/python.d.plugin.in
index 089fb5a58f..44a69914c2 100644
--- a/src/collectors/python.d.plugin/python.d.plugin.in
+++ b/src/collectors/python.d.plugin/python.d.plugin.in
@@ -19,9 +19,6 @@ fi
 exec "$pybinary"  "$0" "${filtered[@]}" # '''
 
 # -*- coding: utf-8 -*-
-# Description:
-# Author: Pawel Krupa (paulfantom)
-# Author: Ilya Mashchenko (l2isbad)
 # SPDX-License-Identifier: GPL-3.0-or-later
 
 import collections
diff --git a/src/collectors/python.d.plugin/python_modules/bases/FrameworkServices/ExecutableService.py b/src/collectors/python.d.plugin/python_modules/bases/FrameworkServices/ExecutableService.py
index a74b4239ee..ade7ab4da7 100644
--- a/src/collectors/python.d.plugin/python_modules/bases/FrameworkServices/ExecutableService.py
+++ b/src/collectors/python.d.plugin/python_modules/bases/FrameworkServices/ExecutableService.py
@@ -1,7 +1,5 @@
 # -*- coding: utf-8 -*-
 # Description:
-# Author: Pawel Krupa (paulfantom)
-# Author: Ilya Mashchenko (ilyam8)
 # SPDX-License-Identifier: GPL-3.0-or-later
 
 import os
diff --git a/src/collectors/python.d.plugin/python_modules/bases/FrameworkServices/LogService.py b/src/collectors/python.d.plugin/python_modules/bases/FrameworkServices/LogService.py
index a55e33f520..f6d84a21b8 100644
--- a/src/collectors/python.d.plugin/python_modules/bases/FrameworkServices/LogService.py
+++ b/src/collectors/python.d.plugin/python_modules/bases/FrameworkServices/LogService.py
@@ -1,7 +1,5 @@
 # -*- coding: utf-8 -*-
 # Description:
-# Author: Pawel Krupa (paulfantom)
-# Author: Ilya Mashchenko (ilyam8)
 # SPDX-License-Identifier: GPL-3.0-or-later
 
 from glob import glob
diff --git a/src/collectors/python.d.plugin/python_modules/bases/FrameworkServices/SimpleService.py b/src/collectors/python.d.plugin/python_modules/bases/FrameworkServices/SimpleService.py
index 3f122e1d9d..2e723229bb 100644
--- a/src/collectors/python.d.plugin/python_modules/bases/FrameworkServices/SimpleService.py
+++ b/src/collectors/python.d.plugin/python_modules/bases/FrameworkServices/SimpleService.py
@@ -1,7 +1,5 @@
 # -*- coding: utf-8 -*-
 # Description:
-# Author: Pawel Krupa (paulfantom)
-# Author: Ilya Mashchenko (ilyam8)
 # SPDX-License-Identifier: GPL-3.0-or-later
 
 import os
diff --git a/src/collectors/python.d.plugin/python_modules/bases/FrameworkServices/SocketService.py b/src/collectors/python.d.plugin/python_modules/bases/FrameworkServices/SocketService.py
index d6c7550587..b2e4bbd796 100644
--- a/src/collectors/python.d.plugin/python_modules/bases/FrameworkServices/SocketService.py
+++ b/src/collectors/python.d.plugin/python_modules/bases/FrameworkServices/SocketService.py
@@ -1,7 +1,5 @@
 # -*- coding: utf-8 -*-
 # Description:
-# Author: Pawel Krupa (paulfantom)
-# Author: Ilya Mashchenko (ilyam8)
 # SPDX-License-Identifier: GPL-3.0-or-later
 
 import errno
diff --git a/src/collectors/python.d.plugin/python_modules/bases/FrameworkServices/UrlService.py b/src/collectors/python.d.plugin/python_modules/bases/FrameworkServices/UrlService.py
index 76129d376f..1addac756c 100644
--- a/src/collectors/python.d.plugin/python_modules/bases/FrameworkServices/UrlService.py
+++ b/src/collectors/python.d.plugin/python_modules/bases/FrameworkServices/UrlService.py
@@ -1,7 +1,5 @@
 # -*- coding: utf-8 -*-
 # Description:
-# Author: Pawel Krupa (paulfantom)
-# Author: Ilya Mashchenko (ilyam8)
 # SPDX-License-Identifier: GPL-3.0-or-later
 
 import urllib3
diff --git a/src/collectors/systemd-journal.plugin/systemd-journal.c b/src/collectors/systemd-journal.plugin/systemd-journal.c
index 9666e01095..9997c42a93 100644
--- a/src/collectors/systemd-journal.plugin/systemd-journal.c
+++ b/src/collectors/systemd-journal.plugin/systemd-journal.c
@@ -1,9 +1,4 @@
 // SPDX-License-Identifier: GPL-3.0-or-later
-/*
- *  netdata systemd-journal.plugin
- *  Copyright (C) 2023 Netdata Inc.
- *  GPL v3+
- */
 
 /*
  * TODO
diff --git a/src/collectors/tc.plugin/tc-qos-helper.sh.in b/src/collectors/tc.plugin/tc-qos-helper.sh.in
index d7aad40f47..572625b211 100755
--- a/src/collectors/tc.plugin/tc-qos-helper.sh.in
+++ b/src/collectors/tc.plugin/tc-qos-helper.sh.in
@@ -1,8 +1,4 @@
 #!/usr/bin/env bash
-
-# netdata
-# real-time performance and health monitoring, done right!
-# (C) 2023 Netdata Inc.
 # SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This script is a helper to allow netdata collect tc data.
diff --git a/src/collectors/utils/local_listeners.c b/src/collectors/utils/local_listeners.c
index a2e8968fff..0dac2568a7 100644
--- a/src/collectors/utils/local_listeners.c
+++ b/src/collectors/utils/local_listeners.c
@@ -76,7 +76,7 @@ int main(int argc, char **argv) {
             fprintf(stderr,
                     "\n"
                     " Netdata local-listeners\n"
-                    " (C) 2024 Netdata Inc.\n"
+                    " Copyright 2018-2025 Netdata Inc.\n"
                     "\n"
                     " This program prints a list of all the processes that have a listening socket.\n"
                     " It is used by Netdata to auto-detect the services running.\n"
diff --git a/src/collectors/utils/ndsudo.c b/src/collectors/utils/ndsudo.c
index 90aec73040..ff96db99fb 100644
--- a/src/collectors/utils/ndsudo.c
+++ b/src/collectors/utils/ndsudo.c
@@ -381,7 +381,7 @@ void show_help() {
     fprintf(stdout, "\n");
     fprintf(stdout, "ndsudo\n");
     fprintf(stdout, "\n");
-    fprintf(stdout, "(C) Netdata Inc.\n");
+    fprintf(stdout, "Copyright 2018-2025 Netdata Inc.\n");
     fprintf(stdout, "\n");
     fprintf(stdout, "A helper to allow Netdata run privileged commands.\n");
     fprintf(stdout, "\n");
diff --git a/src/collectors/windows-events.plugin/README.md b/src/collectors/windows-events.plugin/README.md
index 76b00f4811..22b6af1a28 100644
--- a/src/collectors/windows-events.plugin/README.md
+++ b/src/collectors/windows-events.plugin/README.md
@@ -1,289 +1,289 @@
-# Windows Events plugin
-
-[KEY FEATURES](#key-features) | [EVENTS SOURCES](#events-sources) | [EVENT FIELDS](#event-fields) |
-[PLAY MODE](#play-mode) | [FULL TEXT SEARCH](#full-text-search) | [PERFORMANCE](#query-performance) |
-[CONFIGURATION](#configuration-and-maintenance) | [FAQ](#faq)
-
-The Windows Events plugin by Netdata makes viewing, exploring and analyzing Windows Events simple and
-efficient.
-
-![image](https://github.com/user-attachments/assets/71a1ab1d-5b7b-477e-a4e6-a30275a5710b)
-
-## Key features
-
-- Supports **Windows Event Logs (WEL)**.
-- Supports **Event Tracing for Windows (ETW)** and **TraceLogging (TL)**, when events are routed to Event Log.
-- Allows filtering on all System Events fields.
-- Allows **full text search** (`grep`) on all System and User fields.
-- Provides a **histogram** for log entries over time, with a break down per field-value, for any System Event field and any
-  time-frame.
-- Supports coloring log entries based on severity.
-- In PLAY mode it "tails" all the Events, showing new log entries immediately after they are received.
-
-### Prerequisites
-
-`windows-events.plugin` is a Netdata Function Plugin.
-
-To protect your privacy, as with all Netdata Functions, a free Netdata Cloud user account is required to access it.
-For more information check [this discussion](https://github.com/netdata/netdata/discussions/16136).
-
-## Events Sources
-
-The plugin automatically detects all the available channels and offers a list of "Event Channels".
-
-By default, it aggregates events from all event channels, providing a unified view of all events.
-
-> To improve query performance, we recommend selecting the relevant event channels, before doing more
-> analysis on the events.
-
-In the list of events channels, several shortcuts are added, aggregating events according to various attributes:
-
-- `All`, aggregates events from all available channels. This provides a holistic view of all events in the system. 
-- `All-Admin`, `All-Operational`, `All-Analytic` and `All-Debug` aggregates events from channels marked `Admin`, `Operational`, `Analytic` and `Debug`, respectively.
-- `All-Windows`, aggregates events from `Application`, `Security`, `System` and `Setup`.
-- `All-Enabled` and `All-Disabled` aggregates events from channels depending on their status.
-- `All-Forwarded` aggregates events from channels owned by `Microsoft-Windows-EventCollector`.
-- `All-Classic` aggregates events from channels using the Classic Event Log API.
-- `All-Of-X`, where `X` is a provider name, is offered for all providers having more than a channel.
-- `All-In-X`, where `X` is `Backup-Mode`, `Overwrite-Mode`, `StopWhenFull-Mode` and `RetainAndBackup-Mode`, aggregate events based on their channel retention policy.
-
-Channels that are configured but are not queryable, and channels that do not have any events in them, are automatically excluded from the channels list.
-
-## Event Fields
-
-Windows Events are structured with both system-defined fields and user-defined fields.
-The Windows Events plugin primarily works with the system-defined fields, which are consistently available
-across all event types.
-
-### System-defined fields 
-
-The system-defined fields are:
-
-1. **EventRecordID**  
-   A unique, sequential identifier for the event within the channel. This ID increases as new events are logged.
-
-2. **Version**  
-   The version of the event, indicating possible structural changes or updates to the event definition.
-
-   Netdata adds this field automatically when it is not zero.
-
-3. **Level**  
-   The severity or importance of the event. Levels can include:
-   - 0: LogAlways (reserved)
-   - 1: Critical
-   - 2: Error
-   - 3: Warning
-   - 4: Informational
-   - 5: Verbose
-   
-   Additionally, applications may define their own levels.
-
-   Netdata provides 2 fields: `Level` and `LevelID` for the text and numeric representation of it.
-
-4. **Opcode**  
-   The action or state within a provider when the event was logged.
-   
-   Netdata provides 2 fields: `Opcode` and `OpcodeID` for the text and numeric representation of it.
-
-5. **EventID**  
-   This identifies the event template, linking it to a specific message or event type. Event IDs are provider-specific.
-
-6. **Task**  
-   Defines a higher-level categorization or logical grouping for the event, often related to a specific function within the application or provider.
-
-   Netdata provides 2 fields: `Task` and `TaskID` for the text and numeric representation of it.
-
-7. **Qualifiers**  
-   Provides additional detail for interpreting the event and is often specific to the event source.
-
-   Netdata adds this field automatically when it is not zero.
-
-8. **ProcessID**
-   The ID of the process that generated the event, useful for pinpointing the source of the event within the system.
-
-9. **ThreadID**  
-   The ID of the thread within the process that generated the event, which helps in more detailed debugging scenarios.
-
-10. **Keywords**  
-    A categorization field that can be used for event filtering. Keywords are bit flags that represent categories or purposes of the event, providing additional context.
-
-    Netdata provides 2 fields: `Keywords` and `keywordsID` for the text and numeric representation of it.
-
-11. **Provider**  
-    The unique identifier (GUID) of the event provider. This is essential for knowing which application or system component generated the event.
-
-    Netdata provides 2 fields: `Provider` and `ProviderGUID` for its name and GUID of it.
-
-12. **ActivityID**  
-    A GUID that correlates events generated as part of the same operation or transaction, helping to track activities across different components or stages.
-
-    Netdata adds this field automatically when it is not zero.
-
-13. **RelatedActivityID**  
-    A GUID that links related operations or transactions, allowing for tracing complex workflows where one event triggers or relates to another.
-
-    Netdata adds this field automatically when it is not zero.
-
-14. **Timestamp**  
-    The timestamp when the event was created. This provides precise timing information about when the event occurred.
-
-15. **User**
-    The system user who logged this event.
-
-    Netdata provides 3 fields: `UserAccount`, `UserDomain` and `UserSID`.
-
-### User-defined fields
-Each event log entry can include up to 100 user-defined fields (per event-id).
-
-Unfortunately, accessing these fields is significantly slower, to a level that is not practical to do so
-when there are more than few thousand log entries to explore. So, Netdata presents them
-with lazy loading.
-
-This prevents Netdata for offering filtering for user-defined fields, although Netdata does support
-full text search on user-defined field values.
-
-### Event fields as columns in the table
-
-The system fields mentioned above are offered as columns on the UI. Use the gear button above the table to
-select visible columns.
-
-### Event fields as filters
-
-The plugin presents the system fields as filters for the query, with counters for each of the possible values
-for the field. This list can be used to quickly check which fields and values are available for the entire
-time-frame of the query, across multiple providers and channels.
-
-### Event fields as histogram sources
-
-The histogram can be based on any of the system fields that are available as filters. This allows you to
-visualize the distribution of events over time based on different criteria such as Level, Provider, or EventID.
-
-## PLAY mode
-
-The PLAY mode in this plugin allows real-time monitoring of new events as they are added to the Windows Event
-Log. This feature works by continuously querying for new events and updating the display.
-
-## Full-text search
-
-The plugin supports searching for text within all system and user fields of the events. This means that while
-user-defined fields are not directly filterable, they are searchable through the full-text search feature.
-
-Keep in mind that query performance is slower while doing full text search, mainly because the plugin
-needs to ask from the system to provide all the user fields values.
-
-## Query performance
-
-The plugin is optimized to work efficiently with Event Logs. It uses several layers of caching and
-similar techniques to offload as much work as possible from the system, offering quick responses even when
-hundreds of thousands of events are within the visible timeframe.
-
-To achieve this level of efficiency, the plugin:
-
-- pre-loads ETW providers' manifests for resolving numeric Levels, Opcodes, Tasks and Keywords to text.
-- caches number to text maps for Levels, Opcodes, Tasks and Keywords per provider for WEL providers.
-- caches user SID to account and domain maps.
-- lazy loads the "expensive" event Message and XML, so that the system is queried only for the visible events.  
-
-For Full Text Search:
-
-- requests only the Message and the values of the user-fields from the system, avoiding the "expensive" XML call (which is still lazy-loaded). 
-
-The result is a system that is highly efficient for working with moderate volumes (hundreds of thousands) of events.
-
-## Configuration and maintenance
-
-This Netdata plugin does not require any specific configuration. It automatically detects available event logs
-on the system.
-
-## FAQ
-
-### Can I use this plugin on event centralization servers?
-
-Yes. You can centralize your Windows Events using Windows Event Forwarding (WEF) or other event collection
-mechanisms, and then install Netdata on this events centralization server to explore the events of all your
-infrastructure.
-
-This plugin will automatically provide multi-node views of your events and also give you the ability to
-combine the events of multiple servers, as you see fit.
-
-### Can I use this plugin from a parent Netdata?
-
-Yes. When your nodes are connected to a Netdata parent, all their functions are available via the parent's UI.
-So, from the parent UI, you can access the functions of all your nodes.
-
-Keep in mind that to protect your privacy, in order to access Netdata functions, you need a free Netdata Cloud
-account.
-
-### Is any of my data exposed to Netdata Cloud from this plugin?
-
-No. When you access the Agent directly, none of your data passes through Netdata Cloud. You need a free Netdata
-Cloud account only to verify your identity and enable the use of Netdata Functions. Once this is done, all the
-data flow directly from your Netdata Agent to your web browser.
-
-When you access Netdata via https://app.netdata.cloud, your data travel via Netdata Cloud, but they are not stored
-in Netdata Cloud. This is to allow you access your Netdata Agents from anywhere. All communication from/to
-Netdata Cloud is encrypted.
-
-### What are the different types of event logs supported by this plugin?
-
-The plugin supports all the kinds of event logs currently supported by the Windows Event Viewer:
-
-- Windows Event Logs (WEL): The traditional event logging system in Windows.
-- Event Tracing for Windows (ETW): A more detailed and efficient event tracing system.
-- TraceLogging (TL): An extension of ETW that simplifies the process of adding events to your code.
-
-The plugin can access all of these when they are routed to the Windows Event Log.
-
-### How does this plugin handle user-defined fields in Windows Events?
-
-User-defined fields are not directly exposed as table columns or filters in the plugin interface. However,
-they are included in the XML representation of each event, which can be viewed in the info sidebar when
-clicking on an event entry. Additionally, the full-text search feature does search through these
-user-defined fields, allowing you to find specific information even if it's not in the main system fields.
-
-### Can I use this plugin to monitor real-time events?
-
-Yes, the plugin supports a PLAY mode that allows you to monitor events in real-time. When activated, it
-continuously updates to show new events as they are logged, similar to the "tail" functionality in
-Unix-like systems.
-
-### How does the plugin handle large volumes of events?
-
-The plugin is designed to handle moderate volumes of events (hundreds of thousands of events) efficiently.
-
-It is in our roadmap to port the `systemd-journal` sampling techniques to it, for working with very large
-datasets to provide quick responses while still giving accurate representations of the data. However, for
-the best performance, we recommend querying smaller time frames or using more specific filters when dealing
-with extremely large event volumes.
-
-### Can I use this plugin to analyze events from multiple servers?
-
-Yes, if you have set up Windows Event Forwarding (WEF) or another method of centralizing your Windows Events,
-you can use this plugin on the central server to analyze events from multiple sources. The plugin will
-automatically detect the available event sources.
-
-### How does the histogram feature work in this plugin?
-
-The histogram feature provides a visual representation of event frequency over time. You can base the
-histogram on any of the system fields available as filters (such as Level, Provider, or EventID). This
-allows you to quickly identify patterns or anomalies in your event logs.
-
-### Is it possible to export or share the results from this plugin?
-
-While the plugin doesn't have a direct export feature, you can use browser-based methods to save or share
-the results. This could include taking screenshots, using browser print/save as PDF functionality, or
-copying data from the table view. For more advanced data export needs, you might need to use the Windows
-Event Log API directly or other Windows administrative tools.
-
-### How often does the plugin update its data?
-
-The plugin updates its data in real-time when in PLAY mode. In normal mode, it refreshes data based on the
-query you've submitted. The plugin is designed to provide the most up-to-date information available in the
-Windows Event Logs at the time of the query.
-
-## TODO
-
-1. Support Sampling, so that the plugin can respond faster even on very busy systems (millions of events visible).
-2. Support exploring events from live Tracing sessions.
-3. Support exploring events in saved Event Trace Log files (`.etl` files).
-4. Support exploring events in saved Event Logs files (`.evtx` files).
+# Windows Events plugin
+
+[KEY FEATURES](#key-features) | [EVENTS SOURCES](#events-sources) | [EVENT FIELDS](#event-fields) |
+[PLAY MODE](#play-mode) | [FULL TEXT SEARCH](#full-text-search) | [PERFORMANCE](#query-performance) |
+[CONFIGURATION](#configuration-and-maintenance) | [FAQ](#faq)
+
+The Windows Events plugin by Netdata makes viewing, exploring and analyzing Windows Events simple and
+efficient.
+
+![image](https://github.com/user-attachments/assets/71a1ab1d-5b7b-477e-a4e6-a30275a5710b)
+
+## Key features
+
+- Supports **Windows Event Logs (WEL)**.
+- Supports **Event Tracing for Windows (ETW)** and **TraceLogging (TL)**, when events are routed to Event Log.
+- Allows filtering on all System Events fields.
+- Allows **full text search** (`grep`) on all System and User fields.
+- Provides a **histogram** for log entries over time, with a break down per field-value, for any System Event field and any
+  time-frame.
+- Supports coloring log entries based on severity.
+- In PLAY mode it "tails" all the Events, showing new log entries immediately after they are received.
+
+### Prerequisites
+
+`windows-events.plugin` is a Netdata Function Plugin.
+
+To protect your privacy, as with all Netdata Functions, a free Netdata Cloud user account is required to access it.
+For more information check [this discussion](https://github.com/netdata/netdata/discussions/16136).
+
+## Events Sources
+
+The plugin automatically detects all the available channels and offers a list of "Event Channels".
+
+By default, it aggregates events from all event channels, providing a unified view of all events.
+
+> To improve query performance, we recommend selecting the relevant event channels, before doing more
+> analysis on the events.
+
+In the list of events channels, several shortcuts are added, aggregating events according to various attributes:
+
+- `All`, aggregates events from all available channels. This provides a holistic view of all events in the system. 
+- `All-Admin`, `All-Operational`, `All-Analytic` and `All-Debug` aggregates events from channels marked `Admin`, `Operational`, `Analytic` and `Debug`, respectively.
+- `All-Windows`, aggregates events from `Application`, `Security`, `System` and `Setup`.
+- `All-Enabled` and `All-Disabled` aggregates events from channels depending on their status.
+- `All-Forwarded` aggregates events from channels owned by `Microsoft-Windows-EventCollector`.
+- `All-Classic` aggregates events from channels using the Classic Event Log API.
+- `All-Of-X`, where `X` is a provider name, is offered for all providers having more than a channel.
+- `All-In-X`, where `X` is `Backup-Mode`, `Overwrite-Mode`, `StopWhenFull-Mode` and `RetainAndBackup-Mode`, aggregate events based on their channel retention policy.
+
+Channels that are configured but are not queryable, and channels that do not have any events in them, are automatically excluded from the channels list.
+
+## Event Fields
+
+Windows Events are structured with both system-defined fields and user-defined fields.
+The Windows Events plugin primarily works with the system-defined fields, which are consistently available
+across all event types.
+
+### System-defined fields 
+
+The system-defined fields are:
+
+1. **EventRecordID**  
+   A unique, sequential identifier for the event within the channel. This ID increases as new events are logged.
+
+2. **Version**  
+   The version of the event, indicating possible structural changes or updates to the event definition.
+
+   Netdata adds this field automatically when it is not zero.
+
+3. **Level**  
+   The severity or importance of the event. Levels can include:
+   - 0: LogAlways (reserved)
+   - 1: Critical
+   - 2: Error
+   - 3: Warning
+   - 4: Informational
+   - 5: Verbose
+   
+   Additionally, applications may define their own levels.
+
+   Netdata provides 2 fields: `Level` and `LevelID` for the text and numeric representation of it.
+
+4. **Opcode**  
+   The action or state within a provider when the event was logged.
+   
+   Netdata provides 2 fields: `Opcode` and `OpcodeID` for the text and numeric representation of it.
+
+5. **EventID**  
+   This identifies the event template, linking it to a specific message or event type. Event IDs are provider-specific.
+
+6. **Task**  
+   Defines a higher-level categorization or logical grouping for the event, often related to a specific function within the application or provider.
+
+   Netdata provides 2 fields: `Task` and `TaskID` for the text and numeric representation of it.
+
+7. **Qualifiers**  
+   Provides additional detail for interpreting the event and is often specific to the event source.
+
+   Netdata adds this field automatically when it is not zero.
+
+8. **ProcessID**
+   The ID of the process that generated the event, useful for pinpointing the source of the event within the system.
+
+9. **ThreadID**  
+   The ID of the thread within the process that generated the event, which helps in more detailed debugging scenarios.
+
+10. **Keywords**  
+    A categorization field that can be used for event filtering. Keywords are bit flags that represent categories or purposes of the event, providing additional context.
+
+    Netdata provides 2 fields: `Keywords` and `keywordsID` for the text and numeric representation of it.
+
+11. **Provider**  
+    The unique identifier (GUID) of the event provider. This is essential for knowing which application or system component generated the event.
+
+    Netdata provides 2 fields: `Provider` and `ProviderGUID` for its name and GUID of it.
+
+12. **ActivityID**  
+    A GUID that correlates events generated as part of the same operation or transaction, helping to track activities across different components or stages.
+
+    Netdata adds this field automatically when it is not zero.
+
+13. **RelatedActivityID**  
+    A GUID that links related operations or transactions, allowing for tracing complex workflows where one event triggers or relates to another.
+
+    Netdata adds this field automatically when it is not zero.
+
+14. **Timestamp**  
+    The timestamp when the event was created. This provides precise timing information about when the event occurred.
+
+15. **User**
+    The system user who logged this event.
+
+    Netdata provides 3 fields: `UserAccount`, `UserDomain` and `UserSID`.
+
+### User-defined fields
+Each event log entry can include up to 100 user-defined fields (per event-id).
+
+Unfortunately, accessing these fields is significantly slower, to a level that is not practical to do so
+when there are more than few thousand log entries to explore. So, Netdata presents them
+with lazy loading.
+
+This prevents Netdata for offering filtering for user-defined fields, although Netdata does support
+full text search on user-defined field values.
+
+### Event fields as columns in the table
+
+The system fields mentioned above are offered as columns on the UI. Use the gear button above the table to
+select visible columns.
+
+### Event fields as filters
+
+The plugin presents the system fields as filters for the query, with counters for each of the possible values
+for the field. This list can be used to quickly check which fields and values are available for the entire
+time-frame of the query, across multiple providers and channels.
+
+### Event fields as histogram sources
+
+The histogram can be based on any of the system fields that are available as filters. This allows you to
+visualize the distribution of events over time based on different criteria such as Level, Provider, or EventID.
+
+## PLAY mode
+
+The PLAY mode in this plugin allows real-time monitoring of new events as they are added to the Windows Event
+Log. This feature works by continuously querying for new events and updating the display.
+
+## Full-text search
+
+The plugin supports searching for text within all system and user fields of the events. This means that while
+user-defined fields are not directly filterable, they are searchable through the full-text search feature.
+
+Keep in mind that query performance is slower while doing full text search, mainly because the plugin
+needs to ask from the system to provide all the user fields values.
+
+## Query performance
+
+The plugin is optimized to work efficiently with Event Logs. It uses several layers of caching and
+similar techniques to offload as much work as possible from the system, offering quick responses even when
+hundreds of thousands of events are within the visible timeframe.
+
+To achieve this level of efficiency, the plugin:
+
+- pre-loads ETW providers' manifests for resolving numeric Levels, Opcodes, Tasks and Keywords to text.
+- caches number to text maps for Levels, Opcodes, Tasks and Keywords per provider for WEL providers.
+- caches user SID to account and domain maps.
+- lazy loads the "expensive" event Message and XML, so that the system is queried only for the visible events.  
+
+For Full Text Search:
+
+- requests only the Message and the values of the user-fields from the system, avoiding the "expensive" XML call (which is still lazy-loaded). 
+
+The result is a system that is highly efficient for working with moderate volumes (hundreds of thousands) of events.
+
+## Configuration and maintenance
+
+This Netdata plugin does not require any specific configuration. It automatically detects available event logs
+on the system.
+
+## FAQ
+
+### Can I use this plugin on event centralization servers?
+
+Yes. You can centralize your Windows Events using Windows Event Forwarding (WEF) or other event collection
+mechanisms, and then install Netdata on this events centralization server to explore the events of all your
+infrastructure.
+
+This plugin will automatically provide multi-node views of your events and also give you the ability to
+combine the events of multiple servers, as you see fit.
+
+### Can I use this plugin from a parent Netdata?
+
+Yes. When your nodes are connected to a Netdata parent, all their functions are available via the parent's UI.
+So, from the parent UI, you can access the functions of all your nodes.
+
+Keep in mind that to protect your privacy, in order to access Netdata functions, you need a free Netdata Cloud
+account.
+
+### Is any of my data exposed to Netdata Cloud from this plugin?
+
+No. When you access the Agent directly, none of your data passes through Netdata Cloud. You need a free Netdata
+Cloud account only to verify your identity and enable the use of Netdata Functions. Once this is done, all the
+data flow directly from your Netdata Agent to your web browser.
+
+When you access Netdata via https://app.netdata.cloud, your data travel via Netdata Cloud, but they are not stored
+in Netdata Cloud. This is to allow you access your Netdata Agents from anywhere. All communication from/to
+Netdata Cloud is encrypted.
+
+### What are the different types of event logs supported by this plugin?
+
+The plugin supports all the kinds of event logs currently supported by the Windows Event Viewer:
+
+- Windows Event Logs (WEL): The traditional event logging system in Windows.
+- Event Tracing for Windows (ETW): A more detailed and efficient event tracing system.
+- TraceLogging (TL): An extension of ETW that simplifies the process of adding events to your code.
+
+The plugin can access all of these when they are routed to the Windows Event Log.
+
+### How does this plugin handle user-defined fields in Windows Events?
+
+User-defined fields are not directly exposed as table columns or filters in the plugin interface. However,
+they are included in the XML representation of each event, which can be viewed in the info sidebar when
+clicking on an event entry. Additionally, the full-text search feature does search through these
+user-defined fields, allowing you to find specific information even if it's not in the main system fields.
+
+### Can I use this plugin to monitor real-time events?
+
+Yes, the plugin supports a PLAY mode that allows you to monitor events in real-time. When activated, it
+continuously updates to show new events as they are logged, similar to the "tail" functionality in
+Unix-like systems.
+
+### How does the plugin handle large volumes of events?
+
+The plugin is designed to handle moderate volumes of events (hundreds of thousands of events) efficiently.
+
+It is in our roadmap to port the `systemd-journal` sampling techniques to it, for working with very large
+datasets to provide quick responses while still giving accurate representations of the data. However, for
+the best performance, we recommend querying smaller time frames or using more specific filters when dealing
+with extremely large event volumes.
+
+### Can I use this plugin to analyze events from multiple servers?
+
+Yes, if you have set up Windows Event Forwarding (WEF) or another method of centralizing your Windows Events,
+you can use this plugin on the central server to analyze events from multiple sources. The plugin will
+automatically detect the available event sources.
+
+### How does the histogram feature work in this plugin?
+
+The histogram feature provides a visual representation of event frequency over time. You can base the
+histogram on any of the system fields available as filters (such as Level, Provider, or EventID). This
+allows you to quickly identify patterns or anomalies in your event logs.
+
+### Is it possible to export or share the results from this plugin?
+
+While the plugin doesn't have a direct export feature, you can use browser-based methods to save or share
+the results. This could include taking screenshots, using browser print/save as PDF functionality, or
+copying data from the table view. For more advanced data export needs, you might need to use the Windows
+Event Log API directly or other Windows administrative tools.
+
+### How often does the plugin update its data?
+
+The plugin updates its data in real-time when in PLAY mode. In normal mode, it refreshes data based on the
+query you've submitted. The plugin is designed to provide the most up-to-date information available in the
+Windows Event Logs at the time of the query.
+
+## TODO
+
+1. Support Sampling, so that the plugin can respond faster even on very busy systems (millions of events visible).
+2. Support exploring events from live Tracing sessions.
+3. Support exploring events in saved Event Trace Log files (`.etl` files).
+4. Support exploring events in saved Event Logs files (`.evtx` files).
diff --git a/src/collectors/windows-events.plugin/windows-events-fields-cache.c b/src/collectors/windows-events.plugin/windows-events-fields-cache.c
index 6689a3fdc4..ff942d261f 100644
--- a/src/collectors/windows-events.plugin/windows-events-fields-cache.c
+++ b/src/collectors/windows-events.plugin/windows-events-fields-cache.c
@@ -1,158 +1,158 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#include "windows-events-fields-cache.h"
-
-typedef struct field_key {
-    uint64_t value;
-    ND_UUID provider;
-} WEVT_FIELD_KEY;
-
-typedef struct field_value {
-    WEVT_FIELD_KEY key;
-    uint32_t name_size;
-    char name[];
-} WEVT_FIELD_VALUE;
-
-#define SIMPLE_HASHTABLE_NAME _FIELDS_CACHE
-#define SIMPLE_HASHTABLE_VALUE_TYPE WEVT_FIELD_VALUE *
-#define SIMPLE_HASHTABLE_KEY_TYPE WEVT_FIELD_KEY
-#define SIMPLE_HASHTABLE_VALUE2KEY_FUNCTION field_cache_value_to_key
-#define SIMPLE_HASHTABLE_COMPARE_KEYS_FUNCTION field_cache_cache_compar
-#define SIMPLE_HASHTABLE_SAMPLE_IMPLEMENTATION 1
-#include "libnetdata/simple_hashtable/simple_hashtable.h"
-
-static inline WEVT_FIELD_KEY *field_cache_value_to_key(WEVT_FIELD_VALUE *p) {
-    return &p->key;
-}
-
-static inline bool field_cache_cache_compar(WEVT_FIELD_KEY *a, WEVT_FIELD_KEY *b) {
-    return memcmp(a, b, sizeof(WEVT_FIELD_KEY)) == 0;
-}
-
-struct ht {
-    SPINLOCK spinlock;
-    size_t allocations;
-    size_t bytes;
-    struct simple_hashtable_FIELDS_CACHE ht;
-};
-
-static struct {
-    bool initialized;
-    struct ht ht[WEVT_FIELD_TYPE_MAX];
-} fdc = {
-        .initialized = false,
-};
-
-void field_cache_init(void) {
-    for(size_t type = 0; type < WEVT_FIELD_TYPE_MAX ; type++) {
-        spinlock_init(&fdc.ht[type].spinlock);
-        simple_hashtable_init_FIELDS_CACHE(&fdc.ht[type].ht, 10000);
-    }
-}
-
-static inline bool should_zero_provider(WEVT_FIELD_TYPE type, uint64_t value) {
-    switch(type) {
-        case WEVT_FIELD_TYPE_LEVEL:
-            return !is_valid_provider_level(value, true);
-
-        case WEVT_FIELD_TYPE_KEYWORD:
-            return !is_valid_provider_keyword(value, true);
-
-        case WEVT_FIELD_TYPE_OPCODE:
-            return !is_valid_provider_opcode(value, true);
-
-        case WEVT_FIELD_TYPE_TASK:
-            return !is_valid_provider_task(value, true);
-
-        default:
-            return false;
-    }
-}
-
-bool field_cache_get(WEVT_FIELD_TYPE type, const ND_UUID *uuid, uint64_t value, TXT_UTF8 *dst) {
-    fatal_assert(type < WEVT_FIELD_TYPE_MAX);
-
-    struct ht *ht = &fdc.ht[type];
-
-    WEVT_FIELD_KEY t = {
-            .value = value,
-            .provider = should_zero_provider(type, value) ? UUID_ZERO : *uuid,
-    };
-    XXH64_hash_t hash = XXH3_64bits(&t, sizeof(t));
-
-    spinlock_lock(&ht->spinlock);
-    SIMPLE_HASHTABLE_SLOT_FIELDS_CACHE *slot = simple_hashtable_get_slot_FIELDS_CACHE(&ht->ht, hash, &t, true);
-    WEVT_FIELD_VALUE *v = SIMPLE_HASHTABLE_SLOT_DATA(slot);
-    spinlock_unlock(&ht->spinlock);
-
-    if(v) {
-        txt_utf8_resize(dst, v->name_size, false);
-        memcpy(dst->data, v->name, v->name_size);
-        dst->used = v->name_size;
-        dst->src = TXT_SOURCE_FIELD_CACHE;
-        return true;
-    }
-
-    return false;
-}
-
-static WEVT_FIELD_VALUE *wevt_create_cache_entry(WEVT_FIELD_KEY *t, TXT_UTF8 *name, size_t *bytes) {
-    *bytes = sizeof(WEVT_FIELD_VALUE) + name->used;
-    WEVT_FIELD_VALUE *v = callocz(1, *bytes);
-    v->key = *t;
-    memcpy(v->name, name->data, name->used);
-    v->name_size = name->used;
-    return v;
-}
-
-//static bool is_numeric(const char *s) {
-//    while(*s) {
-//        if(!isdigit((uint8_t)*s++))
-//            return false;
-//    }
-//
-//    return true;
-//}
-
-void field_cache_set(WEVT_FIELD_TYPE type, const ND_UUID *uuid, uint64_t value, TXT_UTF8 *name) {
-    fatal_assert(type < WEVT_FIELD_TYPE_MAX);
-
-    struct ht *ht = &fdc.ht[type];
-
-    WEVT_FIELD_KEY t = {
-            .value = value,
-            .provider = should_zero_provider(type, value) ? UUID_ZERO : *uuid,
-    };
-    XXH64_hash_t hash = XXH3_64bits(&t, sizeof(t));
-
-    spinlock_lock(&ht->spinlock);
-    SIMPLE_HASHTABLE_SLOT_FIELDS_CACHE *slot = simple_hashtable_get_slot_FIELDS_CACHE(&ht->ht, hash, &t, true);
-    WEVT_FIELD_VALUE *v = SIMPLE_HASHTABLE_SLOT_DATA(slot);
-    if(!v) {
-        size_t bytes;
-        v = wevt_create_cache_entry(&t, name, &bytes);
-        simple_hashtable_set_slot_FIELDS_CACHE(&ht->ht, slot, hash, v);
-
-        ht->allocations++;
-        ht->bytes += bytes;
-    }
-//    else {
-//        if((v->name_size == 1 && name->used > 0) || is_numeric(v->name)) {
-//            size_t bytes;
-//            WEVT_FIELD_VALUE *nv = wevt_create_cache_entry(&t, name, &bytes);
-//            simple_hashtable_set_slot_FIELDS_CACHE(&ht->ht, slot, hash, nv);
-//            ht->bytes += name->used;
-//            ht->bytes -= v->name_size;
-//            freez(v);
-//        }
-//        else if(name->used > 2 && !is_numeric(name->data) && (v->name_size != name->used || strcasecmp(v->name, name->data) != 0)) {
-//            const char *a = v->name;
-//            const char *b = name->data;
-//            int x = 0;
-//            x++;
-//        }
-//    }
-
-    spinlock_unlock(&ht->spinlock);
-}
-
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#include "windows-events-fields-cache.h"
+
+typedef struct field_key {
+    uint64_t value;
+    ND_UUID provider;
+} WEVT_FIELD_KEY;
+
+typedef struct field_value {
+    WEVT_FIELD_KEY key;
+    uint32_t name_size;
+    char name[];
+} WEVT_FIELD_VALUE;
+
+#define SIMPLE_HASHTABLE_NAME _FIELDS_CACHE
+#define SIMPLE_HASHTABLE_VALUE_TYPE WEVT_FIELD_VALUE *
+#define SIMPLE_HASHTABLE_KEY_TYPE WEVT_FIELD_KEY
+#define SIMPLE_HASHTABLE_VALUE2KEY_FUNCTION field_cache_value_to_key
+#define SIMPLE_HASHTABLE_COMPARE_KEYS_FUNCTION field_cache_cache_compar
+#define SIMPLE_HASHTABLE_SAMPLE_IMPLEMENTATION 1
+#include "libnetdata/simple_hashtable/simple_hashtable.h"
+
+static inline WEVT_FIELD_KEY *field_cache_value_to_key(WEVT_FIELD_VALUE *p) {
+    return &p->key;
+}
+
+static inline bool field_cache_cache_compar(WEVT_FIELD_KEY *a, WEVT_FIELD_KEY *b) {
+    return memcmp(a, b, sizeof(WEVT_FIELD_KEY)) == 0;
+}
+
+struct ht {
+    SPINLOCK spinlock;
+    size_t allocations;
+    size_t bytes;
+    struct simple_hashtable_FIELDS_CACHE ht;
+};
+
+static struct {
+    bool initialized;
+    struct ht ht[WEVT_FIELD_TYPE_MAX];
+} fdc = {
+        .initialized = false,
+};
+
+void field_cache_init(void) {
+    for(size_t type = 0; type < WEVT_FIELD_TYPE_MAX ; type++) {
+        spinlock_init(&fdc.ht[type].spinlock);
+        simple_hashtable_init_FIELDS_CACHE(&fdc.ht[type].ht, 10000);
+    }
+}
+
+static inline bool should_zero_provider(WEVT_FIELD_TYPE type, uint64_t value) {
+    switch(type) {
+        case WEVT_FIELD_TYPE_LEVEL:
+            return !is_valid_provider_level(value, true);
+
+        case WEVT_FIELD_TYPE_KEYWORD:
+            return !is_valid_provider_keyword(value, true);
+
+        case WEVT_FIELD_TYPE_OPCODE:
+            return !is_valid_provider_opcode(value, true);
+
+        case WEVT_FIELD_TYPE_TASK:
+            return !is_valid_provider_task(value, true);
+
+        default:
+            return false;
+    }
+}
+
+bool field_cache_get(WEVT_FIELD_TYPE type, const ND_UUID *uuid, uint64_t value, TXT_UTF8 *dst) {
+    fatal_assert(type < WEVT_FIELD_TYPE_MAX);
+
+    struct ht *ht = &fdc.ht[type];
+
+    WEVT_FIELD_KEY t = {
+            .value = value,
+            .provider = should_zero_provider(type, value) ? UUID_ZERO : *uuid,
+    };
+    XXH64_hash_t hash = XXH3_64bits(&t, sizeof(t));
+
+    spinlock_lock(&ht->spinlock);
+    SIMPLE_HASHTABLE_SLOT_FIELDS_CACHE *slot = simple_hashtable_get_slot_FIELDS_CACHE(&ht->ht, hash, &t, true);
+    WEVT_FIELD_VALUE *v = SIMPLE_HASHTABLE_SLOT_DATA(slot);
+    spinlock_unlock(&ht->spinlock);
+
+    if(v) {
+        txt_utf8_resize(dst, v->name_size, false);
+        memcpy(dst->data, v->name, v->name_size);
+        dst->used = v->name_size;
+        dst->src = TXT_SOURCE_FIELD_CACHE;
+        return true;
+    }
+
+    return false;
+}
+
+static WEVT_FIELD_VALUE *wevt_create_cache_entry(WEVT_FIELD_KEY *t, TXT_UTF8 *name, size_t *bytes) {
+    *bytes = sizeof(WEVT_FIELD_VALUE) + name->used;
+    WEVT_FIELD_VALUE *v = callocz(1, *bytes);
+    v->key = *t;
+    memcpy(v->name, name->data, name->used);
+    v->name_size = name->used;
+    return v;
+}
+
+//static bool is_numeric(const char *s) {
+//    while(*s) {
+//        if(!isdigit((uint8_t)*s++))
+//            return false;
+//    }
+//
+//    return true;
+//}
+
+void field_cache_set(WEVT_FIELD_TYPE type, const ND_UUID *uuid, uint64_t value, TXT_UTF8 *name) {
+    fatal_assert(type < WEVT_FIELD_TYPE_MAX);
+
+    struct ht *ht = &fdc.ht[type];
+
+    WEVT_FIELD_KEY t = {
+            .value = value,
+            .provider = should_zero_provider(type, value) ? UUID_ZERO : *uuid,
+    };
+    XXH64_hash_t hash = XXH3_64bits(&t, sizeof(t));
+
+    spinlock_lock(&ht->spinlock);
+    SIMPLE_HASHTABLE_SLOT_FIELDS_CACHE *slot = simple_hashtable_get_slot_FIELDS_CACHE(&ht->ht, hash, &t, true);
+    WEVT_FIELD_VALUE *v = SIMPLE_HASHTABLE_SLOT_DATA(slot);
+    if(!v) {
+        size_t bytes;
+        v = wevt_create_cache_entry(&t, name, &bytes);
+        simple_hashtable_set_slot_FIELDS_CACHE(&ht->ht, slot, hash, v);
+
+        ht->allocations++;
+        ht->bytes += bytes;
+    }
+//    else {
+//        if((v->name_size == 1 && name->used > 0) || is_numeric(v->name)) {
+//            size_t bytes;
+//            WEVT_FIELD_VALUE *nv = wevt_create_cache_entry(&t, name, &bytes);
+//            simple_hashtable_set_slot_FIELDS_CACHE(&ht->ht, slot, hash, nv);
+//            ht->bytes += name->used;
+//            ht->bytes -= v->name_size;
+//            freez(v);
+//        }
+//        else if(name->used > 2 && !is_numeric(name->data) && (v->name_size != name->used || strcasecmp(v->name, name->data) != 0)) {
+//            const char *a = v->name;
+//            const char *b = name->data;
+//            int x = 0;
+//            x++;
+//        }
+//    }
+
+    spinlock_unlock(&ht->spinlock);
+}
+
diff --git a/src/collectors/windows-events.plugin/windows-events-fields-cache.h b/src/collectors/windows-events.plugin/windows-events-fields-cache.h
index a76170d68a..bf22a1db06 100644
--- a/src/collectors/windows-events.plugin/windows-events-fields-cache.h
+++ b/src/collectors/windows-events.plugin/windows-events-fields-cache.h
@@ -1,22 +1,22 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef NETDATA_WINDOWS_EVENTS_FIELDS_CACHE_H
-#define NETDATA_WINDOWS_EVENTS_FIELDS_CACHE_H
-
-#include "windows-events.h"
-
-typedef enum __attribute__((packed)) {
-    WEVT_FIELD_TYPE_LEVEL = 0,
-    WEVT_FIELD_TYPE_OPCODE,
-    WEVT_FIELD_TYPE_KEYWORD,
-    WEVT_FIELD_TYPE_TASK,
-
-    // terminator
-    WEVT_FIELD_TYPE_MAX,
-} WEVT_FIELD_TYPE;
-
-void field_cache_init(void);
-bool field_cache_get(WEVT_FIELD_TYPE type, const ND_UUID *uuid, uint64_t value, TXT_UTF8 *dst);
-void field_cache_set(WEVT_FIELD_TYPE type, const ND_UUID *uuid, uint64_t value, TXT_UTF8 *name);
-
-#endif //NETDATA_WINDOWS_EVENTS_FIELDS_CACHE_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_WINDOWS_EVENTS_FIELDS_CACHE_H
+#define NETDATA_WINDOWS_EVENTS_FIELDS_CACHE_H
+
+#include "windows-events.h"
+
+typedef enum __attribute__((packed)) {
+    WEVT_FIELD_TYPE_LEVEL = 0,
+    WEVT_FIELD_TYPE_OPCODE,
+    WEVT_FIELD_TYPE_KEYWORD,
+    WEVT_FIELD_TYPE_TASK,
+
+    // terminator
+    WEVT_FIELD_TYPE_MAX,
+} WEVT_FIELD_TYPE;
+
+void field_cache_init(void);
+bool field_cache_get(WEVT_FIELD_TYPE type, const ND_UUID *uuid, uint64_t value, TXT_UTF8 *dst);
+void field_cache_set(WEVT_FIELD_TYPE type, const ND_UUID *uuid, uint64_t value, TXT_UTF8 *name);
+
+#endif //NETDATA_WINDOWS_EVENTS_FIELDS_CACHE_H
diff --git a/src/collectors/xenstat.plugin/xenstat_plugin.c b/src/collectors/xenstat.plugin/xenstat_plugin.c
index e71facde0e..0403eec56c 100644
--- a/src/collectors/xenstat.plugin/xenstat_plugin.c
+++ b/src/collectors/xenstat.plugin/xenstat_plugin.c
@@ -952,9 +952,8 @@ int main(int argc, char **argv) {
             fprintf(stderr,
                     "\n"
                     " netdata xenstat.plugin %s\n"
-                    " Copyright (C) 2019 Netdata Inc.\n"
+                    " Copyright 2018-2025 Netdata Inc.\n"
                     " Released under GNU General Public License v3 or later.\n"
-                    " All rights reserved.\n"
                     "\n"
                     " This program is a data collector plugin for netdata.\n"
                     "\n"
diff --git a/src/daemon/main.c b/src/daemon/main.c
index 5ba3da7d64..1222acb5b9 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -101,12 +101,11 @@ int help(int exitcode) {
     fprintf(stream, "%s", "\n"
             " ^\n"
             " |.-.   .-.   .-.   .-.   .  netdata                                         \n"
-            " |   '-'   '-'   '-'   '-'   real-time performance monitoring, done right!   \n"
+            " |   '-'   '-'   '-'   '-'   monitoring and troubleshooting, transformed!    \n"
             " +----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--->\n"
             "\n"
-            " Copyright (C) 2016-2023, Netdata, Inc. <info@netdata.cloud>\n"
+            " Copyright 2018-2025 Netdata Inc.\n"
             " Released under GNU General Public License v3 or later.\n"
-            " All rights reserved.\n"
             "\n"
             " Home Page  : https://netdata.cloud\n"
             " Source Code: https://github.com/netdata/netdata\n"
diff --git a/src/health/notifications/alarm-notify.sh.in b/src/health/notifications/alarm-notify.sh.in
index d7baa73450..422fe6994a 100755
--- a/src/health/notifications/alarm-notify.sh.in
+++ b/src/health/notifications/alarm-notify.sh.in
@@ -1,9 +1,4 @@
 #!/usr/bin/env bash
-#shellcheck source=/dev/null disable=SC2086,SC2154
-
-# netdata
-# real-time performance and health monitoring, done right!
-# (C) 2023 Netdata Inc.
 # SPDX-License-Identifier: GPL-3.0-or-later
 #
 # Script to send alarm notifications for netdata
@@ -38,6 +33,7 @@
 #  - Opsgenie by @thiaoftsm #9858
 #  - Gotify by @coffeegrind123
 #  - ntfy.sh by @Dim-P
+#shellcheck source=/dev/null disable=SC2086,SC2154
 
 # -----------------------------------------------------------------------------
 # testing notifications
diff --git a/src/health/notifications/alarm-test.sh b/src/health/notifications/alarm-test.sh
index 828aa756bb..1f179610e8 100755
--- a/src/health/notifications/alarm-test.sh
+++ b/src/health/notifications/alarm-test.sh
@@ -1,8 +1,4 @@
 #!/usr/bin/env bash
-
-# netdata
-# real-time performance and health monitoring, done right!
-# (C) 2017 Costa Tsaousis <costa@tsaousis.gr>
 # SPDX-License-Identifier: GPL-3.0-or-later
 #
 # Script to test alarm notifications for netdata
diff --git a/src/libnetdata/avl/avl.c b/src/libnetdata/avl/avl.c
index e1d4064dc0..cc5b899075 100644
--- a/src/libnetdata/avl/avl.c
+++ b/src/libnetdata/avl/avl.c
@@ -5,7 +5,7 @@
 /* ------------------------------------------------------------------------- */
 /*
  * avl_insert(), avl_remove() and avl_search()
- * are adaptations (by Costa Tsaousis) of the AVL algorithm found in libavl
+ * are adaptations (by Netdata Inc.) of the AVL algorithm found in libavl
  * v2.0.3, so that they do not use any memory allocations and their memory
  * footprint is optimized (by eliminating non-necessary data members).
  *
@@ -279,7 +279,7 @@ avl_t *avl_remove(avl_tree_type *tree, avl_t *item) {
 }
 
 /* ------------------------------------------------------------------------- */
-// below are functions by (C) Costa Tsaousis
+// below are functions by Copyright 2018-2025 Netdata Inc.
 
 // ---------------------------
 // traversing
diff --git a/src/libnetdata/os/setenv.c b/src/libnetdata/os/setenv.c
index c0de1b4b60..dee301c909 100644
--- a/src/libnetdata/os/setenv.c
+++ b/src/libnetdata/os/setenv.c
@@ -1,43 +1,43 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#include "libnetdata/libnetdata.h"
-
-#ifndef HAVE_SETENV
-int os_setenv(const char *name, const char *value, int overwrite) {
-    char *env_var;
-    int result;
-
-    if (!overwrite) {
-        env_var = getenv(name);
-        if (env_var) return 0; // Already set
-    }
-
-    size_t len = strlen(name) + strlen(value) + 2; // +2 for '=' and '\0'
-    env_var = malloc(len);
-    if (!env_var) return -1; // Allocation failure
-    snprintf(env_var, len, "%s=%s", name, value);
-
-    result = putenv(env_var);
-    // free(env_var); // _putenv in Windows makes a copy of the string
-    return result;
-}
-
-#endif
-
-void nd_setenv(const char *name, const char *value, int overwrite) {
-#if defined(OS_WINDOWS)
-    if(overwrite)
-        SetEnvironmentVariable(name, value);
-    else {
-        char buf[1024];
-        if(GetEnvironmentVariable(name, buf, sizeof(buf)) == 0)
-            SetEnvironmentVariable(name, value);
-    }
-#endif
-
-#ifdef HAVE_SETENV
-    setenv(name, value, overwrite);
-#else
-    os_setenv(name, value, overwite);
-#endif
-}
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#include "libnetdata/libnetdata.h"
+
+#ifndef HAVE_SETENV
+int os_setenv(const char *name, const char *value, int overwrite) {
+    char *env_var;
+    int result;
+
+    if (!overwrite) {
+        env_var = getenv(name);
+        if (env_var) return 0; // Already set
+    }
+
+    size_t len = strlen(name) + strlen(value) + 2; // +2 for '=' and '\0'
+    env_var = malloc(len);
+    if (!env_var) return -1; // Allocation failure
+    snprintf(env_var, len, "%s=%s", name, value);
+
+    result = putenv(env_var);
+    // free(env_var); // _putenv in Windows makes a copy of the string
+    return result;
+}
+
+#endif
+
+void nd_setenv(const char *name, const char *value, int overwrite) {
+#if defined(OS_WINDOWS)
+    if(overwrite)
+        SetEnvironmentVariable(name, value);
+    else {
+        char buf[1024];
+        if(GetEnvironmentVariable(name, buf, sizeof(buf)) == 0)
+            SetEnvironmentVariable(name, value);
+    }
+#endif
+
+#ifdef HAVE_SETENV
+    setenv(name, value, overwrite);
+#else
+    os_setenv(name, value, overwite);
+#endif
+}
diff --git a/src/libnetdata/os/setenv.h b/src/libnetdata/os/setenv.h
index 78e7224ded..c3af2f25a3 100644
--- a/src/libnetdata/os/setenv.h
+++ b/src/libnetdata/os/setenv.h
@@ -1,15 +1,15 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef NETDATA_SETENV_H
-#define NETDATA_SETENV_H
-
-#include "config.h"
-
-#ifndef HAVE_SETENV
-int os_setenv(const char *name, const char *value, int overwrite);
-#define setenv(name, value, overwrite) os_setenv(name, value, overwrite)
-#endif
-
-void nd_setenv(const char *name, const char *value, int overwrite);
-
-#endif //NETDATA_SETENV_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_SETENV_H
+#define NETDATA_SETENV_H
+
+#include "config.h"
+
+#ifndef HAVE_SETENV
+int os_setenv(const char *name, const char *value, int overwrite);
+#define setenv(name, value, overwrite) os_setenv(name, value, overwrite)
+#endif
+
+void nd_setenv(const char *name, const char *value, int overwrite);
+
+#endif //NETDATA_SETENV_H
diff --git a/src/libnetdata/os/sleep.h b/src/libnetdata/os/sleep.h
index 7266032e73..eb056dc345 100644
--- a/src/libnetdata/os/sleep.h
+++ b/src/libnetdata/os/sleep.h
@@ -1,10 +1,10 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef NETDATA_SLEEP_H
-#define NETDATA_SLEEP_H
-
-void yield_the_processor(void);
-void tinysleep(void);
-void microsleep(usec_t ut);
-
-#endif //NETDATA_SLEEP_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_SLEEP_H
+#define NETDATA_SLEEP_H
+
+void yield_the_processor(void);
+void tinysleep(void);
+void microsleep(usec_t ut);
+
+#endif //NETDATA_SLEEP_H
diff --git a/src/libnetdata/os/uuid_generate.h b/src/libnetdata/os/uuid_generate.h
index 95f07c7968..de24eca644 100644
--- a/src/libnetdata/os/uuid_generate.h
+++ b/src/libnetdata/os/uuid_generate.h
@@ -1,10 +1,10 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef NETDATA_UUID_GENERATE_H
-#define NETDATA_UUID_GENERATE_H
-
-void os_uuid_generate(void *out);
-void os_uuid_generate_random(void *out);
-void os_uuid_generate_time(void *out);
-
-#endif //NETDATA_UUID_GENERATE_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_UUID_GENERATE_H
+#define NETDATA_UUID_GENERATE_H
+
+void os_uuid_generate(void *out);
+void os_uuid_generate_random(void *out);
+void os_uuid_generate_time(void *out);
+
+#endif //NETDATA_UUID_GENERATE_H
diff --git a/src/libnetdata/parsers/entries.c b/src/libnetdata/parsers/entries.c
index 7f98278f5a..c9f7eae928 100644
--- a/src/libnetdata/parsers/entries.c
+++ b/src/libnetdata/parsers/entries.c
@@ -1,183 +1,183 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#include "entries.h"
-
-// Define multipliers for base 10 (decimal) units
-#define ENTRIES_MULTIPLIER_BASE10 1000ULL
-#define ENTRIES_MULTIPLIER_K (ENTRIES_MULTIPLIER_BASE10)
-#define ENTRIES_MULTIPLIER_M (ENTRIES_MULTIPLIER_K * ENTRIES_MULTIPLIER_BASE10)
-#define ENTRIES_MULTIPLIER_G (ENTRIES_MULTIPLIER_M * ENTRIES_MULTIPLIER_BASE10)
-#define ENTRIES_MULTIPLIER_T (ENTRIES_MULTIPLIER_G * ENTRIES_MULTIPLIER_BASE10)
-#define ENTRIES_MULTIPLIER_P (ENTRIES_MULTIPLIER_T * ENTRIES_MULTIPLIER_BASE10)
-#define ENTRIES_MULTIPLIER_E (ENTRIES_MULTIPLIER_P * ENTRIES_MULTIPLIER_BASE10)
-#define ENTRIES_MULTIPLIER_Z (ENTRIES_MULTIPLIER_E * ENTRIES_MULTIPLIER_BASE10)
-#define ENTRIES_MULTIPLIER_Y (ENTRIES_MULTIPLIER_Z * ENTRIES_MULTIPLIER_BASE10)
-
-// Define a structure to map size units to their multipliers
-static const struct size_unit {
-    const char *unit;
-    const bool formatter; // true when this unit should be used when formatting to string
-    const uint64_t multiplier;
-} entries_units[] = {
-    // the order of this table is important: smaller to bigger units!
-
-    { .unit = "",    .formatter = true,  .multiplier = 1ULL },
-    { .unit = "k",   .formatter = false, .multiplier = ENTRIES_MULTIPLIER_K },
-    { .unit = "K",   .formatter = true,  .multiplier = ENTRIES_MULTIPLIER_K },
-    { .unit = "M",   .formatter = true,  .multiplier = ENTRIES_MULTIPLIER_M },
-    { .unit = "G",   .formatter = true,  .multiplier = ENTRIES_MULTIPLIER_G },
-    { .unit = "T",   .formatter = true,  .multiplier = ENTRIES_MULTIPLIER_T },
-    { .unit = "P",   .formatter = true,  .multiplier = ENTRIES_MULTIPLIER_P },
-    { .unit = "E",   .formatter = true,  .multiplier = ENTRIES_MULTIPLIER_E },
-    { .unit = "Z",   .formatter = true,  .multiplier = ENTRIES_MULTIPLIER_Z },
-    { .unit = "Y",   .formatter = true,  .multiplier = ENTRIES_MULTIPLIER_Y },
-};
-
-static inline const struct size_unit *entries_find_unit(const char *unit) {
-    if (!unit || !*unit) unit = "";
-
-    for (size_t i = 0; i < sizeof(entries_units) / sizeof(entries_units[0]); i++) {
-        const struct size_unit *su = &entries_units[i];
-        if ((uint8_t)unit[0] == (uint8_t)su->unit[0] && strcmp(unit, su->unit) == 0)
-            return su;
-    }
-
-    return NULL;
-}
-
-static inline double entries_round_to_resolution_dbl2(uint64_t value, uint64_t resolution) {
-    double converted = (double)value / (double)resolution;
-    return round(converted * 100.0) / 100.0;
-}
-
-static inline uint64_t entries_round_to_resolution_int(uint64_t value, uint64_t resolution) {
-    return (value + (resolution / 2)) / resolution;
-}
-
-// -------------------------------------------------------------------------------------------------------------------
-// parse a size string
-
-bool entries_parse(const char *entries_str, uint64_t *result, const char *default_unit) {
-    if (!entries_str || !*entries_str) {
-        *result = 0;
-        return false;
-    }
-
-    const struct size_unit *su_def = entries_find_unit(default_unit);
-    if(!su_def) {
-        *result = 0;
-        return false;
-    }
-
-    const char *s = entries_str;
-
-    // Skip leading spaces
-    while (isspace((uint8_t)*s)) s++;
-
-    if(strcmp(s, "off") == 0) {
-        *result = 0;
-        return true;
-    }
-
-    // Parse the number
-    const char *number_start = s;
-    NETDATA_DOUBLE value = strtondd(s, (char **)&s);
-
-    // If no valid number found, return false
-    if (s == number_start || value < 0) {
-        *result = 0;
-        return false;
-    }
-
-    // Skip spaces between number and unit
-    while (isspace((uint8_t)*s)) s++;
-
-    const char *unit_start = s;
-    while (isalpha((uint8_t)*s)) s++;
-
-    char unit[4];
-    size_t unit_len = s - unit_start;
-    const struct size_unit *su;
-    if (unit_len == 0)
-        su = su_def;
-    else {
-        if (unit_len >= sizeof(unit)) unit_len = sizeof(unit) - 1;
-        strncpy(unit, unit_start, unit_len);
-        unit[unit_len] = '\0';
-        su = entries_find_unit(unit);
-        if (!su) {
-            *result = 0;
-            return false;
-        }
-    }
-
-    uint64_t bytes = (uint64_t)round(value * (NETDATA_DOUBLE)su->multiplier);
-    *result = entries_round_to_resolution_int(bytes, su_def->multiplier);
-
-    return true;
-}
-
-// --------------------------------------------------------------------------------------------------------------------
-// generate a string to represent a size
-
-ssize_t entries_snprintf(char *dst, size_t dst_size, uint64_t value, const char *unit, bool accurate) {
-    if (!dst || dst_size == 0) return -1;
-    if (dst_size == 1) {
-        dst[0] = '\0';
-        return -2;
-    }
-
-    if (value == 0)
-        return snprintfz(dst, dst_size, "off");
-
-    const struct size_unit *su_def = entries_find_unit(unit);
-    if(!su_def) return -3;
-
-    // use the units multiplier to find the units
-    uint64_t bytes = value * su_def->multiplier;
-
-    // Find the best unit to represent the size with up to 2 fractional digits
-    const struct size_unit *su_best = su_def;
-    for (size_t i = 0; i < sizeof(entries_units) / sizeof(entries_units[0]); i++) {
-        const struct size_unit *su = &entries_units[i];
-        if (su->multiplier < su_def->multiplier     ||  // the multiplier is too small
-            (!su->formatter && su != su_def)        ||  // it is not to be used in formatting (except our unit)
-            (bytes < su->multiplier && su != su_def) )  // the converted value will be <1.0
-            continue;
-
-        double converted = entries_round_to_resolution_dbl2(bytes, su->multiplier);
-
-        uint64_t reversed_bytes = (uint64_t)round((converted * (double)su->multiplier));
-
-        if(accurate) {
-            // no precision loss is required
-            if (reversed_bytes == bytes && converted > 1.0)
-                // no precision loss, this is good to use
-                su_best = su;
-        }
-        else {
-            if(converted > 1.0)
-                su_best = su;
-        }
-    }
-
-    double converted = entries_round_to_resolution_dbl2(bytes, su_best->multiplier);
-
-    // print it either with 0, 1 or 2 fractional digits
-    int written;
-    if(converted == (double)((uint64_t)converted))
-        written = snprintfz(dst, dst_size, "%.0f%s", converted, su_best->unit);
-    else if(converted * 10.0 == (double)((uint64_t)(converted * 10.0)))
-        written = snprintfz(dst, dst_size, "%.1f%s", converted, su_best->unit);
-    else
-        written = snprintfz(dst, dst_size, "%.2f%s", converted, su_best->unit);
-
-    if (written < 0)
-        return -4;
-
-    if ((size_t)written >= dst_size)
-        return (ssize_t)(dst_size - 1);
-
-    return written;
-}
-
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#include "entries.h"
+
+// Define multipliers for base 10 (decimal) units
+#define ENTRIES_MULTIPLIER_BASE10 1000ULL
+#define ENTRIES_MULTIPLIER_K (ENTRIES_MULTIPLIER_BASE10)
+#define ENTRIES_MULTIPLIER_M (ENTRIES_MULTIPLIER_K * ENTRIES_MULTIPLIER_BASE10)
+#define ENTRIES_MULTIPLIER_G (ENTRIES_MULTIPLIER_M * ENTRIES_MULTIPLIER_BASE10)
+#define ENTRIES_MULTIPLIER_T (ENTRIES_MULTIPLIER_G * ENTRIES_MULTIPLIER_BASE10)
+#define ENTRIES_MULTIPLIER_P (ENTRIES_MULTIPLIER_T * ENTRIES_MULTIPLIER_BASE10)
+#define ENTRIES_MULTIPLIER_E (ENTRIES_MULTIPLIER_P * ENTRIES_MULTIPLIER_BASE10)
+#define ENTRIES_MULTIPLIER_Z (ENTRIES_MULTIPLIER_E * ENTRIES_MULTIPLIER_BASE10)
+#define ENTRIES_MULTIPLIER_Y (ENTRIES_MULTIPLIER_Z * ENTRIES_MULTIPLIER_BASE10)
+
+// Define a structure to map size units to their multipliers
+static const struct size_unit {
+    const char *unit;
+    const bool formatter; // true when this unit should be used when formatting to string
+    const uint64_t multiplier;
+} entries_units[] = {
+    // the order of this table is important: smaller to bigger units!
+
+    { .unit = "",    .formatter = true,  .multiplier = 1ULL },
+    { .unit = "k",   .formatter = false, .multiplier = ENTRIES_MULTIPLIER_K },
+    { .unit = "K",   .formatter = true,  .multiplier = ENTRIES_MULTIPLIER_K },
+    { .unit = "M",   .formatter = true,  .multiplier = ENTRIES_MULTIPLIER_M },
+    { .unit = "G",   .formatter = true,  .multiplier = ENTRIES_MULTIPLIER_G },
+    { .unit = "T",   .formatter = true,  .multiplier = ENTRIES_MULTIPLIER_T },
+    { .unit = "P",   .formatter = true,  .multiplier = ENTRIES_MULTIPLIER_P },
+    { .unit = "E",   .formatter = true,  .multiplier = ENTRIES_MULTIPLIER_E },
+    { .unit = "Z",   .formatter = true,  .multiplier = ENTRIES_MULTIPLIER_Z },
+    { .unit = "Y",   .formatter = true,  .multiplier = ENTRIES_MULTIPLIER_Y },
+};
+
+static inline const struct size_unit *entries_find_unit(const char *unit) {
+    if (!unit || !*unit) unit = "";
+
+    for (size_t i = 0; i < sizeof(entries_units) / sizeof(entries_units[0]); i++) {
+        const struct size_unit *su = &entries_units[i];
+        if ((uint8_t)unit[0] == (uint8_t)su->unit[0] && strcmp(unit, su->unit) == 0)
+            return su;
+    }
+
+    return NULL;
+}
+
+static inline double entries_round_to_resolution_dbl2(uint64_t value, uint64_t resolution) {
+    double converted = (double)value / (double)resolution;
+    return round(converted * 100.0) / 100.0;
+}
+
+static inline uint64_t entries_round_to_resolution_int(uint64_t value, uint64_t resolution) {
+    return (value + (resolution / 2)) / resolution;
+}
+
+// -------------------------------------------------------------------------------------------------------------------
+// parse a size string
+
+bool entries_parse(const char *entries_str, uint64_t *result, const char *default_unit) {
+    if (!entries_str || !*entries_str) {
+        *result = 0;
+        return false;
+    }
+
+    const struct size_unit *su_def = entries_find_unit(default_unit);
+    if(!su_def) {
+        *result = 0;
+        return false;
+    }
+
+    const char *s = entries_str;
+
+    // Skip leading spaces
+    while (isspace((uint8_t)*s)) s++;
+
+    if(strcmp(s, "off") == 0) {
+        *result = 0;
+        return true;
+    }
+
+    // Parse the number
+    const char *number_start = s;
+    NETDATA_DOUBLE value = strtondd(s, (char **)&s);
+
+    // If no valid number found, return false
+    if (s == number_start || value < 0) {
+        *result = 0;
+        return false;
+    }
+
+    // Skip spaces between number and unit
+    while (isspace((uint8_t)*s)) s++;
+
+    const char *unit_start = s;
+    while (isalpha((uint8_t)*s)) s++;
+
+    char unit[4];
+    size_t unit_len = s - unit_start;
+    const struct size_unit *su;
+    if (unit_len == 0)
+        su = su_def;
+    else {
+        if (unit_len >= sizeof(unit)) unit_len = sizeof(unit) - 1;
+        strncpy(unit, unit_start, unit_len);
+        unit[unit_len] = '\0';
+        su = entries_find_unit(unit);
+        if (!su) {
+            *result = 0;
+            return false;
+        }
+    }
+
+    uint64_t bytes = (uint64_t)round(value * (NETDATA_DOUBLE)su->multiplier);
+    *result = entries_round_to_resolution_int(bytes, su_def->multiplier);
+
+    return true;
+}
+
+// --------------------------------------------------------------------------------------------------------------------
+// generate a string to represent a size
+
+ssize_t entries_snprintf(char *dst, size_t dst_size, uint64_t value, const char *unit, bool accurate) {
+    if (!dst || dst_size == 0) return -1;
+    if (dst_size == 1) {
+        dst[0] = '\0';
+        return -2;
+    }
+
+    if (value == 0)
+        return snprintfz(dst, dst_size, "off");
+
+    const struct size_unit *su_def = entries_find_unit(unit);
+    if(!su_def) return -3;
+
+    // use the units multiplier to find the units
+    uint64_t bytes = value * su_def->multiplier;
+
+    // Find the best unit to represent the size with up to 2 fractional digits
+    const struct size_unit *su_best = su_def;
+    for (size_t i = 0; i < sizeof(entries_units) / sizeof(entries_units[0]); i++) {
+        const struct size_unit *su = &entries_units[i];
+        if (su->multiplier < su_def->multiplier     ||  // the multiplier is too small
+            (!su->formatter && su != su_def)        ||  // it is not to be used in formatting (except our unit)
+            (bytes < su->multiplier && su != su_def) )  // the converted value will be <1.0
+            continue;
+
+        double converted = entries_round_to_resolution_dbl2(bytes, su->multiplier);
+
+        uint64_t reversed_bytes = (uint64_t)round((converted * (double)su->multiplier));
+
+        if(accurate) {
+            // no precision loss is required
+            if (reversed_bytes == bytes && converted > 1.0)
+                // no precision loss, this is good to use
+                su_best = su;
+        }
+        else {
+            if(converted > 1.0)
+                su_best = su;
+        }
+    }
+
+    double converted = entries_round_to_resolution_dbl2(bytes, su_best->multiplier);
+
+    // print it either with 0, 1 or 2 fractional digits
+    int written;
+    if(converted == (double)((uint64_t)converted))
+        written = snprintfz(dst, dst_size, "%.0f%s", converted, su_best->unit);
+    else if(converted * 10.0 == (double)((uint64_t)(converted * 10.0)))
+        written = snprintfz(dst, dst_size, "%.1f%s", converted, su_best->unit);
+    else
+        written = snprintfz(dst, dst_size, "%.2f%s", converted, su_best->unit);
+
+    if (written < 0)
+        return -4;
+
+    if ((size_t)written >= dst_size)
+        return (ssize_t)(dst_size - 1);
+
+    return written;
+}
+
diff --git a/src/libnetdata/parsers/entries.h b/src/libnetdata/parsers/entries.h
index a90b8f6f4e..4f4d01ede4 100644
--- a/src/libnetdata/parsers/entries.h
+++ b/src/libnetdata/parsers/entries.h
@@ -1,19 +1,19 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef LIBNETDATA_PARSERS_ENTRIES_H
-#define LIBNETDATA_PARSERS_ENTRIES_H
-
-#include "parsers.h"
-
-bool entries_parse(const char *entries_str, uint64_t *result, const char *default_unit);
-#define entries_parse_k(size_str, kb) size_parse(size_str, kb, "K")
-#define entries_parse_m(size_str, mb) size_parse(size_str, mb, "M")
-#define entries_parse_g(size_str, gb) size_parse(size_str, gb, "G")
-
-ssize_t entries_snprintf(char *dst, size_t dst_size, uint64_t value, const char *unit, bool accurate);
-#define entries_snprintf_n(dst, dst_size, value) size_snprintf(dst, dst_size, value, "", true)
-#define entries_snprintf_k(dst, dst_size, value) size_snprintf(dst, dst_size, value, "K", true)
-#define entries_snprintf_m(dst, dst_size, value) size_snprintf(dst, dst_size, value, "M", true)
-#define entries_snprintf_g(dst, dst_size, value) size_snprintf(dst, dst_size, value, "G", true)
-
-#endif //LIBNETDATA_PARSERS_ENTRIES_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef LIBNETDATA_PARSERS_ENTRIES_H
+#define LIBNETDATA_PARSERS_ENTRIES_H
+
+#include "parsers.h"
+
+bool entries_parse(const char *entries_str, uint64_t *result, const char *default_unit);
+#define entries_parse_k(size_str, kb) size_parse(size_str, kb, "K")
+#define entries_parse_m(size_str, mb) size_parse(size_str, mb, "M")
+#define entries_parse_g(size_str, gb) size_parse(size_str, gb, "G")
+
+ssize_t entries_snprintf(char *dst, size_t dst_size, uint64_t value, const char *unit, bool accurate);
+#define entries_snprintf_n(dst, dst_size, value) size_snprintf(dst, dst_size, value, "", true)
+#define entries_snprintf_k(dst, dst_size, value) size_snprintf(dst, dst_size, value, "K", true)
+#define entries_snprintf_m(dst, dst_size, value) size_snprintf(dst, dst_size, value, "M", true)
+#define entries_snprintf_g(dst, dst_size, value) size_snprintf(dst, dst_size, value, "G", true)
+
+#endif //LIBNETDATA_PARSERS_ENTRIES_H
diff --git a/src/libnetdata/spawn_server/log-forwarder.h b/src/libnetdata/spawn_server/log-forwarder.h
index 344601c1f0..96a3dc0d72 100644
--- a/src/libnetdata/spawn_server/log-forwarder.h
+++ b/src/libnetdata/spawn_server/log-forwarder.h
@@ -1,17 +1,17 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#ifndef NETDATA_LOG_FORWARDER_H
-#define NETDATA_LOG_FORWARDER_H
-
-#include "../libnetdata.h"
-
-typedef struct LOG_FORWARDER LOG_FORWARDER;
-
-LOG_FORWARDER *log_forwarder_start(void); // done once, at spawn_server_create()
-void log_forwarder_add_fd(LOG_FORWARDER *lf, int fd); // to add a new fd
-void log_forwarder_annotate_fd_name(LOG_FORWARDER *lf, int fd, const char *cmd); // set the syslog identifier
-void log_forwarder_annotate_fd_pid(LOG_FORWARDER *lf, int fd, pid_t pid); // set the pid of the child process
-bool log_forwarder_del_and_close_fd(LOG_FORWARDER *lf, int fd); // to remove an fd
-void log_forwarder_stop(LOG_FORWARDER *lf); // done once, at spawn_server_destroy()
-
-#endif //NETDATA_LOG_FORWARDER_H
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef NETDATA_LOG_FORWARDER_H
+#define NETDATA_LOG_FORWARDER_H
+
+#include "../libnetdata.h"
+
+typedef struct LOG_FORWARDER LOG_FORWARDER;
+
+LOG_FORWARDER *log_forwarder_start(void); // done once, at spawn_server_create()
+void log_forwarder_add_fd(LOG_FORWARDER *lf, int fd); // to add a new fd
+void log_forwarder_annotate_fd_name(LOG_FORWARDER *lf, int fd, const char *cmd); // set the syslog identifier
+void log_forwarder_annotate_fd_pid(LOG_FORWARDER *lf, int fd, pid_t pid); // set the pid of the child process
+bool log_forwarder_del_and_close_fd(LOG_FORWARDER *lf, int fd); // to remove an fd
+void log_forwarder_stop(LOG_FORWARDER *lf); // done once, at spawn_server_destroy()
+
+#endif //NETDATA_LOG_FORWARDER_H
diff --git a/src/web/gui/bundle_dashboard_v1.py b/src/web/gui/bundle_dashboard_v1.py
index 9c6f4d682e..8cc0ed08ec 100755
--- a/src/web/gui/bundle_dashboard_v1.py
+++ b/src/web/gui/bundle_dashboard_v1.py
@@ -1,6 +1,4 @@
 #!/usr/bin/env python3
-#
-# Copyright: © 2021 Netdata Inc.
 # SPDX-License-Identifier: GPL-3.0-or-later
 
 import os
diff --git a/src/web/gui/old/index.html b/src/web/gui/old/index.html
index 4b5707a2d0..227312305b 100644
--- a/src/web/gui/old/index.html
+++ b/src/web/gui/old/index.html
@@ -58,7 +58,7 @@
             theme = localStorage.getItem('netdataTheme') || 'slate';
         }
         const overlayEl = document.getElementById('loadOverlay');
-        overlayEl.innerHTML = 'netdata<br/><div style="font-size: 3vh;">Real-time performance monitoring, done right!</div>';
+        overlayEl.innerHTML = 'netdata<br/><div style="font-size: 3vh;">Monitoring and troubleshooting, transformed!</div>';
         overlayEl.style = theme == 'slate' ? "background-color: #272b30; color: #373b40;" : "background-color: #fff; color: #ddd;";
     </script>
     <nav class="navbar navbar-default navbar-fixed-top" role="banner">
@@ -164,8 +164,7 @@
                 <div class="p">
                     <big><a href="https://github.com/netdata/netdata/wiki" target="_blank">Netdata</a></big>
                     <br /><br />
-                    <i class="fas fa-copyright"></i> Copyright 2018, <a href="mailto:info@netdata.cloud">Netdata, Inc</a>.<br/>
-                    <i class="fas fa-copyright"></i> Copyright 2016-2018, <a href="mailto:costa@tsaousis.gr">Costa Tsaousis</a>.<br/>
+                    <i class="fas fa-copyright"></i> Copyright 2018-2025, <a href="mailto:info@netdata.cloud">Netdata Inc.</a>.<br/>
                 </div>
                 <div class="p">
                     Released under <a href="http://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank">GPL v3 or later</a>.
@@ -427,7 +426,7 @@
                         Enjoy real-time performance monitoring!
                     </div>
                     <div class="p">
-                        Costa Tsaousis
+                        Copyright 2018-2025 Netdata Inc.
                     </div>
                 </div>
                 <div class="modal-footer">
diff --git a/src/web/gui/v1/dashboard.html b/src/web/gui/v1/dashboard.html
index be0febf7a8..a901805eac 100644
--- a/src/web/gui/v1/dashboard.html
+++ b/src/web/gui/v1/dashboard.html
@@ -18,7 +18,7 @@
     <meta property="og:url" content="http://my-netdata.io/"/>
     <meta property="og:type" content="website"/>
     <meta property="og:site_name" content="netdata"/>
-    <meta property="og:title" content="netdata - real-time performance monitoring, done right!"/>
+    <meta property="og:title" content="netdata - monitoring and troubleshooting, transformed!"/>
     <meta property="og:description" content="Stunning real-time dashboards, blazingly fast and extremely interactive. Zero configuration, zero dependencies, zero maintenance." />
 </head>
 <body>
diff --git a/src/web/gui/v1/demo.html b/src/web/gui/v1/demo.html
index 642742a55e..ce21b0bec0 100644
--- a/src/web/gui/v1/demo.html
+++ b/src/web/gui/v1/demo.html
@@ -18,7 +18,7 @@
     <meta property="og:url" content="http://my-netdata.io/"/>
     <meta property="og:type" content="website"/>
     <meta property="og:site_name" content="netdata"/>
-    <meta property="og:title" content="netdata - real-time performance monitoring, done right!"/>
+    <meta property="og:title" content="netdata - monitoring and troubleshooting, transformed!"/>
     <meta property="og:description" content="Stunning real-time dashboards, blazingly fast and extremely interactive. Zero configuration, zero dependencies, zero maintenance." />
 </head>
 <script type="text/javascript" src="dashboard.js?v20190902-0"></script>
diff --git a/src/web/gui/v1/demo2.html b/src/web/gui/v1/demo2.html
index 9a77fdde53..a31b5be2be 100644
--- a/src/web/gui/v1/demo2.html
+++ b/src/web/gui/v1/demo2.html
@@ -18,7 +18,7 @@
     <meta property="og:url" content="http://my-netdata.io/"/>
     <meta property="og:type" content="website"/>
     <meta property="og:site_name" content="netdata"/>
-    <meta property="og:title" content="netdata - real-time performance monitoring, done right!"/>
+    <meta property="og:title" content="netdata - monitoring and troubleshooting, transformed!"/>
     <meta property="og:description" content="Stunning real-time dashboards, blazingly fast and extremely interactive. Zero configuration, zero dependencies, zero maintenance." />
 </head>
 <script>var netdataTheme = 'slate';</script>
diff --git a/src/web/gui/v1/demosites.html b/src/web/gui/v1/demosites.html
index 2ce20df05f..195f1a7992 100644
--- a/src/web/gui/v1/demosites.html
+++ b/src/web/gui/v1/demosites.html
@@ -5,7 +5,7 @@
     <meta http-equiv="Refresh" content="0; url=https://www.netdata.cloud">
     <meta charset=utf-8>
     <title>Netdata: Get control of your Linux Servers. Simple. Effective. Awesome.</title>
-    <meta name=author content="Costa Tsaousis">
+    <meta name=author content="Netdata Inc.">
     <meta name=description content="Unparalleled insights, in real-time, of everything happening on your Linux systems and applications, with stunning, interactive web dashboards and powerful performance and health alarms.">
 
     <meta name=viewport content="width=device-width,initial-scale=1">
@@ -1329,30 +1329,14 @@ p {
         <div class="fb-share-button" data-href="https://my-netdata.io/" data-layout="button" data-size="small" data-mobile-iframe="true"><a class="fb-xfbml-parse-ignore" target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fmy-netdata.io%2F&amp;src=sdkpreparse" style="vertical-align:top;display:inline-block; height: 34px;">Share</a></div>
         <div class="fb-follow" data-href="https://www.facebook.com/linuxnetdata/" data-layout="standard" data-size="small" data-show-faces="false" data-colorscheme="dark" width="225" style="vertical-align:top;display:inline-block; height: 34px;"></div>
     </div>
-    </p>
     <p>
         <strong>netdata</strong><br/>
-        &copy; Copyright 2018-2019, <a href="https://github.com/netdata" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=NetdataInc>Netdata</a><br/>
-        &copy; Copyright 2016-2018, <a href="https://github.com/ktsaou" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=CostaTsaousis>Costa Tsaousis</a><br/>
+        &copy; Copyright 2018-2025 <a href="https://github.com/netdata" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=NetdataInc>Netdata Inc.</a><br/>
         Released under <a href="https://github.com/netdata/netdata/blob/master/LICENSE.md" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=License>GPL v3+</a><br/>
     </p>
-    </p>
-    <p style="padding-top: 20px;">
-        netdata has received significant contributions from:<br/>&nbsp;<br/>
-        <a href="https://github.com/philwhineray" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=Phil>Phil Whineray</a> (release management),<br/>
-        <a href="https://github.com/alonbl" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=Alon>Alon Bar-Lev</a> (autoconf and automake),<br/>
-        <a href="https://github.com/titpetric" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=titpetric>Tit Petric</a> (docker image maintainer),<br/>
-        <a href="https://github.com/paulfantom" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=Pawel>Paweł Krupa</a> (python.d.plugin and modules),<br/>
-        <a href="https://github.com/simonnagl" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=simonnagl>simonnagl</a> (disk plugin and more),<br/>
-        <a href="https://github.com/fredericopissarra" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=Frederico>Frederico Lamberti Pissarra</a> (performance improvements)<br/>
-        <a href="https://github.com/vlvkobal" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=VladimirKobal>Vladimir Kobal</a> (FreeBSD port)<br/>
-        <a href="https://github.com/l2isbad" target="_blank" data-ga-category="Outbound links" data-ga-action="Nav click" data-ga-label=l2isbad>Ilya Mashchenko</a> (python plugin modules)<br/>
-        &nbsp;<br/>
-        and dozens more enthusiasts, engineers and professionals.<br/>&nbsp;<br/>
-    </p>
-    </p>
-        Thank you! You are awesome!
     <p>
+        Thank you! You are awesome!
+    </p>
 </div>
 </body>
 
diff --git a/src/web/gui/v1/demosites2.html b/src/web/gui/v1/demosites2.html
index c60af47919..dd24e6c4fa 100644
--- a/src/web/gui/v1/demosites2.html
+++ b/src/web/gui/v1/demosites2.html
@@ -2,7 +2,7 @@
 <!-- SPDX-License-Identifier: GPL-3.0-or-later -->
 <html lang="en">
 <head>
-    <title>Netdata - Real-time performance monitoring, done right!</title>
+    <title>Netdata - Monitoring and troubleshooting, transformed!</title>
     <meta name="application-name" content="netdata">
 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
@@ -17,7 +17,7 @@
     <meta property="og:url" content="http://my-netdata.io/"/>
     <meta property="og:type" content="website"/>
     <meta property="og:site_name" content="netdata"/>
-    <meta property="og:title" content="netdata - real-time performance monitoring, done right!"/>
+    <meta property="og:title" content="netdata - monitoring and troubleshooting, transformed!"/>
     <meta property="og:description" content="Stunning real-time dashboards, blazingly fast and extremely interactive. Zero configuration, zero dependencies, zero maintenance." />
 </head>
 
diff --git a/src/web/gui/v1/index-node-view.html b/src/web/gui/v1/index-node-view.html
index 8483892ecb..155ee8038e 100644
--- a/src/web/gui/v1/index-node-view.html
+++ b/src/web/gui/v1/index-node-view.html
@@ -17,7 +17,7 @@
   <meta property="og:url" content="http://my-netdata.io/"/>
   <meta property="og:type" content="website"/>
   <meta property="og:site_name" content="netdata"/>
-  <meta property="og:title" content="netdata - real-time performance monitoring, done right!"/>
+  <meta property="og:title" content="netdata - monitoring and troubleshooting, transformed!"/>
   <meta property="og:description" content="Stunning real-time dashboards, blazingly fast and extremely interactive. Zero configuration, zero dependencies, zero maintenance." />
   <!--  todo generate urls like this from prod build  -->
   <!--    <link href="/dashboard/build/static/css/main.19393e92.chunk.css" rel="stylesheet">-->
diff --git a/src/web/gui/v1/index.html b/src/web/gui/v1/index.html
index bd92748ef7..e2361620a0 100644
--- a/src/web/gui/v1/index.html
+++ b/src/web/gui/v1/index.html
@@ -12,8 +12,8 @@
             theme = localStorage.getItem('netdataTheme') || 'slate';
         }
         const overlayEl = document.getElementById('loadOverlay');
-        overlayEl.innerHTML = 'netdata<br/><div style="font-size: 3vh;">Real-time performance monitoring, done right!</div>';
-        overlayEl.style = theme == 'slate' ? "background-color: #272b30; color: #373b40;" : "background-color: #fff; color: #ddd;";</script><div id="root"></div><div class="navbar-highlight"><div id="navbar-highlight-content" class="navbar-highlight-content"></div></div><div class="container"><div class="row"><div class="charts-body" role="main"><div id="masthead" style="display:none"><div class="container"><div class="row"><div class="col-md-7"><h1>Netdata<p class="lead">Real-time performance monitoring, in the greatest possible detail</p></h1></div><div class="col-md-5"><div class="well well-lg"><div class="row"><div class="col-md-6"><b>Drag</b> charts to pan. <b>Shift + wheel</b> on them, to zoom in and out. <b>Double-click</b> on them, to reset. <b>Hover</b> on them too!</div><div class="col-md-6"><div class="netdata-container" data-netdata="system.cpu" data-dimensions="user" data-chart-library="dygraph" data-dygraph-theme="sparkline" data-dygraph-type="line" data-dygraph-strokewidth="3" data-dygraph-smooth="true" data-dygraph-highlightcirclesize="6" data-after="-90" data-height="60px" data-colors="#C66"></div></div></div></div></div></div></div></div><div id="charts_div"></div></div><div class="sidebar-body hidden-xs hidden-sm hidden-print" id="sidebar-body" role="complementary"><nav class="dashboard-sidebar hidden-print hidden-xs hidden-sm" id="sidebar" role="menu"></nav></div></div></div><div id="footer" class="container" style="display:none"><div class="row"><div class="col-md-10" role="main"><div class="p"><big><a href="https://github.com/netdata/netdata/wiki" target="_blank">Netdata</a></big><br/><br/><i class="fas fa-copyright"></i> Copyright 2020, <a href="mailto:info@netdata.cloud">Netdata, Inc</a>.<br/><br/><div class="terms-and-privacy"><a href="https://www.netdata.cloud/terms/" target="_blank">Terms and conditions</a> <a href="https://www.netdata.cloud/privacy/" target="_blank">Privacy Policy</a></div></div><div class="p">Released under <a href="http://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank">GPL v3 or later</a>. Netdata uses <a href="https://github.com/netdata/netdata/blob/master/REDISTRIBUTED.md" target="_blank">third party tools</a>.<br/><br/></div></div></div></div><div class="modal fade" id="xssModal" tabindex="-1" role="dialog" aria-labelledby="xssModalLabel" data-keyboard="false" data-backdrop="static" style="z-index:3000"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><h4 class="modal-title" id="xssModalLabel">XSS Protection</h4></div><div class="modal-body"><p>This dashboard is about to render data from server:</p><p style="font-size:1.25em"><code id="netdataXssModalServer"></code></p><p>To protect your privacy, the dashboard will <b>check all data transferred</b> for cross site scripting (XSS).<br/>This is CPU intensive, so your browser might be a bit slower.</p><p>If you <b>trust</b> the remote server, you can disable XSS protection.<br/>In this case, any remote dashboard decoration code (javascript) will also run.</p><p>If you <b>don't trust</b> the remote server, you should keep the protection on.<br/>The dashboard will run slower and remote dashboard decoration code will not run, but better be safe than sorry...</p></div><div class="modal-footer"><a href="#" onclick="return xssModalKeepXss()" type="button" class="btn btn-success" data-dismiss="modal">Keep protecting me</a> <a href="#" onclick="return xssModalDisableXss()" type="button" class="btn btn-danger" data-dismiss="modal">I don't need this, the server is mine</a></div></div></div></div><div class="modal fade" id="printPreflightModal" tabindex="-1" role="dialog" aria-labelledby="printPreflightModalLabel"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="printPreflightModalLabel">Print this netdata dashboard</h4></div><div class="modal-body"><p>netdata dashboards cannot be captured, since we are lazy loading and hiding all but the visible charts.<br/>To capture the whole page with all the charts rendered, a new browser window will pop-up that will render all the charts at once. The new browser window will maintain the current pan and zoom settings of the charts. So, align the charts before proceeding.</p><p><small>This process will put some CPU and memory pressure on your browser.<br/>For the netdata server, we will sequentially download all the charts, to avoid congesting network and server resources.<br/><b>Please, do not print netdata dashboards on paper!</b></small></p></div><div class="modal-footer"><a href="#" onclick="return printPreflight(),!1" type="button" class="btn btn-default">Print</a> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button></div></div></div></div><div class="modal fade" id="loadSnapshotModal" tabindex="-1" role="dialog" aria-labelledby="loadSnapshotModalLabel"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="loadSnapshotModalLabel">Import a netdata snapshot</h4></div><div id="loadSnapshotDragAndDrop" class="modal-body"><p>netdata can export and import dashboard snapshots. Any netdata can import the snapshot of any other netdata. The snapshots are not uploaded to a server. They are handled entirely by your web browser, on your computer.</p><p style="text-align:center"><label class="btn btn-default">Click here to select the netdata snapshot file to import <input type="file" id="loadSnapshotSelectFiles" value="Import" style="display:none" onchange="loadSnapshotPreflight()"></label></p><div id="loadSnapshotStatus" class="alert alert-info" role="alert">Browse for a snapshot file (or drag it and drop it here), then click <b>Import</b> to render it.</div><p><table class="table"><tbody><tr><th>Filename</th><td id="loadSnapshotFilename"></td></tr><tr><th>Hostname</th><td id="loadSnapshotHostname"></td></tr><tr><th>Origin URL</th><td id="loadSnapshotURL"></td></tr><tr><th>Charts Info</th><td id="loadSnapshotCharts"></td></tr><tr><th>Snapshot Info</th><td id="loadSnapshotInfo"></td></tr><tr><th>Time Range</th><td id="loadSnapshotTimeRange"></td></tr><tr><th>Comments</th><td id="loadSnapshotComments"></td></tr></tbody></table></p></div><div class="modal-footer"><span style="display:inline-block;padding-right:20px">Snapshot files contain both data and javascript code. Make sure <b>you trust the files</b> you import!</span> <a id="loadSnapshotImport" href="#" onclick="return loadSnapshot(),!1" type="button" class="btn btn-success disabled">Import</a> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button></div></div></div></div><div class="modal fade" id="saveSnapshotModal" tabindex="-1" role="dialog" aria-labelledby="saveSnapshotModalLabel" data-keyboard="false" data-backdrop="static"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="saveSnapshotModalLabel">Export a snapshot</h4></div><div class="modal-body"><div id="saveSnapshotModalProgressSection" hidden>Please wait while we collect all the dashboard data...<div class="progress progress-striped active" style="height:2em!important"><div id="saveSnapshotModalProgressBar" class="progress-bar progress-bar-info" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="min-width:2em"><span id="saveSnapshotModalProgressBarText" style="padding-left:10px;padding-top:4px;font-size:1.2em;text-align:left;width:100%;position:absolute;display:block"></span></div></div></div><div id="saveSnapshotResolutionRadio" style="text-align:center">Select the desired resolution of the snapshot. This is the <b>seconds of data per point</b>.<br/>&nbsp;<br/>&nbsp;<br/><input id="saveSnapshotResolutionSlider" data-slider-id="saveSnapshotResolutionSlider" style="width:80%" tabindex="0"/><br/>&nbsp;<br/><div class="input-group"><span class="input-group-addon" id="sizing-saveSnapshotFilename" style="width:100px">Filename</span> <input id="saveSnapshotFilename" class="form-control" placeholder="Filename of the generated snapshot" aria-describedby="sizing-saveSnapshotFilename" tabindex="2"/><div class="input-group-btn"><div class="input-group-btn"><button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span id="saveSnapshotCompressionName">Compression</span> <span class="caret"></span></button><ul class="dropdown-menu dropdown-menu-right"><li class="disabled"><a href="#" class="disabled">Select Compression</a></li><li role="separator" class="divider"></li><li><a href="#" onclick='return saveSnapshotSetCompression("none"),!1'>uncompressed</a></li><li role="separator" class="divider"></li><li><a href="#" onclick='return saveSnapshotSetCompression("pako.deflate"),!1'>pako.deflate (gzip, binary)</a></li><li><a href="#" onclick='return saveSnapshotSetCompression("pako.deflate.base64"),!1'>pako.deflate.base64 (gzip, ascii)</a></li><li role="separator" class="divider"></li><li><a href="#" onclick='return saveSnapshotSetCompression("lzstring.uri"),!1'>lzstring.uri (LZ, ascii)</a></li><li><a href="#" onclick='return saveSnapshotSetCompression("lzstring.utf16"),!1'>lzstring.utf16 (LZ, utf16)</a></li><li><a href="#" onclick='return saveSnapshotSetCompression("lzstring.base64"),!1'>lzstring.base64 (LZ, ascii)</a></li></ul></div></div></div><div class="input-group" style="padding-top:10px;width:100%"><span class="input-group-addon" id="sizing-saveSnapshotComments" style="width:100px">Comments</span> <input id="saveSnapshotComments" class="form-control" placeholder="Any comments about this snapshot?" aria-describedby="sizing-saveSnapshotComments" tabindex="3"/></div></div>&nbsp;<div id="saveSnapshotStatus" class="alert alert-info" role="alert">Select snaphost resolution. This controls the size the snapshot file.</div><p>The generated snapshot will include all charts of this dashboard, <b>for the visible timeframe</b>, so align, pan and zoom the charts as needed. The scroll position of the dashboard will also be saved. The snapshot will be downloaded as a file, to your computer, that can be imported back into any netdata dashboard (no need to import it back on this server).</p><p><small>Snapshot files include all the information of the dashboard, including the URL of the origin server, its netdata unique ID, etc. So, if you share the snapshot file with third parties, they will be able to access the origin server, if this server is exposed on the internet.<br/>Snapshots are handled entirely by the web browser. The netdata servers are not aware of them.</small></p></div><div class="modal-footer"><a id="saveSnapshotExport" href="#" onclick="return saveSnapshot(),!1" type="button" class="btn btn-success" tabindex="4">Export</a> <button type="button" class="btn btn-default" data-dismiss="modal" tabindex="5">Cancel</button></div></div></div></div><div class="modal fade" id="alarmsModal" tabindex="-1" role="dialog" aria-labelledby="alarmsModalLabel"><div class="modal-dialog modal-lg" role="document" style="display:table"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="alarmsModalLabel">netdata alarms</h4></div><div class="modal-body"><ul class="nav nav-tabs" role="tablist"><li role="presentation" class="active"><a href="#alarms_active" aria-controls="alarms_active" role="tab" data-toggle="tab">Active</a></li><li role="presentation"><a href="#alarms_all" aria-controls="alarms_all" role="tab" data-toggle="tab">All</a></li><li role="presentation"><a href="#alarms_log" aria-controls="alarms_log" role="tab" data-toggle="tab">Log</a></li></ul><div class="tab-content"><div role="tabpanel" class="tab-pane active" id="alarms_active">loading...</div><div role="tabpanel" class="tab-pane" id="alarms_all">loading...</div><div role="tabpanel" class="tab-pane" id="alarms_log">loading...</div></div></div><div class="modal-footer"><button type="button" class="btn btn-default" data-dismiss="modal">Close</button></div></div></div></div><div class="modal fade" id="optionsModal" tabindex="-1" role="dialog" aria-labelledby="optionsModalLabel"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="optionsModalLabel">netdata dashboard options</h4></div><div class="modal-body"><center><small style="color:#bbb">These are browser settings. Each viewer has its own. They do not affect the operation of your netdata server.<br/>Settings take effect immediately and are saved permanently to browser local storage (except the refresh on focus / always option).<br/>To reset all options (including charts sizes) to their defaults, click <a href="#" onclick="return resetDashboardOptions(),!1">here</a>.</small></center><div style="padding:10px"></div><ul class="nav nav-tabs" role="tablist"><li role="presentation" class="active"><a href="#settings_performance" aria-controls="settings_performance" role="tab" data-toggle="tab">Performance</a></li><li role="presentation"><a href="#settings_sync" aria-controls="settings_sync" role="tab" data-toggle="tab">Synchronization</a></li><li role="presentation"><a href="#settings_visual" aria-controls="settings_visual" role="tab" data-toggle="tab">Visual</a></li><li role="presentation"><a href="#settings_locale" aria-controls="settings_locale" role="tab" data-toggle="tab">Locale</a></li></ul><div class="tab-content"><div role="tabpanel" class="tab-pane active" id="settings_performance"><form id="optionsForm1" class="form-horizontal"><div class="form-group"><table><tr class="option-row"><td class="option-control"><input id="stop_updates_when_focus_is_lost" type="checkbox" checked="checked" data-toggle="toggle" data-offstyle="danger" data-onstyle="success" data-on="On Focus" data-off="Always" data-width="110px"></td><td class="option-info"><strong>When to refresh the charts?</strong><br/><small>When set to <b>On Focus</b>, the charts will stop being updated if the page / tab does not have the focus of the user. When set to <b>Always</b>, the charts will always be refreshed. Set it to <b>On Focus</b> it to lower the CPU requirements of the browser (and extend the battery of laptops and tablets) when this page does not have your focus. Set to <b>Always</b> to work on another window (i.e. change the settings of something) and have the charts auto-refresh in this window.</small></td></tr><tr class="option-row"><td class="option-control"><input id="eliminate_zero_dimensions" type="checkbox" checked="checked" data-toggle="toggle" data-on="Non Zero" data-off="All" data-width="110px"></td><td class="option-info"><strong>Which dimensions to show?</strong><br/><small>When set to <b>Non Zero</b>, dimensions that have all their values (within the current view) set to zero will not be transferred from the netdata server (except if all dimensions of the chart are zero, in which case this setting does nothing - all dimensions are transferred and shown). When set to <b>All</b>, all dimensions will always be shown. Set it to <b>Non Zero</b> to lower the data transferred between netdata and your browser, lower the CPU requirements of your browser (fewer lines to draw) and increase the focus on the legends (fewer entries at the legends).</small></td></tr><tr class="option-row"><td class="option-control"><input id="destroy_on_hide" type="checkbox" data-toggle="toggle" data-on="Destroy" data-off="Hide" data-width="110px"></td><td class="option-info"><strong>How to handle hidden charts?</strong><br/><small>When set to <b>Destroy</b>, charts that are not in the current viewport of the browser (are above, or below the visible area of the page), will be destroyed and re-created if and when they become visible again. When set to <b>Hide</b>, the not-visible charts will be just hidden, to simplify the DOM and speed up your browser. Set it to <b>Destroy</b>, to lower the memory requirements of your browser. Set it to <b>Hide</b> for faster restoration of charts on page scrolling.</small></td></tr><tr class="option-row"><td class="option-control"><input id="async_on_scroll" type="checkbox" data-toggle="toggle" data-on="Async" data-off="Sync" data-width="110px"></td><td class="option-info"><strong>Page scroll handling?</strong><br/><small>When set to <b>Sync</b>, charts will be examined for their visibility immediately after scrolling. On slow computers this may impact the smoothness of page scrolling. To update the page when scrolling ends, set it to <b>Async</b>. Set it to <b>Sync</b> for immediate chart updates when scrolling. Set it to <b>Async</b> for smoother page scrolling on slower computers.</small></td></tr></table></div></form></div><div role="tabpanel" class="tab-pane" id="settings_sync"><form id="optionsForm2" class="form-horizontal"><div class="form-group"><table><tr class="option-row"><td class="option-control"><input id="parallel_refresher" type="checkbox" checked="checked" data-toggle="toggle" data-on="Parallel" data-off="Sequential" data-width="110px"></td><td class="option-info"><strong>Which chart refresh policy to use?</strong><br/><small>When set to <b>parallel</b>, visible charts are refreshed in parallel (all queries are sent to netdata server in parallel) and are rendered asynchronously. When set to <b>sequential</b> charts are refreshed one after another. Set it to parallel if your browser can cope with it (most modern browsers do), set it to sequential if you work on an older/slower computer.</small></td></tr><tr class="option-row" id="concurrent_refreshes_row"><td class="option-control"><input id="concurrent_refreshes" type="checkbox" checked="checked" data-toggle="toggle" data-on="Resync" data-off="Best Effort" data-width="110px"></td><td class="option-info"><strong>Shall we re-sync chart refreshes?</strong><br/><small>When set to <b>Resync</b>, the dashboard will attempt to re-synchronize all the charts so that they are refreshed concurrently. When set to <b>Best Effort</b>, each chart may be refreshed with a little time difference to the others. Normally, the dashboard starts refreshing them in parallel, but depending on the speed of your computer and the network latencies, charts start having a slight time difference. Setting this to <b>Resync</b> will attempt to re-synchronize the charts on every update. Setting it to <b>Best Effort</b> may lower the pressure on your browser and the network.</small></td></tr><tr class="option-row"><td class="option-control"><input id="sync_selection" type="checkbox" checked="checked" data-toggle="toggle" data-on="Sync" data-off="Don't Sync" data-onstyle="success" data-offstyle="danger" data-width="110px"></td><td class="option-info"><strong>Sync hover selection on all charts?</strong><br/><small>When enabled, a selection on one chart will automatically select the same time on all other visible charts and the legends of all visible charts will be updated to show the selected values. When disabled, only the chart getting the user's attention will be selected. Enable it to get better insights of the data. Disable it if you are on a very slow computer that cannot actually do it.</small></td></tr></table></div></form></div><div role="tabpanel" class="tab-pane" id="settings_visual"><form id="optionsForm3" class="form-horizontal"><div class="form-group"><table><tr class="option-row"><td class="option-control"><input id="legend_right" type="checkbox" checked="checked" data-toggle="toggle" data-on="Right" data-off="Below" data-width="110px"></td><td class="option-info"><strong>Where do you want to see the legend?</strong><br/><small>Netdata can place the legend in two positions: <b>Below</b> charts (the default) or to the <b>Right</b> of charts.<br/><b>Switching this will reload the dashboard</b>.</small></td></tr><tr class="option-row"><td class="option-control"><input id="netdata_theme_control" type="checkbox" checked="checked" data-toggle="toggle" data-offstyle="danger" data-onstyle="success" data-on="Dark" data-off="White" data-width="110px"></td><td class="option-info"><strong>Which theme to use?</strong><br/><small>Netdata comes with two themes: <b>Dark</b> (the default) and <b>White</b>.<br/><b>Switching this will reload the dashboard</b>.</small></td></tr><tr class="option-row"><td class="option-control"><input id="show_help" type="checkbox" checked="checked" data-toggle="toggle" data-on="Help Me" data-off="No Help" data-width="110px"></td><td class="option-info"><strong>Do you need help?</strong><br/><small>Netdata can show some help in some areas to help you use the dashboard. If all these balloons bother you, disable them using this switch.<br/><b>Switching this will reload the dashboard</b>.</small></td></tr><tr class="option-row"><td class="option-control"><input id="pan_and_zoom_data_padding" type="checkbox" checked="checked" data-toggle="toggle" data-on="Pad" data-off="Don't Pad" data-width="110px"></td><td class="option-info"><strong>Enable data padding when panning and zooming?</strong><br/><small>When set to <b>Pad</b> the charts will be padded with more data, both before and after the visible area, thus giving the impression the whole database is loaded. This padding will happen only after the first pan or zoom operation on the chart (initially all charts have only the visible data). When set to <b>Don't Pad</b> only the visible data will be transferred from the netdata server, even after the first pan and zoom operation.</small></td></tr><tr class="option-row"><td class="option-control"><input id="smooth_plot" type="checkbox" checked="checked" data-toggle="toggle" data-on="Smooth" data-off="Rough" data-width="110px"></td><td class="option-info"><strong>Enable Bézier lines on charts?</strong><br/><small>When set to <b>Smooth</b> the charts libraries that support it, will plot smooth curves instead of simple straight lines to connect the points.<br/>Keep in mind <a href="http://dygraphs.com" target="_blank">dygraphs</a>, the main charting library in netdata dashboards, can only smooth line charts. It cannot smooth area or stacked charts. When set to <b>Rough</b>, this setting can lower the CPU resources consumed by your browser.</small></td></tr></table></div></form></div><div role="tabpanel" class="tab-pane" id="settings_locale"><form id="optionsForm4" class="form-horizontal"><div class="form-group"><table><tr class="option-row"><td colspan="2" align="center"><small><b>These settings are applied gradually, as charts are updated. To force them, refresh the dashboard now</b>.</small></td></tr><tr class="option-row"><td class="option-control"><input id="units_conversion" type="checkbox" checked="checked" data-toggle="toggle" data-on="Scale Units" data-off="Fixed Units" data-onstyle="success" data-width="110px"></td><td class="option-info"><strong>Enable auto-scaling of select units?</strong><br/><small>When set to <b>Scale Units</b> the values shown will dynamically be scaled (e.g. 1000 kilobits will be shown as 1 megabit). Netdata can auto-scale these original units: <code>kilobits/s</code>, <code>kilobytes/s</code>, <code>KB/s</code>, <code>KB</code>, <code>MB</code>, and <code>GB</code>. When set to <b>Fixed Units</b> all the values will be rendered using the original units maintained by the netdata server.</small></td></tr><tr id="settingsLocaleTempRow" class="option-row"><td class="option-control"><input id="units_temp" type="checkbox" checked="checked" data-toggle="toggle" data-on="Celsius" data-off="Fahrenheit" data-width="110px"></td><td class="option-info"><strong>Which units to use for temperatures?</strong><br/><small>Set the temperature units of the dashboard.</small></td></tr><tr id="settingsLocaleTimeRow" class="option-row"><td class="option-control"><input id="seconds_as_time" type="checkbox" checked="checked" data-toggle="toggle" data-on="Time" data-off="Seconds" data-onstyle="success" data-width="110px"></td><td class="option-info"><strong>Convert seconds to time?</strong><br/><small>When set to <b>Time</b>, charts that present <code>seconds</code> will show <code>DDd:HH:MM:SS</code>. When set to <b>Seconds</b>, the raw number of seconds will be presented.</small></td></tr></table></div></form></div></div></div><div class="modal-footer"><button type="button" class="btn btn-default" data-dismiss="modal">Close</button></div></div></div></div><div class="modal fade" id="updateModal" tabindex="-1" role="dialog" aria-labelledby="updateModalLabel"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="updateModalLabel">Update Check</h4></div><div class="modal-body">Your netdata version: <b><code><span id="netdataVersion">Unknown</span></code></b><br/><br/><div style="padding:10px"></div><div id="versionCheckLog">Not checked yet. Please press the Check Now button.</div><div><hr/></div><div>For progress reports and key netdata updates: <strong><a href="https://community.netdata.cloud">Join the Netdata Community</a></strong><br/>You can also <a href="https://twitter.com/linuxnetdata" target="_blank">follow netdata on <i class="fab fa-twitter"></i> twitter</a>, <a href="https://www.facebook.com/linuxnetdata/" target="_blank">follow netdata on <i class="fab fa-facebook"></i> facebook</a>, or <a href="https://github.com/netdata/netdata" target="_blank">watch netdata on <i class="fab fa-github"></i> github</a>.</div></div><div class="modal-footer"><a href="#" onclick="return notifyForUpdate(!0),!1" type="button" class="btn btn-default">Check Now</a> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button></div></div></div></div><div class="modal fade" id="signInModal" tabindex="-1" role="dialog" aria-labelledby="signInModalLabel"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="signInModalLabel">Sign In</h4></div><div class="modal-body"><p>Signing-in to netdata.cloud will synchronize the list of your netdata monitored nodes known at registry <strong><span id="sim-registry"></span></strong>. This may include server hostnames, urls and identification GUIDs.</p><p>After you upgrade all your netdata servers, your private registry will not be needed any more.</p><p>Are you sure you want to proceed?</p></div><div class="modal-footer"><button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button> <a href="#" onclick="return explicitlySignIn(),!1" type="button" class="btn btn-success">Sign In</a></div></div></div></div><div class="modal fade" id="deleteRegistryModal" tabindex="-1" role="dialog" aria-labelledby="deleteRegistryModalLabel"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="deleteRegistryModalLabel">Delete <span id="deleteRegistryServerName"></span>?</h4></div><div class="modal-body">You are about to delete, from your personal list of netdata servers, the following server:<p style="text-align:center;padding-top:10px;padding-bottom:10px;line-height:2"><b><span id="deleteRegistryServerName2"></span></b><br/><b><span id="deleteRegistryServerURL"></span></b></p>Are you sure you want to do this?<br/><div style="padding:10px"></div><small>Keep in mind, this server will be added back if and when you visit it again.</small><br/><div id="deleteRegistryResponse" style="display:block;width:100%;text-align:center;padding-top:20px"></div></div><div class="modal-footer"><button type="button" class="btn btn-success" data-dismiss="modal">keep it</button> <a href="#" onclick="return notifyForDeleteRegistry(),!1" type="button" class="btn btn-danger">delete it</a></div></div></div></div><div class="modal fade" id="switchRegistryModal" tabindex="-1" role="dialog" aria-labelledby="switchRegistryModalLabel"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="switchRegistryModalLabel">Switch Netdata Registry Identity</h4></div><div class="modal-body">You can copy and paste the following ID to all your browsers (e.g. work and home).<br/>All the browsers with the same ID will identify <b>you</b>, so please don't share this with others.<div style="text-align:center;padding-top:10px;padding-bottom:10px;line-height:2"><form action="#"><input class="form-control" id="switchRegistryPersonGUID" placeholder="your personal ID" maxlength="36" autocomplete="off" style="text-align:center;font-size:1.4em"></form></div>Either copy this ID and paste it to another browser, or paste here the ID you have taken from another browser.<div style="padding-top:10px"><small>Keep in mind that:<ul><li>when you switch ID, your previous ID will be lost forever - this is irreversible.</li><li>both IDs (your old and the new) must list this netdata at their personal lists.</li><li>both IDs have to be known by the registry: <b><span id="switchRegistryURL"></span></b>.</li><li>to get a new ID, just clear your browser cookies.</li></ul></small></div><div id="switchRegistryResponse" style="display:block;width:100%;text-align:center;padding-top:20px"></div></div><div class="modal-footer"><button type="button" class="btn btn-success" data-dismiss="modal">cancel</button> <a href="#" onclick="return notifyForSwitchRegistry(),!1" type="button" class="btn btn-danger">impersonate</a></div></div></div></div><div class="modal fade" id="gotoServerModal" tabindex="-1" role="dialog" aria-labelledby="gotoServerModalLabel"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="gotoServerModalLabel"><span id="gotoServerName"></span></h4></div><div class="modal-body">Checking known URLs for this server...<div style="padding-top:20px"><table id="gotoServerList"></table></div><p style="padding-top:10px"><small>Checks may fail if you are viewing an HTTPS page and the server to be checked is HTTP only.</small></p><div id="gotoServerResponse" style="display:block;width:100%;text-align:center;padding-top:20px"></div></div><div class="modal-footer"><button type="button" class="btn btn-default" data-dismiss="modal">Close</button></div></div></div></div><div id="modal-root"></div><iframe id="ssoifrm" width="0" height="0"></iframe><div id="hiddenDownloadLinks" style="display:none" hidden></div><script type="text/javascript" src="dashboard-react.js"></script><script>const show404 = function() {
+        overlayEl.innerHTML = 'netdata<br/><div style="font-size: 3vh;">Monitoring and troubleshooting, transformed!</div>';
+        overlayEl.style = theme == 'slate' ? "background-color: #272b30; color: #373b40;" : "background-color: #fff; color: #ddd;";</script><div id="root"></div><div class="navbar-highlight"><div id="navbar-highlight-content" class="navbar-highlight-content"></div></div><div class="container"><div class="row"><div class="charts-body" role="main"><div id="masthead" style="display:none"><div class="container"><div class="row"><div class="col-md-7"><h1>Netdata<p class="lead">Real-time performance monitoring, in the greatest possible detail</p></h1></div><div class="col-md-5"><div class="well well-lg"><div class="row"><div class="col-md-6"><b>Drag</b> charts to pan. <b>Shift + wheel</b> on them, to zoom in and out. <b>Double-click</b> on them, to reset. <b>Hover</b> on them too!</div><div class="col-md-6"><div class="netdata-container" data-netdata="system.cpu" data-dimensions="user" data-chart-library="dygraph" data-dygraph-theme="sparkline" data-dygraph-type="line" data-dygraph-strokewidth="3" data-dygraph-smooth="true" data-dygraph-highlightcirclesize="6" data-after="-90" data-height="60px" data-colors="#C66"></div></div></div></div></div></div></div></div><div id="charts_div"></div></div><div class="sidebar-body hidden-xs hidden-sm hidden-print" id="sidebar-body" role="complementary"><nav class="dashboard-sidebar hidden-print hidden-xs hidden-sm" id="sidebar" role="menu"></nav></div></div></div><div id="footer" class="container" style="display:none"><div class="row"><div class="col-md-10" role="main"><div class="p"><big><a href="https://github.com/netdata/netdata/wiki" target="_blank">Netdata</a></big><br/><br/><i class="fas fa-copyright"></i> Copyright 2018-2025 <a href="mailto:info@netdata.cloud">Netdata Inc.</a>.<br/><br/><div class="terms-and-privacy"><a href="https://www.netdata.cloud/terms/" target="_blank">Terms and conditions</a> <a href="https://www.netdata.cloud/privacy/" target="_blank">Privacy Policy</a></div></div><div class="p">Released under <a href="http://www.gnu.org/licenses/gpl-3.0.en.html" target="_blank">GPL v3 or later</a>. Netdata uses <a href="https://github.com/netdata/netdata/blob/master/REDISTRIBUTED.md" target="_blank">third party tools</a>.<br/><br/></div></div></div></div><div class="modal fade" id="xssModal" tabindex="-1" role="dialog" aria-labelledby="xssModalLabel" data-keyboard="false" data-backdrop="static" style="z-index:3000"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><h4 class="modal-title" id="xssModalLabel">XSS Protection</h4></div><div class="modal-body"><p>This dashboard is about to render data from server:</p><p style="font-size:1.25em"><code id="netdataXssModalServer"></code></p><p>To protect your privacy, the dashboard will <b>check all data transferred</b> for cross site scripting (XSS).<br/>This is CPU intensive, so your browser might be a bit slower.</p><p>If you <b>trust</b> the remote server, you can disable XSS protection.<br/>In this case, any remote dashboard decoration code (javascript) will also run.</p><p>If you <b>don't trust</b> the remote server, you should keep the protection on.<br/>The dashboard will run slower and remote dashboard decoration code will not run, but better be safe than sorry...</p></div><div class="modal-footer"><a href="#" onclick="return xssModalKeepXss()" type="button" class="btn btn-success" data-dismiss="modal">Keep protecting me</a> <a href="#" onclick="return xssModalDisableXss()" type="button" class="btn btn-danger" data-dismiss="modal">I don't need this, the server is mine</a></div></div></div></div><div class="modal fade" id="printPreflightModal" tabindex="-1" role="dialog" aria-labelledby="printPreflightModalLabel"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="printPreflightModalLabel">Print this netdata dashboard</h4></div><div class="modal-body"><p>netdata dashboards cannot be captured, since we are lazy loading and hiding all but the visible charts.<br/>To capture the whole page with all the charts rendered, a new browser window will pop-up that will render all the charts at once. The new browser window will maintain the current pan and zoom settings of the charts. So, align the charts before proceeding.</p><p><small>This process will put some CPU and memory pressure on your browser.<br/>For the netdata server, we will sequentially download all the charts, to avoid congesting network and server resources.<br/><b>Please, do not print netdata dashboards on paper!</b></small></p></div><div class="modal-footer"><a href="#" onclick="return printPreflight(),!1" type="button" class="btn btn-default">Print</a> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button></div></div></div></div><div class="modal fade" id="loadSnapshotModal" tabindex="-1" role="dialog" aria-labelledby="loadSnapshotModalLabel"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="loadSnapshotModalLabel">Import a netdata snapshot</h4></div><div id="loadSnapshotDragAndDrop" class="modal-body"><p>netdata can export and import dashboard snapshots. Any netdata can import the snapshot of any other netdata. The snapshots are not uploaded to a server. They are handled entirely by your web browser, on your computer.</p><p style="text-align:center"><label class="btn btn-default">Click here to select the netdata snapshot file to import <input type="file" id="loadSnapshotSelectFiles" value="Import" style="display:none" onchange="loadSnapshotPreflight()"></label></p><div id="loadSnapshotStatus" class="alert alert-info" role="alert">Browse for a snapshot file (or drag it and drop it here), then click <b>Import</b> to render it.</div><p><table class="table"><tbody><tr><th>Filename</th><td id="loadSnapshotFilename"></td></tr><tr><th>Hostname</th><td id="loadSnapshotHostname"></td></tr><tr><th>Origin URL</th><td id="loadSnapshotURL"></td></tr><tr><th>Charts Info</th><td id="loadSnapshotCharts"></td></tr><tr><th>Snapshot Info</th><td id="loadSnapshotInfo"></td></tr><tr><th>Time Range</th><td id="loadSnapshotTimeRange"></td></tr><tr><th>Comments</th><td id="loadSnapshotComments"></td></tr></tbody></table></p></div><div class="modal-footer"><span style="display:inline-block;padding-right:20px">Snapshot files contain both data and javascript code. Make sure <b>you trust the files</b> you import!</span> <a id="loadSnapshotImport" href="#" onclick="return loadSnapshot(),!1" type="button" class="btn btn-success disabled">Import</a> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button></div></div></div></div><div class="modal fade" id="saveSnapshotModal" tabindex="-1" role="dialog" aria-labelledby="saveSnapshotModalLabel" data-keyboard="false" data-backdrop="static"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="saveSnapshotModalLabel">Export a snapshot</h4></div><div class="modal-body"><div id="saveSnapshotModalProgressSection" hidden>Please wait while we collect all the dashboard data...<div class="progress progress-striped active" style="height:2em!important"><div id="saveSnapshotModalProgressBar" class="progress-bar progress-bar-info" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="min-width:2em"><span id="saveSnapshotModalProgressBarText" style="padding-left:10px;padding-top:4px;font-size:1.2em;text-align:left;width:100%;position:absolute;display:block"></span></div></div></div><div id="saveSnapshotResolutionRadio" style="text-align:center">Select the desired resolution of the snapshot. This is the <b>seconds of data per point</b>.<br/>&nbsp;<br/>&nbsp;<br/><input id="saveSnapshotResolutionSlider" data-slider-id="saveSnapshotResolutionSlider" style="width:80%" tabindex="0"/><br/>&nbsp;<br/><div class="input-group"><span class="input-group-addon" id="sizing-saveSnapshotFilename" style="width:100px">Filename</span> <input id="saveSnapshotFilename" class="form-control" placeholder="Filename of the generated snapshot" aria-describedby="sizing-saveSnapshotFilename" tabindex="2"/><div class="input-group-btn"><div class="input-group-btn"><button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span id="saveSnapshotCompressionName">Compression</span> <span class="caret"></span></button><ul class="dropdown-menu dropdown-menu-right"><li class="disabled"><a href="#" class="disabled">Select Compression</a></li><li role="separator" class="divider"></li><li><a href="#" onclick='return saveSnapshotSetCompression("none"),!1'>uncompressed</a></li><li role="separator" class="divider"></li><li><a href="#" onclick='return saveSnapshotSetCompression("pako.deflate"),!1'>pako.deflate (gzip, binary)</a></li><li><a href="#" onclick='return saveSnapshotSetCompression("pako.deflate.base64"),!1'>pako.deflate.base64 (gzip, ascii)</a></li><li role="separator" class="divider"></li><li><a href="#" onclick='return saveSnapshotSetCompression("lzstring.uri"),!1'>lzstring.uri (LZ, ascii)</a></li><li><a href="#" onclick='return saveSnapshotSetCompression("lzstring.utf16"),!1'>lzstring.utf16 (LZ, utf16)</a></li><li><a href="#" onclick='return saveSnapshotSetCompression("lzstring.base64"),!1'>lzstring.base64 (LZ, ascii)</a></li></ul></div></div></div><div class="input-group" style="padding-top:10px;width:100%"><span class="input-group-addon" id="sizing-saveSnapshotComments" style="width:100px">Comments</span> <input id="saveSnapshotComments" class="form-control" placeholder="Any comments about this snapshot?" aria-describedby="sizing-saveSnapshotComments" tabindex="3"/></div></div>&nbsp;<div id="saveSnapshotStatus" class="alert alert-info" role="alert">Select snaphost resolution. This controls the size the snapshot file.</div><p>The generated snapshot will include all charts of this dashboard, <b>for the visible timeframe</b>, so align, pan and zoom the charts as needed. The scroll position of the dashboard will also be saved. The snapshot will be downloaded as a file, to your computer, that can be imported back into any netdata dashboard (no need to import it back on this server).</p><p><small>Snapshot files include all the information of the dashboard, including the URL of the origin server, its netdata unique ID, etc. So, if you share the snapshot file with third parties, they will be able to access the origin server, if this server is exposed on the internet.<br/>Snapshots are handled entirely by the web browser. The netdata servers are not aware of them.</small></p></div><div class="modal-footer"><a id="saveSnapshotExport" href="#" onclick="return saveSnapshot(),!1" type="button" class="btn btn-success" tabindex="4">Export</a> <button type="button" class="btn btn-default" data-dismiss="modal" tabindex="5">Cancel</button></div></div></div></div><div class="modal fade" id="alarmsModal" tabindex="-1" role="dialog" aria-labelledby="alarmsModalLabel"><div class="modal-dialog modal-lg" role="document" style="display:table"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="alarmsModalLabel">netdata alarms</h4></div><div class="modal-body"><ul class="nav nav-tabs" role="tablist"><li role="presentation" class="active"><a href="#alarms_active" aria-controls="alarms_active" role="tab" data-toggle="tab">Active</a></li><li role="presentation"><a href="#alarms_all" aria-controls="alarms_all" role="tab" data-toggle="tab">All</a></li><li role="presentation"><a href="#alarms_log" aria-controls="alarms_log" role="tab" data-toggle="tab">Log</a></li></ul><div class="tab-content"><div role="tabpanel" class="tab-pane active" id="alarms_active">loading...</div><div role="tabpanel" class="tab-pane" id="alarms_all">loading...</div><div role="tabpanel" class="tab-pane" id="alarms_log">loading...</div></div></div><div class="modal-footer"><button type="button" class="btn btn-default" data-dismiss="modal">Close</button></div></div></div></div><div class="modal fade" id="optionsModal" tabindex="-1" role="dialog" aria-labelledby="optionsModalLabel"><div class="modal-dialog modal-lg" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="optionsModalLabel">netdata dashboard options</h4></div><div class="modal-body"><center><small style="color:#bbb">These are browser settings. Each viewer has its own. They do not affect the operation of your netdata server.<br/>Settings take effect immediately and are saved permanently to browser local storage (except the refresh on focus / always option).<br/>To reset all options (including charts sizes) to their defaults, click <a href="#" onclick="return resetDashboardOptions(),!1">here</a>.</small></center><div style="padding:10px"></div><ul class="nav nav-tabs" role="tablist"><li role="presentation" class="active"><a href="#settings_performance" aria-controls="settings_performance" role="tab" data-toggle="tab">Performance</a></li><li role="presentation"><a href="#settings_sync" aria-controls="settings_sync" role="tab" data-toggle="tab">Synchronization</a></li><li role="presentation"><a href="#settings_visual" aria-controls="settings_visual" role="tab" data-toggle="tab">Visual</a></li><li role="presentation"><a href="#settings_locale" aria-controls="settings_locale" role="tab" data-toggle="tab">Locale</a></li></ul><div class="tab-content"><div role="tabpanel" class="tab-pane active" id="settings_performance"><form id="optionsForm1" class="form-horizontal"><div class="form-group"><table><tr class="option-row"><td class="option-control"><input id="stop_updates_when_focus_is_lost" type="checkbox" checked="checked" data-toggle="toggle" data-offstyle="danger" data-onstyle="success" data-on="On Focus" data-off="Always" data-width="110px"></td><td class="option-info"><strong>When to refresh the charts?</strong><br/><small>When set to <b>On Focus</b>, the charts will stop being updated if the page / tab does not have the focus of the user. When set to <b>Always</b>, the charts will always be refreshed. Set it to <b>On Focus</b> it to lower the CPU requirements of the browser (and extend the battery of laptops and tablets) when this page does not have your focus. Set to <b>Always</b> to work on another window (i.e. change the settings of something) and have the charts auto-refresh in this window.</small></td></tr><tr class="option-row"><td class="option-control"><input id="eliminate_zero_dimensions" type="checkbox" checked="checked" data-toggle="toggle" data-on="Non Zero" data-off="All" data-width="110px"></td><td class="option-info"><strong>Which dimensions to show?</strong><br/><small>When set to <b>Non Zero</b>, dimensions that have all their values (within the current view) set to zero will not be transferred from the netdata server (except if all dimensions of the chart are zero, in which case this setting does nothing - all dimensions are transferred and shown). When set to <b>All</b>, all dimensions will always be shown. Set it to <b>Non Zero</b> to lower the data transferred between netdata and your browser, lower the CPU requirements of your browser (fewer lines to draw) and increase the focus on the legends (fewer entries at the legends).</small></td></tr><tr class="option-row"><td class="option-control"><input id="destroy_on_hide" type="checkbox" data-toggle="toggle" data-on="Destroy" data-off="Hide" data-width="110px"></td><td class="option-info"><strong>How to handle hidden charts?</strong><br/><small>When set to <b>Destroy</b>, charts that are not in the current viewport of the browser (are above, or below the visible area of the page), will be destroyed and re-created if and when they become visible again. When set to <b>Hide</b>, the not-visible charts will be just hidden, to simplify the DOM and speed up your browser. Set it to <b>Destroy</b>, to lower the memory requirements of your browser. Set it to <b>Hide</b> for faster restoration of charts on page scrolling.</small></td></tr><tr class="option-row"><td class="option-control"><input id="async_on_scroll" type="checkbox" data-toggle="toggle" data-on="Async" data-off="Sync" data-width="110px"></td><td class="option-info"><strong>Page scroll handling?</strong><br/><small>When set to <b>Sync</b>, charts will be examined for their visibility immediately after scrolling. On slow computers this may impact the smoothness of page scrolling. To update the page when scrolling ends, set it to <b>Async</b>. Set it to <b>Sync</b> for immediate chart updates when scrolling. Set it to <b>Async</b> for smoother page scrolling on slower computers.</small></td></tr></table></div></form></div><div role="tabpanel" class="tab-pane" id="settings_sync"><form id="optionsForm2" class="form-horizontal"><div class="form-group"><table><tr class="option-row"><td class="option-control"><input id="parallel_refresher" type="checkbox" checked="checked" data-toggle="toggle" data-on="Parallel" data-off="Sequential" data-width="110px"></td><td class="option-info"><strong>Which chart refresh policy to use?</strong><br/><small>When set to <b>parallel</b>, visible charts are refreshed in parallel (all queries are sent to netdata server in parallel) and are rendered asynchronously. When set to <b>sequential</b> charts are refreshed one after another. Set it to parallel if your browser can cope with it (most modern browsers do), set it to sequential if you work on an older/slower computer.</small></td></tr><tr class="option-row" id="concurrent_refreshes_row"><td class="option-control"><input id="concurrent_refreshes" type="checkbox" checked="checked" data-toggle="toggle" data-on="Resync" data-off="Best Effort" data-width="110px"></td><td class="option-info"><strong>Shall we re-sync chart refreshes?</strong><br/><small>When set to <b>Resync</b>, the dashboard will attempt to re-synchronize all the charts so that they are refreshed concurrently. When set to <b>Best Effort</b>, each chart may be refreshed with a little time difference to the others. Normally, the dashboard starts refreshing them in parallel, but depending on the speed of your computer and the network latencies, charts start having a slight time difference. Setting this to <b>Resync</b> will attempt to re-synchronize the charts on every update. Setting it to <b>Best Effort</b> may lower the pressure on your browser and the network.</small></td></tr><tr class="option-row"><td class="option-control"><input id="sync_selection" type="checkbox" checked="checked" data-toggle="toggle" data-on="Sync" data-off="Don't Sync" data-onstyle="success" data-offstyle="danger" data-width="110px"></td><td class="option-info"><strong>Sync hover selection on all charts?</strong><br/><small>When enabled, a selection on one chart will automatically select the same time on all other visible charts and the legends of all visible charts will be updated to show the selected values. When disabled, only the chart getting the user's attention will be selected. Enable it to get better insights of the data. Disable it if you are on a very slow computer that cannot actually do it.</small></td></tr></table></div></form></div><div role="tabpanel" class="tab-pane" id="settings_visual"><form id="optionsForm3" class="form-horizontal"><div class="form-group"><table><tr class="option-row"><td class="option-control"><input id="legend_right" type="checkbox" checked="checked" data-toggle="toggle" data-on="Right" data-off="Below" data-width="110px"></td><td class="option-info"><strong>Where do you want to see the legend?</strong><br/><small>Netdata can place the legend in two positions: <b>Below</b> charts (the default) or to the <b>Right</b> of charts.<br/><b>Switching this will reload the dashboard</b>.</small></td></tr><tr class="option-row"><td class="option-control"><input id="netdata_theme_control" type="checkbox" checked="checked" data-toggle="toggle" data-offstyle="danger" data-onstyle="success" data-on="Dark" data-off="White" data-width="110px"></td><td class="option-info"><strong>Which theme to use?</strong><br/><small>Netdata comes with two themes: <b>Dark</b> (the default) and <b>White</b>.<br/><b>Switching this will reload the dashboard</b>.</small></td></tr><tr class="option-row"><td class="option-control"><input id="show_help" type="checkbox" checked="checked" data-toggle="toggle" data-on="Help Me" data-off="No Help" data-width="110px"></td><td class="option-info"><strong>Do you need help?</strong><br/><small>Netdata can show some help in some areas to help you use the dashboard. If all these balloons bother you, disable them using this switch.<br/><b>Switching this will reload the dashboard</b>.</small></td></tr><tr class="option-row"><td class="option-control"><input id="pan_and_zoom_data_padding" type="checkbox" checked="checked" data-toggle="toggle" data-on="Pad" data-off="Don't Pad" data-width="110px"></td><td class="option-info"><strong>Enable data padding when panning and zooming?</strong><br/><small>When set to <b>Pad</b> the charts will be padded with more data, both before and after the visible area, thus giving the impression the whole database is loaded. This padding will happen only after the first pan or zoom operation on the chart (initially all charts have only the visible data). When set to <b>Don't Pad</b> only the visible data will be transferred from the netdata server, even after the first pan and zoom operation.</small></td></tr><tr class="option-row"><td class="option-control"><input id="smooth_plot" type="checkbox" checked="checked" data-toggle="toggle" data-on="Smooth" data-off="Rough" data-width="110px"></td><td class="option-info"><strong>Enable Bézier lines on charts?</strong><br/><small>When set to <b>Smooth</b> the charts libraries that support it, will plot smooth curves instead of simple straight lines to connect the points.<br/>Keep in mind <a href="http://dygraphs.com" target="_blank">dygraphs</a>, the main charting library in netdata dashboards, can only smooth line charts. It cannot smooth area or stacked charts. When set to <b>Rough</b>, this setting can lower the CPU resources consumed by your browser.</small></td></tr></table></div></form></div><div role="tabpanel" class="tab-pane" id="settings_locale"><form id="optionsForm4" class="form-horizontal"><div class="form-group"><table><tr class="option-row"><td colspan="2" align="center"><small><b>These settings are applied gradually, as charts are updated. To force them, refresh the dashboard now</b>.</small></td></tr><tr class="option-row"><td class="option-control"><input id="units_conversion" type="checkbox" checked="checked" data-toggle="toggle" data-on="Scale Units" data-off="Fixed Units" data-onstyle="success" data-width="110px"></td><td class="option-info"><strong>Enable auto-scaling of select units?</strong><br/><small>When set to <b>Scale Units</b> the values shown will dynamically be scaled (e.g. 1000 kilobits will be shown as 1 megabit). Netdata can auto-scale these original units: <code>kilobits/s</code>, <code>kilobytes/s</code>, <code>KB/s</code>, <code>KB</code>, <code>MB</code>, and <code>GB</code>. When set to <b>Fixed Units</b> all the values will be rendered using the original units maintained by the netdata server.</small></td></tr><tr id="settingsLocaleTempRow" class="option-row"><td class="option-control"><input id="units_temp" type="checkbox" checked="checked" data-toggle="toggle" data-on="Celsius" data-off="Fahrenheit" data-width="110px"></td><td class="option-info"><strong>Which units to use for temperatures?</strong><br/><small>Set the temperature units of the dashboard.</small></td></tr><tr id="settingsLocaleTimeRow" class="option-row"><td class="option-control"><input id="seconds_as_time" type="checkbox" checked="checked" data-toggle="toggle" data-on="Time" data-off="Seconds" data-onstyle="success" data-width="110px"></td><td class="option-info"><strong>Convert seconds to time?</strong><br/><small>When set to <b>Time</b>, charts that present <code>seconds</code> will show <code>DDd:HH:MM:SS</code>. When set to <b>Seconds</b>, the raw number of seconds will be presented.</small></td></tr></table></div></form></div></div></div><div class="modal-footer"><button type="button" class="btn btn-default" data-dismiss="modal">Close</button></div></div></div></div><div class="modal fade" id="updateModal" tabindex="-1" role="dialog" aria-labelledby="updateModalLabel"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="updateModalLabel">Update Check</h4></div><div class="modal-body">Your netdata version: <b><code><span id="netdataVersion">Unknown</span></code></b><br/><br/><div style="padding:10px"></div><div id="versionCheckLog">Not checked yet. Please press the Check Now button.</div><div><hr/></div><div>For progress reports and key netdata updates: <strong><a href="https://community.netdata.cloud">Join the Netdata Community</a></strong><br/>You can also <a href="https://twitter.com/linuxnetdata" target="_blank">follow netdata on <i class="fab fa-twitter"></i> twitter</a>, <a href="https://www.facebook.com/linuxnetdata/" target="_blank">follow netdata on <i class="fab fa-facebook"></i> facebook</a>, or <a href="https://github.com/netdata/netdata" target="_blank">watch netdata on <i class="fab fa-github"></i> github</a>.</div></div><div class="modal-footer"><a href="#" onclick="return notifyForUpdate(!0),!1" type="button" class="btn btn-default">Check Now</a> <button type="button" class="btn btn-default" data-dismiss="modal">Close</button></div></div></div></div><div class="modal fade" id="signInModal" tabindex="-1" role="dialog" aria-labelledby="signInModalLabel"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="signInModalLabel">Sign In</h4></div><div class="modal-body"><p>Signing-in to netdata.cloud will synchronize the list of your netdata monitored nodes known at registry <strong><span id="sim-registry"></span></strong>. This may include server hostnames, urls and identification GUIDs.</p><p>After you upgrade all your netdata servers, your private registry will not be needed any more.</p><p>Are you sure you want to proceed?</p></div><div class="modal-footer"><button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button> <a href="#" onclick="return explicitlySignIn(),!1" type="button" class="btn btn-success">Sign In</a></div></div></div></div><div class="modal fade" id="deleteRegistryModal" tabindex="-1" role="dialog" aria-labelledby="deleteRegistryModalLabel"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="deleteRegistryModalLabel">Delete <span id="deleteRegistryServerName"></span>?</h4></div><div class="modal-body">You are about to delete, from your personal list of netdata servers, the following server:<p style="text-align:center;padding-top:10px;padding-bottom:10px;line-height:2"><b><span id="deleteRegistryServerName2"></span></b><br/><b><span id="deleteRegistryServerURL"></span></b></p>Are you sure you want to do this?<br/><div style="padding:10px"></div><small>Keep in mind, this server will be added back if and when you visit it again.</small><br/><div id="deleteRegistryResponse" style="display:block;width:100%;text-align:center;padding-top:20px"></div></div><div class="modal-footer"><button type="button" class="btn btn-success" data-dismiss="modal">keep it</button> <a href="#" onclick="return notifyForDeleteRegistry(),!1" type="button" class="btn btn-danger">delete it</a></div></div></div></div><div class="modal fade" id="switchRegistryModal" tabindex="-1" role="dialog" aria-labelledby="switchRegistryModalLabel"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="switchRegistryModalLabel">Switch Netdata Registry Identity</h4></div><div class="modal-body">You can copy and paste the following ID to all your browsers (e.g. work and home).<br/>All the browsers with the same ID will identify <b>you</b>, so please don't share this with others.<div style="text-align:center;padding-top:10px;padding-bottom:10px;line-height:2"><form action="#"><input class="form-control" id="switchRegistryPersonGUID" placeholder="your personal ID" maxlength="36" autocomplete="off" style="text-align:center;font-size:1.4em"></form></div>Either copy this ID and paste it to another browser, or paste here the ID you have taken from another browser.<div style="padding-top:10px"><small>Keep in mind that:<ul><li>when you switch ID, your previous ID will be lost forever - this is irreversible.</li><li>both IDs (your old and the new) must list this netdata at their personal lists.</li><li>both IDs have to be known by the registry: <b><span id="switchRegistryURL"></span></b>.</li><li>to get a new ID, just clear your browser cookies.</li></ul></small></div><div id="switchRegistryResponse" style="display:block;width:100%;text-align:center;padding-top:20px"></div></div><div class="modal-footer"><button type="button" class="btn btn-success" data-dismiss="modal">cancel</button> <a href="#" onclick="return notifyForSwitchRegistry(),!1" type="button" class="btn btn-danger">impersonate</a></div></div></div></div><div class="modal fade" id="gotoServerModal" tabindex="-1" role="dialog" aria-labelledby="gotoServerModalLabel"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title" id="gotoServerModalLabel"><span id="gotoServerName"></span></h4></div><div class="modal-body">Checking known URLs for this server...<div style="padding-top:20px"><table id="gotoServerList"></table></div><p style="padding-top:10px"><small>Checks may fail if you are viewing an HTTPS page and the server to be checked is HTTP only.</small></p><div id="gotoServerResponse" style="display:block;width:100%;text-align:center;padding-top:20px"></div></div><div class="modal-footer"><button type="button" class="btn btn-default" data-dismiss="modal">Close</button></div></div></div></div><div id="modal-root"></div><iframe id="ssoifrm" width="0" height="0"></iframe><div id="hiddenDownloadLinks" style="display:none" hidden></div><script type="text/javascript" src="dashboard-react.js"></script><script>const show404 = function() {
         const overlayEl = document.getElementById('loadOverlay');
         overlayEl.innerHTML = '404 Page not found<br/><div style="font-size: 3vh;">We cannot load files from this path - No Netdata server detected</div>';
         window.NETDATA = null
diff --git a/src/web/gui/v1/infographic.html b/src/web/gui/v1/infographic.html
index 18d608c6cb..258b3e7d02 100644
--- a/src/web/gui/v1/infographic.html
+++ b/src/web/gui/v1/infographic.html
@@ -4,7 +4,7 @@
 <head>
     <meta charset=utf-8>
     <title>Netdata: Get control of your Linux Servers. Simple. Effective. Awesome.</title>
-    <meta name=author content="Costa Tsaousis">
+    <meta name=author content="Netdata Inc.">
     <meta name=description content="Unparalleled insights, in real-time, of everything happening on your Linux systems and applications, with stunning, interactive web dashboards and powerful performance and health alarms.">
 
     <meta name=viewport content="width=device-width,initial-scale=1">
diff --git a/src/web/gui/v1/tv-react.html b/src/web/gui/v1/tv-react.html
index 6d33e78c08..9bbf6a0ba8 100644
--- a/src/web/gui/v1/tv-react.html
+++ b/src/web/gui/v1/tv-react.html
@@ -17,7 +17,7 @@
     <meta property="og:url" content="http://my-netdata.io/"/>
     <meta property="og:type" content="website"/>
     <meta property="og:site_name" content="netdata"/>
-    <meta property="og:title" content="netdata - real-time performance monitoring, done right!"/>
+    <meta property="og:title" content="netdata - monitoring and troubleshooting, transformed!"/>
     <meta property="og:description" content="Stunning real-time dashboards, blazingly fast and extremely interactive. Zero configuration, zero dependencies, zero maintenance." />
     <!--  todo generate urls like this from prod build  -->
 <!--    <link href="/dashboard/build/static/css/main.19393e92.chunk.css" rel="stylesheet">-->
diff --git a/src/web/gui/v1/tv.html b/src/web/gui/v1/tv.html
index fa0aa51867..08228557d0 100644
--- a/src/web/gui/v1/tv.html
+++ b/src/web/gui/v1/tv.html
@@ -17,7 +17,7 @@
     <meta property="og:url" content="http://my-netdata.io/"/>
     <meta property="og:type" content="website"/>
     <meta property="og:site_name" content="netdata"/>
-    <meta property="og:title" content="netdata - real-time performance monitoring, done right!"/>
+    <meta property="og:title" content="netdata - monitoring and troubleshooting, transformed!"/>
     <meta property="og:description" content="Stunning real-time dashboards, blazingly fast and extremely interactive. Zero configuration, zero dependencies, zero maintenance." />
     
 </head>
diff --git a/system/initd/init.d/netdata.in b/system/initd/init.d/netdata.in
index c0257ffab5..4301fc458e 100644
--- a/system/initd/init.d/netdata.in
+++ b/system/initd/init.d/netdata.in
@@ -1,7 +1,7 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-3.0-or-later
 #
-# netdata	Real-time performance monitoring, done right
+# Netdata -	Monitoring and troubleshooting, transformed!
 # chkconfig: 345 99 01
 # description:  Netdata is a daemon that collects data in real-time (per second)
 #               and presents a web site to view and analyze them. The presentation
diff --git a/system/lsb/init.d/netdata.in b/system/lsb/init.d/netdata.in
index 2c6ac7f435..e94ee95f96 100644
--- a/system/lsb/init.d/netdata.in
+++ b/system/lsb/init.d/netdata.in
@@ -1,13 +1,7 @@
 #!/usr/bin/env bash
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # Netdata LSB start script
-#
-# Copyright:
-#         SPDX-License-Identifier: GPL-3.0-or-later
-#
-# Author:
-#         Costa Tsaousis  <costa@netdata.cloud>
-#         Pavlos Emm. Katsoulakis <paul@netdata.cloud>
 
 ### BEGIN INIT INFO
 # Provides:          netdata