blob: 761d345f660561d77ce7d1e94112dcf45a0a6d55 [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="dbus-send --system --dest=${FLIMFLAM} --print-reply / $MANAGER"
FF_TAGLIST=`${SEND_FF_CMD}.ListDebugTags | sed -e '/string/!d; s/[[:space:]]\+/ /g' | cut -d "\"" -f 2 | tr "+" " "`
usage(){
echo "
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
"
}
get_ff_debug_tags() {
${SEND_FF_CMD}.GetDebugTags 2>/dev/null | sed -e '/string/!d; s/[[:space:]]\+/ /g' | cut -d "\"" -f 2
}
set_ff_debug_tags() {
${SEND_FF_CMD}.SetDebugTags string:"$1" > /dev/null 2>&1
}
get_ff_debug_level() {
${SEND_FF_CMD}.GetDebugLevel 2>/dev/null | sed -e '/int32/!d; s/[[:space:]]\+/ /g' | cut -d " " -f 3
}
set_ff_debug_level() {
${SEND_FF_CMD}.SetDebugLevel int32:"$1" > /dev/null 2>&1
}
starting_ff_tags=`get_ff_debug_tags`
get_or_set_debug_level() {
local 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`]"