189 lines
5.7 KiB
Text
Executable file
189 lines
5.7 KiB
Text
Executable file
#
|
|
#
|
|
# Copyright (C) 2012 The Android Open Source Project
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
#
|
|
#
|
|
# 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`
|
|
# Global strings
|
|
ff_tags_to_set=$starting_ff_tags
|
|
|
|
# Returns whether or not $2 exists in $1 where $1 is a space
|
|
# separated list of tags
|
|
is_valid_tag(){
|
|
expr " $1 " : ".* $2 .*"> /dev/null
|
|
}
|
|
|
|
# Takes a boolean expression and changes
|
|
# flimflam string appropriately
|
|
modify_flimflam_tag_string(){
|
|
if [ -n "$1" ]; then
|
|
for tag in `echo "$1" | sed 's/[+-]/ &/g'`; do
|
|
|
|
# Skip the tag if it's not in the list of valid tags
|
|
if ! is_valid_tag "$FF_TAGLIST" "`echo $tag | sed 's/^[+-]//'`"; then
|
|
continue
|
|
fi
|
|
|
|
case $tag in
|
|
-*)
|
|
tag=`echo $tag | sed 's/-//'`
|
|
if [ -n "$tag" ]; then
|
|
# First check/remove instances where it lies between +'s
|
|
# Then check/remove instances where it lies at the ends
|
|
ff_tags_to_set=`echo $ff_tags_to_set \
|
|
| sed 's/+'$tag'+/+/g' \
|
|
| sed 's/\(^\|+\)'$tag'\(+\|$\)//g'`
|
|
fi
|
|
;;
|
|
+*)
|
|
tag=`echo $tag | sed 's/+//'`
|
|
if [ -z "$tag" ]; then
|
|
continue
|
|
# Check if exact tag is between + symbols, or at the ends of expression
|
|
elif [ -n "`echo "$ff_tags_to_set" | egrep "\+$tag\+|\+$tag$|^$tag\+"`" ]; then
|
|
continue
|
|
elif [ -n "$ff_tags_to_set" ]; then
|
|
ff_tags_to_set="${ff_tags_to_set}+${tag}"
|
|
else
|
|
ff_tags_to_set="$tag"
|
|
fi
|
|
;;
|
|
*)
|
|
ff_tags_to_set="$tag"
|
|
;;
|
|
esac
|
|
done
|
|
ff_tags_to_set=`echo "$ff_tags_to_set" | sed 's/^+//'`
|
|
else
|
|
ff_tags_to_set=""
|
|
fi
|
|
}
|
|
|
|
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)
|
|
ff_tags_to_set=""
|
|
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
|
|
;;
|
|
*)
|
|
modify_flimflam_tag_string "$1"
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
# set tags only when the starting and ending are different
|
|
if [ "$ff_tags_to_set" != "$starting_ff_tags" ]; then
|
|
set_ff_debug_tags "$ff_tags_to_set"
|
|
fi
|
|
echo "Old flimflam tags: [$starting_ff_tags]"
|
|
fi
|
|
echo "Current flimflam tags: [`get_ff_debug_tags`]"
|