diff --git a/.github/workflows/staging-push.yml b/.github/workflows/staging-push.yml index 5853fa2..4dfbf74 100644 --- a/.github/workflows/staging-push.yml +++ b/.github/workflows/staging-push.yml @@ -52,6 +52,8 @@ jobs: - name: Jira query run: python ./__main__.py --report-type jira-qa-requests + - name: Jira query + run: python ./__main__.py --report-type jira-qa-needed - name: Set job log URL if: always() run: echo "JOB_LOG_URL=https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" >> $GITHUB_ENV diff --git a/__main__.py b/__main__.py index 1e42f36..6d94d58 100644 --- a/__main__.py +++ b/__main__.py @@ -37,7 +37,6 @@ def parse_args(cmdln_args): def main(): args = parse_args(sys.argv[1:]) - if args.report_type == 'test-case-coverage': h = TestRailClient() h.data_pump(args.project.lower()) @@ -56,6 +55,9 @@ def main(): if args.report_type == 'jira-qa-requests': h = JiraClient() h.jira_qa_requests() + if args.report_type == 'jira-qa-needed': + h = JiraClient() + h.jira_qa_needed() if __name__ == '__main__': diff --git a/database.py b/database.py index 51fa56c..71aa77d 100644 --- a/database.py +++ b/database.py @@ -39,6 +39,10 @@ class ReportJiraQARequests(Base): __table__ = Table('report_jira_qa_requests', Base.metadata, autoload=True) # noqa +class ReportJiraQANeeded(Base): + __table__ = Table('report_jira_qa_needed', Base.metadata, autoload=True) # noqa + + class Database: def __init__(self): diff --git a/jira.py b/jira.py index 355e443..55c6332 100644 --- a/jira.py +++ b/jira.py @@ -6,11 +6,12 @@ from lib.jira_conn import JiraAPIClient from database import ( Database, - ReportJiraQARequests + ReportJiraQARequests, + ReportJiraQANeeded ) from utils.datetime_utils import DatetimeUtils as dt from utils.constants import FILTER_ID_ALL_REQUESTS_2022, MAX_RESULT - +from utils.constants import FILTER_ID_QA_NEEDED_iOS # JQL query All QA Requests since 2022 filter_id: 13856 # Extra fields needed @@ -44,6 +45,10 @@ def filters(self): return self.client.get_search(query) + def filter_qa_needed(self): + query = JQL_QUERY + FILTER_ID_QA_NEEDED_iOS + '&' + MAX_RESULT + return self.client.get_search(query) + class JiraClient(Jira): def __init__(self): @@ -62,6 +67,13 @@ def jira_qa_requests(self): self.db.report_jira_qa_requests_insert(data_frame) + def jira_qa_needed(self): + payload = self.filter_qa_needed() + data_frame = self.db.report_jira_qa_needed(payload) + print(data_frame) + + self.db.report_jira_qa_needed_instert(data_frame) + class DatabaseJira(Database): @@ -136,3 +148,26 @@ def report_jira_qa_requests_insert(self, payload): jira_labels=row['jira_labels']) self.session.add(report) self.session.commit() + + def report_jira_qa_needed(self, payload): + # Normalize the JSON data + df = pd.json_normalize(payload, sep='_') + total_rows = len(df) + + # Join list of labels into a single string + jira_labels = df['fields_labels'] = df['fields_labels'].apply(lambda x: ','.join(x) if isinstance(x, list) else x) # noqa + # Calcule the Nightly Verified label + verified_nightly_count = jira_labels.str.contains('verified', case=False, na=False).sum() # noqa + + not_verified_count = total_rows - verified_nightly_count + + data = [total_rows, not_verified_count, verified_nightly_count] + return data + + def report_jira_qa_needed_instert(self, payload): + report = ReportJiraQANeeded(jira_total_qa_needed=payload[0], + jira_qa_needed_not_verified=payload[1], + jira_qa_needed_verified_nightly=payload[2]) + + self.session.add(report) + self.session.commit() diff --git a/lib/jira_conn.py b/lib/jira_conn.py index 6ae1ee1..e1552e6 100644 --- a/lib/jira_conn.py +++ b/lib/jira_conn.py @@ -34,7 +34,6 @@ def get_search(self, query): def __send_request(self, method, query): url = self.__url + '?' + query - # Store all results all_results = [] params = {} @@ -55,6 +54,7 @@ def __send_request(self, method, query): params=params) data = response.json() + all_results.extend(data['issues']) if total is None: total = data['total'] diff --git a/utils/constants.py b/utils/constants.py index 494ecf4..c990477 100644 --- a/utils/constants.py +++ b/utils/constants.py @@ -11,9 +11,13 @@ 'test-case-coverage', 'test-run-counts', 'issue-regression', - 'jira-qa-requests' + 'jira-qa-requests', + 'jira-qa-needed' ] # JQL query All QA Requests since 2022 filter_id: 13856 FILTER_ID_ALL_REQUESTS_2022 = "13856" MAX_RESULT = "maxResults=100" + +# JQL query All QA Needed iOS filter_id: 13789 +FILTER_ID_QA_NEEDED_iOS = "13789"