This project is mirrored from https://git.savannah.gnu.org/git/guix/guix-cuirass.git/.
Pull mirroring updated .
- Oct 03, 2020
-
-
Mathieu Othacehe authored
* src/cuirass/base.scm (build-packages): Improve the logging message.
-
Mathieu Othacehe authored
* src/cuirass/base.scm (build-packages): Print the id of the registered evaluation.
-
Mathieu Othacehe authored
* src/cuirass/database.scm (with-db-worker-thread): Print the caller name.
-
Mathieu Othacehe authored
* src/cuirass/logging.scm (log-query): Add date.
-
- Oct 02, 2020
-
-
Mathieu Othacehe authored
* src/cuirass/database.scm (db-register-builds): Remove store argument and assume that 'log and 'outputs properties are provided by the evaluation. * src/cuirass/base.scm (build-packages): Adapt accordingly.
-
Mathieu Othacehe authored
Evaluation registration involves running a large number of SQL queries. This can cause some database worker starvation as well as some contention. To avoid this issue, spawn database workers dedicated to evaluation registration. * src/cuirass/database.scm (%db-registration-channel): New variable. (with-db-registration-worker-thread, with-registration-workers): New macros. (with-db-worker-thread-no-timeout): Remove it. (db-register-builds): Run registration in dedicated database workers using "with-db-registration-worker-thread" macro. * bin/cuirass.in (main): Spawn database registration workers by calling "with-registration-workers" macro.
-
- Oct 01, 2020
-
-
Mathieu Othacehe authored
Make sure that all registration queries are done from within a single database worker. Otherwise, when builds from multiple evaluations are registered at the same time, some contention occurs communicating with workers. * src/cuirass/base.scm (new-outputs?, build-packages): Move build registration to ... * src/cuirass/database.scm (db-register-builds): ... this new procedure. (with-db-worker-thread-no-timeout): New procedure. Use it in "db-register-builds" to avoid timeout messages.
-
Mathieu Othacehe authored
* src/cuirass/base.scm (evaluate): Expect 'nix-name and 'system properties to be provided by the evaluation. (build-packages): Use the eval-id provided as argument.
-
- Sep 29, 2020
-
-
Mathieu Othacehe authored
Avoid full Builds table scans. * src/cuirass/metrics.scm (db-average-build-start-time-per-eval, db-average-build-complete-time-per-eval, db-evaluation-completion-speed): Rewrite query to avoid full Builds table scans.
-
Mathieu Othacehe authored
* src/cuirass/watchdog.scm: New file. * Makefile.am (dist_pkgmodule_DATA): Add it. * src/cuirass/utils.scm (with-timeout, get-message-with-timeout): Export them. * bin/cuirass.in (main): Start the watchdog.
-
- Sep 28, 2020
-
-
Mathieu Othacehe authored
Avoid full scans of Builds table that can be very time consuming by rewriting some queries and using new indexes. * src/sql/upgrade-12.sql: New file. * Makefile.am (dist_sql_DATA): Add it. * src/schema.sql (Builds_evaluation_index, Evaluations_status_index, Evaluations_specification_index): New indexes. * src/cuirass/database.scm (db-get-evaluations-build-summary, db-get-evaluation-summary): Rewrite queries to avoid full Builds table scan and use the new indexes.
-
Mathieu Othacehe authored
Once the evaluation is over, the new builds are registered. This registration tries to insert a new build for each derivation returned by the evaluation phase. If the new build does not add a new output, the insertion query is then rollbacked. This means that there are at least as many insertion queries as new derivations. SQlite allows at most one writer at a time, and even though we are using WAL mode, performing a lot of insertions will reduce the reading perforances. When multiple evaluations are performed in parallel, the large number of concurrent insertion queries also causes contention. To avoid those issues, check first in the "Outputs" table which derivations are already registered. This means that most of the insertion queries will be replaced by reading queries, that are much less expensive and more suitable for Cuirass concurrent implementation. * src/cuirass/base.scm (new-outputs?): New procedure. (build-packages): Use it to insert only builds registering new outputs.
-
- Sep 24, 2020
-
-
Mathieu Othacehe authored
On fresh Guix System installations, Cuirass will not be allowd to create its own profile directory. Instead this should be take care of by guix-daemon when Cuirass will initiate its first connection to it. * bin/cuirass.in (main): Do not raise an exception on gcroot directory creation failure.
-
Mathieu Othacehe authored
* bin/cuirass.in (show-help): Document "--log-queries" option. (%options): Add it. (main): Enable query logging if the above option is set. * src/cuirass/database.scm (db-log-queries): New procedure. * src/cuirass/logging.scm (query-logging-port): New parameter. (log-query): New procedure.
-
- Sep 18, 2020
-
-
Mathieu Othacehe authored
If a derivation is GC'd just before calling "spawn-builds", "build-derivations: will throw an exception that will be catched. Then, "update-build-statuses!" will call "derivation-path->output-paths" that will throw another exception because the derivation does not exit. This exception is not handled, causing Cuirass to crash. 2020-09-18T10:41:18 batch of builds (partially) failed: build of `/gnu/store/zrmxzjf025nc89a7vdy5i94zavprc7fs-emacs-guix-0.5.2-2.58a840d.drv' failed (status: 1) Backtrace: In ice-9/boot-9.scm: 1736:10 11 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _) In unknown file: 10 (apply-smob/0 #<thunk 7ffff5cbd4a0>) In ice-9/boot-9.scm: 718:2 9 (call-with-prompt _ _ #<procedure default-prompt-handler (k proc)>) In ice-9/eval.scm: 619:8 8 (_ #(#(#<directory (guile-user) 7ffff58f8f00>))) In ice-9/boot-9.scm: 2806:4 7 (save-module-excursion _) 4351:12 6 (_) In cuirass/base.scm: 562:10 5 (spawn-builds #<store-connection 256.99 7fffec03f910> _ #:max-batch-size _) In srfi/srfi-1.scm: 634:9 4 (for-each #<procedure update! (drv)> ("/gnu/store/zrmxzjf025nc89a7vdy5i94zavprc7fs-emacs-guix-0.5.2-2.58a840d.drv")) In cuirass/base.scm: 474:4 3 (update! "/gnu/store/zrmxzjf025nc89a7vdy5i94zavprc7fs-emacs-guix-0.5.2-2.58a840d.drv") In guix/derivations.scm: 552:17 2 (derivation-path->output-paths "/gnu/store/zrmxzjf025nc89a7vdy5i94zavprc7fs-emacs-guix-0.5.2-2.58a840d.drv") In ice-9/ports.scm: 440:11 1 (call-with-input-file "/gnu/store/zrmxzjf025nc89a7vdy5i94zavprc7fs-emacs-guix-0.5.2-2.58a840d.drv" #<procedure read-derivation (drv-port #:optional read-derivation-from-file)> #:binary _ …) In unknown file: 0 (open-file "/gnu/store/zrmxzjf025nc89a7vdy5i94zavprc7fs-emacs-guix-0.5.2-2.58a840d.drv" "r" #:encoding #f #:guess-encoding #f) * src/cuirass/base.scm (update-build-statuses!): Catch "derivation-path->output-paths" exceptions and set the build status to "failed".
-
- Sep 17, 2020
-
-
Mathieu Othacehe authored
* src/cuirass/http.scm (metrics-page): Order 'average-eval-build-start-time and 'evaluation-completion-speed metrics per ascending evaluation id.
-
Mathieu Othacehe authored
* src/cuirass/templates.scm (global-metrics-content): Rename "Builds speed" section to "Builds completion".
-
Mathieu Othacehe authored
* 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.
-
Mathieu Othacehe authored
* src/cuirass/templates.scm (global-metrics-content): Add legends.
-
Mathieu Othacehe authored
* src/cuirass/templates.scm (make-line-chart): Do not display chart title.
-
Mathieu Othacehe authored
* 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.
-
Mathieu Othacehe authored
* src/cuirass/metrics.scm (db-evaluation-completion-speed): Change the completion speed unit to builds/hour. (%metrics): Adapt comment.
-
- Sep 16, 2020
-
-
Mathieu Othacehe authored
* 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.
-
Mathieu Othacehe authored
* bin/cuirass.in (main): Log metrics update duration.
-
- Sep 15, 2020
-
-
Mathieu Othacehe authored
* tests/metrics.scm (nearest-exact-integer): Remove as unused. ("db-update-metrics"): Test that 'pending-builds metric is updated on "db-update-metrics" call.
-
Mathieu Othacehe authored
* tests/metrics.scm: New file. * Makefile.am (TESTS): Add it.
-
Mathieu Othacehe authored
* 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.
-
Mathieu Othacehe authored
* src/cuirass/metrics.scm (db-average-eval-duration-per-spec): Order results by descending rowid and adjust docstring.
-
Mathieu Othacehe authored
* src/cuirass/metrics.scm: Add a warning about metric insertion in %metrics list.
-
Mathieu Othacehe authored
* 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.
-
Mathieu Othacehe authored
* src/cuirass/metrics.scm (db-builds-previous-day): Only take into account the builds that are created and processed during the previous day.
-
Mathieu Othacehe authored
* 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.
-
Mathieu Othacehe authored
* src/cuirass/templates.scm (make-line-chart): Do not override onload callback as that would prevent us from adding multiple charts.
-
Mathieu Othacehe authored
* 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.
-
Mathieu Othacehe authored
* 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".
-
- Sep 14, 2020
-
-
Mathieu Othacehe authored
* 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.
-
Mathieu Othacehe authored
* src/cuirass/database.scm (last-insert-rowid, expect-one-row, %sqlite-exec): Export them.
-
- Sep 10, 2020
-
-
Mathieu Othacehe authored
* Makefile.am (dist_sql_DATA): Add upgrade-9.sql and upgrade-10.sql.
-
Mathieu Othacehe authored
This is a follow-up of 154232bc. * tests/http.scm (evaluations-query-result): Add 'timestamp', 'checkouttime' and 'evaltime' fields. (fill-db): Pass a matching timestamp to "db-add-evaluation" calls.
-
Mathieu Othacehe authored
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.
-