Skip to content

Commit 1ff88e2

Browse files
Merge pull request #88 from KeerthanaAP/rc_builds
Added support to get job runs details based on the release
2 parents c8cd0cc + 54ebb4e commit 1ff88e2

File tree

3 files changed

+78
-15
lines changed

3 files changed

+78
-15
lines changed

CI_JobHistory.py

Lines changed: 44 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import urllib3
33
from tabulate import tabulate
44
import re
5-
from datetime import datetime
5+
from datetime import datetime,timedelta
66
import monitor
77
import argparse
88
import configparser
@@ -15,6 +15,36 @@
1515

1616
JENKINS = config_vars.get('Settings', 'JENKINS')
1717

18+
def get_release_date():
19+
'''
20+
Fetch release start date and end date
21+
Returns:
22+
Date: Start date
23+
Date: End date
24+
'''
25+
release = input("Enter the release: ") #release that needs to be checked
26+
assert len(release.strip()) != 0, "Release value should not be empty"
27+
nxt_rls = input("Enter the next release (provide latest if no next release): ") #next release or latest
28+
assert len(nxt_rls.strip()) != 0 , "Next release value should not be empty"
29+
r = re.compile(r"^\d*[.,]?\d*$")
30+
if re.match(r,release)==False:
31+
print("Enter valid release version")
32+
33+
try:
34+
35+
release_date_str = monitor.fetch_release_date(release)
36+
release_date = datetime.strptime(release_date_str,"%Y-%m-%d %H:%M:%S")
37+
38+
if nxt_rls != "latest":
39+
nxt_rls_str = monitor.fetch_release_date(nxt_rls)
40+
nxt_rls_date = datetime.strptime(nxt_rls_str,"%Y-%m-%d %H:%M:%S")
41+
else:
42+
nxt_rls_date=datetime.now()
43+
except ValueError:
44+
print("Invalid date format")
45+
return None
46+
47+
return nxt_rls_date,release_date
1848

1949

2050
def get_date_input():
@@ -33,18 +63,14 @@ def get_date_input():
3363
elif JENKINS == "True":
3464
date_str_1 = config_vars.get('Settings', 'before_date')
3565
date_str_2 = config_vars.get('Settings', 'after_date')
36-
3766
try:
3867
start_date = datetime.strptime(date_str_1,"%Y-%m-%d")
3968
end_date = datetime.strptime(date_str_2,"%Y-%m-%d")
40-
start_date = start_date.date()
41-
end_date = end_date.date()
4269
return start_date,end_date
4370
except ValueError:
4471
print("Invalid date format")
4572
return None
4673

47-
4874
def check_for_node_crashes(job_list, zone):
4975
"""
5076
Check for node crash across all the provided job list
@@ -218,6 +244,7 @@ def get_query_options():
218244
print("4. Failed testcases")
219245
print("5. Get builds with testcase failure")
220246
print("6. Get testcase failure frequency")
247+
print("7. Get build based on release ")
221248
option = input("Enter the option: ")
222249

223250
elif JENKINS == "True":
@@ -264,9 +291,14 @@ def main():
264291

265292
ci_list = display_ci_links(config_data,filter)
266293
if isinstance(ci_list,dict):
267-
start_date,end_date = get_date_input()
294+
option = get_query_options()
295+
296+
if option == '7':
297+
start_date,end_date = get_release_date()
298+
else:
299+
start_date,end_date = get_date_input()
300+
268301
if start_date != None and end_date != None:
269-
option = get_query_options()
270302
print("Checking runs from",end_date,"to",start_date)
271303

272304
if option == '1':
@@ -337,6 +369,11 @@ def main():
337369
print(len(spy_links),"builds have run in the date range of",start_date,"to",end_date)
338370
print_tc_frequency(spy_links,zone=args.zone,tc_name=tc_list)
339371
monitor.final_job_list = []
372+
if option == '7':
373+
for ci_name,ci_link in ci_list.items():
374+
spy_links = monitor.get_jobs_with_date(ci_link,start_date,end_date)
375+
monitor.get_detailed_job_info(spy_links,ci_name,zone=args.zone)
376+
monitor.final_job_list = []
340377

341378
if __name__ == "__main__":
342379
main()

aggregate.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,22 +84,22 @@ def get_job_name():
8484
def get_builds_with_same_nightly(job_name,nightly_image):
8585
builds=[]
8686
agg_builds = []
87-
pattern = r'\d{4}-\d{2}-\d{2}'
87+
pattern = r'\d{4}-\d{2}-\d{2}-\d{6}'
8888
match = re.search(pattern,nightly_image)
8989

9090
if match != None:
9191
date_str = match.group()
92-
nightly_date = datetime.strptime(date_str,"%Y-%m-%d").date()
93-
current_date = datetime.now().date()
92+
nightly_date = datetime.strptime(date_str,"%Y-%m-%d-%H%M%S")
93+
current_date = datetime.now()
9494
builds=monitor.get_jobs_with_date(job_name,current_date,nightly_date)
9595
for spylink in reversed(builds):
9696
ng = ""
9797
_, ng = monitor.get_quota_and_nightly(spylink)
98-
pattern_1 = r'\d{4}-\d{2}-\d{2}'
98+
pattern_1 = r'\d{4}-\d{2}-\d{2}-\d{6}'
9999
match_1 = re.search(pattern_1,ng)
100100
if match_1 != None:
101101
date_str_1 = match_1.group()
102-
ng_date = datetime.strptime(date_str_1,"%Y-%m-%d").date()
102+
ng_date = datetime.strptime(date_str_1,"%Y-%m-%d-%H%M%S")
103103
if ng_date > nightly_date:
104104
break
105105
else:

monitor.py

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,33 @@
1111
PROW_URL = ""
1212
PROW_VIEW_URL = "https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs"
1313
final_job_list=[]
14+
RELEASE_URL = "https://ppc64le.ocp.releases.ci.openshift.org/releasestream/4-stable-ppc64le/release/"
15+
16+
def fetch_release_date(release):
17+
'''
18+
Returns the created date of release
19+
'''
20+
url = RELEASE_URL + release
21+
try:
22+
response = requests.get(url, verify=False, timeout=15)
23+
if response.status_code == 200:
24+
soup = BeautifulSoup(response.text, 'html.parser')
25+
p_elements = soup.find_all("p")
26+
for p in p_elements:
27+
p_ele = p.string
28+
if p_ele:
29+
if "Created:" in p_ele:
30+
start_date = p_ele.split(" ")[1]+" "+p_ele.split(" ")[2]
31+
break
32+
return start_date
33+
else:
34+
return "failed to get the release page"
35+
except requests.Timeout as e:
36+
return "Request timed out"
37+
except requests.RequestException as e:
38+
return "Error while sending request to url"
39+
except json.JSONDecodeError as e:
40+
return "Failed to extract the spy-links"
1441

1542
def set_prow_url(ci_job_type: str)->str:
1643
'''
@@ -47,7 +74,7 @@ def load_config(config_file):
4774
sys.exit(1)
4875

4976
def get_current_date():
50-
return datetime.now().date()
77+
return datetime.now()
5178

5279
def parse_job_date(date):
5380

@@ -62,8 +89,7 @@ def parse_job_date(date):
6289
'''
6390

6491
parse_date=datetime.strptime(date,"%Y-%m-%dT%H:%M:%SZ")
65-
job_run_date=parse_date.date()
66-
return job_run_date
92+
return parse_date
6793

6894

6995
def get_jobs(prow_link):

0 commit comments

Comments
 (0)