Merge ~hyask/autopkgtest-cloud:skia/fix_broken_cache_amqp into autopkgtest-cloud:master

Proposed by Skia
Status: Merged
Merged at revision: 6499aaf6e5d30777ded4ab98a36af1a971506fff
Proposed branch: ~hyask/autopkgtest-cloud:skia/fix_broken_cache_amqp
Merge into: autopkgtest-cloud:master
Diff against target: 202 lines (+106/-50)
2 files modified
charms/focal/autopkgtest-web/webcontrol/browse.cgi (+101/-46)
charms/focal/autopkgtest-web/webcontrol/cache-amqp (+5/-4)
Reviewer Review Type Date Requested Status
Tim Andersson Approve
Review via email: mp+463281@code.launchpad.net

Description of the change

Those changes are the proper fix for the current cowboys fixing the package results pages.

To post a comment you must log in.
Revision history for this message
Tim Andersson (andersson123) wrote :

LGTM provided ci passes

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/charms/focal/autopkgtest-web/webcontrol/browse.cgi b/charms/focal/autopkgtest-web/webcontrol/browse.cgi
2index 5e5217b..739abe8 100755
3--- a/charms/focal/autopkgtest-web/webcontrol/browse.cgi
4+++ b/charms/focal/autopkgtest-web/webcontrol/browse.cgi
5@@ -284,19 +284,34 @@ def package_overview(package, _=None):
6 (k, v) for (k, v) in get_running_jobs().items() if k == package
7 )
8
9- (_, _, queues_info) = get_queues_info()
10- for queue_name, queue in queues_info.items():
11- for release in queue:
12- for arch in queue[release]:
13- filtered_requests = [
14- r
15- for r in queue[release][arch][1]
16- if r.startswith(package + "\n")
17- ]
18- queues_info[queue_name][release][arch] = (
19- len(filtered_requests), # update the size too
20- filtered_requests,
21- )
22+ try:
23+ (_, _, queues_info) = get_queues_info()
24+ for queue_name, queue in queues_info.items():
25+ for release in queue:
26+ for arch in queue[release]:
27+ filtered_requests = [
28+ r
29+ for r in queue[release][arch][1]
30+ if r.startswith(package + "\n")
31+ ]
32+ queues_info[queue_name][release][arch] = (
33+ len(filtered_requests), # update the size too
34+ filtered_requests,
35+ )
36+ except Exception:
37+ # We never want to fail in that block, even is there are issues with cache-amqp
38+ queues_info = {
39+ "error": {
40+ "no-release": {
41+ "no-arch": [
42+ 1,
43+ [
44+ "There are errors in cache-amqp, please contact QA team"
45+ ],
46+ ]
47+ }
48+ }
49+ }
50
51 return render(
52 "browse-package.html",
53@@ -376,49 +391,89 @@ def package_release_arch(package, release, arch, _=None):
54 )
55
56 # Add running jobs if any
57- for _, running_jobs in get_running_jobs().get(package, {}).items():
58- job = running_jobs.get(release, {}).get(arch, {})
59- if job:
60- results.insert(
61- 0,
62- (
63- "N/A",
64- job[0].get("triggers"),
65- "N/A",
66- human_date(job[0].get("submit-time")),
67- human_sec(int(job[1])),
68- job[0].get("requester", "-"),
69- "running",
70- "",
71- False,
72- "",
73- job[0].get("uuid", "-"),
74- ),
75- )
76-
77- # Add queued jobs if any
78- (_, _, queues_info) = get_queues_info()
79- for _, queue in queues_info.items():
80- queue_items = queue.get(release, {}).get(arch, [0, []])[1]
81- for item in queue_items:
82- if item.startswith(package + "\n"):
83- item_info = json.loads(item.split("\n")[1])
84+ try:
85+ for _, running_jobs in get_running_jobs().get(package, {}).items():
86+ job = running_jobs.get(release, {}).get(arch, {})
87+ if job:
88 results.insert(
89 0,
90 (
91 "N/A",
92- item_info.get("triggers"),
93- "N/A",
94- human_date(item_info.get("submit-time")),
95+ job[0].get("triggers"),
96 "N/A",
97- "-",
98- "queued",
99+ human_date(job[0].get("submit-time")),
100+ human_sec(int(job[1])),
101+ job[0].get("requester", "-"),
102+ "running",
103 "",
104 False,
105 "",
106- item_info.get("uuid", ""),
107+ job[0].get("uuid", "-"),
108 ),
109 )
110+ except Exception:
111+ # We never want to fail in that block, even is there are issues with cache-amqp
112+ # Let's signal the error in the page, but still display other results
113+ results.insert(
114+ 0,
115+ (
116+ "Unknown running list",
117+ "There are errors in running.json",
118+ "Please contact QA team",
119+ "",
120+ "",
121+ "",
122+ "",
123+ "",
124+ False,
125+ "",
126+ "",
127+ ),
128+ )
129+
130+ # Add queued jobs if any
131+ try:
132+ (_, _, queues_info) = get_queues_info()
133+ for _, queue in queues_info.items():
134+ queue_items = queue.get(release, {}).get(arch, [0, []])[1]
135+ for item in queue_items:
136+ if item.startswith(package + "\n"):
137+ item_info = json.loads(item.split("\n")[1])
138+ results.insert(
139+ 0,
140+ (
141+ "N/A",
142+ item_info.get("triggers"),
143+ "N/A",
144+ human_date(item_info.get("submit-time")),
145+ "N/A",
146+ "-",
147+ "queued",
148+ "",
149+ False,
150+ "",
151+ item_info.get("uuid", ""),
152+ ),
153+ )
154+ except Exception:
155+ # We never want to fail in that block, even is there are issues with cache-amqp
156+ # Let's signal the error in the page, but still display other results
157+ results.insert(
158+ 0,
159+ (
160+ "Unknown queued list",
161+ "There are errors in cache-amqp",
162+ "Please contact QA team",
163+ "",
164+ "",
165+ "",
166+ "",
167+ "",
168+ False,
169+ "",
170+ "",
171+ ),
172+ )
173
174 return render(
175 "browse-results.html",
176diff --git a/charms/focal/autopkgtest-web/webcontrol/cache-amqp b/charms/focal/autopkgtest-web/webcontrol/cache-amqp
177index 6e87b8b..d8cd653 100755
178--- a/charms/focal/autopkgtest-web/webcontrol/cache-amqp
179+++ b/charms/focal/autopkgtest-web/webcontrol/cache-amqp
180@@ -123,7 +123,7 @@ class AutopkgtestQueueContents:
181 if isinstance(r, bytes):
182 r = r.decode("UTF-8")
183 try:
184- req = r.split(None, 1)
185+ req = r.split("\n", 1)
186 if len(req) > 1:
187 params = json.loads(req[1])
188 else:
189@@ -133,9 +133,10 @@ class AutopkgtestQueueContents:
190 ):
191 r = "private job"
192 res.append(r)
193- except (ValueError, IndexError):
194- logging.error('Received invalid request format "%s"', r)
195- return
196+ except (ValueError, IndexError) as e:
197+ logging.warning(
198+ 'Received invalid request format "%s" (%s)', r, repr(e)
199+ )
200 return res
201
202 def get_queue_contents(self):

Subscribers

People subscribed via source and target branches