| OLD | NEW |
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <head> | 2 <head> |
| 3 <meta charset="UTF-8"> | 3 <meta charset="UTF-8"> |
| 4 <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"> | 4 <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"> |
| 5 <title> Analysis of Flaky Test</title> | 5 <title> Analysis of Flaky Test</title> |
| 6 <style type="text/css"> | 6 <style type="text/css"> |
| 7 .container { | 7 .container { |
| 8 box-sizing: border-box; | 8 box-sizing: border-box; |
| 9 width: 600px; | 9 width: 600px; |
| 10 height: 300px; | 10 height: 300px; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 48 <script src="https://cdnjs.cloudflare.com/ajax/libs/flot/0.8.3/jquery.flot.min
.js"></script> | 48 <script src="https://cdnjs.cloudflare.com/ajax/libs/flot/0.8.3/jquery.flot.min
.js"></script> |
| 49 <script src="https://cdnjs.cloudflare.com/ajax/libs/flot/0.8.3/jquery.flot.res
ize.js"></script> | 49 <script src="https://cdnjs.cloudflare.com/ajax/libs/flot/0.8.3/jquery.flot.res
ize.js"></script> |
| 50 <script src="https://cdnjs.cloudflare.com/ajax/libs/flot/0.8.3/jquery.flot.sym
bol.js"></script> | 50 <script src="https://cdnjs.cloudflare.com/ajax/libs/flot/0.8.3/jquery.flot.sym
bol.js"></script> |
| 51 <script type="text/javascript"> | 51 <script type="text/javascript"> |
| 52 var findit = {}; | 52 var findit = {}; |
| 53 findit.masterName = "{{ master_name }}"; | 53 findit.masterName = "{{ master_name }}"; |
| 54 findit.builderName = "{{ builder_name }}"; | 54 findit.builderName = "{{ builder_name }}"; |
| 55 findit.regressedBuildNumber = {{ suspected_flake.build_number or -1 }}; | 55 findit.regressedBuildNumber = {{ suspected_flake.build_number or -1 }}; |
| 56 findit.passRates = {{ pass_rates | tojson | safe }}; | 56 findit.passRates = {{ pass_rates | tojson | safe }}; |
| 57 | 57 |
| 58 function getTriageParameters(triageResult) { |
| 59 parameters = {} |
| 60 parameters['key'] = "{{ key }}"; |
| 61 parameters['triage_result'] = triageResult; |
| 62 return parameters |
| 63 } |
| 64 |
| 65 function createTriageUrl(parameters) { |
| 66 var params = []; |
| 67 for(var key in parameters) { |
| 68 if (parameters[key] != undefined) { |
| 69 params.push(key + '=' + parameters[key]) |
| 70 } |
| 71 } |
| 72 |
| 73 if (params.length == 0) { |
| 74 return '/waterfall/triage-flake-analysis' |
| 75 } else { |
| 76 return '/waterfall/triage-flake-analysis?' + params.join('&'); |
| 77 } |
| 78 }; |
| 79 |
| 58 function DrawFlakeTrend() { | 80 function DrawFlakeTrend() { |
| 59 if (findit.passRates.length == 0) { | 81 if (findit.passRates.length == 0) { |
| 60 $('#flake-data').html('No data available yet.'); | 82 $('#flake-data').html('No data available yet.'); |
| 61 return; | 83 return; |
| 62 } | 84 } |
| 63 | 85 |
| 64 var not_run_data = []; | 86 var not_run_data = []; |
| 65 var run_data = []; | 87 var run_data = []; |
| 66 $.each(findit.passRates, function(index, value) { | 88 $.each(findit.passRates, function(index, value) { |
| 67 // Convert pass rate from [0, 1] to a percentage. | 89 // Convert pass rate from [0, 1] to a percentage. |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 } | 199 } |
| 178 }); | 200 }); |
| 179 | 201 |
| 180 $.each(run_data, function(index, value) { | 202 $.each(run_data, function(index, value) { |
| 181 if (value[0] == findit.regressedBuildNumber) | 203 if (value[0] == findit.regressedBuildNumber) |
| 182 plot.highlight(run_data_sery_index, index); | 204 plot.highlight(run_data_sery_index, index); |
| 183 }); | 205 }); |
| 184 } | 206 } |
| 185 | 207 |
| 186 function triageSuspectedFlake(e) { | 208 function triageSuspectedFlake(e) { |
| 187 $.getJSON('/waterfall/triage-flake-analysis?flake_info=' + e.name + '&tria
ge_result=' + e.value, function(data) { | 209 $.getJSON(createTriageUrl(getTriageParameters(e.value)), function(data) { |
| 188 if (! data['success']) { | 210 if (! data['success']) { |
| 189 alert('Failed to update datastore. Please refresh and try again.'); | 211 alert('Failed to update datastore. Please refresh and try again.'); |
| 190 } else { | 212 } else { |
| 191 $('#flake_result_triaged').html('Result has been recorded. Thank you.'
) | 213 $('#flake_result_triaged').html('Result has been recorded. Thank you.'
) |
| 192 } | 214 } |
| 193 }).error(function(xhr) { | 215 }).error(function(xhr) { |
| 194 // Replace the whole page with errors from server side. | 216 // Replace the whole page with errors from server side. |
| 195 document.body.outerHTML = xhr.responseText; | 217 document.body.outerHTML = xhr.responseText; |
| 196 }); | 218 }); |
| 197 } | 219 } |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 {% if suspected_flake %} | 267 {% if suspected_flake %} |
| 246 <b>Feedback:</b> | 268 <b>Feedback:</b> |
| 247 <table class="triage-table"> | 269 <table class="triage-table"> |
| 248 <tr> | 270 <tr> |
| 249 <th class="triage-header" title="The test became flaky at this build">
Suspected Build</th> | 271 <th class="triage-header" title="The test became flaky at this build">
Suspected Build</th> |
| 250 <th class="triage-header">Feedback</th> | 272 <th class="triage-header">Feedback</th> |
| 251 </tr> | 273 </tr> |
| 252 <tr> | 274 <tr> |
| 253 <td class="triage-cell"><a href="https://build.chromium.org/p/{{ maste
r_name }}/builders/{{ builder_name }}/builds/{{ suspected_flake.build_number }}"
target="_blank">{{ suspected_flake.build_number }}</a></a></td> | 275 <td class="triage-cell"><a href="https://build.chromium.org/p/{{ maste
r_name }}/builders/{{ builder_name }}/builds/{{ suspected_flake.build_number }}"
target="_blank">{{ suspected_flake.build_number }}</a></a></td> |
| 254 <td class="triage-cell"> | 276 <td class="triage-cell"> |
| 255 {% set flake_info = master_name + '/' + builder_name + '/' + build_n
umber | string + '/' + step_name + '/' + test_name + '/' + version_number | stri
ng + '/' + suspected_flake.build_number | string %} | 277 {% if suspected_flake.triage_result == 1 %} |
| 256 {% if suspected_flake.triage_result == 1 %} | 278 <input type="radio" name="triage-radio-button" value="2" onchange=
"triageSuspectedFlake(this)">Correct |
| 257 <input type="radio" name="{{ flake_info }}" value="2" onchange="
triageSuspectedFlake(this)">Correct | 279 <input type="radio" name="triage-radio-button" value="1" checked="
checked" onchange= "triageSuspectedFlake(this)">Incorrect |
| 258 <input type="radio" name="{{ flake_info }}" value="1" checked="c
hecked"onchange= "triageSuspectedFlake(this)">Incorrect | 280 {% elif suspected_flake.triage_result == 2 %} |
| 259 {% elif suspected_flake.triage_result == 2 %} | 281 <input type="radio" name="triage-radio-button" value="2" checked="
checked" onchange="triageSuspectedFlake(this)">Correct |
| 260 <input type="radio" name="{{ flake_info }}" value="2" checked="c
hecked" onchange="triageSuspectedFlake(this)">Correct | 282 <input type="radio" name="triage-radio-button" value="1" onchange=
"triageSuspectedFlake(this)">Incorrect |
| 261 <input type="radio" name="{{ flake_info }}" value="1" onchange=
"triageSuspectedFlake(this)">Incorrect | 283 {% else %} |
| 262 {% else %} | 284 <input type="radio" name="triage-radio-button" value="2" onchange=
"triageSuspectedFlake(this)">Correct |
| 263 <input type="radio" name="{{ flake_info }}" value="2" onchange="
triageSuspectedFlake(this)">Correct | 285 <input type="radio" name="triage-radio-button" value="1" onchange=
"triageSuspectedFlake(this)">Incorrect |
| 264 <input type="radio" name="{{ flake_info }}" value="1" onchange=
"triageSuspectedFlake(this)">Incorrect | 286 {% endif %} |
| 265 {% endif %} | |
| 266 </td> | 287 </td> |
| 267 </tr> | 288 </tr> |
| 268 </table> | 289 </table> |
| 269 {% endif %} | 290 {% endif %} |
| 270 <div id="flake_result_triaged"></div> | 291 <div id="flake_result_triaged"></div> |
| 271 </div> | 292 </div> |
| 272 | 293 |
| 273 {% if show_debug_info and triage_history %} | 294 {% if show_debug_info and triage_history %} |
| 274 <br> | 295 <br> |
| 275 <b>Triage history:</b> | 296 <b>Triage history:</b> |
| (...skipping 15 matching lines...) Expand all Loading... |
| 291 <td class="triage-cell">{{ triage_record.triage_result }}</td> | 312 <td class="triage-cell">{{ triage_record.triage_result }}</td> |
| 292 <td class="triage-cell">{{ triage_record.version_number }}</td> | 313 <td class="triage-cell">{{ triage_record.version_number }}</td> |
| 293 </tr> | 314 </tr> |
| 294 {% endfor %} | 315 {% endfor %} |
| 295 </tbody> | 316 </tbody> |
| 296 </table> | 317 </table> |
| 297 </div> | 318 </div> |
| 298 {% endif %} | 319 {% endif %} |
| 299 </body> | 320 </body> |
| 300 </html> | 321 </html> |
| OLD | NEW |