| 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['master_name'] = findit.masterName; |
| 61 parameters['builder_name'] = findit.builderName; |
| 62 parameters['build_number'] = {{ build_number }}; |
| 63 parameters['step_name'] = encodeURIComponent("{{ step_name }}"); |
| 64 parameters['test_name'] = encodeURIComponent("{{ test_name }}"); |
| 65 parameters['version_number'] = {{ version_number }}; |
| 66 parameters['suspected_build_number'] = {{ suspected_flake.build_number }}; |
| 67 parameters['triage_result'] = triageResult; |
| 68 return parameters |
| 69 } |
| 70 |
| 71 function createTriageUrl(parameters) { |
| 72 var params = []; |
| 73 for(var key in parameters) { |
| 74 if (parameters[key] != undefined) { |
| 75 params.push(key + '=' + parameters[key]) |
| 76 } |
| 77 } |
| 78 |
| 79 if (params.length == 0) { |
| 80 return '/waterfall/triage-flake-analysis' |
| 81 } else { |
| 82 return '/waterfall/triage-flake-analysis?' + params.join('&'); |
| 83 } |
| 84 }; |
| 85 |
| 58 function DrawFlakeTrend() { | 86 function DrawFlakeTrend() { |
| 59 if (findit.passRates.length == 0) { | 87 if (findit.passRates.length == 0) { |
| 60 $('#flake-data').html('No data available yet.'); | 88 $('#flake-data').html('No data available yet.'); |
| 61 return; | 89 return; |
| 62 } | 90 } |
| 63 | 91 |
| 64 var not_run_data = []; | 92 var not_run_data = []; |
| 65 var run_data = []; | 93 var run_data = []; |
| 66 $.each(findit.passRates, function(index, value) { | 94 $.each(findit.passRates, function(index, value) { |
| 67 // Convert pass rate from [0, 1] to a percentage. | 95 // Convert pass rate from [0, 1] to a percentage. |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 } | 205 } |
| 178 }); | 206 }); |
| 179 | 207 |
| 180 $.each(run_data, function(index, value) { | 208 $.each(run_data, function(index, value) { |
| 181 if (value[0] == findit.regressedBuildNumber) | 209 if (value[0] == findit.regressedBuildNumber) |
| 182 plot.highlight(run_data_sery_index, index); | 210 plot.highlight(run_data_sery_index, index); |
| 183 }); | 211 }); |
| 184 } | 212 } |
| 185 | 213 |
| 186 function triageSuspectedFlake(e) { | 214 function triageSuspectedFlake(e) { |
| 187 $.getJSON('/waterfall/triage-flake-analysis?flake_info=' + e.name + '&tria
ge_result=' + e.value, function(data) { | 215 $.getJSON(createTriageUrl(getTriageParameters(e.value)), function(data) { |
| 188 if (! data['success']) { | 216 if (! data['success']) { |
| 189 alert('Failed to update datastore. Please refresh and try again.'); | 217 alert('Failed to update datastore. Please refresh and try again.'); |
| 190 } else { | 218 } else { |
| 191 $('#flake_result_triaged').html('Result has been recorded. Thank you.'
) | 219 $('#flake_result_triaged').html('Result has been recorded. Thank you.'
) |
| 192 } | 220 } |
| 193 }).error(function(xhr) { | 221 }).error(function(xhr) { |
| 194 // Replace the whole page with errors from server side. | 222 // Replace the whole page with errors from server side. |
| 195 document.body.outerHTML = xhr.responseText; | 223 document.body.outerHTML = xhr.responseText; |
| 196 }); | 224 }); |
| 197 } | 225 } |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 {% if suspected_flake %} | 273 {% if suspected_flake %} |
| 246 <b>Feedback:</b> | 274 <b>Feedback:</b> |
| 247 <table class="triage-table"> | 275 <table class="triage-table"> |
| 248 <tr> | 276 <tr> |
| 249 <th class="triage-header" title="The test became flaky at this build">
Suspected Build</th> | 277 <th class="triage-header" title="The test became flaky at this build">
Suspected Build</th> |
| 250 <th class="triage-header">Feedback</th> | 278 <th class="triage-header">Feedback</th> |
| 251 </tr> | 279 </tr> |
| 252 <tr> | 280 <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> | 281 <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"> | 282 <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 %} | 283 {% if suspected_flake.triage_result == 1 %} |
| 256 {% if suspected_flake.triage_result == 1 %} | 284 <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 | 285 <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 | 286 {% elif suspected_flake.triage_result == 2 %} |
| 259 {% elif suspected_flake.triage_result == 2 %} | 287 <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 | 288 <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 | 289 {% else %} |
| 262 {% else %} | 290 <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 | 291 <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 | 292 {% endif %} |
| 265 {% endif %} | |
| 266 </td> | 293 </td> |
| 267 </tr> | 294 </tr> |
| 268 </table> | 295 </table> |
| 269 {% endif %} | 296 {% endif %} |
| 270 <div id="flake_result_triaged"></div> | 297 <div id="flake_result_triaged"></div> |
| 271 </div> | 298 </div> |
| 272 | 299 |
| 273 {% if show_debug_info and triage_history %} | 300 {% if show_debug_info and triage_history %} |
| 274 <br> | 301 <br> |
| 275 <b>Triage history:</b> | 302 <b>Triage history:</b> |
| (...skipping 15 matching lines...) Expand all Loading... |
| 291 <td class="triage-cell">{{ triage_record.triage_result }}</td> | 318 <td class="triage-cell">{{ triage_record.triage_result }}</td> |
| 292 <td class="triage-cell">{{ triage_record.version_number }}</td> | 319 <td class="triage-cell">{{ triage_record.version_number }}</td> |
| 293 </tr> | 320 </tr> |
| 294 {% endfor %} | 321 {% endfor %} |
| 295 </tbody> | 322 </tbody> |
| 296 </table> | 323 </table> |
| 297 </div> | 324 </div> |
| 298 {% endif %} | 325 {% endif %} |
| 299 </body> | 326 </body> |
| 300 </html> | 327 </html> |
| OLD | NEW |