From 9588e4d4a7c7eed0b3d3729d68f3c8c687c1434e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Sun, 7 Jan 2018 12:28:13 +0100 Subject: http: /build/N/log/raw redirects to /log. This moves log handling responsibility to 'guix publish'. * src/cuirass/http.scm (handle-log-request): Remove. (url-handler): Change /log/raw URI handler to return 302 to /log/OUTPUT. * tests/http.scm (log-file-name): Remove, and remove code to create and delete it. ("fill-db"): Change #:log value. ("/build/1/log/raw"): Expect 302. --- src/cuirass/http.scm | 36 +++++++++++++----------------------- 1 file changed, 13 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/cuirass/http.scm b/src/cuirass/http.scm index 7434429..83ab294 100644 --- a/src/cuirass/http.scm +++ b/src/cuirass/http.scm @@ -1,6 +1,7 @@ ;;;; http.scm -- HTTP API ;;; Copyright © 2016 Mathieu Lirzin ;;; Copyright © 2017 Mathieu Othacehe +;;; Copyright © 2018 Ludovic Courtès ;;; ;;; This file is part of Cuirass. ;;; @@ -20,11 +21,7 @@ (define-module (cuirass http) #:use-module (cuirass database) #:use-module (cuirass utils) - #:use-module (guix config) - #:use-module (guix build utils) - #:use-module (guix utils) #:use-module (ice-9 match) - #:use-module (ice-9 popen) #:use-module (json) #:use-module (web request) #:use-module (web response) @@ -66,21 +63,6 @@ (let ((builds (db-get-builds db filters))) (map build->hydra-build builds))) -(define (handle-log-request db build) - "Retrieve the log file of BUILD. Return a lambda which PORT argument is an - input port from which the content of the log file can be read or #f if the - log file is not readable." - (let* ((log (assq-ref build #:log)) - (access (and (string? log) - (access? log R_OK)))) - (and access - (lambda (out-port) - (let ((in-pipe-port - (open-input-pipe - (format #f "~a -dc ~a" %bzip2 log)))) - (dump-port in-pipe-port out-port) - (close-pipe in-pipe-port)))))) - (define (request-parameters request) "Parse the REQUEST query parameters and return them under the form '((parameter value) ...)." @@ -148,10 +130,18 @@ (("build" build-id "log" "raw") (let ((build (db-get-build db build-id))) (if build - (let ((log-response (handle-log-request db build))) - (if log-response - (respond-text log-response) - (respond-build-log-not-found build))) + (match (assq-ref build #:outputs) + (((_ (#:path . (? string? output))) _ ...) + ;; Redirect to a /log URL, which is assumed to be served + ;; by 'guix publish'. + (let ((uri (string->uri-reference + (string-append "/log/" + (basename output))))) + (respond (build-response #:code 302 + #:headers `((location . ,uri))) + #:body ""))) + (#f + (respond-build-not-found build-id))) (respond-build-not-found build-id)))) (("api" "latestbuilds") (let* ((params (request-parameters request)) -- cgit v1.2.3