| Index: appengine/swarming/elements/res/imp/botlist/bot-filters.html
|
| diff --git a/appengine/swarming/elements/res/imp/botlist/bot-filters.html b/appengine/swarming/elements/res/imp/botlist/bot-filters.html
|
| index 2f066f9d3b25f8842fe61a59f4fe1e938b36beb4..06b3d965988dfd7bb0e394ed089d51d8ec35aa6b 100644
|
| --- a/appengine/swarming/elements/res/imp/botlist/bot-filters.html
|
| +++ b/appengine/swarming/elements/res/imp/botlist/bot-filters.html
|
| @@ -26,6 +26,8 @@
|
|
|
| // outputs
|
| columns: Array<String>, the columns that should be displayed.
|
| + dimensions: Array<String>, dimensions formatted like "dim:value", to be
|
| + used to filter server-side.
|
| filter: Object, an object {filter:Function} where filter will take one param
|
| (bot) and return a Boolean if it should be displayed given the
|
| current filters.
|
| @@ -45,6 +47,7 @@
|
| <link rel="import" href="/res/imp/bower_components/paper-icon-button/paper-icon-button.html">
|
| <link rel="import" href="/res/imp/bower_components/paper-input/paper-input.html">
|
|
|
| +<link rel="import" href="bot-list-shared.html">
|
|
|
| <dom-module id="bot-filters">
|
| <template>
|
| @@ -206,50 +209,51 @@
|
| </template>
|
| <script>
|
| (function(){
|
| - var FILTER_SEP = " | ";
|
| + var FILTER_SEP = ":";
|
| // filterMap is a map of primary -> function. The function returns a
|
| // boolean "does the bot (first arg) match the second argument". These
|
| // functions will have "this" be the botlist, and will have access to all
|
| // functions defined in bot-list and bot-list-shared.
|
| var filterMap = {
|
| - cores: function(bot, cores){
|
| - var o = this._cores(bot);
|
| + android_devices: function(bot, num) {
|
| + var o = this._attribute(bot, "android_devices", "0");
|
| + return o.indexOf(num) !== -1;
|
| + },
|
| + cores: function(bot, cores) {
|
| + var o = this._attribute(bot, "cores");
|
| return o.indexOf(cores) !== -1;
|
| },
|
| - cpu: function(bot, cpu){
|
| - var o = this._dimension(bot, "cpu") || ["none"];
|
| + cpu: function(bot, cpu) {
|
| + var o = this._attribute(bot, "cpu");
|
| return o.indexOf(cpu) !== -1;
|
| },
|
| - devices: function(bot, device){
|
| - if (device === "none") {
|
| - return this._devices(bot).length === 0;
|
| - }
|
| - // extract the deviceType, if it is not "unknown".
|
| - device = this._unalias(device);
|
| - var found = false;
|
| - this._devices(bot).forEach(function(d) {
|
| - if (this._deviceType(d) === device) {
|
| - found = true;
|
| - }
|
| - }.bind(this));
|
| - return found;
|
| + device_os: function(bot, os) {
|
| + var o = this._attribute(bot, "device_os", "none");
|
| + return o.indexOf(os) !== -1;
|
| },
|
| - gpu: function(bot, gpu){
|
| - var o = this._dimension(bot, "gpu") || ["none"];
|
| + device_type: function(bot, dt) {
|
| + var o = this._attribute(bot, "device_type", "none");
|
| + return o.indexOf(this._unalias(dt)) !== -1;
|
| + },
|
| + disk_space: function(bot, space) {
|
| + return true;
|
| + },
|
| + gpu: function(bot, gpu) {
|
| + var o = this._attribute(bot, "gpu", "none");
|
| return o.indexOf(this._unalias(gpu)) !== -1;
|
| },
|
| id: function(bot, id) {
|
| - return bot.bot_id === id;
|
| + return true;
|
| },
|
| - os: function(bot, os){
|
| - var o = this._dimension(bot, "os") || ["Unknown"];
|
| + os: function(bot, os) {
|
| + var o = this._attribute(bot, "os");
|
| return o.indexOf(os) !== -1;
|
| },
|
| - pool: function(bot, pool){
|
| - var o = this._dimension(bot, "pool") || ["Unknown"];
|
| + pool: function(bot, pool) {
|
| + var o = this._attribute(bot, "pool");
|
| return o.indexOf(pool) !== -1;
|
| },
|
| - status: function(bot, status){
|
| + status: function(bot, status) {
|
| if (status === "quarantined") {
|
| return bot.quarantined;
|
| } else if (status === "dead") {
|
| @@ -302,6 +306,9 @@
|
|
|
| Polymer({
|
| is: "bot-filters",
|
| +
|
| + behaviors: [SwarmingBehaviors.BotListBehavior],
|
| +
|
| properties: {
|
| // input
|
| primary_map: {
|
| @@ -321,6 +328,11 @@
|
| },
|
| notify: true,
|
| },
|
| + dimensions: {
|
| + type: Array,
|
| + computed: "_extractDimensions(DIMENSIONS.*,_filters.*)",
|
| + notify: true,
|
| + },
|
| filter: {
|
| type: Object,
|
| computed: "_makeFilter(_filters.*)",
|
| @@ -546,6 +558,19 @@
|
| return item.substring(match.idx + match.part.length);
|
| },
|
|
|
| + _extractDimensions: function() {
|
| + var dims = []
|
| + this._filters.forEach(function(f) {
|
| + var split = f.split(FILTER_SEP, 1)
|
| + var col = split[0];
|
| + if (this.DIMENSIONS.indexOf(col) !== -1) {
|
| + var rest = f.substring(col.length + FILTER_SEP.length);
|
| + dims.push(col + FILTER_SEP + this._unalias(rest))
|
| + };
|
| + }.bind(this));
|
| + return dims;
|
| + }
|
| +
|
| });
|
| })();
|
| </script>
|
|
|