Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 <!-- | 1 <!-- |
| 2 Copyright 2016 The LUCI Authors. All rights reserved. | 2 Copyright 2016 The LUCI Authors. All rights reserved. |
| 3 Use of this source code is governed under the Apache License, Version 2.0 | 3 Use of this source code is governed under the Apache License, Version 2.0 |
| 4 that can be found in the LICENSE file. | 4 that can be found in the LICENSE file. |
| 5 | 5 |
| 6 This in an HTML Import-able file that contains the definition | 6 This in an HTML Import-able file that contains the definition |
| 7 of the following elements: | 7 of the following elements: |
| 8 | 8 |
| 9 <bot-list-data> | 9 <bot-list-data> |
| 10 | 10 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 59 Events: | 59 Events: |
| 60 None. | 60 None. |
| 61 --> | 61 --> |
| 62 | 62 |
| 63 <link rel="import" href="bot-list-shared-behavior.html"> | 63 <link rel="import" href="bot-list-shared-behavior.html"> |
| 64 | 64 |
| 65 <dom-module id="bot-list-data"> | 65 <dom-module id="bot-list-data"> |
| 66 | 66 |
| 67 <script> | 67 <script> |
| 68 (function(){ | 68 (function(){ |
| 69 var AVAILABLE = "available"; | |
| 69 var BLACKLIST_DIMENSIONS = ["quarantined", "error"]; | 70 var BLACKLIST_DIMENSIONS = ["quarantined", "error"]; |
| 70 | 71 |
| 72 function aggregateTemps(temps) { | |
| 73 if (!temps) { | |
| 74 return {}; | |
| 75 } | |
| 76 var zones = []; | |
| 77 var avg = 0; | |
| 78 for (k in temps) { | |
| 79 zones.push(k +" : "+temps[k]); | |
| 80 avg += temps[k]; | |
| 81 } | |
| 82 avg = avg / zones.length | |
| 83 if (avg) { | |
| 84 avg = avg.toFixed(1); | |
| 85 } else { | |
| 86 avg = "unknown"; | |
| 87 } | |
| 88 return { | |
| 89 average: avg, | |
| 90 zones: zones.join(" | ") || "unknown", | |
| 91 } | |
| 92 } | |
| 93 | |
| 71 Polymer({ | 94 Polymer({ |
| 72 is: 'bot-list-data', | 95 is: 'bot-list-data', |
| 73 | 96 |
| 74 behaviors: [ | 97 behaviors: [ |
| 75 SwarmingBehaviors.BotListBehavior, | 98 SwarmingBehaviors.BotListBehavior, |
| 76 ], | 99 ], |
| 77 | 100 |
| 78 properties: { | 101 properties: { |
| 79 // inputs | 102 // inputs |
| 80 auth_headers: { | 103 auth_headers: { |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 171 bot.disks = []; | 194 bot.disks = []; |
| 172 for (var i = 0; i < keys.length; i++) { | 195 for (var i = 0; i < keys.length; i++) { |
| 173 bot.disks.push({"id":keys[i], "mb":disks[keys[i]].free_mb}); | 196 bot.disks.push({"id":keys[i], "mb":disks[keys[i]].free_mb}); |
| 174 } | 197 } |
| 175 // Sort these so the biggest disk comes first. | 198 // Sort these so the biggest disk comes first. |
| 176 bot.disks.sort(function(a, b) { | 199 bot.disks.sort(function(a, b) { |
| 177 return b.mb - a.mb; | 200 return b.mb - a.mb; |
| 178 }); | 201 }); |
| 179 } | 202 } |
| 180 | 203 |
| 181 }); | 204 // Make sure every bot has a state.temp object and precompute |
| 205 // average and list of temps by zone if applicable. | |
| 206 bot.state.temp = aggregateTemps(bot.state.temp); | |
| 207 | |
| 208 var devices = []; | |
| 209 var d = (bot && bot.state && bot.state.devices) || {}; | |
| 210 // state.devices is like {Serial:Object}, so we need to keep the seria l | |
| 211 for (key in d) { | |
| 212 var o = d[key]; | |
| 213 o.serial = key; | |
| 214 o.okay = (o.state === AVAILABLE); | |
| 215 // It is easier to assume all devices on a bot are of the same type | |
| 216 // than to pick through the (incomplete) device state and find it. | |
| 217 o.device_type = this._dimension(bot, "device_type")[0]; | |
| 218 devices.push(o); | |
| 219 } | |
| 220 bot.state.devices = devices; | |
| 221 devices.forEach(function(d){ | |
| 222 d.temp = aggregateTemps(d.temp); | |
|
jcgregorio
2016/09/21 19:42:22
Why not do this in the above loop?
kjlubick
2016/09/21 20:05:53
Done.
| |
| 223 }); | |
| 224 | |
| 225 if (bot.last_seen_ts) { | |
| 226 bot.last_seen_ts = new Date(bot.last_seen_ts); | |
| 227 } | |
| 228 if (bot.first_seen_ts) { | |
| 229 bot.first_seen_ts = new Date(bot.first_seen_ts); | |
| 230 } | |
| 231 | |
| 232 }.bind(this)); | |
| 182 return this._list.items; | 233 return this._list.items; |
| 183 }, | 234 }, |
| 184 | 235 |
| 185 _fleet: function() { | 236 _fleet: function() { |
| 186 if (!this._count) { | 237 if (!this._count) { |
| 187 return {}; | 238 return {}; |
| 188 } | 239 } |
| 189 return { | 240 return { |
| 190 all: this._count.count || -1, | 241 all: this._count.count || -1, |
| 191 alive: (this._count.count - this._count.dead) || -1, | 242 alive: (this._count.count - this._count.dead) || -1, |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 258 return; | 309 return; |
| 259 } | 310 } |
| 260 this._getJsonAsync("_list", "/_ah/api/swarming/v1/bots/list", | 311 this._getJsonAsync("_list", "/_ah/api/swarming/v1/bots/list", |
| 261 "_busy1", this.auth_headers, this.query_params); | 312 "_busy1", this.auth_headers, this.query_params); |
| 262 }, | 313 }, |
| 263 | 314 |
| 264 }); | 315 }); |
| 265 })(); | 316 })(); |
| 266 </script> | 317 </script> |
| 267 </dom-module> | 318 </dom-module> |
| OLD | NEW |