Skip to content

Commit 4d75674

Browse files
committed
DNM lava_callback: improve logging
Signed-off-by: Arnaud Ferraris <[email protected]>
1 parent e03b59b commit 4d75674

File tree

1 file changed

+23
-19
lines changed

1 file changed

+23
-19
lines changed

src/lava_callback.py

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@
4040
app = FastAPI()
4141
executor = ThreadPoolExecutor(max_workers=16)
4242

43+
logger = logging.getLogger('uvicorn.error')
44+
logger.setLevel(logging.DEBUG)
45+
4346

4447
class ManualCheckout(BaseModel):
4548
commit: str
@@ -200,7 +203,7 @@ def async_job_submit(api_helper, node_id, job_callback):
200203
job_node = api_helper.api.node.get(node_id)
201204
if not job_node:
202205
metrics.add('lava_callback_late_fail_total', 1)
203-
logging.error(f'Node {node_id} not found')
206+
logger.error(f'Node {node_id} not found')
204207
return
205208
# TODO: Verify lab_name matches job node lab name
206209
# Also extract job_id and compare with node job_id (future)
@@ -215,14 +218,14 @@ def async_job_submit(api_helper, node_id, job_callback):
215218
log_txt_url = _upload_log(log_parser, job_node, storage)
216219
if log_txt_url:
217220
job_node['artifacts']['lava_log'] = log_txt_url
218-
print(f"Log uploaded to {log_txt_url}")
221+
logger.debug(f"Log uploaded to {log_txt_url}")
219222
else:
220-
print("Failed to upload log")
223+
logger.info("Failed to upload log")
221224
metrics.add('lava_callback_late_fail_total', 1)
222225
callback_json_url = _upload_callback_data(callback_data, job_node, storage)
223226
if callback_json_url:
224227
job_node['artifacts']['callback_data'] = callback_json_url
225-
print(f"Callback data uploaded to {callback_json_url}")
228+
logger.debug(f"Callback data uploaded to {callback_json_url}")
226229
else:
227230
metrics.add('lava_callback_late_fail_total', 1)
228231
# failed LAVA job should have result set to 'incomplete'
@@ -234,14 +237,15 @@ def async_job_submit(api_helper, node_id, job_callback):
234237
if device_id:
235238
job_node['data']['device'] = device_id
236239
# add artifacts uploaded from the running LAVA job
240+
logger.debug(f"Results: {results}")
237241
for result in results.keys():
238242
if result.startswith("artifact-upload:"):
239243
artifact = result.split(':', 2)
240244
if len(artifact) != 3:
241-
print(f"Failed to extract artifact name and URL from {result}")
245+
logger.info(f"Failed to extract artifact name and URL from {result}")
242246
continue
243247
job_node['artifacts'][artifact[1]] = artifact[2]
244-
print(f"Artifact {artifact[1]} added with URL {artifact[2]}")
248+
logger.debug(f"Artifact {artifact[1]} added with URL {artifact[2]}")
245249
hierarchy = job_callback.get_hierarchy(results, job_node)
246250
api_helper.submit_results(hierarchy, job_node)
247251

