2
0
Fork 0
mirror of git://git.savannah.gnu.org/guix/guix-cuirass.git synced 2023-12-14 06:03:04 +01:00
Commit graph

555 commits

Author SHA1 Message Date
Mathieu Othacehe
8d6c0dfb7e
metrics: Rename "Builds speed" section to "Builds completion".
* src/cuirass/templates.scm (global-metrics-content): Rename "Builds speed"
section to "Builds completion".
2020-09-17 11:53:03 +02:00
Mathieu Othacehe
d22ffdfa2a
metrics: Fix tests.
* tests/metrics.scm ("builds-per-day", "new-derivations-per-day"): Fix tests
results that were depending of the local time.
("evaluation-completion-speed"): Adapt to new unit.
2020-09-17 10:39:25 +02:00
Mathieu Othacehe
89f0dbc8e1
metrics: Add graph legends.
* src/cuirass/templates.scm (global-metrics-content): Add legends.
2020-09-17 10:30:49 +02:00
Mathieu Othacehe
24924bb600
templates: Do not display chart title.
* src/cuirass/templates.scm (make-line-chart): Do not display chart title.
2020-09-17 10:15:06 +02:00
Mathieu Othacehe
bd4f4d680a
metrics: Display more metrics.
* src/cuirass/http.scm (url-handler): Move metric page creation to ...
(metrics-page): ... this new procedure. Pass average evaluation build start
time and evaluation completion speed to "global-metrics-content".
* src/cuirass/templates.scm (make-line-chart): Add "time-x-axes?",
"xaxes-labels", "x-label" and "y-label" arguents.
(global-metrics-content): Add "avg-eval-build-start-time" and
"eval-completion-speed" arguments. Create and display two new charts from
those metrics.
2020-09-17 10:13:14 +02:00
Mathieu Othacehe
2470b216f1
metrics: Change evaluation-completion-speed unit.
* src/cuirass/metrics.scm (db-evaluation-completion-speed): Change the
completion speed unit to builds/hour.
(%metrics): Adapt comment.
2020-09-17 09:17:14 +02:00
Mathieu Othacehe
78de0da831
metrics: Add evaluation related metrics.
* src/cuirass/metrics.scm (db-average-build-start-time-per-eval,
db-average-build-complete-time-per-eval, db-evaluation-completion-speed,
db-latest-evaluations): New procedures.
(%metrics): Add 'average-eval-build-start-time,
'average-eval-build-complete-time, 'evaluation-completion-speed.
(db-update-metrics): Update evaluation related metrics for the evaluations
added the past three days.
* tests/metrics.scm ("average-eval-build-start-time",
"average-eval-build-complete-time", "evaluation-completion-speed"): Add new
tests.
2020-09-16 15:58:54 +02:00
Mathieu Othacehe
822dbb366d
Log metrics update duration.
* bin/cuirass.in (main): Log metrics update duration.
2020-09-16 15:58:14 +02:00
Mathieu Othacehe
8fc4794b30
tests: Improve metrics testing.
* tests/metrics.scm (nearest-exact-integer): Remove as unused.
("db-update-metrics"): Test that 'pending-builds metric is updated on
"db-update-metrics" call.
2020-09-15 17:52:18 +02:00
Mathieu Othacehe
7642748398
Add metrics testing.
* tests/metrics.scm: New file.
* Makefile.am (TESTS): Add it.
2020-09-15 17:40:05 +02:00
Mathieu Othacehe
f3ab04aee4
metrics: Add 'percentage-failed-eval-per-spec support.
* src/cuirass/metrics.scm (db-percentage-failed-eval-per-spec): New procedure.
(%metrics): Add 'percentage-failure-10-last-eval-per-spec,
'percentage-failure-100-last-eval-per-spec and
'percentage-failed-eval-per-spec metrics.
(db-update-metrics): Add them.
* src/cuirass/templates.scm (global-metrics-content): Add
"percentage-failed-eval" argument. Use it to display the "percentage of failed
evaluations" table.
* src/cuirass/templates.scm (url-handler): Adapt accordingly.
2020-09-15 14:34:19 +02:00
Mathieu Othacehe
ad3c603541
metrics: Fix db-average-eval-duration-per-spec.
* src/cuirass/metrics.scm (db-average-eval-duration-per-spec): Order results
by descending rowid and adjust docstring.
2020-09-15 14:30:00 +02:00
Mathieu Othacehe
c5a975867e
metrics: Warn about metric insertion.
* src/cuirass/metrics.scm: Add a warning about metric insertion in %metrics
list.
2020-09-15 11:22:02 +02:00
Mathieu Othacehe
97ec7a2da5
metrics: Add 'new-derivations-per-day support.
* src/cuirass/metrics.scm (db-new-derivations-previous-day): New procedure.
(%metrics): Add 'new-derivations-per-day.
(db-update-metrics): Add it.
* src/cuirass/templates.scm (make-line-chart): Add support for multiple
datasets. Also add "interpolation?" and "legend?" options.
(global-metrics-content): Add "new-derivations-per-day" argument. Adapt
"Builds per day" chart so that it uses two datasets from
'new-derivations-per-day and 'builds-per-day metrics.
* src/cuirass/templates.scm (url-handler): Adapt accordingly.
2020-09-15 11:13:09 +02:00
Mathieu Othacehe
d0a2235ec7
metrics: Change 'builds-per-day computation.
* src/cuirass/metrics.scm (db-builds-previous-day): Only take into account the
builds that are created and processed during the previous day.
2020-09-15 11:11:09 +02:00
Mathieu Othacehe
f011d87456
metrics: Add pending builds support.
* src/cuirass/metrics.scm (db-pending-builds, db-current-day-timestamp): New
procedures.
(%metrics): Add 'pending-builds.
(db-update-metrics): Add it.
* src/cuirass/templates.scm (global-metrics-content): Add "pending-builds"
argument. Display pending builds in a line chart.
* src/cuirass/http.scm (url-handler): Adapt "global-metrics-content" call
accordingly.
2020-09-15 09:55:40 +02:00
Mathieu Othacehe
21a9b2b386
Do not override onload callback.
* src/cuirass/templates.scm (make-line-chart): Do not override onload callback
as that would prevent us from adding multiple charts.
2020-09-15 09:49:40 +02:00
Mathieu Othacehe
5a947e1841
metrics: Rename 'builds-previous-day to 'builds-per-day.
* src/cuirass/metrics.scm (%metrics): Rename 'builds-previous-day to
'builds-per-day.
(db-update-metrics): Adapt accordingly.
* src/cuirass/http.scm (url-handler): Ditto.
2020-09-15 09:47:04 +02:00
Mathieu Othacehe
cd2d2512e6
metrics: Order by descending rowid by default.
* src/cuirass/metrics.scm (db-get-metrics-with-id): Order by descending rowid
by default.
* src/cuirass/http.scm (url-handler): Use the default order for
"db-get-metrics-with-id".
2020-09-15 09:16:11 +02:00
Mathieu Othacehe
cf11b73db0
Add metrics support.
* Makefile.am: Add "upgrade-11.sql", "chart.js" and "metrics.js".
* bin/cuirass.in (main): Add 'metrics fiber.
* src/cuirass/http.scm (%file-white-list): Add "js/chart.js".
(url-handler): Add "/metrics" route.
* src/cuirass/metrics.scm: New file.
* src/cuirass/templates.scm (html-page): Add a "Global metrics" sub-menu to
"Status" dropdown menu.
(make-line-chart, global-metrics-content): New procedures.
* src/schema.sql (Metrics): New table.
* src/sql/upgrade-11.sql: New file.
* src/static/js/chart.js: New file.
2020-09-14 14:32:12 +02:00
Mathieu Othacehe
43ed85479f
database: Export procedures.
* src/cuirass/database.scm (last-insert-rowid, expect-one-row, %sqlite-exec):
Export them.
2020-09-14 14:32:07 +02:00
Mathieu Othacehe
713a914e18
Add missing SQL upgrade files.
* Makefile.am (dist_sql_DATA): Add upgrade-9.sql and upgrade-10.sql.
2020-09-10 16:59:04 +02:00
Mathieu Othacehe
00c7b4bb44
tests: Fix HTTP tests.
This is a follow-up of 154232bc76.

