guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[no subject]


From: Ludovic Courtès
Date: Wed, 23 Oct 2019 10:31:36 -0400 (EDT)

branch: master
commit c8c34f8ee3a62ab3d86a65bae2a4ddafd619088f
Author: Ludovic Courtès <address@hidden>
Date:   Wed Oct 23 15:37:15 2019 +0200

    http: Serve evaluation logs at /eval/ID/log/raw.
    
    * src/cuirass/base.scm (evaluation-log-file): Export.
    * src/cuirass/http.scm (url-handler)[respond-gzipped-file]: New
    procedure.
    Add handler for /eval/ID/log/raw.
---
 src/cuirass/base.scm |  2 ++
 src/cuirass/http.scm | 15 +++++++++++++++
 2 files changed, 17 insertions(+)

diff --git a/src/cuirass/base.scm b/src/cuirass/base.scm
index 3dbc5f4..c1e6383 100644
--- a/src/cuirass/base.scm
+++ b/src/cuirass/base.scm
@@ -63,6 +63,8 @@
             build-packages
             prepare-git
             process-specs
+            evaluation-log-file
+
             ;; Parameters.
             %package-cachedir
             %gc-root-directory
diff --git a/src/cuirass/http.scm b/src/cuirass/http.scm
index b6a4358..9f5fdce 100644
--- a/src/cuirass/http.scm
+++ b/src/cuirass/http.scm
@@ -24,6 +24,7 @@
 (define-module (cuirass http)
   #:use-module (cuirass config)
   #:use-module (cuirass database)
+  #:use-module ((cuirass base) #:select (evaluation-log-file))
   #:use-module (cuirass utils)
   #:use-module (cuirass logging)
   #:use-module (srfi srfi-1)
@@ -211,6 +212,14 @@ Hydra format."
                    #:body (call-with-input-file file-path get-bytevector-all))
           (respond-not-found file-name))))
 
+  (define (respond-gzipped-file file)
+    ;; Return FILE with 'gzip' content-encoding.
+    (respond `((content-type . (text/plain (charset . "UTF-8")))
+               (content-encoding . (gzip)))
+             ;; FIXME: FILE is potentially big so it'd be better to not load
+             ;; it in memory and instead 'sendfile' it.
+             #:body (call-with-input-file file get-bytevector-all)))
+
   (define (respond-build-not-found build-id)
     (respond-json-with-error
      404
@@ -438,6 +447,12 @@ Hydra format."
                   (#:link . ,(string-append "/eval/" id)))))))
            (respond-html-eval-not-found id))))
 
+    (("eval" (= string->number id) "log" "raw")
+     (let ((log (and id (evaluation-log-file id))))
+       (if (and log (file-exists? log))
+           (respond-gzipped-file log)
+           (respond-not-found (uri->string (request-uri request))))))
+
     (("search")
      (let* ((params (request-parameters request))
             (query (and=> (assq-ref params 'query) uri-decode))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]