Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/nextcloudpi.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/bin/ncp
diff options
context:
space:
mode:
authorTobias K <6317548+theCalcaholic@users.noreply.github.com>2022-04-08 10:39:39 +0300
committerTobias K <6317548+theCalcaholic@users.noreply.github.com>2022-04-08 15:52:36 +0300
commitfa0fbffb047cc0721b8296274ec86e745ba13ff3 (patch)
treecd2d124243485aabba2cc2ee2794c9ceb0e4c708 /bin/ncp
parent0e694329d2a2e60527675a6fdd36e0ac3b3992f7 (diff)
metrics.sh: Add docker support
Signed-off-by: Tobias K <6317548+theCalcaholic@users.noreply.github.com>
Diffstat (limited to 'bin/ncp')
-rw-r--r--bin/ncp/SYSTEM/metrics.sh231
1 files changed, 181 insertions, 50 deletions
diff --git a/bin/ncp/SYSTEM/metrics.sh b/bin/ncp/SYSTEM/metrics.sh
index aa3bddfc..7674d01f 100644
--- a/bin/ncp/SYSTEM/metrics.sh
+++ b/bin/ncp/SYSTEM/metrics.sh
@@ -1,7 +1,15 @@
#!/bin/bash
+is_supported() {
+ [[ "$DOCKERBUILD" == 1 ]] && [[ "$(lsb_release -r)" =~ .*10 ]] && return 1
+ return 0
+}
+
is_active() {
- systemctl is-active -q prometheus-node-exporter || return 1
+ is_supported || return 1
+
+ metrics_services status > /dev/null 2>&1 || return 1
+ # systemctl is-active -q prometheus-node-exporter || return 1
return 0
}
@@ -13,28 +21,153 @@ tmpl_metrics_enabled() {
)
}
+reload_metrics_config() {
+ is_supported || return 0
+
+ install_template ncp-metrics.cfg.sh "/usr/local/etc/ncp-metrics.cfg" || {
+ echo "ERROR while generating ncp-metrics.conf!"
+ return 1
+ }
+ service ncp-metrics-exporter status > /dev/null && {
+ service ncp-metrics-exporter restart
+ service ncp-metrics-exporter status > /dev/null 2>&1 || {
+ rc=$?
+ echo -e "WARNING: An error ncp-metrics exporter failed to start (exit-code $rc)!"
+ return 1
+ }
+ }
+}
+
+metrics_services() {
+ cmd="${1?}"
+
+ if [[ "$cmd" =~ (start|stop|restart|reload|status) ]]
+ then
+ rc1=0
+ rc2=0
+ service prometheus-node-exporter "$cmd" || rc1=$?
+ service ncp-metrics-exporter "$cmd" || rc2=$?
+ [[ $rc1 > $rc2 ]] && return $rc1
+ return $rc2
+ fi
+
+ if ! [[ "$cmd" =~ (en|dis)able ]]
+ then
+ echo -e "ERROR: Invalid command: metrics_services ${cmd}!"
+ exit 1
+ fi
+
+ if [[ "$DOCKERBUILD" == 1 ]]
+ then
+ update-rc.d ncp-metrics "$cmd"
+ return $?
+ else
+ systemctl "$cmd" prometheus-node-exporter ncp-metrics-exporter
+ return $?
+ fi
+}
+
install() {
# Subshell to return on failure instead of exiting (due to set -e)
(
set -e
+
+ is_supported || {
+ echo -e "Metrics app is not supported in debian 10 docker containers. Installation will be skipped."
+ return 0
+ }
+
cat > /etc/default/prometheus-node-exporter <<'EOF'
ARGS="--collector.filesystem.ignored-mount-points=\"^/(dev|proc|run|sys|mnt|var/log|var/lib/docker)($|/)\""
EOF
- apt_install prometheus-node-exporter
- # TODO: Docker support?
- systemctl disable prometheus-node-exporter
- service prometheus-node-exporter stop
-
- [[ "$(uname -m)" =~ ("arm"|"aarch").* ]] && arch="armv7" || arch="i686"
- [[ "$arch" == "i686" ]] && apt_install lib32gcc-s1 libc6-i386
+ arch="$(uname -m)"
+ [[ "$arch" =~ ("arm"|"aarch").* ]] && bin_arch="armv7" || bin_arch="i686"
+ [[ "$(lsb_release -r)" =~ .*10 ]] && gcclib="lib32gcc1" || gcclib="lib32gcc-s1"
+ [[ "$arch" == "x86_64" ]] && apt_install "$gcclib" libc6-i386
wget -O "/usr/local/bin/ncp-metrics-exporter" \
- "https://github.com/theCalcaholic/ncp-metrics-exporter/releases/download/v1.0.0/${arch}-ncp-metrics-exporter"
+ "https://github.com/theCalcaholic/ncp-metrics-exporter/releases/download/v1.0.0/${bin_arch}-ncp-metrics-exporter"
chmod +x /usr/local/bin/ncp-metrics-exporter
- cat <<EOF > /etc/systemd/system/ncp-metrics-exporter.service
+
+ # Apply fix to init-d-script (https://salsa.debian.org/debian/sysvinit/-/commit/aa40516c)
+ # Otherwise the init.d scripts of prometheus-node-exporter won't work
+ # shellcheck disable=SC2016
+ sed -i 's|status_of_proc "$DAEMON" "$NAME" ${PIDFILE:="-p ${PIDFILE}"}|status_of_proc ${PIDFILE:+-p "$PIDFILE"} "$DAEMON" "$NAME"|' /lib/init/init-d-script
+
+ if [[ "$DOCKERBUILD" == 1 ]]
+ then
+ # during installation of prometheus-node-exporter `useradd` is used to create a user.
+ # However, `useradd` doesn't the symlink in /etc/shadow, so we need to temporarily move it back
+ trap "mv /etc/shadow /data/etc/shadow; ln -s /data/etc/shadow /etc/shadow" EXIT
+ rm /etc/shadow
+ cp /data/etc/shadow /etc/shadow
+ apt_install prometheus-node-exporter prometheus-node-exporter-collectors
+ mv /etc/shadow /data/etc/shadow
+ ln -s /data/etc/shadow /etc/shadow
+ trap - EXIT
+ else
+ apt_install prometheus-node-exporter prometheus-node-exporter-collectors
+ fi
+
+ if [[ "$DOCKERBUILD" == 1 ]]
+ then
+ cat > /etc/init.d/ncp-metrics-exporter <<'EOF'
+#!/bin/sh
+# Generated by sysd2v v0.3 -- http://www.trek.eu.org/devel/sysd2v
+# kFreeBSD do not accept scripts as interpreters, using #!/bin/sh and sourcing.
+if [ true != "$INIT_D_SCRIPT_SOURCED" ] ; then
+ set "$0" "$@"; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script
+fi
+### BEGIN INIT INFO
+# Provides: ncp-metrics-exporter
+# Required-Start: $remote_fs
+# Required-Stop: $remote_fs
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Description: NCP Metrics Exporter
+### END INIT INFO
+set -a
+NCP_CONFIG_DIR=/usr/local/etc
+set +a
+
+NAME=ncp-exporter
+DAEMON=/usr/local/bin/ncp-metrics-exporter
+PIDFILE=/var/run/ncp-metrics-exporter.pid
+LOGFILE=/var/log/ncp-metrics.log
+START_ARGS="--background --make-pidfile"
+EOF
+ chmod +x /etc/init.d/ncp-metrics-exporter
+
+ cat > /etc/services-available.d/101ncp-metrics <<EOF
+#!/bin/bash
+
+source /usr/local/etc/library.sh
+[[ "\$1" == "stop" ]] && {
+ echo "stopping prometheus-node-exporter..."
+ service prometheus-node-exporter stop
+ echo "done."
+ echo "stopping ncp-metrics-exporter"
+ service ncp-metrics-exporter stop
+ echo "done."
+ exit 0
+}
+
+persistent_cfg /etc/default/prometheus-node-exporter
+
+echo "starting prometheus-node-exporter..."
+service prometheus-node-exporter start
+[[ -n "\$(pgrep prometheus)" ]] || echo -e "ERROR: prometheus-node-exporter failed to start!"
+echo "starting ncp-metrics-exporter
+service ncp-metrics-exporter start
+EOF
+ chmod +x /etc/services-available.d/101ncp-metrics
+
+ else
+
+ cat <<EOF > /etc/systemd/system/ncp-metrics-exporter.service
[Unit]
Description=NCP Metrics Exporter
@@ -49,50 +182,49 @@ RestartSec=30
WantedBy=multi-user.target
EOF
- systemctl daemon-reload
+ systemctl daemon-reload
- )
-}
+ fi
-reload_metrics_config() {
- install_template ncp-metrics.cfg.sh "/usr/local/etc/ncp-metrics.cfg" || {
- echo "ERROR while generating ncp-metrics.conf!"
- return 1
- }
- service ncp-metrics-exporter status > /dev/null && {
- service ncp-metrics-exporter restart
- service ncp-metrics-exporter status > /dev/null 2>&1 || {
- rc=$?
- echo -e "WARNING: An error ncp-metrics exporter failed to start (exit-code $rc)!"
- return 1
- }
- }
+ metrics_services stop
+ metrics_services disable
+
+ )
}
configure() {
if [[ "$ACTIVE" != yes ]]
then
- install_template nextcloud.conf.sh /etc/apache2/sites-available/nextcloud.conf
-
- systemctl disable prometheus-node-exporter
- service prometheus-node-exporter stop
- systemctl disable ncp-metrics-exporter
- service ncp-metrics-exporter stop
+ install_template nextcloud.conf.sh /etc/apache2/sites-available/nextcloud.conf || {
+ install_template nextcloud.conf.sh /etc/apache2/sites-available/nextcloud.conf --allow-fallback
+ echo -e "ERROR while generating nextcloud.conf! Exiting..."
+ return 1
+ }
+ echo "Disabling and stopping services..."
+ metrics_services disable
+ metrics_services stop
+ echo "done."
else
+
+ is_supported || {
+ echo -e "Metrics app is not supported in debian 10 docker containers. Terminating..."
+ return 0
+ }
+
[[ -n "$USER" ]] || {
- echo "ERROR: User can not be empty!" >&2
+ echo -e "ERROR: User can not be empty!" >&2
return 1
}
[[ -n "$PASSWORD" ]] || {
- echo "ERROR: Password can not be empty!" >&2
+ echo -e "ERROR: Password can not be empty!" >&2
return 1
}
[[ ${#PASSWORD} -ge 10 ]] || {
- echo "ERROR: Password must be at least 10 characters long!" >&2
+ echo -e "ERROR: Password must be at least 10 characters long!" >&2
return 1
}
@@ -100,30 +232,29 @@ configure() {
rm -f "${htpasswd_file}"
echo "$PASSWORD" | htpasswd -ciB "${htpasswd_file}" "$USER"
- install_template nextcloud.conf.sh /etc/apache2/sites-available/nextcloud.conf || {
- echo "ERROR while generating nextcloud.conf! Exiting..."
- return 1
- }
echo "Generate config..."
reload_metrics_config
echo "done."
- echo "Starting prometheus node exporter..."
- systemctl enable prometheus-node-exporter
- service prometheus-node-exporter start
- service prometheus-node-exporter status
+ echo "Enabling and starting services..."
+ metrics_services enable
+ metrics_services start
+ metrics_services status || {
+ echo -e "ERROR: Metrics services not running!"
+ return 1
+ }
echo "done."
- echo "Starting ncp metrics exporter..."
- systemctl enable ncp-metrics-exporter
- service ncp-metrics-exporter start
- service ncp-metrics-exporter status
- echo "done."
+
+ install_template nextcloud.conf.sh /etc/apache2/sites-available/nextcloud.conf || {
+ install_template nextcloud.conf.sh /etc/apache2/sites-available/nextcloud.conf --allow-fallback
+ echo -e "ERROR while generating nextcloud.conf! Exiting..."
+ return 1
+ }
echo "Metrics endpoint enabled. You can test it at https://nextcloudpi.local/metrics/system (or under your NC domain under the same path)"
fi
- echo "Apache Test:"
- apache2ctl -t
+
bash -c "sleep 2 && service apache2 reload" &>/dev/null &
}