* tests/http.scm (evaluations-query-result): Add 'timestamp', 'checkouttime'
and 'evaltime' fields.
(fill-db): Pass a matching timestamp to "db-add-evaluation" calls.
2020-09-10 15:16:16 +02:00
Mathieu Othacehe
f5b0d39328
Add a status field to Evaluation table.
The Evaluation table currently has an 'in_progress' field. Distinction between
succeeded and failed evaluations are based on the presence of Builds records
for the evaluation. It it also not possible to distinguish aborted evaluations
from failed evaluations.

Rename 'in_progress' field to 'status'. The 'status' field can be equal to
'started', 'succeeded', 'failed' or 'aborted'.

* src/cuirass/database.scm (evaluation-status): New exported enumeration.
(db-set-evaluations-done, db-set-evaluation-done): Remove them.
(db-abort-pending-evaluations, db-set-evaluation-status): New exported procedures.
(db-add-evaluation, db-get-builds, db-get-evaluations,
db-get-evaluations-build-summary, db-get-evaluation-summary): Adapt to use
'status' field instead of 'in_progress' field.
* src/cuirass/templates.scm (evaluation-badges): Ditto.
* src/schema.sql (Evaluations): Rename 'in_progress' field to 'status'.
* src/sql/upgrade-10.sql: New file.
* bin/cuirass.in (main): Use "db-abort-pending-evaluations" instead of
"db-set-evaluations-done".
* src/cuirass/base.scm (evaluate): Use "db-set-evaluation-status" instead of
"db-set-evaluations-done".
(build-packages): Use "db-set-evaluation-status" instead of
"db-set-evaluation-done".
* tests/database.scm (sqlite-exec): Adapt accordingly.
* tests/http.scm (evaluations-query-result): Ditto.
2020-09-10 15:16:15 +02:00
Mathieu Othacehe
af12a80599
Do not use commit time as checkout timestamp.
Commit time can be far away from the actual push time. Thus, use the checkout
time instead of the commit time to fill Checkouts 'timestamp' field.

