From 4941597f26a4afb6ac5fed3fd80abef027527d96 Mon Sep 17 00:00:00 2001 From: vdelendik Date: Wed, 28 Jul 2021 12:29:48 +0000 Subject: [PATCH 01/27] #2310: switched to the latest reporting and specified concrete 3.8-management version for rabbitmq --- .env | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.env b/.env index 8c8e577e1..ddcbda4e4 100644 --- a/.env +++ b/.env @@ -1,10 +1,10 @@ -TAG_REPORTING_UI=1.24.0 -TAG_REPORTING_SERVICE=1.24.0 +TAG_REPORTING_UI=1.25.0.157-SNAPSHOT +TAG_REPORTING_SERVICE=1.24.0.203-SNAPSHOT TAG_ARTIFACTS_PROXY_SERVICE=1.8.0 TAG_MAIL_SERVICE=1.5 TAG_IAM_SERVICE=1.15.0 TAG_POSTGRES=9.6 -TAG_RABBITMQ=management +TAG_RABBITMQ=3.8-management TAG_REDIS=5.0.5 TAG_ELASTICSEARCH=7.9.0 TAG_LOGSTASH=7.9.0 From 2e8a61d3868296e7255e05f43ba483bf1671a1ca Mon Sep 17 00:00:00 2001 From: vdelendik Date: Tue, 28 Sep 2021 21:44:20 +0000 Subject: [PATCH 02/27] migration to 1.26 reporting --- .env | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.env b/.env index ddcbda4e4..cdeaf96ec 100644 --- a/.env +++ b/.env @@ -1,8 +1,8 @@ -TAG_REPORTING_UI=1.25.0.157-SNAPSHOT -TAG_REPORTING_SERVICE=1.24.0.203-SNAPSHOT +TAG_REPORTING_UI=1.26.0.188-SNAPSHOT +TAG_REPORTING_SERVICE=1.26.0.235-SNAPSHOT TAG_ARTIFACTS_PROXY_SERVICE=1.8.0 TAG_MAIL_SERVICE=1.5 -TAG_IAM_SERVICE=1.15.0 +TAG_IAM_SERVICE=1.15.0.125-SNAPSHOT TAG_POSTGRES=9.6 TAG_RABBITMQ=3.8-management TAG_REDIS=5.0.5 From da56aefbef57463e1e20673c2f92247727c56a25 Mon Sep 17 00:00:00 2001 From: vdelendik Date: Tue, 28 Sep 2021 22:33:38 +0000 Subject: [PATCH 03/27] bump up to the mino-storage v1.1 --- minio-storage | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/minio-storage b/minio-storage index 8b325ffdf..63476bec3 160000 --- a/minio-storage +++ b/minio-storage @@ -1 +1 @@ -Subproject commit 8b325ffdfa5035c599b9eeba9159549b1a2889af +Subproject commit 63476bec3227fd1f1467f5c5fc29c6739afd4cb1 From dcece8018dad33ab8bc64cec7dce9b3f0a955fa6 Mon Sep 17 00:00:00 2001 From: vdelendik Date: Tue, 28 Sep 2021 22:51:35 +0000 Subject: [PATCH 04/27] #2313: fixed backup/restore for rabbitmq part --- zebrunner.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zebrunner.sh b/zebrunner.sh index fbb0abf42..73f834a1a 100755 --- a/zebrunner.sh +++ b/zebrunner.sh @@ -208,7 +208,7 @@ cp configuration/rabbitmq/variables.env configuration/rabbitmq/variables.env.bak cp configuration/logstash/logstash.conf configuration/logstash/logstash.conf.bak cp configuration/_common/rabbitmq.env configuration/_common/rabbitmq.env.bak - cp configuration/rabbitmq/definitions/001-general-definition.json configuration/rabbitmq/definitions/001-general-definition.json.bak + cp configuration/rabbitmq/definitions/001-general-definition.json configuration/rabbitmq/001-general-definition.json.bak cp configuration/redis/redis.conf configuration/redis/redis.conf.bak cp configuration/reporting-service/variables.env configuration/reporting-service/variables.env.bak cp configuration/reporting-ui/variables.env configuration/reporting-ui/variables.env.bak @@ -238,7 +238,7 @@ cp configuration/rabbitmq/variables.env.bak configuration/rabbitmq/variables.env cp configuration/logstash/logstash.conf.bak configuration/logstash/logstash.conf cp configuration/_common/rabbitmq.env.bak configuration/_common/rabbitmq.env - cp configuration/rabbitmq/definitions/001-general-definition.json.bak configuration/rabbitmq/definitions/001-general-definition.json + cp configuration/rabbitmq/001-general-definition.json.bak configuration/rabbitmq/definitions/001-general-definition.json cp configuration/redis/redis.conf.bak configuration/redis/redis.conf cp configuration/reporting-service/variables.env.bak configuration/reporting-service/variables.env cp configuration/reporting-ui/variables.env.bak configuration/reporting-ui/variables.env From 94caedbc0a1873d1ed9c1246d789e94437c0fd7a Mon Sep 17 00:00:00 2001 From: vdelendik Date: Tue, 5 Oct 2021 17:54:44 +0000 Subject: [PATCH 05/27] bumpup to the latest reporting --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index cdeaf96ec..568ea94c8 100644 --- a/.env +++ b/.env @@ -1,5 +1,5 @@ TAG_REPORTING_UI=1.26.0.188-SNAPSHOT -TAG_REPORTING_SERVICE=1.26.0.235-SNAPSHOT +TAG_REPORTING_SERVICE=1.26.0.239-SNAPSHOT TAG_ARTIFACTS_PROXY_SERVICE=1.8.0 TAG_MAIL_SERVICE=1.5 TAG_IAM_SERVICE=1.15.0.125-SNAPSHOT From 7d84380d82ebd930eb63965ea9c16c323ca42d6c Mon Sep 17 00:00:00 2001 From: vdelendik Date: Wed, 6 Oct 2021 14:04:08 +0000 Subject: [PATCH 06/27] switched to the latest reporting --- .env | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.env b/.env index 568ea94c8..2adeac7c8 100644 --- a/.env +++ b/.env @@ -1,5 +1,5 @@ -TAG_REPORTING_UI=1.26.0.188-SNAPSHOT -TAG_REPORTING_SERVICE=1.26.0.239-SNAPSHOT +TAG_REPORTING_UI=1.26.0.191-SNAPSHOT +TAG_REPORTING_SERVICE=1.26.0.241-SNAPSHOT TAG_ARTIFACTS_PROXY_SERVICE=1.8.0 TAG_MAIL_SERVICE=1.5 TAG_IAM_SERVICE=1.15.0.125-SNAPSHOT From da88ae8d7856472e69111d37f42eac0b549d7a71 Mon Sep 17 00:00:00 2001 From: vdelendik Date: Thu, 7 Oct 2021 13:03:12 +0000 Subject: [PATCH 07/27] #2314: migrated to the latest widget templates --- database/reporting/sql/db-mng-data.sql | 2065 ++++++++++-------------- 1 file changed, 890 insertions(+), 1175 deletions(-) diff --git a/database/reporting/sql/db-mng-data.sql b/database/reporting/sql/db-mng-data.sql index 6a6054362..4444935bb 100644 --- a/database/reporting/sql/db-mng-data.sql +++ b/database/reporting/sql/db-mng-data.sql @@ -3,25 +3,27 @@ SET SCHEMA 'management'; --APPLICATION ISSUES (BLOCKERS) COUNT INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, LEGEND_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ('DEFECTS COUNT', 'A number of unique application bugs discovered and submitted by automation.', 'TABLE', '<#global WHERE_VALUES = { + "RUN_STATUS": join(STATUS), + "BUG": join(DEFECT), + "BUILD": join(BUILD), "ENV": join(ENV), "LOWER(PLATFORM)": join(PLATFORM), "LOWER(BROWSER)": join(BROWSER), "LOCALE": join(LOCALE), "PRIORITY": join(PRIORITY), - "BUILD": correct(BUILDS!""), - "RUN_NAME": correct(RUNS!""), - "OWNER": correct(USERS!"") + "RUN_NAME": join(RUN), + "OWNER": join(USER) }> <#global VIEW = PERIOD?replace(" ", "_") /> <#global WHERE_CLAUSE = generateWhereClause(WHERE_VALUES) /> - SELECT PLATFORM AS "PLATFORM", - BROWSER AS "BROWSER", - COUNT(DISTINCT KNOWN_ISSUE) AS "COUNT" + SELECT OWNER AS "OWNER", + ''
'' || COUNT(DISTINCT(BUG))::TEXT || ''
'' AS "COUNT" FROM ${VIEW} ${WHERE_CLAUSE} - GROUP BY PLATFORM, BROWSER + GROUP BY 1 + ORDER BY 2 DESC <#-- Generates WHERE clause @@ -32,7 +34,9 @@ INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS <#local result = "WHERE KNOWN_ISSUE > 0"/> <#list map?keys as key> - <#if map[key]?has_content> + <#if map[key]?has_content && map[key]?contains("null")> + <#local result = result + addCondition("AND", "(${key} LIKE ANY (''{" + map[key] + "}'') OR ${key} IS NULL)", result) /> + <#elseif map[key]?has_content> <#local result = result + addCondition("AND", "${key} LIKE ANY (''{" + map[key] + "}'')", result) /> @@ -42,26 +46,10 @@ INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS <#local result = result + addCondition("AND", "OWNER_ID=${currentUserId}", result) /> - <#if activeProjectId?has_content> - <#local result = result + addCondition("AND", "PROJECT_ID=${activeProjectId}", result) /> + <#if projectId?has_content> + <#local result = result + addCondition("AND", "PROJECT_ID=${projectId?c}", result) /> - <#if MILESTONE?has_content> - <#local result = result + addCondition("AND", "MILESTONE = ''" + MILESTONE + "''", result) /> - - <#if MILESTONE_VERSION?has_content> - <#if MILESTONE_VERSION?lower_case == "latest"> - <#local result = result + addCondition("AND", "MILESTONE_VERSION = ( - SELECT MAX(UPSTREAM_JOB_BUILD_NUMBER) - FROM TEST_RUNS INNER JOIN - JOBS ON TEST_RUNS.UPSTREAM_JOB_ID = JOBS.ID - WHERE JOBS.NAME=''${MILESTONE}'')", result) /> - <#elseif isDecimal(MILESTONE_VERSION)> - <#local result = result + addCondition("AND", "MILESTONE_VERSION = ''" + MILESTONE_VERSION + "''", result) /> - - - - <#return result> @@ -116,353 +104,116 @@ INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS <#return result /> - - -<#-- - verify that value is number - @return - boolean - --> -<#function isDecimal value> - <#attempt> - <#assign num = value?number> - <#local result = true /> - <#recover> - <#local result = false /> - - <#return result /> -', '{"columns": ["PLATFORM", "BROWSER", "COUNT"]}', '{ +', '{"columns": ["OWNER", "COUNT"]}', '{ "PERIOD": { "values": [ + "Today", "Last 24 Hours", + "Week", "Last 7 Days", "Last 14 Days", - "Last 30 Days", - "Last 90 Days", - "Last 365 Days", - "Today", - "Week", "Month", + "Last 30 Days", "Quarter", + "Last 90 Days", "Year", + "Last 365 Days", "Total" ], "required": true }, - "ENV": { + "STATUS": { "values": [], - "valuesQuery": "SELECT DISTINCT ENV FROM TEST_CONFIGS WHERE ENV IS NOT NULL AND ENV <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(UPPER(STATUS)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", "multiple": true }, - "PLATFORM": { + "DEFECT": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(PLATFORM) FROM TEST_CONFIGS WHERE PLATFORM <> '''' AND PLATFORM IS NOT NULL ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(VALUE) FROM ISSUE_REFERENCES INNER JOIN TEST_EXECUTIONS ON ISSUE_REFERENCES.ID=TEST_EXECUTIONS.ISSUE_REFERENCE_ID INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID=TEST_SUITE_EXECUTIONS.ID ${whereClause} ORDER BY 1 DESC;", "multiple": true }, - "LOCALE": { + "USER": { "values": [], - "valuesQuery": "SELECT DISTINCT LOCALE FROM TEST_CONFIGS WHERE LOCALE IS NOT NULL AND LOCALE <> '''';", - "multiple": true - }, - "BROWSER": { - "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(BROWSER) FROM TEST_CONFIGS WHERE BROWSER <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(USERS.USERNAME) FROM TEST_SUITE_EXECUTIONS INNER JOIN TEST_EXECUTIONS ON TEST_SUITE_EXECUTIONS.ID=TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID INNER JOIN USERS ON TEST_EXECUTIONS.MAINTAINER_ID=USERS.ID ${whereClause} ORDER BY 1;", "multiple": true }, "PRIORITY": { "values": [], - "valuesQuery": "SELECT VALUE FROM LABELS WHERE KEY=''priority'' ORDER BY 1;", + "valuesQuery": "select unnest(array[''P0'', ''P1'', ''P2'', ''P3'', ''P4'', ''P5'', ''P6'']);", "multiple": true }, - "USERS": { - "value": "", - "required": false - }, - "BUILDS": { - "value": "", - "required": false - }, - "RUNS": { - "value": "", - "required": false - }, - "MILESTONE": { - "value": "", - "required": false - }, - "MILESTONE_VERSION": { - "value": "", - "required": false - } -}', '', '{ - "PERIOD": "Total", - "currentUserId": 2, - "dashboardName": "", - "ENV": [], - "PLATFORM": [], - "BROWSER": [], - "LOCALE": [], - "PRIORITY": [], - "BUILDS": "", - "RUNS": "", - "MILESTONE": "", - "MILESTONE_VERSION": "l", - "USERS": "" -}', false); - ---APPLICATION ISSUES (BLOCKERS) DETAILS -INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, LEGEND_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ('DEFECTS DETAILS', - 'Detailed information about known issues.', 'TABLE', '<#global WHERE_VALUES = { - "OWNER": join(USER), - "ENV": join(ENV), - "LOCALE": join(LOCALE), - "PRIORITY": join(PRIORITY), - "LOWER(PLATFORM)": join(PLATFORM), - "LOWER(BROWSER)": join(BROWSER), - "RUN_NAME": correct(RUNS!"") -}> -<#global VIEW = PERIOD?replace(" ", "_") /> -<#global WHERE_CLAUSE = generateWhereClause(WHERE_VALUES) /> - -SELECT - distinct(BUG) as BUG, - '''' || BUG || '''' AS "ISSUE", - ENV AS "ENV", - OWNER AS "OWNER", - PLATFORM AS "PLATFORM", - PLATFORM_VERSION AS "PLATFORM_VERSION", - BROWSER AS "BROWSER", - BROWSER_VERSION AS "BROWSER_VERSION", - BUILD AS "BUILD", - LOCALE AS "LOCALE", - <#if activeProjectId?has_content> - '''' || TESTS.NAME || '''' AS "TEST_INFO_URL", - <#else> - '''' || TESTS.NAME || '''' AS "TEST_INFO_URL", - - MESSAGE AS "Error Message" - FROM ${VIEW} - INNER JOIN TESTS on ${VIEW}.TEST_RUN_ID = TESTS.TEST_RUN_ID - ${WHERE_CLAUSE} - - -<#-- - Generates WHERE clause - @map - collected multiple choosen data (key - DB column name : value - expected DB value) - @return - generated WHERE clause ---> -<#function generateWhereClause map> - <#local result = "WHERE TESTS.KNOWN_ISSUE = TRUE AND BUG IS NOT NULL"/> - - <#list map?keys as key> - <#if map[key]?has_content> - <#local result = result + addCondition("AND", "${key} LIKE ANY (''{" + map[key] + "}'')", result) /> - - - - <#if activeProjectId?has_content> - <#local result = result + addCondition("AND", "PROJECT_ID=${activeProjectId}", result) /> - - - <#if isPersonal() && !USERS?has_content> - - <#local result = result + addCondition("AND", "OWNER_ID=${currentUserId}", result) /> - - - <#if MILESTONE?has_content> - <#local result = result + addCondition("AND", "MILESTONE = ''" + MILESTONE + "''", result) /> - - <#if MILESTONE_VERSION?has_content> - <#if MILESTONE_VERSION?lower_case == "latest"> - <#local result = result + addCondition("AND", "MILESTONE_VERSION = ( - SELECT MAX(UPSTREAM_JOB_BUILD_NUMBER) - FROM TEST_RUNS INNER JOIN - JOBS ON TEST_RUNS.UPSTREAM_JOB_ID = JOBS.ID - WHERE JOBS.NAME=''${MILESTONE}'')", result) /> - <#elseif isDecimal(MILESTONE_VERSION)> - <#local result = result + addCondition("AND", "MILESTONE_VERSION = ''" + MILESTONE_VERSION + "''", result) /> - - - - - <#return result> - - -<#-- - Joins array values using '', '' separator - @array - to join - @return - joined array as string - --> -<#function join array=[]> - <#return array?join('', '') /> - - -<#-- - Correct string value removing ending comma if any - @line - to analyze and correct - @return - corrected line - --> -<#function correct line> - <#if line?has_content> - - <#return line?trim?remove_ending(",") /> - <#else> - - <#return "" /> - - - -<#-- - Add valid SQL clause using condition and operator - @operator - AND/OR/BETWEEN etc - @condition - field(s) condition - @query - existing where conditions - @return - concatenated where clause conditions - --> -<#function addCondition operator, condition, query> - <#if query?length != 0> - <#return " " + operator + " " + condition> - <#else> - <#return condition> - - - -<#-- - retrun true if dashboard name is ''Personal'' or ''User Performance'' - @return - boolean - --> -<#function isPersonal> - <#local result = false /> - <#if dashboardName?has_content> - <#if dashboardName == "Personal" || dashboardName == "User Performance"> - <#local result = true /> - - - <#return result /> - - -<#-- - verify that value is number - @return - boolean - --> -<#function isDecimal value> - <#attempt> - <#assign num = value?number> - <#local result = true /> - <#recover> - <#local result = false /> - - <#return result /> -', '{"columns": ["ISSUE", "ENV", "OWNER", "PLATFORM", "PLATFORM_VERSION", "BROWSER", "BROWSER_VERSION", "BUILD", "LOCALE", "TEST_INFO_URL", "Error Message"]}', '{ - "PERIOD": { - "values": [ - "Last 24 Hours", - "Last 7 Days", - "Last 14 Days", - "Last 30 Days", - "Last 90 Days", - "Last 365 Days", - "Today", - "Week", - "Month", - "Quarter", - "Year", - "Total" - ], - "required": true - }, - "JIRA_URL": { - "value": "https://mycompany.atlassian.net/browse", - "required": true - }, "ENV": { "values": [], - "valuesQuery": "SELECT DISTINCT ENV FROM TEST_CONFIGS WHERE ENV IS NOT NULL AND ENV <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(UPPER(ENVIRONMENT)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", "multiple": true }, "PLATFORM": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(PLATFORM) FROM TEST_CONFIGS WHERE PLATFORM <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(LOWER(TEST_EXECUTION_CONFIGS.PLATFORM)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true - }, - "LOCALE": { + }, + "BROWSER": { "values": [], - "valuesQuery": "SELECT DISTINCT LOCALE FROM TEST_CONFIGS WHERE LOCALE IS NOT NULL AND LOCALE <> '''';", + "valuesQuery": "SELECT DISTINCT(LOWER(BROWSER)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true - }, - "BROWSER": { + }, + "LOCALE": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(BROWSER) FROM TEST_CONFIGS WHERE BROWSER <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(LOCALE) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true }, - "PRIORITY": { + "BUILD": { "values": [], - "valuesQuery": "SELECT VALUE FROM LABELS WHERE KEY=''priority'' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(BUILD) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1 DESC;", "multiple": true }, - "USERS": { - "value": "", - "required": false - }, - "BUILDS": { - "value": "", - "required": false - }, - "RUNS": { - "value": "", - "required": false - }, - "MILESTONE": { - "value": "", - "required": false - }, - "MILESTONE_VERSION": { - "value": "", - "required": false - } -}', '{"legend": ["ISSUE", "ENV", "OWNER", "PLATFORM", "PLATFORM_VERSION", "BROWSER", "BROWSER_VERSION", "BUILD", "LOCALE", "TEST_INFO_URL", "Error Message"]}', '{ - "PERIOD": "Total", - "JIRA_URL": "https://mycompany.atlassian.net/browse", + "RUN": { + "values": [], + "valuesQuery": "SELECT DISTINCT(NAME) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", + "multiple": true + } +}', '', '{ + "PERIOD": "Today", "currentUserId": 2, - "dashboardName": "", + "dashboardName": "", + "STATUS": [], + "DEFECT": [], + "BUILD": [], "ENV": [], "PLATFORM": [], "BROWSER": [], "LOCALE": [], "PRIORITY": [], - "BUILDS": "", - "RUNS": "", - "MILESTONE": "", - "MILESTONE_VERSION": "250", - "USERS": "" + "RUN": [], + "USER": [] }', false); --TESTS FAILURES BY SUITE INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ('FAILURES BY RUN', 'Show failures per run.', 'TABLE', '<#global WHERE_VALUES = { + "RUN_STATUS": join(STATUS), + "BUG": join(DEFECT), + "BUILD": join(BUILD), "ENV": join(ENV), "LOWER(PLATFORM)": join(PLATFORM), "LOWER(BROWSER)": join(BROWSER), "LOCALE": join(LOCALE), "PRIORITY": join(PRIORITY), - "BUILD": correct(BUILDS!""), - "RUN_NAME": correct(RUNS!""), - "OWNER": correct(USERS!"") + "RUN_NAME": join(RUN), + "OWNER": join(USER) }> <#global VIEW = PERIOD?replace(" ", "_") /> <#global WHERE_CLAUSE = generateWhereClause(WHERE_VALUES) /> - SELECT + SELECT RUN_NAME AS "RUN", - TEST_METHOD AS "TESTCASE", SUM(FAILED) AS "FAILURES COUNT", SUM(TOTAL) AS "TOTAL COUNT", - ROUND(SUM(FAILED)*100/COUNT(*)) AS "FAILURE %" + ROUND(SUM(FAILED)/SUM(TOTAL)*100) AS "FAILURE %" FROM ${VIEW} - INNER JOIN TESTS on ${VIEW}.TEST_RUN_ID = TESTS.TEST_RUN_ID - INNER JOIN TEST_CASES ON TESTS.TEST_CASE_ID = TEST_CASES.ID ${WHERE_CLAUSE} - GROUP BY 1, 2 + GROUP BY 1 HAVING SUM(FAILED) > 0 ORDER BY 1 @@ -476,7 +227,9 @@ INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS <#local result = "" /> <#list map?keys as key> - <#if map[key]?has_content> + <#if map[key]?has_content && map[key]?contains("null")> + <#local result = result + addCondition("AND", "(${key} LIKE ANY (''{" + map[key] + "}'') OR ${key} IS NULL)", result) /> + <#elseif map[key]?has_content> <#local result = result + addCondition("AND", "${key} LIKE ANY (''{" + map[key] + "}'')", result) /> @@ -486,26 +239,10 @@ INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS <#local result = result + addCondition("AND", "OWNER_ID=${currentUserId}", result) /> - <#if activeProjectId?has_content> - <#local result = result + addCondition("AND", "${VIEW}.PROJECT_ID=${activeProjectId}", result) /> + <#if projectId?has_content> + <#local result = result + addCondition("AND", "${VIEW}.PROJECT_ID=${projectId?c}", result) /> - <#if MILESTONE?has_content> - <#local result = result + addCondition("AND", "MILESTONE = ''" + MILESTONE + "''", result) /> - - <#if MILESTONE_VERSION?has_content> - <#if MILESTONE_VERSION?lower_case == "latest"> - <#local result = result + addCondition("AND", "MILESTONE_VERSION = ( - SELECT MAX(UPSTREAM_JOB_BUILD_NUMBER) - FROM TEST_RUNS INNER JOIN - JOBS ON TEST_RUNS.UPSTREAM_JOB_ID = JOBS.ID - WHERE JOBS.NAME=''${MILESTONE}'')", result) /> - <#elseif isDecimal(MILESTONE_VERSION)> - <#local result = result + addCondition("AND", "MILESTONE_VERSION = ''" + MILESTONE_VERSION + "''", result) /> - - - - <#if result?length != 0> <#local result = " WHERE " + result/> @@ -563,133 +300,131 @@ INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS <#return result /> - - -<#-- - verify that value is number - @return - boolean - --> -<#function isDecimal value> - <#attempt> - <#assign num = value?number> - <#local result = true /> - <#recover> - <#local result = false /> - - <#return result /> -', '{"columns": ["RUN", "TESTCASE", "FAILURES COUNT", "TOTAL COUNT", "FAILURE %"]}', '{ +', '{"columns": ["RUN", "FAILURES COUNT", "TOTAL COUNT", "FAILURE %"]}', '{ "PERIOD": { "values": [ + "Today", "Last 24 Hours", + "Week", "Last 7 Days", "Last 14 Days", - "Last 30 Days", - "Last 90 Days", - "Last 365 Days", - "Today", - "Week", "Month", + "Last 30 Days", "Quarter", + "Last 90 Days", "Year", + "Last 365 Days", "Total" ], "required": true }, + "STATUS": { + "values": [], + "valuesQuery": "SELECT DISTINCT(UPPER(STATUS)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", + "multiple": true + }, + "DEFECT": { + "values": [], + "valuesQuery": "SELECT DISTINCT(VALUE) FROM ISSUE_REFERENCES INNER JOIN TEST_EXECUTIONS ON ISSUE_REFERENCES.ID=TEST_EXECUTIONS.ISSUE_REFERENCE_ID INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID=TEST_SUITE_EXECUTIONS.ID ${whereClause} ORDER BY 1 DESC;", + "multiple": true + }, + "USER": { + "values": [], + "valuesQuery": "SELECT DISTINCT(USERS.USERNAME) FROM TEST_SUITE_EXECUTIONS INNER JOIN TEST_EXECUTIONS ON TEST_SUITE_EXECUTIONS.ID=TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID INNER JOIN USERS ON TEST_EXECUTIONS.MAINTAINER_ID=USERS.ID ${whereClause} ORDER BY 1;", + "multiple": true + }, + "PRIORITY": { + "values": [], + "valuesQuery": "select unnest(array[''P0'', ''P1'', ''P2'', ''P3'', ''P4'', ''P5'', ''P6'']);", + "multiple": true + }, "ENV": { "values": [], - "valuesQuery": "SELECT DISTINCT ENV FROM TEST_CONFIGS WHERE ENV IS NOT NULL AND ENV <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(UPPER(ENVIRONMENT)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", "multiple": true }, "PLATFORM": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(PLATFORM) FROM TEST_CONFIGS WHERE PLATFORM <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(LOWER(TEST_EXECUTION_CONFIGS.PLATFORM)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true - }, - "LOCALE": { + }, + "BROWSER": { "values": [], - "valuesQuery": "SELECT DISTINCT LOCALE FROM TEST_CONFIGS WHERE LOCALE IS NOT NULL AND LOCALE <> '''';", + "valuesQuery": "SELECT DISTINCT(LOWER(BROWSER)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true - }, - "BROWSER": { + }, + "LOCALE": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(BROWSER) FROM TEST_CONFIGS WHERE BROWSER <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(LOCALE) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true }, - "PRIORITY": { + "BUILD": { "values": [], - "valuesQuery": "SELECT VALUE FROM LABELS WHERE KEY=''priority'' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(BUILD) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1 DESC;", "multiple": true }, - "USERS": { - "value": "", - "required": false - }, - "BUILDS": { - "value": "", - "required": false - }, - "RUNS": { - "value": "", - "required": false - }, - "MILESTONE": { - "value": "", - "required": false - }, - "MILESTONE_VERSION": { - "value": "", - "required": false - } + "RUN": { + "values": [], + "valuesQuery": "SELECT DISTINCT(NAME) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", + "multiple": true + } }', '{ - "PERIOD": "Total", + "PERIOD": "Today", "currentUserId": 2, "dashboardName": "", + "STATUS": [], + "DEFECT": [], + "BUILD": [], "ENV": [], "PLATFORM": [], "BROWSER": [], "LOCALE": [], "PRIORITY": [], - "BUILDS": "", - "RUNS": "", - "MILESTONE": "", - "MILESTONE_VERSION": "250", - "USERS": "" + "RUN": [], + "USER": [] }', false); --TESTS FAILURES BY REASON INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, LEGEND_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ('FAILURES BY REASON', 'Summarized information about failures grouped by reason.', 'TABLE', '<#global WHERE_VALUES = { - "ENVIRONMENT": join(ENV), + "RUN_STATUS": join(STATUS), + "BUG": join(DEFECT), + "BUILD": join(BUILD), + "ENV": join(ENV), "LOWER(PLATFORM)": join(PLATFORM), "LOWER(BROWSER)": join(BROWSER), "LOCALE": join(LOCALE), - "PRIORITY_LABELS.VALUE": join(PRIORITY), - "BUILD": correct(BUILDS!""), - "TEST_RUNS.NAME": correct(RUNS!""), - "USERS.USERNAME": correct(USERS!"") + "PRIORITY": join(PRIORITY), + "RUN_NAME": join(RUN), + "OWNER": join(USER) }> <#global VIEW = PERIOD?replace(" ", "_") /> <#global WHERE_CLAUSE = generateWhereClause(WHERE_VALUES, PERIOD) /> SELECT - substring(MIN(TESTS.MESSAGE) from 1 for 200) as "ERROR", - count(*) as "#", - <#if activeProjectId?has_content> - '''' || BUG || '''' + END AS "DEFECT", + SUM(TOTAL) as "#", + <#if projectId?has_content> + ''View'' AS "REPORT", + ''?PERIOD=${PERIOD}&hashcode='' || MESSAGE_HASHCODE || ''">View'' AS "REPORT", <#else> ''View'' AS "REPORT", + ''?PERIOD=${PERIOD}&hashcode='' || MESSAGE_HASHCODE || ''">View'' AS "REPORT", - to_char(date_trunc(''day'', MIN(TESTS.START_TIME)), ''YYYY-MM-DD'') AS "SINCE", - to_char(date_trunc(''day'', MAX(TESTS.START_TIME)), ''YYYY-MM-DD'') AS "REPRO" - FROM TESTS - JOIN TEST_RUNS ON TESTS.TEST_RUN_ID = TEST_RUNS.ID + (SELECT to_char(date_trunc(''day'', MIN(START_TIME)), ''YYYY-MM-DD'') FROM TEST_EXECUTIONS WHERE MESSAGE_HASH_CODE=MESSAGE_HASHCODE) AS "SINCE", + to_char(date_trunc(''day'', MAX(STARTED_AT)), ''YYYY-MM-DD'') AS "REPRO" + FROM ${VIEW} + LEFT JOIN INTEGRATION_JIRA_CONFIGS ON ${VIEW}.PROJECT_ID = INTEGRATION_JIRA_CONFIGS.PROJECT_ID ${WHERE_CLAUSE} - GROUP BY MESSAGE_HASH_CODE + GROUP BY "REASON", "DEFECT", MESSAGE_HASHCODE HAVING COUNT(*) >= ${ERROR_COUNT} - ORDER BY 2 DESC + ORDER BY 3 DESC, 1, 2 <#-- Generates WHERE clause @@ -697,77 +432,26 @@ SELECT @return - generated WHERE clause --> <#function generateWhereClause map, period> - <#local result = "WHERE MESSAGE_HASH_CODE IS NOT NULL - AND TESTS.STATUS <> ''PASSED''" /> + <#local result = "WHERE MESSAGE_HASHCODE IS NOT NULL AND MESSAGE_HASHCODE <> 0" /> - <#switch period> - <#case "Last 24 Hours"> - <#local result += " AND TESTS.START_TIME >= (current_date - interval ''1 day'')" /> - <#break> - <#case "Last 7 Days"> - <#local result += " AND TESTS.START_TIME >= (current_date - interval ''7 day'')" /> - <#break> - <#case "Last 14 Days"> - <#local result += " AND TESTS.START_TIME >= (current_date - interval ''14 day'')" /> - <#break> - <#case "Last 30 Days"> - <#local result += " AND TESTS.START_TIME >= (current_date - interval ''30 day'')" /> - <#break> - <#case "Last 90 Days"> - <#local result += " AND TESTS.START_TIME >= (current_date - interval ''90 day'')" /> - <#break> - <#case "Last 365 Days"> - <#local result += " AND TESTS.START_TIME >= (current_date - interval ''365 day'')" /> - <#break> - <#case "Today"> - <#local result += " AND TESTS.START_TIME >= current_date" /> - <#break> - <#case "Week"> - <#local result += " AND TESTS.START_TIME >= date_trunc(''week'', current_date)" /> - <#break> - <#case "Month"> - <#local result += " AND TESTS.START_TIME >= date_trunc(''month'', current_date)" /> - <#break> - <#case "Quarter"> - <#local result += " AND TESTS.START_TIME >= date_trunc(''quarter'', current_date)" /> - <#break> - <#case "Year"> - <#local result += " AND TESTS.START_TIME >= date_trunc(''year'', current_date)" /> - <#break> - - - <#if activeProjectId?has_content> - <#local result = result + addCondition("AND", "ACTIVE_PROJECT_ID=${activeProjectId}", result) /> - + <#if projectId?has_content> + <#local result = result + addCondition("AND", "${VIEW}.PROJECT_ID=${projectId?c}", result) /> + <#list map?keys as key> - <#if map[key]?has_content> + <#if map[key]?has_content && map[key]?contains("null")> + <#local result = result + addCondition("AND", "(${key} LIKE ANY (''{" + map[key] + "}'') OR ${key} IS NULL)", result) /> + <#elseif map[key]?has_content> <#local result = result + addCondition("AND", "${key} LIKE ANY (''{" + map[key] + "}'')", result) /> <#if isPersonal() && !USERS?has_content> - <#local result = result + addCondition("AND", "MAINTAINER_ID=${currentUserId}", result) /> - - - <#if MILESTONE?has_content> - <#local result = result + addCondition("AND", "upstream_jobs.name = ''" + MILESTONE + "''", result) /> - - <#if MILESTONE_VERSION?has_content> - <#if MILESTONE_VERSION?lower_case == "latest"> - <#local result = result + addCondition("AND", "test_runs.upstream_job_build_number = ( - SELECT MAX(UPSTREAM_JOB_BUILD_NUMBER) - FROM TEST_RUNS INNER JOIN - JOBS ON TEST_RUNS.UPSTREAM_JOB_ID = JOBS.ID - WHERE JOBS.NAME=''${MILESTONE}'')", result) /> - <#elseif isDecimal(MILESTONE_VERSION)> - <#local result = result + addCondition("AND", "test_runs.upstream_job_build_number = ''" + MILESTONE_VERSION + "''", result) /> - - + <#local result = result + addCondition("AND", "OWNER_ID=${currentUserId}", result) /> - - <#return result> + + <#return result> <#-- @@ -821,34 +505,20 @@ SELECT <#return result /> - - -<#-- - verify that value is number - @return - boolean - --> -<#function isDecimal value> - <#attempt> - <#assign num = value?number> - <#local result = true /> - <#recover> - <#local result = false /> - - <#return result /> -', '{"columns": ["ERROR","#", "REPORT", "SINCE", "REPRO"]}', '{ +', '{"columns": ["REASON", "DEFECT", "#", "REPORT", "SINCE", "REPRO"]}', '{ "PERIOD": { "values": [ + "Today", "Last 24 Hours", + "Week", "Last 7 Days", "Last 14 Days", - "Last 30 Days", - "Last 90 Days", - "Last 365 Days", - "Today", - "Week", "Month", + "Last 30 Days", "Quarter", + "Last 90 Days", "Year", + "Last 365 Days", "Total" ], "required": true @@ -857,97 +527,145 @@ SELECT "value": "0", "required": true }, + "STATUS": { + "values": [], + "valuesQuery": "SELECT DISTINCT(UPPER(STATUS)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", + "multiple": true + }, + "DEFECT": { + "values": [], + "valuesQuery": "SELECT DISTINCT(VALUE) FROM ISSUE_REFERENCES INNER JOIN TEST_EXECUTIONS ON ISSUE_REFERENCES.ID=TEST_EXECUTIONS.ISSUE_REFERENCE_ID INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID=TEST_SUITE_EXECUTIONS.ID ${whereClause} ORDER BY 1 DESC;", + "multiple": true + }, + "USER": { + "values": [], + "valuesQuery": "SELECT DISTINCT(USERS.USERNAME) FROM TEST_SUITE_EXECUTIONS INNER JOIN TEST_EXECUTIONS ON TEST_SUITE_EXECUTIONS.ID=TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID INNER JOIN USERS ON TEST_EXECUTIONS.MAINTAINER_ID=USERS.ID ${whereClause} ORDER BY 1;", + "multiple": true + }, + "PRIORITY": { + "values": [], + "valuesQuery": "select unnest(array[''P0'', ''P1'', ''P2'', ''P3'', ''P4'', ''P5'', ''P6'']);", + "multiple": true + }, "ENV": { "values": [], - "valuesQuery": "SELECT DISTINCT ENV FROM TEST_CONFIGS WHERE ENV IS NOT NULL AND ENV <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(UPPER(ENVIRONMENT)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", "multiple": true }, "PLATFORM": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(PLATFORM) FROM TEST_CONFIGS WHERE PLATFORM <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(LOWER(TEST_EXECUTION_CONFIGS.PLATFORM)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true - }, + }, + "BROWSER": { + "values": [], + "valuesQuery": "SELECT DISTINCT(LOWER(BROWSER)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", + "multiple": true + }, "LOCALE": { "values": [], - "valuesQuery": "SELECT DISTINCT LOCALE FROM TEST_CONFIGS WHERE LOCALE IS NOT NULL AND LOCALE <> '''';", + "valuesQuery": "SELECT DISTINCT(LOCALE) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true }, - "BROWSER": { + "BUILD": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(BROWSER) FROM TEST_CONFIGS WHERE BROWSER <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(BUILD) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1 DESC;", "multiple": true - }, - "PRIORITY": { + }, + "RUN": { "values": [], - "valuesQuery": "SELECT VALUE FROM LABELS WHERE KEY=''priority'' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(NAME) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", "multiple": true - }, - "USERS": { - "value": "", - "required": false - }, - "BUILDS": { - "value": "", - "required": false - }, - "RUNS": { - "value": "", - "required": false - }, - "MILESTONE": { - "value": "", - "required": false - }, - "MILESTONE_VERSION": { - "value": "", - "required": false } -}', '{"legend": ["ERROR","#", "REPORT", "SINCE", "REPRO"]}', '{ - "PERIOD": "Month", - "currentUserId": 1, - "activeProjectId": 1, - "dashboardName": "", +}', '', '{ + "PERIOD": "Today", "ERROR_COUNT": 0, + "currentUserId": -1, + "dashboardName": "", + "STATUS": [], + "DEFECT": [], + "BUILD": [], "ENV": [], "PLATFORM": [], "BROWSER": [], "LOCALE": [], "PRIORITY": [], - "BUILDS": "", - "RUNS": "", - "MILESTONE": "", - "MILESTONE_VERSION": "", - "USERS": "" + "RUN": [], + "USER": [] }', false); --TEST FAILURE DETAILS INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, LEGEND_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ('FAILURES DETAILS', 'Detailed information about same/similar errors.', 'TABLE', '<#global VIEW = PERIOD?replace(" ", "_") /> -<#global WHERE_CLAUSE = generateWhereClause() /> +<#global WHERE_CLAUSE = generateWhereClause(PERIOD) /> -SELECT DISTINCT RUN_NAME AS "RUN", - <#if activeProjectId?has_content> - '''' || TESTS.NAME || '''' AS "TEST", - <#else> - '''' || TESTS.NAME || '''' AS "TEST", - - '''' || BUG || '''' AS "ISSUE" - FROM ${VIEW} - INNER JOIN TESTS on ${VIEW}.TEST_RUN_ID = TESTS.TEST_RUN_ID - ${WHERE_CLAUSE} - ORDER BY "RUN", "TEST" DESC +SELECT + TEST_SUITE_EXECUTIONS.NAME AS "RUN", + <#if projectId?has_content> + '''' || TEST_EXECUTIONS.NAME || '''' AS "TEST", + <#else> + '''' || TEST_EXECUTIONS.NAME || '''' AS "TEST", + + CASE + WHEN (INTEGRATION_JIRA_CONFIGS.URL IS NULL OR INTEGRATION_JIRA_CONFIGS.ENABLED=false) + THEN ISSUE_REFERENCES.VALUE + ELSE '''' || ISSUE_REFERENCES.VALUE || '''' + END AS "DEFECT" +FROM TEST_EXECUTIONS + INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID = TEST_SUITE_EXECUTIONS.ID + LEFT JOIN ISSUE_REFERENCES ON TEST_EXECUTIONS.ISSUE_REFERENCE_ID = ISSUE_REFERENCES.ID + LEFT JOIN INTEGRATION_JIRA_CONFIGS ON TEST_SUITE_EXECUTIONS.PROJECT_ID = INTEGRATION_JIRA_CONFIGS.PROJECT_ID +${WHERE_CLAUSE} +ORDER BY 1, 2 DESC +--ORDER BY 2 DESC <#-- Generates WHERE clause + @map - collected multiple choosen data (key - DB column name : value - expected DB value) @return - generated WHERE clause --> -<#function generateWhereClause> - <#local result = "WHERE MESSAGE_HASHCODE<>0 AND TESTS.MESSAGE_HASH_CODE<>0 - AND TESTS.MESSAGE_HASH_CODE IN(${hashcode}) - AND MESSAGE_HASHCODE IN(${hashcode})"/> +<#function generateWhereClause period> + <#local result = "WHERE TEST_EXECUTIONS.MESSAGE_HASH_CODE<>0 AND TEST_EXECUTIONS.MESSAGE_HASH_CODE =${hashcode}"/> + + <#switch period> + <#case "Last 24 Hours"> + <#local result += " AND TEST_EXECUTIONS.START_TIME >= (current_date - interval ''1 day'')" /> + <#break> + <#case "Last 7 Days"> + <#local result += " AND TEST_EXECUTIONS.START_TIME >= (current_date - interval ''7 day'')" /> + <#break> + <#case "Last 14 Days"> + <#local result += " AND TEST_EXECUTIONS.START_TIME >= (current_date - interval ''14 day'')" /> + <#break> + <#case "Last 30 Days"> + <#local result += " AND TEST_EXECUTIONS.START_TIME >= (current_date - interval ''30 day'')" /> + <#break> + <#case "Last 90 Days"> + <#local result += " AND TEST_EXECUTIONS.START_TIME >= (current_date - interval ''90 day'')" /> + <#break> + <#case "Last 365 Days"> + <#local result += " AND TEST_EXECUTIONS.START_TIME >= (current_date - interval ''365 day'')" /> + <#break> + <#case "Today"> + <#local result += " AND TEST_EXECUTIONS.START_TIME >= current_date" /> + <#break> + <#case "Week"> + <#local result += " AND TEST_EXECUTIONS.START_TIME >= date_trunc(''week'', current_date)" /> + <#break> + <#case "Month"> + <#local result += " AND TEST_EXECUTIONS.START_TIME >= date_trunc(''month'', current_date)" /> + <#break> + <#case "Quarter"> + <#local result += " AND TEST_EXECUTIONS.START_TIME >= date_trunc(''quarter'', current_date)" /> + <#break> + <#case "Year"> + <#local result += " AND TEST_EXECUTIONS.START_TIME >= date_trunc(''year'', current_date)" /> + <#break> + + - <#if activeProjectId?has_content> - <#local result = result + addCondition("AND", "PROJECT_ID=${activeProjectId}", result) /> + <#if projectId?has_content> + <#local result = result + addCondition("AND", "TEST_SUITE_EXECUTIONS.PROJECT_ID=${projectId?c}", result) /> <#return result> @@ -966,32 +684,27 @@ SELECT DISTINCT RUN_NAME AS "RUN", <#else> <#return condition> -', '{"columns": ["RUN", "TEST", "ISSUE"]}', '{ +', '{"columns": ["RUN", "TEST", "DEFECT"]}', '{ "PERIOD": { "values": [ + "Today", "Last 24 Hours", + "Week", "Last 7 Days", "Last 14 Days", - "Last 30 Days", - "Last 90 Days", - "Last 365 Days", - "Today", - "Week", "Month", + "Last 30 Days", "Quarter", + "Last 90 Days", "Year", + "Last 365 Days", "Total" ], "required": true - }, - "JIRA_URL": { - "value": "https://mycompany.atlassian.net/browse", - "required": true } }', '', '{ - "PERIOD": "Total", - "hashcode": -1, - "JIRA_URL": "https://mycompany.atlassian.net/browse" + "PERIOD": "Last 30 Days", + "hashcode": -1 }', true); --TEST FAILURE COUNT @@ -1000,7 +713,7 @@ INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS <#global VIEW = PERIOD?replace(" ", "_") /> SELECT SUM(TOTAL)::text AS "#", - substring((SELECT TESTS.MESSAGE FROM TESTS WHERE TESTS.MESSAGE_HASH_CODE=MIN(MESSAGE_HASHCODE) LIMIT 1) from 1 for 512) as "ERROR/STABILITY", + substring((SELECT TEST_EXECUTIONS.MESSAGE FROM TEST_EXECUTIONS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID = TEST_SUITE_EXECUTIONS.ID WHERE TEST_SUITE_EXECUTIONS.PROJECT_ID=${projectId?c} AND TEST_EXECUTIONS.MESSAGE_HASH_CODE=MIN(MESSAGE_HASHCODE) LIMIT 1) from 1 for 512) as "ERROR/STABILITY", to_char(date_trunc(''day'', MIN(STARTED_AT)), ''YYYY-MM-DD'') AS "SINCE", to_char(date_trunc(''day'', MAX(STARTED_AT)), ''YYYY-MM-DD'') AS "REPRO" FROM ${VIEW} @@ -1014,8 +727,8 @@ FROM ${VIEW} <#function generateWhereClause> <#local result = "WHERE MESSAGE_HASHCODE<>0 AND MESSAGE_HASHCODE IN (${hashcode})"/> - <#if activeProjectId?has_content> - <#local result = result + addCondition("AND", "PROJECT_ID=${activeProjectId}", result) /> + <#if projectId?has_content> + <#local result = result + addCondition("AND", "PROJECT_ID=${projectId?c}", result) /> <#return result> @@ -1037,42 +750,42 @@ FROM ${VIEW} ', '{"columns": ["#", "ERROR/STABILITY", "SINCE", "REPRO"]}', '{ "PERIOD": { "values": [ + "Today", "Last 24 Hours", + "Week", "Last 7 Days", "Last 14 Days", - "Last 30 Days", - "Last 90 Days", - "Last 365 Days", - "Today", - "Week", "Month", + "Last 30 Days", "Quarter", + "Last 90 Days", "Year", + "Last 365 Days", "Total" ], "required": true } }', '', '{ - "PERIOD": "Month", - "hashcode": -1, - "activeProjectId": 1 + "PERIOD": "Today", + "hashcode": -1 }', true); INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, LEGEND_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ( 'PASS RATE (BAR)', 'Pass rate bar chart with an extra grouping by owner, env, locale etc.', 'BAR', '<#global WHERE_VALUES = { + "RUN_STATUS": join(STATUS), + "BUG": join(DEFECT), + "BUILD": join(BUILD), "ENV": join(ENV), "LOWER(PLATFORM)": join(PLATFORM), "LOWER(BROWSER)": join(BROWSER), "LOCALE": join(LOCALE), "PRIORITY": join(PRIORITY), - "BUILD": correct(BUILDS!""), - "RUN_NAME": correct(RUNS!""), - "OWNER": correct(USERS!"") + "RUN_NAME": join(RUN), + "OWNER": join(USER) }> <#global VIEW = PERIOD?replace(" ", "_") /> <#global WHERE_CLAUSE = generateWhereClause(WHERE_VALUES) /> - SELECT ${GROUP_BY} AS "GROUP_FIELD", sum( PASSED ) AS "PASSED", sum( KNOWN_ISSUE ) AS "KNOWN ISSUE", @@ -1094,7 +807,9 @@ ORDER BY 1 DESC <#local result = "" /> <#list map?keys as key> - <#if map[key]?has_content> + <#if map[key]?has_content && map[key]?contains("null")> + <#local result = result + addCondition("AND", "(${key} LIKE ANY (''{" + map[key] + "}'') OR ${key} IS NULL)", result) /> + <#elseif map[key]?has_content> <#local result = result + addCondition("AND", "${key} LIKE ANY (''{" + map[key] + "}'')", result) /> @@ -1104,24 +819,8 @@ ORDER BY 1 DESC <#local result = result + addCondition("AND", "OWNER_ID=${currentUserId}", result) /> - <#if activeProjectId?has_content> - <#local result = result + addCondition("AND", "PROJECT_ID=${activeProjectId}", result) /> - - - <#if MILESTONE?has_content> - <#local result = result + addCondition("AND", "MILESTONE = ''" + MILESTONE + "''", result) /> - - <#if MILESTONE_VERSION?has_content> - <#if MILESTONE_VERSION?lower_case == "latest"> - <#local result = result + addCondition("AND", "MILESTONE_VERSION = ( - SELECT MAX(UPSTREAM_JOB_BUILD_NUMBER) - FROM TEST_RUNS INNER JOIN - JOBS ON TEST_RUNS.UPSTREAM_JOB_ID = JOBS.ID - WHERE JOBS.NAME=''${MILESTONE}'')", result) /> - <#elseif isDecimal(MILESTONE_VERSION)> - <#local result = result + addCondition("AND", "MILESTONE_VERSION = ''" + MILESTONE_VERSION + "''", result) /> - - + <#if projectId?has_content> + <#local result = result + addCondition("AND", "PROJECT_ID=${projectId?c}", result) /> <#if result?length != 0> @@ -1181,20 +880,6 @@ ORDER BY 1 DESC <#return result /> - - -<#-- - verify that value is number - @return - boolean - --> -<#function isDecimal value> - <#attempt> - <#assign num = value?number> - <#local result = true /> - <#recover> - <#local result = false /> - - <#return result /> ', 'setTimeout(() => { const dimensions = [ "GROUP_FIELD", @@ -1343,17 +1028,17 @@ ORDER BY 1 DESC }, 1000)', '{ "PERIOD": { "values": [ + "Today", "Last 24 Hours", + "Week", "Last 7 Days", "Last 14 Days", - "Last 30 Days", - "Last 90 Days", - "Last 365 Days", - "Today", - "Week", "Month", + "Last 30 Days", "Quarter", + "Last 90 Days", "Year", + "Last 365 Days", "Total" ], "required": true @@ -1367,83 +1052,89 @@ ORDER BY 1 DESC "RUN_NAME", "PLATFORM", "BROWSER", - "PRIORITY", - "BUG" + "PRIORITY" ], "required": true - }, + }, + "STATUS": { + "values": [], + "valuesQuery": "SELECT DISTINCT(UPPER(STATUS)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", + "multiple": true + }, + "DEFECT": { + "values": [], + "valuesQuery": "SELECT DISTINCT(VALUE) FROM ISSUE_REFERENCES INNER JOIN TEST_EXECUTIONS ON ISSUE_REFERENCES.ID=TEST_EXECUTIONS.ISSUE_REFERENCE_ID INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID=TEST_SUITE_EXECUTIONS.ID ${whereClause} ORDER BY 1 DESC;", + "multiple": true + }, + "USER": { + "values": [], + "valuesQuery": "SELECT DISTINCT(USERS.USERNAME) FROM TEST_SUITE_EXECUTIONS INNER JOIN TEST_EXECUTIONS ON TEST_SUITE_EXECUTIONS.ID=TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID INNER JOIN USERS ON TEST_EXECUTIONS.MAINTAINER_ID=USERS.ID ${whereClause} ORDER BY 1;", + "multiple": true + }, + "PRIORITY": { + "values": [], + "valuesQuery": "select unnest(array[''P0'', ''P1'', ''P2'', ''P3'', ''P4'', ''P5'', ''P6'']);", + "multiple": true + }, "ENV": { "values": [], - "valuesQuery": "SELECT DISTINCT ENV FROM TEST_CONFIGS WHERE ENV IS NOT NULL AND ENV <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(UPPER(ENVIRONMENT)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", "multiple": true }, "PLATFORM": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(PLATFORM) FROM TEST_CONFIGS WHERE PLATFORM <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(LOWER(TEST_EXECUTION_CONFIGS.PLATFORM)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true - }, - "LOCALE": { + }, + "BROWSER": { "values": [], - "valuesQuery": "SELECT DISTINCT LOCALE FROM TEST_CONFIGS WHERE LOCALE IS NOT NULL AND LOCALE <> '''';", + "valuesQuery": "SELECT DISTINCT(LOWER(BROWSER)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true - }, - "BROWSER": { + }, + "LOCALE": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(BROWSER) FROM TEST_CONFIGS WHERE BROWSER <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(LOCALE) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true }, - "PRIORITY": { + "BUILD": { "values": [], - "valuesQuery": "SELECT VALUE FROM LABELS WHERE KEY=''priority'' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(BUILD) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1 DESC;", "multiple": true }, - "USERS": { - "value": "", - "required": false - }, - "BUILDS": { - "value": "", - "required": false - }, - "RUNS": { - "value": "", - "required": false - }, - "MILESTONE": { - "value": "", - "required": false - }, - "MILESTONE_VERSION": { - "value": "", - "required": false - } + "RUN": { + "values": [], + "valuesQuery": "SELECT DISTINCT(NAME) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", + "multiple": true + } }', '', '{ "PERIOD": "Today", "GROUP_BY": "PLATFORM", "currentUserId": 2, "dashboardName": "", + "STATUS": [], + "DEFECT": [], + "BUILD": [], "ENV": [], "PLATFORM": [], "BROWSER": [], "LOCALE": [], "PRIORITY": [], - "BUILDS": "", - "RUNS": "", - "MILESTONE": "", - "MILESTONE_VERSION": "250", - "USERS": "" + "RUN": [], + "USER": [] }', false); INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ('PASS RATE (CALENDAR)', 'Calendar view of the pass rate per month, quarter or year.', 'OTHER', '<#global WHERE_VALUES = { + "RUN_STATUS": join(STATUS), + "BUG": join(DEFECT), + "BUILD": join(BUILD), "ENV": join(ENV), "LOWER(PLATFORM)": join(PLATFORM), "LOWER(BROWSER)": join(BROWSER), "LOCALE": join(LOCALE), "PRIORITY": join(PRIORITY), - "BUILD": correct(BUILDS!""), - "RUN_NAME": correct(RUNS!""), - "OWNER": correct(USERS!"") + "RUN_NAME": join(RUN), + "OWNER": join(USER) }> <#global WHERE_CLAUSE = generateWhereClause(WHERE_VALUES) /> @@ -1485,7 +1176,9 @@ SELECT <#list map?keys as key> - <#if map[key]?has_content> + <#if map[key]?has_content && map[key]?contains("null")> + <#local result = result + addCondition("AND", "(${key} LIKE ANY (''{" + map[key] + "}'') OR ${key} IS NULL)", result) /> + <#elseif map[key]?has_content> <#local result = result + addCondition("AND", "${key} LIKE ANY (''{" + map[key] + "}'')", result) /> @@ -1495,12 +1188,8 @@ SELECT <#local result = result + addCondition("AND", "OWNER_ID=${currentUserId}", result) /> - <#if activeProjectId?has_content> - <#local result = result + addCondition("AND", "PROJECT_ID=${activeProjectId}", result) /> - - - <#if MILESTONE?has_content> - <#local result = result + addCondition("AND", "MILESTONE = ''" + MILESTONE + "''", result) /> + <#if projectId?has_content> + <#local result = result + addCondition("AND", "PROJECT_ID=${projectId?c}", result) /> <#if result?length != 0> @@ -1670,78 +1359,85 @@ chart.setOption(option);', '{ "value": 75, "required": true }, + "STATUS": { + "values": [], + "valuesQuery": "SELECT DISTINCT(UPPER(STATUS)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", + "multiple": true + }, + "DEFECT": { + "values": [], + "valuesQuery": "SELECT DISTINCT(VALUE) FROM ISSUE_REFERENCES INNER JOIN TEST_EXECUTIONS ON ISSUE_REFERENCES.ID=TEST_EXECUTIONS.ISSUE_REFERENCE_ID INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID=TEST_SUITE_EXECUTIONS.ID ${whereClause} ORDER BY 1 DESC;", + "multiple": true + }, + "USER": { + "values": [], + "valuesQuery": "SELECT DISTINCT(USERS.USERNAME) FROM TEST_SUITE_EXECUTIONS INNER JOIN TEST_EXECUTIONS ON TEST_SUITE_EXECUTIONS.ID=TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID INNER JOIN USERS ON TEST_EXECUTIONS.MAINTAINER_ID=USERS.ID ${whereClause} ORDER BY 1;", + "multiple": true + }, + "PRIORITY": { + "values": [], + "valuesQuery": "select unnest(array[''P0'', ''P1'', ''P2'', ''P3'', ''P4'', ''P5'', ''P6'']);", + "multiple": true + }, "ENV": { "values": [], - "valuesQuery": "SELECT DISTINCT ENV FROM TEST_CONFIGS WHERE ENV IS NOT NULL AND ENV <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(UPPER(ENVIRONMENT)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", "multiple": true }, "PLATFORM": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(PLATFORM) FROM TEST_CONFIGS WHERE PLATFORM <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(LOWER(TEST_EXECUTION_CONFIGS.PLATFORM)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true - }, - "LOCALE": { + }, + "BROWSER": { "values": [], - "valuesQuery": "SELECT DISTINCT LOCALE FROM TEST_CONFIGS WHERE LOCALE IS NOT NULL AND LOCALE <> '''';", + "valuesQuery": "SELECT DISTINCT(LOWER(BROWSER)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true - }, - "BROWSER": { + }, + "LOCALE": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(BROWSER) FROM TEST_CONFIGS WHERE BROWSER <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(LOCALE) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true }, - "PRIORITY": { + "BUILD": { "values": [], - "valuesQuery": "SELECT VALUE FROM LABELS WHERE KEY=''priority'' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(BUILD) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1 DESC;", "multiple": true }, - "USERS": { - "value": "", - "required": false - }, - "BUILDS": { - "value": "", - "required": false - }, - "RUNS": { - "value": "", - "required": false - }, - "MILESTONE": { - "value": "", - "required": false - }, - "MILESTONE_VERSION": { - "value": "", - "required": false - } + "RUN": { + "values": [], + "valuesQuery": "SELECT DISTINCT(NAME) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", + "multiple": true + } }', '{ "PERIOD": "MONTH", "PASSED_VALUE": "75", "currentUserId": 2, "dashboardName": "", + "STATUS": [], + "DEFECT": [], + "BUILD": [], "ENV": [], "PLATFORM": [], "BROWSER": [], "LOCALE": [], "PRIORITY": [], - "BUILDS": "", - "RUNS": "", - "MILESTONE": "", - "MILESTONE_VERSION": "250", - "USERS": "" + "RUN": [], + "USER": [] }', false); INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, LEGEND_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ('PASS RATE (LINE)', 'Consolidated tests status data supporting 10+ extra filters.', 'LINE', '<#global WHERE_VALUES = { + "RUN_STATUS": join(STATUS), + "BUG": join(DEFECT), + "BUILD": join(BUILD), "ENV": join(ENV), "LOWER(PLATFORM)": join(PLATFORM), "LOWER(BROWSER)": join(BROWSER), "LOCALE": join(LOCALE), "PRIORITY": join(PRIORITY), - "BUILD": correct(BUILDS!""), - "RUN_NAME": correct(RUNS!""), - "OWNER": correct(USERS!"") + "RUN_NAME": join(RUN), + "OWNER": join(USER) }> <#global VIEW = PERIOD?replace(" ", "_") /> <#global WHERE_CLAUSE = generateWhereClause(WHERE_VALUES) /> @@ -1768,7 +1464,9 @@ ORDER BY ${GROUP_AND_ORDER_BY}; <#local result = "" /> <#list map?keys as key> - <#if map[key]?has_content> + <#if map[key]?has_content && map[key]?contains("null")> + <#local result = result + addCondition("AND", "(${key} LIKE ANY (''{" + map[key] + "}'') OR ${key} IS NULL)", result) /> + <#elseif map[key]?has_content> <#local result = result + addCondition("AND", "${key} LIKE ANY (''{" + map[key] + "}'')", result) /> @@ -1778,14 +1476,10 @@ ORDER BY ${GROUP_AND_ORDER_BY}; <#local result = result + addCondition("AND", "OWNER_ID=${currentUserId}", result) /> - <#if activeProjectId?has_content> - <#local result = result + addCondition("AND", "PROJECT_ID=${activeProjectId}", result) /> + <#if projectId?has_content> + <#local result = result + addCondition("AND", "PROJECT_ID=${projectId?c}", result) /> - <#if MILESTONE?has_content> - <#local result = result + addCondition("AND", "MILESTONE = ''" + MILESTONE + "''", result) /> - - <#if result?length != 0> <#local result = "WHERE " + result/> @@ -1933,87 +1627,99 @@ window.onresize = function(event) { chart.setOption(option);', '{ "PERIOD": { "values": [ + "Today", "Last 24 Hours", + "Week", "Last 7 Days", "Last 14 Days", - "Last 30 Days", - "Last 90 Days", - "Last 365 Days", - "Today", - "Week", "Month", + "Last 30 Days", "Quarter", + "Last 90 Days", "Year", + "Last 365 Days", "Total" ], "required": true }, + "STATUS": { + "values": [], + "valuesQuery": "SELECT DISTINCT(UPPER(STATUS)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", + "multiple": true + }, + "DEFECT": { + "values": [], + "valuesQuery": "SELECT DISTINCT(VALUE) FROM ISSUE_REFERENCES INNER JOIN TEST_EXECUTIONS ON ISSUE_REFERENCES.ID=TEST_EXECUTIONS.ISSUE_REFERENCE_ID INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID=TEST_SUITE_EXECUTIONS.ID ${whereClause} ORDER BY 1 DESC;", + "multiple": true + }, + "USER": { + "values": [], + "valuesQuery": "SELECT DISTINCT(USERS.USERNAME) FROM TEST_SUITE_EXECUTIONS INNER JOIN TEST_EXECUTIONS ON TEST_SUITE_EXECUTIONS.ID=TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID INNER JOIN USERS ON TEST_EXECUTIONS.MAINTAINER_ID=USERS.ID ${whereClause} ORDER BY 1;", + "multiple": true + }, + "PRIORITY": { + "values": [], + "valuesQuery": "select unnest(array[''P0'', ''P1'', ''P2'', ''P3'', ''P4'', ''P5'', ''P6'']);", + "multiple": true + }, "ENV": { "values": [], - "valuesQuery": "SELECT DISTINCT ENV FROM TEST_CONFIGS WHERE ENV IS NOT NULL AND ENV <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(UPPER(ENVIRONMENT)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", "multiple": true }, "PLATFORM": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(PLATFORM) FROM TEST_CONFIGS WHERE PLATFORM <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(LOWER(TEST_EXECUTION_CONFIGS.PLATFORM)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true - }, - "LOCALE": { + }, + "BROWSER": { "values": [], - "valuesQuery": "SELECT DISTINCT LOCALE FROM TEST_CONFIGS WHERE LOCALE IS NOT NULL AND LOCALE <> '''';", + "valuesQuery": "SELECT DISTINCT(LOWER(BROWSER)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true - }, - "BROWSER": { + }, + "LOCALE": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(BROWSER) FROM TEST_CONFIGS WHERE BROWSER <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(LOCALE) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true }, - "PRIORITY": { + "BUILD": { "values": [], - "valuesQuery": "SELECT VALUE FROM LABELS WHERE KEY=''priority'' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(BUILD) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1 DESC;", "multiple": true }, - "USERS": { - "value": "", - "required": false - }, - "BUILDS": { - "value": "", - "required": false - }, - "RUNS": { - "value": "", - "required": false - }, - "MILESTONE": { - "value": "", - "required": false - } + "RUN": { + "values": [], + "valuesQuery": "SELECT DISTINCT(NAME) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", + "multiple": true + } }', '', '{ - "PERIOD": "Quarter", + "PERIOD": "Month", "currentUserId": 2, "dashboardName": "", + "STATUS": [], + "DEFECT": [], + "BUILD": [], "ENV": [], "PLATFORM": [], "BROWSER": [], "LOCALE": [], "PRIORITY": [], - "BUILDS": "", - "RUNS": "", - "MILESTONE": "", - "USERS": "" + "RUN": [], + "USER": [] }', false); INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, LEGEND_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ('PASS RATE (PIE)', 'Consolidated tests status data supporting 10+ extra filters.', 'PIE', '<#global WHERE_VALUES = { + "RUN_STATUS": join(STATUS), + "BUG": join(DEFECT), + "BUILD": join(BUILD), "ENV": join(ENV), "LOWER(PLATFORM)": join(PLATFORM), "LOWER(BROWSER)": join(BROWSER), "LOCALE": join(LOCALE), "PRIORITY": join(PRIORITY), - "BUILD": correct(BUILDS!""), - "RUN_NAME": correct(RUNS!""), - "OWNER": correct(USERS!"") + "RUN_NAME": join(RUN), + "OWNER": join(USER) }> <#global VIEW = PERIOD?replace(" ", "_") /> <#global WHERE_CLAUSE = generateWhereClause(WHERE_VALUES) /> @@ -2066,13 +1772,15 @@ ${WHERE_CLAUSE} <#local result = "" /> <#list map?keys as key> - <#if map[key]?has_content> + <#if map[key]?has_content && map[key]?contains("null")> + <#local result = result + addCondition("AND", "(${key} LIKE ANY (''{" + map[key] + "}'') OR ${key} IS NULL)", result) /> + <#elseif map[key]?has_content> <#local result = result + addCondition("AND", "${key} LIKE ANY (''{" + map[key] + "}'')", result) /> - + - <#if activeProjectId?has_content> - <#local result = result + addCondition("AND", "PROJECT_ID=${activeProjectId}", result) /> + <#if projectId?has_content> + <#local result = result + addCondition("AND", "PROJECT_ID=${projectId?c}", result) /> <#if isPersonal() && !USERS?has_content> @@ -2080,22 +1788,6 @@ ${WHERE_CLAUSE} <#local result = result + addCondition("AND", "OWNER_ID=${currentUserId}", result) /> - <#if MILESTONE?has_content> - <#local result = result + addCondition("AND", "MILESTONE = ''" + MILESTONE + "''", result) /> - - <#if MILESTONE_VERSION?has_content> - <#if MILESTONE_VERSION?lower_case == "latest"> - <#local result = result + addCondition("AND", "MILESTONE_VERSION = ( - SELECT MAX(UPSTREAM_JOB_BUILD_NUMBER) - FROM TEST_RUNS INNER JOIN - JOBS ON TEST_RUNS.UPSTREAM_JOB_ID = JOBS.ID - WHERE JOBS.NAME=''${MILESTONE}'')", result) /> - <#elseif isDecimal(MILESTONE_VERSION)> - <#local result = result + addCondition("AND", "MILESTONE_VERSION = ''" + MILESTONE_VERSION + "''", result) /> - - - - <#if result?length != 0> <#local result = "WHERE " + result/> @@ -2153,20 +1845,6 @@ ${WHERE_CLAUSE} <#return result /> - - -<#-- - verify that value is number - @return - boolean - --> -<#function isDecimal value> - <#attempt> - <#assign num = value?number> - <#local result = true /> - <#recover> - <#local result = false /> - - <#return result /> ', ' option = { "legend": { @@ -2231,97 +1909,104 @@ chart.setOption(option); ', '{ "PERIOD": { "values": [ + "Today", "Last 24 Hours", + "Week", "Last 7 Days", "Last 14 Days", - "Last 30 Days", - "Last 90 Days", - "Last 365 Days", - "Today", - "Week", "Month", + "Last 30 Days", "Quarter", + "Last 90 Days", "Year", + "Last 365 Days", "Total" ], "required": true }, + "STATUS": { + "values": [], + "valuesQuery": "SELECT DISTINCT(UPPER(STATUS)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", + "multiple": true + }, + "DEFECT": { + "values": [], + "valuesQuery": "SELECT DISTINCT(VALUE) FROM ISSUE_REFERENCES INNER JOIN TEST_EXECUTIONS ON ISSUE_REFERENCES.ID=TEST_EXECUTIONS.ISSUE_REFERENCE_ID INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID=TEST_SUITE_EXECUTIONS.ID ${whereClause} ORDER BY 1 DESC;", + "multiple": true + }, + "USER": { + "values": [], + "valuesQuery": "SELECT DISTINCT(USERS.USERNAME) FROM TEST_SUITE_EXECUTIONS INNER JOIN TEST_EXECUTIONS ON TEST_SUITE_EXECUTIONS.ID=TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID INNER JOIN USERS ON TEST_EXECUTIONS.MAINTAINER_ID=USERS.ID ${whereClause} ORDER BY 1;", + "multiple": true + }, + "PRIORITY": { + "values": [], + "valuesQuery": "select unnest(array[''P0'', ''P1'', ''P2'', ''P3'', ''P4'', ''P5'', ''P6'']);", + "multiple": true + }, "ENV": { "values": [], - "valuesQuery": "SELECT DISTINCT ENV FROM TEST_CONFIGS WHERE ENV IS NOT NULL AND ENV <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(UPPER(ENVIRONMENT)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", "multiple": true }, "PLATFORM": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(PLATFORM) FROM TEST_CONFIGS WHERE PLATFORM <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(LOWER(TEST_EXECUTION_CONFIGS.PLATFORM)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true - }, - "LOCALE": { + }, + "BROWSER": { "values": [], - "valuesQuery": "SELECT DISTINCT LOCALE FROM TEST_CONFIGS WHERE LOCALE IS NOT NULL AND LOCALE <> '''';", + "valuesQuery": "SELECT DISTINCT(LOWER(BROWSER)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true - }, - "BROWSER": { + }, + "LOCALE": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(BROWSER) FROM TEST_CONFIGS WHERE BROWSER <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(LOCALE) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true }, - "PRIORITY": { + "BUILD": { "values": [], - "valuesQuery": "SELECT VALUE FROM LABELS WHERE KEY=''priority'' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(BUILD) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1 DESC;", "multiple": true }, - "USERS": { - "value": "", - "required": false - }, - "BUILDS": { - "value": "", - "required": false - }, - "RUNS": { - "value": "", - "required": false - }, - "MILESTONE": { - "value": "", - "required": false - }, - "MILESTONE_VERSION": { - "value": "", - "required": false - } + "RUN": { + "values": [], + "valuesQuery": "SELECT DISTINCT(NAME) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", + "multiple": true + } }', '', '{ "PERIOD": "Total", "currentUserId": 2, "dashboardName": "", + "STATUS": [], + "DEFECT": [], + "BUILD": [], "ENV": [], "PLATFORM": [], "BROWSER": [], "LOCALE": [], "PRIORITY": [], - "RUNS": "", - "JOBS": "", - "MILESTONE": "", - "MILESTONE_VERSION": "250", - "USERS": "" + "RUN": [], + "USER": [] }', false); INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ('PASS RATE (PIE + LINE)', 'Consolidated tests status data supporting 10+ extra filters.', 'OTHER','<#global WHERE_VALUES = { + "RUN_STATUS": join(STATUS), + "BUG": join(DEFECT), + "BUILD": join(BUILD), "ENV": join(ENV), "LOWER(PLATFORM)": join(PLATFORM), "LOWER(BROWSER)": join(BROWSER), "LOCALE": join(LOCALE), "PRIORITY": join(PRIORITY), - "BUILD": correct(BUILDS!""), - "RUN_NAME": correct(RUNS!""), - "OWNER": correct(USERS!"") + "RUN_NAME": join(RUN), + "OWNER": join(USER) }> <#global VIEW = PERIOD?replace(" ", "_") /> <#global WHERE_CLAUSE = generateWhereClause(WHERE_VALUES) /> -<#global GROUP_AND_ORDER_BY = getGroupBy(PERIOD, MILESTONE) /> +<#global GROUP_AND_ORDER_BY = getGroupBy(PERIOD) /> SELECT ${GROUP_AND_ORDER_BY} AS "STARTED_AT", @@ -2344,7 +2029,9 @@ ORDER BY ${GROUP_AND_ORDER_BY}; <#local result = "" /> <#list map?keys as key> - <#if map[key]?has_content> + <#if map[key]?has_content && map[key]?contains("null")> + <#local result = result + addCondition("AND", "(${key} LIKE ANY (''{" + map[key] + "}'') OR ${key} IS NULL)", result) /> + <#elseif map[key]?has_content> <#local result = result + addCondition("AND", "${key} LIKE ANY (''{" + map[key] + "}'')", result) /> @@ -2354,32 +2041,20 @@ ORDER BY ${GROUP_AND_ORDER_BY}; <#local result = result + addCondition("AND", "OWNER_ID=${currentUserId}", result) /> - <#if activeProjectId?has_content> - <#local result = result + addCondition("AND", "PROJECT_ID=${activeProjectId}", result) /> + <#if projectId?has_content> + <#local result = result + addCondition("AND", "PROJECT_ID=${projectId?c}", result) /> - <#if MILESTONE?has_content> - <#local result = result + addCondition("AND", "MILESTONE = ''" + MILESTONE + "''", result) /> - - <#if result?length != 0> <#local result = "WHERE " + result/> <#return result> -<#-- - Retrieves actual view name by abstract view description - @value - abstract view description - @return - actual view name - --> -<#function getGroupBy Period, parentJob> - <#local result = "" /> - <#if parentJob?has_content> - <#local result = "MILESTONE_VERSION" /> - <#else> - <#local result = getStartedAt(PERIOD) /> - - <#return result> + + +<#function getGroupBy Period> + <#local result = getStartedAt(PERIOD) /> + <#return result> <#-- @@ -2693,89 +2368,99 @@ let lineRow = { }, 1000)' , '{ "PERIOD": { "values": [ + "Today", "Last 24 Hours", + "Week", "Last 7 Days", "Last 14 Days", - "Last 30 Days", - "Last 90 Days", - "Last 365 Days", - "Today", - "Week", "Month", + "Last 30 Days", "Quarter", + "Last 90 Days", "Year", + "Last 365 Days", "Total" ], "required": true }, + "STATUS": { + "values": [], + "valuesQuery": "SELECT DISTINCT(UPPER(STATUS)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", + "multiple": true + }, + "DEFECT": { + "values": [], + "valuesQuery": "SELECT DISTINCT(VALUE) FROM ISSUE_REFERENCES INNER JOIN TEST_EXECUTIONS ON ISSUE_REFERENCES.ID=TEST_EXECUTIONS.ISSUE_REFERENCE_ID INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID=TEST_SUITE_EXECUTIONS.ID ${whereClause} ORDER BY 1 DESC;", + "multiple": true + }, + "USER": { + "values": [], + "valuesQuery": "SELECT DISTINCT(USERS.USERNAME) FROM TEST_SUITE_EXECUTIONS INNER JOIN TEST_EXECUTIONS ON TEST_SUITE_EXECUTIONS.ID=TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID INNER JOIN USERS ON TEST_EXECUTIONS.MAINTAINER_ID=USERS.ID ${whereClause} ORDER BY 1;", + "multiple": true + }, + "PRIORITY": { + "values": [], + "valuesQuery": "select unnest(array[''P0'', ''P1'', ''P2'', ''P3'', ''P4'', ''P5'', ''P6'']);", + "multiple": true + }, "ENV": { "values": [], - "valuesQuery": "SELECT DISTINCT ENV FROM TEST_CONFIGS WHERE ENV IS NOT NULL AND ENV <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(UPPER(ENVIRONMENT)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", "multiple": true }, "PLATFORM": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(PLATFORM) FROM TEST_CONFIGS WHERE PLATFORM <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(LOWER(TEST_EXECUTION_CONFIGS.PLATFORM)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true - }, - "LOCALE": { + }, + "BROWSER": { "values": [], - "valuesQuery": "SELECT DISTINCT LOCALE FROM TEST_CONFIGS WHERE LOCALE IS NOT NULL AND LOCALE <> '''';", + "valuesQuery": "SELECT DISTINCT(LOWER(BROWSER)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true - }, - "BROWSER": { + }, + "LOCALE": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(BROWSER) FROM TEST_CONFIGS WHERE BROWSER <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(LOCALE) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true }, - "PRIORITY": { + "BUILD": { "values": [], - "valuesQuery": "SELECT VALUE FROM LABELS WHERE KEY=''priority'' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(BUILD) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1 DESC;", "multiple": true }, - "USERS": { - "value": "", - "required": false - }, - "BUILDS": { - "value": "", - "required": false - }, - "RUNS": { - "value": "", - "required": false - }, - "MILESTONE": { - "value": "", - "required": false - } + "RUN": { + "values": [], + "valuesQuery": "SELECT DISTINCT(NAME) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", + "multiple": true + } }', '{ "PERIOD": "Total", "currentUserId": 2, "dashboardName": "", + "STATUS": [], + "DEFECT": [], + "BUILD": [], "ENV": [], "PLATFORM": [], "BROWSER": [], "LOCALE": [], "PRIORITY": [], - "BUILDS": "", - "RUNS": "", - "MILESTONE": "", - "USERS": "" + "RUN": [], + "USER": [] }', false); INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, LEGEND_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ('TEST CASE DURATION TREND', 'All kind of duration metrics per test case.', 'LINE', '<#global WHERE_CLAUSE = generateWhereClause() /> SELECT - ROUND(AVG(EXTRACT(EPOCH FROM (TESTS.FINISH_TIME - TESTS.START_TIME)))::numeric, 2) as "AVG TIME", - ROUND(MAX(EXTRACT(EPOCH FROM (TESTS.FINISH_TIME - TESTS.START_TIME)))::numeric, 2) as "MAX TIME", - ROUND(MIN(EXTRACT(EPOCH FROM (TESTS.FINISH_TIME - TESTS.START_TIME)))::numeric, 2) as "MIN TIME", - to_char(date_trunc(''month'', TESTS.START_TIME), ''YYYY-MM'') AS "TESTED_AT" -FROM TESTS - INNER JOIN TEST_RUNS ON TESTS.TEST_RUN_ID = TEST_RUNS.ID + ROUND(AVG(EXTRACT(EPOCH FROM (TEST_EXECUTIONS.FINISH_TIME - TEST_EXECUTIONS.START_TIME)))::numeric, 2) as "AVG TIME", + ROUND(MAX(EXTRACT(EPOCH FROM (TEST_EXECUTIONS.FINISH_TIME - TEST_EXECUTIONS.START_TIME)))::numeric, 2) as "MAX TIME", + ROUND(MIN(EXTRACT(EPOCH FROM (TEST_EXECUTIONS.FINISH_TIME - TEST_EXECUTIONS.START_TIME)))::numeric, 2) as "MIN TIME", + to_char(date_trunc(''month'', TEST_EXECUTIONS.START_TIME), ''YYYY-MM'') AS "TESTED_AT" +FROM TEST_EXECUTIONS + INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID = TEST_SUITE_EXECUTIONS.ID ${WHERE_CLAUSE} -GROUP BY date_trunc(''month'', TESTS.START_TIME) +GROUP BY date_trunc(''month'', TEST_EXECUTIONS.START_TIME) ORDER BY "TESTED_AT" @@ -2784,7 +2469,7 @@ ORDER BY "TESTED_AT" @return - generated WHERE clause --> <#function generateWhereClause> - <#local result = "WHERE TEST_CASE_ID=${testCaseId} AND TESTS.FINISH_TIME IS NOT NULL AND TESTS.START_TIME IS NOT NULL AND TESTS.STATUS <> ''IN_PROGRESS''"/> + <#local result = "WHERE TEST_FUNCTION_ID=${testFunctionId} AND TEST_EXECUTIONS.FINISH_TIME IS NOT NULL AND TEST_EXECUTIONS.START_TIME IS NOT NULL AND TEST_EXECUTIONS.STATUS <> ''IN_PROGRESS''"/> <#return result> @@ -2843,44 +2528,44 @@ ORDER BY "TESTED_AT" "type": "line" } ] -}', '{}', '', '{ - "testCaseId": "1" -}', true); +}', '{}', '', '{"testFunctionId": "1"}', true); --TESTCASE INFO INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, LEGEND_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ('TEST CASE INFO', 'Detailed test case information.', 'TABLE', 'SELECT - TEST_CASES.TEST_CLASS || ''.'' || TEST_CASES.TEST_METHOD AS "TEST METHOD", - TEST_CASES.CREATED_AT::date::text AS "CREATED AT" -FROM TEST_CASES -WHERE TEST_CASES.ID=${testCaseId}', '{"columns": ["TEST METHOD", "CREATED AT"]}', '{}', '{}', '{}', true); + TEST_FUNCTIONS.TEST_CLASS || ''.'' || TEST_FUNCTIONS.TEST_METHOD AS "TEST METHOD", + TEST_FUNCTIONS.CREATED_AT::date::text AS "CREATED AT" +FROM TEST_FUNCTIONS +WHERE TEST_FUNCTIONS.ID=${testFunctionId}', '{"columns": ["TEST METHOD", "CREATED AT"]}', '{}', '{}', '{}', true); INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, LEGEND_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ('TEST CASES BY STABILITY', 'Shows all test cases with low stability percent rate per appropriate period (default - less than 10%).', 'TABLE', '<#global WHERE_VALUES = { + "RUN_STATUS": join(STATUS), + "BUG": join(DEFECT), + "BUILD": join(BUILD), "ENV": join(ENV), "LOWER(PLATFORM)": join(PLATFORM), "LOWER(BROWSER)": join(BROWSER), "LOCALE": join(LOCALE), "PRIORITY": join(PRIORITY), - "BUILD": correct(BUILDS!""), - "RUN_NAME": correct(RUNS!""), - "OWNER": correct(USERS!"") + "RUN_NAME": join(RUN), + "OWNER": join(USER) }> <#global VIEW = PERIOD?replace(" ", "_") /> <#global WHERE_CLAUSE = generateWhereClause(WHERE_VALUES) /> SELECT - <#if activeProjectId?has_content> - '''' || TESTS.NAME || '''' AS "TEST METHOD", + <#if projectId?has_content> + '''' || TEST_EXECUTIONS.NAME || '''' AS "TEST METHOD", <#else> - '''' || TESTS.NAME || '''' AS "TEST METHOD", + '''' || TEST_EXECUTIONS.NAME || '''' AS "TEST METHOD", ROUND(SUM(PASSED)/SUM(TOTAL)*100) AS "STABILITY" FROM ${VIEW} - INNER JOIN TESTS on ${VIEW}.TEST_RUN_ID = TESTS.TEST_RUN_ID + INNER JOIN TEST_EXECUTIONS on ${VIEW}.TEST_RUN_ID = TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID ${WHERE_CLAUSE} GROUP BY "TEST METHOD" HAVING ROUND(SUM(PASSED)/SUM(TOTAL)*100) <= ${PERCENT} @@ -2896,7 +2581,9 @@ INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS <#local result = ""/> <#list map?keys as key> - <#if map[key]?has_content> + <#if map[key]?has_content && map[key]?contains("null")> + <#local result = result + addCondition("AND", "(${key} LIKE ANY (''{" + map[key] + "}'') OR ${key} IS NULL)", result) /> + <#elseif map[key]?has_content> <#local result = result + addCondition("AND", "${key} LIKE ANY (''{" + map[key] + "}'')", result) /> @@ -2906,14 +2593,10 @@ INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS <#local result = result + addCondition("AND", "OWNER_ID=${currentUserId}", result) /> - <#if activeProjectId?has_content> - <#local result = result + addCondition("AND", "PROJECT_ID=${activeProjectId}", result) /> + <#if projectId?has_content> + <#local result = result + addCondition("AND", "PROJECT_ID=${projectId?c}", result) /> - - <#if MILESTONE?has_content> - <#local result = result + addCondition("AND", "MILESTONE = ''" + MILESTONE + "''", result) /> - - + <#if result?length != 0> <#local result = " WHERE " + result/> @@ -2974,17 +2657,17 @@ INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS ', '{"columns": ["TEST METHOD", "STABILITY"]}', '{ "PERIOD": { "values": [ + "Today", "Last 24 Hours", + "Week", "Last 7 Days", "Last 14 Days", - "Last 30 Days", - "Last 90 Days", - "Last 365 Days", - "Today", - "Week", "Month", + "Last 30 Days", "Quarter", + "Last 90 Days", "Year", + "Last 365 Days", "Total" ], "required": true @@ -2993,74 +2676,86 @@ INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS "value": "10", "required": true }, + "STATUS": { + "values": [], + "valuesQuery": "SELECT DISTINCT(UPPER(STATUS)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", + "multiple": true + }, + "DEFECT": { + "values": [], + "valuesQuery": "SELECT DISTINCT(VALUE) FROM ISSUE_REFERENCES INNER JOIN TEST_EXECUTIONS ON ISSUE_REFERENCES.ID=TEST_EXECUTIONS.ISSUE_REFERENCE_ID INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID=TEST_SUITE_EXECUTIONS.ID ${whereClause} ORDER BY 1 DESC;", + "multiple": true + }, + "USER": { + "values": [], + "valuesQuery": "SELECT DISTINCT(USERS.USERNAME) FROM TEST_SUITE_EXECUTIONS INNER JOIN TEST_EXECUTIONS ON TEST_SUITE_EXECUTIONS.ID=TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID INNER JOIN USERS ON TEST_EXECUTIONS.MAINTAINER_ID=USERS.ID ${whereClause} ORDER BY 1;", + "multiple": true + }, + "PRIORITY": { + "values": [], + "valuesQuery": "select unnest(array[''P0'', ''P1'', ''P2'', ''P3'', ''P4'', ''P5'', ''P6'']);", + "multiple": true + }, "ENV": { "values": [], - "valuesQuery": "SELECT DISTINCT ENV FROM TEST_CONFIGS WHERE ENV IS NOT NULL AND ENV <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(UPPER(ENVIRONMENT)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", "multiple": true }, "PLATFORM": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(PLATFORM) FROM TEST_CONFIGS WHERE PLATFORM <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(LOWER(TEST_EXECUTION_CONFIGS.PLATFORM)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true - }, - "LOCALE": { + }, + "BROWSER": { "values": [], - "valuesQuery": "SELECT DISTINCT LOCALE FROM TEST_CONFIGS WHERE LOCALE IS NOT NULL AND LOCALE <> '''';", + "valuesQuery": "SELECT DISTINCT(LOWER(BROWSER)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true - }, - "BROWSER": { + }, + "LOCALE": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(BROWSER) FROM TEST_CONFIGS WHERE BROWSER <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(LOCALE) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true }, - "PRIORITY": { + "BUILD": { "values": [], - "valuesQuery": "SELECT VALUE FROM LABELS WHERE KEY=''priority'' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(BUILD) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1 DESC;", "multiple": true }, - "USERS": { - "value": "", - "required": false - }, - "BUILDS": { - "value": "", - "required": false - }, - "RUNS": { - "value": "", - "required": false - }, - "MILESTONE": { - "value": "", - "required": false + "RUN": { + "values": [], + "valuesQuery": "SELECT DISTINCT(NAME) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", + "multiple": true } }', '', '{ - "PERIOD": "Total", - "PERCENT": 70, + "PERIOD": "Last 30 Days", + "PERCENT": 10, "currentUserId": 2, - "dashboardName": "", + "dashboardName": "", + "STATUS": [], + "DEFECT": [], + "BUILD": [], "ENV": [], "PLATFORM": [], "BROWSER": [], "LOCALE": [], "PRIORITY": [], - "BUILDS": "", - "RUNS": "", - "MILESTONE": "", - "USERS": "" + "RUN": [], + "USER": [] }', false); --TESTS IMPLEMENTATION PROGRESS INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, LEGEND_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ('TEST CASES DEVELOPMENT TREND', 'A number of new automated cases per month.', 'BAR', '<#global WHERE_VALUES = { + "RUN_STATUS": join(STATUS), + "BUG": join(DEFECT), + "BUILD": join(BUILD), "ENV": join(ENV), "LOWER(PLATFORM)": join(PLATFORM), "LOWER(BROWSER)": join(BROWSER), "LOCALE": join(LOCALE), "PRIORITY": join(PRIORITY), - "BUILD": correct(BUILDS!""), - "RUN_NAME": correct(RUNS!""), - "OWNER": correct(USERS!"") + "RUN_NAME": join(RUN), + "OWNER": join(USER) }> <#global VIEW = PERIOD?replace(" ", "_") /> @@ -3069,10 +2764,10 @@ INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS SELECT ${CREATED_AT} AS "CREATED_AT", - COUNT(distinct(TEST_CASES.ID)) AS "AMOUNT" + COUNT(distinct(TEST_FUNCTIONS.ID)) AS "AMOUNT" FROM ${VIEW} - INNER JOIN TESTS on ${VIEW}.TEST_RUN_ID = TESTS.TEST_RUN_ID - INNER JOIN TEST_CASES ON TESTS.TEST_CASE_ID = TEST_CASES.ID + INNER JOIN TEST_EXECUTIONS on ${VIEW}.TEST_RUN_ID = TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID + INNER JOIN TEST_FUNCTIONS ON TEST_EXECUTIONS.TEST_FUNCTION_ID = TEST_FUNCTIONS.ID ${WHERE_CLAUSE} GROUP BY 1 ORDER BY 1 @@ -3087,31 +2782,33 @@ ORDER BY 1 <#local result = "" /> <#if PERIOD == "Today"> - <#local result = result + addCondition("AND", "TEST_CASES.CREATED_AT >= current_date", result) /> + <#local result = result + addCondition("AND", "TEST_FUNCTIONS.CREATED_AT >= current_date", result) /> <#elseif PERIOD == "Last 24 Hours"> - <#local result = result + addCondition("AND", "TEST_CASES.CREATED_AT >= date_trunc(''hour'', current_date - interval ''24'' hour)", result) /> + <#local result = result + addCondition("AND", "TEST_FUNCTIONS.CREATED_AT >= date_trunc(''hour'', current_date - interval ''24'' hour)", result) /> <#elseif PERIOD == "Week"> - <#local result = result + addCondition("AND", "TEST_CASES.CREATED_AT >= date_trunc(''week'', current_date) - interval ''2'' day", result) /> + <#local result = result + addCondition("AND", "TEST_FUNCTIONS.CREATED_AT >= date_trunc(''week'', current_date) - interval ''2'' day", result) /> <#elseif PERIOD == "Last 7 Days"> - <#local result = result + addCondition("AND", "TEST_CASES.CREATED_AT >= date_trunc(''day'', current_date - interval ''7'' day)", result) /> + <#local result = result + addCondition("AND", "TEST_FUNCTIONS.CREATED_AT >= date_trunc(''day'', current_date - interval ''7'' day)", result) /> <#elseif PERIOD == "Last 14 Days"> - <#local result = result + addCondition("AND", "TEST_CASES.CREATED_AT >= date_trunc(''day'', current_date - interval ''14'' day)", result) /> + <#local result = result + addCondition("AND", "TEST_FUNCTIONS.CREATED_AT >= date_trunc(''day'', current_date - interval ''14'' day)", result) /> <#elseif PERIOD == "Last 30 Days"> - <#local result = result + addCondition("AND", "TEST_CASES.CREATED_AT >= date_trunc(''day'', current_date - interval ''30'' day)", result) /> + <#local result = result + addCondition("AND", "TEST_FUNCTIONS.CREATED_AT >= date_trunc(''day'', current_date - interval ''30'' day)", result) /> <#elseif PERIOD == "Last 90 Days"> - <#local result = result + addCondition("AND", "TEST_CASES.CREATED_AT >= date_trunc(''day'', current_date - interval ''90'' day)", result) /> + <#local result = result + addCondition("AND", "TEST_FUNCTIONS.CREATED_AT >= date_trunc(''day'', current_date - interval ''90'' day)", result) /> <#elseif PERIOD == "Month" > - <#local result = result + addCondition("AND", "TEST_CASES.CREATED_AT >= date_trunc(''week'', current_date)", result) /> + <#local result = result + addCondition("AND", "TEST_FUNCTIONS.CREATED_AT >= date_trunc(''week'', current_date)", result) /> <#elseif PERIOD == "Quater" > - <#local result = result + addCondition("AND", "TEST_CASES.CREATED_AT >= date_trunc(''month'', current_date)", result) /> + <#local result = result + addCondition("AND", "TEST_FUNCTIONS.CREATED_AT >= date_trunc(''month'', current_date)", result) /> <#elseif PERIOD == "Last 365 Days"> - <#local result = result + addCondition("AND", "TEST_CASES.CREATED_AT >= date_trunc(''day'', current_date - interval ''365'' day)", result) /> + <#local result = result + addCondition("AND", "TEST_FUNCTIONS.CREATED_AT >= date_trunc(''day'', current_date - interval ''365'' day)", result) /> <#elseif PERIOD == "Year"> - <#local result = result + addCondition("AND", "TEST_CASES.CREATED_AT >= date_trunc(''year'', current_date)", result) /> + <#local result = result + addCondition("AND", "TEST_FUNCTIONS.CREATED_AT >= date_trunc(''year'', current_date)", result) /> <#list map?keys as key> - <#if map[key]?has_content> + <#if map[key]?has_content && map[key]?contains("null")> + <#local result = result + addCondition("AND", "(${key} LIKE ANY (''{" + map[key] + "}'') OR ${key} IS NULL)", result) /> + <#elseif map[key]?has_content> <#local result = result + addCondition("AND", "${key} LIKE ANY (''{" + map[key] + "}'')", result) /> @@ -3121,26 +2818,10 @@ ORDER BY 1 <#local result = result + addCondition("AND", "OWNER_ID=${currentUserId}", result) /> - <#if activeProjectId?has_content> - <#local result = result + addCondition("AND", "${VIEW}.PROJECT_ID=${activeProjectId}", result) /> + <#if projectId?has_content> + <#local result = result + addCondition("AND", "${VIEW}.PROJECT_ID=${projectId?c}", result) /> - <#if MILESTONE?has_content> - <#local result = result + addCondition("AND", "MILESTONE = ''" + MILESTONE + "''", result) /> - - <#if MILESTONE_VERSION?has_content> - <#if MILESTONE_VERSION?lower_case == "latest"> - <#local result = result + addCondition("AND", "MILESTONE_VERSION = ( - SELECT MAX(UPSTREAM_JOB_BUILD_NUMBER) - FROM TEST_RUNS INNER JOIN - JOBS ON TEST_RUNS.UPSTREAM_JOB_ID = JOBS.ID - WHERE JOBS.NAME=''${MILESTONE}'')", result) /> - <#elseif isDecimal(MILESTONE_VERSION)> - <#local result = result + addCondition("AND", "MILESTONE_VERSION = ''" + MILESTONE_VERSION + "''", result) /> - - - - <#if result?length != 0> <#local result = "WHERE " + result/> @@ -3153,20 +2834,20 @@ ORDER BY 1 @return - actual view name --> <#function getCreatedAt value> - <#local result = "to_char(date_trunc(''day'', TEST_CASES.CREATED_AT), ''MM/DD'')" /> + <#local result = "to_char(date_trunc(''day'', TEST_FUNCTIONS.CREATED_AT), ''MM/DD'')" /> <#switch value> <#case "Last 24 Hours"> <#case "Today"> - <#local result = "to_char(date_trunc(''hour'', TEST_CASES.CREATED_AT), ''HH24:MI'')" /> + <#local result = "to_char(date_trunc(''hour'', TEST_FUNCTIONS.CREATED_AT), ''HH24:MI'')" /> <#break> <#case "Last 90 Days"> <#case "Quarter"> - <#local result = "to_char(date_trunc(''month'', TEST_CASES.CREATED_AT), ''YYYY-MM'')" /> + <#local result = "to_char(date_trunc(''month'', TEST_FUNCTIONS.CREATED_AT), ''YYYY-MM'')" /> <#break> <#case "Last 365 Days"> <#case "Year"> <#case "Total"> - <#local result = "to_char(date_trunc(''quarter'', TEST_CASES.CREATED_AT), ''YYYY-" + ''"Q"'' + "Q'')" /> + <#local result = "to_char(date_trunc(''quarter'', TEST_FUNCTIONS.CREATED_AT), ''YYYY-" + ''"Q"'' + "Q'')" /> <#break> <#return result> @@ -3223,20 +2904,6 @@ ORDER BY 1 <#return result /> - - -<#-- - verify that value is number - @return - boolean - --> -<#function isDecimal value> - <#attempt> - <#assign num = value?number> - <#local result = true /> - <#recover> - <#local result = false /> - - <#return result /> ', ' let data = [], invisibleData = [], xAxisData = [], lineData = []; let invisibleDataStep = 0, lineDataStep = 0; @@ -3330,81 +2997,85 @@ option = { chart.setOption(option);', '{ "PERIOD": { "values": [ + "Today", "Last 24 Hours", + "Week", "Last 7 Days", "Last 14 Days", - "Last 30 Days", - "Last 90 Days", - "Last 365 Days", - "Today", - "Week", "Month", + "Last 30 Days", "Quarter", + "Last 90 Days", "Year", + "Last 365 Days", "Total" ], "required": true }, - "ENV": { + "STATUS": { "values": [], - "valuesQuery": "SELECT DISTINCT ENV FROM TEST_CONFIGS WHERE ENV IS NOT NULL AND ENV <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(UPPER(STATUS)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", "multiple": true }, - "PLATFORM": { + "DEFECT": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(PLATFORM) FROM TEST_CONFIGS WHERE PLATFORM <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(VALUE) FROM ISSUE_REFERENCES INNER JOIN TEST_EXECUTIONS ON ISSUE_REFERENCES.ID=TEST_EXECUTIONS.ISSUE_REFERENCE_ID INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID=TEST_SUITE_EXECUTIONS.ID ${whereClause} ORDER BY 1 DESC;", "multiple": true - }, - "LOCALE": { + }, + "USER": { "values": [], - "valuesQuery": "SELECT DISTINCT LOCALE FROM TEST_CONFIGS WHERE LOCALE IS NOT NULL AND LOCALE <> '''';", + "valuesQuery": "SELECT DISTINCT(USERS.USERNAME) FROM TEST_SUITE_EXECUTIONS INNER JOIN TEST_EXECUTIONS ON TEST_SUITE_EXECUTIONS.ID=TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID INNER JOIN USERS ON TEST_EXECUTIONS.MAINTAINER_ID=USERS.ID ${whereClause} ORDER BY 1;", "multiple": true - }, - "BROWSER": { + }, + "PRIORITY": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(BROWSER) FROM TEST_CONFIGS WHERE BROWSER <> '''' ORDER BY 1;", + "valuesQuery": "select unnest(array[''P0'', ''P1'', ''P2'', ''P3'', ''P4'', ''P5'', ''P6'']);", "multiple": true - }, - "PRIORITY": { + }, + "ENV": { "values": [], - "valuesQuery": "SELECT VALUE FROM LABELS WHERE KEY=''priority'' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(UPPER(ENVIRONMENT)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", "multiple": true }, - "USERS": { - "value": "", - "required": false - }, - "BUILDS": { - "value": "", - "required": false + "PLATFORM": { + "values": [], + "valuesQuery": "SELECT DISTINCT(LOWER(TEST_EXECUTION_CONFIGS.PLATFORM)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", + "multiple": true }, - "RUNS": { - "value": "", - "required": false + "BROWSER": { + "values": [], + "valuesQuery": "SELECT DISTINCT(LOWER(BROWSER)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", + "multiple": true + }, + "LOCALE": { + "values": [], + "valuesQuery": "SELECT DISTINCT(LOCALE) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", + "multiple": true }, - "MILESTONE": { - "value": "", - "required": false + "BUILD": { + "values": [], + "valuesQuery": "SELECT DISTINCT(BUILD) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1 DESC;", + "multiple": true }, - "MILESTONE_VERSION": { - "value": "", - "required": false - } + "RUN": { + "values": [], + "valuesQuery": "SELECT DISTINCT(NAME) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", + "multiple": true + } }', '', '{ - "PERIOD": "Today", + "PERIOD": "Last 30 Days", "currentUserId": 2, - "activeProjectId": 1, "dashboardName": "", + "STATUS": [], + "DEFECT": [], + "BUILD": [], "ENV": [], "PLATFORM": [], "BROWSER": [], "LOCALE": [], "PRIORITY": [], - "BUILDS": "", - "RUNS": "", - "MILESTONE": "", - "MILESTONE_VERSION": "250", - "USERS": "" + "RUN": [], + "USER": [] }', false); INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, LEGEND_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ('TEST CASE STABILITY', @@ -3416,14 +3087,14 @@ SELECT ''OMISSION'', ''KNOWN ISSUE'', ''INTERRUPT'']) AS "label", - unnest(array[ROUND(SUM(CASE WHEN TESTS.STATUS = ''PASSED'' THEN 1 ELSE 0 END) * 100 /COUNT(*)::numeric, 0), - ROUND(SUM(CASE WHEN TESTS.STATUS = ''FAILED'' AND TESTS.KNOWN_ISSUE = FALSE THEN 1 ELSE 0 END) * 100 / COUNT(*)::numeric, 0), - ROUND(SUM(CASE WHEN TESTS.STATUS = ''SKIPPED'' THEN 1 ELSE 0 END) * 100 / COUNT(*)::numeric, 0), - ROUND(SUM(CASE WHEN TESTS.STATUS = ''FAILED'' AND TESTS.KNOWN_ISSUE = TRUE THEN 1 ELSE 0 END) * 100 / COUNT(*)::numeric, 0), - ROUND(SUM(CASE WHEN TESTS.STATUS = ''ABORTED'' THEN 1 ELSE 0 END) * 100 / COUNT(*)::numeric, 0)]) AS "value" -FROM TESTS - INNER JOIN TEST_CASES ON TESTS.TEST_CASE_ID = TEST_CASES.ID - INNER JOIN TEST_RUNS ON TESTS.TEST_RUN_ID = TEST_RUNS.ID + unnest(array[ROUND(SUM(CASE WHEN TEST_EXECUTIONS.STATUS = ''PASSED'' THEN 1 ELSE 0 END) * 100 /COUNT(*)::numeric, 0), + ROUND(SUM(CASE WHEN TEST_EXECUTIONS.STATUS = ''FAILED'' AND TEST_EXECUTIONS.KNOWN_ISSUE = FALSE THEN 1 ELSE 0 END) * 100 / COUNT(*)::numeric, 0), + ROUND(SUM(CASE WHEN TEST_EXECUTIONS.STATUS = ''SKIPPED'' THEN 1 ELSE 0 END) * 100 / COUNT(*)::numeric, 0), + ROUND(SUM(CASE WHEN TEST_EXECUTIONS.STATUS = ''FAILED'' AND TEST_EXECUTIONS.KNOWN_ISSUE = TRUE THEN 1 ELSE 0 END) * 100 / COUNT(*)::numeric, 0), + ROUND(SUM(CASE WHEN TEST_EXECUTIONS.STATUS = ''ABORTED'' THEN 1 ELSE 0 END) * 100 / COUNT(*)::numeric, 0)]) AS "value" +FROM TEST_EXECUTIONS + INNER JOIN TEST_FUNCTIONS ON TEST_EXECUTIONS.TEST_FUNCTION_ID = TEST_FUNCTIONS.ID + INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID = TEST_SUITE_EXECUTIONS.ID ${WHERE_CLAUSE} @@ -3432,7 +3103,7 @@ ${WHERE_CLAUSE} @return - generated WHERE clause --> <#function generateWhereClause> - <#local result = "WHERE TEST_CASE_ID=${testCaseId} AND TESTS.FINISH_TIME IS NOT NULL AND TESTS.START_TIME IS NOT NULL AND TESTS.STATUS <> ''IN_PROGRESS''"/> + <#local result = "WHERE TEST_FUNCTION_ID=${testFunctionId} AND TEST_EXECUTIONS.FINISH_TIME IS NOT NULL AND TEST_EXECUTIONS.START_TIME IS NOT NULL AND TEST_EXECUTIONS.STATUS <> ''IN_PROGRESS''"/> <#return result> @@ -3512,24 +3183,22 @@ ${WHERE_CLAUSE} } ] }', '{ -}', '', '{ - "testCaseId": "1" -}', true); +}', '', '{"testFunctionId": "1"}', true); INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, LEGEND_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ( 'TEST CASE STABILITY TREND', 'Test case stability trend on a monthly basis.', 'LINE', '<#global WHERE_CLAUSE = generateWhereClause() /> SELECT - ROUND(SUM(CASE WHEN TESTS.STATUS = ''PASSED'' THEN 1 ELSE 0 END) * 100 / COUNT(*)) as "STABILITY", - ROUND(SUM(CASE WHEN TESTS.STATUS = ''FAILED'' AND TESTS.KNOWN_ISSUE = FALSE THEN 1 ELSE 0 END) * 100 / COUNT(*)) as "FAILURE", - ROUND(SUM(CASE WHEN TESTS.STATUS = ''SKIPPED'' THEN 1 ELSE 0 END) * 100 / COUNT(*)) as "OMISSION", - ROUND(SUM(CASE WHEN TESTS.STATUS = ''FAILED'' AND TESTS.KNOWN_ISSUE = TRUE THEN 1 ELSE 0 END) * 100 / COUNT(*)) as "KNOWN ISSUE", - ROUND(SUM(CASE WHEN TESTS.STATUS = ''ABORTED'' THEN 1 ELSE 0 END) * 100 / COUNT(*)) as "INTERRUPT", - to_char(date_trunc(''month'', TESTS.START_TIME), ''YYYY-MM'') AS "TESTED_AT" -FROM TESTS - INNER JOIN TEST_RUNS ON TESTS.TEST_RUN_ID = TEST_RUNS.ID + ROUND(SUM(CASE WHEN TEST_EXECUTIONS.STATUS = ''PASSED'' THEN 1 ELSE 0 END) * 100 / COUNT(*)) as "STABILITY", + ROUND(SUM(CASE WHEN TEST_EXECUTIONS.STATUS = ''FAILED'' AND TEST_EXECUTIONS.KNOWN_ISSUE = FALSE THEN 1 ELSE 0 END) * 100 / COUNT(*)) as "FAILURE", + ROUND(SUM(CASE WHEN TEST_EXECUTIONS.STATUS = ''SKIPPED'' THEN 1 ELSE 0 END) * 100 / COUNT(*)) as "OMISSION", + ROUND(SUM(CASE WHEN TEST_EXECUTIONS.STATUS = ''FAILED'' AND TEST_EXECUTIONS.KNOWN_ISSUE = TRUE THEN 1 ELSE 0 END) * 100 / COUNT(*)) as "KNOWN ISSUE", + ROUND(SUM(CASE WHEN TEST_EXECUTIONS.STATUS = ''ABORTED'' THEN 1 ELSE 0 END) * 100 / COUNT(*)) as "INTERRUPT", + to_char(date_trunc(''month'', TEST_EXECUTIONS.START_TIME), ''YYYY-MM'') AS "TESTED_AT" +FROM TEST_EXECUTIONS + INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID = TEST_SUITE_EXECUTIONS.ID ${WHERE_CLAUSE} -GROUP BY date_trunc(''month'', TESTS.START_TIME) +GROUP BY date_trunc(''month'', TEST_EXECUTIONS.START_TIME) ORDER BY "TESTED_AT" <#-- @@ -3537,7 +3206,7 @@ ORDER BY "TESTED_AT" @return - generated WHERE clause --> <#function generateWhereClause> - <#local result = "WHERE TEST_CASE_ID=${testCaseId} AND TESTS.FINISH_TIME IS NOT NULL AND TESTS.START_TIME IS NOT NULL AND TESTS.STATUS <> ''IN_PROGRESS''"/> + <#local result = "WHERE TEST_FUNCTION_ID=${testFunctionId} AND TEST_EXECUTIONS.FINISH_TIME IS NOT NULL AND TEST_EXECUTIONS.START_TIME IS NOT NULL AND TEST_EXECUTIONS.STATUS <> ''IN_PROGRESS''"/> <#return result> @@ -3673,26 +3342,31 @@ ORDER BY "TESTED_AT" ] }', '{ } -', '', '{ - "testCaseId": "1" -}', true); +', '', '{"testFunctionId": "1"}', true); INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, LEGEND_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ('TESTS EXECUTION ROI (MAN-HOURS)', 'Monthly team/user test execution ROI. 160h+ per person for UI tests indicates that ROI is great.', 'BAR', '<#global MULTIPLE_VALUES = { + "RUN_STATUS": join(STATUS), + "BUG": join(DEFECT), + "BUILD": join(BUILD), "ENV": join(ENV), "LOWER(PLATFORM)": join(PLATFORM), - "LOCALE": join(LOCALE), "LOWER(BROWSER)": join(BROWSER), + "LOCALE": join(LOCALE), "PRIORITY": join(PRIORITY), - "OWNER": correct(USERS!) + "RUN_NAME": join(RUN), + "OWNER": join(USER) }> +<#global VIEW = PERIOD?replace(" ", "_") /> <#global WHERE_CLAUSE = generateWhereClause(MULTIPLE_VALUES) /> +<#global GROUP_AND_ORDER_BY = getStartedAt(PERIOD) /> SELECT ROUND(SUM(TOTAL_SECONDS)/3600) AS "ACTUAL", ROUND(SUM(TOTAL_ETA_SECONDS)/3600) AS "ETA", - to_char(STARTED_AT, ''YYYY-MM'') AS "STARTED_AT" -FROM TOTAL + --to_char(STARTED_AT, ''YYYY-MM'') AS "STARTED_AT" + ${GROUP_AND_ORDER_BY} AS "STARTED_AT" +FROM ${VIEW} ${WHERE_CLAUSE} GROUP BY "STARTED_AT" ORDER BY "STARTED_AT"; @@ -3707,7 +3381,9 @@ ORDER BY "STARTED_AT"; <#local result = "" /> <#list map?keys as key> - <#if map[key]?has_content> + <#if map[key]?has_content && map[key]?contains("null")> + <#local result = result + addCondition("AND", "(${key} LIKE ANY (''{" + map[key] + "}'') OR ${key} IS NULL)", result) /> + <#elseif map[key]?has_content> <#local result = result + addCondition("AND", "${key} LIKE ANY (''{" + map[key] + "}'')", result) /> @@ -3717,8 +3393,8 @@ ORDER BY "STARTED_AT"; <#local result = result + addCondition("AND", "OWNER_ID=${currentUserId}", result) /> - <#if activeProjectId?has_content> - <#local result = result + addCondition("AND", "PROJECT_ID=${activeProjectId}", result) /> + <#if projectId?has_content> + <#local result = result + addCondition("AND", "PROJECT_ID=${projectId?c}", result) /> <#if result?length != 0> @@ -3727,6 +3403,31 @@ ORDER BY "STARTED_AT"; <#return result> +<#-- + Retrieves actual CREATED_BY grouping by abstract view description + @value - abstract view description + @return - actual view name + --> +<#function getStartedAt value> + <#local result = "to_char(date_trunc(''day'', STARTED_AT), ''YYYY-MM-DD'')" /> + <#switch value> + <#case "Last 24 Hours"> + <#case "Today"> + <#local result = "to_char(date_trunc(''hour'', STARTED_AT), ''HH24:MI'')" /> + <#break> + <#case "Last 90 Days"> + <#case "Quarter"> + <#local result = "to_char(date_trunc(''month'', STARTED_AT), ''YYYY-MM'')" /> + <#break> + <#case "Last 365 Days"> + <#case "Year"> + <#case "Total"> + <#local result = "to_char(date_trunc(''quarter'', STARTED_AT), ''YYYY-" + ''"Q"'' + "Q'')" /> + <#break> + + <#return result> + + <#-- Joins array values using '', '' separator @array - to join @@ -3818,71 +3519,116 @@ ORDER BY "STARTED_AT"; "#919e8b" ] }', '{ + "PERIOD": { + "values": [ + "Today", + "Last 24 Hours", + "Week", + "Last 7 Days", + "Last 14 Days", + "Month", + "Last 30 Days", + "Quarter", + "Last 90 Days", + "Year", + "Last 365 Days", + "Total" + ], + "required": true + }, + "STATUS": { + "values": [], + "valuesQuery": "SELECT DISTINCT(UPPER(STATUS)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", + "multiple": true + }, + "DEFECT": { + "values": [], + "valuesQuery": "SELECT DISTINCT(VALUE) FROM ISSUE_REFERENCES INNER JOIN TEST_EXECUTIONS ON ISSUE_REFERENCES.ID=TEST_EXECUTIONS.ISSUE_REFERENCE_ID INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID=TEST_SUITE_EXECUTIONS.ID ${whereClause} ORDER BY 1 DESC;", + "multiple": true + }, + "USER": { + "values": [], + "valuesQuery": "SELECT DISTINCT(USERS.USERNAME) FROM TEST_SUITE_EXECUTIONS INNER JOIN TEST_EXECUTIONS ON TEST_SUITE_EXECUTIONS.ID=TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID INNER JOIN USERS ON TEST_EXECUTIONS.MAINTAINER_ID=USERS.ID ${whereClause} ORDER BY 1;", + "multiple": true + }, + "PRIORITY": { + "values": [], + "valuesQuery": "select unnest(array[''P0'', ''P1'', ''P2'', ''P3'', ''P4'', ''P5'', ''P6'']);", + "multiple": true + }, "ENV": { "values": [], - "valuesQuery": "SELECT DISTINCT ENV FROM TEST_CONFIGS WHERE ENV IS NOT NULL AND ENV <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(UPPER(ENVIRONMENT)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", "multiple": true }, "PLATFORM": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(PLATFORM) FROM TEST_CONFIGS WHERE PLATFORM <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(LOWER(TEST_EXECUTION_CONFIGS.PLATFORM)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", + "multiple": true + }, + "BROWSER": { + "values": [], + "valuesQuery": "SELECT DISTINCT(LOWER(BROWSER)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true }, "LOCALE": { "values": [], - "valuesQuery": "SELECT DISTINCT LOCALE FROM TEST_CONFIGS WHERE LOCALE IS NOT NULL AND LOCALE <> '''';", + "valuesQuery": "SELECT DISTINCT(LOCALE) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true }, - "BROWSER": { + "BUILD": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(BROWSER) FROM TEST_CONFIGS WHERE BROWSER <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(BUILD) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1 DESC;", "multiple": true }, - "PRIORITY": { + "RUN": { "values": [], - "valuesQuery": "SELECT VALUE FROM LABELS WHERE KEY=''priority'' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(NAME) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", "multiple": true - }, - "USERS": { - "value": "", - "required": false - } + } }', '', '{ + "PERIOD": "Month", "currentUserId": 1, "dashboardName": "", + "STATUS": [], + "DEFECT": [], + "BUILD": [], "ENV": [], - "PLATFORM": [], + "PLATFORM": [], + "BROWSER": [], "LOCALE": [], - "BROWSER":[], "PRIORITY": [], - "USERS": "" + "RUN": [], + "USER": [] }', false); INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, LEGEND_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ('TESTS SUMMARY', 'Detailed information about passed, failed, skipped, etc tests.', 'TABLE', '<#global WHERE_VALUES = { + "RUN_STATUS": join(STATUS), + "BUG": join(DEFECT), + "BUILD": join(BUILD), "ENV": join(ENV), "LOWER(PLATFORM)": join(PLATFORM), "LOWER(BROWSER)": join(BROWSER), "LOCALE": join(LOCALE), "PRIORITY": join(PRIORITY), - "BUILD": correct(BUILDS!""), - "RUN_NAME": correct(RUNS!""), - "OWNER": correct(USERS!"") + "RUN_NAME": join(RUN), + "OWNER": join(USER) }> <#global VIEW = PERIOD?replace(" ", "_") /> <#global WHERE_CLAUSE = generateWhereClause(WHERE_VALUES) /> SELECT <#if GROUP_BY="OWNER" > - <#if activeProjectId?has_content> - '''' || OWNER || '''' AS "OWNER", + <#if projectId?has_content> + '''' || OWNER || '''' AS "NAME", <#else> - '''' || OWNER || '''' AS "OWNER", + '''' || OWNER || '''' AS "NAME", <#elseif GROUP_BY="RUN_NAME"> - RUN_NAME AS "RUN_NAME", + RUN_NAME AS "NAME", <#elseif GROUP_BY="BUILD"> - BUILD AS "BUILD", + BUILD AS "NAME", SUM(PASSED) AS "PASS", SUM(FAILED) AS "FAIL", @@ -3897,17 +3643,7 @@ SELECT round (100.0 * (SUM(TOTAL)-SUM(PASSED)) / (SUM(TOTAL)), 0)::integer AS "FAIL RATE (%)" FROM ${VIEW} ${WHERE_CLAUSE} - <#if GROUP_BY="OWNER" > - <#if activeProjectId?has_content> - GROUP BY PROJECT_ID, OWNER_ID, OWNER - <#else> - GROUP BY OWNER_ID, OWNER - - <#elseif GROUP_BY="RUN_NAME"> - GROUP BY RUN_NAME - <#elseif GROUP_BY="BUILD"> - GROUP BY BUILD - + GROUP BY 1 ORDER BY 1 @@ -3921,7 +3657,9 @@ SELECT <#local result = "" /> <#list map?keys as key> - <#if map[key]?has_content> + <#if map[key]?has_content && map[key]?contains("null")> + <#local result = result + addCondition("AND", "(${key} LIKE ANY (''{" + map[key] + "}'') OR ${key} IS NULL)", result) /> + <#elseif map[key]?has_content> <#local result = result + addCondition("AND", "${key} LIKE ANY (''{" + map[key] + "}'')", result) /> @@ -3931,26 +3669,10 @@ SELECT <#local result = result + addCondition("AND", "OWNER_ID=${currentUserId}", result) /> - <#if activeProjectId?has_content> - <#local result = result + addCondition("AND", "PROJECT_ID=${activeProjectId}", result) /> + <#if projectId?has_content> + <#local result = result + addCondition("AND", "PROJECT_ID=${projectId?c}", result) /> - <#if MILESTONE?has_content> - <#local result = result + addCondition("AND", "MILESTONE = ''" + MILESTONE + "''", result) /> - - <#if MILESTONE_VERSION?has_content> - <#if MILESTONE_VERSION?lower_case == "latest"> - <#local result = result + addCondition("AND", "MILESTONE_VERSION = ( - SELECT MAX(UPSTREAM_JOB_BUILD_NUMBER) - FROM TEST_RUNS INNER JOIN - JOBS ON TEST_RUNS.UPSTREAM_JOB_ID = JOBS.ID - WHERE JOBS.NAME=''${MILESTONE}'')", result) /> - <#elseif isDecimal(MILESTONE_VERSION)> - <#local result = result + addCondition("AND", "MILESTONE_VERSION = ''" + MILESTONE_VERSION + "''", result) /> - - - - <#if result?length != 0> <#local result = " WHERE " + result/> @@ -4009,33 +3731,20 @@ SELECT <#return result /> - -<#-- - verify that value is number - @return - boolean - --> -<#function isDecimal value> - <#attempt> - <#assign num = value?number> - <#local result = true /> - <#recover> - <#local result = false /> - - <#return result /> -', '{"columns": ["OWNER", "RUN_NAME", "PASS", "FAIL", "DEFECT", "SKIP", "ABORT", "TOTAL", "PASSED (%)", "FAILED (%)", "KNOWN ISSUE (%)", "SKIPPED (%)", "FAIL RATE (%)"]}', '{ +', '{"columns": ["NAME", "PASS", "FAIL", "DEFECT", "SKIP", "ABORT", "TOTAL", "PASSED (%)", "FAILED (%)", "KNOWN ISSUE (%)", "SKIPPED (%)", "FAIL RATE (%)"]}', '{ "PERIOD": { "values": [ + "Today", "Last 24 Hours", + "Week", "Last 7 Days", "Last 14 Days", - "Last 30 Days", - "Last 90 Days", - "Last 365 Days", - "Today", - "Week", "Month", + "Last 30 Days", "Quarter", + "Last 90 Days", "Year", + "Last 365 Days", "Total" ], "required": true @@ -4048,64 +3757,70 @@ SELECT ], "required": true }, + "STATUS": { + "values": [], + "valuesQuery": "SELECT DISTINCT(UPPER(STATUS)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", + "multiple": true + }, + "DEFECT": { + "values": [], + "valuesQuery": "SELECT DISTINCT(VALUE) FROM ISSUE_REFERENCES INNER JOIN TEST_EXECUTIONS ON ISSUE_REFERENCES.ID=TEST_EXECUTIONS.ISSUE_REFERENCE_ID INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID=TEST_SUITE_EXECUTIONS.ID ${whereClause} ORDER BY 1 DESC;", + "multiple": true + }, + "USER": { + "values": [], + "valuesQuery": "SELECT DISTINCT(USERS.USERNAME) FROM TEST_SUITE_EXECUTIONS INNER JOIN TEST_EXECUTIONS ON TEST_SUITE_EXECUTIONS.ID=TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID INNER JOIN USERS ON TEST_EXECUTIONS.MAINTAINER_ID=USERS.ID ${whereClause} ORDER BY 1;", + "multiple": true + }, + "PRIORITY": { + "values": [], + "valuesQuery": "select unnest(array[''P0'', ''P1'', ''P2'', ''P3'', ''P4'', ''P5'', ''P6'']);", + "multiple": true + }, "ENV": { "values": [], - "valuesQuery": "SELECT DISTINCT ENV FROM TEST_CONFIGS WHERE ENV IS NOT NULL AND ENV <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(UPPER(ENVIRONMENT)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", "multiple": true }, "PLATFORM": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(PLATFORM) FROM TEST_CONFIGS WHERE PLATFORM <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(LOWER(TEST_EXECUTION_CONFIGS.PLATFORM)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true - }, - "LOCALE": { + }, + "BROWSER": { "values": [], - "valuesQuery": "SELECT DISTINCT LOCALE FROM TEST_CONFIGS WHERE LOCALE IS NOT NULL AND LOCALE <> '''';", + "valuesQuery": "SELECT DISTINCT(LOWER(BROWSER)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true - }, - "BROWSER": { + }, + "LOCALE": { "values": [], - "valuesQuery": "SELECT DISTINCT LOWER(BROWSER) FROM TEST_CONFIGS WHERE BROWSER <> '''' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(LOCALE) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", "multiple": true }, - "PRIORITY": { + "BUILD": { "values": [], - "valuesQuery": "SELECT VALUE FROM LABELS WHERE KEY=''priority'' ORDER BY 1;", + "valuesQuery": "SELECT DISTINCT(BUILD) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1 DESC;", "multiple": true }, - "USERS": { - "value": "", - "required": false - }, - "BUILDS": { - "value": "", - "required": false - }, - "RUNS": { - "value": "", - "required": false - }, - "MILESTONE": { - "value": "", - "required": false - }, - "MILESTONE_VERSION": { - "value": "", - "required": false - } -}', '{"legend": ["OWNER", "RUN_NAME", "PASS", "FAIL", "DEFECT", "SKIP", "ABORT", "TOTAL", "PASSED (%)", "FAILED (%)", "KNOWN ISSUE (%)", "SKIPPED (%)", "FAIL RATE (%)"]}', '{ - "PERIOD": "Total", - "GROUP_BY": "OWNER", + "RUN": { + "values": [], + "valuesQuery": "SELECT DISTINCT(NAME) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", + "multiple": true + } +}', '{"legend": ["NAME", "PASS", "FAIL", "DEFECT", "SKIP", "ABORT", "TOTAL", "PASSED (%)", "FAILED (%)", "KNOWN ISSUE (%)", "SKIPPED (%)", "FAIL RATE (%)"]}', '{ + "PERIOD": "Last 30 Days", + "GROUP_BY": "RUN_NAME", "currentUserId": 2, "dashboardName": "", + "STATUS": [], + "DEFECT": [], + "BUILD": [], "ENV": [], "PLATFORM": [], "BROWSER": [], "LOCALE": [], "PRIORITY": [], - "BUILDS": "", - "RUNS": "", - "MILESTONE": "", - "MILESTONE_VERSION": "250", - "USERS": "" + "RUN": [], + "USER": [] }', false); + From 340c675e631c7decf94fe0938625c8e7d675ad2a Mon Sep 17 00:00:00 2001 From: vdelendik Date: Thu, 7 Oct 2021 13:09:07 +0000 Subject: [PATCH 08/27] #2316: adjusted cron expressions for materizlied views refresh --- database/reporting/sql/db-views-cron.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/database/reporting/sql/db-views-cron.sql b/database/reporting/sql/db-views-cron.sql index 70fd78d04..d2c730740 100644 --- a/database/reporting/sql/db-views-cron.sql +++ b/database/reporting/sql/db-views-cron.sql @@ -1,2 +1,2 @@ -SELECT cron.schedule ('0 0 1 * *', $$REFRESH MATERIALIZED VIEW CONCURRENTLY zafira.LAST_365_DAYS_MATERIALIZED$$); -SELECT cron.schedule ('15 0 1 * *', $$REFRESH MATERIALIZED VIEW CONCURRENTLY zafira.TOTAL_MATERIALIZED$$); +SELECT cron.schedule ('0 0 1 * *', $$REFRESH MATERIALIZED VIEW CONCURRENTLY zafira.YEAR_MATERIALIZED$$); +SELECT cron.schedule ('10 0 1 1 *', $$REFRESH MATERIALIZED VIEW CONCURRENTLY zafira.TOTAL_MATERIALIZED$$); From 17d9014faa5078671d51966c69c50c8247107c90 Mon Sep 17 00:00:00 2001 From: vdelendik Date: Thu, 7 Oct 2021 13:11:17 +0000 Subject: [PATCH 09/27] switched to the latest reporting --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index 2adeac7c8..e8998035f 100644 --- a/.env +++ b/.env @@ -1,5 +1,5 @@ TAG_REPORTING_UI=1.26.0.191-SNAPSHOT -TAG_REPORTING_SERVICE=1.26.0.241-SNAPSHOT +TAG_REPORTING_SERVICE=1.26.0.242-SNAPSHOT TAG_ARTIFACTS_PROXY_SERVICE=1.8.0 TAG_MAIL_SERVICE=1.5 TAG_IAM_SERVICE=1.15.0.125-SNAPSHOT From de2ef96ef02c79da7dda4d69ceccffa016b5031c Mon Sep 17 00:00:00 2001 From: vdelendik Date: Thu, 7 Oct 2021 15:32:08 +0000 Subject: [PATCH 10/27] #2318: made FAILURES BY RUN hidden by default --- database/reporting/sql/db-mng-data.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/reporting/sql/db-mng-data.sql b/database/reporting/sql/db-mng-data.sql index 4444935bb..e29f462e6 100644 --- a/database/reporting/sql/db-mng-data.sql +++ b/database/reporting/sql/db-mng-data.sql @@ -382,7 +382,7 @@ INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS "PRIORITY": [], "RUN": [], "USER": [] -}', false); +}', true); --TESTS FAILURES BY REASON INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, LEGEND_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ('FAILURES BY REASON', From 13b01512ab753e4b3b072397c477be565ab660b3 Mon Sep 17 00:00:00 2001 From: vdelendik Date: Fri, 8 Oct 2021 10:59:52 +0000 Subject: [PATCH 11/27] fixed jira integration for widget templates --- .env | 2 +- database/reporting/sql/db-mng-data.sql | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.env b/.env index e8998035f..d18d76fe7 100644 --- a/.env +++ b/.env @@ -1,5 +1,5 @@ TAG_REPORTING_UI=1.26.0.191-SNAPSHOT -TAG_REPORTING_SERVICE=1.26.0.242-SNAPSHOT +TAG_REPORTING_SERVICE=1.26.0.243-SNAPSHOT TAG_ARTIFACTS_PROXY_SERVICE=1.8.0 TAG_MAIL_SERVICE=1.5 TAG_IAM_SERVICE=1.15.0.125-SNAPSHOT diff --git a/database/reporting/sql/db-mng-data.sql b/database/reporting/sql/db-mng-data.sql index e29f462e6..0b1b61f4d 100644 --- a/database/reporting/sql/db-mng-data.sql +++ b/database/reporting/sql/db-mng-data.sql @@ -382,7 +382,7 @@ INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS "PRIORITY": [], "RUN": [], "USER": [] -}', true); +}', false); --TESTS FAILURES BY REASON INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, LEGEND_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ('FAILURES BY REASON', @@ -420,7 +420,7 @@ SELECT (SELECT to_char(date_trunc(''day'', MIN(START_TIME)), ''YYYY-MM-DD'') FROM TEST_EXECUTIONS WHERE MESSAGE_HASH_CODE=MESSAGE_HASHCODE) AS "SINCE", to_char(date_trunc(''day'', MAX(STARTED_AT)), ''YYYY-MM-DD'') AS "REPRO" FROM ${VIEW} - LEFT JOIN INTEGRATION_JIRA_CONFIGS ON ${VIEW}.PROJECT_ID = INTEGRATION_JIRA_CONFIGS.PROJECT_ID + LEFT JOIN INTEGRATION_JIRA_CONFIGS ON 1 = INTEGRATION_JIRA_CONFIGS.ID ${WHERE_CLAUSE} GROUP BY "REASON", "DEFECT", MESSAGE_HASHCODE HAVING COUNT(*) >= ${ERROR_COUNT} @@ -614,7 +614,7 @@ SELECT FROM TEST_EXECUTIONS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID = TEST_SUITE_EXECUTIONS.ID LEFT JOIN ISSUE_REFERENCES ON TEST_EXECUTIONS.ISSUE_REFERENCE_ID = ISSUE_REFERENCES.ID - LEFT JOIN INTEGRATION_JIRA_CONFIGS ON TEST_SUITE_EXECUTIONS.PROJECT_ID = INTEGRATION_JIRA_CONFIGS.PROJECT_ID + LEFT JOIN INTEGRATION_JIRA_CONFIGS ON 1 = INTEGRATION_JIRA_CONFIGS.ID ${WHERE_CLAUSE} ORDER BY 1, 2 DESC --ORDER BY 2 DESC From d376a11b46af72ef0613be990052ad441021a249 Mon Sep 17 00:00:00 2001 From: vdelendik Date: Fri, 8 Oct 2021 12:14:25 +0000 Subject: [PATCH 12/27] #2320: fixed FAILURE INFO system widget --- database/reporting/sql/db-mng-data.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/reporting/sql/db-mng-data.sql b/database/reporting/sql/db-mng-data.sql index 0b1b61f4d..365f619fa 100644 --- a/database/reporting/sql/db-mng-data.sql +++ b/database/reporting/sql/db-mng-data.sql @@ -713,7 +713,7 @@ INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS <#global VIEW = PERIOD?replace(" ", "_") /> SELECT SUM(TOTAL)::text AS "#", - substring((SELECT TEST_EXECUTIONS.MESSAGE FROM TEST_EXECUTIONS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID = TEST_SUITE_EXECUTIONS.ID WHERE TEST_SUITE_EXECUTIONS.PROJECT_ID=${projectId?c} AND TEST_EXECUTIONS.MESSAGE_HASH_CODE=MIN(MESSAGE_HASHCODE) LIMIT 1) from 1 for 512) as "ERROR/STABILITY", + substring((SELECT TEST_EXECUTIONS.MESSAGE FROM TEST_EXECUTIONS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID = TEST_SUITE_EXECUTIONS.ID WHERE TEST_EXECUTIONS.MESSAGE_HASH_CODE=MIN(MESSAGE_HASHCODE) LIMIT 1) from 1 for 512) as "ERROR/STABILITY", to_char(date_trunc(''day'', MIN(STARTED_AT)), ''YYYY-MM-DD'') AS "SINCE", to_char(date_trunc(''day'', MAX(STARTED_AT)), ''YYYY-MM-DD'') AS "REPRO" FROM ${VIEW} From d77ffc493690ef89503da8d9cca96921cd907cd0 Mon Sep 17 00:00:00 2001 From: vdelendik Date: Fri, 8 Oct 2021 21:59:43 +0000 Subject: [PATCH 13/27] fixed TEST CASE INFO params config sample --- database/reporting/sql/db-mng-data.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/reporting/sql/db-mng-data.sql b/database/reporting/sql/db-mng-data.sql index 365f619fa..64917b819 100644 --- a/database/reporting/sql/db-mng-data.sql +++ b/database/reporting/sql/db-mng-data.sql @@ -2536,7 +2536,7 @@ INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS TEST_FUNCTIONS.TEST_CLASS || ''.'' || TEST_FUNCTIONS.TEST_METHOD AS "TEST METHOD", TEST_FUNCTIONS.CREATED_AT::date::text AS "CREATED AT" FROM TEST_FUNCTIONS -WHERE TEST_FUNCTIONS.ID=${testFunctionId}', '{"columns": ["TEST METHOD", "CREATED AT"]}', '{}', '{}', '{}', true); +WHERE TEST_FUNCTIONS.ID=${testFunctionId}', '{"columns": ["TEST METHOD", "CREATED AT"]}', '{}', '{}', '{"testFunctionId": "1"}', true); INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, LEGEND_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ('TEST CASES BY STABILITY', 'Shows all test cases with low stability percent rate per appropriate period (default - less than 10%).', 'TABLE', '<#global WHERE_VALUES = { From 7fd64a7d3ebc5cdb4851753963f98a0ca8ca6646 Mon Sep 17 00:00:00 2001 From: vdelendik Date: Fri, 8 Oct 2021 23:31:23 +0000 Subject: [PATCH 14/27] bump up to the 1.26.0.244-SNAPSHOT reporting-service --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index d18d76fe7..ca08659f6 100644 --- a/.env +++ b/.env @@ -1,5 +1,5 @@ TAG_REPORTING_UI=1.26.0.191-SNAPSHOT -TAG_REPORTING_SERVICE=1.26.0.243-SNAPSHOT +TAG_REPORTING_SERVICE=1.26.0.244-SNAPSHOT TAG_ARTIFACTS_PROXY_SERVICE=1.8.0 TAG_MAIL_SERVICE=1.5 TAG_IAM_SERVICE=1.15.0.125-SNAPSHOT From c65644fefbdfc0a33a7a251fd63103c219cbf971 Mon Sep 17 00:00:00 2001 From: vdelendik Date: Sat, 9 Oct 2021 00:09:53 +0000 Subject: [PATCH 15/27] bump up the the next reporting build --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index ca08659f6..167aeda95 100644 --- a/.env +++ b/.env @@ -1,5 +1,5 @@ TAG_REPORTING_UI=1.26.0.191-SNAPSHOT -TAG_REPORTING_SERVICE=1.26.0.244-SNAPSHOT +TAG_REPORTING_SERVICE=1.26.0.245-SNAPSHOT TAG_ARTIFACTS_PROXY_SERVICE=1.8.0 TAG_MAIL_SERVICE=1.5 TAG_IAM_SERVICE=1.15.0.125-SNAPSHOT From b1e9d794ef92a4eb88194de632880f342397832b Mon Sep 17 00:00:00 2001 From: vdelendik Date: Sun, 10 Oct 2021 15:32:03 +0000 Subject: [PATCH 16/27] removed out-of-dated integration parameters --- .../reporting-service/variables.env.original | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/configuration/reporting-service/variables.env.original b/configuration/reporting-service/variables.env.original index e80950013..1b86c1c23 100644 --- a/configuration/reporting-service/variables.env.original +++ b/configuration/reporting-service/variables.env.original @@ -19,21 +19,6 @@ JENKINS_PASSWORD=changeit JENKINS_FOLDER= JENKINS_JOB_URL_VISIBILITY=true -MCLOUD_ENABLED=false -MCLOUD_URL= -MCLOUD_USER= -MCLOUD_PASSWORD= - -SELENIUM_ENABLED=false -SELENIUM_URL= -SELENIUM_USER= -SELENIUM_PASSWORD= - -SCM_DEFAULT_ACCOUNT_ACCESS_TOKEN= -SCM_DEFAULT_ACCOUNT_ORGANIZATION_NAME=qaprosoft -SCM_DEFAULT_ACCOUNT_REPOSITORY_NAME=carina-demo -SCM_DEFAULT_ACCOUNT_REPOSITORY_URL=https://github.com/qaprosoft/carina-demo - DATABASE_URL=jdbc:postgresql://postgres:5432/postgres DATABASE_USERNAME=postgres DATABASE_PASSWORD=db-changeit From ec216de2688b4cf3956cef5f91f04b4dbef71cdf Mon Sep 17 00:00:00 2001 From: vdelendik Date: Sun, 10 Oct 2021 15:41:56 +0000 Subject: [PATCH 17/27] replaced doc site url --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 06546db0b..3a543ca61 100644 --- a/README.md +++ b/README.md @@ -72,12 +72,12 @@ Zebrunner Reporting **client side** repositories: ## Hardware requirements -| | Requirements | -|:-----------------------:| ----------------------------------------------------------------------------------| -| Operating System | Linux Ubuntu 16.04, 18.04, 20.04
Linux CentOS 7+
Amazon Linux 2 | -| CPU | 4+ Cores | -| Memory | 16Gb RAM | -| Free space | SSD 64Gb+ of free space | +| | Requirements | +|:-----------------------:| ------------------------------------------------------------------------| +| Operating System | Linux Ubuntu 16.04, 18.04, 20.04
Linux CentOS 7+
Amazon Linux 2 | +| CPU | 4+ Cores | +| Memory | 16Gb RAM | +| Free space | SSD 64Gb+ of free space | ## Installation steps @@ -98,7 +98,7 @@ Zebrunner Reporting **client side** repositories: ## Community and support * [Telegram channel](https://t.me/zebrunner) * [User guide](https://zebrunner.com/documentation) -* [On-premise deployment with Zebrunner CE](https://zebrunner.github.io/zebrunner/) +* [On-premise deployment with Zebrunner CE](https://zebrunner.github.io/community-edition/) * [Zebrunner PRO](https://zebrunner.com) ## License From bf8ffca7598f8ebfee343610c324dcb2ad22b3a0 Mon Sep 17 00:00:00 2001 From: vdelendik Date: Sun, 10 Oct 2021 16:17:40 +0000 Subject: [PATCH 18/27] bump up reporting-service build --- .env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env b/.env index 167aeda95..e020d4e97 100644 --- a/.env +++ b/.env @@ -1,5 +1,5 @@ TAG_REPORTING_UI=1.26.0.191-SNAPSHOT -TAG_REPORTING_SERVICE=1.26.0.245-SNAPSHOT +TAG_REPORTING_SERVICE=1.26.0.246-SNAPSHOT TAG_ARTIFACTS_PROXY_SERVICE=1.8.0 TAG_MAIL_SERVICE=1.5 TAG_IAM_SERVICE=1.15.0.125-SNAPSHOT From 776a45706718e2fa2d07051ca33ea09be14210ff Mon Sep 17 00:00:00 2001 From: vdelendik Date: Sun, 17 Oct 2021 08:24:10 +0000 Subject: [PATCH 19/27] #2291: removed out-of-dated github related properties --- configuration/reporting-service/variables.env.original | 4 ---- 1 file changed, 4 deletions(-) diff --git a/configuration/reporting-service/variables.env.original b/configuration/reporting-service/variables.env.original index 1b86c1c23..ebf82dcf5 100644 --- a/configuration/reporting-service/variables.env.original +++ b/configuration/reporting-service/variables.env.original @@ -29,10 +29,6 @@ ES_URIS=elasticsearch:9200 ES_USERNAME= ES_PASSWORD= -GITHUB_CLIENT_ID= -GITHUB_CLIENT_SECRET= -GITHUB_HOST=github.com - DEBUG_ENABLED=false DEBUG_PORT=5005 DEBUG_SUSPEND_STARTUP=false From 994b0812f46cac27b04338b84c63b6d08559ee9c Mon Sep 17 00:00:00 2001 From: vdelendik Date: Sun, 17 Oct 2021 09:54:54 +0000 Subject: [PATCH 20/27] Revert "#2291: removed out-of-dated github related properties" This reverts commit 776a45706718e2fa2d07051ca33ea09be14210ff. --- configuration/reporting-service/variables.env.original | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/configuration/reporting-service/variables.env.original b/configuration/reporting-service/variables.env.original index ebf82dcf5..1b86c1c23 100644 --- a/configuration/reporting-service/variables.env.original +++ b/configuration/reporting-service/variables.env.original @@ -29,6 +29,10 @@ ES_URIS=elasticsearch:9200 ES_USERNAME= ES_PASSWORD= +GITHUB_CLIENT_ID= +GITHUB_CLIENT_SECRET= +GITHUB_HOST=github.com + DEBUG_ENABLED=false DEBUG_PORT=5005 DEBUG_SUSPEND_STARTUP=false From 5cf311079ac6d02f814add2d7733a41a6ed3a974 Mon Sep 17 00:00:00 2001 From: vdelendik Date: Mon, 18 Oct 2021 15:54:45 +0000 Subject: [PATCH 21/27] made reporting configurable as independent service --- .env => .env.original | 1 + .gitignore | 2 + backup/.gitkeep | 1 - backup/settings.env.original | 23 ++ .../reporting-service/variables.env.original | 1 - docker-compose.yml | 3 +- minio-storage | 2 +- patch/settings.sh | 206 ++++++++++++++++++ patch/utility.sh | 80 +++++++ zebrunner.sh | 42 +++- 10 files changed, 348 insertions(+), 13 deletions(-) rename .env => .env.original (93%) delete mode 100755 backup/.gitkeep create mode 100644 backup/settings.env.original create mode 100644 patch/settings.sh create mode 100755 patch/utility.sh diff --git a/.env b/.env.original similarity index 93% rename from .env rename to .env.original index e020d4e97..be38f8f12 100644 --- a/.env +++ b/.env.original @@ -9,3 +9,4 @@ TAG_REDIS=5.0.5 TAG_ELASTICSEARCH=7.9.0 TAG_LOGSTASH=7.9.0 TAG_NGINX=1.17 +REPORTING_PORT=8081 diff --git a/.gitignore b/.gitignore index 8c2477c44..5e92ef769 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +.env +backup/settings.env ### Zebrunner runtime mounts ### /runtime/ diff --git a/backup/.gitkeep b/backup/.gitkeep deleted file mode 100755 index 8b1378917..000000000 --- a/backup/.gitkeep +++ /dev/null @@ -1 +0,0 @@ - diff --git a/backup/settings.env.original b/backup/settings.env.original new file mode 100644 index 000000000..097a08e49 --- /dev/null +++ b/backup/settings.env.original @@ -0,0 +1,23 @@ +declare -x ZBR_PROTOCOL="http" +declare -x ZBR_REPORTING_PORT="80" +declare -x ZBR_IAM_POSTGRES_PASSWORD="" +declare -x ZBR_POSTGRES_PASSWORD="" +declare -x ZBR_RABBITMQ_USER="admin" +declare -x ZBR_RABBITMQ_PASSWORD="" +declare -x ZBR_REDIS_PASSWORD="" +declare -x ZBR_SMTP_ENABLED="0" +declare -x ZBR_SMTP_HOST="smtp.gmail.com" +declare -x ZBR_SMTP_PORT="587" +declare -x ZBR_SMTP_EMAIL="" +declare -x ZBR_SMTP_USER="" +declare -x ZBR_SMTP_PASSWORD="" +declare -x ZBR_AWS_S3_ENABLED="0" +declare -x ZBR_MINIO_ENABLED="1" +declare -x ZBR_STORAGE_ENDPOINT_PROTOCOL="http" +declare -x ZBR_STORAGE_ENDPOINT_HOST="minio:9000" +declare -x ZBR_STORAGE_REGION="us-west-1" +declare -x ZBR_STORAGE_BUCKET="changeit" +declare -x ZBR_STORAGE_ACCESS_KEY="changeit" +declare -x ZBR_STORAGE_SECRET_KEY="changeit" +declare -x ZBR_STORAGE_TENANT="" + diff --git a/configuration/reporting-service/variables.env.original b/configuration/reporting-service/variables.env.original index 1b86c1c23..8a3c28a63 100644 --- a/configuration/reporting-service/variables.env.original +++ b/configuration/reporting-service/variables.env.original @@ -1,5 +1,4 @@ MULTITENANT=false -DEBUG_ENABLED=true WEB_HOST=http://localhost:8081 API_HOST=http://localhost:8081 API_CONTEXT_PATH=reporting-service diff --git a/docker-compose.yml b/docker-compose.yml index 2ba220993..6c79a7856 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,8 +12,7 @@ services: volumes: - "./configuration/zebrunner-proxy/nginx.conf:/etc/nginx/nginx.conf:ro" ports: - - "8081:80" # primary HTTP port - - "5672:5672" # log collection port + - "${REPORTING_PORT}:80" # primary HTTP port # - "15672:15672" # RabbitMQ administration, optional # - "5432:5432" # database administration, optional # - "6379:6379" # Redis administration, optional diff --git a/minio-storage b/minio-storage index 63476bec3..2d3a870db 160000 --- a/minio-storage +++ b/minio-storage @@ -1 +1 @@ -Subproject commit 63476bec3227fd1f1467f5c5fc29c6739afd4cb1 +Subproject commit 2d3a870dbc09dcae1a20ab34a4c2273b1237de7f diff --git a/patch/settings.sh b/patch/settings.sh new file mode 100644 index 000000000..b40cd1132 --- /dev/null +++ b/patch/settings.sh @@ -0,0 +1,206 @@ +#!/bin/bash + +set_reporting_settings() { + + if [[ $ZBR_INSTALLER -eq 0 ]]; then + echo "Zebrunner Reporting Settings" + local is_confirmed=0 + if [[ -z $ZBR_HOSTNAME ]]; then + ZBR_HOSTNAME=`curl -s ifconfig.me` + fi + + while [[ $is_confirmed -eq 0 ]]; do + read -r -p "Protocol [$ZBR_PROTOCOL]: " local_protocol + if [[ ! -z $local_protocol ]]; then + ZBR_PROTOCOL=$local_protocol + fi + + read -r -p "Fully qualified domain name (ip) [$ZBR_HOSTNAME]: " local_hostname + if [[ ! -z $local_hostname ]]; then + ZBR_HOSTNAME=$local_hostname + fi + + read -r -p "Port [$ZBR_REPORTING_PORT]: " local_port + if [[ ! -z $local_port ]]; then + ZBR_REPORTING_PORT=$local_port + fi + + confirm "Zebrunner Reporting URL: $ZBR_PROTOCOL://$ZBR_HOSTNAME:$ZBR_REPORTING_PORT" "Continue?" "y" + is_confirmed=$? + done + + export ZBR_PROTOCOL=$ZBR_PROTOCOL + export ZBR_HOSTNAME=$ZBR_HOSTNAME + export ZBR_REPORTING_PORT=$ZBR_REPORTING_PORT + fi + + # Collect reporting settings + ## Crypto token and salt + if [[ -z $ZBR_TOKEN_SIGNING_SECRET ]]; then + # generate random value as it is first setup + ZBR_TOKEN_SIGNING_SECRET=$(random_string) + fi + if [[ -z $ZBR_CRYPTO_SALT ]]; then + # generate random value as it is first setup + ZBR_CRYPTO_SALT=$(random_string) + fi + export ZBR_TOKEN_SIGNING_SECRET=$ZBR_TOKEN_SIGNING_SECRET + export ZBR_CRYPTO_SALT=$ZBR_CRYPTO_SALT + + ## iam-service posgtres + if [[ -z $ZBR_IAM_POSTGRES_PASSWORD ]]; then + # generate random value as it is first setup + ZBR_IAM_POSTGRES_PASSWORD=$(random_string) + fi + export ZBR_IAM_POSTGRES_PASSWORD=$ZBR_IAM_POSTGRES_PASSWORD + + ## reporting posgtres instance + if [[ -z $ZBR_POSTGRES_PASSWORD ]]; then + # generate random value as it is first setup + ZBR_POSTGRES_PASSWORD=$(random_string) + fi + export ZBR_POSTGRES_PASSWORD=$ZBR_POSTGRES_PASSWORD + + + echo + confirm "Use AWS S3 bucket for storing test artifacts (logs, video, screenshots etc)? Embedded Minio Storage can be configured if you don't have Amazon account." "Use?" "$ZBR_AWS_S3_ENABLED" + if [[ $? -eq 1 ]]; then + ZBR_AWS_S3_ENABLED=1 + ZBR_MINIO_ENABLED=0 + set_aws_storage_settings + else + ZBR_MINIO_ENABLED=1 + fi + + ## email-service (smtp) + echo + confirm "Use SMTP for emailing test results?" "Use?" "$ZBR_SMTP_ENABLED" + if [[ $? -eq 0 ]]; then + ZBR_SMTP_ENABLED=0 + else + ZBR_SMTP_ENABLED=1 + local is_confirmed=0 + while [[ $is_confirmed -eq 0 ]]; do + read -r -p "Host [$ZBR_SMTP_HOST]: " local_smtp_host + if [[ ! -z $local_smtp_host ]]; then + ZBR_SMTP_HOST=$local_smtp_host + fi + + read -r -p "Port [$ZBR_SMTP_PORT]: " local_smtp_port + if [[ ! -z $local_smtp_port ]]; then + ZBR_SMTP_PORT=$local_smtp_port + fi + + read -r -p "Sender email [$ZBR_SMTP_EMAIL]: " local_smtp_email + if [[ ! -z $local_smtp_email ]]; then + ZBR_SMTP_EMAIL=$local_smtp_email + fi + + read -r -p "User [$ZBR_SMTP_USER]: " local_smtp_user + if [[ ! -z $local_smtp_user ]]; then + ZBR_SMTP_USER=$local_smtp_user + fi + + read -r -p "Password [$ZBR_SMTP_PASSWORD]: " local_smtp_password + if [[ ! -z $local_smtp_password ]]; then + ZBR_SMTP_PASSWORD=$local_smtp_password + fi + + echo + echo "SMTP Integration" + echo "host=$ZBR_SMTP_HOST:$ZBR_SMTP_PORT" + echo "email=$ZBR_SMTP_EMAIL" + echo "user=$ZBR_SMTP_USER" + echo "password=$ZBR_SMTP_PASSWORD" + confirm "" "Continue?" "y" + is_confirmed=$? + done + fi + + export ZBR_SMTP_HOST=$ZBR_SMTP_HOST + export ZBR_SMTP_PORT=$ZBR_SMTP_PORT + export ZBR_SMTP_EMAIL=$ZBR_SMTP_EMAIL + export ZBR_SMTP_USER=$ZBR_SMTP_USER + export ZBR_SMTP_PASSWORD=$ZBR_SMTP_PASSWORD + + + ## reporting rabbitmq + if [[ -z $ZBR_RABBITMQ_PASSWORD ]]; then + # generate random value as it is first setup + ZBR_RABBITMQ_PASSWORD=$(random_string) + fi + export ZBR_RABBITMQ_USER=$ZBR_RABBITMQ_USER + export ZBR_RABBITMQ_PASSWORD=$ZBR_RABBITMQ_PASSWORD + + ## reporting redis + if [[ -z $ZBR_REDIS_PASSWORD ]]; then + # generate random value as it is first setup + ZBR_REDIS_PASSWORD=$(random_string) + fi + export ZBR_REDIS_PASSWORD=$ZBR_REDIS_PASSWORD + +} + +set_aws_storage_settings() { + ## AWS S3 storage + local is_confirmed=0 + #TODO: provide a link to documentation howto create valid S3 bucket + echo + echo "AWS S3 storage" + while [[ $is_confirmed -eq 0 ]]; do + read -r -p "Region [$ZBR_STORAGE_REGION]: " local_region + if [[ ! -z $local_region ]]; then + ZBR_STORAGE_REGION=$local_region + fi + + ZBR_STORAGE_ENDPOINT_PROTOCOL="https" + ZBR_STORAGE_ENDPOINT_HOST="s3.${ZBR_STORAGE_REGION}.amazonaws.com:443" + + read -r -p "Bucket [$ZBR_STORAGE_BUCKET]: " local_bucket + if [[ ! -z $local_bucket ]]; then + ZBR_STORAGE_BUCKET=$local_bucket + fi + + read -r -p "Access key [$ZBR_STORAGE_ACCESS_KEY]: " local_access_key + if [[ ! -z $local_access_key ]]; then + ZBR_STORAGE_ACCESS_KEY=$local_access_key + fi + + read -r -p "Secret key [$ZBR_STORAGE_SECRET_KEY]: " local_secret_key + if [[ ! -z $local_secret_key ]]; then + ZBR_STORAGE_SECRET_KEY=$local_secret_key + fi + + if [[ $ZBR_REPORTING_ENABLED -eq 0 ]]; then + export ZBR_MINIO_ENABLED=0 + read -r -p "[Optional] Tenant [$ZBR_STORAGE_TENANT]: " local_value + if [[ ! -z $local_value ]]; then + ZBR_STORAGE_TENANT=$local_value + fi + else + read -r -p "UserAgent key [$ZBR_STORAGE_AGENT_KEY]: " local_agent_key + if [[ ! -z $local_agent_key ]]; then + ZBR_STORAGE_AGENT_KEY=$local_agent_key + fi + fi + + echo "Region: $ZBR_STORAGE_REGION" + echo "Endpoint: $ZBR_STORAGE_ENDPOINT_PROTOCOL://$ZBR_STORAGE_ENDPOINT_HOST" + echo "Bucket: $ZBR_STORAGE_BUCKET" + echo "Access key: $ZBR_STORAGE_ACCESS_KEY" + echo "Secret key: $ZBR_STORAGE_SECRET_KEY" + echo "Agent key: $ZBR_STORAGE_AGENT_KEY" + echo "Tenant: $ZBR_STORAGE_TENANT" + confirm "" "Continue?" "y" + is_confirmed=$? + done + + export ZBR_STORAGE_REGION=$ZBR_STORAGE_REGION + export ZBR_STORAGE_ENDPOINT_PROTOCOL=$ZBR_STORAGE_ENDPOINT_PROTOCOL + export ZBR_STORAGE_ENDPOINT_HOST=$ZBR_STORAGE_ENDPOINT_HOST + export ZBR_STORAGE_BUCKET=$ZBR_STORAGE_BUCKET + export ZBR_STORAGE_ACCESS_KEY=$ZBR_STORAGE_ACCESS_KEY + export ZBR_STORAGE_SECRET_KEY=$ZBR_STORAGE_SECRET_KEY + export ZBR_STORAGE_AGENT_KEY=$ZBR_STORAGE_AGENT_KEY +} + diff --git a/patch/utility.sh b/patch/utility.sh new file mode 100755 index 000000000..d974443cf --- /dev/null +++ b/patch/utility.sh @@ -0,0 +1,80 @@ +#!/bin/bash + +export_settings() { + export -p | grep "ZBR" > backup/settings.env +} + +random_string() { + cat /dev/urandom | env LC_CTYPE=C tr -dc a-zA-Z0-9 | head -c 48; echo +} + +echo_warning() { + echo " + WARNING! $1" +} + +echo_telegram() { + echo " + For more help join telegram channel: https://t.me/zebrunner + " +} + +replace() { + #TODO: https://github.com/zebrunner/zebrunner/issues/328 organize debug logging for setup/replace + file=$1 + #echo "file: $file" + content=$(<"$file") # read the file's content into + #echo "content: $content" + + old=$2 + #echo "old: $old" + + new=$3 + #echo "new: $new" + content=${content//"$old"/$new} + + #echo "content: $content" + + printf '%s' "$content" >"$file" # write new content to disk +} + +confirm() { + local message=$1 + local question=$2 + local isEnabled=$3 + + if [[ "$isEnabled" == "1" ]]; then + isEnabled="y" + fi + if [[ "$isEnabled" == "0" ]]; then + isEnabled="n" + fi + + while true; do + if [[ ! -z $message ]]; then + echo "$message" + fi + + read -r -p "$question y/n [$isEnabled]:" response + if [[ -z $response ]]; then + if [[ "$isEnabled" == "y" ]]; then + return 1 + fi + if [[ "$isEnabled" == "n" ]]; then + return 0 + fi + fi + + if [[ "$response" == "y" || "$response" == "Y" ]]; then + return 1 + fi + + if [[ "$response" == "n" || "$response" == "N" ]]; then + return 0 + fi + + echo "Please answer y (yes) or n (no)." + echo + done +} + diff --git a/zebrunner.sh b/zebrunner.sh index 73f834a1a..30bf91626 100755 --- a/zebrunner.sh +++ b/zebrunner.sh @@ -1,8 +1,25 @@ #!/bin/bash setup() { - # PREREQUISITES: valid values inside ZBR_* env vars! - local url="${ZBR_PROTOCOL}://${ZBR_HOSTNAME}:${ZBR_PORT}" + if [[ $ZBR_INSTALLER -eq 1 ]]; then + # Zebrunner CE installer + url="$ZBR_PROTOCOL://$ZBR_HOSTNAME:$ZBR_PORT" + ZBR_REPORTING_PORT=8081 + else + # load default interactive installer settings + source backup/settings.env.original + + # load ./backup/settings.env if exist to declare ZBR* vars from previous run! + if [[ -f backup/settings.env ]]; then + source backup/settings.env + fi + + set_reporting_settings + url="$ZBR_PROTOCOL://$ZBR_HOSTNAME:$ZBR_REPORTING_PORT" + fi + + cp .env.original .env + replace .env "REPORTING_PORT=8081" "REPORTING_PORT=$ZBR_REPORTING_PORT" cp configuration/_common/hosts.env.original configuration/_common/hosts.env replace configuration/_common/hosts.env "http://localhost:8081" "${url}" @@ -71,6 +88,9 @@ replace configuration/reporting-service/variables.env "REDIS_PASSWORD=MdXVvJgDdz9Hnau7" "REDIS_PASSWORD=${ZBR_REDIS_PASSWORD}" minio-storage/zebrunner.sh setup + + # export all ZBR* variables to save user input + export_settings } shutdown() { @@ -81,6 +101,8 @@ docker-compose --env-file .env -f docker-compose.yml down -v + rm -f .env + rm -f backup/settings.env rm -f configuration/_common/hosts.env rm -f configuration/_common/secrets.env rm -f configuration/_common/s3.env @@ -197,6 +219,9 @@ minio-storage/zebrunner.sh backup + cp .env .env.bak + cp backup/settings.env backup/settings.env.bak + cp configuration/_common/hosts.env configuration/_common/hosts.env.bak cp configuration/_common/secrets.env configuration/_common/secrets.env.bak cp configuration/_common/s3.env configuration/_common/s3.env.bak @@ -227,6 +252,8 @@ stop minio-storage/zebrunner.sh restore + cp .env.bak .env + cp backup/settings.env.bak backup/settings.env cp configuration/_common/hosts.env.bak configuration/_common/hosts.env cp configuration/_common/secrets.env.bak configuration/_common/secrets.env cp configuration/_common/s3.env.bak configuration/_common/s3.env @@ -311,14 +338,13 @@ BASEDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "${BASEDIR}" || exit +# shellcheck disable=SC1091 +source patch/utility.sh +source patch/settings.sh + case "$1" in setup) - if [[ $ZBR_INSTALLER -eq 1 ]]; then - setup - else - echo_warning "Setup procedure is supported only as part of Zebrunner Server (Community Edition)!" - echo_telegram - fi + setup ;; start) start From 5e3c1dfe373fc392f9255dac6ffa473e2c74518e Mon Sep 17 00:00:00 2001 From: vdelendik Date: Mon, 18 Oct 2021 17:40:28 +0000 Subject: [PATCH 22/27] #2322: removed TEST CASES BY STABILITY template --- database/reporting/sql/db-mng-data.sql | 205 ------------------------- 1 file changed, 205 deletions(-) diff --git a/database/reporting/sql/db-mng-data.sql b/database/reporting/sql/db-mng-data.sql index 64917b819..f537954f6 100644 --- a/database/reporting/sql/db-mng-data.sql +++ b/database/reporting/sql/db-mng-data.sql @@ -2538,211 +2538,6 @@ INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS FROM TEST_FUNCTIONS WHERE TEST_FUNCTIONS.ID=${testFunctionId}', '{"columns": ["TEST METHOD", "CREATED AT"]}', '{}', '{}', '{"testFunctionId": "1"}', true); -INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, LEGEND_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ('TEST CASES BY STABILITY', - 'Shows all test cases with low stability percent rate per appropriate period (default - less than 10%).', 'TABLE', '<#global WHERE_VALUES = { - "RUN_STATUS": join(STATUS), - "BUG": join(DEFECT), - "BUILD": join(BUILD), - "ENV": join(ENV), - "LOWER(PLATFORM)": join(PLATFORM), - "LOWER(BROWSER)": join(BROWSER), - "LOCALE": join(LOCALE), - "PRIORITY": join(PRIORITY), - "RUN_NAME": join(RUN), - "OWNER": join(USER) -}> - -<#global VIEW = PERIOD?replace(" ", "_") /> -<#global WHERE_CLAUSE = generateWhereClause(WHERE_VALUES) /> - - SELECT - <#if projectId?has_content> - '''' || TEST_EXECUTIONS.NAME || '''' AS "TEST METHOD", - <#else> - '''' || TEST_EXECUTIONS.NAME || '''' AS "TEST METHOD", - - ROUND(SUM(PASSED)/SUM(TOTAL)*100) AS "STABILITY" - FROM ${VIEW} - INNER JOIN TEST_EXECUTIONS on ${VIEW}.TEST_RUN_ID = TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID - ${WHERE_CLAUSE} - GROUP BY "TEST METHOD" - HAVING ROUND(SUM(PASSED)/SUM(TOTAL)*100) <= ${PERCENT} - ORDER BY "TEST METHOD", "STABILITY" - - -<#-- - Generates WHERE clause - @map - collected multiple choosen data (key - DB column name : value - expected DB value) - @return - generated WHERE clause ---> -<#function generateWhereClause map> - <#local result = ""/> - - <#list map?keys as key> - <#if map[key]?has_content && map[key]?contains("null")> - <#local result = result + addCondition("AND", "(${key} LIKE ANY (''{" + map[key] + "}'') OR ${key} IS NULL)", result) /> - <#elseif map[key]?has_content> - <#local result = result + addCondition("AND", "${key} LIKE ANY (''{" + map[key] + "}'')", result) /> - - - - <#if isPersonal() && !USERS?has_content> - - <#local result = result + addCondition("AND", "OWNER_ID=${currentUserId}", result) /> - - - <#if projectId?has_content> - <#local result = result + addCondition("AND", "PROJECT_ID=${projectId?c}", result) /> - - - <#if result?length != 0> - <#local result = " WHERE " + result/> - - <#return result> - - -<#-- - Joins array values using '', '' separator - @array - to join - @return - joined array as string - --> -<#function join array=[]> - <#return array?join('', '') /> - - -<#-- - Correct string value removing ending comma if any - @line - to analyze and correct - @return - corrected line - --> -<#function correct line> - <#if line?has_content> - - <#return line?trim?remove_ending(",") /> - <#else> - - <#return "" /> - - - -<#-- - Add valid SQL clause using condition and operator - @operator - AND/OR/BETWEEN etc - @condition - field(s) condition - @query - existing where conditions - @return - concatenated where clause conditions - --> -<#function addCondition operator, condition, query> - <#if query?length != 0> - <#return " " + operator + " " + condition> - <#else> - <#return condition> - - - -<#-- - retrun true if dashboard name is ''Personal'' or ''User Performance'' - @return - boolean - --> -<#function isPersonal> - <#local result = false /> - <#if dashboardName?has_content> - <#if dashboardName == "Personal" || dashboardName == "User Performance"> - <#local result = true /> - - - <#return result /> -', '{"columns": ["TEST METHOD", "STABILITY"]}', '{ - "PERIOD": { - "values": [ - "Today", - "Last 24 Hours", - "Week", - "Last 7 Days", - "Last 14 Days", - "Month", - "Last 30 Days", - "Quarter", - "Last 90 Days", - "Year", - "Last 365 Days", - "Total" - ], - "required": true - }, - "PERCENT": { - "value": "10", - "required": true - }, - "STATUS": { - "values": [], - "valuesQuery": "SELECT DISTINCT(UPPER(STATUS)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", - "multiple": true - }, - "DEFECT": { - "values": [], - "valuesQuery": "SELECT DISTINCT(VALUE) FROM ISSUE_REFERENCES INNER JOIN TEST_EXECUTIONS ON ISSUE_REFERENCES.ID=TEST_EXECUTIONS.ISSUE_REFERENCE_ID INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID=TEST_SUITE_EXECUTIONS.ID ${whereClause} ORDER BY 1 DESC;", - "multiple": true - }, - "USER": { - "values": [], - "valuesQuery": "SELECT DISTINCT(USERS.USERNAME) FROM TEST_SUITE_EXECUTIONS INNER JOIN TEST_EXECUTIONS ON TEST_SUITE_EXECUTIONS.ID=TEST_EXECUTIONS.TEST_SUITE_EXECUTION_ID INNER JOIN USERS ON TEST_EXECUTIONS.MAINTAINER_ID=USERS.ID ${whereClause} ORDER BY 1;", - "multiple": true - }, - "PRIORITY": { - "values": [], - "valuesQuery": "select unnest(array[''P0'', ''P1'', ''P2'', ''P3'', ''P4'', ''P5'', ''P6'']);", - "multiple": true - }, - "ENV": { - "values": [], - "valuesQuery": "SELECT DISTINCT(UPPER(ENVIRONMENT)) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", - "multiple": true - }, - "PLATFORM": { - "values": [], - "valuesQuery": "SELECT DISTINCT(LOWER(TEST_EXECUTION_CONFIGS.PLATFORM)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", - "multiple": true - }, - "BROWSER": { - "values": [], - "valuesQuery": "SELECT DISTINCT(LOWER(BROWSER)) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", - "multiple": true - }, - "LOCALE": { - "values": [], - "valuesQuery": "SELECT DISTINCT(LOCALE) FROM TEST_EXECUTION_CONFIGS INNER JOIN TEST_SUITE_EXECUTIONS ON TEST_EXECUTION_CONFIGS.ID=TEST_SUITE_EXECUTIONS.CONFIG_ID ${whereClause} ORDER BY 1;", - "multiple": true - }, - "BUILD": { - "values": [], - "valuesQuery": "SELECT DISTINCT(BUILD) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1 DESC;", - "multiple": true - }, - "RUN": { - "values": [], - "valuesQuery": "SELECT DISTINCT(NAME) FROM TEST_SUITE_EXECUTIONS ${whereClause} ORDER BY 1;", - "multiple": true - } -}', '', '{ - "PERIOD": "Last 30 Days", - "PERCENT": 10, - "currentUserId": 2, - "dashboardName": "", - "STATUS": [], - "DEFECT": [], - "BUILD": [], - "ENV": [], - "PLATFORM": [], - "BROWSER": [], - "LOCALE": [], - "PRIORITY": [], - "RUN": [], - "USER": [] -}', false); - --TESTS IMPLEMENTATION PROGRESS INSERT INTO WIDGET_TEMPLATES (NAME, DESCRIPTION, TYPE, SQL, CHART_CONFIG, PARAMS_CONFIG, LEGEND_CONFIG, PARAMS_CONFIG_SAMPLE, HIDDEN) VALUES ('TEST CASES DEVELOPMENT TREND', 'A number of new automated cases per month.', 'BAR', '<#global WHERE_VALUES = { From 7895eda06b16288e7d73e655074aaab7d6619c55 Mon Sep 17 00:00:00 2001 From: vdelendik Date: Mon, 18 Oct 2021 18:12:32 +0000 Subject: [PATCH 23/27] bump up reporting-service build --- .env.original | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env.original b/.env.original index be38f8f12..eab5c06ca 100644 --- a/.env.original +++ b/.env.original @@ -1,5 +1,5 @@ TAG_REPORTING_UI=1.26.0.191-SNAPSHOT -TAG_REPORTING_SERVICE=1.26.0.246-SNAPSHOT +TAG_REPORTING_SERVICE=1.26.0.247-SNAPSHOT TAG_ARTIFACTS_PROXY_SERVICE=1.8.0 TAG_MAIL_SERVICE=1.5 TAG_IAM_SERVICE=1.15.0.125-SNAPSHOT From 7f1e7c8bb552887b47f28e0d781b82299cabb747 Mon Sep 17 00:00:00 2001 From: okamara Date: Mon, 25 Oct 2021 09:17:06 +0000 Subject: [PATCH 24/27] bump up to new versions --- .env.original | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.env.original b/.env.original index eab5c06ca..8a7bec9d0 100644 --- a/.env.original +++ b/.env.original @@ -1,5 +1,5 @@ -TAG_REPORTING_UI=1.26.0.191-SNAPSHOT -TAG_REPORTING_SERVICE=1.26.0.247-SNAPSHOT +TAG_REPORTING_UI=1.26.0.192-SNAPSHOT +TAG_REPORTING_SERVICE=1.26.0.249-SNAPSHOT TAG_ARTIFACTS_PROXY_SERVICE=1.8.0 TAG_MAIL_SERVICE=1.5 TAG_IAM_SERVICE=1.15.0.125-SNAPSHOT From ba71b16c0ae5876d405687b18a9986a9defba632 Mon Sep 17 00:00:00 2001 From: okamara Date: Mon, 25 Oct 2021 10:39:49 +0000 Subject: [PATCH 25/27] fixed widget editing --- .env.original | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env.original b/.env.original index 8a7bec9d0..eeb090782 100644 --- a/.env.original +++ b/.env.original @@ -1,4 +1,4 @@ -TAG_REPORTING_UI=1.26.0.192-SNAPSHOT +TAG_REPORTING_UI=1.26.0.194-SNAPSHOT TAG_REPORTING_SERVICE=1.26.0.249-SNAPSHOT TAG_ARTIFACTS_PROXY_SERVICE=1.8.0 TAG_MAIL_SERVICE=1.5 From c4174630aa61b6ee2125b630fca77db33d6ee5bf Mon Sep 17 00:00:00 2001 From: okamara Date: Mon, 25 Oct 2021 12:40:12 +0000 Subject: [PATCH 26/27] bump up reporting-ui build --- .env.original | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env.original b/.env.original index eeb090782..9272ba668 100644 --- a/.env.original +++ b/.env.original @@ -1,4 +1,4 @@ -TAG_REPORTING_UI=1.26.0.194-SNAPSHOT +TAG_REPORTING_UI=1.26.0.195-SNAPSHOT TAG_REPORTING_SERVICE=1.26.0.249-SNAPSHOT TAG_ARTIFACTS_PROXY_SERVICE=1.8.0 TAG_MAIL_SERVICE=1.5 From d2843e2befb3406a3645c0cb73a1c4f5f8fc1a1d Mon Sep 17 00:00:00 2001 From: vdelendik Date: Tue, 26 Oct 2021 14:02:23 +0000 Subject: [PATCH 27/27] switched to the released reporting images --- .env.original | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.env.original b/.env.original index 9272ba668..5959cc307 100644 --- a/.env.original +++ b/.env.original @@ -1,8 +1,8 @@ -TAG_REPORTING_UI=1.26.0.195-SNAPSHOT -TAG_REPORTING_SERVICE=1.26.0.249-SNAPSHOT +TAG_REPORTING_UI=1.26.0 +TAG_REPORTING_SERVICE=1.26.0 TAG_ARTIFACTS_PROXY_SERVICE=1.8.0 TAG_MAIL_SERVICE=1.5 -TAG_IAM_SERVICE=1.15.0.125-SNAPSHOT +TAG_IAM_SERVICE=1.15.0 TAG_POSTGRES=9.6 TAG_RABBITMQ=3.8-management TAG_REDIS=5.0.5