Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(470)

Side by Side Diff: tools/valgrind/waterfall.sh

Issue 6057006: Improve waterfall.sh - fetch only reports and failed test names rather then t... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/bin/bash 1 #!/bin/bash
2 2
3 # Copyright (c) 2010 The Chromium Authors. All rights reserved. 3 # Copyright (c) 2010 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 # This script can be used by waterfall sheriffs to fetch the status 7 # This script can be used by waterfall sheriffs to fetch the status
8 # of Valgrind bots on the memory waterfall and test if their local 8 # of Valgrind bots on the memory waterfall and test if their local
9 # suppressions match the reports on the waterfall. 9 # suppressions match the reports on the waterfall.
10 10
(...skipping 27 matching lines...) Expand all
38 else 38 else
39 echo "Need either curl or wget to download stuff... aborting" 39 echo "Need either curl or wget to download stuff... aborting"
40 exit 1 40 exit 1
41 fi 41 fi
42 # }}} 42 # }}}
43 } 43 }
44 44
45 fetch_logs() { 45 fetch_logs() {
46 # Fetch Valgrind logs from the waterfall {{{1 46 # Fetch Valgrind logs from the waterfall {{{1
47 47
48 # TODO(timurrrr,maruel): use JSON, see
49 # http://build.chromium.org/p/chromium.memory/json/help
50
48 rm -rf "$LOGS_DIR" # Delete old logs 51 rm -rf "$LOGS_DIR" # Delete old logs
49 mkdir "$LOGS_DIR" 52 mkdir "$LOGS_DIR"
50 53
51 echo "Fetching the list of builders..." 54 echo "Fetching the list of builders..."
52 download $WATERFALL_PAGE "$LOGS_DIR/builders" 55 download $WATERFALL_PAGE "$LOGS_DIR/builders"
53 SLAVES=$(grep "<a href=\"builders\/" "$LOGS_DIR/builders" | \ 56 SLAVES=$(grep "<a href=\"builders\/" "$LOGS_DIR/builders" | \
54 sed "s/.*<a href=\"builders\///" | sed "s/\".*//" | \ 57 sed "s/.*<a href=\"builders\///" | sed "s/\".*//" | \
55 sort | uniq) 58 sort | uniq)
56 59
57 for S in $SLAVES 60 for S in $SLAVES
58 do 61 do
59 SLAVE_URL=$WATERFALL_PAGE/$S 62 SLAVE_URL=$WATERFALL_PAGE/$S
60 SLAVE_NAME=$(echo $S | sed -e "s/%20/ /g" -e "s/%28/(/g" -e "s/%29/)/g") 63 SLAVE_NAME=$(echo $S | sed -e "s/%20/ /g" -e "s/%28/(/g" -e "s/%29/)/g")
61 echo -n "Fetching builds by slave '${SLAVE_NAME}'" 64 echo -n "Fetching builds by slave '${SLAVE_NAME}'"
62 download $SLAVE_URL "$LOGS_DIR/slave_${S}" 65 download $SLAVE_URL "$LOGS_DIR/slave_${S}"
63 66
64 # We speed up the 'fetch' step by skipping the builds/tests which succeeded. 67 # We speed up the 'fetch' step by skipping the builds/tests which succeeded.
65 # TODO(timurrrr): OTOH, we won't be able to check 68 # TODO(timurrrr): OTOH, we won't be able to check
66 # if some suppression is not used anymore. 69 # if some suppression is not used anymore.
67 LIST_OF_BUILDS=$(grep "<a href=\"\.\./builders/.*/builds/[0-9]\+.*failed" \ 70 LIST_OF_BUILDS=$(grep "rev.*<a href=\"\.\./builders/.*/builds/[0-9]\+" \
68 "$LOGS_DIR/slave_$S" | grep -v "failed compile" | \ 71 "$LOGS_DIR/slave_$S" | head -n 2 | \
69 sed "s/.*\/builds\///" | sed "s/\".*//" | head -n 2) 72 grep "failed" | grep -v "failed compile" | \
73 sed "s/.*\/builds\///" | sed "s/\".*//")
70 74
71 for BUILD in $LIST_OF_BUILDS 75 for BUILD in $LIST_OF_BUILDS
72 do 76 do
73 BUILD_RESULTS="$LOGS_DIR/slave_${S}_build_${BUILD}" 77 # We'll fetch a few tiny URLs now, let's use a temp file.
74 download $SLAVE_URL/builds/$BUILD "$BUILD_RESULTS" 78 TMPFILE=$(mktemp)
75 LIST_OF_TESTS=$(grep "<a href=\"[0-9]\+/steps/memory.*/logs/stdio\"" \ 79 download $SLAVE_URL/builds/$BUILD "$TMPFILE"
76 "$BUILD_RESULTS" | \ 80
77 sed "s/.*a href=\"//" | sed "s/\".*//") 81 REPORT_FILE="$LOGS_DIR/report_${S}_${BUILD}"
78 for TEST in $LIST_OF_TESTS 82 rm -f $REPORT_FILE 2>/dev/null || true # make sure it doesn't exist
83
84 REPORT_URLS=$(grep -o "[0-9]\+/steps/memory.*/logs/[0-9A-F]\{16\}" \
85 "$TMPFILE" || true) # `true` is to succeed on empty output
86 FAILED_TESTS=$(grep -o "[0-9]\+/steps/memory.*/logs/[A-Za-z0-9.]\+" \
87 "$TMPFILE" | grep -v "[0-9A-F]\{16\}" | grep -v "stdio" \
88 || true)
89
90 for REPORT in $REPORT_URLS
79 do 91 do
80 REPORT_FILE=$(echo "report_${S}_$TEST" | sed "s/\/logs\/stdio//" | \ 92 download "$SLAVE_URL/builds/$REPORT/text" "$TMPFILE"
81 sed "s/\/steps//" | sed "s/\//_/g") 93 echo "" >> "$TMPFILE" # Add a newline at the end
82 echo -n "." 94 cat "$TMPFILE" | tr -d '\r' >> "$REPORT_FILE"
83 download $SLAVE_URL/builds/$TEST "$LOGS_DIR/$REPORT_FILE"
84 echo $SLAVE_URL/builds/$TEST >> "$LOGS_DIR/$REPORT_FILE"
85 done 95 done
96
97 for FAILURE in $FAILED_TESTS
98 do
99 echo -n "FAILED:" >> "$REPORT_FILE"
100 echo "$FAILURE" | sed -e "s/.*\/logs\///" -e "s/\/.*//" \
101 >> "$REPORT_FILE"
102 done
103
104 rm "$TMPFILE"
105 echo $SLAVE_URL/builds/$BUILD >> "$REPORT_FILE"
86 done 106 done
87 echo " DONE" 107 echo " DONE"
88 done 108 done
89 # }}} 109 # }}}
90 } 110 }
91 111
92 match_suppressions() { 112 match_suppressions() {
93 PYTHONPATH=$THISDIR/../python/google \ 113 PYTHONPATH=$THISDIR/../python/google \
94 python "$THISDIR/test_suppressions.py" "$LOGS_DIR/report_"* 114 python "$THISDIR/test_suppressions.py" "$LOGS_DIR/report_"*
95 } 115 }
96 116
97 match_gtest_excludes() { 117 match_gtest_excludes() {
98 for PLATFORM in "Linux" "Chromium%20Mac" "Chromium%20OS" 118 for PLATFORM in "Linux" "Chromium%20Mac" "Chromium%20OS"
99 do 119 do
100 echo 120 echo
101 echo "Test failures on ${PLATFORM}:" | sed "s/%20/ /" 121 echo "Test failures on ${PLATFORM}:" | sed "s/%20/ /"
102 grep "\[ FAILED \] .* ([0-9]\+ ms)" -R "$LOGS_DIR"/*${PLATFORM}* | \ 122 grep -h -o "^FAILED:.*" -R "$LOGS_DIR"/*${PLATFORM}* | \
103 grep -v "FAILS\|FLAKY" | \ 123 grep -v "FAILS\|FLAKY" | sort | uniq | \
104 sed -e "s/.*%20//" -e "s/_[1-9]\+:/:/" \ 124 sed -e "s/^FAILED://" -e "s/^/ /"
105 -e "s/\[ FAILED \] //" -e "s/ ([0-9]\+ ms)//" -e "s/^/ /"
106 # Don't put any operators between "grep | sed" and "RESULT=$PIPESTATUS" 125 # Don't put any operators between "grep | sed" and "RESULT=$PIPESTATUS"
107 RESULT=$PIPESTATUS 126 RESULT=$PIPESTATUS
108 127
109 if [ "$RESULT" == 1 ] 128 if [ "$RESULT" == 1 ]
110 then 129 then
111 echo " None!" 130 echo " None!"
112 else 131 else
113 echo 132 echo
114 echo " Note: we don't check for failures already excluded locally yet" 133 echo " Note: we don't check for failures already excluded locally yet"
115 echo " TODO(timurrrr): don't list tests we've already excluded locally" 134 echo " TODO(timurrrr): don't list tests we've already excluded locally"
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 find_blame "$2" "$3" "$4" 254 find_blame "$2" "$3" "$4"
236 else 255 else
237 THISNAME=$(basename "${0}") 256 THISNAME=$(basename "${0}")
238 echo "Usage: $THISNAME fetch|match|blame <builder> <test> <hash>" 257 echo "Usage: $THISNAME fetch|match|blame <builder> <test> <hash>"
239 echo " fetch - Fetch Valgrind logs from the memory waterfall" 258 echo " fetch - Fetch Valgrind logs from the memory waterfall"
240 echo " match - Test the local suppression files against the downloaded logs" 259 echo " match - Test the local suppression files against the downloaded logs"
241 echo " blame - Return the blame list for the revision where the suppression" 260 echo " blame - Return the blame list for the revision where the suppression"
242 echo " <hash> occured for the first time in the log for <test> on" 261 echo " <hash> occured for the first time in the log for <test> on"
243 echo " <builder>" 262 echo " <builder>"
244 fi 263 fi
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698