* src/cuirass/base.scm (fetch-input): Return the checkout time instead of the
commit time.
2020-09-07 15:53:19 +02:00
Mathieu Othacehe
33798abc3b
Handle evaluations without timestamp.
This is a follow-up of d9879583af.

* src/cuirass/templates.scm (evaluation-build-table): Do not print evaluation
date if the "timestamp" field equals zero.
2020-09-06 14:42:40 +02:00
Mathieu Othacehe
d9879583af
Display evaluation date and duration.
src/cuirass/database.scm (db-get-evaluations): Add support for "timestamp",
"checkouttime" and "evaltime" fields,
(db-get-evaluation-summary): ditto.
src/cuirass/templates.scm (nearest-exact-integer, seconds->string): New
procedures,
(evaluation-build-table): print evaluation date and duration.
2020-09-06 14:23:01 +02:00
Mathieu Othacehe
154232bc76
Save evaluations and checkouts timestamps.
src/cuirass/base.scm (fetch-input): Add the commit timestamp to the returned
association list,
(process-specs): Pass a timestamp taken at procedure start and another one
taken after inputs are fetched to "db-add-evaluation" procedure. Once the
evaluation is over, call "db-set-evaluation-time" to save the evaluation
completion time.
src/cuirass/database.scm (db-set-evaluation-time): New procedure,
(db-add-checkout): Handle the "timestamp" field,
(db-add-evaluation): add "checkouttime" and "evaltime" arguments. Modify the
associated SQL query accordingly.
(db-get-builds): Use "Builds.timestamp" instead of "timestamp" as this field
is also part of the Evaluations table.
src/schema.sql (Checkouts): Add "timestamp" field,
(Evaluations): add "timestamp", "checkouttime" and "evaltime" fields.
src/sql/upgrade-9.sql: New file.
tests/database.scm (sqlite-exec): Adapt Evaluations table insertions to include
"timestamp", "checkouttime" and "evaltime" required fields.
2020-09-06 13:03:08 +02:00
Mathieu Othacehe
b135a02bf2
Fix /specifications route.
Fixes <https://issues.guix.gnu.org/43163>.

