Skip to content

Commit

Permalink
DEV: flags/show-sess-to-flags: add support for color output
Browse files Browse the repository at this point in the history
Highlighting a few fields helps spot them, but only if there are not too
many. What is done here is the following:
  - the first line of each stream is highlighted in white (helps find
    beginning/end in long dumps
  - fields in the form name=value where value starts with upper case
    letters are considered as a state dump (e.g. stconn state) and are
    also highlighted. This results in ~20 pairs. In this case the name
    and value use two different colors (cyan vs yellow) to further help
    find what is being looked for

This is only done when the output is a terminal or when --color=always
is passed. It's also possible to disable it with --color=never or
--no-color.
  • Loading branch information
wtarreau committed May 10, 2023
1 parent fd1047a commit 2fab37e
Showing 1 changed file with 28 additions and 1 deletion.
29 changes: 28 additions & 1 deletion dev/flags/show-sess-to-flags.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@
# out. It's mostly a matter of taste, they're equivalent.
#
# Usage: socat /path/to/socket - <<< "show sess all" | ./$0 > output
#
# options:
# --color=never, --no-color: never colorize output
# --color=always: always colorize output (default: only on terminal)

# look for "flags in path then in dev/flags/flags then next to the script"
FLAGS="${FLAGS:-$(command -v flags)}"
Expand Down Expand Up @@ -82,7 +86,15 @@ dump_and_reset() {

line=0
while [ $line -lt ${#out[@]} ]; do
echo "${out[$line]}"
if [ -n "$COLOR" ]; then
# highlight name=value for values made of upper case letters
echo "${out[$line]}" | \
sed -e 's,\(^0x.*\),\x1b[1;37m\1\x1b[0m,g' \
-e 's,\([^ ,=]*\)=\([A-Z][^:, ]*\),\x1b[1;36m\1\x1b[0m=\x1b[1;33m\2\x1b[0m,g'

else
echo "${out[$line]}"
fi
((line++))
done

Expand All @@ -102,6 +114,21 @@ dump_and_reset() {

### main entry point

if [ -t 1 ]; then
# terminal on stdout, enable color by default
COLOR=1
else
COLOR=
fi

if [ "$1" == "--no-color" -o "$1" == "--color=never" ]; then
shift
COLOR=
elif [ "$1" == "--color=always" ]; then
shift
COLOR=1
fi

ctx=strm
while read -r; do
[ "$REPLY" != "EOF" ] || break # for debugging
Expand Down

0 comments on commit 2fab37e

Please sign in to comment.