aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAge
...
* metrics: Add evaluation related metrics.Mathieu Othacehe2020-09-16
| | | | | | | | | | | | | * 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.
* Log metrics update duration.Mathieu Othacehe2020-09-16
| | | | * bin/cuirass.in (main): Log metrics update duration.
* tests: Improve metrics testing.Mathieu Othacehe2020-09-15
| | | | | | * tests/metrics.scm (nearest-exact-integer): Remove as unused. ("db-update-metrics"): Test that 'pending-builds metric is updated on "db-update-metrics" call.
* Add metrics testing.Mathieu Othacehe2020-09-15
| | | | | * tests/metrics.scm: New file. * Makefile.am (TESTS): Add it.
* metrics: Add 'percentage-failed-eval-per-spec support.Mathieu Othacehe2020-09-15
| | | | | | | | | | | | * 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.
* metrics: Fix db-average-eval-duration-per-spec.Mathieu Othacehe2020-09-15
| | | | | * src/cuirass/metrics.scm (db-average-eval-duration-per-spec): Order results by descending rowid and adjust docstring.
* metrics: Warn about metric insertion.Mathieu Othacehe2020-09-15
| | | | | * src/cuirass/metrics.scm: Add a warning about metric insertion in %metrics list.
* metrics: Add 'new-derivations-per-day support.Mathieu Othacehe2020-09-15
| | | | | | | | | | | | * 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.
* metrics: Change 'builds-per-day computation.Mathieu Othacehe2020-09-15
| | | | | * src/cuirass/metrics.scm (db-builds-previous-day): Only take into account the builds that are created and processed during the previous day.
* metrics: Add pending builds support.Mathieu Othacehe2020-09-15
| | | | | | | | | | | * 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.
* Do not override onload callback.Mathieu Othacehe2020-09-15
| | | | | * src/cuirass/templates.scm (make-line-chart): Do not override onload callback as that would prevent us from adding multiple charts.
* metrics: Rename 'builds-previous-day to 'builds-per-day.Mathieu Othacehe2020-09-15
| | | | | | | * 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.
* metrics: Order by descending rowid by default.Mathieu Othacehe2020-09-15
| | | | | | | * 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".
* Add metrics support.Mathieu Othacehe2020-09-14
| | | | | | | | | | | | | | * 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.
* database: Export procedures.Mathieu Othacehe2020-09-14
| | | | | * src/cuirass/database.scm (last-insert-rowid, expect-one-row, %sqlite-exec): Export them.
* Add missing SQL upgrade files.Mathieu Othacehe2020-09-10
| | | | * Makefile.am (dist_sql_DATA): Add upgrade-9.sql and upgrade-10.sql.
* tests: Fix HTTP tests.Mathieu Othacehe2020-09-10
| | | | | | | | This is a follow-up of 154232bc767d002f69aa6bb1cdddfd108b98584b. * tests/http.scm (evaluations-query-result): Add 'timestamp', 'checkouttime' and 'evaltime' fields. (fill-db): Pass a matching timestamp to "db-add-evaluation" calls.
* Add a status field to Evaluation table.Mathieu Othacehe2020-09-10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Do not use commit time as checkout timestamp.Mathieu Othacehe2020-09-07
| | | | | | | | 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.
* Handle evaluations without timestamp.Mathieu Othacehe2020-09-06
| | | | | | | This is a follow-up of d9879583afee201cb9a2fec6d5fd3a491247d475. * src/cuirass/templates.scm (evaluation-build-table): Do not print evaluation date if the "timestamp" field equals zero.
* Display evaluation date and duration.Mathieu Othacehe2020-09-06
| | | | | | | | | 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.
* Save evaluations and checkouts timestamps.Mathieu Othacehe2020-09-06
| | | | | | | | | | | | | | | | | | | | 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.
* Fix /specifications route.Mathieu Othacehe2020-09-02
| | | | | | | | | 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.
* Check for Guile-zlib during configure.Mathieu Othacehe2020-08-25
| | | | * configure.ac: Add Guile-zlib dependency.
* Use Guile-zlib package.Mathieu Othacehe2020-08-25
| | | | | | * README (Requirements): Add Guile-zlib. * build-aux/guix.scm: Ditto. * src/cuirass/base.scm: Use Guile-zlib instead of (guix zlib).
* web: server: Remove with-ignored-disconnects.Mathieu Othacehe2020-08-04
| | | | | | | | 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.
* web: server: Ignore all client disconnects.Mathieu Othacehe2020-08-04
| | | | | | | | | | 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.
* http: Fix typo in request-parameters.Mathieu Othacehe2020-08-03
| | | | | | This is a follow-up of 2094d68053f606996b2f30a62a2ae4af06851ab6. * src/cuirass/http.scm (request-parameters): Fix typo.
* http: Handle request parameters with no value.Mathieu Othacehe2020-08-03
| | | | | | | | | 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.
* tests: http: Add some erroneous routes.Mathieu Othacehe2020-08-03
| | | | * tests/http.scm: Add new test cases covering some erroneous routes.
* http: Fix string concatenation.Mathieu Othacehe2020-08-02
| | | | | | This is a follow-up of 614ea0576743e7ab83a7b4f82b48f272a67ebbf7. * src/cuirass/http.scm (url-handler): Fix string concatenation.
* http: Rationalize build id conversion.Mathieu Othacehe2020-08-02
| | | | | * src/cuirass/http.scm (url-handler): Handle the id -> number conversion directly in the route declaration.
* http: Handle wrong build number on log route.Mathieu Othacehe2020-08-02
| | | | | * src/cuirass/http.scm (url-handler): Handle erroneous id -> number conversion on "/build/id/log/raw" route.
* http: Handle wrong build number on details route.Mathieu Othacehe2020-08-02
| | | | | | | | 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.
* http: Handle wrong build number.Mathieu Othacehe2020-08-02
| | | | | | | | 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.
* database: Warn if the worker is busy for more than 5 seconds.Mathieu Othacehe2020-08-01
| | | | | | | | * 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.
* web: Ignore errors within put-bytevector.Mathieu Othacehe2020-07-31
| | | | | | * 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.
* web: Add monitoring fiber.Mathieu Othacehe2020-07-31
| | | | * bin/cuirass.in (main): Add monitoring fiber in web mode.
* web: server: Handle client disconnection.Mathieu Othacehe2020-07-29
| | | | | * src/web/server/fiberized.scm (client-loop): Catch EPIPE and ECONNRESET errors than can be thrown if the client disconnects prematurely.
* utils: Do not block the calling fiber.Mathieu Othacehe2020-07-29
| | | | | | | | | 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.
* http: Handle error on /download.Mathieu Othacehe2020-07-28
| | | | | * src/cuirass/http.scm (url-handler): Handle the error case on /download route.
* templates: Handle missing input case.Mathieu Othacehe2020-07-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* Fix spec reading when restarting builds.Mathieu Othacehe2020-07-25
| | | | | | | | | | | | | | | | | | | | | | | | 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.
* navbar: Fix typo.Mathieu Othacehe2020-07-03
| | | | | * src/cuirass/templates.scm (html-page): Turn "Latest builds" into "Running builds".
* Add "latest builds" support.Mathieu Othacehe2020-07-02
| | | | | | | | | | | | | Add a "status" dropdown menu in the navigation bar. For now this menu only contains one item, a link to the "latest builds" page at "/status" location. * src/cuirass/database.scm (db-get-builds): Add support for 'started status. * src/cuirass/http.scm (url-handler): Add "/status" route. * src/cuirass/templates.scm (running-builds-table): New procedure, (html-page): add a dropdown menu containing one item, a link to "/status" route defined above. * src/static/css/cuirass.css: Add new class to allow bootstrap dropdown menus to work without javascript plugin.
* Add debug log.Mathieu Othacehe2020-06-30
| | | | * src/cuirass/base.scm (create-build-outputs): Add a debug message.
* database: Ignore BuildProducts duplicates.Mathieu Othacehe2020-06-30
| | | | | | Ignore errors when trying to insert an already existing build product. * src/cuirass/database.scm (db-add-build-product): Ignore insertion errors.
* Factorize build products creation.Mathieu Othacehe2020-06-29
| | | | | | | | | | | | Make sure that build products are also created when a batch of derivations finishes, and not only when single build success events are received. Factorize build status update to success and build products creation into a single procedure. * src/cuirass/base.scm (set-build-successful!): New procedure, (update-build-statuses!): call it here, (handle-build-event): and here.
* Check for derivation before creating build products.Mathieu Othacehe2020-06-26
| | | | | | | | | It happens that we receive build succeeded notifications for derivations that are not stored in the Builds table. In that case, do not try to create build products. * src/cuirass/base.scm (handle-build-event): Check if the derivation is registered in the Builds table.
* http: Display gzipped log files in the browser.Mathieu Othacehe2020-06-23
| | | | | | | | | This is a follow-up of 2280ae18eb25aa7034636c58bf288c9bd5a8fa3b. The gzipped log files are supposed to be displayed directly in the browser and not downloaded. Set "Content-Disposition" header to "inline" to ensure that. * src/cuirass/http.scm (respond-gzipped-file): Set to "Content-Disposition" to "inline".