* src/cuirass/http.scm (specification->json-object): New procedure,
(url-handler): use it for "/specifications" route to convert specification
objects into a representation suitable for json->scm.
* tests/http.scm ("/specifications"): Test the above route.
2020-09-02 10:43:22 +02:00
Mathieu Othacehe
83ac1a84f5
Check for Guile-zlib during configure.
* configure.ac: Add Guile-zlib dependency.
2020-08-25 16:46:20 +02:00
Mathieu Othacehe
f2984c7230
Use Guile-zlib package.
* README (Requirements): Add Guile-zlib.
* build-aux/guix.scm: Ditto.
* src/cuirass/base.scm: Use Guile-zlib instead of (guix zlib).
2020-08-25 16:33:09 +02:00
Mathieu Othacehe
1bcccbab76
web: server: Remove with-ignored-disconnects.
Use the pre-unwind-handler of a catch clause instead of nesting
with-throw-handler inside a catch clause.

* src/web/server/fiberized.scm (with-ignored-disconnects): Remove it,
(client-loop): replace "with-ignored-disconnects" with a catch clause.
2020-08-04 18:14:51 +02:00
Mathieu Othacehe
0abf19203f
web: server: Ignore all client disconnects.
EPIPE and ECONNRESET errors are already ignored when thrown by "sendfile" and
"put-bytevector" procedures. It turns out "peek-char" can also cause such
errors. So ignore such errors within the whole procedure.

* src/web/server/fiberized.scm (client-loop): Wrap the whole procedure inside
"with-ignored-disconnects" instead of wrapping individually "sendfile" and
"put-bytevector" calls.
2020-08-04 16:05:56 +02:00
Mathieu Othacehe
d250a95c46
http: Fix typo in request-parameters.
This is a follow-up of 2094d68053.

* src/cuirass/http.scm (request-parameters): Fix typo.
2020-08-03 15:36:03 +02:00
Mathieu Othacehe
2094d68053
http: Handle request parameters with no value.
Handle requests such as "/build/?nr" by ignoring parameters without any
associated value.

* src/cuirass/http.scm (request-parameters): Ignore silently parameters
without an associated value.
* tests/http.scm: Add a corresponding test case.
2020-08-03 15:27:00 +02:00
Mathieu Othacehe
410d386ea8
tests: http: Add some erroneous routes.
* tests/http.scm: Add new test cases covering some erroneous routes.
2020-08-03 14:48:45 +02:00
Mathieu Othacehe
d3329551fe
http: Fix string concatenation.
This is a follow-up of 614ea05767.

* src/cuirass/http.scm (url-handler): Fix string concatenation.
2020-08-02 19:18:25 +02:00
Mathieu Othacehe
614ea05767
http: Rationalize build id conversion.
* src/cuirass/http.scm (url-handler): Handle the id -> number conversion
directly in the route declaration.
2020-08-02 18:39:35 +02:00
Mathieu Othacehe
59c974134f
http: Handle wrong build number on log route.
* src/cuirass/http.scm (url-handler): Handle erroneous id -> number conversion
on "/build/id/log/raw" route.
2020-08-02 18:34:19 +02:00
Mathieu Othacehe
ce89a40ed8
http: Handle wrong build number on details route.
The request "/build/2465370mdb%22fx'ggx/details" causes a select query on the
whole Builds table, because failed "string->number" conversion is not handled.

* src/cuirass/http.scm (url-handler): Handle erroneous id -> number conversion
on "/build/id/details" route.
2020-08-02 18:30:37 +02:00
Mathieu Othacehe
769682924c
http: Handle wrong build number.
The request "/build/1234)" causes a select query on the whole Builds table,
because failed "string->number" conversion is not handled.

