| #!/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`]" |