This is an automated email from the ASF dual-hosted git repository.

dpavlov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite-teamcity-bot.git


The following commit(s) were added to refs/heads/master by this push:
     new 589bbd2  Current tracked branch failures: UI-based data filters were 
added to UI (expandable panel)
589bbd2 is described below

commit 589bbd27b3a812356495cbec543b50116c66d806
Author: Dmitriy Pavlov <[email protected]>
AuthorDate: Thu Jul 25 21:17:31 2019 +0300

    Current tracked branch failures: UI-based data filters were added to UI 
(expandable panel)
---
 .../src/main/webapp/css/vue-slider-1.0.css         | 372 +++++++++++++++++++++
 ignite-tc-helper-web/src/main/webapp/current.html  | 177 +++++++---
 2 files changed, 507 insertions(+), 42 deletions(-)

diff --git a/ignite-tc-helper-web/src/main/webapp/css/vue-slider-1.0.css 
b/ignite-tc-helper-web/src/main/webapp/css/vue-slider-1.0.css
new file mode 100644
index 0000000..3a9085f
--- /dev/null
+++ b/ignite-tc-helper-web/src/main/webapp/css/vue-slider-1.0.css
@@ -0,0 +1,372 @@
+
+/** See original sources in
+ https://cdn.jsdelivr.net/npm/vuetify/dist/vuetify.css */
+
+.v-color-picker--flat .v-color-picker__track:not(.v-input--is-disabled) 
.v-slider__thumb {
+    box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 
0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);
+}
+/** Ripples */
+/** Elements */
+.v-color-picker .v-input__slider {
+    border-radius: 5px;
+}
+.v-color-picker .v-input__slider .v-slider {
+    margin: 0;
+}
+
+.v-color-picker__alpha:not(.v-input--is-disabled) .v-slider {
+    border-radius: 5px;
+    background: 
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGElEQVQYlWNgYGCQwoKxgqGgcJA5h3yFAAs8BRWVSwooAAAAAElFTkSuQmCC)
 repeat;
+}
+
+.v-color-picker__sliders {
+    display: flex;
+    flex: 1 0 auto;
+    flex-direction: column;
+}
+
+.v-color-picker__dot {
+    position: relative;
+    height: 30px;
+    margin-right: 24px;
+    width: 30px;
+    background: 
url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGElEQVQYlWNgYGCQwoKxgqGgcJA5h3yFAAs8BRWVSwooAAAAAElFTkSuQmCC)
 repeat;
