| Index: appengine/swarming/templates/restricted_botslist.html
|
| diff --git a/appengine/swarming/templates/restricted_botslist.html b/appengine/swarming/templates/restricted_botslist.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..be79df188a3e0033cca6af6a35d6ab1b02d756df
|
| --- /dev/null
|
| +++ b/appengine/swarming/templates/restricted_botslist.html
|
| @@ -0,0 +1,187 @@
|
| +{% extends "swarming/base.html" %}
|
| +
|
| +
|
| +{% block headers %}
|
| +<style>
|
| + h1 {
|
| + margin-top: 10px;
|
| + margin-bottom: 10px;
|
| + }
|
| +
|
| + table.property_table {
|
| + font-family: monospace;
|
| + border-spacing: 0;
|
| + }
|
| +
|
| + table.property_table tbody tr:nth-child(even) {
|
| + background-color: #eeeeee;
|
| + }
|
| +
|
| + table.property_table td {
|
| + padding-left: 1em;
|
| + padding-right: 1em;
|
| + }
|
| +
|
| + table.property_table tbody tr:hover {
|
| + background-color: #eeffee;
|
| + }
|
| +
|
| + .bot_bad_version {
|
| + background-color: #ffffee;
|
| + }
|
| +
|
| + .bot_dead {
|
| + background-color: #ffdddd !important;
|
| + }
|
| +
|
| + .bot_quarantined {
|
| + background-color: #ff0303 !important;
|
| + }
|
| +
|
| + #limitRange {
|
| + width: inherit;
|
| + }
|
| +</style>
|
| +
|
| +<script>
|
| + function get_limit() {
|
| + return document.getElementById('limitText').value;
|
| + }
|
| +
|
| + function update_limit_text(val) {
|
| + document.getElementById('limitText').value = val;
|
| + }
|
| +
|
| + function update_limit_range(val) {
|
| + document.getElementById('limitRange').value = val;
|
| + }
|
| +
|
| + function submit_form() {
|
| + document.getElementById("filter_and_order").submit();
|
| + }
|
| +</script>
|
| +{% endblock %}
|
| +
|
| +
|
| +{% block body %}
|
| +{% import 'swarming/bot_view.html' as bot_view %}
|
| +
|
| +<h1>Known bots</h1>
|
| +<a href="/">Back to root</a>
|
| +<br/>
|
| +<h1>THIS UI WILL GO AWAY ON JAN 1, 2017. If it has something you need and the new UI doesn't have it, file a bug ASAP. </h1>
|
| +<a href="{{try_link}}">Try out the new bot list UI</a>
|
| +<p/>
|
| +<form id="filter_and_order" name="filter_and_order" method="GET">
|
| +<table>
|
| + <tr>
|
| + <td>
|
| + <table class=property_table>
|
| + <tbody>
|
| + <tr>
|
| + <td>Current bot version</td>
|
| + <td>{{current_version[:8]}}</td>
|
| + </tr>
|
| + <tr>
|
| + <td>Bots alive</td>
|
| + <td>{{num_bots_alive}}</td>
|
| + </tr>
|
| + <tr>
|
| + <td>Bots running a task</td>
|
| + <td>{{num_bots_busy}}</td>
|
| + </tr>
|
| + <tr>
|
| + <td>Bots dead</td>
|
| + <td>{{num_bots_dead}}</td>
|
| + </tr>
|
| + <tr>
|
| + <td>Bots quarantined</td>
|
| + <td>{{num_bots_quarantined}}</td>
|
| + </tr>
|
| + <tr>
|
| + <td>Bots shown below</td>
|
| + <td>{{bots|length}}</td>
|
| + </tr>
|
| + </tbody>
|
| + </table>
|
| + </td>
|
| + <td>
|
| + <div title="Filter by bot dimensions.">
|
| + Filter by advertized bot dimensions<br>
|
| + Use "key:value" format, e.g. "gpu:none"
|
| + <br>
|
| + <textarea id="dimensions" name="dimensions" rows="3" cols="30">{{dimensions}}</textarea>
|
| + <br>
|
| + <input type="submit" value="Filter">
|
| + </div>
|
| + </td>
|
| + <td>
|
| + Limit:
|
| + <br>
|
| + <input type="range" id="limitRange" name="limit" value="{{limit}}" min=10
|
| + max=500 step=5 onchange="update_limit_text(this.value);"
|
| + onmousemove="update_limit_text(this.value);" >
|
| + <input type="text" id="limitText" value="{{limit}}" maxlength="3"
|
| + onchange="update_limit_range(this.value);">
|
| + </td>
|
| + </tr>
|
| +</table>
|
| +<p/>
|
| +{% for sort_option in sort_options %}
|
| + <label>
|
| + <input type="radio" name="sort_by" value="{{sort_option.key}}"
|
| + onchange="submit_form()"
|
| + {% if sort_by == sort_option.key %}checked{%endif%}>
|
| + {{sort_option.name}}
|
| + </input>
|
| + </label>
|
| +{% endfor %}
|
| +<p/>
|
| +</form>
|
| +
|
| +{% import 'swarming/bot_view.html' as bot_view %}
|
| +<table id="machine-table" class="alterning_background"
|
| + summary="This table lists all machines that have polled this server">
|
| + <thead>
|
| + <th>ID</th>
|
| + <th>Last contact</th>
|
| + <th>Dimensions</th>
|
| + <th>State</th>
|
| + <th>Version</th>
|
| + <th>Task</th>
|
| + </thead>
|
| + <tbody>
|
| + {% for bot in bots %}
|
| + <tr class="request {% if bot.is_dead(now) %}bot_dead{% elif bot.quarantined %}bot_quarantined{% endif %}">
|
| + <td nowrap>{{bot_view.bot_link(bot.id, is_privileged_user)}}</td>
|
| + <td>
|
| + {{(now-bot.last_seen_ts)|timedeltaformat}}
|
| + {% if is_admin and bot.is_dead(now) %}
|
| + <form id="delete_{{bot.id}}" method="post"
|
| + action="/oldui/restricted/bot/{{bot.id}}/delete">
|
| + <input type="hidden" name="xsrf_token" value="{{xsrf_token}}" />
|
| + <input type="submit" value="Delete" />
|
| + </form>
|
| + {% endif %}
|
| + </td>
|
| + <td nowrap>{{bot_view.render_dict(bot.dimensions)}}</td>
|
| + <td nowrap>{{bot_view.render_dict(bot.state)}}</td>
|
| + <td {%if bot.version != current_version%}class="bot_bad_version"{%endif%}>
|
| + {{bot.version[:8]}}
|
| + </td>
|
| + <td>
|
| + {% if bot.task %}
|
| + <a href="/oldui/user/task/{{bot.task_id}}">{{bot.task_name}}</a>
|
| + {% else %}‑‑{% endif%}
|
| + </td>
|
| + </tr>
|
| + {% endfor %}
|
| + </tbody>
|
| +</table>
|
| +
|
| +{% if cursor %}
|
| +<p/>
|
| +<a href="/oldui/restricted/bots?limit={{limit}}&sort_by={{sort_by}}&cursor={{cursor|urlencode}}&dimensions={{dimensions|urlencode}}">Next page</a>
|
| +{% endif %}
|
| +
|
| +{% endblock %}
|
|
|