summaryrefslogtreecommitdiffstats
path: root/core/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_report
diff options
context:
space:
mode:
Diffstat (limited to 'core/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_report')
-rwxr-xr-xcore/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_report97
1 files changed, 97 insertions, 0 deletions
diff --git a/core/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_report b/core/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_report
new file mode 100755
index 00000000..09d8efc9
--- /dev/null
+++ b/core/modules/hardware-stats/data/opt/openslx/scripts/systemd-hardware_report
@@ -0,0 +1,97 @@
+#!/bin/ash
+
+. /opt/openslx/config
+
+disable_remote_logging() {
+ echo "Server doesn't seem to support hardware/usage stats - disabling logging"
+ rm -f -- "/etc/cron.d/usage_stats"
+}
+
+# sends the hardware information of this machine generated by
+# systemd-hardware_stats_gather in /run/hwreport and /run/hwinfo
+report_hardware_info() {
+ local uptime hwreport hwinfo uuid model subnet ret runmode jsonfile
+ if [ -z "$SLX_REMOTE_LOG" ]; then
+ disable_remote_logging
+ return 1
+ fi
+ hwreport="/run/hwreport"
+ if [ ! -s "$hwreport" ]; then
+ echo "Missing hwreport file: $hwreport"
+ # TODO send data without?
+ return 1
+ fi
+
+ # Read generated data and current uptime and send it
+ hwinfo="/run/hwinfo"
+ if [ ! -s "$hwinfo" ]; then
+ echo "Missing hwinfo file: $hwinfo"
+ return 1
+ fi
+ . "$hwinfo"
+
+ # got everything, get the last infos
+ uptime=$(grep -oE '^[0-9]+' /proc/uptime)
+
+ uuid=$(cat /etc/system-uuid)
+ if [ -z "$uuid" ] || [ "${#uuid}" -ne "36" ]; then
+ echo "No/malformed UUID, aborting" >&2
+ exit 1
+ fi
+ runmode="$SLX_RUNMODE_MODULE"
+ if [ -n "$SLX_EXAM" ]; then
+ # This isn't an actual runmode, but in case exam mode is active on a client you definitely want
+ # to know about it, more than other runmodes actually
+ runmode="exams"
+ fi
+
+ # Combine manufacturer and model name (for displaying purposes)
+ model="$HW_MODEL"
+ if [ "$HW_MANUF" != "Unknown" ]; then
+ model="$model ($HW_MANUF)"
+ fi
+ # Get IP/subnet size
+ local primary="${SLX_BRIDGE:-br0}"
+ subnet="$( ip -o -f inet addr show "$primary" | awk '/scope global/ {print $4}' )"
+ # Finally, new json-based reporting
+ jsonfile="$( mktemp )"
+ if ! python3 /opt/openslx/system-check/collect_hw_info_json.py -p > "$jsonfile"; then
+ echo -n "" > "$jsonfile"
+ fi
+ # just assume the uuid/mac dumped are valid here (its checked often enough :))
+ echo -n "Submitting to '$SLX_REMOTE_LOG' ... "
+ curl --retry 4 --retry-connrefused --max-time 5 --retry-max-time 15 \
+ --data-urlencode "type=~poweron" --data-urlencode "uuid=$uuid" --data-urlencode "macaddr=$HW_MAC" \
+ --data-urlencode "uptime=$uptime" --data-urlencode "realcores=$HW_CORES" --data-urlencode "vcores=$HW_THREADS" \
+ --data-urlencode "sockets=$HW_SOCKETS" --data-urlencode "mbram=$HW_MBRAM" \
+ --data-urlencode "kvmstate=$HW_KVM" --data-urlencode "cpumodel=$HW_CPUMODEL" --data-urlencode "id44mb=$HW_ID44" \
+ --data-urlencode "badsectors=$HW_BADSECTORS" --data-urlencode "systemmodel=$model" --data-urlencode "subnet=$subnet" \
+ --data-urlencode "runmode=$runmode" --data-urlencode "data@$hwreport" --data-urlencode "json@$jsonfile" \
+ "$SLX_REMOTE_LOG" | grep -q "RESULT=0"
+ local ret=$?
+ if [ "$ret" -ne 0 ]; then
+ echo "failed."
+ disable_remote_logging
+ return 1
+ fi
+ echo "succeeded."
+ rm -f -- "$hwreport" "$jsonfile"
+ START=$(( $RANDOM % 5 ))
+ DELAY=$(( $RANDOM % 20 ))
+ cat > "/etc/cron.d/usage_stats" <<-EOF
+ # Update usage statistics on server
+ SHELL=/bin/sh
+ PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/openslx/sbin:/opt/openslx/bin
+
+ ${START}-59/5 * * * * root sleep ${DELAY}; /opt/openslx/scripts/cron-system_usage_update --full
+ EOF
+ # TODO remove this hack one day: Sometimes, aufs doesn't update the mtime of dirs
+ # when creating files, so cron would not rescan the cron directory.
+ touch "/etc/cron.d"
+ # Trigger right now so resource usage gets updated
+ /opt/openslx/scripts/cron-system_usage_update --full
+ return 0
+}
+
+report_hardware_info
+