aboutsummaryrefslogtreecommitdiff
path: root/guix-qa-frontpage/mumi.scm
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2023-06-01 11:29:11 +0100
committerChristopher Baines <mail@cbaines.net>2023-06-01 11:29:11 +0100
commit27b761a1ca7c3e68c6d31a2260dff12fbad5f49f (patch)
tree8c4e4f1c74f081f516ae35b636d3050b997ee748 /guix-qa-frontpage/mumi.scm
parentacffb47ffdb10e3c74e48a76db76efe1bc3c0909 (diff)
downloadqa-frontpage-27b761a1ca7c3e68c6d31a2260dff12fbad5f49f.tar
qa-frontpage-27b761a1ca7c3e68c6d31a2260dff12fbad5f49f.tar.gz
Use a single connection for mumi-bulk-issues
As this might upset the MDC firewall less.
Diffstat (limited to 'guix-qa-frontpage/mumi.scm')
-rw-r--r--guix-qa-frontpage/mumi.scm97
1 files changed, 69 insertions, 28 deletions
diff --git a/guix-qa-frontpage/mumi.scm b/guix-qa-frontpage/mumi.scm
index a1f5326..9960cab 100644
--- a/guix-qa-frontpage/mumi.scm
+++ b/guix-qa-frontpage/mumi.scm
@@ -19,8 +19,12 @@
(define-module (guix-qa-frontpage mumi)
#:use-module (srfi srfi-1)
#:use-module (ice-9 match)
+ #:use-module (json)
#:use-module (kolam http)
- #:use-module ((guix-data-service utils) #:select (chunk-for-each!))
+ #:use-module (kolam parse)
+ #:use-module (web uri)
+ #:use-module (web client)
+ #:use-module ((guix-data-service utils) #:select (chunk!))
#:use-module ((guix-build-coordinator utils)
#:select (retry-on-error))
#:export (mumi-search-issues
@@ -31,6 +35,32 @@
mumi-bulk-issues))
+(define* (graphql-http-get*
+ uri document
+ #:key (verify-certificate? #t)
+ (port (open-socket-for-uri
+ uri
+ #:verify-certificate? verify-certificate?))
+ (keep-alive? #f)
+ (variables '()))
+ (call-with-values
+ (lambda ()
+ (http-get
+ (string-append uri
+ "?query="
+ (uri-encode (scm->graphql-string document))
+ "&"
+ "variables="
+ (uri-encode (scm->json-string
+ ((@@ (kolam http) variables->alist)
+ variables))))
+ #:streaming? #t
+ #:keep-alive? keep-alive?
+ #:verify-certificate? verify-certificate?
+ #:port port))
+ (@@ (kolam http) graphql-http-response)))
+
+
(define (mumi-search-issues query)
(with-exception-handler
(lambda (exn)
@@ -61,37 +91,48 @@
"open")))
(define (mumi-bulk-issues numbers)
+ (define url
+ "https://issues.guix.gnu.org/graphql")
+
(let ((number-to-data
(make-hash-table)))
- (chunk-for-each!
- (lambda (chunk)
- (let ((response
- (retry-on-error
- (lambda ()
- (graphql-http-get
- "https://issues.guix.gnu.org/graphql"
- `(document
- ,@(map (lambda (number)
- `(query (#(issue #:number ,number)
- number title open severity tags)))
- chunk))))
- #:times 3
- #:delay 0)))
+ (let loop ((chunks (chunk! (list-copy numbers)
+ 30))
+ (port
+ (open-socket-for-uri
+ (string->uri url)
+ #:verify-certificate? #t)))
+ (if (null? chunks)
+ (close-port port)
+ (let ((response
+ (retry-on-error
+ (lambda ()
+ (graphql-http-get*
+ url
+ `(document
+ ,@(map (lambda (number)
+ `(query (#(issue #:number ,number)
+ number title open severity tags)))
+ (car chunks)))
+ #:keep-alive? #t
+ #:port port))
+ #:times 3
+ #:delay 0)))
+
+ (for-each
+ (lambda (res)
+ (let ((data (cdr res)))
+ (hash-set! number-to-data
+ (assoc-ref data "number")
+ `((title . ,(assoc-ref data "title"))
+ (open? . ,(assoc-ref data "open"))
+ (tags . ,(vector->list
+ (assoc-ref data "tags")))
+ (severity . ,(assoc-ref data "severity"))))))
+ response)
- (for-each
- (lambda (res)
- (let ((data (cdr res)))
- (hash-set! number-to-data
- (assoc-ref data "number")
- `((title . ,(assoc-ref data "title"))
- (open? . ,(assoc-ref data "open"))
- (tags . ,(vector->list
- (assoc-ref data "tags")))
- (severity . ,(assoc-ref data "severity"))))))
- response)))
- 30
- (list-copy numbers))
+ (loop (cdr chunks) port))))
(map (lambda (number)
(hash-ref number-to-data number))