warnings.sh 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #!/bin/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. # make chutney path absolute
  14. if [ -d "$PWD/$CHUTNEY_PATH" ]; then
  15. export CHUTNEY_PATH="$PWD/$CHUTNEY_PATH"
  16. elif [ ! -d "$CHUTNEY_PATH" ]; then
  17. export CHUTNEY_PATH="$PWD"
  18. fi
  19. function show_warnings() {
  20. if [ "$CHUTNEY_WARNINGS_SUMMARY" = true ]; then
  21. echo "${GREEN}All `basename $1`:${NC}"
  22. FILE="$1/*/$LOG_FILE"
  23. else
  24. echo "${GREEN}Node `basename $1`:${NC}"
  25. FILE="$1/$LOG_FILE"
  26. fi
  27. if [ "$CHUTNEY_WARNINGS_IGNORE_EXPECTED" = true -a \
  28. -e "$IGNORE_FILE" ]; then
  29. CAT="grep -v -f"
  30. echo " ${GREEN}(Ignoring expected warnings, run chutney/tools/warnings.sh to see all warnings)${NC}"
  31. else
  32. CAT=cat
  33. IGNORE_FILE=
  34. fi
  35. # Label errs as "Warning:", they're infrequent enough it doesn't matter
  36. $CAT $IGNORE_FILE $FILE | \
  37. sed -n -E 's/^.*\[(warn|err)\]//p' | sort | uniq -c | \
  38. sed -e 's/^\s*//' -e "s/ *\([0-9][0-9]*\) *\(.*\)/ ${YELLOW}Warning:${NC} \2${YELLOW} Number: \1${NC}/"
  39. if [ "$CHUTNEY_WARNINGS_SUMMARY" != true ]; then
  40. echo ""
  41. fi
  42. }
  43. function usage() {
  44. echo "Usage: $NAME [node]"
  45. exit 1
  46. }
  47. NC=$(tput sgr0)
  48. YELLOW=$(tput setaf 3)
  49. GREEN=$(tput setaf 2)
  50. CHUTNEY="$CHUTNEY_PATH/chutney"
  51. NAME=$(basename "$0")
  52. DEST="$CHUTNEY_PATH/net/nodes"
  53. LOG_FILE=info.log
  54. # ignore warnings we expect to get every time chutney runs
  55. CHUTNEY_WARNINGS_IGNORE_EXPECTED=${CHUTNEY_WARNINGS_IGNORE_EXPECTED:-0}
  56. # don't put spaces in CHUTNEY_PATH or IGNORE_FILE
  57. IGNORE_FILE="$CHUTNEY_PATH/tools/ignore.warnings"
  58. # merge all log files into one before counting entries
  59. CHUTNEY_WARNINGS_SUMMARY=${CHUTNEY_WARNINGS_SUMMARY:-0}
  60. [ -d "$DEST" ] || { echo "$NAME: no logs available"; exit 1; }
  61. if [ $# -eq 0 ];
  62. then
  63. if [ "$CHUTNEY_WARNINGS_SUMMARY" = true ]; then
  64. show_warnings "$DEST"
  65. exit 0
  66. fi
  67. for dir in "$DEST"/*;
  68. do
  69. [ -e "${dir}/$LOG_FILE" ] || continue
  70. show_warnings "$dir"
  71. done
  72. elif [ $# -eq 1 ];
  73. then
  74. [ -e "$DEST/$1/$LOG_FILE" ] || \
  75. { echo "$NAME: no log available"; exit 1; }
  76. show_warnings "$DEST/$1"
  77. else
  78. usage
  79. fi