#!/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/openslx/hwreport and /run/openslx/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/openslx/hwreport" jsonfile="/run/openslx/hwreport.json" if ! [ -s "$hwreport" ] && ! [ -s "$jsonfile" ]; then echo "Missing hwreport file: $hwreport AND $jsonfile" fi # Read generated data and current uptime and send it hwinfo="/run/openslx/hwinfo" if [ ! -s "$hwinfo" ]; then echo "Missing hwinfo file: $hwinfo" return 1 fi . "$hwinfo" 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}' )" # just assume the uuid/mac dumped are valid here (its checked often enough :)) [ -s "$hwreport" ] || touch "$hwreport" [ -s "$jsonfile" ] || touch "$jsonfile" # Bail out if a shutdown was triggered and submitted in the meantime [ -e /run/openslx/shutdown.mutex ] && exit 0 # got everything, get the last infos uptime=$(grep -oE '^[0-9]+' /proc/uptime) echo -n "Submitting to '$SLX_REMOTE_LOG' ... " curl --retry 4 --retry-connrefused --connect-timeout 3 --max-time 9 --retry-max-time 18 \ --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 )) # Do not move/rename this file, we check its existence in other scripts 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 # Trigger right now so resource usage gets updated /opt/openslx/scripts/cron-system_usage_update --full return 0 } report_hardware_info