summaryrefslogtreecommitdiffstats
path: root/collectors/charts.d.plugin
diff options
context:
space:
mode:
Diffstat (limited to 'collectors/charts.d.plugin')
-rw-r--r--collectors/charts.d.plugin/Makefile.am49
-rw-r--r--collectors/charts.d.plugin/README.md190
-rw-r--r--collectors/charts.d.plugin/ap/Makefile.inc13
l---------collectors/charts.d.plugin/ap/README.md1
-rw-r--r--collectors/charts.d.plugin/ap/ap.chart.sh179
-rw-r--r--collectors/charts.d.plugin/ap/ap.conf23
-rw-r--r--collectors/charts.d.plugin/ap/integrations/access_points.md174
-rw-r--r--collectors/charts.d.plugin/ap/metadata.yaml146
-rw-r--r--collectors/charts.d.plugin/apcupsd/Makefile.inc13
l---------collectors/charts.d.plugin/apcupsd/README.md1
-rw-r--r--collectors/charts.d.plugin/apcupsd/apcupsd.chart.sh305
-rw-r--r--collectors/charts.d.plugin/apcupsd/apcupsd.conf25
-rw-r--r--collectors/charts.d.plugin/apcupsd/integrations/apc_ups.md203
-rw-r--r--collectors/charts.d.plugin/apcupsd/metadata.yaml256
-rw-r--r--collectors/charts.d.plugin/charts.d.conf47
-rwxr-xr-xcollectors/charts.d.plugin/charts.d.dryrun-helper.sh72
-rwxr-xr-xcollectors/charts.d.plugin/charts.d.plugin.in809
-rw-r--r--collectors/charts.d.plugin/example/Makefile.inc13
-rw-r--r--collectors/charts.d.plugin/example/README.md14
-rw-r--r--collectors/charts.d.plugin/example/example.chart.sh123
-rw-r--r--collectors/charts.d.plugin/example/example.conf21
-rw-r--r--collectors/charts.d.plugin/libreswan/Makefile.inc13
l---------collectors/charts.d.plugin/libreswan/README.md1
-rw-r--r--collectors/charts.d.plugin/libreswan/integrations/libreswan.md194
-rw-r--r--collectors/charts.d.plugin/libreswan/libreswan.chart.sh187
-rw-r--r--collectors/charts.d.plugin/libreswan/libreswan.conf29
-rw-r--r--collectors/charts.d.plugin/libreswan/metadata.yaml146
-rw-r--r--collectors/charts.d.plugin/loopsleepms.sh.inc227
-rw-r--r--collectors/charts.d.plugin/opensips/Makefile.inc13
l---------collectors/charts.d.plugin/opensips/README.md1
-rw-r--r--collectors/charts.d.plugin/opensips/integrations/opensips.md192
-rw-r--r--collectors/charts.d.plugin/opensips/metadata.yaml270
-rw-r--r--collectors/charts.d.plugin/opensips/opensips.chart.sh325
-rw-r--r--collectors/charts.d.plugin/opensips/opensips.conf21
-rw-r--r--collectors/charts.d.plugin/sensors/Makefile.inc13
l---------collectors/charts.d.plugin/sensors/README.md1
-rw-r--r--collectors/charts.d.plugin/sensors/integrations/linux_sensors_sysfs.md201
-rw-r--r--collectors/charts.d.plugin/sensors/metadata.yaml182
-rw-r--r--collectors/charts.d.plugin/sensors/sensors.chart.sh250
-rw-r--r--collectors/charts.d.plugin/sensors/sensors.conf32
40 files changed, 0 insertions, 4975 deletions
diff --git a/collectors/charts.d.plugin/Makefile.am b/collectors/charts.d.plugin/Makefile.am
deleted file mode 100644
index f82992fd4..000000000
--- a/collectors/charts.d.plugin/Makefile.am
+++ /dev/null
@@ -1,49 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-MAINTAINERCLEANFILES = $(srcdir)/Makefile.in
-CLEANFILES = \
- charts.d.plugin \
- $(NULL)
-
-include $(top_srcdir)/build/subst.inc
-SUFFIXES = .in
-
-dist_libconfig_DATA = \
- charts.d.conf \
- $(NULL)
-
-dist_plugins_SCRIPTS = \
- charts.d.dryrun-helper.sh \
- charts.d.plugin \
- loopsleepms.sh.inc \
- $(NULL)
-
-dist_noinst_DATA = \
- charts.d.plugin.in \
- README.md \
- $(NULL)
-
-dist_charts_SCRIPTS = \
- $(NULL)
-
-dist_charts_DATA = \
- $(NULL)
-
-userchartsconfigdir=$(configdir)/charts.d
-dist_userchartsconfig_DATA = \
- $(NULL)
-
-# Explicitly install directories to avoid permission issues due to umask
-install-exec-local:
- $(INSTALL) -d $(DESTDIR)$(userchartsconfigdir)
-
-chartsconfigdir=$(libconfigdir)/charts.d
-dist_chartsconfig_DATA = \
- $(NULL)
-
-include ap/Makefile.inc
-include apcupsd/Makefile.inc
-include example/Makefile.inc
-include libreswan/Makefile.inc
-include opensips/Makefile.inc
-include sensors/Makefile.inc
diff --git a/collectors/charts.d.plugin/README.md b/collectors/charts.d.plugin/README.md
deleted file mode 100644
index 97c2446fa..000000000
--- a/collectors/charts.d.plugin/README.md
+++ /dev/null
@@ -1,190 +0,0 @@
-# charts.d.plugin
-
-`charts.d.plugin` is a Netdata external plugin. It is an **orchestrator** for data collection modules written in `BASH` v4+.
-
-1. It runs as an independent process `ps fax` shows it
-2. It is started and stopped automatically by Netdata
-3. It communicates with Netdata via a unidirectional pipe (sending data to the `netdata` daemon)
-4. Supports any number of data collection **modules**
-
-To better understand the guidelines and the API behind our External plugins, please have a look at the [Introduction to External plugins](https://github.com/netdata/netdata/blob/master/collectors/plugins.d/README.md) prior to reading this page.
-
-
-`charts.d.plugin` has been designed so that the actual script that will do data collection will be permanently in
-memory, collecting data with as little overheads as possible
-(i.e. initialize once, repeatedly collect values with minimal overhead).
-
-`charts.d.plugin` looks for scripts in `/usr/lib/netdata/charts.d`.
-The scripts should have the filename suffix: `.chart.sh`.
-
-By default, `charts.d.plugin` is not included as part of the install when using [our official native DEB/RPM packages](https://github.com/netdata/netdata/blob/master/packaging/installer/methods/packages.md). You can install it by installing the `netdata-plugin-chartsd` package.
-
-## Configuration
-
-`charts.d.plugin` itself can be [configured](https://github.com/netdata/netdata/blob/master/docs/configure/nodes.md#use-edit-config-to-edit-configuration-files) using the configuration file `/etc/netdata/charts.d.conf`. This file is also a BASH script.
-
-In this file, you can place statements like this:
-
-```conf
-enable_all_charts="yes"
-X="yes"
-Y="no"
-```
-
-where `X` and `Y` are the names of individual charts.d collector scripts.
-When set to `yes`, charts.d will evaluate the collector script (see below).
-When set to `no`, charts.d will ignore the collector script.
-
-The variable `enable_all_charts` sets the default enable/disable state for all charts.
-
-## A charts.d module
-
-A `charts.d.plugin` module is a BASH script defining a few functions.
-
-For a module called `X`, the following criteria must be met:
-
-1. The module script must be called `X.chart.sh` and placed in `/usr/libexec/netdata/charts.d`.
-
-2. If the module needs a configuration, it should be called `X.conf` and placed in `/etc/netdata/charts.d`.
- The configuration file `X.conf` is also a BASH script itself.
- You can edit the default files supplied by Netdata, by editing `/etc/netdata/edit-config charts.d/X.conf`, where `X` is the name of the module.
-
-3. All functions and global variables defined in the script and its configuration, must begin with `X_`.
-
-4. The following functions must be defined:
-
- - `X_check()` - returns 0 or 1 depending on whether the module is able to run or not
- (following the standard Linux command line return codes: 0 = OK, the collector can operate and 1 = FAILED,
- the collector cannot be used).
-
- - `X_create()` - creates the Netdata charts (commands `CHART` and `DIMENSION`).
- The return value does matter: 0 = OK, 1 = FAILED.
-
- - `X_update()` - collects the values for the defined charts (commands `BEGIN`, `SET`, `END`).
- The return value also matters: 0 = OK, 1 = FAILED.
-
-5. The following global variables are available to be set:
- - `X_update_every` - is the data collection frequency for the module script, in seconds.
-
-The module script may use more functions or variables. But all of them must begin with `X_`.
-
-### X_check()
-
-The purpose of the BASH function `X_check()` is to check if the module can collect data (or check its config).
-
-For example, if the module is about monitoring a local mysql database, the `X_check()` function may attempt to
-connect to a local mysql database to find out if it can read the values it needs.
-
-`X_check()` is run only once for the lifetime of the module.
-
-### X_create()
-
-The purpose of the BASH function `X_create()` is to create the charts and dimensions using the standard Netdata
-plugin guidelines.
-
-`X_create()` will be called just once and only after `X_check()` was successful.
-You can however call it yourself when there is need for it (for example to add a new dimension to an existing chart).
-
-A non-zero return value will disable the collector.
-
-### X_update()
-
-`X_update()` will be called repeatedly every `X_update_every` seconds, to collect new values and send them to Netdata,
-following the Netdata plugin guidelines.
-
-The function will be called with one parameter: microseconds since the last time it was run. This value should be
-appended to the `BEGIN` statement of every chart updated by the collector script.
-
-A non-zero return value will disable the collector.
-
-### Useful functions charts.d provides
-
-Module scripts can use the following charts.d functions:
-
-#### require_cmd command
-
-`require_cmd()` will check if a command is available in the running system.
-
-For example, your `X_check()` function may use it like this:
-
-```sh
-mysql_check() {
- require_cmd mysql || return 1
- return 0
-}
-```
-
-Using the above, if the command `mysql` is not available in the system, the `mysql` module will be disabled.
-
-#### fixid "string"
-
-`fixid()` will get a string and return a properly formatted id for a chart or dimension.
-
-This is an expensive function that should not be used in `X_update()`.
-You can keep the generated id in a BASH associative array to have the values availables in `X_update()`, like this:
-
-```sh
-declare -A X_ids=()
-X_create() {
- local name="a very bad name for id"
-
- X_ids[$name]="$(fixid "$name")"
-}
-
-X_update() {
- local microseconds="$1"
-
- ...
- local name="a very bad name for id"
- ...
-
- echo "BEGIN ${X_ids[$name]} $microseconds"
- ...
-}
-```
-
-### Debugging your collectors
-
-You can run `charts.d.plugin` by hand with something like this:
-
-```sh
-# become user netdata
-sudo su -s /bin/sh netdata
-
-# run the plugin in debug mode
-/usr/libexec/netdata/plugins.d/charts.d.plugin debug 1 X Y Z
-```
-
-Charts.d will run in `debug` mode, with an update frequency of `1`, evaluating only the collector scripts
-`X`, `Y` and `Z`. You can define zero or more module scripts. If none is defined, charts.d will evaluate all
-module scripts available.
-
-Keep in mind that if your configs are not in `/etc/netdata`, you should do the following before running
-`charts.d.plugin`:
-
-```sh
-export NETDATA_USER_CONFIG_DIR="/path/to/etc/netdata"
-```
-
-Also, remember that Netdata runs `chart.d.plugin` as user `netdata` (or any other user the `netdata` process is configured to run as).
-
-## Running multiple instances of charts.d.plugin
-
-`charts.d.plugin` will call the `X_update()` function one after another. This means that a delay in collector `X`
-will also delay the collection of `Y` and `Z`.
-
-You can have multiple `charts.d.plugin` running to overcome this problem.
-
-This is what you need to do:
-
-1. Decide a new name for the new charts.d instance: example `charts2.d`.
-
-2. Create/edit the files `/etc/netdata/charts.d.conf` and `/etc/netdata/charts2.d.conf` and enable / disable the
- module you want each to run. Remember to set `enable_all_charts="no"` to both of them, and enable the individual
- modules for each.
-
-3. link `/usr/libexec/netdata/plugins.d/charts.d.plugin` to `/usr/libexec/netdata/plugins.d/charts2.d.plugin`.
- Netdata will spawn a new charts.d process.
-
-Execute the above in this order, since Netdata will (by default) attempt to start new plugins soon after they are
-created in `/usr/libexec/netdata/plugins.d/`.
diff --git a/collectors/charts.d.plugin/ap/Makefile.inc b/collectors/charts.d.plugin/ap/Makefile.inc
deleted file mode 100644
index a2dd375ac..000000000
--- a/collectors/charts.d.plugin/ap/Makefile.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-# THIS IS NOT A COMPLETE Makefile
-# IT IS INCLUDED BY ITS PARENT'S Makefile.am
-# IT IS REQUIRED TO REFERENCE ALL FILES RELATIVE TO THE PARENT
-
-# install these files
-dist_charts_DATA += ap/ap.chart.sh
-dist_chartsconfig_DATA += ap/ap.conf
-
-# do not install these files, but include them in the distribution
-dist_noinst_DATA += ap/README.md ap/Makefile.inc
-
diff --git a/collectors/charts.d.plugin/ap/README.md b/collectors/charts.d.plugin/ap/README.md
deleted file mode 120000
index 5b6e75130..000000000
--- a/collectors/charts.d.plugin/ap/README.md
+++ /dev/null
@@ -1 +0,0 @@
-integrations/access_points.md \ No newline at end of file
diff --git a/collectors/charts.d.plugin/ap/ap.chart.sh b/collectors/charts.d.plugin/ap/ap.chart.sh
deleted file mode 100644
index 80c9dc602..000000000
--- a/collectors/charts.d.plugin/ap/ap.chart.sh
+++ /dev/null
@@ -1,179 +0,0 @@
-# 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>
-#
-
-# _update_every is a special variable - it holds the number of seconds
-# between the calls of the _update() function
-ap_update_every=
-ap_priority=6900
-
-declare -A ap_devs=()
-
-# _check is called once, to find out if this chart should be enabled or not
-ap_check() {
- require_cmd iw || return 1
- local ev
- ev=$(run iw dev | awk '
- BEGIN {
- i = "";
- ssid = "";
- ap = 0;
- }
- /^[ \t]+Interface / {
- if( ap == 1 ) {
- print "ap_devs[" i "]=\"" ssid "\""
- }
-
- i = $2;
- ssid = "";
- ap = 0;
- }
- /^[ \t]+ssid / { ssid = $2; }
- /^[ \t]+type AP$/ { ap = 1; }
- END {
- if( ap == 1 ) {
- print "ap_devs[" i "]=\"" ssid "\""
- }
- }
- ')
- eval "${ev}"
-
- # this should return:
- # - 0 to enable the chart
- # - 1 to disable the chart
-
- [ ${#ap_devs[@]} -gt 0 ] && return 0
- error "no devices found in AP mode, with 'iw dev'"
- return 1
-}
-
-# _create is called once, to create the charts
-ap_create() {
- local ssid dev
-
- for dev in "${!ap_devs[@]}"; do
- ssid="${ap_devs[${dev}]}"
-
- # create the chart with 3 dimensions
- cat << EOF
-CHART ap_clients.${dev} '' "Connected clients to ${ssid} on ${dev}" "clients" ${dev} ap.clients line $((ap_priority + 1)) $ap_update_every '' '' 'ap'
-DIMENSION clients '' absolute 1 1
-
-CHART ap_bandwidth.${dev} '' "Bandwidth for ${ssid} on ${dev}" "kilobits/s" ${dev} ap.net area $((ap_priority + 2)) $ap_update_every '' '' 'ap'
-DIMENSION received '' incremental 8 1024
-DIMENSION sent '' incremental -8 1024
-
-CHART ap_packets.${dev} '' "Packets for ${ssid} on ${dev}" "packets/s" ${dev} ap.packets line $((ap_priority + 3)) $ap_update_every '' '' 'ap'
-DIMENSION received '' incremental 1 1
-DIMENSION sent '' incremental -1 1
-
-CHART ap_issues.${dev} '' "Transmit Issues for ${ssid} on ${dev}" "issues/s" ${dev} ap.issues line $((ap_priority + 4)) $ap_update_every '' '' 'ap'
-DIMENSION retries 'tx retries' incremental 1 1
-DIMENSION failures 'tx failures' incremental -1 1
-
-CHART ap_signal.${dev} '' "Average Signal for ${ssid} on ${dev}" "dBm" ${dev} ap.signal line $((ap_priority + 5)) $ap_update_every '' '' 'ap'
-DIMENSION signal 'average signal' absolute 1 1000
-
-CHART ap_bitrate.${dev} '' "Bitrate for ${ssid} on ${dev}" "Mbps" ${dev} ap.bitrate line $((ap_priority + 6)) $ap_update_every '' '' 'ap'
-DIMENSION receive '' absolute 1 1000
-DIMENSION transmit '' absolute -1 1000
-DIMENSION expected 'expected throughput' absolute 1 1000
-EOF
- done
-
- return 0
-}
-
-# _update is called continuously, to collect the values
-ap_update() {
- # the first argument to this function is the microseconds since last update
- # pass this parameter to the BEGIN statement (see below).
-
- # do all the work to collect / calculate the values
- # for each dimension
- # remember: KEEP IT SIMPLE AND SHORT
-
- for dev in "${!ap_devs[@]}"; do
- echo
- echo "DEVICE ${dev}"
- iw "${dev}" station dump
- done | awk '
- function zero_data() {
- dev = "";
- c = 0;
- rb = 0;
- tb = 0;
- rp = 0;
- tp = 0;
- tr = 0;
- tf = 0;
- tt = 0;
- rt = 0;
- s = 0;
- g = 0;
- e = 0;
- }
- function print_device() {
- if(dev != "" && length(dev) > 0) {
- print "BEGIN ap_clients." dev;
- print "SET clients = " c;
- print "END";
- print "BEGIN ap_bandwidth." dev;
- print "SET received = " rb;
- print "SET sent = " tb;
- print "END";
- print "BEGIN ap_packets." dev;
- print "SET received = " rp;
- print "SET sent = " tp;
- print "END";
- print "BEGIN ap_issues." dev;
- print "SET retries = " tr;
- print "SET failures = " tf;
- print "END";
-
- if( c == 0 ) c = 1;
- print "BEGIN ap_signal." dev;
- print "SET signal = " int(s / c);
- print "END";
- print "BEGIN ap_bitrate." dev;
- print "SET receive = " int(rt / c);
- print "SET transmit = " int(tt / c);
- print "SET expected = " int(e / c);
- print "END";
- }
- zero_data();
- }
- BEGIN {
- zero_data();
- }
- /^DEVICE / {
- print_device();
- dev = $2;
- }
- /^Station/ { c++; }
- /^[ \t]+rx bytes:/ { rb += $3; }
- /^[ \t]+tx bytes:/ { tb += $3; }
- /^[ \t]+rx packets:/ { rp += $3; }
- /^[ \t]+tx packets:/ { tp += $3; }
- /^[ \t]+tx retries:/ { tr += $3; }
- /^[ \t]+tx failed:/ { tf += $3; }
- /^[ \t]+signal:/ { x = $2; s += x * 1000; }
- /^[ \t]+rx bitrate:/ { x = $3; rt += x * 1000; }
- /^[ \t]+tx bitrate:/ { x = $3; tt += x * 1000; }
- /^[ \t]+expected throughput:(.*)Mbps/ {
- x=$3;
- sub(/Mbps/, "", x);
- e += x * 1000;
- }
- END {
- print_device();
- }
- '
-
- return 0
-}
diff --git a/collectors/charts.d.plugin/ap/ap.conf b/collectors/charts.d.plugin/ap/ap.conf
deleted file mode 100644
index 38fc157ce..000000000
--- a/collectors/charts.d.plugin/ap/ap.conf
+++ /dev/null
@@ -1,23 +0,0 @@
-# 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+
-
-# nothing fancy to configure.
-# this module will run
-# iw dev - to find wireless devices in AP mode
-# iw ${dev} station dump - to get connected clients
-# based on the above, it generates several charts
-
-# the data collection frequency
-# if unset, will inherit the netdata update frequency
-#ap_update_every=
-
-# the charts priority on the dashboard
-#ap_priority=6900
-
-# the number of retries to do in case of failure
-# before disabling the module
-#ap_retries=10
diff --git a/collectors/charts.d.plugin/ap/integrations/access_points.md b/collectors/charts.d.plugin/ap/integrations/access_points.md
deleted file mode 100644
index a0de2c4df..000000000
--- a/collectors/charts.d.plugin/ap/integrations/access_points.md
+++ /dev/null
@@ -1,174 +0,0 @@
-<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/charts.d.plugin/ap/README.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/charts.d.plugin/ap/metadata.yaml"
-sidebar_label: "Access Points"
-learn_status: "Published"
-learn_rel_path: "Data Collection/Linux Systems/Network"
-most_popular: False
-message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
-endmeta-->
-
-# Access Points
-
-
-<img src="https://netdata.cloud/img/network-wired.svg" width="150"/>
-
-
-Plugin: charts.d.plugin
-Module: ap
-
-<img src="https://img.shields.io/badge/maintained%20by-Netdata-%2300ab44" />
-
-## Overview
-
-The ap collector visualizes data related to wireless access points.
-
-It uses the `iw` command line utility to detect access points. For each interface that is of `type AP`, it then runs `iw INTERFACE station dump` and collects statistics.
-
-This collector is only supported on the following platforms:
-
-- Linux
-
-This collector only supports collecting metrics from a single instance of this integration.
-
-
-### Default Behavior
-
-#### Auto-Detection
-
-The plugin is able to auto-detect if you are running access points on your linux box.
-
-#### Limits
-
-The default configuration for this integration does not impose any limits on data collection.
-
-#### Performance Impact
-
-The default configuration for this integration is not expected to impose a significant performance impact on the system.
-
-
-## Metrics
-
-Metrics grouped by *scope*.
-
-The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.
-
-
-
-### Per wireless device
-
-These metrics refer to the entire monitored application.
-
-This scope has no labels.
-
-Metrics:
-
-| Metric | Dimensions | Unit |
-|:------|:----------|:----|
-| ap.clients | clients | clients |
-| ap.net | received, sent | kilobits/s |
-| ap.packets | received, sent | packets/s |
-| ap.issues | retries, failures | issues/s |
-| ap.signal | average signal | dBm |
-| ap.bitrate | receive, transmit, expected | Mbps |
-
-
-
-## Alerts
-
-There are no alerts configured by default for this integration.
-
-
-## Setup
-
-### Prerequisites
-
-#### Install charts.d plugin
-
-If [using our official native DEB/RPM packages](https://github.com/netdata/netdata/blob/master/packaging/installer/UPDATE.md#determine-which-installation-method-you-used), make sure `netdata-plugin-chartsd` is installed.
-
-
-#### `iw` utility.
-
-Make sure the `iw` utility is installed.
-
-
-### Configuration
-
-#### File
-
-The configuration file name for this integration is `charts.d/ap.conf`.
-
-
-You can edit the configuration file using the `edit-config` script from the
-Netdata [config directory](https://github.com/netdata/netdata/blob/master/docs/configure/nodes.md#the-netdata-config-directory).
-
-```bash
-cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata
-sudo ./edit-config charts.d/ap.conf
-```
-#### Options
-
-The config file is sourced by the charts.d plugin. It's a standard bash file.
-
-The following collapsed table contains all the options that can be configured for the ap collector.
-
-
-<details><summary>Config options</summary>
-
-| Name | Description | Default | Required |
-|:----|:-----------|:-------|:--------:|
-| ap_update_every | The data collection frequency. If unset, will inherit the netdata update frequency. | 1 | no |
-| ap_priority | Controls the order of charts at the netdata dashboard. | 6900 | no |
-| ap_retries | The number of retries to do in case of failure before disabling the collector. | 10 | no |
-
-</details>
-
-#### Examples
-
-##### Change the collection frequency
-
-Specify a custom collection frequence (update_every) for this collector
-
-```yaml
-# the data collection frequency
-# if unset, will inherit the netdata update frequency
-ap_update_every=10
-
-# the charts priority on the dashboard
-#ap_priority=6900
-
-# the number of retries to do in case of failure
-# before disabling the module
-#ap_retries=10
-
-```
-
-
-## Troubleshooting
-
-### Debug Mode
-
-To troubleshoot issues with the `ap` collector, run the `charts.d.plugin` with the debug option enabled. The output
-should give you clues as to why the collector isn't working.
-
-- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on
- your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.
-
- ```bash
- cd /usr/libexec/netdata/plugins.d/
- ```
-
-- Switch to the `netdata` user.
-
- ```bash
- sudo -u netdata -s
- ```
-
-- Run the `charts.d.plugin` to debug the collector:
-
- ```bash
- ./charts.d.plugin debug 1 ap
- ```
-
-
diff --git a/collectors/charts.d.plugin/ap/metadata.yaml b/collectors/charts.d.plugin/ap/metadata.yaml
deleted file mode 100644
index ee941e417..000000000
--- a/collectors/charts.d.plugin/ap/metadata.yaml
+++ /dev/null
@@ -1,146 +0,0 @@
-plugin_name: charts.d.plugin
-modules:
- - meta:
- plugin_name: charts.d.plugin
- module_name: ap
- monitored_instance:
- name: Access Points
- link: "https://learn.netdata.cloud/docs/data-collection/networking-stack-and-network-interfaces/linux-access-points"
- categories:
- - data-collection.linux-systems.network-metrics
- icon_filename: "network-wired.svg"
- related_resources:
- integrations:
- list: []
- info_provided_to_referring_integrations:
- description: ""
- keywords:
- - ap
- - access
- - point
- - wireless
- - network
- most_popular: false
- overview:
- data_collection:
- metrics_description: "The ap collector visualizes data related to wireless access points."
- method_description: "It uses the `iw` command line utility to detect access points. For each interface that is of `type AP`, it then runs `iw INTERFACE station dump` and collects statistics."
- supported_platforms:
- include: [Linux]
- exclude: []
- multi_instance: false
- additional_permissions:
- description: ""
- default_behavior:
- auto_detection:
- description: "The plugin is able to auto-detect if you are running access points on your linux box."
- limits:
- description: ""
- performance_impact:
- description: ""
- setup:
- prerequisites:
- list:
- - title: "Install charts.d plugin"
- description: |
- If [using our official native DEB/RPM packages](https://github.com/netdata/netdata/blob/master/packaging/installer/UPDATE.md#determine-which-installation-method-you-used), make sure `netdata-plugin-chartsd` is installed.
- - title: "`iw` utility."
- description: "Make sure the `iw` utility is installed."
- configuration:
- file:
- name: charts.d/ap.conf
- options:
- description: |
- The config file is sourced by the charts.d plugin. It's a standard bash file.
-
- The following collapsed table contains all the options that can be configured for the ap collector.
- folding:
- title: "Config options"
- enabled: true
- list:
- - name: ap_update_every
- description: The data collection frequency. If unset, will inherit the netdata update frequency.
- default_value: 1
- required: false
- - name: ap_priority
- description: Controls the order of charts at the netdata dashboard.
- default_value: 6900
- required: false
- - name: ap_retries
- description: The number of retries to do in case of failure before disabling the collector.
- default_value: 10
- required: false
- examples:
- folding:
- enabled: false
- title: "Config"
- list:
- - name: Change the collection frequency
- description: Specify a custom collection frequence (update_every) for this collector
- config: |
- # the data collection frequency
- # if unset, will inherit the netdata update frequency
- ap_update_every=10
-
- # the charts priority on the dashboard
- #ap_priority=6900
-
- # the number of retries to do in case of failure
- # before disabling the module
- #ap_retries=10
- troubleshooting:
- problems:
- list: []
- alerts: []
- metrics:
- folding:
- title: Metrics
- enabled: false
- description: ""
- availability: []
- scopes:
- - name: wireless device
- description: "These metrics refer to the entire monitored application."
- labels: []
- metrics:
- - name: ap.clients
- description: Connected clients to ${ssid} on ${dev}
- unit: "clients"
- chart_type: line
- dimensions:
- - name: clients
- - name: ap.net
- description: Bandwidth for ${ssid} on ${dev}
- unit: "kilobits/s"
- chart_type: area
- dimensions:
- - name: received
- - name: sent
- - name: ap.packets
- description: Packets for ${ssid} on ${dev}
- unit: "packets/s"
- chart_type: line
- dimensions:
- - name: received
- - name: sent
- - name: ap.issues
- description: Transmit Issues for ${ssid} on ${dev}
- unit: "issues/s"
- chart_type: line
- dimensions:
- - name: retries
- - name: failures
- - name: ap.signal
- description: Average Signal for ${ssid} on ${dev}
- unit: "dBm"
- chart_type: line
- dimensions:
- - name: average signal
- - name: ap.bitrate
- description: Bitrate for ${ssid} on ${dev}
- unit: "Mbps"
- chart_type: line
- dimensions:
- - name: receive
- - name: transmit
- - name: expected
diff --git a/collectors/charts.d.plugin/apcupsd/Makefile.inc b/collectors/charts.d.plugin/apcupsd/Makefile.inc
deleted file mode 100644
index 19cb9cad7..000000000
--- a/collectors/charts.d.plugin/apcupsd/Makefile.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-# THIS IS NOT A COMPLETE Makefile
-# IT IS INCLUDED BY ITS PARENT'S Makefile.am
-# IT IS REQUIRED TO REFERENCE ALL FILES RELATIVE TO THE PARENT
-
-# install these files
-dist_charts_DATA += apcupsd/apcupsd.chart.sh
-dist_chartsconfig_DATA += apcupsd/apcupsd.conf
-
-# do not install these files, but include them in the distribution
-dist_noinst_DATA += apcupsd/README.md apcupsd/Makefile.inc
-
diff --git a/collectors/charts.d.plugin/apcupsd/README.md b/collectors/charts.d.plugin/apcupsd/README.md
deleted file mode 120000
index fc6681fe6..000000000
--- a/collectors/charts.d.plugin/apcupsd/README.md
+++ /dev/null
@@ -1 +0,0 @@
-integrations/apc_ups.md \ No newline at end of file
diff --git a/collectors/charts.d.plugin/apcupsd/apcupsd.chart.sh b/collectors/charts.d.plugin/apcupsd/apcupsd.chart.sh
deleted file mode 100644
index da9cd19c3..000000000
--- a/collectors/charts.d.plugin/apcupsd/apcupsd.chart.sh
+++ /dev/null
@@ -1,305 +0,0 @@
-# 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>
-#
-
-apcupsd_ip=
-apcupsd_port=
-
-declare -A apcupsd_sources=(
- ["local"]="127.0.0.1:3551"
-)
-
-# how frequently to collect UPS data
-apcupsd_update_every=10
-
-apcupsd_timeout=3
-
-# the priority of apcupsd related to other charts
-apcupsd_priority=90000
-
-apcupsd_get() {
- run -t $apcupsd_timeout apcaccess status "$1"
-}
-
-is_ups_alive() {
- local status
- status="$(apcupsd_get "$1" | sed -e 's/STATUS.*: //' -e 't' -e 'd')"
- case "$status" in
- "" | "COMMLOST" | "SHUTTING DOWN") return 1 ;;
- *) return 0 ;;
- esac
-}
-
-apcupsd_check() {
-
- # this should return:
- # - 0 to enable the chart
- # - 1 to disable the chart
-
- require_cmd apcaccess || return 1
-
- # backwards compatibility
- if [ "${apcupsd_ip}:${apcupsd_port}" != ":" ]; then
- apcupsd_sources["local"]="${apcupsd_ip}:${apcupsd_port}"
- fi
-
- local host working=0 failed=0
- for host in "${!apcupsd_sources[@]}"; do
- apcupsd_get "${apcupsd_sources[${host}]}" >/dev/null
- # shellcheck disable=2181
- if [ $? -ne 0 ]; then
- error "cannot get information for apcupsd server ${host} on ${apcupsd_sources[${host}]}."
- failed=$((failed + 1))
- else
- if ! is_ups_alive ${apcupsd_sources[${host}]}; then
- error "APC UPS ${host} on ${apcupsd_sources[${host}]} is not online."
- failed=$((failed + 1))
- else
- working=$((working + 1))
- fi
- fi
- done
-
- if [ ${working} -eq 0 ]; then
- error "No APC UPSes found available."
- return 1
- fi
-
- return 0
-}
-
-apcupsd_create() {
- local host
- for host in "${!apcupsd_sources[@]}"; do
- # create the charts
- cat <<EOF
-CHART apcupsd_${host}.charge '' "UPS Charge" "percentage" ups apcupsd.charge area $((apcupsd_priority + 2)) $apcupsd_update_every '' '' 'apcupsd'
-DIMENSION battery_charge charge absolute 1 100
-
-CHART apcupsd_${host}.battery_voltage '' "UPS Battery Voltage" "Volts" ups apcupsd.battery.voltage line $((apcupsd_priority + 4)) $apcupsd_update_every '' '' 'apcupsd'
-DIMENSION battery_voltage voltage absolute 1 100
-DIMENSION battery_voltage_nominal nominal absolute 1 100
-
-CHART apcupsd_${host}.input_voltage '' "UPS Input Voltage" "Volts" input apcupsd.input.voltage line $((apcupsd_priority + 5)) $apcupsd_update_every '' '' 'apcupsd'
-DIMENSION input_voltage voltage absolute 1 100
-DIMENSION input_voltage_min min absolute 1 100
-DIMENSION input_voltage_max max absolute 1 100
-
-CHART apcupsd_${host}.input_frequency '' "UPS Input Frequency" "Hz" input apcupsd.input.frequency line $((apcupsd_priority + 6)) $apcupsd_update_every '' '' 'apcupsd'
-DIMENSION input_frequency frequency absolute 1 100
-
-CHART apcupsd_${host}.output_voltage '' "UPS Output Voltage" "Volts" output apcupsd.output.voltage line $((apcupsd_priority + 7)) $apcupsd_update_every '' '' 'apcupsd'
-DIMENSION output_voltage voltage absolute 1 100
-DIMENSION output_voltage_nominal nominal absolute 1 100
-
-CHART apcupsd_${host}.load '' "UPS Load" "percentage" ups apcupsd.load area $((apcupsd_priority)) $apcupsd_update_every '' '' 'apcupsd'
-DIMENSION load load absolute 1 100
-
-CHART apcupsd_${host}.load_usage '' "UPS Load Usage" "Watts" ups apcupsd.load_usage area $((apcupsd_priority + 1)) $apcupsd_update_every '' '' 'apcupsd'
-DIMENSION load_usage load absolute 1 100
-
-CHART apcupsd_${host}.temp '' "UPS Temperature" "Celsius" ups apcupsd.temperature line $((apcupsd_priority + 8)) $apcupsd_update_every '' '' 'apcupsd'
-DIMENSION temp temp absolute 1 100
-
-CHART apcupsd_${host}.time '' "UPS Time Remaining" "Minutes" ups apcupsd.time area $((apcupsd_priority + 3)) $apcupsd_update_every '' '' 'apcupsd'
-DIMENSION time time absolute 1 100
-
-CHART apcupsd_${host}.online '' "UPS ONLINE flag" "boolean" ups apcupsd.online line $((apcupsd_priority + 9)) $apcupsd_update_every '' '' 'apcupsd'
-DIMENSION online online absolute 1 1
-
-CHART apcupsd_${host}.selftest '' "UPS Self-Test status" "status" ups apcupsd.selftest line $((apcupsd_priority + 10)) $apcupsd_update_every '' '' 'apcupsd'
-DIMENSION selftest_OK 'OK' absolute 1 1
-DIMENSION selftest_NO 'NO' absolute 1 1
-DIMENSION selftest_BT 'BT' absolute 1 1
-DIMENSION selftest_NG 'NG' absolute 1 1
-
-CHART apcupsd_${host}.status '' "UPS Status" "status" ups apcupsd.status line $((apcupsd_priority + 11)) $apcupsd_update_every '' '' 'apcupsd'
-DIMENSION status_ONLINE 'ONLINE' absolute 1 1
-DIMENSION status_ONBATT 'ONBATT' absolute 1 1
-DIMENSION status_OVERLOAD 'OVERLOAD' absolute 1 1
-DIMENSION status_LOWBATT 'LOWBATT' absolute 1 1
-DIMENSION status_REPLACEBATT 'REPLACEBATT' absolute 1 1
-DIMENSION status_NOBATT 'NOBATT' absolute 1 1
-DIMENSION status_SLAVE 'SLAVE' absolute 1 1
-DIMENSION status_SLAVEDOWN 'SLAVEDOWN' absolute 1 1
-DIMENSION status_COMMLOST 'COMMLOST' absolute 1 1
-DIMENSION status_CAL 'CAL' absolute 1 1
-DIMENSION status_TRIM 'TRIM' absolute 1 1
-DIMENSION status_BOOST 'BOOST' absolute 1 1
-DIMENSION status_SHUTTING_DOWN 'SHUTTING_DOWN' absolute 1 1
-
-EOF
- done
- return 0
-}
-
-apcupsd_update() {
- # the first argument to this function is the microseconds since last update
- # pass this parameter to the BEGIN statement (see below).
-
- # do all the work to collect / calculate the values
- # for each dimension
- # remember: KEEP IT SIMPLE AND SHORT
-
- local host working=0 failed=0
- for host in "${!apcupsd_sources[@]}"; do
- apcupsd_get "${apcupsd_sources[${host}]}" | awk "
-
-BEGIN {
- battery_charge = 0;
- battery_voltage = 0;
- battery_voltage_nominal = 0;
- input_voltage = 0;
- input_voltage_min = 0;
- input_voltage_max = 0;
- input_frequency = 0;
- output_voltage = 0;
- output_voltage_nominal = 0;
- load = 0;
- temp = 0;
- time = 0;
- nompower = 0;
- load_usage = 0;
- selftest_OK = 0;
- selftest_NO = 0;
- selftest_BT = 0;
- selftest_NG = 0;
- status_ONLINE = 0;
- status_CAL = 0;
- status_TRIM = 0;
- status_BOOST = 0;
- status_ONBATT = 0;
- status_OVERLOAD = 0;
- status_LOWBATT = 0;
- status_REPLACEBATT = 0;
- status_NOBATT = 0;
- status_SLAVE = 0;
- status_SLAVEDOWN = 0;
- status_COMMLOST = 0;
- status_SHUTTING_DOWN = 0;
-
-}
-/^BCHARGE.*/ { battery_charge = \$3 * 100 };
-/^BATTV.*/ { battery_voltage = \$3 * 100 };
-/^NOMBATTV.*/ { battery_voltage_nominal = \$3 * 100 };
-/^LINEV.*/ { input_voltage = \$3 * 100 };
-/^MINLINEV.*/ { input_voltage_min = \$3 * 100 };
-/^MAXLINEV.*/ { input_voltage_max = \$3 * 100 };
-/^LINEFREQ.*/ { input_frequency = \$3 * 100 };
-/^OUTPUTV.*/ { output_voltage = \$3 * 100 };
-/^NOMOUTV.*/ { output_voltage_nominal = \$3 * 100 };
-/^LOADPCT.*/ { load = \$3 * 100 };
-/^ITEMP.*/ { temp = \$3 * 100 };
-/^NOMPOWER.*/ { nompower = \$3 };
-/^TIMELEFT.*/ { time = \$3 * 100 };
-/^STATUS.*/ { online=(\$3 != \"COMMLOST\" && !(\$3 == \"SHUTTING\" && \$4 == \"DOWN\"))?1:0; };
-/^SELFTEST.*/ { selftest_OK = (\$3 == \"OK\") ? 1 : 0;
- selftest_NO = (\$3 == \"NO\") ? 1 : 0;
- selftest_BT = (\$3 == \"BT\") ? 1 : 0;
- selftest_NG = (\$3 == \"NG\") ? 1 : 0;
- };
-/^STATUS.*/ { status_ONLINE = (\$3 == \"ONLINE\") ? 1 : 0;
- status_CAL = (\$3 == \"CAL\") ? 1 : 0;
- status_TRIM = (\$3 == \"TRIM\") ? 1 : 0;
- status_BOOST = (\$3 == \"BOOST\") ? 1 : 0;
- status_ONBATT = (\$3 == \"ONBATT\") ? 1 : 0;
- status_OVERLOAD = (\$3 == \"OVERLOAD\") ? 1 : 0;
- status_LOWBATT = (\$3 == \"LOWBATT\") ? 1 : 0;
- status_REPLACEBATT = (\$3 == \"REPLACEBATT\") ? 1 : 0;
- status_NOBATT = (\$3 == \"NOBATT\") ? 1 : 0;
- status_SLAVE = (\$3 == \"SLAVE\") ? 1 : 0;
- status_SLAVEDOWN = (\$3 == \"SLAVEDOWN\") ? 1 : 0;
- status_COMMLOST = (\$3 == \"COMMLOST\") ? 1 : 0;
- status_SHUTTING_DOWN = (\$3 == \"SHUTTING\" && \$4 == \"DOWN\") ? 1 : 0;
- };
-
-END {
- { load_usage = nompower * load / 100 };
-
- print \"BEGIN apcupsd_${host}.online $1\";
- print \"SET online = \" online;
- print \"END\"
-
- if (online == 1) {
- print \"BEGIN apcupsd_${host}.charge $1\";
- print \"SET battery_charge = \" battery_charge;
- print \"END\"
-
- print \"BEGIN apcupsd_${host}.battery_voltage $1\";
- print \"SET battery_voltage = \" battery_voltage;
- print \"SET battery_voltage_nominal = \" battery_voltage_nominal;
- print \"END\"
-
- print \"BEGIN apcupsd_${host}.input_voltage $1\";
- print \"SET input_voltage = \" input_voltage;
- print \"SET input_voltage_min = \" input_voltage_min;
- print \"SET input_voltage_max = \" input_voltage_max;
- print \"END\"
-
- print \"BEGIN apcupsd_${host}.input_frequency $1\";
- print \"SET input_frequency = \" input_frequency;
- print \"END\"
-
- print \"BEGIN apcupsd_${host}.output_voltage $1\";
- print \"SET output_voltage = \" output_voltage;
- print \"SET output_voltage_nominal = \" output_voltage_nominal;
- print \"END\"
-
- print \"BEGIN apcupsd_${host}.load $1\";
- print \"SET load = \" load;
- print \"END\"
-
- print \"BEGIN apcupsd_${host}.load_usage $1\";
- print \"SET load_usage = \" load_usage;
- print \"END\"
-
- print \"BEGIN apcupsd_${host}.temp $1\";
- print \"SET temp = \" temp;
- print \"END\"
-
- print \"BEGIN apcupsd_${host}.time $1\";
- print \"SET time = \" time;
- print \"END\"
-
- print \"BEGIN apcupsd_${host}.selftest $1\";
- print \"SET selftest_OK = \" selftest_OK;
- print \"SET selftest_NO = \" selftest_NO;
- print \"SET selftest_BT = \" selftest_BT;
- print \"SET selftest_NG = \" selftest_NG;
- print \"END\"
-
- print \"BEGIN apcupsd_${host}.status $1\";
- print \"SET status_ONLINE = \" status_ONLINE;
- print \"SET status_ONBATT = \" status_ONBATT;
- print \"SET status_OVERLOAD = \" status_OVERLOAD;
- print \"SET status_LOWBATT = \" status_LOWBATT;
- print \"SET status_REPLACEBATT = \" status_REPLACEBATT;
- print \"SET status_NOBATT = \" status_NOBATT;
- print \"SET status_SLAVE = \" status_SLAVE;
- print \"SET status_SLAVEDOWN = \" status_SLAVEDOWN;
- print \"SET status_COMMLOST = \" status_COMMLOST;
- print \"SET status_CAL = \" status_CAL;
- print \"SET status_TRIM = \" status_TRIM;
- print \"SET status_BOOST = \" status_BOOST;
- print \"SET status_SHUTTING_DOWN = \" status_SHUTTING_DOWN;
- print \"END\";
- }
-}"
- # shellcheck disable=SC2181
- if [ $? -ne 0 ]; then
- failed=$((failed + 1))
- error "failed to get values for APC UPS ${host} on ${apcupsd_sources[${host}]}" && return 1
- else
- working=$((working + 1))
- fi
- done
-
- [ $working -eq 0 ] && error "failed to get values from all APC UPSes" && return 1
-
- return 0
-}
diff --git a/collectors/charts.d.plugin/apcupsd/apcupsd.conf b/collectors/charts.d.plugin/apcupsd/apcupsd.conf
deleted file mode 100644
index 679c0d61b..000000000
--- a/collectors/charts.d.plugin/apcupsd/apcupsd.conf
+++ /dev/null
@@ -1,25 +0,0 @@
-# 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+
-
-# add all your APC UPSes in this array - uncomment it too
-#declare -A apcupsd_sources=(
-# ["local"]="127.0.0.1:3551"
-#)
-
-# how long to wait for apcupsd to respond
-#apcupsd_timeout=3
-
-# the data collection frequency
-# if unset, will inherit the netdata update frequency
-#apcupsd_update_every=10
-
-# the charts priority on the dashboard
-#apcupsd_priority=90000
-
-# the number of retries to do in case of failure
-# before disabling the module
-#apcupsd_retries=10
diff --git a/collectors/charts.d.plugin/apcupsd/integrations/apc_ups.md b/collectors/charts.d.plugin/apcupsd/integrations/apc_ups.md
deleted file mode 100644
index a5c1f9613..000000000
--- a/collectors/charts.d.plugin/apcupsd/integrations/apc_ups.md
+++ /dev/null
@@ -1,203 +0,0 @@
-<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/charts.d.plugin/apcupsd/README.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/charts.d.plugin/apcupsd/metadata.yaml"
-sidebar_label: "APC UPS"
-learn_status: "Published"
-learn_rel_path: "Data Collection/UPS"
-most_popular: False
-message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
-endmeta-->
-
-# APC UPS
-
-
-<img src="https://netdata.cloud/img/apc.svg" width="150"/>
-
-
-Plugin: charts.d.plugin
-Module: apcupsd
-
-<img src="https://img.shields.io/badge/maintained%20by-Netdata-%2300ab44" />
-
-## Overview
-
-Monitor APC UPS performance with Netdata for optimal uninterruptible power supply operations. Enhance your power supply reliability with real-time APC UPS metrics.
-
-The collector uses the `apcaccess` tool to contact the `apcupsd` daemon and get the APC UPS statistics.
-
-This collector is supported on all platforms.
-
-This collector only supports collecting metrics from a single instance of this integration.
-
-
-### Default Behavior
-
-#### Auto-Detection
-
-By default, with no configuration provided, the collector will try to contact 127.0.0.1:3551 with using the `apcaccess` utility.
-
-#### Limits
-
-The default configuration for this integration does not impose any limits on data collection.
-
-#### Performance Impact
-
-The default configuration for this integration is not expected to impose a significant performance impact on the system.
-
-
-## Metrics
-
-Metrics grouped by *scope*.
-
-The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.
-
-
-
-### Per ups
-
-Metrics related to UPS. Each UPS provides its own set of the following metrics.
-
-This scope has no labels.
-
-Metrics:
-
-| Metric | Dimensions | Unit |
-|:------|:----------|:----|
-| apcupsd.charge | charge | percentage |
-| apcupsd.battery.voltage | voltage, nominal | Volts |
-| apcupsd.input.voltage | voltage, min, max | Volts |
-| apcupsd.output.voltage | absolute, nominal | Volts |
-| apcupsd.input.frequency | frequency | Hz |
-| apcupsd.load | load | percentage |
-| apcupsd.load_usage | load | Watts |
-| apcupsd.temperature | temp | Celsius |
-| apcupsd.time | time | Minutes |
-| apcupsd.online | online | boolean |
-| apcupsd.selftest | OK, NO, BT, NG | status |
-| apcupsd.status | ONLINE, ONBATT, OVERLOAD, LOWBATT, REPLACEBATT, NOBATT, SLAVE, SLAVEDOWN, COMMLOST, CAL, TRIM, BOOST, SHUTTING_DOWN | status |
-
-
-
-## Alerts
-
-
-The following alerts are available:
-
-| Alert name | On metric | Description |
-|:------------|:----------|:------------|
-| [ apcupsd_ups_charge ](https://github.com/netdata/netdata/blob/master/health/health.d/apcupsd.conf) | apcupsd.charge | average UPS charge over the last minute |
-| [ apcupsd_10min_ups_load ](https://github.com/netdata/netdata/blob/master/health/health.d/apcupsd.conf) | apcupsd.load | average UPS load over the last 10 minutes |
-| [ apcupsd_last_collected_secs ](https://github.com/netdata/netdata/blob/master/health/health.d/apcupsd.conf) | apcupsd.load | number of seconds since the last successful data collection |
-| [ apcupsd_selftest_warning ](https://github.com/netdata/netdata/blob/master/health/health.d/apcupsd.conf) | apcupsd.selftest | self-test failed due to insufficient battery capacity or due to overload. |
-| [ apcupsd_status_onbatt ](https://github.com/netdata/netdata/blob/master/health/health.d/apcupsd.conf) | apcupsd.status | APC UPS has switched to battery power because the input power has failed |
-| [ apcupsd_status_overload ](https://github.com/netdata/netdata/blob/master/health/health.d/apcupsd.conf) | apcupsd.status | APC UPS is overloaded and cannot supply enough power to the load |
-| [ apcupsd_status_lowbatt ](https://github.com/netdata/netdata/blob/master/health/health.d/apcupsd.conf) | apcupsd.status | APC UPS battery is low and needs to be recharged |
-| [ apcupsd_status_replacebatt ](https://github.com/netdata/netdata/blob/master/health/health.d/apcupsd.conf) | apcupsd.status | APC UPS battery has reached the end of its lifespan and needs to be replaced |
-| [ apcupsd_status_nobatt ](https://github.com/netdata/netdata/blob/master/health/health.d/apcupsd.conf) | apcupsd.status | APC UPS has no battery |
-| [ apcupsd_status_commlost ](https://github.com/netdata/netdata/blob/master/health/health.d/apcupsd.conf) | apcupsd.status | APC UPS communication link is lost |
-
-
-## Setup
-
-### Prerequisites
-
-#### Install charts.d plugin
-
-If [using our official native DEB/RPM packages](https://github.com/netdata/netdata/blob/master/packaging/installer/UPDATE.md#determine-which-installation-method-you-used), make sure `netdata-plugin-chartsd` is installed.
-
-
-#### Required software
-
-Make sure the `apcaccess` and `apcupsd` are installed and running.
-
-
-### Configuration
-
-#### File
-
-The configuration file name for this integration is `charts.d/apcupsd.conf`.
-
-
-You can edit the configuration file using the `edit-config` script from the
-Netdata [config directory](https://github.com/netdata/netdata/blob/master/docs/configure/nodes.md#the-netdata-config-directory).
-
-```bash
-cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata
-sudo ./edit-config charts.d/apcupsd.conf
-```
-#### Options
-
-The config file is sourced by the charts.d plugin. It's a standard bash file.
-
-The following collapsed table contains all the options that can be configured for the apcupsd collector.
-
-
-<details><summary>Config options</summary>
-
-| Name | Description | Default | Required |
-|:----|:-----------|:-------|:--------:|
-| apcupsd_sources | This is an array of apcupsd sources. You can have multiple entries there. Please refer to the example below on how to set it. | 127.0.0.1:3551 | no |
-| apcupsd_timeout | How long to wait for apcupsd to respond. | 3 | no |
-| apcupsd_update_every | The data collection frequency. If unset, will inherit the netdata update frequency. | 1 | no |
-| apcupsd_priority | The charts priority on the dashboard. | 90000 | no |
-| apcupsd_retries | The number of retries to do in case of failure before disabling the collector. | 10 | no |
-
-</details>
-
-#### Examples
-
-##### Multiple apcupsd sources
-
-Specify a multiple apcupsd sources along with a custom update interval
-
-```yaml
-# add all your APC UPSes in this array - uncomment it too
-declare -A apcupsd_sources=(
- ["local"]="127.0.0.1:3551",
- ["remote"]="1.2.3.4:3551"
-)
-
-# how long to wait for apcupsd to respond
-#apcupsd_timeout=3
-
-# the data collection frequency
-# if unset, will inherit the netdata update frequency
-apcupsd_update_every=5
-
-# the charts priority on the dashboard
-#apcupsd_priority=90000
-
-# the number of retries to do in case of failure
-# before disabling the module
-#apcupsd_retries=10
-
-```
-
-
-## Troubleshooting
-
-### Debug Mode
-
-To troubleshoot issues with the `apcupsd` collector, run the `charts.d.plugin` with the debug option enabled. The output
-should give you clues as to why the collector isn't working.
-
-- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on
- your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.
-
- ```bash
- cd /usr/libexec/netdata/plugins.d/
- ```
-
-- Switch to the `netdata` user.
-
- ```bash
- sudo -u netdata -s
- ```
-
-- Run the `charts.d.plugin` to debug the collector:
-
- ```bash
- ./charts.d.plugin debug 1 apcupsd
- ```
-
-
diff --git a/collectors/charts.d.plugin/apcupsd/metadata.yaml b/collectors/charts.d.plugin/apcupsd/metadata.yaml
deleted file mode 100644
index c333dc964..000000000
--- a/collectors/charts.d.plugin/apcupsd/metadata.yaml
+++ /dev/null
@@ -1,256 +0,0 @@
-plugin_name: charts.d.plugin
-modules:
- - meta:
- plugin_name: charts.d.plugin
- module_name: apcupsd
- monitored_instance:
- name: APC UPS
- link: "https://www.apc.com"
- categories:
- - data-collection.ups
- icon_filename: "apc.svg"
- related_resources:
- integrations:
- list: []
- info_provided_to_referring_integrations:
- description: ""
- keywords:
- - ups
- - apc
- - power
- - supply
- - battery
- - apcupsd
- most_popular: false
- overview:
- data_collection:
- metrics_description: "Monitor APC UPS performance with Netdata for optimal uninterruptible power supply operations. Enhance your power supply reliability with real-time APC UPS metrics."
- method_description: "The collector uses the `apcaccess` tool to contact the `apcupsd` daemon and get the APC UPS statistics."
- supported_platforms:
- include: []
- exclude: []
- multi_instance: false
- additional_permissions:
- description: ""
- default_behavior:
- auto_detection:
- description: "By default, with no configuration provided, the collector will try to contact 127.0.0.1:3551 with using the `apcaccess` utility."
- limits:
- description: ""
- performance_impact:
- description: ""
- setup:
- prerequisites:
- list:
- - title: "Install charts.d plugin"
- description: |
- If [using our official native DEB/RPM packages](https://github.com/netdata/netdata/blob/master/packaging/installer/UPDATE.md#determine-which-installation-method-you-used), make sure `netdata-plugin-chartsd` is installed.
- - title: "Required software"
- description: "Make sure the `apcaccess` and `apcupsd` are installed and running."
- configuration:
- file:
- name: charts.d/apcupsd.conf
- options:
- description: |
- The config file is sourced by the charts.d plugin. It's a standard bash file.
-
- The following collapsed table contains all the options that can be configured for the apcupsd collector.
- folding:
- title: "Config options"
- enabled: true
- list:
- - name: apcupsd_sources
- description: This is an array of apcupsd sources. You can have multiple entries there. Please refer to the example below on how to set it.
- default_value: "127.0.0.1:3551"
- required: false
- - name: apcupsd_timeout
- description: How long to wait for apcupsd to respond.
- default_value: 3
- required: false
- - name: apcupsd_update_every
- description: The data collection frequency. If unset, will inherit the netdata update frequency.
- default_value: 1
- required: false
- - name: apcupsd_priority
- description: The charts priority on the dashboard.
- default_value: 90000
- required: false
- - name: apcupsd_retries
- description: The number of retries to do in case of failure before disabling the collector.
- default_value: 10
- required: false
- examples:
- folding:
- enabled: false
- title: "Config"
- list:
- - name: Multiple apcupsd sources
- description: Specify a multiple apcupsd sources along with a custom update interval
- config: |
- # add all your APC UPSes in this array - uncomment it too
- declare -A apcupsd_sources=(
- ["local"]="127.0.0.1:3551",
- ["remote"]="1.2.3.4:3551"
- )
-
- # how long to wait for apcupsd to respond
- #apcupsd_timeout=3
-
- # the data collection frequency
- # if unset, will inherit the netdata update frequency
- apcupsd_update_every=5
-
- # the charts priority on the dashboard
- #apcupsd_priority=90000
-
- # the number of retries to do in case of failure
- # before disabling the module
- #apcupsd_retries=10
- troubleshooting:
- problems:
- list: []
- alerts:
- - name: apcupsd_ups_charge
- link: https://github.com/netdata/netdata/blob/master/health/health.d/apcupsd.conf
- metric: apcupsd.charge
- info: average UPS charge over the last minute
- os: "*"
- - name: apcupsd_10min_ups_load
- link: https://github.com/netdata/netdata/blob/master/health/health.d/apcupsd.conf
- metric: apcupsd.load
- info: average UPS load over the last 10 minutes
- os: "*"
- - name: apcupsd_last_collected_secs
- link: https://github.com/netdata/netdata/blob/master/health/health.d/apcupsd.conf
- metric: apcupsd.load
- info: number of seconds since the last successful data collection
- - name: apcupsd_selftest_warning
- link: https://github.com/netdata/netdata/blob/master/health/health.d/apcupsd.conf
- metric: apcupsd.selftest
- info: self-test failed due to insufficient battery capacity or due to overload.
- - name: apcupsd_status_onbatt
- link: https://github.com/netdata/netdata/blob/master/health/health.d/apcupsd.conf
- metric: apcupsd.status
- info: APC UPS has switched to battery power because the input power has failed
- - name: apcupsd_status_overload
- link: https://github.com/netdata/netdata/blob/master/health/health.d/apcupsd.conf
- metric: apcupsd.status
- info: APC UPS is overloaded and cannot supply enough power to the load
- - name: apcupsd_status_lowbatt
- link: https://github.com/netdata/netdata/blob/master/health/health.d/apcupsd.conf
- metric: apcupsd.status
- info: APC UPS battery is low and needs to be recharged
- - name: apcupsd_status_replacebatt
- link: https://github.com/netdata/netdata/blob/master/health/health.d/apcupsd.conf
- metric: apcupsd.status
- info: APC UPS battery has reached the end of its lifespan and needs to be replaced
- - name: apcupsd_status_nobatt
- link: https://github.com/netdata/netdata/blob/master/health/health.d/apcupsd.conf
- metric: apcupsd.status
- info: APC UPS has no battery
- - name: apcupsd_status_commlost
- link: https://github.com/netdata/netdata/blob/master/health/health.d/apcupsd.conf
- metric: apcupsd.status
- info: APC UPS communication link is lost
- metrics:
- folding:
- title: Metrics
- enabled: false
- description: ""
- availability: []
- scopes:
- - name: ups
- description: "Metrics related to UPS. Each UPS provides its own set of the following metrics."
- labels: []
- metrics:
- - name: apcupsd.charge
- description: UPS Charge
- unit: "percentage"
- chart_type: area
- dimensions:
- - name: charge
- - name: apcupsd.battery.voltage
- description: UPS Battery Voltage
- unit: "Volts"
- chart_type: line
- dimensions:
- - name: voltage
- - name: nominal
- - name: apcupsd.input.voltage
- description: UPS Input Voltage
- unit: "Volts"
- chart_type: line
- dimensions:
- - name: voltage
- - name: min
- - name: max
- - name: apcupsd.output.voltage
- description: UPS Output Voltage
- unit: "Volts"
- chart_type: line
- dimensions:
- - name: absolute
- - name: nominal
- - name: apcupsd.input.frequency
- description: UPS Input Voltage
- unit: "Hz"
- chart_type: line
- dimensions:
- - name: frequency
- - name: apcupsd.load
- description: UPS Load
- unit: "percentage"
- chart_type: area
- dimensions:
- - name: load
- - name: apcupsd.load_usage
- description: UPS Load Usage
- unit: "Watts"
- chart_type: area
- dimensions:
- - name: load
- - name: apcupsd.temperature
- description: UPS Temperature
- unit: "Celsius"
- chart_type: line
- dimensions:
- - name: temp
- - name: apcupsd.time
- description: UPS Time Remaining
- unit: "Minutes"
- chart_type: area
- dimensions:
- - name: time
- - name: apcupsd.online
- description: UPS ONLINE flag
- unit: "boolean"
- chart_type: line
- dimensions:
- - name: online
- - name: apcupsd.selftest
- description: UPS Self-Test status
- unit: status
- chart_type: line
- dimensions:
- - name: OK
- - name: NO
- - name: BT
- - name: NG
- - name: apcupsd.status
- description: UPS Status
- unit: status
- chart_type: line
- dimensions:
- - name: ONLINE
- - name: ONBATT
- - name: OVERLOAD
- - name: LOWBATT
- - name: REPLACEBATT
- - name: NOBATT
- - name: SLAVE
- - name: SLAVEDOWN
- - name: COMMLOST
- - name: CAL
- - name: TRIM
- - name: BOOST
- - name: SHUTTING_DOWN
diff --git a/collectors/charts.d.plugin/charts.d.conf b/collectors/charts.d.plugin/charts.d.conf
deleted file mode 100644
index 4614f259e..000000000
--- a/collectors/charts.d.plugin/charts.d.conf
+++ /dev/null
@@ -1,47 +0,0 @@
-# This is the configuration for charts.d.plugin
-
-# Each of its collectors can read configuration either from this file
-# or a NAME.conf file (where NAME is the collector name).
-# The collector specific file has higher precedence.
-
-# This file is a shell script too.
-
-# -----------------------------------------------------------------------------
-
-# number of seconds to run without restart
-# after this time, charts.d.plugin will exit
-# netdata will restart it, but a small gap
-# will appear in the charts.d.plugin charts.
-#restart_timeout=$[3600 * 4]
-
-# when making iterations, charts.d can loop more frequently
-# to prevent plugins missing iterations.
-# this is a percentage relative to update_every to align its
-# iterations.
-# The minimum is 10%, the maximum 100%.
-# So, if update_every is 1 second and time_divisor is 50,
-# charts.d will iterate every 500ms.
-# Charts will be called to collect data only if the time
-# passed since the last time the collected data is equal or
-# above their update_every.
-#time_divisor=50
-
-# -----------------------------------------------------------------------------
-
-# the default enable/disable for all charts.d collectors
-# the default is "yes"
-# enable_all_charts="yes"
-
-# BY DEFAULT ENABLED MODULES
-# ap=yes
-# apcupsd=yes
-# libreswan=yes
-# opensips=yes
-
-# -----------------------------------------------------------------------------
-# THESE NEED TO BE SET TO "force" TO BE ENABLED
-
-# Nothing useful.
-# Just an example charts.d plugin you can use as a template.
-# example=force
-# sensors=force
diff --git a/collectors/charts.d.plugin/charts.d.dryrun-helper.sh b/collectors/charts.d.plugin/charts.d.dryrun-helper.sh
deleted file mode 100755
index 91af2c542..000000000
--- a/collectors/charts.d.plugin/charts.d.dryrun-helper.sh
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env bash
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-# shellcheck disable=SC2181
-
-# will stop the script for any error
-set -e
-
-me="$0"
-name="$1"
-chart="$2"
-conf="$3"
-
-can_diff=1
-
-tmp1="$(mktemp)"
-tmp2="$(mktemp)"
-
-myset() {
- set | grep -v "^_=" | grep -v "^PIPESTATUS=" | grep -v "^BASH_LINENO="
-}
-
-# save 2 'set'
-myset >"$tmp1"
-myset >"$tmp2"
-
-# make sure they don't differ
-diff "$tmp1" "$tmp2" >/dev/null 2>&1
-if [ $? -ne 0 ]; then
- # they differ, we cannot do the check
- echo >&2 "$me: cannot check with diff."
- can_diff=0
-fi
-
-# do it again, now including the script
-myset >"$tmp1"
-
-# include the plugin and its config
-if [ -f "$conf" ]; then
- # shellcheck source=/dev/null
- . "$conf"
- if [ $? -ne 0 ]; then
- echo >&2 "$me: cannot load config file $conf"
- rm "$tmp1" "$tmp2"
- exit 1
- fi
-fi
-
-# shellcheck source=/dev/null
-. "$chart"
-if [ $? -ne 0 ]; then
- echo >&2 "$me: cannot load chart file $chart"
- rm "$tmp1" "$tmp2"
- exit 1
-fi
-
-# remove all variables starting with the plugin name
-myset | grep -v "^$name" >"$tmp2"
-
-if [ $can_diff -eq 1 ]; then
- # check if they are different
- # make sure they don't differ
- diff "$tmp1" "$tmp2" >&2
- if [ $? -ne 0 ]; then
- # they differ
- rm "$tmp1" "$tmp2"
- exit 1
- fi
-fi
-
-rm "$tmp1" "$tmp2"
-exit 0
diff --git a/collectors/charts.d.plugin/charts.d.plugin.in b/collectors/charts.d.plugin/charts.d.plugin.in
deleted file mode 100755
index 4e64b7e23..000000000
--- a/collectors/charts.d.plugin/charts.d.plugin.in
+++ /dev/null
@@ -1,809 +0,0 @@
-#!/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
-#
-# if you need to run parallel charts.d processes, link this file to a different name
-# in the same directory, with a .plugin suffix and netdata will start both of them,
-# each will have a different config file and modules configuration directory.
-#
-
-export PATH="${PATH}:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin:@sbindir_POST@"
-
-PROGRAM_FILE="$0"
-MODULE_NAME="main"
-
-# -----------------------------------------------------------------------------
-# logging
-
-PROGRAM_NAME="$(basename "${0}")"
-SHORT_PROGRAM_NAME="${PROGRAM_NAME/.plugin/}"
-
-# these should be the same with syslog() priorities
-NDLP_EMERG=0 # system is unusable
-NDLP_ALERT=1 # action must be taken immediately
-NDLP_CRIT=2 # critical conditions
-NDLP_ERR=3 # error conditions
-NDLP_WARN=4 # warning conditions
-NDLP_NOTICE=5 # normal but significant condition
-NDLP_INFO=6 # informational
-NDLP_DEBUG=7 # debug-level messages
-
-# the max (numerically) log level we will log
-LOG_LEVEL=$NDLP_INFO
-
-set_log_min_priority() {
- case "${NETDATA_LOG_LEVEL,,}" in
- "emerg" | "emergency")
- LOG_LEVEL=$NDLP_EMERG
- ;;
-
- "alert")
- LOG_LEVEL=$NDLP_ALERT
- ;;
-
- "crit" | "critical")
- LOG_LEVEL=$NDLP_CRIT
- ;;
-
- "err" | "error")
- LOG_LEVEL=$NDLP_ERR
- ;;
-
- "warn" | "warning")
- LOG_LEVEL=$NDLP_WARN
- ;;
-
- "notice")
- LOG_LEVEL=$NDLP_NOTICE
- ;;
-
- "info")
- LOG_LEVEL=$NDLP_INFO
- ;;
-
- "debug")
- LOG_LEVEL=$NDLP_DEBUG
- ;;
- esac
-}
-
-set_log_min_priority
-
-log() {
- local level="${1}"
- shift 1
-
- [[ -n "$level" && -n "$LOG_LEVEL" && "$level" -gt "$LOG_LEVEL" ]] && return
-
- systemd-cat-native --log-as-netdata --newline="--NEWLINE--" <<EOFLOG
-INVOCATION_ID=${NETDATA_INVOCATION_ID}
-SYSLOG_IDENTIFIER=${PROGRAM_NAME}
-PRIORITY=${level}
-THREAD_TAG=charts.d.plugin
-ND_LOG_SOURCE=collector
-MESSAGE=${MODULE_NAME}: ${*//\\n/--NEWLINE--}
-
-EOFLOG
- # AN EMPTY LINE IS NEEDED ABOVE
-}
-
-info() {
- log "$NDLP_INFO" "${@}"
-}
-
-warning() {
- log "$NDLP_WARN" "${@}"
-}
-
-error() {
- log "$NDLP_ERR" "${@}"
-}
-
-fatal() {
- log "$NDLP_ALERT" "${@}"
- echo "DISABLE"
- exit 1
-}
-
-debug() {
- [ "$debug" = "1" ] && log "$NDLP_DEBUG" "${@}"
-}
-
-# -----------------------------------------------------------------------------
-# check for BASH v4+ (required for associative arrays)
-
-if [ ${BASH_VERSINFO[0]} -lt 4 ]; then
- echo >&2 "BASH version 4 or later is required (this is ${BASH_VERSION})."
- exit 1
-fi
-
-# -----------------------------------------------------------------------------
-# create temp dir
-
-debug=0
-TMP_DIR=
-chartsd_cleanup() {
- trap '' EXIT QUIT HUP INT TERM
-
- if [ ! -z "$TMP_DIR" -a -d "$TMP_DIR" ]; then
- [ $debug -eq 1 ] && echo >&2 "$PROGRAM_NAME: cleaning up temporary directory $TMP_DIR ..."
- rm -rf "$TMP_DIR"
- fi
- echo "EXIT"
- exit 0
-}
-trap chartsd_cleanup EXIT QUIT HUP INT TERM
-
-if [ $UID = "0" ]; then
- TMP_DIR="$(mktemp -d /var/run/netdata-${PROGRAM_NAME}-XXXXXXXXXX)"
-else
- TMP_DIR="$(mktemp -d /tmp/.netdata-${PROGRAM_NAME}-XXXXXXXXXX)"
-fi
-
-logdate() {
- date "+%Y-%m-%d %H:%M:%S"
-}
-
-# -----------------------------------------------------------------------------
-# check a few commands
-
-require_cmd() {
- local x=$(which "${1}" 2>/dev/null || command -v "${1}" 2>/dev/null)
- if [ -z "${x}" -o ! -x "${x}" ]; then
- warning "command '${1}' is not found in ${PATH}."
- eval "${1^^}_CMD=\"\""
- return 1
- fi
-
- eval "${1^^}_CMD=\"${x}\""
- return 0
-}
-
-require_cmd date || exit 1
-require_cmd sed || exit 1
-require_cmd basename || exit 1
-require_cmd dirname || exit 1
-require_cmd cat || exit 1
-require_cmd grep || exit 1
-require_cmd egrep || exit 1
-require_cmd mktemp || exit 1
-require_cmd awk || exit 1
-require_cmd timeout || exit 1
-require_cmd curl || exit 1
-
-# -----------------------------------------------------------------------------
-
-[ $((BASH_VERSINFO[0])) -lt 4 ] && fatal "BASH version 4 or later is required, but found version: ${BASH_VERSION}. Please upgrade."
-
-info "started from '$PROGRAM_FILE' with options: $*"
-
-# -----------------------------------------------------------------------------
-# internal defaults
-# netdata exposes a few environment variables for us
-
-[ -z "${NETDATA_PLUGINS_DIR}" ] && NETDATA_PLUGINS_DIR="$(dirname "${0}")"
-[ -z "${NETDATA_USER_CONFIG_DIR}" ] && NETDATA_USER_CONFIG_DIR="@configdir_POST@"
-[ -z "${NETDATA_STOCK_CONFIG_DIR}" ] && NETDATA_STOCK_CONFIG_DIR="@libconfigdir_POST@"
-
-pluginsd="${NETDATA_PLUGINS_DIR}"
-stockconfd="${NETDATA_STOCK_CONFIG_DIR}/${SHORT_PROGRAM_NAME}"
-userconfd="${NETDATA_USER_CONFIG_DIR}/${SHORT_PROGRAM_NAME}"
-olduserconfd="${NETDATA_USER_CONFIG_DIR}"
-chartsd="$pluginsd/../charts.d"
-
-minimum_update_frequency="${NETDATA_UPDATE_EVERY-1}"
-update_every=${minimum_update_frequency} # this will be overwritten by the command line
-
-# work around for non BASH shells
-charts_create="_create"
-charts_update="_update"
-charts_check="_check"
-charts_underscore="_"
-
-# when making iterations, charts.d can loop more frequently
-# to prevent plugins missing iterations.
-# this is a percentage relative to update_every to align its
-# iterations.
-# The minimum is 10%, the maximum 100%.
-# So, if update_every is 1 second and time_divisor is 50,
-# charts.d will iterate every 500ms.
-# Charts will be called to collect data only if the time
-# passed since the last time the collected data is equal or
-# above their update_every.
-time_divisor=50
-
-# number of seconds to run without restart
-# after this time, charts.d.plugin will exit
-# netdata will restart it
-restart_timeout=$((3600 * 4))
-
-# check if the charts.d plugins are using global variables
-# they should not.
-# It does not currently support BASH v4 arrays, so it is
-# disabled
-dryrunner=0
-
-# check for timeout command
-check_for_timeout=1
-
-# the default enable/disable value for all charts
-enable_all_charts="yes"
-
-# -----------------------------------------------------------------------------
-# parse parameters
-
-check=0
-chart_only=
-while [ ! -z "$1" ]; do
- if [ "$1" = "check" ]; then
- check=1
- shift
- continue
- fi
-
- if [ "$1" = "debug" -o "$1" = "all" ]; then
- debug=1
- LOG_LEVEL=$NDLP_DEBUG
- shift
- continue
- fi
-
- if [ -f "$chartsd/$1.chart.sh" ]; then
- debug=1
- LOG_LEVEL=$NDLP_DEBUG
- chart_only="$(echo $1.chart.sh | sed "s/\.chart\.sh$//g")"
- shift
- continue
- fi
-
- if [ -f "$chartsd/$1" ]; then
- debug=1
- LOG_LEVEL=$NDLP_DEBUG
- chart_only="$(echo $1 | sed "s/\.chart\.sh$//g")"
- shift
- continue
- fi
-
- # number check
- n="$1"
- x=$((n))
- if [ "$x" = "$n" ]; then
- shift
- update_every=$x
- [ $update_every -lt $minimum_update_frequency ] && update_every=$minimum_update_frequency
- continue
- fi
-
- fatal "Cannot understand parameter $1. Aborting."
-done
-
-# -----------------------------------------------------------------------------
-# loop control
-
-# default sleep function
-LOOPSLEEPMS_HIGHRES=0
-now_ms=
-current_time_ms_default() {
- now_ms="$(date +'%s')000"
-}
-current_time_ms="current_time_ms_default"
-current_time_ms_accuracy=1
-mysleep="sleep"
-
-# if found and included, this file overwrites loopsleepms()
-# and current_time_ms() with a high resolution timer function
-# for precise looping.
-source "$pluginsd/loopsleepms.sh.inc"
-[ $? -ne 0 ] && error "Failed to load '$pluginsd/loopsleepms.sh.inc'."
-
-# -----------------------------------------------------------------------------
-# load my configuration
-
-for myconfig in "${NETDATA_STOCK_CONFIG_DIR}/${SHORT_PROGRAM_NAME}.conf" "${NETDATA_USER_CONFIG_DIR}/${SHORT_PROGRAM_NAME}.conf"; do
- if [ -f "$myconfig" ]; then
- source "$myconfig"
- if [ $? -ne 0 ]; then
- error "Config file '$myconfig' loaded with errors."
- else
- info "Configuration file '$myconfig' loaded."
- fi
- else
- warning "Configuration file '$myconfig' not found."
- fi
-done
-
-# make sure time_divisor is right
-time_divisor=$((time_divisor))
-[ $time_divisor -lt 10 ] && time_divisor=10
-[ $time_divisor -gt 100 ] && time_divisor=100
-
-# we check for the timeout command, after we load our
-# configuration, so that the user may overwrite the
-# timeout command we use, providing a function that
-# can emulate the timeout command we need:
-# > timeout SECONDS command ...
-if [ $check_for_timeout -eq 1 ]; then
- require_cmd timeout || exit 1
-fi
-
-# -----------------------------------------------------------------------------
-# internal checks
-
-# netdata passes the requested update frequency as the first argument
-update_every=$((update_every + 1 - 1)) # makes sure it is a number
-test $update_every -eq 0 && update_every=1 # if it is zero, make it 1
-
-# check the charts.d directory
-[ ! -d "$chartsd" ] && fatal "cannot find charts directory '$chartsd'"
-
-# -----------------------------------------------------------------------------
-# library functions
-
-fixid() {
- echo "$*" |
- tr -c "[A-Z][a-z][0-9]" "_" |
- sed -e "s|^_\+||g" -e "s|_\+$||g" -e "s|_\+|_|g" |
- tr "[A-Z]" "[a-z]"
-}
-
-isvarset() {
- [ -n "$1" ] && [ "$1" != "unknown" ] && [ "$1" != "none" ]
- return $?
-}
-
-getosid() {
- if isvarset "${NETDATA_CONTAINER_OS_ID}"; then
- echo "${NETDATA_CONTAINER_OS_ID}"
- else
- echo "${NETDATA_SYSTEM_OS_ID}"
- fi
-}
-
-run() {
- local ret pid="${BASHPID}" t
-
- if [ "z${1}" = "z-t" -a "${2}" != "0" ]; then
- t="${2}"
- shift 2
- timeout "${t}" "${@}" 2>"${TMP_DIR}/run.${pid}"
- ret=$?
- else
- "${@}" 2>"${TMP_DIR}/run.${pid}"
- ret=$?
- fi
-
- if [ ${ret} -ne 0 ]; then
- {
- printf "$(logdate): ${PROGRAM_NAME}: ${status}: ${MODULE_NAME}: command '"
- printf "%q " "${@}"
- printf "' failed with code ${ret}:\n --- BEGIN TRACE ---\n"
- cat "${TMP_DIR}/run.${pid}"
- printf " --- END TRACE ---\n"
- } >&2
- fi
- rm -f "${TMP_DIR}/run.${pid}"
-
- return ${ret}
-}
-
-# convert any floating point number
-# to integer, give a multiplier
-# the result is stored in ${FLOAT2INT_RESULT}
-# so that no fork is necessary
-# the multiplier must be a power of 10
-float2int() {
- local f m="$2" a b l v=($1)
- f=${v[0]}
-
- # the length of the multiplier - 1
- l=$((${#m} - 1))
-
- # check if the number is in scientific notation
- if [[ ${f} =~ ^[[:space:]]*(-)?[0-9.]+(e|E)(\+|-)[0-9]+ ]]; then
- # convert it to decimal
- # unfortunately, this fork cannot be avoided
- # if you know of a way to avoid it, please let me know
- f=$(printf "%0.${l}f" ${f})
- fi
-
- # split the floating point number
- # in integer (a) and decimal (b)
- a=${f/.*/}
- b=${f/*./}
-
- # if the integer part is missing
- # set it to zero
- [ -z "${a}" ] && a="0"
-
- # strip leading zeros from the integer part
- # base 10 conversion
- a=$((10#$a))
-
- # check the length of the decimal part
- # against the length of the multiplier
- if [ ${#b} -gt ${l} ]; then
- # too many digits - take the most significant
- b=${b:0:l}
-
- elif [ ${#b} -lt ${l} ]; then
- # too few digits - pad with zero on the right
- local z="00000000000000000000000" r=$((l - ${#b}))
- b="${b}${z:0:r}"
- fi
-
- # strip leading zeros from the decimal part
- # base 10 conversion
- b=$((10#$b))
-
- # store the result
- FLOAT2INT_RESULT=$(((a * m) + b))
-}
-
-# -----------------------------------------------------------------------------
-# charts check functions
-
-all_charts() {
- cd "$chartsd"
- [ $? -ne 0 ] && error "cannot cd to $chartsd" && return 1
-
- ls *.chart.sh | sed "s/\.chart\.sh$//g"
-}
-
-declare -A charts_enable_keyword=(
- ['apache']="force"
- ['cpu_apps']="force"
- ['cpufreq']="force"
- ['example']="force"
- ['exim']="force"
- ['hddtemp']="force"
- ['load_average']="force"
- ['mem_apps']="force"
- ['mysql']="force"
- ['nginx']="force"
- ['phpfpm']="force"
- ['postfix']="force"
- ['sensors']="force"
- ['squid']="force"
- ['tomcat']="force"
-)
-
-declare -A obsolete_charts=(
- ['apache']="python.d.plugin module"
- ['cpu_apps']="apps.plugin"
- ['cpufreq']="proc plugin"
- ['exim']="python.d.plugin module"
- ['hddtemp']="python.d.plugin module"
- ['load_average']="proc plugin"
- ['mem_apps']="proc plugin"
- ['mysql']="python.d.plugin module"
- ['nginx']="python.d.plugin module"
- ['phpfpm']="python.d.plugin module"
- ['postfix']="python.d.plugin module"
- ['squid']="python.d.plugin module"
- ['tomcat']="python.d.plugin module"
-)
-
-all_enabled_charts() {
- local charts enabled required
-
- # find all enabled charts
- for chart in $(all_charts); do
- MODULE_NAME="${chart}"
-
- if [ -n "${obsolete_charts["$MODULE_NAME"]}" ]; then
- debug "is replaced by ${obsolete_charts["$MODULE_NAME"]}, skipping it."
- continue
- fi
-
- eval "enabled=\$$chart"
- if [ -z "${enabled}" ]; then
- enabled="${enable_all_charts}"
- fi
-
- required="${charts_enable_keyword[${chart}]}"
- [ -z "${required}" ] && required="yes"
-
- if [ ! "${enabled}" = "${required}" ]; then
- info "is disabled. Add a line with $chart=$required in '${NETDATA_USER_CONFIG_DIR}/${PROGRAM_NAME}.conf' to enable it (or remove the line that disables it)."
- else
- debug "is enabled for auto-detection."
- local charts="$charts $chart"
- fi
- done
- MODULE_NAME="main"
-
- local charts2=
- for chart in $charts; do
- MODULE_NAME="${chart}"
-
- # check the enabled charts
- local check="$(cat "$chartsd/$chart.chart.sh" | sed "s/^ \+//g" | grep "^$chart$charts_check()")"
- if [ -z "$check" ]; then
- error "module '$chart' does not seem to have a $chart$charts_check() function. Disabling it."
- continue
- fi
-
- local create="$(cat "$chartsd/$chart.chart.sh" | sed "s/^ \+//g" | grep "^$chart$charts_create()")"
- if [ -z "$create" ]; then
- error "module '$chart' does not seem to have a $chart$charts_create() function. Disabling it."
- continue
- fi
-
- local update="$(cat "$chartsd/$chart.chart.sh" | sed "s/^ \+//g" | grep "^$chart$charts_update()")"
- if [ -z "$update" ]; then
- error "module '$chart' does not seem to have a $chart$charts_update() function. Disabling it."
- continue
- fi
-
- # check its config
- #if [ -f "$userconfd/$chart.conf" ]
- #then
- # if [ ! -z "$( cat "$userconfd/$chart.conf" | sed "s/^ \+//g" | grep -v "^$" | grep -v "^#" | grep -v "^$chart$charts_underscore" )" ]
- # then
- # error "module's $chart config $userconfd/$chart.conf should only have lines starting with $chart$charts_underscore . Disabling it."
- # continue
- # fi
- #fi
-
- #if [ $dryrunner -eq 1 ]
- # then
- # "$pluginsd/charts.d.dryrun-helper.sh" "$chart" "$chartsd/$chart.chart.sh" "$userconfd/$chart.conf" >/dev/null
- # if [ $? -ne 0 ]
- # then
- # error "module's $chart did not pass the dry run check. This means it uses global variables not starting with $chart. Disabling it."
- # continue
- # fi
- #fi
-
- local charts2="$charts2 $chart"
- done
- MODULE_NAME="main"
-
- echo $charts2
- debug "enabled charts: $charts2"
-}
-
-# -----------------------------------------------------------------------------
-# load the charts
-
-suffix_retries="_retries"
-suffix_update_every="_update_every"
-active_charts=
-for chart in $(all_enabled_charts); do
- MODULE_NAME="${chart}"
-
- debug "loading module: '$chartsd/$chart.chart.sh'"
-
- source "$chartsd/$chart.chart.sh"
- [ $? -ne 0 ] && warning "Module '$chartsd/$chart.chart.sh' loaded with errors."
-
- # first load the stock config
- if [ -f "$stockconfd/$chart.conf" ]; then
- debug "loading module configuration: '$stockconfd/$chart.conf'"
- source "$stockconfd/$chart.conf"
- [ $? -ne 0 ] && warning "Config file '$stockconfd/$chart.conf' loaded with errors."
- else
- debug "not found module configuration: '$stockconfd/$chart.conf'"
- fi
-
- # then load the user config (it overwrites the stock)
- if [ -f "$userconfd/$chart.conf" ]; then
- debug "loading module configuration: '$userconfd/$chart.conf'"
- source "$userconfd/$chart.conf"
- [ $? -ne 0 ] && warning "Config file '$userconfd/$chart.conf' loaded with errors."
- else
- debug "not found module configuration: '$userconfd/$chart.conf'"
-
- if [ -f "$olduserconfd/$chart.conf" ]; then
- # support for very old netdata that had the charts.d module configs in /etc/netdata
- info "loading module configuration from obsolete location: '$olduserconfd/$chart.conf'"
- source "$olduserconfd/$chart.conf"
- [ $? -ne 0 ] && warning "Config file '$olduserconfd/$chart.conf' loaded with errors."
- fi
- fi
-
- eval "dt=\$$chart$suffix_update_every"
- dt=$((dt + 1 - 1)) # make sure it is a number
- if [ $dt -lt $update_every ]; then
- eval "$chart$suffix_update_every=$update_every"
- fi
-
- $chart$charts_check
- if [ $? -eq 0 ]; then
- debug "module '$chart' activated"
- active_charts="$active_charts $chart"
- else
- error "module's '$chart' check() function reports failure."
- fi
-done
-MODULE_NAME="main"
-debug "activated modules: $active_charts"
-
-# -----------------------------------------------------------------------------
-# check overwrites
-
-# enable work time reporting
-debug_time=
-test $debug -eq 1 && debug_time=tellwork
-
-# if we only need a specific chart, remove all the others
-if [ ! -z "${chart_only}" ]; then
- debug "requested to run only for: '${chart_only}'"
- check_charts=
- for chart in $active_charts; do
- if [ "$chart" = "$chart_only" ]; then
- check_charts="$chart"
- break
- fi
- done
- active_charts="$check_charts"
-fi
-debug "activated charts: $active_charts"
-
-# stop if we just need a pre-check
-if [ $check -eq 1 ]; then
- info "CHECK RESULT"
- info "Will run the charts: $active_charts"
- exit 0
-fi
-
-# -----------------------------------------------------------------------------
-
-cd "${TMP_DIR}" || exit 1
-
-# -----------------------------------------------------------------------------
-# create charts
-
-run_charts=
-for chart in $active_charts; do
- MODULE_NAME="${chart}"
-
- debug "calling '$chart$charts_create()'..."
- $chart$charts_create
- if [ $? -eq 0 ]; then
- run_charts="$run_charts $chart"
- debug "'$chart' initialized."
- else
- error "module's '$chart' function '$chart$charts_create()' reports failure."
- fi
-done
-MODULE_NAME="main"
-debug "run_charts='$run_charts'"
-
-# -----------------------------------------------------------------------------
-# update dimensions
-
-[ -z "$run_charts" ] && fatal "No charts to collect data from."
-
-keepalive() {
- if [ ! -t 1 ] && ! printf "\n"; then
- chartsd_cleanup
- fi
-}
-
-declare -A charts_last_update=() charts_update_every=() charts_retries=() charts_next_update=() charts_run_counter=() charts_serial_failures=()
-global_update() {
- local exit_at \
- c=0 dt ret last_ms exec_start_ms exec_end_ms \
- chart now_charts=() next_charts=($run_charts) \
- next_ms x seconds millis
-
- # return the current time in ms in $now_ms
- ${current_time_ms}
-
- exit_at=$((now_ms + (restart_timeout * 1000)))
-
- for chart in $run_charts; do
- eval "charts_update_every[$chart]=\$$chart$suffix_update_every"
- test -z "${charts_update_every[$chart]}" && charts_update_every[$chart]=$update_every
-
- eval "charts_retries[$chart]=\$$chart$suffix_retries"
- test -z "${charts_retries[$chart]}" && charts_retries[$chart]=10
-
- charts_last_update[$chart]=$((now_ms - (now_ms % (charts_update_every[$chart] * 1000))))
- charts_next_update[$chart]=$((charts_last_update[$chart] + (charts_update_every[$chart] * 1000)))
- charts_run_counter[$chart]=0
- charts_serial_failures[$chart]=0
-
- echo "CHART netdata.plugin_chartsd_$chart '' 'Execution time for $chart plugin' 'milliseconds / run' charts.d netdata.plugin_charts area 145000 ${charts_update_every[$chart]} '' '' '$chart'"
- echo "DIMENSION run_time 'run time' absolute 1 1"
- done
-
- # the main loop
- while [ "${#next_charts[@]}" -gt 0 ]; do
- keepalive
-
- c=$((c + 1))
- now_charts=("${next_charts[@]}")
- next_charts=()
-
- # return the current time in ms in $now_ms
- ${current_time_ms}
-
- for chart in "${now_charts[@]}"; do
- MODULE_NAME="${chart}"
-
- if [ ${now_ms} -ge ${charts_next_update[$chart]} ]; then
- last_ms=${charts_last_update[$chart]}
- dt=$((now_ms - last_ms))
-
- charts_last_update[$chart]=${now_ms}
-
- while [ ${charts_next_update[$chart]} -lt ${now_ms} ]; do
- charts_next_update[$chart]=$((charts_next_update[$chart] + (charts_update_every[$chart] * 1000)))
- done
-
- # the first call should not give a duration
- # so that netdata calibrates to current time
- dt=$((dt * 1000))
- charts_run_counter[$chart]=$((charts_run_counter[$chart] + 1))
- if [ ${charts_run_counter[$chart]} -eq 1 ]; then
- dt=
- fi
-
- exec_start_ms=$now_ms
- $chart$charts_update $dt
- ret=$?
-
- # return the current time in ms in $now_ms
- ${current_time_ms}
- exec_end_ms=$now_ms
-
- echo "BEGIN netdata.plugin_chartsd_$chart $dt"
- echo "SET run_time = $((exec_end_ms - exec_start_ms))"
- echo "END"
-
- if [ $ret -eq 0 ]; then
- charts_serial_failures[$chart]=0
- next_charts+=($chart)
- else
- charts_serial_failures[$chart]=$((charts_serial_failures[$chart] + 1))
-
- if [ ${charts_serial_failures[$chart]} -gt ${charts_retries[$chart]} ]; then
- error "module's '$chart' update() function reported failure ${charts_serial_failures[$chart]} times. Disabling it."
- else
- error "module's '$chart' update() function reports failure. Will keep trying for a while."
- next_charts+=($chart)
- fi
- fi
- else
- next_charts+=($chart)
- fi
- done
- MODULE_NAME="${chart}"
-
- # wait the time you are required to
- next_ms=$((now_ms + (update_every * 1000 * 100)))
- for x in "${charts_next_update[@]}"; do [ ${x} -lt ${next_ms} ] && next_ms=${x}; done
- next_ms=$((next_ms - now_ms))
-
- if [ ${LOOPSLEEPMS_HIGHRES} -eq 1 -a ${next_ms} -gt 0 ]; then
- next_ms=$((next_ms + current_time_ms_accuracy))
- seconds=$((next_ms / 1000))
- millis=$((next_ms % 1000))
- if [ ${millis} -lt 10 ]; then
- millis="00${millis}"
- elif [ ${millis} -lt 100 ]; then
- millis="0${millis}"
- fi
-
- debug "sleeping for ${seconds}.${millis} seconds."
- ${mysleep} ${seconds}.${millis}
- else
- debug "sleeping for ${update_every} seconds."
- ${mysleep} $update_every
- fi
-
- test ${now_ms} -ge ${exit_at} && exit 0
- done
-
- fatal "nothing left to do, exiting..."
-}
-
-global_update
diff --git a/collectors/charts.d.plugin/example/Makefile.inc b/collectors/charts.d.plugin/example/Makefile.inc
deleted file mode 100644
index e6838fbbe..000000000
--- a/collectors/charts.d.plugin/example/Makefile.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-# THIS IS NOT A COMPLETE Makefile
-# IT IS INCLUDED BY ITS PARENT'S Makefile.am
-# IT IS REQUIRED TO REFERENCE ALL FILES RELATIVE TO THE PARENT
-
-# install these files
-dist_charts_DATA += example/example.chart.sh
-dist_chartsconfig_DATA += example/example.conf
-
-# do not install these files, but include them in the distribution
-dist_noinst_DATA += example/README.md example/Makefile.inc
-
diff --git a/collectors/charts.d.plugin/example/README.md b/collectors/charts.d.plugin/example/README.md
deleted file mode 100644
index c2860eb3d..000000000
--- a/collectors/charts.d.plugin/example/README.md
+++ /dev/null
@@ -1,14 +0,0 @@
-<!--
-title: "Example"
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/charts.d.plugin/example/README.md"
-sidebar_label: "example-charts.d.plugin"
-learn_status: "Published"
-learn_topic_type: "References"
-learn_rel_path: "Integrations/Monitor/Mock Collectors"
--->
-
-# Example
-
-If you want to understand how charts.d data collector functions, check out the [charts.d example](https://raw.githubusercontent.com/netdata/netdata/master/collectors/charts.d.plugin/example/example.chart.sh).
-
-
diff --git a/collectors/charts.d.plugin/example/example.chart.sh b/collectors/charts.d.plugin/example/example.chart.sh
deleted file mode 100644
index 6bbbcf1d7..000000000
--- a/collectors/charts.d.plugin/example/example.chart.sh
+++ /dev/null
@@ -1,123 +0,0 @@
-# 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>
-#
-
-# if this chart is called X.chart.sh, then all functions and global variables
-# must start with X_
-
-# _update_every is a special variable - it holds the number of seconds
-# between the calls of the _update() function
-example_update_every=
-
-# the priority is used to sort the charts on the dashboard
-# 1 = the first chart
-example_priority=150000
-
-# to enable this chart, you have to set this to 12345
-# (just a demonstration for something that needs to be checked)
-example_magic_number=
-
-# global variables to store our collected data
-# remember: they need to start with the module name example_
-example_value1=
-example_value2=
-example_value3=
-example_value4=
-example_last=0
-example_count=0
-
-example_get() {
- # do all the work to collect / calculate the values
- # for each dimension
- #
- # Remember:
- # 1. KEEP IT SIMPLE AND SHORT
- # 2. AVOID FORKS (avoid piping commands)
- # 3. AVOID CALLING TOO MANY EXTERNAL PROGRAMS
- # 4. USE LOCAL VARIABLES (global variables may overlap with other modules)
-
- example_value1=$RANDOM
- example_value2=$RANDOM
- example_value3=$RANDOM
- example_value4=$((8192 + (RANDOM * 16383 / 32767)))
-
- if [ $example_count -gt 0 ]; then
- example_count=$((example_count - 1))
-
- [ $example_last -gt 16383 ] && example_value4=$((example_last + (RANDOM * ((32767 - example_last) / 2) / 32767)))
- [ $example_last -le 16383 ] && example_value4=$((example_last - (RANDOM * (example_last / 2) / 32767)))
- else
- example_count=$((1 + (RANDOM * 5 / 32767)))
-
- if [ $example_last -gt 16383 ] && [ $example_value4 -gt 16383 ]; then
- example_value4=$((example_value4 - 16383))
- fi
- if [ $example_last -le 16383 ] && [ $example_value4 -lt 16383 ]; then
- example_value4=$((example_value4 + 16383))
- fi
- fi
- example_last=$example_value4
-
- # this should return:
- # - 0 to send the data to netdata
- # - 1 to report a failure to collect the data
-
- return 0
-}
-
-# _check is called once, to find out if this chart should be enabled or not
-example_check() {
- # this should return:
- # - 0 to enable the chart
- # - 1 to disable the chart
-
- # check something
- [ "${example_magic_number}" != "12345" ] && error "manual configuration required: you have to set example_magic_number=$example_magic_number in example.conf to start example chart." && return 1
-
- # check that we can collect data
- example_get || return 1
-
- return 0
-}
-
-# _create is called once, to create the charts
-example_create() {
- # create the chart with 3 dimensions
- cat << EOF
-CHART example.random '' "Random Numbers Stacked Chart" "% of random numbers" random random stacked $((example_priority)) $example_update_every '' '' 'example'
-DIMENSION random1 '' percentage-of-absolute-row 1 1
-DIMENSION random2 '' percentage-of-absolute-row 1 1
-DIMENSION random3 '' percentage-of-absolute-row 1 1
-CHART example.random2 '' "A random number" "random number" random random area $((example_priority + 1)) $example_update_every '' '' 'example'
-DIMENSION random '' absolute 1 1
-EOF
-
- return 0
-}
-
-# _update is called continuously, to collect the values
-example_update() {
- # the first argument to this function is the microseconds since last update
- # pass this parameter to the BEGIN statement (see below).
-
- example_get || return 1
-
- # write the result of the work.
- cat << VALUESEOF
-BEGIN example.random $1
-SET random1 = $example_value1
-SET random2 = $example_value2
-SET random3 = $example_value3
-END
-BEGIN example.random2 $1
-SET random = $example_value4
-END
-VALUESEOF
-
- return 0
-}
diff --git a/collectors/charts.d.plugin/example/example.conf b/collectors/charts.d.plugin/example/example.conf
deleted file mode 100644
index 6232ca584..000000000
--- a/collectors/charts.d.plugin/example/example.conf
+++ /dev/null
@@ -1,21 +0,0 @@
-# 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+
-
-# to enable this chart, you have to set this to 12345
-# (just a demonstration for something that needs to be checked)
-#example_magic_number=12345
-
-# the data collection frequency
-# if unset, will inherit the netdata update frequency
-#example_update_every=
-
-# the charts priority on the dashboard
-#example_priority=150000
-
-# the number of retries to do in case of failure
-# before disabling the module
-#example_retries=10
diff --git a/collectors/charts.d.plugin/libreswan/Makefile.inc b/collectors/charts.d.plugin/libreswan/Makefile.inc
deleted file mode 100644
index af767d0dd..000000000
--- a/collectors/charts.d.plugin/libreswan/Makefile.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-# THIS IS NOT A COMPLETE Makefile
-# IT IS INCLUDED BY ITS PARENT'S Makefile.am
-# IT IS REQUIRED TO REFERENCE ALL FILES RELATIVE TO THE PARENT
-
-# install these files
-dist_charts_DATA += libreswan/libreswan.chart.sh
-dist_chartsconfig_DATA += libreswan/libreswan.conf
-
-# do not install these files, but include them in the distribution
-dist_noinst_DATA += libreswan/README.md libreswan/Makefile.inc
-
diff --git a/collectors/charts.d.plugin/libreswan/README.md b/collectors/charts.d.plugin/libreswan/README.md
deleted file mode 120000
index 1416d9597..000000000
--- a/collectors/charts.d.plugin/libreswan/README.md
+++ /dev/null
@@ -1 +0,0 @@
-integrations/libreswan.md \ No newline at end of file
diff --git a/collectors/charts.d.plugin/libreswan/integrations/libreswan.md b/collectors/charts.d.plugin/libreswan/integrations/libreswan.md
deleted file mode 100644
index bd1eec647..000000000
--- a/collectors/charts.d.plugin/libreswan/integrations/libreswan.md
+++ /dev/null
@@ -1,194 +0,0 @@
-<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/charts.d.plugin/libreswan/README.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/charts.d.plugin/libreswan/metadata.yaml"
-sidebar_label: "Libreswan"
-learn_status: "Published"
-learn_rel_path: "Data Collection/VPNs"
-most_popular: False
-message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
-endmeta-->
-
-# Libreswan
-
-
-<img src="https://netdata.cloud/img/libreswan.png" width="150"/>
-
-
-Plugin: charts.d.plugin
-Module: libreswan
-
-<img src="https://img.shields.io/badge/maintained%20by-Netdata-%2300ab44" />
-
-## Overview
-
-Monitor Libreswan performance for optimal IPsec VPN operations. Improve your VPN operations with Netdata''s real-time metrics and built-in alerts.
-
-The collector uses the `ipsec` command to collect the information it needs.
-
-This collector is supported on all platforms.
-
-This collector supports collecting metrics from multiple instances of this integration, including remote instances.
-
-
-### Default Behavior
-
-#### Auto-Detection
-
-This integration doesn't support auto-detection.
-
-#### Limits
-
-The default configuration for this integration does not impose any limits on data collection.
-
-#### Performance Impact
-
-The default configuration for this integration is not expected to impose a significant performance impact on the system.
-
-
-## Metrics
-
-Metrics grouped by *scope*.
-
-The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.
-
-
-
-### Per IPSEC tunnel
-
-Metrics related to IPSEC tunnels. Each tunnel provides its own set of the following metrics.
-
-This scope has no labels.
-
-Metrics:
-
-| Metric | Dimensions | Unit |
-|:------|:----------|:----|
-| libreswan.net | in, out | kilobits/s |
-| libreswan.uptime | uptime | seconds |
-
-
-
-## Alerts
-
-There are no alerts configured by default for this integration.
-
-
-## Setup
-
-### Prerequisites
-
-#### Install charts.d plugin
-
-If [using our official native DEB/RPM packages](https://github.com/netdata/netdata/blob/master/packaging/installer/UPDATE.md#determine-which-installation-method-you-used), make sure `netdata-plugin-chartsd` is installed.
-
-
-#### Permissions to execute `ipsec`
-
-The plugin executes 2 commands to collect all the information it needs:
-
-```sh
-ipsec whack --status
-ipsec whack --trafficstatus
-```
-
-The first command is used to extract the currently established tunnels, their IDs and their names.
-The second command is used to extract the current uptime and traffic.
-
-Most probably user `netdata` will not be able to query libreswan, so the `ipsec` commands will be denied.
-The plugin attempts to run `ipsec` as `sudo ipsec ...`, to get access to libreswan statistics.
-
-To allow user `netdata` execute `sudo ipsec ...`, create the file `/etc/sudoers.d/netdata` with this content:
-
-```
-netdata ALL = (root) NOPASSWD: /sbin/ipsec whack --status
-netdata ALL = (root) NOPASSWD: /sbin/ipsec whack --trafficstatus
-```
-
-Make sure the path `/sbin/ipsec` matches your setup (execute `which ipsec` to find the right path).
-
-
-
-### Configuration
-
-#### File
-
-The configuration file name for this integration is `charts.d/libreswan.conf`.
-
-
-You can edit the configuration file using the `edit-config` script from the
-Netdata [config directory](https://github.com/netdata/netdata/blob/master/docs/configure/nodes.md#the-netdata-config-directory).
-
-```bash
-cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata
-sudo ./edit-config charts.d/libreswan.conf
-```
-#### Options
-
-The config file is sourced by the charts.d plugin. It's a standard bash file.
-
-The following collapsed table contains all the options that can be configured for the libreswan collector.
-
-
-<details><summary>Config options</summary>
-
-| Name | Description | Default | Required |
-|:----|:-----------|:-------|:--------:|
-| libreswan_update_every | The data collection frequency. If unset, will inherit the netdata update frequency. | 1 | no |
-| libreswan_priority | The charts priority on the dashboard | 90000 | no |
-| libreswan_retries | The number of retries to do in case of failure before disabling the collector. | 10 | no |
-| libreswan_sudo | Whether to run `ipsec` with `sudo` or not. | 1 | no |
-
-</details>
-
-#### Examples
-
-##### Run `ipsec` without sudo
-
-Run the `ipsec` utility without sudo
-
-```yaml
-# the data collection frequency
-# if unset, will inherit the netdata update frequency
-#libreswan_update_every=1
-
-# the charts priority on the dashboard
-#libreswan_priority=90000
-
-# the number of retries to do in case of failure
-# before disabling the module
-#libreswan_retries=10
-
-# set to 1, to run ipsec with sudo (the default)
-# set to 0, to run ipsec without sudo
-libreswan_sudo=0
-
-```
-
-
-## Troubleshooting
-
-### Debug Mode
-
-To troubleshoot issues with the `libreswan` collector, run the `charts.d.plugin` with the debug option enabled. The output
-should give you clues as to why the collector isn't working.
-
-- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on
- your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.
-
- ```bash
- cd /usr/libexec/netdata/plugins.d/
- ```
-
-- Switch to the `netdata` user.
-
- ```bash
- sudo -u netdata -s
- ```
-
-- Run the `charts.d.plugin` to debug the collector:
-
- ```bash
- ./charts.d.plugin debug 1 libreswan
- ```
-
-
diff --git a/collectors/charts.d.plugin/libreswan/libreswan.chart.sh b/collectors/charts.d.plugin/libreswan/libreswan.chart.sh
deleted file mode 100644
index d526f7a91..000000000
--- a/collectors/charts.d.plugin/libreswan/libreswan.chart.sh
+++ /dev/null
@@ -1,187 +0,0 @@
-# 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>
-#
-
-# _update_every is a special variable - it holds the number of seconds
-# between the calls of the _update() function
-libreswan_update_every=1
-
-# the priority is used to sort the charts on the dashboard
-# 1 = the first chart
-libreswan_priority=90000
-
-# set to 1, to run ipsec with sudo
-libreswan_sudo=1
-
-# global variables to store our collected data
-
-# [TUNNELID] = TUNNELNAME
-# here we track the *latest* established tunnels
-# as detected by: ipsec whack --status
-declare -A libreswan_connected_tunnels=()
-
-# [TUNNELID] = VALUE
-# here we track values of all established tunnels (not only the latest)
-# as detected by: ipsec whack --trafficstatus
-declare -A libreswan_traffic_in=()
-declare -A libreswan_traffic_out=()
-declare -A libreswan_established_add_time=()
-
-# [TUNNELNAME] = CHARTID
-# here we remember CHARTIDs of all tunnels
-# we need this to avoid converting tunnel names to chart IDs on every iteration
-declare -A libreswan_tunnel_charts=()
-
-is_able_sudo_ipsec() {
- if ! sudo -n -l "${IPSEC_CMD}" whack --status > /dev/null 2>&1; then
- return 1
- fi
- if ! sudo -n -l "${IPSEC_CMD}" whack --trafficstatus > /dev/null 2>&1; then
- return 1
- fi
- return 0
-}
-
-# run the ipsec command
-libreswan_ipsec() {
- if [ ${libreswan_sudo} -ne 0 ]; then
- sudo -n "${IPSEC_CMD}" "${@}"
- return $?
- else
- "${IPSEC_CMD}" "${@}"
- return $?
- fi
-}
-
-# fetch latest values - fill the arrays
-libreswan_get() {
- # do all the work to collect / calculate the values
- # for each dimension
-
- # empty the variables
- libreswan_traffic_in=()
- libreswan_traffic_out=()
- libreswan_established_add_time=()
- libreswan_connected_tunnels=()
-
- # convert the ipsec command output to a shell script
- # and source it to get the values
- # shellcheck disable=SC1090
- source <(
- {
- libreswan_ipsec whack --status
- libreswan_ipsec whack --trafficstatus
- } | sed -n \
- -e "s|[0-9]\+ #\([0-9]\+\): \"\(.*\)\".*IPsec SA established.*newest IPSEC.*|libreswan_connected_tunnels[\"\1\"]=\"\2\"|p" \
- -e "s|[0-9]\+ #\([0-9]\+\): \"\(.*\)\",\{0,1\}.* add_time=\([0-9]\+\),.* inBytes=\([0-9]\+\),.* outBytes=\([0-9]\+\).*|libreswan_traffic_in[\"\1\"]=\"\4\"; libreswan_traffic_out[\"\1\"]=\"\5\"; libreswan_established_add_time[\"\1\"]=\"\3\";|p"
- ) || return 1
-
- # check we got some data
- [ ${#libreswan_connected_tunnels[@]} -eq 0 ] && return 1
-
- return 0
-}
-
-# _check is called once, to find out if this chart should be enabled or not
-libreswan_check() {
- # this should return:
- # - 0 to enable the chart
- # - 1 to disable the chart
-
- require_cmd ipsec || return 1
-
- # make sure it is libreswan
- # shellcheck disable=SC2143
- if [ -z "$(ipsec --version | grep -i libreswan)" ]; then
- error "ipsec command is not Libreswan. Disabling Libreswan plugin."
- return 1
- fi
-
- if [ ${libreswan_sudo} -ne 0 ] && ! is_able_sudo_ipsec; then
- error "not enough permissions to execute ipsec with sudo. Disabling Libreswan plugin."
- return 1
- fi
-
- # check that we can collect data
- libreswan_get || return 1
-
- return 0
-}
-
-# create the charts for an ipsec tunnel
-libreswan_create_one() {
- local n="${1}" name
-
- name="${libreswan_connected_tunnels[${n}]}"
-
- [ -n "${libreswan_tunnel_charts[${name}]}" ] && return 0
-
- libreswan_tunnel_charts[${name}]="$(fixid "${name}")"
-
- cat << EOF
-CHART libreswan.${libreswan_tunnel_charts[${name}]}_net '${name}_net' "LibreSWAN Tunnel ${name} Traffic" "kilobits/s" "${name}" libreswan.net area $((libreswan_priority)) $libreswan_update_every '' '' 'libreswan'
-DIMENSION in '' incremental 8 1000
-DIMENSION out '' incremental -8 1000
-CHART libreswan.${libreswan_tunnel_charts[${name}]}_uptime '${name}_uptime' "LibreSWAN Tunnel ${name} Uptime" "seconds" "${name}" libreswan.uptime line $((libreswan_priority + 1)) $libreswan_update_every '' '' 'libreswan'
-DIMENSION uptime '' absolute 1 1
-EOF
-
- return 0
-
-}
-
-# _create is called once, to create the charts
-libreswan_create() {
- local n
- for n in "${!libreswan_connected_tunnels[@]}"; do
- libreswan_create_one "${n}"
- done
- return 0
-}
-
-libreswan_now=$(date +%s)
-
-# send the values to netdata for an ipsec tunnel
-libreswan_update_one() {
- local n="${1}" microseconds="${2}" name id uptime
-
- name="${libreswan_connected_tunnels[${n}]}"
- id="${libreswan_tunnel_charts[${name}]}"
-
- [ -z "${id}" ] && libreswan_create_one "${name}"
-
- uptime=$((libreswan_now - libreswan_established_add_time[${n}]))
- [ ${uptime} -lt 0 ] && uptime=0
-
- # write the result of the work.
- cat << VALUESEOF
-BEGIN libreswan.${id}_net ${microseconds}
-SET in = ${libreswan_traffic_in[${n}]}
-SET out = ${libreswan_traffic_out[${n}]}
-END
-BEGIN libreswan.${id}_uptime ${microseconds}
-SET uptime = ${uptime}
-END
-VALUESEOF
-}
-
-# _update is called continuously, to collect the values
-libreswan_update() {
- # the first argument to this function is the microseconds since last update
- # pass this parameter to the BEGIN statement (see below).
-
- libreswan_get || return 1
- libreswan_now=$(date +%s)
-
- local n
- for n in "${!libreswan_connected_tunnels[@]}"; do
- libreswan_update_one "${n}" "${@}"
- done
-
- return 0
-}
diff --git a/collectors/charts.d.plugin/libreswan/libreswan.conf b/collectors/charts.d.plugin/libreswan/libreswan.conf
deleted file mode 100644
index 9b3ee77b7..000000000
--- a/collectors/charts.d.plugin/libreswan/libreswan.conf
+++ /dev/null
@@ -1,29 +0,0 @@
-# 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+
-#
-
-# the data collection frequency
-# if unset, will inherit the netdata update frequency
-#libreswan_update_every=1
-
-# the charts priority on the dashboard
-#libreswan_priority=90000
-
-# the number of retries to do in case of failure
-# before disabling the module
-#libreswan_retries=10
-
-# set to 1, to run ipsec with sudo (the default)
-# set to 0, to run ipsec without sudo
-#libreswan_sudo=1
-
-# TO ALLOW NETDATA RUN ipsec AS ROOT
-# CREATE THE FILE: /etc/sudoers.d/netdata
-# WITH THESE 2 LINES (uncommented of course):
-#
-# netdata ALL = (root) NOPASSWD: /sbin/ipsec whack --status
-# netdata ALL = (root) NOPASSWD: /sbin/ipsec whack --trafficstatus
diff --git a/collectors/charts.d.plugin/libreswan/metadata.yaml b/collectors/charts.d.plugin/libreswan/metadata.yaml
deleted file mode 100644
index 77cb25450..000000000
--- a/collectors/charts.d.plugin/libreswan/metadata.yaml
+++ /dev/null
@@ -1,146 +0,0 @@
-plugin_name: charts.d.plugin
-modules:
- - meta:
- plugin_name: charts.d.plugin
- module_name: libreswan
- monitored_instance:
- name: Libreswan
- link: "https://libreswan.org/"
- categories:
- - data-collection.vpns
- icon_filename: "libreswan.png"
- related_resources:
- integrations:
- list: []
- info_provided_to_referring_integrations:
- description: ""
- keywords:
- - vpn
- - libreswan
- - network
- - ipsec
- most_popular: false
- overview:
- data_collection:
- metrics_description: "Monitor Libreswan performance for optimal IPsec VPN operations. Improve your VPN operations with Netdata''s real-time metrics and built-in alerts."
- method_description: "The collector uses the `ipsec` command to collect the information it needs."
- supported_platforms:
- include: []
- exclude: []
- multi_instance: true
- additional_permissions:
- description: ""
- default_behavior:
- auto_detection:
- description: ""
- limits:
- description: ""
- performance_impact:
- description: ""
- setup:
- prerequisites:
- list:
- - title: "Install charts.d plugin"
- description: |
- If [using our official native DEB/RPM packages](https://github.com/netdata/netdata/blob/master/packaging/installer/UPDATE.md#determine-which-installation-method-you-used), make sure `netdata-plugin-chartsd` is installed.
- - title: "Permissions to execute `ipsec`"
- description: |
- The plugin executes 2 commands to collect all the information it needs:
-
- ```sh
- ipsec whack --status
- ipsec whack --trafficstatus
- ```
-
- The first command is used to extract the currently established tunnels, their IDs and their names.
- The second command is used to extract the current uptime and traffic.
-
- Most probably user `netdata` will not be able to query libreswan, so the `ipsec` commands will be denied.
- The plugin attempts to run `ipsec` as `sudo ipsec ...`, to get access to libreswan statistics.
-
- To allow user `netdata` execute `sudo ipsec ...`, create the file `/etc/sudoers.d/netdata` with this content:
-
- ```
- netdata ALL = (root) NOPASSWD: /sbin/ipsec whack --status
- netdata ALL = (root) NOPASSWD: /sbin/ipsec whack --trafficstatus
- ```
-
- Make sure the path `/sbin/ipsec` matches your setup (execute `which ipsec` to find the right path).
- configuration:
- file:
- name: charts.d/libreswan.conf
- options:
- description: |
- The config file is sourced by the charts.d plugin. It's a standard bash file.
-
- The following collapsed table contains all the options that can be configured for the libreswan collector.
- folding:
- title: "Config options"
- enabled: true
- list:
- - name: libreswan_update_every
- description: The data collection frequency. If unset, will inherit the netdata update frequency.
- default_value: 1
- required: false
- - name: libreswan_priority
- description: The charts priority on the dashboard
- default_value: 90000
- required: false
- - name: libreswan_retries
- description: The number of retries to do in case of failure before disabling the collector.
- default_value: 10
- required: false
- - name: libreswan_sudo
- description: Whether to run `ipsec` with `sudo` or not.
- default_value: 1
- required: false
- examples:
- folding:
- enabled: false
- title: "Config"
- list:
- - name: Run `ipsec` without sudo
- description: Run the `ipsec` utility without sudo
- config: |
- # the data collection frequency
- # if unset, will inherit the netdata update frequency
- #libreswan_update_every=1
-
- # the charts priority on the dashboard
- #libreswan_priority=90000
-
- # the number of retries to do in case of failure
- # before disabling the module
- #libreswan_retries=10
-
- # set to 1, to run ipsec with sudo (the default)
- # set to 0, to run ipsec without sudo
- libreswan_sudo=0
- troubleshooting:
- problems:
- list: []
- alerts: []
- metrics:
- folding:
- title: Metrics
- enabled: false
- description: ""
- availability: []
- scopes:
- - name: IPSEC tunnel
- description: "Metrics related to IPSEC tunnels. Each tunnel provides its own set of the following metrics."
- labels: []
- metrics:
- - name: libreswan.net
- description: LibreSWAN Tunnel ${name} Traffic
- unit: "kilobits/s"
- chart_type: area
- dimensions:
- - name: in
- - name: out
- - name: libreswan.uptime
- description: LibreSWAN Tunnel ${name} Uptime
- unit: "seconds"
- chart_type: line
- dimensions:
- - name: uptime
diff --git a/collectors/charts.d.plugin/loopsleepms.sh.inc b/collectors/charts.d.plugin/loopsleepms.sh.inc
deleted file mode 100644
index 5608b8d8f..000000000
--- a/collectors/charts.d.plugin/loopsleepms.sh.inc
+++ /dev/null
@@ -1,227 +0,0 @@
-# no need for shebang - this file is included from other scripts
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-LOOPSLEEP_DATE="$(which date 2>/dev/null || command -v date 2>/dev/null)"
-if [ -z "$LOOPSLEEP_DATE" ]; then
- echo >&2 "$0: ERROR: Cannot find the command 'date' in the system path."
- exit 1
-fi
-
-# -----------------------------------------------------------------------------
-# use the date command as a high resolution timer
-
-# macOS 'date' doesn't support '%N' precision
-# echo $(/bin/date +"%N") is "N"
-if [ "$($LOOPSLEEP_DATE +"%N")" = "N" ]; then
- LOOPSLEEP_DATE_FORMAT="%s * 1000"
-else
- LOOPSLEEP_DATE_FORMAT="%s * 1000 + 10#%-N / 1000000"
-fi
-
-now_ms=
-LOOPSLEEPMS_HIGHRES=1
-test "$($LOOPSLEEP_DATE +%N)" = "%N" && LOOPSLEEPMS_HIGHRES=0
-test -z "$($LOOPSLEEP_DATE +%N)" && LOOPSLEEPMS_HIGHRES=0
-current_time_ms_from_date() {
- if [ $LOOPSLEEPMS_HIGHRES -eq 0 ]; then
- now_ms="$($LOOPSLEEP_DATE +'%s')000"
- else
- now_ms="$(($($LOOPSLEEP_DATE +"$LOOPSLEEP_DATE_FORMAT")))"
- fi
-}
-
-# -----------------------------------------------------------------------------
-# use /proc/uptime as a high resolution timer
-
-current_time_ms_from_date
-current_time_ms_from_uptime_started="${now_ms}"
-current_time_ms_from_uptime_last="${now_ms}"
-current_time_ms_from_uptime_first=0
-current_time_ms_from_uptime() {
- local up rest arr=() n
-
- read up rest </proc/uptime
- if [ $? -ne 0 ]; then
- echo >&2 "$0: Cannot read /proc/uptime - falling back to current_time_ms_from_date()."
- current_time_ms="current_time_ms_from_date"
- current_time_ms_from_date
- current_time_ms_accuracy=1
- return
- fi
-
- arr=(${up//./ })
-
- if [ ${#arr[1]} -lt 1 ]; then
- n="${arr[0]}000"
- elif [ ${#arr[1]} -lt 2 ]; then
- n="${arr[0]}${arr[1]}00"
- elif [ ${#arr[1]} -lt 3 ]; then
- n="${arr[0]}${arr[1]}0"
- else
- n="${arr[0]}${arr[1]}"
- fi
-
- now_ms=$((current_time_ms_from_uptime_started - current_time_ms_from_uptime_first + n))
-
- if [ "${now_ms}" -lt "${current_time_ms_from_uptime_last}" ]; then
- echo >&2 "$0: Cannot use current_time_ms_from_uptime() - new time ${now_ms} is older than the last ${current_time_ms_from_uptime_last} - falling back to current_time_ms_from_date()."
- current_time_ms="current_time_ms_from_date"
- current_time_ms_from_date
- current_time_ms_accuracy=1
- fi
-
- current_time_ms_from_uptime_last="${now_ms}"
-}
-current_time_ms_from_uptime
-current_time_ms_from_uptime_first="$((now_ms - current_time_ms_from_uptime_started))"
-current_time_ms_from_uptime_last="${current_time_ms_from_uptime_first}"
-current_time_ms="current_time_ms_from_uptime"
-current_time_ms_accuracy=10
-if [ "${current_time_ms_from_uptime_first}" -eq 0 ]; then
- echo >&2 "$0: Invalid setup for current_time_ms_from_uptime() - falling back to current_time_ms_from_date()."
- current_time_ms="current_time_ms_from_date"
- current_time_ms_accuracy=1
-fi
-
-# -----------------------------------------------------------------------------
-# use read with timeout for sleep
-
-mysleep=""
-
-mysleep_fifo="${NETDATA_CACHE_DIR-/tmp}/.netdata_bash_sleep_timer_fifo"
-[ -f "${mysleep_fifo}" ] && rm "${mysleep_fifo}"
-[ ! -p "${mysleep_fifo}" ] && mkfifo "${mysleep_fifo}"
-[ -p "${mysleep_fifo}" ] && mysleep="mysleep_read"
-
-mysleep_read() {
- read -t "${1}" <>"${mysleep_fifo}"
- ret=$?
- if [ $ret -le 128 ]; then
- echo >&2 "$0: Cannot use read for sleeping (return code ${ret})."
- mysleep="sleep"
- ${mysleep} "${1}"
- fi
-}
-
-# -----------------------------------------------------------------------------
-# use bash loadable module for sleep
-
-mysleep_builtin() {
- builtin sleep "${1}"
- ret=$?
- if [ $ret -ne 0 ]; then
- echo >&2 "$0: Cannot use builtin sleep for sleeping (return code ${ret})."
- mysleep="sleep"
- ${mysleep} "${1}"
- fi
-}
-
-if [ -z "${mysleep}" -a "$((BASH_VERSINFO[0] + 0))" -ge 3 -a "${NETDATA_BASH_LOADABLES}" != "DISABLE" ]; then
- # enable modules only for bash version 3+
-
- for bash_modules_path in ${BASH_LOADABLES_PATH//:/ } "$(pkg-config bash --variable=loadablesdir 2>/dev/null)" "/usr/lib/bash" "/lib/bash" "/lib64/bash" "/usr/local/lib/bash" "/usr/local/lib64/bash"; do
- [ -z "${bash_modules_path}" -o ! -d "${bash_modules_path}" ] && continue
-
- # check for sleep
- for bash_module_sleep in "sleep" "sleep.so"; do
- if [ -f "${bash_modules_path}/${bash_module_sleep}" ]; then
- if enable -f "${bash_modules_path}/${bash_module_sleep}" sleep 2>/dev/null; then
- mysleep="mysleep_builtin"
- # echo >&2 "$0: Using bash loadable ${bash_modules_path}/${bash_module_sleep} for sleep"
- break
- fi
- fi
-
- done
-
- [ ! -z "${mysleep}" ] && break
- done
-fi
-
-# -----------------------------------------------------------------------------
-# fallback to external sleep
-
-[ -z "${mysleep}" ] && mysleep="sleep"
-
-# -----------------------------------------------------------------------------
-# this function is used to sleep a fraction of a second
-# it calculates the difference between every time is called
-# and tries to align the sleep time to give you exactly the
-# loop you need.
-
-LOOPSLEEPMS_LASTRUN=0
-LOOPSLEEPMS_NEXTRUN=0
-LOOPSLEEPMS_LASTSLEEP=0
-LOOPSLEEPMS_LASTWORK=0
-
-loopsleepms() {
- local tellwork=0 t="${1}" div s m now mstosleep
-
- if [ "${t}" = "tellwork" ]; then
- tellwork=1
- shift
- t="${1}"
- fi
-
- # $t = the time in seconds to wait
-
- # if high resolution is not supported
- # just sleep the time requested, in seconds
- if [ ${LOOPSLEEPMS_HIGHRES} -eq 0 ]; then
- sleep ${t}
- return
- fi
-
- # get the current time, in ms in ${now_ms}
- ${current_time_ms}
-
- # calculate ms since last run
- [ ${LOOPSLEEPMS_LASTRUN} -gt 0 ] &&
- LOOPSLEEPMS_LASTWORK=$((now_ms - LOOPSLEEPMS_LASTRUN - LOOPSLEEPMS_LASTSLEEP + current_time_ms_accuracy))
- # echo "# last loop's work took $LOOPSLEEPMS_LASTWORK ms"
-
- # remember this run
- LOOPSLEEPMS_LASTRUN=${now_ms}
-
- # calculate the next run
- LOOPSLEEPMS_NEXTRUN=$(((now_ms - (now_ms % (t * 1000))) + (t * 1000)))
-
- # calculate ms to sleep
- mstosleep=$((LOOPSLEEPMS_NEXTRUN - now_ms + current_time_ms_accuracy))
- # echo "# mstosleep is $mstosleep ms"
-
- # if we are too slow, sleep some time
- test ${mstosleep} -lt 200 && mstosleep=200
-
- s=$((mstosleep / 1000))
- m=$((mstosleep - (s * 1000)))
- [ "${m}" -lt 100 ] && m="0${m}"
- [ "${m}" -lt 10 ] && m="0${m}"
-
- test $tellwork -eq 1 && echo >&2 " >>> PERFORMANCE >>> WORK TOOK ${LOOPSLEEPMS_LASTWORK} ms ( $((LOOPSLEEPMS_LASTWORK * 100 / 1000)).$((LOOPSLEEPMS_LASTWORK % 10))% cpu ) >>> SLEEPING ${mstosleep} ms"
-
- # echo "# sleeping ${s}.${m}"
- # echo
- ${mysleep} ${s}.${m}
-
- # keep the values we need
- # for our next run
- LOOPSLEEPMS_LASTSLEEP=$mstosleep
-}
-
-# test it
-#while [ 1 ]
-#do
-# r=$(( (RANDOM * 2000 / 32767) ))
-# s=$((r / 1000))
-# m=$((r - (s * 1000)))
-# [ "${m}" -lt 100 ] && m="0${m}"
-# [ "${m}" -lt 10 ] && m="0${m}"
-# echo "${r} = ${s}.${m}"
-#
-# # the work
-# ${mysleep} ${s}.${m}
-#
-# # the alignment loop
-# loopsleepms tellwork 1
-#done
diff --git a/collectors/charts.d.plugin/opensips/Makefile.inc b/collectors/charts.d.plugin/opensips/Makefile.inc
deleted file mode 100644
index a7b5d3a92..000000000
--- a/collectors/charts.d.plugin/opensips/Makefile.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-# THIS IS NOT A COMPLETE Makefile
-# IT IS INCLUDED BY ITS PARENT'S Makefile.am
-# IT IS REQUIRED TO REFERENCE ALL FILES RELATIVE TO THE PARENT
-
-# install these files
-dist_charts_DATA += opensips/opensips.chart.sh
-dist_chartsconfig_DATA += opensips/opensips.conf
-
-# do not install these files, but include them in the distribution
-dist_noinst_DATA += opensips/README.md opensips/Makefile.inc
-
diff --git a/collectors/charts.d.plugin/opensips/README.md b/collectors/charts.d.plugin/opensips/README.md
deleted file mode 120000
index bb85ba6d0..000000000
--- a/collectors/charts.d.plugin/opensips/README.md
+++ /dev/null
@@ -1 +0,0 @@
-integrations/opensips.md \ No newline at end of file
diff --git a/collectors/charts.d.plugin/opensips/integrations/opensips.md b/collectors/charts.d.plugin/opensips/integrations/opensips.md
deleted file mode 100644
index 8c88dba0b..000000000
--- a/collectors/charts.d.plugin/opensips/integrations/opensips.md
+++ /dev/null
@@ -1,192 +0,0 @@
-<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/charts.d.plugin/opensips/README.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/charts.d.plugin/opensips/metadata.yaml"
-sidebar_label: "OpenSIPS"
-learn_status: "Published"
-learn_rel_path: "Data Collection/Telephony Servers"
-most_popular: False
-message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
-endmeta-->
-
-# OpenSIPS
-
-
-<img src="https://netdata.cloud/img/opensips.png" width="150"/>
-
-
-Plugin: charts.d.plugin
-Module: opensips
-
-<img src="https://img.shields.io/badge/maintained%20by-Netdata-%2300ab44" />
-
-## Overview
-
-Examine OpenSIPS metrics for insights into SIP server operations. Study call rates, error rates, and response times for reliable voice over IP services.
-
-The collector uses the `opensipsctl` command line utility to gather OpenSIPS metrics.
-
-This collector is supported on all platforms.
-
-This collector supports collecting metrics from multiple instances of this integration, including remote instances.
-
-
-### Default Behavior
-
-#### Auto-Detection
-
-The collector will attempt to call `opensipsctl` along with a default number of parameters, even without any configuration.
-
-#### Limits
-
-The default configuration for this integration does not impose any limits on data collection.
-
-#### Performance Impact
-
-The default configuration for this integration is not expected to impose a significant performance impact on the system.
-
-
-## Metrics
-
-Metrics grouped by *scope*.
-
-The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.
-
-
-
-### Per OpenSIPS instance
-
-These metrics refer to the entire monitored application.
-
-This scope has no labels.
-
-Metrics:
-
-| Metric | Dimensions | Unit |
-|:------|:----------|:----|
-| opensips.dialogs_active | active, early | dialogs |
-| opensips.users | registered, location, contacts, expires | users |
-| opensips.registrar | accepted, rejected | registrations/s |
-| opensips.transactions | UAS, UAC | transactions/s |
-| opensips.core_rcv | requests, replies | queries/s |
-| opensips.core_fwd | requests, replies | queries/s |
-| opensips.core_drop | requests, replies | queries/s |
-| opensips.core_err | requests, replies | queries/s |
-| opensips.core_bad | bad_URIs_rcvd, unsupported_methods, bad_msg_hdr | queries/s |
-| opensips.tm_replies | received, relayed, local | replies/s |
-| opensips.transactions_status | 2xx, 3xx, 4xx, 5xx, 6xx | transactions/s |
-| opensips.transactions_inuse | inuse | transactions |
-| opensips.sl_replies | 1xx, 2xx, 3xx, 4xx, 5xx, 6xx, sent, error, ACKed | replies/s |
-| opensips.dialogs | processed, expire, failed | dialogs/s |
-| opensips.net_waiting | UDP, TCP | kilobytes |
-| opensips.uri_checks | positive, negative | checks / sec |
-| opensips.traces | requests, replies | traces / sec |
-| opensips.shmem | total, used, real_used, max_used, free | kilobytes |
-| opensips.shmem_fragment | fragments | fragments |
-
-
-
-## Alerts
-
-There are no alerts configured by default for this integration.
-
-
-## Setup
-
-### Prerequisites
-
-#### Install charts.d plugin
-
-If [using our official native DEB/RPM packages](https://github.com/netdata/netdata/blob/master/packaging/installer/UPDATE.md#determine-which-installation-method-you-used), make sure `netdata-plugin-chartsd` is installed.
-
-
-#### Required software
-
-The collector requires the `opensipsctl` to be installed.
-
-
-### Configuration
-
-#### File
-
-The configuration file name for this integration is `charts.d/opensips.conf`.
-
-
-You can edit the configuration file using the `edit-config` script from the
-Netdata [config directory](https://github.com/netdata/netdata/blob/master/docs/configure/nodes.md#the-netdata-config-directory).
-
-```bash
-cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata
-sudo ./edit-config charts.d/opensips.conf
-```
-#### Options
-
-The config file is sourced by the charts.d plugin. It's a standard bash file.
-
-The following collapsed table contains all the options that can be configured for the opensips collector.
-
-
-<details><summary>Config options</summary>
-
-| Name | Description | Default | Required |
-|:----|:-----------|:-------|:--------:|
-| opensips_opts | Specify parameters to the `opensipsctl` command. If the default value fails to get global status, set here whatever options are needed to connect to the opensips server. | fifo get_statistics all | no |
-| opensips_cmd | If `opensipsctl` is not in $PATH, specify it's full path here. | | no |
-| opensips_timeout | How long to wait for `opensipsctl` to respond. | 2 | no |
-| opensips_update_every | The data collection frequency. If unset, will inherit the netdata update frequency. | 5 | no |
-| opensips_priority | The charts priority on the dashboard. | 80000 | no |
-| opensips_retries | The number of retries to do in case of failure before disabling the collector. | 10 | no |
-
-</details>
-
-#### Examples
-
-##### Custom `opensipsctl` command
-
-Set a custom path to the `opensipsctl` command
-
-```yaml
-#opensips_opts="fifo get_statistics all"
-opensips_cmd=/opt/opensips/bin/opensipsctl
-#opensips_timeout=2
-
-# the data collection frequency
-# if unset, will inherit the netdata update frequency
-#opensips_update_every=5
-
-# the charts priority on the dashboard
-#opensips_priority=80000
-
-# the number of retries to do in case of failure
-# before disabling the module
-#opensips_retries=10
-
-```
-
-
-## Troubleshooting
-
-### Debug Mode
-
-To troubleshoot issues with the `opensips` collector, run the `charts.d.plugin` with the debug option enabled. The output
-should give you clues as to why the collector isn't working.
-
-- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on
- your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.
-
- ```bash
- cd /usr/libexec/netdata/plugins.d/
- ```
-
-- Switch to the `netdata` user.
-
- ```bash
- sudo -u netdata -s
- ```
-
-- Run the `charts.d.plugin` to debug the collector:
-
- ```bash
- ./charts.d.plugin debug 1 opensips
- ```
-
-
diff --git a/collectors/charts.d.plugin/opensips/metadata.yaml b/collectors/charts.d.plugin/opensips/metadata.yaml
deleted file mode 100644
index 356de5615..000000000
--- a/collectors/charts.d.plugin/opensips/metadata.yaml
+++ /dev/null
@@ -1,270 +0,0 @@
-plugin_name: charts.d.plugin
-modules:
- - meta:
- plugin_name: charts.d.plugin
- module_name: opensips
- monitored_instance:
- name: OpenSIPS
- link: "https://opensips.org/"
- categories:
- - data-collection.telephony-servers
- icon_filename: "opensips.png"
- related_resources:
- integrations:
- list: []
- info_provided_to_referring_integrations:
- description: ""
- keywords:
- - opensips
- - sip
- - voice
- - video
- - stream
- most_popular: false
- overview:
- data_collection:
- metrics_description: "Examine OpenSIPS metrics for insights into SIP server operations. Study call rates, error rates, and response times for reliable voice over IP services."
- method_description: "The collector uses the `opensipsctl` command line utility to gather OpenSIPS metrics."
- supported_platforms:
- include: []
- exclude: []
- multi_instance: true
- additional_permissions:
- description: ""
- default_behavior:
- auto_detection:
- description: "The collector will attempt to call `opensipsctl` along with a default number of parameters, even without any configuration."
- limits:
- description: ""
- performance_impact:
- description: ""
- setup:
- prerequisites:
- list:
- - title: "Install charts.d plugin"
- description: |
- If [using our official native DEB/RPM packages](https://github.com/netdata/netdata/blob/master/packaging/installer/UPDATE.md#determine-which-installation-method-you-used), make sure `netdata-plugin-chartsd` is installed.
- - title: "Required software"
- description: "The collector requires the `opensipsctl` to be installed."
- configuration:
- file:
- name: charts.d/opensips.conf
- options:
- description: |
- The config file is sourced by the charts.d plugin. It's a standard bash file.
-
- The following collapsed table contains all the options that can be configured for the opensips collector.
- folding:
- title: "Config options"
- enabled: true
- list:
- - name: opensips_opts
- description: Specify parameters to the `opensipsctl` command. If the default value fails to get global status, set here whatever options are needed to connect to the opensips server.
- default_value: "fifo get_statistics all"
- required: false
- - name: opensips_cmd
- description: If `opensipsctl` is not in $PATH, specify it's full path here.
- default_value: ""
- required: false
- - name: opensips_timeout
- description: How long to wait for `opensipsctl` to respond.
- default_value: 2
- required: false
- - name: opensips_update_every
- description: The data collection frequency. If unset, will inherit the netdata update frequency.
- default_value: 5
- required: false
- - name: opensips_priority
- description: The charts priority on the dashboard.
- default_value: 80000
- required: false
- - name: opensips_retries
- description: The number of retries to do in case of failure before disabling the collector.
- default_value: 10
- required: false
- examples:
- folding:
- enabled: false
- title: "Config"
- list:
- - name: Custom `opensipsctl` command
- description: Set a custom path to the `opensipsctl` command
- config: |
- #opensips_opts="fifo get_statistics all"
- opensips_cmd=/opt/opensips/bin/opensipsctl
- #opensips_timeout=2
-
- # the data collection frequency
- # if unset, will inherit the netdata update frequency
- #opensips_update_every=5
-
- # the charts priority on the dashboard
- #opensips_priority=80000
-
- # the number of retries to do in case of failure
- # before disabling the module
- #opensips_retries=10
- troubleshooting:
- problems:
- list: []
- alerts: []
- metrics:
- folding:
- title: Metrics
- enabled: false
- description: ""
- availability: []
- scopes:
- - name: global
- description: "These metrics refer to the entire monitored application."
- labels: []
- metrics:
- - name: opensips.dialogs_active
- description: OpenSIPS Active Dialogs
- unit: "dialogs"
- chart_type: area
- dimensions:
- - name: active
- - name: early
- - name: opensips.users
- description: OpenSIPS Users
- unit: "users"
- chart_type: line
- dimensions:
- - name: registered
- - name: location
- - name: contacts
- - name: expires
- - name: opensips.registrar
- description: OpenSIPS Registrar
- unit: "registrations/s"
- chart_type: line
- dimensions:
- - name: accepted
- - name: rejected
- - name: opensips.transactions
- description: OpenSIPS Transactions
- unit: "transactions/s"
- chart_type: line
- dimensions:
- - name: UAS
- - name: UAC
- - name: opensips.core_rcv
- description: OpenSIPS Core Receives
- unit: "queries/s"
- chart_type: line
- dimensions:
- - name: requests
- - name: replies
- - name: opensips.core_fwd
- description: OpenSIPS Core Forwards
- unit: "queries/s"
- chart_type: line
- dimensions:
- - name: requests
- - name: replies
- - name: opensips.core_drop
- description: OpenSIPS Core Drops
- unit: "queries/s"
- chart_type: line
- dimensions:
- - name: requests
- - name: replies
- - name: opensips.core_err
- description: OpenSIPS Core Errors
- unit: "queries/s"
- chart_type: line
- dimensions:
- - name: requests
- - name: replies
- - name: opensips.core_bad
- description: OpenSIPS Core Bad
- unit: "queries/s"
- chart_type: line
- dimensions:
- - name: bad_URIs_rcvd
- - name: unsupported_methods
- - name: bad_msg_hdr
- - name: opensips.tm_replies
- description: OpenSIPS TM Replies
- unit: "replies/s"
- chart_type: line
- dimensions:
- - name: received
- - name: relayed
- - name: local
- - name: opensips.transactions_status
- description: OpenSIPS Transactions Status
- unit: "transactions/s"
- chart_type: line
- dimensions:
- - name: 2xx
- - name: 3xx
- - name: 4xx
- - name: 5xx
- - name: 6xx
- - name: opensips.transactions_inuse
- description: OpenSIPS InUse Transactions
- unit: "transactions"
- chart_type: line
- dimensions:
- - name: inuse
- - name: opensips.sl_replies
- description: OpenSIPS SL Replies
- unit: "replies/s"
- chart_type: line
- dimensions:
- - name: 1xx
- - name: 2xx
- - name: 3xx
- - name: 4xx
- - name: 5xx
- - name: 6xx
- - name: sent
- - name: error
- - name: ACKed
- - name: opensips.dialogs
- description: OpenSIPS Dialogs
- unit: "dialogs/s"
- chart_type: line
- dimensions:
- - name: processed
- - name: expire
- - name: failed
- - name: opensips.net_waiting
- description: OpenSIPS Network Waiting
- unit: "kilobytes"
- chart_type: line
- dimensions:
- - name: UDP
- - name: TCP
- - name: opensips.uri_checks
- description: OpenSIPS URI Checks
- unit: "checks / sec"
- chart_type: line
- dimensions:
- - name: positive
- - name: negative
- - name: opensips.traces
- description: OpenSIPS Traces
- unit: "traces / sec"
- chart_type: line
- dimensions:
- - name: requests
- - name: replies
- - name: opensips.shmem
- description: OpenSIPS Shared Memory
- unit: "kilobytes"
- chart_type: line
- dimensions:
- - name: total
- - name: used
- - name: real_used
- - name: max_used
- - name: free
- - name: opensips.shmem_fragment
- description: OpenSIPS Shared Memory Fragmentation
- unit: "fragments"
- chart_type: line
- dimensions:
- - name: fragments
diff --git a/collectors/charts.d.plugin/opensips/opensips.chart.sh b/collectors/charts.d.plugin/opensips/opensips.chart.sh
deleted file mode 100644
index 02401fd59..000000000
--- a/collectors/charts.d.plugin/opensips/opensips.chart.sh
+++ /dev/null
@@ -1,325 +0,0 @@
-# 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>
-#
-
-opensips_opts="fifo get_statistics all"
-opensips_cmd=
-opensips_update_every=5
-opensips_timeout=2
-opensips_priority=80000
-
-opensips_get_stats() {
- run -t $opensips_timeout "$opensips_cmd" $opensips_opts |
- grep "^\(core\|dialog\|net\|registrar\|shmem\|siptrace\|sl\|tm\|uri\|usrloc\):[a-zA-Z0-9_-]\+[[:space:]]*[=:]\+[[:space:]]*[0-9]\+[[:space:]]*$" |
- sed \
- -e "s|[[:space:]]*[=:]\+[[:space:]]*\([0-9]\+\)[[:space:]]*$|=\1|g" \
- -e "s|[[:space:]:-]\+|_|g" \
- -e "s|^|opensips_|g"
-
- local ret=$?
- [ $ret -ne 0 ] && echo "opensips_command_failed=1"
- return $ret
-}
-
-opensips_check() {
- # if the user did not provide an opensips_cmd
- # try to find it in the system
- if [ -z "$opensips_cmd" ]; then
- require_cmd opensipsctl || return 1
- opensips_cmd="$OPENSIPSCTL_CMD"
- fi
-
- # check once if the command works
- local x
- x="$(opensips_get_stats | grep "^opensips_core_")"
- # shellcheck disable=SC2181
- if [ ! $? -eq 0 ] || [ -z "$x" ]; then
- error "cannot get global status. Please set opensips_opts='options' whatever needed to get connected to opensips server, in $confd/opensips.conf"
- return 1
- fi
-
- return 0
-}
-
-opensips_create() {
- # create the charts
- cat << EOF
-CHART opensips.dialogs_active '' "OpenSIPS Active Dialogs" "dialogs" dialogs '' area $((opensips_priority + 1)) $opensips_update_every '' '' 'opensips'
-DIMENSION dialog_active_dialogs active absolute 1 1
-DIMENSION dialog_early_dialogs early absolute -1 1
-
-CHART opensips.users '' "OpenSIPS Users" "users" users '' line $((opensips_priority + 2)) $opensips_update_every '' '' 'opensips'
-DIMENSION usrloc_registered_users registered absolute 1 1
-DIMENSION usrloc_location_users location absolute 1 1
-DIMENSION usrloc_location_contacts contacts absolute 1 1
-DIMENSION usrloc_location_expires expires incremental -1 1
-
-CHART opensips.registrar '' "OpenSIPS Registrar" "registrations/s" registrar '' line $((opensips_priority + 3)) $opensips_update_every '' '' 'opensips'
-DIMENSION registrar_accepted_regs accepted incremental 1 1
-DIMENSION registrar_rejected_regs rejected incremental -1 1
-
-CHART opensips.transactions '' "OpenSIPS Transactions" "transactions/s" transactions '' line $((opensips_priority + 4)) $opensips_update_every '' '' 'opensips'
-DIMENSION tm_UAS_transactions UAS incremental 1 1
-DIMENSION tm_UAC_transactions UAC incremental -1 1
-
-CHART opensips.core_rcv '' "OpenSIPS Core Receives" "queries/s" core '' line $((opensips_priority + 5)) $opensips_update_every '' '' 'opensips'
-DIMENSION core_rcv_requests requests incremental 1 1
-DIMENSION core_rcv_replies replies incremental -1 1
-
-CHART opensips.core_fwd '' "OpenSIPS Core Forwards" "queries/s" core '' line $((opensips_priority + 6)) $opensips_update_every '' '' 'opensips'
-DIMENSION core_fwd_requests requests incremental 1 1
-DIMENSION core_fwd_replies replies incremental -1 1
-
-CHART opensips.core_drop '' "OpenSIPS Core Drops" "queries/s" core '' line $((opensips_priority + 7)) $opensips_update_every '' '' 'opensips'
-DIMENSION core_drop_requests requests incremental 1 1
-DIMENSION core_drop_replies replies incremental -1 1
-
-CHART opensips.core_err '' "OpenSIPS Core Errors" "queries/s" core '' line $((opensips_priority + 8)) $opensips_update_every '' '' 'opensips'
-DIMENSION core_err_requests requests incremental 1 1
-DIMENSION core_err_replies replies incremental -1 1
-
-CHART opensips.core_bad '' "OpenSIPS Core Bad" "queries/s" core '' line $((opensips_priority + 9)) $opensips_update_every '' '' 'opensips'
-DIMENSION core_bad_URIs_rcvd bad_URIs_rcvd incremental 1 1
-DIMENSION core_unsupported_methods unsupported_methods incremental 1 1
-DIMENSION core_bad_msg_hdr bad_msg_hdr incremental 1 1
-
-CHART opensips.tm_replies '' "OpenSIPS TM Replies" "replies/s" transactions '' line $((opensips_priority + 10)) $opensips_update_every '' '' 'opensips'
-DIMENSION tm_received_replies received incremental 1 1
-DIMENSION tm_relayed_replies relayed incremental 1 1
-DIMENSION tm_local_replies local incremental 1 1
-
-CHART opensips.transactions_status '' "OpenSIPS Transactions Status" "transactions/s" transactions '' line $((opensips_priority + 11)) $opensips_update_every '' '' 'opensips'
-DIMENSION tm_2xx_transactions 2xx incremental 1 1
-DIMENSION tm_3xx_transactions 3xx incremental 1 1
-DIMENSION tm_4xx_transactions 4xx incremental 1 1
-DIMENSION tm_5xx_transactions 5xx incremental 1 1
-DIMENSION tm_6xx_transactions 6xx incremental 1 1
-
-CHART opensips.transactions_inuse '' "OpenSIPS InUse Transactions" "transactions" transactions '' line $((opensips_priority + 12)) $opensips_update_every '' '' 'opensips'
-DIMENSION tm_inuse_transactions inuse absolute 1 1
-
-CHART opensips.sl_replies '' "OpenSIPS SL Replies" "replies/s" core '' line $((opensips_priority + 13)) $opensips_update_every '' '' 'opensips'
-DIMENSION sl_1xx_replies 1xx incremental 1 1
-DIMENSION sl_2xx_replies 2xx incremental 1 1
-DIMENSION sl_3xx_replies 3xx incremental 1 1
-DIMENSION sl_4xx_replies 4xx incremental 1 1
-DIMENSION sl_5xx_replies 5xx incremental 1 1
-DIMENSION sl_6xx_replies 6xx incremental 1 1
-DIMENSION sl_sent_replies sent incremental 1 1
-DIMENSION sl_sent_err_replies error incremental 1 1
-DIMENSION sl_received_ACKs ACKed incremental 1 1
-
-CHART opensips.dialogs '' "OpenSIPS Dialogs" "dialogs/s" dialogs '' line $((opensips_priority + 14)) $opensips_update_every '' '' 'opensips'
-DIMENSION dialog_processed_dialogs processed incremental 1 1
-DIMENSION dialog_expired_dialogs expired incremental 1 1
-DIMENSION dialog_failed_dialogs failed incremental -1 1
-
-CHART opensips.net_waiting '' "OpenSIPS Network Waiting" "kilobytes" net '' line $((opensips_priority + 15)) $opensips_update_every '' '' 'opensips'
-DIMENSION net_waiting_udp UDP absolute 1 1024
-DIMENSION net_waiting_tcp TCP absolute 1 1024
-
-CHART opensips.uri_checks '' "OpenSIPS URI Checks" "checks / sec" uri '' line $((opensips_priority + 16)) $opensips_update_every '' '' 'opensips'
-DIMENSION uri_positive_checks positive incremental 1 1
-DIMENSION uri_negative_checks negative incremental -1 1
-
-CHART opensips.traces '' "OpenSIPS Traces" "traces / sec" traces '' line $((opensips_priority + 17)) $opensips_update_every '' '' 'opensips'
-DIMENSION siptrace_traced_requests requests incremental 1 1
-DIMENSION siptrace_traced_replies replies incremental -1 1
-
-CHART opensips.shmem '' "OpenSIPS Shared Memory" "kilobytes" mem '' line $((opensips_priority + 18)) $opensips_update_every '' '' 'opensips'
-DIMENSION shmem_total_size total absolute 1 1024
-DIMENSION shmem_used_size used absolute 1 1024
-DIMENSION shmem_real_used_size real_used absolute 1 1024
-DIMENSION shmem_max_used_size max_used absolute 1 1024
-DIMENSION shmem_free_size free absolute 1 1024
-
-CHART opensips.shmem_fragments '' "OpenSIPS Shared Memory Fragmentation" "fragments" mem '' line $((opensips_priority + 19)) $opensips_update_every '' '' 'opensips'
-DIMENSION shmem_fragments fragments absolute 1 1
-EOF
-
- return 0
-}
-
-opensips_update() {
- # the first argument to this function is the microseconds since last update
- # pass this parameter to the BEGIN statement (see below).
-
- # do all the work to collect / calculate the values
- # for each dimension
-
- # 1. get the counters page from opensips
- # 2. sed to remove spaces; replace . with _; remove spaces around =; prepend each line with: local opensips_
- # 3. egrep lines starting with:
- # local opensips_client_http_ then one or more of these a-z 0-9 _ then = and one of more of 0-9
- # local opensips_server_all_ then one or more of these a-z 0-9 _ then = and one of more of 0-9
- # 4. then execute this as a script with the eval
- # be very careful with eval:
- # prepare the script and always grep at the end the lines that are useful, so that
- # even if something goes wrong, no other code can be executed
-
- unset \
- opensips_dialog_active_dialogs \
- opensips_dialog_early_dialogs \
- opensips_usrloc_registered_users \
- opensips_usrloc_location_users \
- opensips_usrloc_location_contacts \
- opensips_usrloc_location_expires \
- opensips_registrar_accepted_regs \
- opensips_registrar_rejected_regs \
- opensips_tm_UAS_transactions \
- opensips_tm_UAC_transactions \
- opensips_core_rcv_requests \
- opensips_core_rcv_replies \
- opensips_core_fwd_requests \
- opensips_core_fwd_replies \
- opensips_core_drop_requests \
- opensips_core_drop_replies \
- opensips_core_err_requests \
- opensips_core_err_replies \
- opensips_core_bad_URIs_rcvd \
- opensips_core_unsupported_methods \
- opensips_core_bad_msg_hdr \
- opensips_tm_received_replies \
- opensips_tm_relayed_replies \
- opensips_tm_local_replies \
- opensips_tm_2xx_transactions \
- opensips_tm_3xx_transactions \
- opensips_tm_4xx_transactions \
- opensips_tm_5xx_transactions \
- opensips_tm_6xx_transactions \
- opensips_tm_inuse_transactions \
- opensips_sl_1xx_replies \
- opensips_sl_2xx_replies \
- opensips_sl_3xx_replies \
- opensips_sl_4xx_replies \
- opensips_sl_5xx_replies \
- opensips_sl_6xx_replies \
- opensips_sl_sent_replies \
- opensips_sl_sent_err_replies \
- opensips_sl_received_ACKs \
- opensips_dialog_processed_dialogs \
- opensips_dialog_expired_dialogs \
- opensips_dialog_failed_dialogs \
- opensips_net_waiting_udp \
- opensips_net_waiting_tcp \
- opensips_uri_positive_checks \
- opensips_uri_negative_checks \
- opensips_siptrace_traced_requests \
- opensips_siptrace_traced_replies \
- opensips_shmem_total_size \
- opensips_shmem_used_size \
- opensips_shmem_real_used_size \
- opensips_shmem_max_used_size \
- opensips_shmem_free_size \
- opensips_shmem_fragments
-
- opensips_command_failed=0
- eval "local $(opensips_get_stats)"
- # shellcheck disable=SC2181
- [ $? -ne 0 ] && return 1
-
- [ $opensips_command_failed -eq 1 ] && error "failed to get values, disabling." && return 1
-
- # write the result of the work.
- cat << VALUESEOF
-BEGIN opensips.dialogs_active $1
-SET dialog_active_dialogs = $opensips_dialog_active_dialogs
-SET dialog_early_dialogs = $opensips_dialog_early_dialogs
-END
-BEGIN opensips.users $1
-SET usrloc_registered_users = $opensips_usrloc_registered_users
-SET usrloc_location_users = $opensips_usrloc_location_users
-SET usrloc_location_contacts = $opensips_usrloc_location_contacts
-SET usrloc_location_expires = $opensips_usrloc_location_expires
-END
-BEGIN opensips.registrar $1
-SET registrar_accepted_regs = $opensips_registrar_accepted_regs
-SET registrar_rejected_regs = $opensips_registrar_rejected_regs
-END
-BEGIN opensips.transactions $1
-SET tm_UAS_transactions = $opensips_tm_UAS_transactions
-SET tm_UAC_transactions = $opensips_tm_UAC_transactions
-END
-BEGIN opensips.core_rcv $1
-SET core_rcv_requests = $opensips_core_rcv_requests
-SET core_rcv_replies = $opensips_core_rcv_replies
-END
-BEGIN opensips.core_fwd $1
-SET core_fwd_requests = $opensips_core_fwd_requests
-SET core_fwd_replies = $opensips_core_fwd_replies
-END
-BEGIN opensips.core_drop $1
-SET core_drop_requests = $opensips_core_drop_requests
-SET core_drop_replies = $opensips_core_drop_replies
-END
-BEGIN opensips.core_err $1
-SET core_err_requests = $opensips_core_err_requests
-SET core_err_replies = $opensips_core_err_replies
-END
-BEGIN opensips.core_bad $1
-SET core_bad_URIs_rcvd = $opensips_core_bad_URIs_rcvd
-SET core_unsupported_methods = $opensips_core_unsupported_methods
-SET core_bad_msg_hdr = $opensips_core_bad_msg_hdr
-END
-BEGIN opensips.tm_replies $1
-SET tm_received_replies = $opensips_tm_received_replies
-SET tm_relayed_replies = $opensips_tm_relayed_replies
-SET tm_local_replies = $opensips_tm_local_replies
-END
-BEGIN opensips.transactions_status $1
-SET tm_2xx_transactions = $opensips_tm_2xx_transactions
-SET tm_3xx_transactions = $opensips_tm_3xx_transactions
-SET tm_4xx_transactions = $opensips_tm_4xx_transactions
-SET tm_5xx_transactions = $opensips_tm_5xx_transactions
-SET tm_6xx_transactions = $opensips_tm_6xx_transactions
-END
-BEGIN opensips.transactions_inuse $1
-SET tm_inuse_transactions = $opensips_tm_inuse_transactions
-END
-BEGIN opensips.sl_replies $1
-SET sl_1xx_replies = $opensips_sl_1xx_replies
-SET sl_2xx_replies = $opensips_sl_2xx_replies
-SET sl_3xx_replies = $opensips_sl_3xx_replies
-SET sl_4xx_replies = $opensips_sl_4xx_replies
-SET sl_5xx_replies = $opensips_sl_5xx_replies
-SET sl_6xx_replies = $opensips_sl_6xx_replies
-SET sl_sent_replies = $opensips_sl_sent_replies
-SET sl_sent_err_replies = $opensips_sl_sent_err_replies
-SET sl_received_ACKs = $opensips_sl_received_ACKs
-END
-BEGIN opensips.dialogs $1
-SET dialog_processed_dialogs = $opensips_dialog_processed_dialogs
-SET dialog_expired_dialogs = $opensips_dialog_expired_dialogs
-SET dialog_failed_dialogs = $opensips_dialog_failed_dialogs
-END
-BEGIN opensips.net_waiting $1
-SET net_waiting_udp = $opensips_net_waiting_udp
-SET net_waiting_tcp = $opensips_net_waiting_tcp
-END
-BEGIN opensips.uri_checks $1
-SET uri_positive_checks = $opensips_uri_positive_checks
-SET uri_negative_checks = $opensips_uri_negative_checks
-END
-BEGIN opensips.traces $1
-SET siptrace_traced_requests = $opensips_siptrace_traced_requests
-SET siptrace_traced_replies = $opensips_siptrace_traced_replies
-END
-BEGIN opensips.shmem $1
-SET shmem_total_size = $opensips_shmem_total_size
-SET shmem_used_size = $opensips_shmem_used_size
-SET shmem_real_used_size = $opensips_shmem_real_used_size
-SET shmem_max_used_size = $opensips_shmem_max_used_size
-SET shmem_free_size = $opensips_shmem_free_size
-END
-BEGIN opensips.shmem_fragments $1
-SET shmem_fragments = $opensips_shmem_fragments
-END
-VALUESEOF
-
- return 0
-}
diff --git a/collectors/charts.d.plugin/opensips/opensips.conf b/collectors/charts.d.plugin/opensips/opensips.conf
deleted file mode 100644
index e25111dce..000000000
--- a/collectors/charts.d.plugin/opensips/opensips.conf
+++ /dev/null
@@ -1,21 +0,0 @@
-# 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+
-
-#opensips_opts="fifo get_statistics all"
-#opensips_cmd=
-#opensips_timeout=2
-
-# the data collection frequency
-# if unset, will inherit the netdata update frequency
-#opensips_update_every=5
-
-# the charts priority on the dashboard
-#opensips_priority=80000
-
-# the number of retries to do in case of failure
-# before disabling the module
-#opensips_retries=10
diff --git a/collectors/charts.d.plugin/sensors/Makefile.inc b/collectors/charts.d.plugin/sensors/Makefile.inc
deleted file mode 100644
index f466a1b62..000000000
--- a/collectors/charts.d.plugin/sensors/Makefile.inc
+++ /dev/null
@@ -1,13 +0,0 @@
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-# THIS IS NOT A COMPLETE Makefile
-# IT IS INCLUDED BY ITS PARENT'S Makefile.am
-# IT IS REQUIRED TO REFERENCE ALL FILES RELATIVE TO THE PARENT
-
-# install these files
-dist_charts_DATA += sensors/sensors.chart.sh
-dist_chartsconfig_DATA += sensors/sensors.conf
-
-# do not install these files, but include them in the distribution
-dist_noinst_DATA += sensors/README.md sensors/Makefile.inc
-
diff --git a/collectors/charts.d.plugin/sensors/README.md b/collectors/charts.d.plugin/sensors/README.md
deleted file mode 120000
index 7e5a416c4..000000000
--- a/collectors/charts.d.plugin/sensors/README.md
+++ /dev/null
@@ -1 +0,0 @@
-integrations/linux_sensors_sysfs.md \ No newline at end of file
diff --git a/collectors/charts.d.plugin/sensors/integrations/linux_sensors_sysfs.md b/collectors/charts.d.plugin/sensors/integrations/linux_sensors_sysfs.md
deleted file mode 100644
index 130352f61..000000000
--- a/collectors/charts.d.plugin/sensors/integrations/linux_sensors_sysfs.md
+++ /dev/null
@@ -1,201 +0,0 @@
-<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/collectors/charts.d.plugin/sensors/README.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/collectors/charts.d.plugin/sensors/metadata.yaml"
-sidebar_label: "Linux Sensors (sysfs)"
-learn_status: "Published"
-learn_rel_path: "Data Collection/Hardware Devices and Sensors"
-most_popular: False
-message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
-endmeta-->
-
-# Linux Sensors (sysfs)
-
-
-<img src="https://netdata.cloud/img/microchip.svg" width="150"/>
-
-
-Plugin: charts.d.plugin
-Module: sensors
-
-<img src="https://img.shields.io/badge/maintained%20by-Netdata-%2300ab44" />
-
-## Overview
-
-Use this collector when `lm-sensors` doesn't work on your device (e.g. for RPi temperatures).
-For all other cases use the [Python collector](https://github.com/netdata/netdata/blob/master/collectors/python.d.plugin/sensors), which supports multiple jobs, is more efficient and performs calculations on top of the kernel provided values."
-
-
-It will provide charts for all configured system sensors, by reading sensors directly from the kernel.
-The values graphed are the raw hardware values of the sensors.
-
-
-This collector is only supported on the following platforms:
-
-- Linux
-
-This collector supports collecting metrics from multiple instances of this integration, including remote instances.
-
-
-### Default Behavior
-
-#### Auto-Detection
-
-By default, the collector will try to read entries under `/sys/devices`
-
-#### Limits
-
-The default configuration for this integration does not impose any limits on data collection.
-
-#### Performance Impact
-
-The default configuration for this integration is not expected to impose a significant performance impact on the system.
-
-
-## Metrics
-
-Metrics grouped by *scope*.
-
-The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.
-
-
-
-### Per sensor chip
-
-Metrics related to sensor chips. Each chip provides its own set of the following metrics.
-
-This scope has no labels.
-
-Metrics:
-
-| Metric | Dimensions | Unit |
-|:------|:----------|:----|
-| sensors.temp | {filename} | Celsius |
-| sensors.volt | {filename} | Volts |
-| sensors.curr | {filename} | Ampere |
-| sensors.power | {filename} | Watt |
-| sensors.fans | {filename} | Rotations / Minute |
-| sensors.energy | {filename} | Joule |
-| sensors.humidity | {filename} | Percent |
-
-
-
-## Alerts
-
-There are no alerts configured by default for this integration.
-
-
-## Setup
-
-### Prerequisites
-
-#### Install charts.d plugin
-
-If [using our official native DEB/RPM packages](https://github.com/netdata/netdata/blob/master/packaging/installer/UPDATE.md#determine-which-installation-method-you-used), make sure `netdata-plugin-chartsd` is installed.
-
-
-#### Enable the sensors collector
-
-The `sensors` collector is disabled by default. To enable it, use `edit-config` from the Netdata [config directory](https://github.com/netdata/netdata/blob/master/docs/configure/nodes.md), which is typically at `/etc/netdata`, to edit the `charts.d.conf` file.
-
-```bash
-cd /etc/netdata # Replace this path with your Netdata config directory, if different
-sudo ./edit-config charts.d.conf
-```
-
-Change the value of the `sensors` setting to `force` and uncomment the line. Save the file and restart the Netdata Agent with `sudo systemctl restart netdata`, or the [appropriate method](https://github.com/netdata/netdata/blob/master/docs/configure/start-stop-restart.md) for your system.
-
-
-
-### Configuration
-
-#### File
-
-The configuration file name for this integration is `charts.d/sensors.conf`.
-
-
-You can edit the configuration file using the `edit-config` script from the
-Netdata [config directory](https://github.com/netdata/netdata/blob/master/docs/configure/nodes.md#the-netdata-config-directory).
-
-```bash
-cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata
-sudo ./edit-config charts.d/sensors.conf
-```
-#### Options
-
-The config file is sourced by the charts.d plugin. It's a standard bash file.
-
-The following collapsed table contains all the options that can be configured for the sensors collector.
-
-
-<details><summary>Config options</summary>
-
-| Name | Description | Default | Required |
-|:----|:-----------|:-------|:--------:|
-| sensors_sys_dir | The directory the kernel exposes sensor data. | /sys/devices | no |
-| sensors_sys_depth | How deep in the tree to check for sensor data. | 10 | no |
-| sensors_source_update | If set to 1, the script will overwrite internal script functions with code generated ones. | 1 | no |
-| sensors_update_every | The data collection frequency. If unset, will inherit the netdata update frequency. | 1 | no |
-| sensors_priority | The charts priority on the dashboard. | 90000 | no |
-| sensors_retries | The number of retries to do in case of failure before disabling the collector. | 10 | no |
-
-</details>
-
-#### Examples
-
-##### Set sensors path depth
-
-Set a different sensors path depth
-
-```yaml
-# the directory the kernel keeps sensor data
-#sensors_sys_dir="/sys/devices"
-
-# how deep in the tree to check for sensor data
-sensors_sys_depth=5
-
-# if set to 1, the script will overwrite internal
-# script functions with code generated ones
-# leave to 1, is faster
-#sensors_source_update=1
-
-# the data collection frequency
-# if unset, will inherit the netdata update frequency
-#sensors_update_every=
-
-# the charts priority on the dashboard
-#sensors_priority=90000
-
-# the number of retries to do in case of failure
-# before disabling the module
-#sensors_retries=10
-
-```
-
-
-## Troubleshooting
-
-### Debug Mode
-
-To troubleshoot issues with the `sensors` collector, run the `charts.d.plugin` with the debug option enabled. The output
-should give you clues as to why the collector isn't working.
-
-- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on
- your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.
-
- ```bash
- cd /usr/libexec/netdata/plugins.d/
- ```
-
-- Switch to the `netdata` user.
-
- ```bash
- sudo -u netdata -s
- ```
-
-- Run the `charts.d.plugin` to debug the collector:
-
- ```bash
- ./charts.d.plugin debug 1 sensors
- ```
-
-
diff --git a/collectors/charts.d.plugin/sensors/metadata.yaml b/collectors/charts.d.plugin/sensors/metadata.yaml
deleted file mode 100644
index 47f6f4042..000000000
--- a/collectors/charts.d.plugin/sensors/metadata.yaml
+++ /dev/null
@@ -1,182 +0,0 @@
-plugin_name: charts.d.plugin
-modules:
- - meta:
- plugin_name: charts.d.plugin
- module_name: sensors
- monitored_instance:
- name: Linux Sensors (sysfs)
- link: "https://www.kernel.org/doc/Documentation/hwmon/sysfs-interface"
- categories:
- - data-collection.hardware-devices-and-sensors
- icon_filename: "microchip.svg"
- related_resources:
- integrations:
- list: []
- info_provided_to_referring_integrations:
- description: ""
- keywords:
- - sensors
- - sysfs
- - hwmon
- - rpi
- - raspberry pi
- most_popular: false
- overview:
- data_collection:
- metrics_description: |
- Use this collector when `lm-sensors` doesn't work on your device (e.g. for RPi temperatures).
- For all other cases use the [Python collector](https://github.com/netdata/netdata/blob/master/collectors/python.d.plugin/sensors), which supports multiple jobs, is more efficient and performs calculations on top of the kernel provided values."
- method_description: |
- It will provide charts for all configured system sensors, by reading sensors directly from the kernel.
- The values graphed are the raw hardware values of the sensors.
- supported_platforms:
- include: [Linux]
- exclude: []
- multi_instance: true
- additional_permissions:
- description: ""
- default_behavior:
- auto_detection:
- description: "By default, the collector will try to read entries under `/sys/devices`"
- limits:
- description: ""
- performance_impact:
- description: ""
- setup:
- prerequisites:
- list:
- - title: "Install charts.d plugin"
- description: |
- If [using our official native DEB/RPM packages](https://github.com/netdata/netdata/blob/master/packaging/installer/UPDATE.md#determine-which-installation-method-you-used), make sure `netdata-plugin-chartsd` is installed.
- - title: "Enable the sensors collector"
- description: |
- The `sensors` collector is disabled by default. To enable it, use `edit-config` from the Netdata [config directory](https://github.com/netdata/netdata/blob/master/docs/configure/nodes.md), which is typically at `/etc/netdata`, to edit the `charts.d.conf` file.
-
- ```bash
- cd /etc/netdata # Replace this path with your Netdata config directory, if different
- sudo ./edit-config charts.d.conf
- ```
-
- Change the value of the `sensors` setting to `force` and uncomment the line. Save the file and restart the Netdata Agent with `sudo systemctl restart netdata`, or the [appropriate method](https://github.com/netdata/netdata/blob/master/docs/configure/start-stop-restart.md) for your system.
- configuration:
- file:
- name: charts.d/sensors.conf
- options:
- description: |
- The config file is sourced by the charts.d plugin. It's a standard bash file.
-
- The following collapsed table contains all the options that can be configured for the sensors collector.
- folding:
- title: "Config options"
- enabled: true
- list:
- - name: sensors_sys_dir
- description: The directory the kernel exposes sensor data.
- default_value: "/sys/devices"
- required: false
- - name: sensors_sys_depth
- description: How deep in the tree to check for sensor data.
- default_value: 10
- required: false
- - name: sensors_source_update
- description: If set to 1, the script will overwrite internal script functions with code generated ones.
- default_value: 1
- required: false
- - name: sensors_update_every
- description: The data collection frequency. If unset, will inherit the netdata update frequency.
- default_value: 1
- required: false
- - name: sensors_priority
- description: The charts priority on the dashboard.
- default_value: 90000
- required: false
- - name: sensors_retries
- description: The number of retries to do in case of failure before disabling the collector.
- default_value: 10
- required: false
- examples:
- folding:
- enabled: false
- title: "Config"
- list:
- - name: Set sensors path depth
- description: Set a different sensors path depth
- config: |
- # the directory the kernel keeps sensor data
- #sensors_sys_dir="/sys/devices"
-
- # how deep in the tree to check for sensor data
- sensors_sys_depth=5
-
- # if set to 1, the script will overwrite internal
- # script functions with code generated ones
- # leave to 1, is faster
- #sensors_source_update=1
-
- # the data collection frequency
- # if unset, will inherit the netdata update frequency
- #sensors_update_every=
-
- # the charts priority on the dashboard
- #sensors_priority=90000
-
- # the number of retries to do in case of failure
- # before disabling the module
- #sensors_retries=10
- troubleshooting:
- problems:
- list: []
- alerts: []
- metrics:
- folding:
- title: Metrics
- enabled: false
- description: ""
- availability: []
- scopes:
- - name: sensor chip
- description: "Metrics related to sensor chips. Each chip provides its own set of the following metrics."
- labels: []
- metrics:
- - name: sensors.temp
- description: Temperature
- unit: "Celsius"
- chart_type: line
- dimensions:
- - name: "{filename}"
- - name: sensors.volt
- description: Voltage
- unit: "Volts"
- chart_type: line
- dimensions:
- - name: "{filename}"
- - name: sensors.curr
- description: Current
- unit: "Ampere"
- chart_type: line
- dimensions:
- - name: "{filename}"
- - name: sensors.power
- description: Power
- unit: "Watt"
- chart_type: line
- dimensions:
- - name: "{filename}"
- - name: sensors.fans
- description: Fans Speed
- unit: "Rotations / Minute"
- chart_type: line
- dimensions:
- - name: "{filename}"
- - name: sensors.energy
- description: Energy
- unit: "Joule"
- chart_type: area
- dimensions:
- - name: "{filename}"
- - name: sensors.humidity
- description: Humidity
- unit: "Percent"
- chart_type: line
- dimensions:
- - name: "{filename}"
diff --git a/collectors/charts.d.plugin/sensors/sensors.chart.sh b/collectors/charts.d.plugin/sensors/sensors.chart.sh
deleted file mode 100644
index 9576e2ab2..000000000
--- a/collectors/charts.d.plugin/sensors/sensors.chart.sh
+++ /dev/null
@@ -1,250 +0,0 @@
-# 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>
-#
-
-# sensors docs
-# https://www.kernel.org/doc/Documentation/hwmon/sysfs-interface
-
-# if this chart is called X.chart.sh, then all functions and global variables
-# must start with X_
-
-# the directory the kernel keeps sensor data
-sensors_sys_dir="${NETDATA_HOST_PREFIX}/sys/devices"
-
-# how deep in the tree to check for sensor data
-sensors_sys_depth=10
-
-# if set to 1, the script will overwrite internal
-# script functions with code generated ones
-# leave to 1, is faster
-sensors_source_update=1
-
-# how frequently to collect sensor data
-# the default is to collect it at every iteration of charts.d
-sensors_update_every=
-
-sensors_priority=90000
-
-declare -A sensors_excluded=()
-
-sensors_find_all_files() {
- find "$1" -maxdepth $sensors_sys_depth -name \*_input -o -name temp 2>/dev/null
-}
-
-sensors_find_all_dirs() {
- # shellcheck disable=SC2162
- sensors_find_all_files "$1" | while read; do
- dirname "$REPLY"
- done | sort -u
-}
-
-# _check is called once, to find out if this chart should be enabled or not
-sensors_check() {
-
- # this should return:
- # - 0 to enable the chart
- # - 1 to disable the chart
-
- [ -z "$(sensors_find_all_files "$sensors_sys_dir")" ] && error "no sensors found in '$sensors_sys_dir'." && return 1
- return 0
-}
-
-sensors_check_files() {
- # we only need sensors that report a non-zero value
- # also remove not needed sensors
-
- local f v excluded
- for f in "$@"; do
- [ ! -f "$f" ] && continue
- for ex in "${sensors_excluded[@]}"; do
- [[ $f =~ .*$ex$ ]] && excluded='1' && break
- done
-
- [ "$excluded" != "1" ] && v="$(cat "$f")" || v=0
- v=$((v + 1 - 1))
- [ $v -ne 0 ] && echo "$f" && continue
- excluded=
-
- error "$f gives zero values"
- done
-}
-
-sensors_check_temp_type() {
- # valid temp types are 1 to 6
- # disabled sensors have the value 0
-
- local f t v
- for f in "$@"; do
- # shellcheck disable=SC2001
- t=$(echo "$f" | sed "s|_input$|_type|g")
- [ "$f" = "$t" ] && echo "$f" && continue
- [ ! -f "$t" ] && echo "$f" && continue
-
- v="$(cat "$t")"
- v=$((v + 1 - 1))
- [ $v -ne 0 ] && echo "$f" && continue
-
- error "$f is disabled"
- done
-}
-
-# _create is called once, to create the charts
-sensors_create() {
- local path dir name x file lfile labelname device subsystem id type mode files multiplier divisor
-
- # we create a script with the source of the
- # sensors_update() function
- # - the highest speed we can achieve -
- [ $sensors_source_update -eq 1 ] && echo >"$TMP_DIR/sensors.sh" "sensors_update() {"
-
- for path in $(sensors_find_all_dirs "$sensors_sys_dir" | sort -u); do
- dir=$(basename "$path")
- device=
- subsystem=
- id=
- type=
- name=
-
- [ -h "$path/device" ] && device=$(readlink -f "$path/device")
- [ ! -z "$device" ] && device=$(basename "$device")
- [ -z "$device" ] && device="$dir"
-
- [ -h "$path/subsystem" ] && subsystem=$(readlink -f "$path/subsystem")
- [ ! -z "$subsystem" ] && subsystem=$(basename "$subsystem")
- [ -z "$subsystem" ] && subsystem="$dir"
-
- [ -f "$path/name" ] && name=$(cat "$path/name")
- [ -z "$name" ] && name="$dir"
-
- [ -f "$path/type" ] && type=$(cat "$path/type")
- [ -z "$type" ] && type="$dir"
-
- id="$(fixid "$device.$subsystem.$dir")"
-
- debug "path='$path', dir='$dir', device='$device', subsystem='$subsystem', id='$id', name='$name'"
-
- for mode in temperature voltage fans power current energy humidity; do
- files=
- multiplier=1
- divisor=1
- algorithm="absolute"
-
- case $mode in
- temperature)
- files="$(
- ls "$path"/temp*_input 2>/dev/null
- ls "$path/temp" 2>/dev/null
- )"
- files="$(sensors_check_files "$files")"
- files="$(sensors_check_temp_type "$files")"
- [ -z "$files" ] && continue
- echo "CHART 'sensors.temp_${id}_${name}' '' 'Temperature' 'Celsius' 'temperature' 'sensors.temp' line $((sensors_priority + 1)) $sensors_update_every '' '' 'sensors'"
- echo >>"$TMP_DIR/sensors.sh" "echo \"BEGIN 'sensors.temp_${id}_${name}' \$1\""
- divisor=1000
- ;;
-
- voltage)
- files="$(ls "$path"/in*_input 2>/dev/null)"
- files="$(sensors_check_files "$files")"
- [ -z "$files" ] && continue
- echo "CHART 'sensors.volt_${id}_${name}' '' 'Voltage' 'Volts' 'voltage' 'sensors.volt' line $((sensors_priority + 2)) $sensors_update_every '' '' 'sensors'"
- echo >>"$TMP_DIR/sensors.sh" "echo \"BEGIN 'sensors.volt_${id}_${name}' \$1\""
- divisor=1000
- ;;
-
- current)
- files="$(ls "$path"/curr*_input 2>/dev/null)"
- files="$(sensors_check_files "$files")"
- [ -z "$files" ] && continue
- echo "CHART 'sensors.curr_${id}_${name}' '' 'Current' 'Ampere' 'current' 'sensors.curr' line $((sensors_priority + 3)) $sensors_update_every '' '' 'sensors'"
- echo >>"$TMP_DIR/sensors.sh" "echo \"BEGIN 'sensors.curr_${id}_${name}' \$1\""
- divisor=1000
- ;;
-
- power)
- files="$(ls "$path"/power*_input 2>/dev/null)"
- files="$(sensors_check_files "$files")"
- [ -z "$files" ] && continue
- echo "CHART 'sensors.power_${id}_${name}' '' 'Power' 'Watt' 'power' 'sensors.power' line $((sensors_priority + 4)) $sensors_update_every '' '' 'sensors'"
- echo >>"$TMP_DIR/sensors.sh" "echo \"BEGIN 'sensors.power_${id}_${name}' \$1\""
- divisor=1000000
- ;;
-
- fans)
- files="$(ls "$path"/fan*_input 2>/dev/null)"
- files="$(sensors_check_files "$files")"
- [ -z "$files" ] && continue
- echo "CHART 'sensors.fan_${id}_${name}' '' 'Fans Speed' 'Rotations / Minute' 'fans' 'sensors.fans' line $((sensors_priority + 5)) $sensors_update_every '' '' 'sensors'"
- echo >>"$TMP_DIR/sensors.sh" "echo \"BEGIN 'sensors.fan_${id}_${name}' \$1\""
- ;;
-
- energy)
- files="$(ls "$path"/energy*_input 2>/dev/null)"
- files="$(sensors_check_files "$files")"
- [ -z "$files" ] && continue
- echo "CHART 'sensors.energy_${id}_${name}' '' 'Energy' 'Joule' 'energy' 'sensors.energy' area $((sensors_priority + 6)) $sensors_update_every '' '' 'sensors'"
- echo >>"$TMP_DIR/sensors.sh" "echo \"BEGIN 'sensors.energy_${id}_${name}' \$1\""
- algorithm="incremental"
- divisor=1000000
- ;;
-
- humidity)
- files="$(ls "$path"/humidity*_input 2>/dev/null)"
- files="$(sensors_check_files "$files")"
- [ -z "$files" ] && continue
- echo "CHART 'sensors.humidity_${id}_${name}' '' 'Humidity' 'Percent' 'humidity' 'sensors.humidity' line $((sensors_priority + 7)) $sensors_update_every '' '' 'sensors'"
- echo >>"$TMP_DIR/sensors.sh" "echo \"BEGIN 'sensors.humidity_${id}_${name}' \$1\""
- divisor=1000
- ;;
-
- *)
- continue
- ;;
- esac
-
- for x in $files; do
- file="$x"
- fid="$(fixid "$file")"
- lfile="$(basename "$file" | sed "s|_input$|_label|g")"
- labelname="$(basename "$file" | sed "s|_input$||g")"
-
- if [ ! "$path/$lfile" = "$file" ] && [ -f "$path/$lfile" ]; then
- labelname="$(cat "$path/$lfile")"
- fi
-
- echo "DIMENSION $fid '$labelname' $algorithm $multiplier $divisor"
- echo >>"$TMP_DIR/sensors.sh" "echo \"SET $fid = \"\$(< $file )"
- done
-
- echo >>"$TMP_DIR/sensors.sh" "echo END"
- done
- done
-
- [ $sensors_source_update -eq 1 ] && echo >>"$TMP_DIR/sensors.sh" "}"
-
- # ok, load the function sensors_update() we created
- # shellcheck source=/dev/null
- [ $sensors_source_update -eq 1 ] && . "$TMP_DIR/sensors.sh"
-
- return 0
-}
-
-# _update is called continuously, to collect the values
-sensors_update() {
- # the first argument to this function is the microseconds since last update
- # pass this parameter to the BEGIN statement (see below).
-
- # do all the work to collect / calculate the values
- # for each dimension
- # remember: KEEP IT SIMPLE AND SHORT
-
- # shellcheck source=/dev/null
- [ $sensors_source_update -eq 0 ] && . "$TMP_DIR/sensors.sh" "$1"
-
- return 0
-}
diff --git a/collectors/charts.d.plugin/sensors/sensors.conf b/collectors/charts.d.plugin/sensors/sensors.conf
deleted file mode 100644
index bcb28807d..000000000
--- a/collectors/charts.d.plugin/sensors/sensors.conf
+++ /dev/null
@@ -1,32 +0,0 @@
-# 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+
-
-# THIS PLUGIN IS DEPRECATED
-# USE THE PYTHON.D ONE
-
-# the directory the kernel keeps sensor data
-#sensors_sys_dir="/sys/devices"
-
-# how deep in the tree to check for sensor data
-#sensors_sys_depth=10
-
-# if set to 1, the script will overwrite internal
-# script functions with code generated ones
-# leave to 1, is faster
-#sensors_source_update=1
-
-# the data collection frequency
-# if unset, will inherit the netdata update frequency
-#sensors_update_every=
-
-# the charts priority on the dashboard
-#sensors_priority=90000
-
-# the number of retries to do in case of failure
-# before disabling the module
-#sensors_retries=10
-