blob: b6c0d3a07274829254fd009a9c7141c4844ad54e [file] [log] [blame]
#!/bin/sh
# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
# Script that turns on useful logging for flimflam
FLIMFLAM="org.chromium.flimflam"
MANAGER="${FLIMFLAM}.Manager"
send_ff_cmd() {
local cmd="$1"
shift 1
dbus-send --system "--dest=${FLIMFLAM}" --print-reply / "${MANAGER}.${cmd}" \
"$@" 2>/dev/null
}
FF_TAGLIST="$(send_ff_cmd ListDebugTags | sed -e \
'/string/!d; s/[[:space:]]\+/ /g' | cut -d "\"" -f 2 | tr "+" " ")"
usage(){
cat <<EOF
Usage: ff_debug [<tag_expression>]|[--reset]|[--help]|[--list_valid_tags]|[--level <level>]
ff_debug adds and removes debug tags for flimflam.
Current debug settings are displayed if no parameters are provided
<tag_expression> is defined in boolean notation using <debug_tag> separated
by an operator [+-], where + and - imply adding and removing of the tag immediately
following the operator. An expression beginning with either operators [+-]
takes the existing tags and modifies them appropriately. Otherwise, the existing tags
are replaced by those specified in the command.
<debug_tag> can be listed using the --list_valid_tags
e.g.: ff_debug network+wifi
Sets debug tags to network and wifi
e.g.: ff_debug +network-service
Adds network and removes service tags from the existing debug settings
--list_valid_tags : Displays all valid tags
--level: Displays or sets current debug level for logging
All messages at, or above, the current log level are logged. Normal log
levels range from 4 (LOG_FATAL) to 0 (LOG_INFO). In addition VERBOSE log
levels are available starting at -1.
e.g.: ff_debug --level 4
Logs only FATAL messages.
e.g.: ff_debug --level 0
Logs INFO, WARNING, ERROR, ERROR_REPORT, and FATAL messages.
e.g.: ff_debug --level -4
Logs everything that "--level 0" does, plus SLOG(<tag>, <n>) messages,
where <tag> has been enabled for logging, and <n> <= 4. (NOTE: you must
negate SLOG levels for use with ff_debug. In this example, SLOG(<tag>, 4)
maps to "--level -4".)
--reset : Removes all tagging
--help : Displays this output
EOF
}
get_ff_debug_tags() {
send_ff_cmd GetDebugTags | sed -e '/string/!d; s/[[:space:]]\+/ /g' | \
cut -d "\"" -f 2
}
set_ff_debug_tags() {
send_ff_cmd SetDebugTags string:"$1" > /dev/null
}
get_ff_debug_level() {
send_ff_cmd GetDebugLevel | sed -e '/int32/!d; s/[[:space:]]\+/ /g' | \
cut -d " " -f 3
}
set_ff_debug_level() {
send_ff_cmd SetDebugLevel int32:"$1" > /dev/null
}
starting_ff_tags="$(get_ff_debug_tags)"
get_or_set_debug_level() {
local ff_debug_level
ff_debug_level="$(get_ff_debug_level)"
if [ -z "${ff_debug_level}" ]; then
# flimflam does not implement GetDebugLevel / SetDebugLevel, simply return
return
fi
if [ $# -gt 0 ]; then
echo "Old flimflam debug level: ${ff_debug_level}"
set_ff_debug_level "$1"
ff_debug_level="$(get_ff_debug_level)"
fi
echo "Current flimflam debug level: ${ff_debug_level}"
}
if [ $# -gt 0 ]; then
while [ $# -gt 0 ]; do
case "$1" in
--reset)
set_ff_debug_tags ''
break
;;
--level)
shift # move forward to the <level> argument if specified
get_or_set_debug_level "$@"
exit 0
;;
--list*)
echo "Valid Tags: [$(echo "${FF_TAGLIST}" | sed 's/ /, /g')]"
exit 0
;;
--help|--*)
usage
exit 0
;;
*)
set_ff_debug_tags "$1"
;;
esac
shift
done
echo "Old flimflam tags: [${starting_ff_tags}]"
fi
echo "Current flimflam tags: [$(get_ff_debug_tags)]"