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
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
parent0e694329d2a2e60527675a6fdd36e0ac3b3992f7 (diff)
metrics.sh: Add docker support
Signed-off-by: Tobias K <6317548+theCalcaholic@users.noreply.github.com>
-rw-r--r--bin/ncp/SYSTEM/metrics.sh231
-rw-r--r--etc/ncp-templates/ncp-metrics.cfg.sh81
-rwxr-xr-xupdate.sh1
3 files changed, 222 insertions, 91 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 &
}
diff --git a/etc/ncp-templates/ncp-metrics.cfg.sh b/etc/ncp-templates/ncp-metrics.cfg.sh
index 29c0802f..b4adee65 100644
--- a/etc/ncp-templates/ncp-metrics.cfg.sh
+++ b/etc/ncp-templates/ncp-metrics.cfg.sh
@@ -19,40 +19,6 @@ cat <<EOF
"backups": [
EOF
-declare -a BKP_DIRS
-
-
-DATADIR=$( ncc config:system:get datadirectory ) || {
- echo -e "ERROR: Could not get data directory. Is NextCloud running?";
- return 1;
-}
-NC_SNAPSHOTS_DIR="$(dirname "$DATADIR")/ncp-snapshots"
-
-NC_SNAPSHOTS_SYNC_DIR="$(
- source "${BINDIR}/BACKUPS/nc-snapshot-sync.sh"
- if tmpl_is_destination_local
- then
- tmpl_get_destination
- fi
-)"
-
-SNAP_PATTERN=".*_(?P<year>\\\\d+)-(?P<month>\\\\d+)-(?P<day>\\\\d+)_(?P<hour>\\\\d{2})(?P<minute>\\\\d{2})(?P<second>\\\\d{2})"
-cat <<EOF
- {
- "path": "${NC_SNAPSHOTS_DIR}",
- "pattern": "${SNAP_PATTERN}"
- }
-EOF
-
-[[ -z "$NC_SNAPSHOTS_SYNC_DIR" ]] || {
- cat <<EOF
- ,{
- "path": "${NC_SNAPSHOTS_SYNC_DIR}",
- "pattern": "${SNAP_PATTERN}"
- }
-EOF
-}
-
NC_BACKUP_DIR="$(
source "${BINDIR}/BACKUPS/nc-backup.sh"
tmpl_get_destination
@@ -67,16 +33,51 @@ then
NC_BACKUP_AUTO_DIR=""
fi
-for BKP_DIR in "$NC_BACKUP_DIR" "$NC_BACKUP_AUTO_DIR"
-do
- [[ -n "$BKP_DIR" ]] || continue
+NC_BACKUP_PATTERN="nextcloud-bkp_(?P<year>\\\\d{4})(?P<month>\\\\d{2})(?P<day>\\\\d{2})_.*\\\\.tar(\\\\.gz)?"
+
+cat <<EOF
+ {
+ "path": "$NC_BACKUP_DIR",
+ "pattern": "$NC_BACKUP_PATTERN"
+ }
+EOF
+[[ -z "$NC_BACKUP_AUTO_DIR" ]] || {
cat <<EOF
,{
- "path": "$BKP_DIR",
- "pattern": "nextcloud-bkp_(?P<year>\\\\d{4})(?P<month>\\\\d{2})(?P<day>\\\\d{2})_.*\\\\.tar(\\\\.gz)?"
+ "path": "$NC_BACKUP_AUTO_DIR",
+ "pattern": "$NC_BACKUP_PATTERN"
+ }
+EOF
+}
+
+[[ "$DOCKERBUILD" == 1 ]] || {
+
+ DATADIR=$( ncc config:system:get datadirectory ) || {
+ echo -e "ERROR: Could not get data directory. Is NextCloud running?";
+ return 1;
+ }
+ NC_SNAPSHOTS_DIR="$(dirname "$DATADIR")/ncp-snapshots"
+
+ NC_SNAPSHOTS_SYNC_DIR="$(
+ source "${BINDIR}/BACKUPS/nc-snapshot-sync.sh"
+ if tmpl_is_destination_local
+ then
+ tmpl_get_destination
+ fi
+ )"
+
+ for snap_dir in "$NC_SNAPSHOTS_DIR" "$NC_SNAPSHOTS_SYNC_DIR"
+ do
+ [[ -n "$snap_dir" ]] || continue
+ cat <<EOF
+ ,{
+ "path": "${snap_dir}",
+ "pattern": ".*_(?P<year>\\\\d+)-(?P<month>\\\\d+)-(?P<day>\\\\d+)_(?P<hour>\\\\d{2})(?P<minute>\\\\d{2})(?P<second>\\\\d{2})"
}
EOF
-done
+ done
+
+}
cat <<EOF
]
diff --git a/update.sh b/update.sh
index c07cb616..fc466ab6 100755
--- a/update.sh
+++ b/update.sh
@@ -37,7 +37,6 @@ nc-zram
SSH
fail2ban
NFS
-metrics
"
if is_docker &>/dev/null; then