aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service/model/build-status.scm
blob: 09f862331a4ff0e310284b2c74c2cc143bf425a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
(define-module (guix-data-service model build-status)
  #:use-module (ice-9 match)
  #:use-module (squee)
  #:use-module (guix-data-service model utils)
  #:export (build-statuses
            build-status-strings
            select-build-statuses-by-build-id
            insert-build-status
            insert-build-statuses))

(define build-statuses
  '((-2 . "scheduled")
    (-1 . "started")
    (0 . "succeeded")
    (1 . "failed")
    (2 . "failed-dependency")
    (3 . "failed-other")
    (4 . "canceled")))

(define build-status-strings
  (map cdr build-statuses))

(define (select-build-statuses-by-build-id conn
                                           build-id
                                           build-server-id)
  (define query
    "
SELECT timestamp, status
FROM build_status
INNER JOIN builds ON builds.id = build_status.build_id
WHERE builds.build_server_id = $1 AND
      builds.id = $2")

  (exec-query conn query (list (number->string build-server-id)
                               (number->string build-id))))

(define (insert-build-status conn build-id timestamp status)
  (define query
    (string-append
     "
INSERT INTO build_status (build_id, timestamp, status)
VALUES ("
     (number->string build-id)
     ", "
     (string-append "to_timestamp("
                    (number->string timestamp)
                    ")")
     ", "
     (quote-string status)
     ")"))

  (exec-query conn query '()))

(define (insert-build-statuses conn build-ids data)
  (define query
    (string-append
     "
INSERT INTO build_status (build_id, timestamp, status)
VALUES "
     (string-join
      (map (match-lambda*
             (((timestamp status) build-id)
              (unless (member status build-status-strings)
                (throw
                 'invalid-status
                 status))

              (string-append
               "("
               (number->string build-id)
               ","
               (string-append "to_timestamp("
                              (number->string timestamp)
                              ")")
               ","
               (quote-string status)
               ")")))
           data
           build-ids)
      ", ")))

  (exec-query conn query '()))