warnings.sh 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #!/usr/bin/env bash
  2. #
  3. # Usage:
  4. # tools/warnings.sh [node]
  5. # Output: for each node outputs its warnings and the number of times that
  6. # warning has ocurred. If the argument node is specified, it only shows
  7. # the warnings of that node.
  8. # Examples: tools/warnings.sh
  9. # tools/warnings.sh 000a
  10. # Environmental variables:
  11. # CHUTNEY_WARNINGS_IGNORE_EXPECTED: set to "true" to filter expected warnings
  12. # CHUTNEY_WARNINGS_SUMMARY: set to "true" to merge warnings from all instances
  13. if [ ! -d "$CHUTNEY_PATH" -o ! -x "$CHUTNEY_PATH/chutney" ]; then
  14. # looks like a broken path: use the path to this tool instead
  15. TOOLS_PATH=`dirname "$0"`
  16. export CHUTNEY_PATH=`dirname "$TOOLS_PATH"`
  17. fi
  18. if [ -d "$PWD/$CHUTNEY_PATH" -a -x "$PWD/$CHUTNEY_PATH/chutney" ]; then
  19. # looks like a relative path: make chutney path absolute
  20. export CHUTNEY_PATH="$PWD/$CHUTNEY_PATH"
  21. fi
  22. function show_warnings() {
  23. if [ "$CHUTNEY_WARNINGS_SUMMARY" = true ]; then
  24. echo "${GREEN}All `basename $1`:${NC}"
  25. FILE="$1/*/$LOG_FILE"
  26. else
  27. echo "${GREEN}Node `basename $1`:${NC}"
  28. FILE="$1/$LOG_FILE"
  29. fi
  30. if [ "$CHUTNEY_WARNINGS_IGNORE_EXPECTED" = true -a \
  31. -e "$IGNORE_FILE" ]; then
  32. CAT="grep -v -f"
  33. echo " ${GREEN}(Ignoring expected warnings, run chutney/tools/warnings.sh to see all warnings)${NC}"
  34. else
  35. CAT=cat
  36. IGNORE_FILE=
  37. fi
  38. # Label errs as "Warning:", they're infrequent enough it doesn't matter
  39. $CAT $IGNORE_FILE $FILE | \
  40. sed -n -E 's/^.*\[(warn|err)\]//p' | sort | uniq -c | \
  41. sed -e 's/^\s*//' -e "s/ *\([0-9][0-9]*\) *\(.*\)/ ${YELLOW}Warning:${NC} \2${YELLOW} Number: \1${NC}/"
  42. if [ "$CHUTNEY_WARNINGS_SUMMARY" != true ]; then
  43. echo ""
  44. fi
  45. }
  46. function usage() {
  47. echo "Usage: $NAME [node]"
  48. exit 1
  49. }
  50. # Don't colour in log files
  51. if [ -t 1 ]; then
  52. NC=$(tput sgr0)
  53. YELLOW=$(tput setaf 3)
  54. GREEN=$(tput setaf 2)
  55. fi
  56. CHUTNEY="$CHUTNEY_PATH/chutney"
  57. NAME=$(basename "$0")
  58. DEST="$CHUTNEY_PATH/net/nodes"
  59. LOG_FILE=info.log
  60. # ignore warnings we expect to get every time chutney runs
  61. CHUTNEY_WARNINGS_IGNORE_EXPECTED=${CHUTNEY_WARNINGS_IGNORE_EXPECTED:-0}
  62. # don't put spaces in CHUTNEY_PATH or IGNORE_FILE
  63. IGNORE_FILE="$CHUTNEY_PATH/tools/ignore.warnings"
  64. # merge all log files into one before counting entries
  65. CHUTNEY_WARNINGS_SUMMARY=${CHUTNEY_WARNINGS_SUMMARY:-0}
  66. [ -d "$DEST" ] || { echo "$NAME: no logs available"; exit 1; }
  67. if [ $# -eq 0 ];
  68. then
  69. if [ "$CHUTNEY_WARNINGS_SUMMARY" = true ]; then
  70. show_warnings "$DEST"
  71. exit 0
  72. fi
  73. for dir in "$DEST"/*;
  74. do
  75. [ -e "${dir}/$LOG_FILE" ] || continue
  76. show_warnings "$dir"
  77. done
  78. elif [ $# -eq 1 ];
  79. then
  80. [ -e "$DEST/$1/$LOG_FILE" ] || \
  81. { echo "$NAME: no log available"; exit 1; }
  82. show_warnings "$DEST/$1"
  83. else
  84. usage
  85. fi