about summary refs log tree commit diff
path: root/genenetwork
diff options
context:
space:
mode:
Diffstat (limited to 'genenetwork')
-rw-r--r--genenetwork/services/genecup.scm121
-rw-r--r--genenetwork/services/genenetwork.scm33
-rw-r--r--genenetwork/services/mouse-longevity.scm33
3 files changed, 186 insertions, 1 deletions
diff --git a/genenetwork/services/genecup.scm b/genenetwork/services/genecup.scm
new file mode 100644
index 0000000..6ee2812
--- /dev/null
+++ b/genenetwork/services/genecup.scm
@@ -0,0 +1,121 @@
+;;; genenetwork-machines --- Guix configuration for genenetwork machines
+;;; Copyright © 2024 jgart <jgart@dismail.de>
+;;;
+;;; This file is part of genenetwork-machines.
+;;;
+;;; genenetwork-machines is free software: you can redistribute it
+;;; and/or modify it under the terms of the GNU General Public License
+;;; as published by the Free Software Foundation, either version 3 of
+;;; the License, or (at your option) any later version.
+;;;
+;;; genenetwork-machines is distributed in the hope that it will be
+;;; useful, but WITHOUT ANY WARRANTY; without even the implied
+;;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+;;; See the GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with genenetwork-machines.  If not, see
+;;; <https://www.gnu.org/licenses/>.
+
+(define-module (genenetwork services genecup)
+  #:use-module (guix)
+  #:use-module (gnu)
+  #:use-module (guix git)
+  #:use-module (guix modules)
+  #:use-module (guix profiles)
+  #:use-module (guix records)
+  #:use-module (srfi srfi-1)
+  #:use-module (ice-9 match)
+  #:use-module (forge utils)
+  #:use-module (gn packages genecup)
+  #:use-module (gn packages mouse-longevity)
+  #:use-module (gn services rshiny)
+  #:use-module (gn packages machine-learning)
+  #:use-module (gnu packages certs)
+  #:use-module (gnu packages curl)
+  #:use-module (gn packages python)
+  #:use-module (gnu packages admin)
+  #:use-module (gnu packages bioinformatics)
+  #:use-module (gnu packages compression)
+  #:use-module ((gnu packages python) #:select (python))
+  #:use-module (gnu packages python-xyz)
+  #:use-module (guix build python-build-system)
+  #:use-module (gnu packages python-crypto)
+  #:use-module (gnu packages python-web)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu packages python-science)
+  #:use-module (gnu packages machine-learning)
+  #:use-module ((gnu packages admin) #:select (shepherd))
+  #:export (genecup-configuration
+            genecup-configuration?
+            genecup-configuration-package
+            genecup-service-type))
+
+(define-record-type* <genecup-configuration>
+  genecup-configuration make-genecup-configuration
+  genecup-configuration?
+  (package genecup-configuration-package ; <package>
+           (default genecup-latest-with-tensorflow-native)))
+
+(define (genecup-activation config)
+  (match-record config <genecup-configuration>
+                (package)
+    (with-packages
+     (list python
+           python-nltk
+           nss-certs ; Needed for downloading data with nltk.downloader.
+           curl)
+     (with-imported-modules '((guix build utils))
+       #~(begin
+           (use-modules (guix build utils))
+           (let ((nltk-data "/var/cache/nltk_data/")
+                 (data-dir "/export/ratspub/tmp"))
+             (unless (file-exists? nltk-data)
+               (begin
+                 (mkdir-p nltk-data)
+                 (chdir nltk-data)
+                 (invoke #$(file-append python "/bin/python3") "-m" "nltk.downloader" "-d" nltk-data "punkt")))
+             (unless (file-exists? (string-append data-dir "/userspub.sqlite"))
+               (begin
+                 (install-file #$(file-append package "/userspub.sqlite") data-dir)
+                 (chmod (string-append data-dir "/userspub.sqlite") #o554)))))))))
+
+(define genecup-shepherd-service
+  (match-lambda
+    (($ <genecup-configuration> package)
+     (with-imported-modules (source-module-closure
+                             '((guix search-paths)
+                               (gnu build shepherd)
+                               (gnu system file-systems)))
+       (list (shepherd-service
+              (provision '(genecup))
+              (requirement '(networking))
+              (modules '((gnu build shepherd)
+                         (gnu system file-systems)))
+              (start
+               #~(make-forkexec-constructor
+                  (list #$(file-append package "/server.py"))
+                  #:directory #$package
+                  #:environment-variables
+                  (list
+                   "NLTK_DATA=/var/cache/nltk_data"
+                   (string-append "EDIRECT_PUBMED_MASTER="
+                                  #$(file-append package "/minipubmed"))
+                   (string-append "PERL_LWP_SSL_CA_FILE="
+                                  #$(file-append (profile (content (packages->manifest (list curl nss-certs))))
+                                                 "/etc/ssl/certs/ca-certificates.crt")))
+                  #:log-file "/var/log/genecup.log"))
+              (stop  #~(make-kill-destructor))))))))
+
+(define genecup-service-type
+  (service-type
+   (name 'genecup)
+   (extensions
+    (list
+     (service-extension activation-service-type
+                        genecup-activation)
+     (service-extension shepherd-root-service-type
+                        genecup-shepherd-service)))
+   (default-value (genecup-configuration))
+   (description
+    "Run a GeneCup Webserver.")))
diff --git a/genenetwork/services/genenetwork.scm b/genenetwork/services/genenetwork.scm
index 99e78b9..60fe718 100644
--- a/genenetwork/services/genenetwork.scm
+++ b/genenetwork/services/genenetwork.scm
@@ -285,6 +285,33 @@
                   "gn2.scripts.sample_count"
                   #$sql-uri)))))
 
+(define (make-non-human-data-public-cron-gexp config)
+  (match-record config <genenetwork-configuration>
+                (gn-auth sql-uri auth-db)
+                (with-imported-modules '((guix build utils))
+                  #~(begin
+                      (use-modules (guix build utils))
+
+                      (setenv "PYTHONPATH"
+                              (string-append
+                               #$(file-append gn-auth
+                                              "/lib/python"
+                                              (python-version (package-version python))
+                                              "/site-packages")
+                               ":"
+                               #$(profile
+                                  (content (package->development-manifest gn-auth))
+                                  (allow-collisions? #t))
+                               "/lib/python"
+                               #$(python-version (package-version python))
+                               "/site-packages"))
+
+                      (invoke #$(file-append python "/bin/python3")
+                              "-m"
+                              "scripts.batch_assign_data_to_default_admin"
+                              #$auth-db
+                              #$sql-uri)))))
+
 (define (genenetwork-activation config)
   (match-record config <genenetwork-configuration>
     (gn2-secrets gn3-secrets gn-auth-secrets auth-db llm-db-path genotype-files gn-tmpdir gn-doc-git-checkout gn2-sessions-dir)
@@ -650,7 +677,11 @@ a @code{<genenetwork-configuration>} record."
                #:user "root")
         #~(job '(next-minute-from (next-hour) '(17)) ;17th minute of every hour
                #$(program-file "samples-count-script-gexp"
-                               (samples-count-script-gexp config)))))
+                               (samples-count-script-gexp config)))
+        #~(job '(next-minute (range 0 60 15))
+               #$(program-file "make-non-human-data-public-cron-gexp"
+                               (make-non-human-data-public-cron-gexp config))
+               #:user "gunicorn-gn-auth")))
 
 (define (gn-guile-gexp gn-guile-port gn-guile-pkg)
   (with-imported-modules '((guix build utils))
diff --git a/genenetwork/services/mouse-longevity.scm b/genenetwork/services/mouse-longevity.scm
new file mode 100644
index 0000000..c9b977d
--- /dev/null
+++ b/genenetwork/services/mouse-longevity.scm
@@ -0,0 +1,33 @@
+;;; genenetwork-machines --- Guix configuration for genenetwork machines
+;;; Copyright © 2024 jgart <jgart@dismail.de>
+;;;
+;;; This file is part of genenetwork-machines.
+;;;
+;;; genenetwork-machines is free software: you can redistribute it
+;;; and/or modify it under the terms of the GNU General Public License
+;;; as published by the Free Software Foundation, either version 3 of
+;;; the License, or (at your option) any later version.
+;;;
+;;; genenetwork-machines is distributed in the hope that it will be
+;;; useful, but WITHOUT ANY WARRANTY; without even the implied
+;;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+;;; See the GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with genenetwork-machines.  If not, see
+;;; <https://www.gnu.org/licenses/>.
+
+(define-module (genenetwork services mouse-longevity)
+  #:use-module (gn packages genecup)
+  #:use-module (gn packages mouse-longevity)
+  #:use-module (gn services rshiny)
+  #:use-module (gnu services)
+  #:export (mouse-longevity-service))
+
+(define* (mouse-longevity-service #:optional (package mouse-longevity-app))
+  (simple-service 'mouse-longevity
+                  rshiny-service-type
+                  (list 
+                    (rshiny-configuration
+                      (package package)
+                      (binary "mouse-longevity-app")))))