+    border-radius: 50%;
+    overflow: hidden;
+}
+.v-color-picker__dot > div {
+    width: 100%;
+    height: 100%;
+}
+
+.v-color-picker__hue {
+    margin-bottom: 24px;
+}
+.v-color-picker__hue:not(.v-input--is-disabled) {
+    background: linear-gradient(to right, #F00 0%, #FF0 16.66%, #0F0 33.33%, 
#0FF 50%, #00F 66.66%, #F0F 83.33%, #F00 100%);
+}
+
+.v-color-picker__track {
+    position: relative;
+    width: 100%;
+}
+
+.v-color-picker__preview {
+    align-items: center;
+    display: flex;
+}
+.v-color-picker__preview .v-slider {
+    min-height: 10px;
+}
+.v-color-picker__preview .v-slider:not(.v-slider--disabled) .v-slider__thumb {
+    box-shadow: 0px 3px 3px -2px rgba(0, 0, 0, 0.2), 0px 3px 4px 0px rgba(0, 
0, 0, 0.14), 0px 1px 8px 0px rgba(0, 0, 0, 0.12);
+}
+.v-color-picker__preview .v-slider:not(.v-slider--disabled) 
.v-slider__track-container {
+    opacity: 0;
+}
+/** Ripples */
+/** Elements */
+.theme--light.v-slider .v-slider__track-background,
+.theme--light.v-slider .v-slider__track-fill,
+.theme--light.v-slider .v-slider__thumb {
+    background: rgba(0, 0, 0, 0.26);
+}
+
+.theme--dark.v-slider .v-slider__track-background,
+.theme--dark.v-slider .v-slider__track-fill,
+.theme--dark.v-slider .v-slider__thumb {
+    background: rgba(255, 255, 255, 0.2);
+}
+
+.v-slider {
+    cursor: default;
+    display: flex;
+    align-items: center;
+    position: relative;
+    flex: 1;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+}
+.v-slider input {
+    cursor: default;
+    padding: 0;
+    width: 100%;
+    display: none;
+}
+
+.v-slider__track-container {
+    position: absolute;
+    border-radius: 0;
+}
+
+.v-slider__track-background, .v-slider__track-fill {
+    position: absolute;
+    transition: 0.3s cubic-bezier(0.25, 0.8, 0.5, 1);
+}
+
+.v-slider__thumb-container {
+    outline: none;
+    position: absolute;
+    transition: 0.3s cubic-bezier(0.25, 0.8, 0.5, 1);
+    top: 50%;
+}
+.v-slider__thumb-container:hover .v-slider__thumb:before {
+    transform: scale(1);
+}
+
+.v-slider__thumb {
+    position: absolute;
+    width: 12px;
+    height: 12px;
+    left: -6px;
+    top: 50%;
+    border-radius: 50%;
+    transition: 0.3s cubic-bezier(0.25, 0.8, 0.5, 1);
+    transform: translateY(-50%);
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+}
+.v-slider__thumb:before {
+    transition: 0.3s cubic-bezier(0.25, 0.8, 0.5, 1);
+    content: "";
+    color: inherit;
+    width: 36px;
+    height: 36px;
+    border-radius: 50%;
+    background: currentColor;
+    opacity: 0.3;
+    position: absolute;
+    left: -12px;
+    top: -12px;
+    transform: scale(0.1);
+    pointer-events: none;
+}
+
+.v-slider__ticks-container {
+    position: absolute;
+}
+
+.v-slider__tick {
+    position: absolute;
+    opacity: 0;
+    background-color: rgba(0, 0, 0, 0.5);
+    transition: 0.3s cubic-bezier(0.25, 0.8, 0.5, 1);
+    border-radius: 0;
+}
+.v-slider__tick--filled {
+    background-color: rgba(255, 255, 255, 0.5);
+}
+.v-slider__tick:first-child .v-slider__tick-label {
+    transform: none;
+}
+.v-application--is-rtl .v-slider__tick:first-child .v-slider__tick-label {
+    transform: translateX(100%);
+}
+.v-slider__tick:last-child .v-slider__tick-label {
+    transform: translateX(-100%);
+}
+.v-application--is-rtl .v-slider__tick:last-child .v-slider__tick-label {
+    transform: none;
+}
+
+.v-slider__tick-label {
+    position: absolute;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    white-space: nowrap;
+}
+
+.v-slider__thumb-label-container {
+    position: absolute;
+    left: 0;
+    top: 0;
+    transition: 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);
+}
+
+.v-slider__thumb-label {
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    font-size: 12px;
+    color: #fff;
+    width: 32px;
+    height: 32px;
+    border-radius: 50% 50% 0;
+    position: absolute;
+    left: 0;
+    bottom: 100%;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    transition: 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);
+}
+
+.v-slider--horizontal {
+    min-height: 32px;
+    margin-left: 8px;
+    margin-right: 8px;
+}
+.v-slider--horizontal .v-slider__track-container {
+    width: 100%;
+    height: 2px;
+    left: 0;
+    top: 50%;
+    transform: translateY(-50%);
+}
+.v-slider--horizontal .v-slider__track-background, .v-slider--horizontal 
.v-slider__track-fill {
+    height: 100%;
+}
+.v-slider--horizontal .v-slider__ticks-container {
+    left: 0;
+    height: 2px;
+    width: 100%;
+}
+.v-slider--horizontal .v-slider__tick:first-child .v-slider__tick-label {
+    transform: translateX(0%);
+}
+.v-application--is-rtl .v-slider--horizontal .v-slider__tick:first-child 
.v-slider__tick-label {
+    transform: translate(100%);
+}
+.v-slider--horizontal .v-slider__tick:last-child .v-slider__tick-label {
+    transform: translateX(-100%);
+}
+.v-application--is-rtl .v-slider--horizontal .v-slider__tick:last-child 
.v-slider__tick-label {
+    transform: translateX(0%);
+}
+.v-slider--horizontal .v-slider__tick .v-slider__tick-label {
+    top: 8px;
+    transform: translateX(-50%);
+}
+.v-application--is-rtl .v-slider--horizontal .v-slider__tick 
.v-slider__tick-label {
+    transform: translateX(50%);
+}
+.v-slider--horizontal .v-slider__thumb-label {
+    transform: translateY(-20%) translateY(-12px) translateX(-50%) 
rotate(45deg);
+}
+.v-slider--horizontal .v-slider__thumb-label > * {
+    transform: rotate(-45deg);
+}
+
+.v-slider--vertical {
+    min-height: 150px;
+    margin-top: 12px;
+    margin-bottom: 12px;
+}
+.v-slider--vertical .v-slider__track-container {
+    height: 100%;
+    width: 2px;
+    left: 50%;
+    top: 0;
+    transform: translateX(-50%);
+}
+.v-slider--vertical .v-slider__track-background, .v-slider--vertical 
.v-slider__track-fill {
+    width: 100%;
+}
+.v-slider--vertical .v-slider__thumb-container {
+    left: 50%;
+}
+.v-slider--vertical .v-slider__ticks-container {
+    top: 0;
+    width: 2px;
+    height: 100%;
+    left: 50%;
+    transform: translateX(-50%);
+}
+.v-slider--vertical .v-slider__tick:first-child .v-slider__tick-label {
+    transform: translateY(-50%);
+}
+.v-application--is-rtl .v-slider--vertical .v-slider__tick:first-child 
.v-slider__tick-label {
+    right: 12px;
+}
+.v-slider--vertical .v-slider__tick:last-child .v-slider__tick-label {
+    transform: translateY(-50%);
+}
+.v-application--is-rtl .v-slider--vertical .v-slider__tick:last-child 
.v-slider__tick-label {
+    transform: translateY(-50%);
+}
+.v-slider--vertical .v-slider__tick .v-slider__tick-label {
+    left: 12px;
+    transform: translateY(-50%);
+}
+.v-application--is-rtl .v-slider--vertical .v-slider__tick 
.v-slider__tick-label {
+    left: auto;
+    right: 12px;
+}
+.v-slider--vertical .v-slider__thumb-label > * {
+    transform: rotate(-135deg);
+}
+
+.v-slider__thumb-container--focused .v-slider__thumb:before {
+    transform: scale(1);
+}
+
+.v-slider--active .v-slider__tick {
+    opacity: 1;
+}
+
+.v-slider__thumb-container--active .v-slider__thumb:before {
+    transform: scale(1.5) !important;
+}
+
+.v-slider--disabled {
+    pointer-events: none;
+}
+.v-slider--disabled .v-slider__thumb {
+    width: 8px;
+    height: 8px;
+    left: -4px;
+}
+.v-slider--disabled .v-slider__thumb:before {
+    display: none;
+}
+
+.v-slider__ticks-container--always-show .v-slider__tick {
+    opacity: 1;
+}
+
+.v-slider--readonly {
+    pointer-events: none;
+}
+
+.v-input__slider .v-input__slot .v-label {
+    margin-left: 0;
+    margin-right: 12px;
+}
+.v-application--is-rtl .v-input__slider .v-input__slot .v-label {
+    margin-right: 0;
+    margin-left: 12px;
+}
+
+.v-input__slider--inverse-label .v-input__slot .v-label {
+    margin-right: 0;
+    margin-left: 12px;
+}
+.v-application--is-rtl .v-input__slider--inverse-label .v-input__slot .v-label 
{
+    margin-left: 0;
+    margin-right: 12px;
+}
+
+.v-input__slider--vertical {
+    align-items: center;
+    flex-direction: column-reverse;
+}
+.v-application--is-rtl .v-input__slider--vertical {
+    flex-direction: column;
+}
+.v-input__slider--vertical .v-input__slot, .v-input__slider--vertical 
.v-input__prepend-outer, .v-input__slider--vertical .v-input__append-outer {
+    margin: 0;
+}
+.v-input__slider--vertical .v-messages {
+    display: none;
+}
+
+.v-input--has-state .v-slider__track-background {
+    opacity: 0.4;
+}
\ No newline at end of file
diff --git a/ignite-tc-helper-web/src/main/webapp/current.html 
b/ignite-tc-helper-web/src/main/webapp/current.html
index 78a1e50..221009b 100644
--- a/ignite-tc-helper-web/src/main/webapp/current.html
+++ b/ignite-tc-helper-web/src/main/webapp/current.html
@@ -2,8 +2,7 @@
 <head>
     <title>Apache Ignite Teamcity Bot - Current Failures</title>
     <link rel="icon" href="img/leaf-icon-png-7066.png">