* src/cuirass/http.scm (url-handler): Handle erroneous id -> number conversion
on "/build/id" route.
2020-08-02 15:50:59 +02:00
Mathieu Othacehe
153b49c952
database: Warn if the worker is busy for more than 5 seconds.
* src/cuirass/utils.scm (with-operation, get-message-with-timeout): New
procedures,
(call-with-worker-thread): add timeout and timeout-proc arguments.
* src/cuirass/database.scm (with-db-worker-thread): Pass a 5 seconds timeout
to call-with-worker-thread, and print a debug message on timeout expiration.
2020-08-01 13:18:38 +02:00
Mathieu Othacehe
1dbd1b592e
web: Ignore errors within put-bytevector.
* src/web/server/fiberized.scm (with-ignored-disconnects): New macro
factorizing the catch clause ignoring client disconnection related errors. Use
it for both "sendfiles" and "put-bytevector" procedures.
2020-07-31 10:52:38 +02:00
Mathieu Othacehe
a24bed0b1f
web: Add monitoring fiber.
* bin/cuirass.in (main): Add monitoring fiber in web mode.
2020-07-31 10:42:44 +02:00
Mathieu Othacehe
0955a11abd
web: server: Handle client disconnection.
* src/web/server/fiberized.scm (client-loop): Catch EPIPE and ECONNRESET
errors than can be thrown if the client disconnects prematurely.
2020-07-29 19:36:51 +02:00
Mathieu Othacehe
6ad9c60269
utils: Do not block the calling fiber.
Setting current-fiber to #f in %non-blocking will prevent put-message in the
new thread to try suspending itself, but will also cause the same behavior on
get-message, which is not desired.

* src/cuirass/utils.scm (%non-blocking): Reduce the scope of current-fiber
parameter to the newly created thread.
2020-07-29 19:36:45 +02:00
Mathieu Othacehe
e41327350d
http: Handle error on /download.
* src/cuirass/http.scm (url-handler): Handle the error case on /download
route.
2020-07-28 18:14:08 +02:00
Mathieu Othacehe
f71f026a41
templates: Handle missing input case.
It happens that some left-over checkout entries refer to removed inputs. In
that case, input will be #f, causing commit-hyperlink to fail with the
following error message:

In cuirass/http.scm:
   475:25  9 (url-handler _ _)
    193:3  8 (evaluation-html-page ((#:id . 5103) (# . 0) (# . 39) ?) ?)
In cuirass/templates.scm:
   612:14  7 (evaluation-build-table _ #:checkouts _ #:inputs _ # _ # ?)
In srfi/srfi-1.scm:
   586:17  6 (map1 (((#:commit . "3a3e9f2bb586e79a7931163f0191d?") ?)))
In cuirass/templates.scm:
   621:39  5 (_ _)
   584:15  4 (commit-hyperlink #f "3a3e9f2bb586e79a7931163f0191df615?")
In web/uri.scm:
   308:23  3 (string->uri _)
   278:14  2 (string->uri-reference _)
In unknown file:
           1 (regexp-exec #<regexp 7f3a76c05980> #f #<undefined> #<u?>)
In ice-9/boot-9.scm:
  1669:16  0 (raise-exception _ #:continuable? _)
In procedure regexp-exec: Wrong type argument in position 2 (expecting string): #f

* src/cuirass/templates.scm (evaluation-build-table): Do not call
"commit-hyperlink" if the matching input could not be found.
2020-07-26 17:28:03 +02:00
Mathieu Othacehe
17395e85d2
Fix spec reading when restarting builds.
When "spawn-builds" is called to restart builds, the spec is not known,
preventing build products from being created as reported here:

https://issues.guix.gnu.org/42523

Fix this issue by reading the specification in database in
"set-build-successful!" procedure.

* src/cuirass/database.scm (db-get-specification): New exported procedure,
(db-get-specifications): add an optional name argument.
* tests/database.scm (db-get-specification): Add a corresponding test-case.
* src/cuirass/base.scm (set-build-successful!): Remove spec argument and read
it directly from database instead,
(update-build-statuses!): also remove spec argument, adapt
set-build-successful! call accordingly,
(spawn-builds): remove spec argument and adapt handle-build-event and
update-build-statuses! calls accordingly,
(handle-build-event): remove spec argument, adapt
set-build-successful! call accordingly,
(build-packages): remove spec argument, adapt spawn-builds call accordingly,
(process-specs): adapt build-packages call.
2020-07-25 14:22:20 +02:00
Mathieu Othacehe
d11ce40a10
navbar: Fix typo.
* src/cuirass/templates.scm (html-page): Turn "Latest builds" into "Running
builds".
2020-07-03 08:36:27 +02:00