#!/bin/bash declare -a SPECIAL_UNITS=( hprobe.timer telemd.socket telemd.path ) declare -a SERVICES=( hprobe.service journal-probe.service oops-probe.service pstore-probe.service klogscanner.service telemd.service ) SCRIPT="$0" TELEM_DIR=/etc/telemetrics OPT_OUT_FILE=${TELEM_DIR}/opt-out exit_ok() { echo "$1" > /dev/stderr exit 0 } exit_err() { echo "$1" > /dev/stderr exit 1 } notice() { echo "$1" > /dev/stderr } for_each_service() { local action=$1 && shift local -a array=($*) for service in "${array[@]}"; do systemctl $action $service [ $? -ne 0 ] && notice "Failed to $action ${service}. Continuing..." done } telem_stop() { # the special units must be stopped first so that activation no longer happens for_each_service "stop" ${SPECIAL_UNITS[@]} for_each_service "stop" ${SERVICES[@]} } telem_start() { [ -f $OPT_OUT_FILE ] && exit_err "Opt out is enabled. Cannot start services." # the units in SERVICES are activated as needed, so no need to start them for_each_service "start" ${SPECIAL_UNITS[@]} } telem_opt_out() { [ -f $OPT_OUT_FILE ] && exit_ok "Already opted out. Nothing to do." mkdir -p $TELEM_DIR || exit_err "Failed to create ${TELEM_DIR}." touch $OPT_OUT_FILE || exit_err "Failed to create ${OPT_OUT_FILE}." telem_stop } telem_opt_in() { [ ! -f $OPT_OUT_FILE ] && exit_ok "Already opted in. Nothing to do." rm -f $OPT_OUT_FILE || exit_err "Failed to remove ${OPT_OUT_FILE}." telem_start } telem_restart() { telem_stop telem_start } usage() { printf "$SCRIPT - Control actions for telemetry services\n" printf "\n" printf "%15s %-65s\n" "stop" "Stops all running telemetry services" printf "%15s %-65s\n" "start" "Starts all telemetry services" printf "%15s %-65s\n" "restart" "Restarts all telemetry services" printf "%15s %-65s\n" "opt-in" "Opts in to telemetry, and starts telemetry services" printf "%15s %-65s\n" "opt-out" "Opts out of telemetry, and stops telemetry services" printf "\n" exit 2 } if [ $# -ne 1 ]; then usage fi if [ $EUID -ne 0 ]; then exit_err "Must be root to run this command. Exiting..." fi SUBCOMMAND=$1 case $SUBCOMMAND in opt-out) telem_opt_out ;; opt-in) telem_opt_in ;; stop) telem_stop ;; start) telem_start ;; restart) telem_restart ;; *) notice "Unknown command passed to $SCRIPT" usage ;; esac exit 0 # vi: ts=8 sw=2 sts=2 et tw=80