-    <link rel="stylesheet" 
href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css";>
-    <link rel="stylesheet" href="css/style-1.5.css">
+
     <link rel="stylesheet" 
href="https://use.fontawesome.com/releases/v5.4.2/css/all.css";
           
integrity="sha384-/rXc/GQVaYpyDdyxK+ecHPVYJSN9bmVFBvjA/9eOB+pb3F2w2N6fc5qB9Ew5yIns"
 crossorigin="anonymous">
 
@@ -12,6 +11,15 @@
 
     <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js";></script>
 
+    <!--<link href="https://cdn.jsdelivr.net/npm/vuetify/dist/vuetify.min.css"; 
rel="stylesheet">-->
+
+    <link rel="stylesheet" href="css/vue-slider-1.0.css">
+
+    <link rel="stylesheet" 
href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css";>
+    <link rel="stylesheet" href="css/style-1.5.css">
+
+    <script 
src="https://cdn.jsdelivr.net/npm/vuetify/dist/vuetify.js";></script>
+
     <script src="js/common-1.6.js"></script>
     <script src="js/testfails-2.2.js"></script>
 </head>
@@ -22,22 +30,6 @@ var gVue;
 
 function genLink() {
     let newUrl = "./current.html" + parmsForRest();
-    /*
-    var branch = findGetParameter("branch");
-    newUrl += "branch=" + (branch != null ? branch : "master");
-
-    if (isDefinedAndFilled(gVue.$data.tagSelected))
-        newUrl += "&tagSelected=" + gVue.$data.tagSelected;
-
-    if (gVue.$data.displayMode != null)
-        newUrl += "&displayMode=" + gVue.$data.displayMode;
-
-    if (gVue.$data.sortOption != null)
-        newUrl += "&sortOption=" + gVue.$data.sortOption;
-
-    if (gVue.$data.count != null)
-        newUrl += "&count=" + gVue.$data.count;
-        */
 
     let permalink = $("#permalink");
     permalink.attr("href", newUrl);
@@ -46,8 +38,26 @@ function genLink() {
 }
 
 function showQueryForm() {
+    let min,max;
+
+    let minFailRate = findGetParameter("minFailRate");
+    if (minFailRate != null) {
+        min = parseInt(minFailRate) ;
+    } else {
+        min = 0;
+    }
+
+    let maxFailRate = findGetParameter("maxFailRate");
+    if (maxFailRate != null) {
+        max = parseInt(maxFailRate);
+    } else {
+        max=100;
+    }
+
+
     gVue = new Vue({
         el: '#vueQueryForm',
+        vuetify: new Vuetify(),
         data: {
             tagSelected: '',
             tagsPresent: [""],
@@ -56,7 +66,12 @@ function showQueryForm() {
             //count of builds to merge
             count: 1,
             trustedTests: true,
-            checkAllLogs: false
+            checkAllLogs: false,
+            hideFlakyFailures: false,
+
+            absMinFailRate: 0,
+            absMaxFailRate: 100,
+            failRateRange: [min, max],
         },
         methods: {
             formChanged: function () {
@@ -100,6 +115,11 @@ function showQueryForm() {
         gVue.$data.checkAllLogs = checkAllLogs==="true";
     }
 
+    var hideFlakyFailuresP = findGetParameter("hideFlakyFailures");
+    if (hideFlakyFailuresP != null) {
+        gVue.$data.hideFlakyFailures = hideFlakyFailuresP==="true";
+    }
+
     genLink();
 }
 
@@ -145,6 +165,14 @@ function parmsForRest() {
     if (gVue.$data.count != null)
         curReqParms += "&count=" + gVue.$data.count;
 
+    if (gVue.$data.failRateRange[0] != null)
+        curReqParms += "&minFailRate=" + gVue.$data.failRateRange[0];
+
+    if (gVue.$data.failRateRange[1] != null)
+        curReqParms += "&maxFailRate=" + gVue.$data.failRateRange[1];
+
+    curReqParms += "&hideFlakyFailures=" + gVue.$data.hideFlakyFailures;
+
     return curReqParms;
 }
 
@@ -249,7 +277,15 @@ function showData(result) {
 
     //var txtUrl = "rest/tracked/results/txt" + parmsForRest();
 
-    $("#divFailures").html(showChainOnServersResults(result));
+    var minFailRate = gVue.$data.failRateRange[0];
+
+    var maxFailRate = gVue.$data.failRateRange[1];
+
+    var hideFlakyFailures = gVue.$data.hideFlakyFailures === true;
+
+    let resHtml = showChainResultsWithSettings(result, new 
Settings(minFailRate, maxFailRate, result.javaFlags, hideFlakyFailures));
+
+    $("#divFailures").html(resHtml);
     //        + " <a href='"+ txtUrl + "'>txt</a>");
 }
 
@@ -259,31 +295,88 @@ function showData(result) {
 <div id="vueQueryForm">
     <v-app id="prQueryForm" name="prQueryForm">
         <div class="formgroup">
-        <span>Tag filter: </span>
-        <select v-model="tagSelected" @change="formChanged">
-            <option disabled value="">Please select one</option>
-
-            <option v-for="option in tagsPresent" v-bind:value="option">
-                {{ option }}
-            </option>
-        </select>
-        <span>Display Mode: </span>
-        <select v-model="displayMode" @change="formChanged">
-            <option value="Failures">Show failures only</option>
-            <option value="AllSuites">Show all suites</option>
-        </select>
-        <span>Sort: </span>
-        <select v-model="sortOption" @change="formChanged">
-            <option value="FailureRate">Failure Rate</option>
-            <option value="SuiteDuration">Suite Duration</option>
-        </select>
-            <br>
-            <span>Merge Builds: </span> <input v-model.number="count" 
type="number" @change="formChanged">
-            &nbsp;&nbsp;<span title="Show trusted tests count">Trusted tests: 
</span> <input type="checkbox" v-model="trustedTests" @change="formChanged">
-            &nbsp;&nbsp;<span title="Download and parse all logs">Check logs: 
</span> <input type="checkbox" v-model="checkAllLogs" @change="formChanged">
+            <table>
+                <tr>
+                    <td>
+                        <span>Tag filter: </span>
+                        <select v-model="tagSelected" @change="formChanged">
+                            <option disabled value="">Please select 
one</option>
+
+                            <option v-for="option in tagsPresent" 
v-bind:value="option">
+                                {{ option }}
+                            </option>
+                        </select>
+                        <span>Display Mode: </span>
+                        <select v-model="displayMode" @change="formChanged">
+                            <option value="Failures">Show failures 
only</option>
+                            <option value="AllSuites">Show all suites</option>
+                        </select>
+                        <span>Sort: </span>
+                        <select v-model="sortOption" @change="formChanged">
+                            <option value="FailureRate">Failure Rate</option>
+                            <option value="SuiteDuration">Suite 
Duration</option>
+                        </select>
+                        <br>
+                        <span>Merge Builds: </span> <input 
v-model.number="count" type="number" @change="formChanged">
+                        &nbsp;&nbsp;<span title="Show trusted tests 
count">Trusted tests: </span>
+                        <input type="checkbox" v-model="trustedTests" 
@change="formChanged">
+                        &nbsp;&nbsp;<span title="Download and parse all 
logs">Check logs: </span>
+                        <input type="checkbox" v-model="checkAllLogs" 
@change="formChanged">
+
+                    </td>
+
+                    <td style="width: 50%">
+                        <v-expansion-panels>
+                            <v-expansion-panel>
+                                <v-expansion-panel-header>More 
options</v-expansion-panel-header>
+                                <v-expansion-panel-content>
+
+                                    &nbsp;&nbsp;<span title="Hide flaky 
failures">Hide flaky: </span>
+                                    <input type="checkbox" 
v-model="hideFlakyFailures" @change="formChanged">
+
+                                    <v-range-slider
+                                            v-model="failRateRange"
+                                            :max="absMaxFailRate"
+                                            :min="absMinFailRate"
+                                            hide-details
+                                            class="align-center"
+                                            @change="formChanged"
+                                    >
+                                        <template v-slot:prepend>
+                                            <span>Min failure rate: </span>
+                                            <v-text-field
+                                                    v-model="failRateRange[0]"
+                                                    class="mt-0 pt-0"
+                                                    hide-details
+                                                    single-line
+                                                    type="number"
+                                                    style="width: 
60px"></v-text-field>
+
+                                            <span>Max failure rate: </span>
+                                            <v-text-field
+                                                    v-model="failRateRange[1]"
+                                                    class="mt-0 pt-0"
+                                                    hide-details
+                                                    single-line
+                                                    type="number"
+                                                    style="width: 
60px"></v-text-field>
+                                        </template>
+                                        <template v-slot:append>
+
+                                        </template>
+                                    </v-range-slider>
+
+                                </v-expansion-panel-content>
+                            </v-expansion-panel>
+                        </v-expansion-panels>
+                    </td>
+                </tr>
+            </table>
 
             &nbsp;&nbsp; <span> <a id="permalink"></a> </span>
 
+
+
             &nbsp;&nbsp;
             <span id="loadStatus"></span>
         </div>

Reply via email to