| <!-- |
| The <metrics-analysis-sk> custom element declaration. Displays a form that allows the user to |
| queue a task to do metrics analysis on trace URLs. |
| |
| Attributes: |
| None. |
| |
| Events: |
| None. |
| |
| Methods: |
| None. |
| --> |
| |
| <dom-module id="metrics-analysis-sk"> |
| <style> |
| paper-input { |
| width: 20em; |
| } |
| |
| .triggering-spinner { |
| margin: auto; |
| vertical-align: middle; |
| } |
| |
| .iron-selected { |
| background-color: #D6ECF2; |
| } |
| |
| .long-field { |
| width: 40em; |
| } |
| |
| .hidden { |
| display: none; |
| } |
| |
| .smaller-font { |
| font-size: 80%; |
| } |
| |
| iron-selector.long-field > div { |
| width: 40em; |
| } |
| |
| iron-selector.medium-field > div { |
| width: 20em; |
| } |
| |
| table.options td { |
| padding: 1em 2em; |
| } |
| |
| td.center { |
| text-align:center; |
| padding-top:2em; |
| } |
| |
| .panel { |
| @apply(--shadow-elevation-2dp); |
| } |
| </style> |
| <template> |
| |
| <confirm-dialog-sk id="confirm_dialog"></confirm-dialog-sk> |
| |
| <table class="options panel"> |
| |
| <tr> |
| <td>Metric Name</td> |
| <td> |
| <paper-input value="" id="metric_name" class="medium-field"></paper-input> |
| <span class="smaller-font">The metric to parse the provided traces with. Eg: loadingMetric</span> |
| </td> |
| </tr> |
| |
| <tr> |
| <td>Source of traces</td> |
| <td> |
| <paper-input value="" id="analysis_task_id" class="medium-field" label="Analysis Task Id"></paper-input> |
| <expanding-textarea-sk id="custom_traces" display-text="Specify custom list of traces" placeholder-text="Eg: trace1,trace2,trace3"></expanding-textarea-sk> |
| </td> |
| </tr> |
| |
| <tr> |
| <td>Benchmark Arguments</td> |
| <td> |
| <paper-input value="--output-format=csv" id="benchmark_args" class="long-field"></paper-input> |
| <span class="smaller-font">These will be the arguments to the analysis_metrics_ct benchmark.</span><br/> |
| <span class="smaller-font"><b>Note:</b> Use --run-benchmark-timeout=[secs] to specify the timeout of the run_benchmark script. 300 is the default.</span><br/> |
| <span class="smaller-font"><b>Note:</b> Use --max-pages-per-bot=[num] to specify the number of pages to run per bot. 50 is the default.</span> |
| </td> |
| </tr> |
| |
| <tr> |
| <td>Field Value Column Name</td> |
| <td> |
| <paper-input value="avg" id="value_column_name" class="medium-field"></paper-input> |
| <span class="smaller-font">Which column's entries to use as field values.</span> |
| </td> |
| </tr> |
| |
| <tr> |
| <td> |
| Chromium Git patch (optional)<br/> |
| Applied to Chromium ToT |
| </td> |
| <td> |
| <patch-sk id="chromium_patch" |
| patch-type="chromium" |
| cl-description="{{chromiumClDescription}}"> |
| </patch-sk> |
| </td> |
| </tr> |
| |
| <tr> |
| <td> |
| Catapult Git patch (optional)<br/> |
| Applied to Catapult Rev in <a href="https://chromium.googlesource.com/chromium/src/+show/HEAD/DEPS">DEPS</a> |
| </td> |
| <td> |
| <patch-sk id="catapult_patch" |
| patch-type="catapult" |
| cl-description="{{catapultClDescription}}"> |
| </patch-sk> |
| </td> |
| </tr> |
| |
| <tr> |
| <td>Repeat this task</td> |
| <td> |
| <repeat-after-days-sk id="repeat_after_days"></repeat-after-days-sk> |
| </td> |
| </tr> |
| |
| <tr> |
| <td>Task Priority</td> |
| <td> |
| <iron-selector attr-for-selected="id" id="task_priority" selected="100" class="medium-field"> |
| <template is="dom-repeat" items="{{taskPriorities}}"> |
| <div id="{{item}}">{{getTaskPriorityDesc(item, taskPrioritiesToDesc)}}</div> |
| </template> |
| </iron-selector> |
| </td> |
| </tr> |
| |
| <tr> |
| <td> |
| Notifications CC list (optional)<br/> |
| Email will be sent by ct@skia.org |
| </td> |
| <td> |
| <paper-input value="" id="cc_list" label="email1,email2,email3" class="long-field"></paper-input> |
| </td> |
| </tr> |
| |
| <tr> |
| <td>Description</td> |
| <td> |
| <paper-input value="" id="desc" label="Description is required" class="long-field"></paper-input> |
| </td> |
| </tr> |
| |
| <tr> |
| <td colspan="2" class="center"> |
| <div class="triggering-spinner"> |
| <paper-spinner active="[[ triggeringTask ]]" alt="Trigger task"></paper-spinner> |
| </div> |
| <paper-button raised id="submit_task" disabled="[[ triggeringTask ]]">Queue Task</paper-button> |
| </td> |
| </tr> |
| <tr> |
| <td colspan="2" class="center"> |
| <paper-button raised id="view_history">View runs history</paper-button> |
| </td> |
| </tr> |
| </table> |
| |
| <br/><br/> |
| |
| </template> |
| </dom-module> |
| |
| <script> |
| Polymer({ |
| is: "metrics-analysis-sk", |
| properties: { |
| chromiumClDescription: String, |
| catapultClDescription: String, |
| taskPriorities: { |
| type: Array, |
| value: [], |
| }, |
| taskPrioritiesToDesc: { |
| type: Object, |
| value: {}, |
| }, |
| triggeringTask: { |
| type: Boolean, |
| value: false, |
| }, |
| }, |
| |
| observers: [ |
| "clDescriptionChanged(chromiumClDescription, catapultClDescription)" |
| ], |
| |
| ready: function() { |
| var that = this; |
| this.$.submit_task.addEventListener('click', function(e) { |
| that.validateTask(); |
| }); |
| this.$.view_history.addEventListener('click', function(e) { |
| that.gotoRunsHistory(); |
| }); |
| this.$.custom_traces.addEventListener('click', function(e) { |
| // Do not display the analysis task id field if custom traces is open. |
| that.$.analysis_task_id.hidden = that.$.custom_traces.opened; |
| if (that.$.custom_traces.opened) { |
| // Clear out analysis task id if custom traces is open. |
| that.$.analysis_task_id.value = ''; |
| } else { |
| // Clear out traces if it is no longer open. |
| that.$.custom_traces.value = ''; |
| } |
| }); |
| }, |
| |
| getTaskPriorityDesc: function(taskPriority, taskPrioritiesToDesc) { |
| if (taskPrioritiesToDesc) { |
| return taskPrioritiesToDesc[taskPriority]; |
| } |
| }, |
| |
| clDescriptionChanged: function(chromiumClDesc, catapultClDesc) { |
| this.$.desc.value = ctfe.getDescriptionOfCls(chromiumClDesc, '', '', catapultClDesc, ''); |
| }, |
| |
| validateTask: function() { |
| if (!this.$.metric_name.value) { |
| sk.errorMessage("Please specify a metric name"); |
| this.$.metric_name.focus(); |
| return; |
| } |
| if (!this.$.analysis_task_id.value && !this.$.custom_traces.value) { |
| sk.errorMessage("Please specify an analysis task id or custom traces"); |
| this.$.analysis_task_id.focus(); |
| return; |
| }; |
| if (!this.$.chromium_patch.validate() || |
| !this.$.catapult_patch.validate()) { |
| return; |
| } |
| if (!this.$.desc.value) { |
| sk.errorMessage("Please specify a description"); |
| this.$.desc.focus(); |
| return; |
| } |
| if (ctfe.moreThanThreeActiveTasks($$$("drawer-sk").sizeOfUserQueue)) { |
| return; |
| } |
| this.$.confirm_dialog.open("Proceed with queueing task?") |
| .then(this.queueTask.bind(this)) |
| .catch(function(err) { |
| console.log(err); |
| sk.errorMessage("Did not queue"); |
| }) |
| }, |
| |
| queueTask: function() { |
| this.triggeringTask = true; |
| var params = {}; |
| params["metric_name"] = this.$.metric_name.value; |
| params["analysis_task_id"] = this.$.analysis_task_id.value; |
| params["custom_traces"] = this.$.custom_traces.value; |
| params["benchmark_args"] = this.$.benchmark_args.value; |
| params["value_column_name"] = this.$.value_column_name.value; |
| params["desc"] = this.$.desc.value; |
| params["chromium_patch"] = this.$.chromium_patch.patch; |
| params["catapult_patch"] = this.$.catapult_patch.patch; |
| params["repeat_after_days"] = this.$.repeat_after_days.selected; |
| params["task_priority"] = this.$.task_priority.selected; |
| if (this.$.cc_list.value) { |
| params["cc_list"] = this.$.cc_list.value.split(",") |
| } |
| |
| var that = this; |
| sk.post("/_/add_metrics_analysis_task", JSON.stringify(params)).then(function(resp) { |
| that.gotoRunsHistory(); |
| }).catch(function(e) { |
| that.triggeringTask = false; |
| sk.errorMessage(e); |
| }); |
| }, |
| |
| gotoRunsHistory: function() { |
| window.location.href = "/metrics_analysis_runs/"; |
| }, |
| }); |
| </script> |