warnings.sh 2.4 KB

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