| #!/bin/sh | |
| # Copyright 2018 The ChromiumOS Authors | |
| # 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 | |
| } | |
| usage(){ | |
| cat <<EOF | |
| Usage: ff_debug [<tag_expression>] [--level <level>] [--persist] | |
| ff_debug --help | |
| ff_debug --reset | |
| ff_debug --list_valid_tags | |
| 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 and persistent debug configuration (if any) and | |
| restores default log level | |
| --persist : Stores the current debug configuration so that it is | |
| reused after restart. | |
| --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 | |
| persist= | |
| while [ $# -gt 0 ]; do | |
| case "$1" in | |
| --reset) | |
| set_ff_debug_level 0 | |
| set_ff_debug_tags '' | |
| persist="boolean:false" | |
| break | |
| ;; | |
| --level) | |
| shift # move forward to the <level> argument if specified | |
| if [ $# -eq 0 ]; then | |
| get_or_set_debug_level | |
| exit 0 | |
| else | |
| get_or_set_debug_level "$@" | |
| fi | |
| ;; | |
| --list*) | |
| FF_TAGLIST="$(send_ff_cmd ListDebugTags | sed -e \ | |
| '/string/!d; s/[[:space:]]\+/ /g' | cut -d "\"" -f 2 | tr "+" " ")" | |
| echo "Valid Tags: [$(echo "${FF_TAGLIST}" | sed 's/ /, /g')]" | |
| exit 0 | |
| ;; | |
| --persist) | |
| persist="boolean:true" | |
| ;; | |
| --help|--*) | |
| usage | |
| exit 0 | |
| ;; | |
| *) | |
| set_ff_debug_tags "$1" | |
| ;; | |
| esac | |
| shift | |
| done | |
| if [ -n "${persist}" ]; then | |
| send_ff_cmd PersistDebugConfig "${persist}" > /dev/null | |
| else | |
| send_ff_cmd PersistDebugConfig "boolean:false" > /dev/null | |
| fi | |
| echo "Old flimflam tags: [${starting_ff_tags}]" | |
| fi | |
| echo "Current flimflam tags: [$(get_ff_debug_tags)]" |