| <!-- |
| This in an HTML Import-able file that contains the definition |
| of the following elements: |
| |
| <leasing-selections-sk> |
| |
| This is the side navigation menu for the Skia Fuzzer |
| |
| To use this file import it: |
| |
| <link href="leasing-selections-sk.html" rel="import" /> |
| |
| Usage: |
| |
| <leasing-selections-sk></leasing-selections-sk> |
| |
| Attributes: |
| pool - The Swarming pool. |
| osTypes - All available OS types in the above pool. |
| deviceTypes - All available device types for the above OS type. |
| loadingDetails - Whether we are waiting to hear back from the server. |
| botId - The bot Id that should be leased. Eg: skia-gce-001. |
| taskIdForIsolates - The task Id whose isolates should be kept ready on bot. |
| desc - Description of the leasing task. |
| duration - How long the bot will be leased for. |
| |
| Events: |
| None |
| |
| Methods: |
| None |
| --> |
| <link rel="import" href="/res/imp/bower_components/iron-selector/iron-selector.html"> |
| <link rel="import" href="/res/imp/bower_components/paper-button/paper-button.html"> |
| <link rel="import" href="/res/imp/bower_components/paper-dropdown-menu/paper-dropdown-menu.html"> |
| <link rel="import" href="/res/imp/bower_components/paper-input/paper-input.html"> |
| <link rel="import" href="/res/imp/bower_components/paper-item/paper-item.html"> |
| <link rel="import" href="/res/imp/bower_components/paper-listbox/paper-listbox.html"> |
| <link rel="import" href="/res/imp/bower_components/paper-spinner/paper-spinner.html"> |
| <link rel="import" href="/res/common/imp/confirm-dialog-sk.html"> |
| |
| <dom-module id="leasing-selections-sk"> |
| <style> |
| .loading-details-spinner { |
| margin: auto; |
| vertical-align: middle; |
| padding-left: 10em; |
| } |
| .iron-selected { |
| background-color: #D6ECF2; |
| } |
| .step-title { |
| padding-top: 2em; |
| } |
| .smaller-font { |
| font-size: 80%; |
| } |
| paper-dropdown-menu, paper-listbox { |
| width: 350px; |
| } |
| paper-dropdown-menu { |
| margin: auto; |
| display: block; |
| } |
| paper-button { |
| color: #1f78b4; |
| } |
| table.options td { |
| text-align: center; |
| padding-right: 5em; |
| padding-left: 5em; |
| padding-bottom: 2em; |
| } |
| .panel { |
| @apply(--shadow-elevation-2dp); |
| } |
| </style> |
| <template> |
| |
| <div class="loading-details-spinner"> |
| <paper-spinner active="[[loadingDetails]]" |
| alt="Loading details"></paper-spinner> |
| </div> |
| |
| <confirm-dialog-sk id="confirm_dialog"></confirm-dialog-sk> |
| |
| <br/><br/> |
| |
| <table class="options panel"> |
| |
| <tr> |
| <td class="step-title">Select Pool</td> |
| <td> |
| <paper-dropdown-menu disabled="[[loadingDetails]]"> |
| <paper-listbox class="dropdown-content" selected="{{pool}}" id="pool_listbox" attr-for-selected="value"> |
| <paper-item value="Skia">Skia</paper-item> |
| <paper-item value="SkiaCT">SkiaCT</paper-item> |
| <paper-item value="SkiaInternal">SkiaInternal</paper-item> |
| <paper-item value="CT">CT</paper-item> |
| <paper-item value="CTAndroidBuilder">CTAndroidBuilder</paper-item> |
| <paper-item value="CTLinuxBuilder">CTLinuxBuilder</paper-item> |
| </paper-listbox> |
| </paper-dropdown-menu> |
| </td> |
| </tr> |
| |
| <tr> |
| <td class="step-title">Select OS Type</td> |
| <td> |
| <paper-dropdown-menu disabled="[[loadingDetails]]" on-iron-select="osSelected"> |
| <paper-listbox class="dropdown-content" selected="0" id="os_listbox"> |
| <template is="dom-repeat" items="[[getKeys(osTypes)]]"> |
| <paper-item value="[[item]]">[[displayOsTypes(item, osTypes)]]</paper-item> |
| </template> |
| </paper-listbox> |
| </paper-dropdown-menu> |
| </td> |
| </tr> |
| |
| <tr> |
| <td class="step-title">Select Device Type</td> |
| <td> |
| <paper-dropdown-menu disabled="[[loadingDetails]]" id="device_dropdown_menu"> |
| <paper-listbox class="dropdown-content" selected="0" id="device_listbox"> |
| <template is="dom-repeat" items="[[getKeys(deviceTypes)]]"> |
| <paper-item value="[[item]]">[[displayDeviceTypes(item, deviceTypes)]]</paper-item> |
| </template> |
| </paper-listbox> |
| </paper-dropdown-menu> |
| </td> |
| </tr> |
| |
| <tr> |
| <td class="step-title">Setup <a href="https://skia.org/dev/tools/debugger">Debugger</a> on<br/>Android device?</td> |
| <td> |
| <paper-dropdown-menu disabled="[[loadingDetails]]" id="debugger_dropdown_menu"> |
| <paper-listbox class="dropdown-content" selected="{{setupDebugger}}" attr-for-selected="value"> |
| <paper-item value="no">No</paper-item> |
| <paper-item value="yes">Yes</paper-item> |
| </paper-listbox> |
| </paper-dropdown-menu> |
| </td> |
| </tr> |
| |
| <tr> |
| <td class="step-title">Specify BotId (optional)</td> |
| <td> |
| <paper-input value="{{botId}}" disabled="[[loadingDetails]]"></paper-input> |
| <span class="smaller-font">Note: OS Type and Device Type are ignored if this is populated</span> |
| </td> |
| </tr> |
| |
| <tr> |
| <td class="step-title">Specify Swarming Task Id<br/>to keep artifacts ready on bot<br/>(optional)</td> |
| <td> |
| <paper-input value="{{taskIdForIsolates}}" disabled="[[loadingDetails]]"></paper-input> |
| </td> |
| </tr> |
| |
| <tr> |
| <td class="step-title">Lease Duration</td> |
| <td> |
| <paper-dropdown-menu disabled="[[loadingDetails]]"> |
| <paper-listbox class="dropdown-content" selected="{{duration}}" attr-for-selected="value" id="duration_listbox"> |
| <paper-item value="1">1hr</paper-item> |
| <paper-item value="2">2hr</paper-item> |
| <paper-item value="6">6hr</paper-item> |
| <paper-item value="23">23hr</paper-item> |
| </paper-listbox> |
| </paper-dropdown-menu> |
| </td> |
| |
| <tr> |
| <td class="step-title">Description</td> |
| <td> |
| <paper-input value="{{desc}}" label="Description is required" disabled="[[loadingDetails]]"></paper-input> |
| </td> |
| </tr> |
| |
| <tr> |
| <td colspan="2" class="center"> |
| <paper-button raised id="submit" on-click="onSubmit">Lease Bot</paper-button> |
| </td> |
| </tr> |
| |
| </table> |
| |
| </template> |
| </dom-module> |
| |
| <script> |
| Polymer({ |
| is: "leasing-selections-sk", |
| properties: { |
| pool: { |
| type: String, |
| value: "Skia", |
| observer: "poolChanged", |
| }, |
| osTypes: { |
| type: Object, |
| value: {}, |
| observer: "osTypesChanged", |
| }, |
| deviceTypes: { |
| type: Object, |
| value: {}, |
| }, |
| loadingDetails: { |
| type: Boolean, |
| value: true, |
| }, |
| setupDebugger: { |
| type: String, |
| value: "no", |
| }, |
| botId: { |
| type: String, |
| value: "", |
| }, |
| taskIdForIsolates: { |
| type: String, |
| value: "", |
| }, |
| desc: { |
| type: String, |
| value: "", |
| }, |
| duration: { |
| type: String, |
| value: "1", |
| }, |
| }, |
| |
| onSubmit: function() { |
| if (!this.validateInputs()) { |
| return; |
| } |
| |
| this.$.confirm_dialog.open("Proceed with adding leasing task?") |
| .then(this.addTask.bind(this)) |
| .catch(function(err) { |
| console.log(err); |
| sk.errorMessage("Did not add task"); |
| }) |
| |
| }, |
| |
| addTask: function() { |
| var params = {}; |
| params.pool = this.pool; |
| params.botId = this.botId; |
| if (!this.botId) { |
| params.osType = this.$.os_listbox.selectedItem.value; |
| if (this.$.device_listbox.selectedItem) { |
| params.deviceType = this.$.device_listbox.selectedItem.value; |
| } |
| } |
| if (params.deviceType) { |
| params.architecture = leasing.alias.android_arch(params.deviceType); |
| } |
| params.setupDebugger = this.setupDebugger === "yes"; |
| params.taskIdForIsolates = this.taskIdForIsolates; |
| params.duration = this.duration; |
| params.description = this.desc; |
| |
| sk.post("/_/add_leasing_task", JSON.stringify(params)).then(function(resp) { |
| window.location.href = "/my_leases"; |
| }).catch(sk.errorMessage); |
| }, |
| |
| validateInputs: function() { |
| if (this.loadingDetails) { |
| sk.errorMessage("Please wait till pool details complete loading"); |
| return false; |
| } |
| if (!this.desc) { |
| sk.errorMessage("Please specify a description"); |
| return false; |
| } |
| return true; |
| }, |
| |
| osSelected: function(e) { |
| if (e.target.selectedItem) { |
| this.$.device_dropdown_menu.disabled = (e.target.selectedItem.value !== "Android"); |
| this.$.debugger_dropdown_menu.disabled = (e.target.selectedItem.value !== "Android"); |
| } |
| }, |
| |
| displayOsTypes: function(item, map) { |
| return item + this.getCountsStr(item, map); |
| }, |
| |
| displayDeviceTypes: function(item, map) { |
| var alias = leasing.alias.android(item); |
| // Make the display look similar to the swarming UI page. |
| return alias + leasing.alias.getAKAStr(item) + this.getCountsStr(item, map); |
| }, |
| |
| getCountsStr: function(item, map) { |
| return ' - ' + map[item] + ' bots online'; |
| }, |
| |
| getKeys: function(m) { |
| return Object.keys(m); |
| }, |
| |
| poolChanged: function(newValue) { |
| this.loadingDetails = true; |
| this.osTypes = {}; |
| this.deviceTypes = {}; |
| sk.post("/_/pooldetails?pool=" + newValue).then(JSON.parse).then(function(resp) { |
| this.$.os_listbox.selected = 0; |
| this.$.device_listbox.selected = 0; |
| this.setupDebugger = "no"; |
| this.osTypes = resp.OsTypes; |
| this.deviceTypes = resp.DeviceTypes; |
| }.bind(this)).catch(sk.errorMessage); |
| }, |
| |
| osTypesChanged: function(newValue) { |
| this.loadingDetails = !Object.keys(newValue).length; |
| }, |
| }); |
| </script> |
| |