aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2025-04-01 22:43:15 +0300
committerChristopher Baines <mail@cbaines.net>2025-04-01 22:43:15 +0300
commit14de1667b16a4732b6548b6580983b122f1c9cb9 (patch)
tree45986e40dd7f9bfb78d8332b2016c0395594c6e5
parentd60a8a44cbc0efdf1f9194295e22769818ac2a3a (diff)
downloaddata-service-14de1667b16a4732b6548b6580983b122f1c9cb9.tar
data-service-14de1667b16a4732b6548b6580983b122f1c9cb9.tar.gz
Update exception handling for build events
-rw-r--r--guix-data-service/web/build-server/controller.scm52
1 files changed, 28 insertions, 24 deletions
diff --git a/guix-data-service/web/build-server/controller.scm b/guix-data-service/web/build-server/controller.scm
index 94c7e52..473cc61 100644
--- a/guix-data-service/web/build-server/controller.scm
+++ b/guix-data-service/web/build-server/controller.scm
@@ -277,8 +277,15 @@
(if (member provided-token
(map cdr permitted-tokens)
string=?)
- (catch
- 'json-invalid
+ (with-exception-handler
+ (lambda (exn)
+ (if (eq? (exception-kind exn) 'json-invalid)
+ (render-json
+ '((error . "could not parse body as JSON"))
+ #:code 400)
+ (render-json
+ '((error . "error"))
+ #:code 403)))
(lambda ()
(let ((body-string (utf8->string body)))
(let* ((body-json (json-string->scm body-string))
@@ -294,30 +301,27 @@
'((error . "no items to process"))
#:code 400))
(else
- (catch
- #t
+ (with-exception-handler
+ (lambda (exn)
+ (render-json
+ '((error . "could not process events"))
+ #:code 500))
(lambda ()
- (process-items items)
+ (with-exception-handler
+ (lambda (exn)
+ (print-backtrace-and-exception/knots exn)
+ (simple-format (current-error-port)
+ "error processing events: ~A\n"
+ exn)
+ (for-each (lambda (item)
+ (simple-format (current-error-port)
+ " ~A\n" item))
+ items))
+ (lambda ()
+ (process-items items)))
(no-content))
- (lambda (key . args)
- (simple-format (current-error-port)
- "error processing events: ~A: ~A\n"
- key
- args)
- (for-each (lambda (item)
- (simple-format (current-error-port)
- " ~A\n" item))
- items)
- (render-json
- '((error . "could not process events"))
- #:code 500))))))))
- (lambda (key . args)
- (render-json
- '((error . "could not parse body as JSON"))
- #:code 400)))
- (render-json
- '((error . "error"))
- #:code 403)))))))
+ #:unwind? #t))))))
+ #:unwind? #t)))))))
(define (handle-signing-key-request id)
(render-html