| OLD | NEW |
| (Empty) |
| 1 {% extends "swarming/base.html" %} | |
| 2 | |
| 3 | |
| 4 {% block headers %} | |
| 5 <style> | |
| 6 h1 { | |
| 7 margin-top: 10px; | |
| 8 margin-bottom: 10px; | |
| 9 } | |
| 10 | |
| 11 h2 { | |
| 12 margin-top: 10px; | |
| 13 margin-bottom: 5px; | |
| 14 } | |
| 15 | |
| 16 h2.inline { | |
| 17 display: inline; | |
| 18 } | |
| 19 | |
| 20 table.property_table { | |
| 21 font-family: monospace; | |
| 22 border-spacing: 0; | |
| 23 } | |
| 24 | |
| 25 table.property_table tbody tr:nth-child(even) { | |
| 26 background-color: #eeeeee; | |
| 27 } | |
| 28 | |
| 29 table.property_table td { | |
| 30 padding-left: 0.5em; | |
| 31 padding-right: 0.5em; | |
| 32 } | |
| 33 | |
| 34 table.property_table tbody tr:hover { | |
| 35 background-color: #eeffee; | |
| 36 } | |
| 37 | |
| 38 table.property_table tbody tr td:first-child { | |
| 39 white-space: nowrap; | |
| 40 } | |
| 41 | |
| 42 .failed_test { | |
| 43 background-color: #ffdddd; | |
| 44 } | |
| 45 | |
| 46 .blink { | |
| 47 animation: blink 1s steps(5, start) infinite; | |
| 48 -webkit-animation: blink 1s steps(5, start) infinite; | |
| 49 } | |
| 50 @keyframes blink { | |
| 51 to { visibility: hidden; } | |
| 52 } | |
| 53 @-webkit-keyframes blink { | |
| 54 to { visibility: hidden; } | |
| 55 } | |
| 56 | |
| 57 .highlight_section { | |
| 58 background-color: #ffffee; | |
| 59 border-radius: 20px; | |
| 60 padding: 5px; | |
| 61 } | |
| 62 | |
| 63 .code { | |
| 64 font-family: monospace; | |
| 65 white-space: pre-wrap; | |
| 66 } | |
| 67 | |
| 68 .spaced { | |
| 69 margin-top: 10px; | |
| 70 margin-bottom: 5px; | |
| 71 } | |
| 72 | |
| 73 .package-list { | |
| 74 margin-left: 1em; | |
| 75 } | |
| 76 | |
| 77 .package-pin-name { | |
| 78 font-weight: bold; | |
| 79 } | |
| 80 | |
| 81 .package-pin-version { | |
| 82 color: blue; | |
| 83 } | |
| 84 </style> | |
| 85 {% endblock %} | |
| 86 | |
| 87 | |
| 88 {% block body %} | |
| 89 {% import 'swarming/bot_view.html' as bot_view %} | |
| 90 | |
| 91 | |
| 92 {% macro summarize_array(values) %} | |
| 93 {% if not values %} | |
| 94 ‑‑ | |
| 95 {% else %} | |
| 96 {{values|sum|filesizeformat}} total; {{values|length}} items; | |
| 97 {% if values|length <= 10 %} | |
| 98 ({{values|map('filesizeformat')|join('; ')}}) | |
| 99 {% else %} | |
| 100 ({{values[0]|filesizeformat}}; {{values[1]|filesizeformat}}; {{values[2]|f
ilesizeformat}}; {{values[3]|filesizeformat}}; {{values[4]|filesizeformat}}; ...
; {{values[-5]|filesizeformat}}; {{values[-4]|filesizeformat}}; {{values[-3]|fil
esizeformat}}; {{values[-2]|filesizeformat}}; {{values[-1]|filesizeformat}}) | |
| 101 {% endif %} | |
| 102 {% endif %} | |
| 103 {% endmacro %} | |
| 104 | |
| 105 | |
| 106 <h1>Task summary</h1> | |
| 107 <a href="/user/tasks">Back to tasks list</a> | |
| 108 <br/> | |
| 109 <a href="{{try_link}}">Try out the new task page UI</a> | |
| 110 <p> | |
| 111 | |
| 112 <div title="Information about the request itself that doesn't include what is be
ing run; it's about the context and description."> | |
| 113 <h2>Request metadata</h2> | |
| 114 <table class="property_table"> | |
| 115 <tbody> | |
| 116 <tr title="Name of the task, used for display purpose only."> | |
| 117 <td>Name</td> | |
| 118 <td>{{request.name}}</td> | |
| 119 </tr> | |
| 120 <tr title="Who triggered this task, as reported by the client."> | |
| 121 <td>User</td> | |
| 122 <td> | |
| 123 {% if request.user %} | |
| 124 {{request.user}} | |
| 125 {% else %} | |
| 126 ‑‑ | |
| 127 {% endif %} | |
| 128 </td> | |
| 129 </tr> | |
| 130 <tr title="Authenticated credential used by the client to trigger this tas
k."> | |
| 131 <td>Authenticated</td> | |
| 132 <td> | |
| 133 {# The only reason for this condition is to not crash on older | |
| 134 entities. #} | |
| 135 {% if request.authenticated %} | |
| 136 {{request.authenticated.to_bytes()}} | |
| 137 {% else %} | |
| 138 ‑‑ | |
| 139 {% endif %} | |
| 140 </td> | |
| 141 </tr> | |
| 142 <tr title="What credentials that task is using when calling other services
."> | |
| 143 <td>Running as</td> | |
| 144 <td> | |
| 145 {% if request.service_account and request.service_account != 'none' %} | |
| 146 {{request.service_account}} | |
| 147 {% else %} | |
| 148 ‑‑ | |
| 149 {% endif %} | |
| 150 </td> | |
| 151 </tr> | |
| 152 <tr title="Task priority is between 1 and 255, lower value is higher prior
ity. Higher priority requests are executed first."> | |
| 153 <td>Priority</td> | |
| 154 <td>{{request.priority}}</td> | |
| 155 </tr> | |
| 156 <tr title="When the request was done by the client."> | |
| 157 <td>Created</td> | |
| 158 <td>{{request.created_ts|datetimeformat}}</td> | |
| 159 </tr> | |
| 160 <tr title="When this request becomes so old it's not even worth handing to
a bot. It may happen to low priority on a busy fleet."> | |
| 161 <td>Expiration</td> | |
| 162 <td> | |
| 163 {{request.expiration_ts|datetimeformat}} | |
| 164 ({{(request.expiration_ts-request.created_ts)|timedeltaformat}}) | |
| 165 </td> | |
| 166 </tr> | |
| 167 <tr title="Tags used for searching and/or analyzing groups of tasks."> | |
| 168 <td>Tags</td> | |
| 169 <td>{{request.tags|join('<br>'|safe)}}</td> | |
| 170 </tr> | |
| 171 {% if request.pubsub_topic %} | |
| 172 <tr title="PubSub topic notified about task completion."> | |
| 173 <td>Pubsub topic</td> | |
| 174 <td>{{request.pubsub_topic}}</td> | |
| 175 </tr> | |
| 176 <tr title="Data passed along with PubSub notification."> | |
| 177 <td>Pubsub data</td> | |
| 178 <td> | |
| 179 {% if request.pubsub_userdata %} | |
| 180 {{request.pubsub_userdata}} | |
| 181 {% else %} | |
| 182 ‑‑ | |
| 183 {% endif %} | |
| 184 </td> | |
| 185 </tr> | |
| 186 {% endif %} | |
| 187 <tr title="Parent task that created this task."> | |
| 188 <td>Parent task</td> | |
| 189 <td> | |
| 190 {% if parent_task %} | |
| 191 <a href="/user/task/{{parent_task.task_id}}">{{parent_task.name}}</a
> | |
| 192 {% else %} | |
| 193 ‑‑ | |
| 194 {% endif %} | |
| 195 </td> | |
| 196 </tr> | |
| 197 </tbody> | |
| 198 </table> | |
| 199 </div> | |
| 200 | |
| 201 <div title="Information about what was asked to be run. This is what is used for
task deduplication."> | |
| 202 {% if request.properties.is_terminate %} | |
| 203 <div class="spaced"> | |
| 204 <h2 class="inline">Bot termination request</h2> | |
| 205 </div> | |
| 206 <table class="property_table"> | |
| 207 <tbody> | |
| 208 <tr title="The request dimensions is the minimum set of properties a bot
must advertise to be able to execute this task."> | |
| 209 <td>Bot</td> | |
| 210 <td>{{request.properties.dimensions['id']}}</td> | |
| 211 </tr> | |
| 212 </tbody> | |
| 213 </table> | |
| 214 {% else %} | |
| 215 <div class="spaced"> | |
| 216 <h2 class="inline">Request properties</h2> | |
| 217 {% if is_privileged_user %} | |
| 218 <form method="POST" action="/user/task/{{task.task_id}}/retry" style="di
splay:inline"> | |
| 219 <input type="submit" value="Retry" style="display:inline"></input> | |
| 220 <input type="hidden" name="xsrf_token" value="{{xsrf_token}}" /> | |
| 221 </form> | |
| 222 {% endif %} | |
| 223 </div> | |
| 224 <table class="property_table"> | |
| 225 <tbody> | |
| 226 <tr title="The request dimensions is the minimum set of properties a bot
must advertise to be able to execute this task."> | |
| 227 <td>Request dims</td> | |
| 228 <td>{{bot_view.render_dict(request.properties.dimensions)}}</td> | |
| 229 </tr> | |
| 230 <tr title="The maximum number of seconds that the command may use, other
wise it is forcibly killed."> | |
| 231 <td>Exec timeout</td> | |
| 232 <td>{{request.properties.execution_timeout_secs}}</td> | |
| 233 </tr> | |
| 234 <tr title="The maximum number of seconds that the command may not output
any stdout in a single shot."> | |
| 235 <td>I/O timeout</td> | |
| 236 <td>{{request.properties.io_timeout_secs}}</td> | |
| 237 </tr> | |
| 238 <tr title="Additional environment variables to the one provided by the b
ot."> | |
| 239 <td>Env vars</td> | |
| 240 <td>{{bot_view.render_dict(request.properties.env)}}</td> | |
| 241 </tr> | |
| 242 <tr title="If True, successful task results may be reused for subsequent
requests, so the task can be deduped."> | |
| 243 <td>Idempotent</td> | |
| 244 <td>{{request.properties.idempotent}}</td> | |
| 245 </tr> | |
| 246 {% if cipd %} | |
| 247 <tr title="CIPD server"> | |
| 248 <td>CIPD server</td> | |
| 249 <td>{{cipd.server}}</td> | |
| 250 </tr> | |
| 251 <tr title="CIPD client"> | |
| 252 <td>CIPD client</td> | |
| 253 <td>{{cipd.client_package}}</td> | |
| 254 </tr> | |
| 255 {% if cipd.packages %} | |
| 256 <tr title="CIPD packages"> | |
| 257 <td>CIPD packages</td> | |
| 258 <td> | |
| 259 {% for path, packages in cipd.packages %} | |
| 260 <div>{{path or '.'}}/</div> | |
| 261 <div class="package-list"> | |
| 262 {{packages|join('<br>'|safe)}} | |
| 263 </div> | |
| 264 {% endfor %} | |
| 265 </td> | |
| 266 </tr> | |
| 267 {% endif %} | |
| 268 {% endif %} | |
| 269 | |
| 270 {% if request.properties.caches %} | |
| 271 <tr title="Named caches"> | |
| 272 <td>Named caches</td> | |
| 273 <td> | |
| 274 {% for cache in request.properties.caches %} | |
| 275 <div> | |
| 276 <span>{{cache.name}}</span>:<span>{{cache.path}}</span> | |
| 277 </div> | |
| 278 {% endfor %} | |
| 279 </td> | |
| 280 </tr> | |
| 281 {% endif %} | |
| 282 | |
| 283 {% if request.properties.inputs_ref and request.properties.inputs_ref.is
olated %} | |
| 284 <tr title="Inputs files"> | |
| 285 <td>Isolated inputs</td> | |
| 286 <td> | |
| 287 <a | |
| 288 href="{{request.properties.inputs_ref.isolatedserver}}/browse?na
mespace={{request.properties.inputs_ref.namespace}}&hash={{request.properties.in
puts_ref.isolated}}"> | |
| 289 {{request.properties.inputs_ref.isolated}} | |
| 290 </a> | |
| 291 </td> | |
| 292 </tr> | |
| 293 <tr title="Extra arguments if applicable"> | |
| 294 <td>Extra args</td> | |
| 295 <td> | |
| 296 {{request.properties.extra_args|join(' ')}}<br> | |
| 297 </td> | |
| 298 </tr> | |
| 299 <tr title="Expected output files"> | |
| 300 <td>Expected outputs</td> | |
| 301 <td> | |
| 302 {% for output in request.properties.outputs %} | |
| 303 {{output}}<br/> | |
| 304 {% endfor %} | |
| 305 </td> | |
| 306 </tr> | |
| 307 {% else %} | |
| 308 {# Raw command #} | |
| 309 <tr title="Actual command executed by the bot."> | |
| 310 <td>Commands</td> | |
| 311 <td> | |
| 312 {% if request.properties.commands %} | |
| 313 {{request.properties.commands[0]|join(' ')}}<br> | |
| 314 {% elif request.properties.command %} | |
| 315 {{request.properties.command|join(' ')}}<br> | |
| 316 {% else %} | |
| 317 ‑‑ | |
| 318 {% endif %} | |
| 319 </td> | |
| 320 </tr> | |
| 321 {% endif %} | |
| 322 <tr title="Secret bytes"> | |
| 323 <td>Secret bytes</td> | |
| 324 <td> | |
| 325 {% if request.properties.has_secret_bytes %} | |
| 326 <strong><REDACTED></strong> | |
| 327 {% else %} | |
| 328 ‑‑ | |
| 329 {% endif %} | |
| 330 </td> | |
| 331 </tr> | |
| 332 </tbody> | |
| 333 </table> | |
| 334 {% endif %} | |
| 335 </div> | |
| 336 | |
| 337 <div title="Information about the result: the task was run where (which bot), wh
en and what is the result."> | |
| 338 <h2>Execution</h2> | |
| 339 <table class="property_table"> | |
| 340 <tbody> | |
| 341 <tr title="The previous task executed by this bot before this task, if any
."> | |
| 342 <td>Previous task</td> | |
| 343 <td> | |
| 344 {% if previous_task %} | |
| 345 <a href="/user/task/{{previous_task.task_id}}"> | |
| 346 ← {{previous_task.name}} | |
| 347 </a> | |
| 348 {% else %} | |
| 349 ‑‑ | |
| 350 {% endif %} | |
| 351 </td> | |
| 352 </tr> | |
| 353 <tr title="Link to the bot that executed this task, if any."> | |
| 354 <td>Bot</td> | |
| 355 <td>{{bot_view.bot_link(task.bot_id, is_privileged_user)}}</td> | |
| 356 </tr> | |
| 357 <tr title="The next task executed by this bot, if any."> | |
| 358 <td>Following task</td> | |
| 359 <td> | |
| 360 {% if following_task %} | |
| 361 <a href="/user/task/{{following_task.task_id}}"> | |
| 362 {{following_task.name}} → | |
| 363 </a> | |
| 364 {% else %} | |
| 365 ‑‑ | |
| 366 {% endif %} | |
| 367 </td> | |
| 368 </tr> | |
| 369 <tr class="{% if task.is_exceptional %}failed_test{% endif%}" | |
| 370 title="Current state of the task, may be pending, running, completed, bo
t_died, expired, canceled."> | |
| 371 <td>State</td> | |
| 372 <td> | |
| 373 {{task.to_string()}} ({{task.state}}) | |
| 374 {% if task.can_be_canceled %} | |
| 375 <form id="cancel" method="POST" | |
| 376 action="/user/task/{{task.task_id}}/cancel" | |
| 377 style="display:inline"> | |
| 378 <input type="hidden" name="xsrf_token" value="{{xsrf_token}}" /> | |
| 379 <input type="submit" value="Cancel" style="display:inline"></input
> | |
| 380 </form> | |
| 381 {% endif %} | |
| 382 </td> | |
| 383 </tr> | |
| 384 <tr title="When the bot was handed this task."> | |
| 385 <td>Started</td> | |
| 386 <td>{{task.started_ts|datetimeformat}}</td> | |
| 387 </tr> | |
| 388 <tr title="When the task was completed, if done."> | |
| 389 <td>Completed</td> | |
| 390 <td>{{task.completed_ts|datetimeformat}}</td> | |
| 391 </tr> | |
| 392 <tr title="Moment where the task was declared a failure by the server due
to internal error or expiration."> | |
| 393 <td>Abandoned</td> | |
| 394 <td> | |
| 395 {{task.abandoned_ts|datetimeformat}} | |
| 396 {% if task.abandoned_ts %} | |
| 397 {% if task.started_ts %} | |
| 398 ({{(task.abandoned_ts-task.started_ts)|timedeltaformat}} since tas
k started) | |
| 399 {% else %} | |
| 400 ({{(task.abandoned_ts-request.created_ts)|timedeltaformat}} since
task request) | |
| 401 {% endif %} | |
| 402 {% endif %} | |
| 403 </td> | |
| 404 </tr> | |
| 405 <tr class="{% if task.exit_code %}failed_test{% endif%}" | |
| 406 title="Process exit code for each commands executed on the bot."> | |
| 407 <td>Exit code</td> | |
| 408 <td>{{task.exit_code}}</td> | |
| 409 </tr> | |
| 410 <tr title="Outputs files"> | |
| 411 <td>Isolated outputs</td> | |
| 412 <td> | |
| 413 {% if task.outputs_ref %} | |
| 414 <a | |
| 415 href="{{task.outputs_ref.isolatedserver}}/browse?namespace={{task.
outputs_ref.namespace}}&hash={{task.outputs_ref.isolated}}"> | |
| 416 {{task.outputs_ref.isolated}} | |
| 417 </a> | |
| 418 {% else %} | |
| 419 ‑‑ | |
| 420 {% endif %} | |
| 421 </td> | |
| 422 </tr> | |
| 423 <tr title="Children tasks that were created by this task."> | |
| 424 <td>Children tasks</td> | |
| 425 <td> | |
| 426 {% if children_tasks %} | |
| 427 {% for children in children_tasks %} | |
| 428 <a href="/user/task/{{children.task_id}}">{{children.name}}</a> | |
| 429 <br> | |
| 430 {% endfor %} | |
| 431 {% else %} | |
| 432 ‑‑ | |
| 433 {% endif %} | |
| 434 </td> | |
| 435 </tr> | |
| 436 <tr title="This task was not executed, results from the task listed here w
ere reused as-is."> | |
| 437 <td> | |
| 438 {% if task.deduped_from %} | |
| 439 <strong>Was deduped from</strong> | |
| 440 {% else %} | |
| 441 Was deduped from | |
| 442 {% endif %} | |
| 443 </td> | |
| 444 <td> | |
| 445 {% if task.deduped_from %} | |
| 446 <a href="/user/task/{{task.deduped_from}}">{{task.deduped_from}}</a> | |
| 447 {% else %} | |
| 448 ‑‑ | |
| 449 {% endif %} | |
| 450 </td> | |
| 451 </tr> | |
| 452 <tr class="{% if task.internal_failure %}failed_test{% endif%}" | |
| 453 title="True if an internal Swarming error occured for this task. A BSOD
is considered an internal failure."> | |
| 454 <td>Internal failure</td> | |
| 455 <td>{{task.internal_failure}}</td> | |
| 456 </tr> | |
| 457 <tr title="A task may be tried 2 times. This list the try number starting
at 1."> | |
| 458 <td>Try number</td> | |
| 459 <td>{{task.try_number}}</td> | |
| 460 </tr> | |
| 461 <tr title="Last time this bot sent an update about this task."> | |
| 462 <td>Last updated</td> | |
| 463 <td>{{(now-task.modified_ts)|timedeltaformat}} ago</td> | |
| 464 </tr> | |
| 465 <tr title="Current bot dimensions."> | |
| 466 <td>Bot dimensions</td> | |
| 467 <td> | |
| 468 {% if task.bot_dimensions %} | |
| 469 {{bot_view.render_dict(task.bot_dimensions)}} | |
| 470 {% else %} | |
| 471 {{bot_view.bot_dimensions(bot)}} | |
| 472 {% endif %} | |
| 473 </td> | |
| 474 </tr> | |
| 475 {% if cipd_pins %} | |
| 476 <tr title="CIPD client"> | |
| 477 <td>CIPD client</td> | |
| 478 <td>{{cipd_pins.client_package}}</td> | |
| 479 </tr> | |
| 480 {% if cipd_pins.packages %} | |
| 481 <tr title="CIPD packages"> | |
| 482 <td>CIPD packages</td> | |
| 483 <td> | |
| 484 {% for path, packages in cipd_pins.packages %} | |
| 485 <div>{{path or '.'}}/</div> | |
| 486 <div class="package-list"> | |
| 487 {{packages|join('<br>'|safe)}} | |
| 488 </div> | |
| 489 {% endfor %} | |
| 490 </td> | |
| 491 </tr> | |
| 492 {% endif %} | |
| 493 {% endif %} | |
| 494 <tr title="Current bot version. TODO(maruel): List bot version at time of
task reaping."> | |
| 495 <td>Bot version</td> | |
| 496 <td>{{task.bot_version}}</td> | |
| 497 </tr> | |
| 498 <tr title="List of server versions that touched this task."> | |
| 499 <td>Server version</td> | |
| 500 <td> | |
| 501 {% for v in task.server_versions %} | |
| 502 {% if is_gae_admin %} | |
| 503 <a href="https://appengine.google.com/logs?&app_id={{full_appid}}&
version_id={{v}}"> | |
| 504 {{v}} | |
| 505 </a> | |
| 506 {% else %} | |
| 507 {{v}} | |
| 508 {% endif %} | |
| 509 {% endfor %} | |
| 510 </td> | |
| 511 </tr> | |
| 512 </tbody> | |
| 513 </table> | |
| 514 </div> | |
| 515 | |
| 516 <div title="Information about how fast we got the results."> | |
| 517 <h2>Performance</h2> | |
| 518 <table class="property_table"> | |
| 519 <tbody> | |
| 520 <tr title="Time between when the request was done and the bot started the
task."> | |
| 521 <td>Pending time</td> | |
| 522 <td> | |
| 523 {{bot_view.pending_star(task)}}{{task.pending_now(now)|timedeltaformat
(include_ms=True)}} | |
| 524 </td> | |
| 525 </tr> | |
| 526 <tr title="Duration of the task, up to now if the task is still on-going."
> | |
| 527 <td>Duration </td> | |
| 528 <td>{{task.duration_now(now)|timedeltaformat(include_ms=True)}}</td> | |
| 529 </tr> | |
| 530 {% if task.performance_stats_key %} | |
| 531 <tr title="Overhead from installing CIPD packages"> | |
| 532 <td>Overhead CIPD packages</td> | |
| 533 <td>{{task.overhead_package_installation|timedeltaformat(include_ms=Tr
ue)}}</td> | |
| 534 </tr> | |
| 535 <tr title="Overhead from installing isolated inputs"> | |
| 536 <td>Overhead isolated inputs</td> | |
| 537 <td>{{task.overhead_isolated_inputs|timedeltaformat(include_ms=True)}}
</td> | |
| 538 </tr> | |
| 539 <tr title="Overhead from pushing isolated outputs"> | |
| 540 <td>Overhead isolated outputs</td> | |
| 541 <td>{{task.overhead_isolated_outputs|timedeltaformat(include_ms=True)}
}</td> | |
| 542 </tr> | |
| 543 {% endif %} | |
| 544 <tr title="Overhead from task_runner This is bot side overheads excluding
isolated setup and teardown."> | |
| 545 <td>Overhead bot (miscellaneous)</td> | |
| 546 <td>{{task.overhead_task_runner|timedeltaformat(include_ms=True)}}</td> | |
| 547 </tr> | |
| 548 <tr title="Overhead from server<-> communication. Includes DB access."> | |
| 549 <td>Overhead server<->bot communication</td> | |
| 550 <td>{{task.overhead_server|timedeltaformat(include_ms=True)}}</td> | |
| 551 </tr> | |
| 552 <tr title="Cost of running this task, as reported by the bot, if applicabl
e."> | |
| 553 {% if task.cost_saved_usd %} | |
| 554 <td>$ USD saved</td> | |
| 555 <td> | |
| 556 <span style="color:green">{{task.cost_saved_usd|round(4) }} $</span> | |
| 557 </td> | |
| 558 {% else %} | |
| 559 <td>$ USD</td> | |
| 560 <td> | |
| 561 {% if task.cost_usd %} | |
| 562 {{task.cost_usd|round(5) }} $ | |
| 563 {% else %} | |
| 564 ‑‑ | |
| 565 {% endif %} | |
| 566 </td> | |
| 567 {% endif %} | |
| 568 </tr> | |
| 569 {% if task.performance_stats.is_valid %} | |
| 570 <tr title="Size of the bot cache before this task started. This cache pe
rmits to reduce the amount of items downloaded."> | |
| 571 <td>Initial bot cache</td> | |
| 572 <td>{{task.performance_stats.isolated_download.initial_size or 0|files
izeformat}} total; {{task.performance_stats.isolated_download.initial_number_ite
ms or 0}} items</td> | |
| 573 </tr> | |
| 574 <tr title="Items found in the cache so the bot didn't have to download t
hese before starting the task. This means these items are used by multiple tasks
."> | |
| 575 <td>Task inputs: Hot items</td> | |
| 576 <td>{{summarize_array(task.performance_stats.isolated_download.items_h
ot_array)}}</td> | |
| 577 </tr> | |
| 578 <tr title="Items missing from the cache, so they had to be downloaded be
fore the task could start."> | |
| 579 <td>Task inputs: Cold items (i.e. downloaded)</td> | |
| 580 <td>{{summarize_array(task.performance_stats.isolated_download.items_c
old_array)}}</td> | |
| 581 </tr> | |
| 582 <tr title="Task outputs (via ISOLATED_OUTDIR) that were already on the i
solated server."> | |
| 583 <td>Task results: Hot items</td> | |
| 584 <td>{{summarize_array(task.performance_stats.isolated_upload.items_hot
_array)}}</td> | |
| 585 </tr> | |
| 586 <tr title="Task outputs (via ISOLATED_OUTDIR) that were missing from the
isolated server."> | |
| 587 <td>Task results: Cold items (i.e. uploaded)</td> | |
| 588 <td>{{summarize_array(task.performance_stats.isolated_upload.items_col
d_array)}}</td> | |
| 589 </tr> | |
| 590 {% endif %} | |
| 591 </tbody> | |
| 592 </table> | |
| 593 </div> | |
| 594 | |
| 595 <br> | |
| 596 <div class=highlight_section> | |
| 597 <h2>Help</h2> | |
| 598 {% if request.properties.inputs_ref and request.properties.inputs_ref.isolated %
} | |
| 599 <div>Download inputs files into directory <i>foo</i>:</div> | |
| 600 <div class=code> python isolateserver.py download -I {{request.properties.input
s_ref.isolatedserver}} --namespace {{request.properties.inputs_ref.namespace}} -
s {{request.properties.inputs_ref.isolated}} --target foo</div> | |
| 601 <br> | |
| 602 {%endif%} | |
| 603 <div>Run this task locally:</div> | |
| 604 <div class=code> python swarming.py reproduce -S {{host_url}} {{task.task_id}}<
/div> | |
| 605 <br> | |
| 606 <div>Download output results into directory <i>foo</i>:</div> | |
| 607 <div class=code> python swarming.py collect -S {{host_url}} --task-output-dir=f
oo {{task.task_id}}</div> | |
| 608 <br> | |
| 609 <div>Looking for <i>swarming.py</i>?</div> | |
| 610 <div class=code> git clone https://github.com/luci/client-py</div> | |
| 611 </div> | |
| 612 | |
| 613 {% set output = task.get_output() %} | |
| 614 {% if output is not none %} | |
| 615 <h3>Output:</h3> | |
| 616 <pre> | |
| 617 {{task.get_output().decode('utf-8', 'replace')}}{% if is_running %}<p class="con
sole"><span class="blink">|</span>{% endif %} | |
| 618 </pre> | |
| 619 {% endif %} | |
| 620 | |
| 621 {% endblock %} | |
| OLD | NEW |