@@ -291,7 +295,7 @@ async def callback(node_id: str, request: Request):
291295
try:
292296
data = await request.json()
293297
except Exception as e:
294-
logging.error(f'Error decoding JSON: {e}')
298+
logger.error(f'Error decoding JSON: {e}')
295299
item = {}
296300
item['message'] = 'Error decoding JSON'
297301
return JSONResponse(content=item, status_code=400)
@@ -315,7 +319,7 @@ def decode_jwt(jwtstr):
315319
'''
316320
secret = SETTINGS.get('jwt', {}).get('secret')
317321
if not secret:
318-
logging.error('No JWT secret configured')
322+
logger.error('No JWT secret configured')
319323
return None
320324
return jwt.decode(jwtstr, secret, algorithms=['HS256'])
321325

@@ -326,17 +330,17 @@ def validate_permissions(jwtoken, permission):
326330
try:
327331
decoded = decode_jwt(jwtoken)
328332
except Exception as e:
329-
logging.error(f'Error decoding JWT: {e}')
333+
logger.error(f'Error decoding JWT: {e}')
330334
return False
331335
if not decoded:
332-
logging.error('Invalid JWT')
336+
logger.error('Invalid JWT')
333337
return False
334338
permissions = decoded.get('permissions')
335339
if not permissions:
336-
logging.error('No permissions in JWT')
340+
logger.error('No permissions in JWT')
337341
return False
338342
if permission not in permissions:
339-
logging.error(f'Permission {permission} not in JWT')
343+
logger.error(f'Permission {permission} not in JWT')
340344
return False
341345
return decoded
342346

@@ -397,7 +401,7 @@ async def jobretry(data: JobRetry, request: Request,
397401
return JSONResponse(content=item, status_code=401)
398402

399403
email = decoded.get('email')
400-
logging.info(f"User {email} is retrying job {data.nodeid}")
404+
logger.info(f"User {email} is retrying job {data.nodeid}")
401405
api_config_name = SETTINGS.get('DEFAULT', {}).get('api_config')
402406
if not api_config_name:
403407
item['message'] = 'No default API name set'
@@ -407,7 +411,7 @@ async def jobretry(data: JobRetry, request: Request,
407411
try:
408412
node = api_helper.api.node.get(data.nodeid)
409413
except Exception as e:
410-
logging.error(f'Error getting node {data.nodeid}: {e}')
414+
logger.error(f'Error getting node {data.nodeid}: {e}')
411415
item['message'] = 'Error getting node'
412416
return JSONResponse(content=item, status_code=500)
413417
if not node:
@@ -446,7 +450,7 @@ async def jobretry(data: JobRetry, request: Request,
446450
evnode = {'data': knode}
447451
# Now we can submit custom kbuild node to the API(pub/sub)
448452
api_helper.api.send_event('node', evnode)
449-
logging.info(f"Job retry for node {data.nodeid} submitted")
453+
logger.info(f"Job retry for node {data.nodeid} submitted")
450454
item['message'] = 'OK'
451455
return JSONResponse(content=item, status_code=200)
452456

@@ -533,7 +537,7 @@ async def checkout(data: ManualCheckout, request: Request,
533537
item['message'] = 'Unauthorized'
534538
return JSONResponse(content=item, status_code=401)
535539

536-
logging.info(f"User {email} is checking out {data.nodeid} at custom commit {data.commit}")
540+
logger.info(f"User {email} is checking out {data.nodeid} at custom commit {data.commit}")
537541
api_config_name = SETTINGS.get('DEFAULT', {}).get('api_config')
538542
if not api_config_name:
539543
item['message'] = 'No default API name set'
@@ -639,7 +643,7 @@ async def checkout(data: ManualCheckout, request: Request,
639643
item['message'] = 'Failed to submit checkout node'
640644
return JSONResponse(content=item, status_code=500)
641645
else:
642-
logging.info(f"Checkout node {r['id']} submitted")
646+
logger.info(f"Checkout node {r['id']} submitted")
643647
item['message'] = 'OK'
644648
item['node'] = r
645649
return JSONResponse(content=item, status_code=200)
@@ -668,7 +672,7 @@ async def patchset(data: PatchSet, request: Request,
668672
item['message'] = 'Unauthorized'
669673
return JSONResponse(content=item, status_code=401)
670674

671-
logging.info(f"User {email} is testing patchset on {data.nodeid}")
675+
logger.info(f"User {email} is testing patchset on {data.nodeid}")
672676
api_config_name = SETTINGS.get('DEFAULT', {}).get('api_config')
673677
if not api_config_name:
674678
item['message'] = 'No default API name set'
@@ -742,7 +746,7 @@ async def patchset(data: PatchSet, request: Request,
742746
item['message'] = 'Failed to submit patchset node'
743747
return JSONResponse(content=item, status_code=500)
744748
else:
745-
logging.info(f"Patchset node {r['id']} submitted")
749+
logger.info(f"Patchset node {r['id']} submitted")
746750
item['message'] = 'OK'
747751
item['node'] = r
748752
return JSONResponse(content=item, status_code=200)

0 commit comments

Comments
 (0)