Files
telemetrics-client/scripts/telemctl
T
2016-07-01 20:16:54 +00:00

116 lines
2.4 KiB
Bash
Executable File

#!/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