Make research tool as a service.
Many tools are used in the research, but located in each computer. e.g. xps to pdf, convert rnaseq results to a report etc.
Why can't we do all these things in one place? TService is the answer.
{:port 8089
;; when :nrepl-port is set the application starts the nREPL server on load
:nrepl-port 7000
;; :database-url "postgresql://localhost:5432/tservice_dev?user=postgres&password=password"
:database-url "jdbc:sqlite:./tservice/tservice_dev.db"
:external-bin "/Users/choppy/Documents/Code/ClinicoOmics/ReportEngine/tservice-plugins/external:/Users/choppy/miniconda3/envs/multiqc/bin"
:tservice-workdir "./tservice"
:tservice-plugin-path "./tservice/"
:tservice-run-mode "dev"
:fs-services [{:fs-service "minio"
:fs-endpoint "http://localhost:9000"
:fs-access-key "XXXXXXXXXXXX"
:fs-secret-key "XXXXXXXXXXXX"
:fs-rootdir "/data/minio"}
{:fs-service "oss"
:fs-endpoint "http://oss-cn-shanghai.aliyuncs.com"
:fs-access-key "XXXXXXXXXXXX"
:fs-secret-key "XXXXXXXXXXXX"
:fs-rootdir ""}]
:default-fs-service "minio"
:tasks {:sync-reports {:cron "0 */1 * * * ?"}}}
# Port
export PORT=3000
# NREPL Port
export NREPL_PORT=7000
# Database(Support PostgreSQL, H2, SQLite)
## PostgreSQL
export DATABASE_URL="postgresql://localhost:5432/tservice_dev?user=postgres&password=password"
## H2
export DATABASE_URL="jdbc:h2:./tservice_dev.db"
## SQLite
export DATABASE_URL="jdbc:sqlite:./tservice_dev.db"
# TService Working Directory
export TSERVICE_WORKDIR=./
# TService Plugin Path
export TSERVICE_PLUGIN_PATH=./
- Go to the Packages page in the
https://github.com/clinico-omics/tservice
- Choose a version
- Pull your expected package with the following command
docker pull ghcr.io/clinico-omics/tservice:v0.3.2-9e3daa48
# TODO
-
You will need Leiningen 2.0 or above installed.
-
Clone the
tservice
repogit clone https://github.com/clinico-omics/tservice.git cd tservice
-
Prepare a configuration file and save as
dev-config.edn
into thetservice
directory;; WARNING ;; The dev-config.edn file is used for local environment variables, such as database credentials. ;; This file is listed in .gitignore and will be excluded from version control by Git. {:port 3000 ;; when :nrepl-port is set the application starts the nREPL server on load :nrepl-port 7000 :database-url "postgresql://localhost:5432/tservice_dev?user=postgres&password=password" :external-bin "~/miniconda3/envs/multiqc/bin" :tservice-workdir "~/Downloads/tservice" :tservice-plugin-path "~/Downloads/tservice/" :tservice-run-mode "dev" :fs-services [{:fs-service "minio" :fs-endpoint "http://10.157.72.56:9000" :fs-access-key "test" :fs-secret-key "4gmPNjG5JKRXXXXXuxTqO" :fs-rootdir "/data/minio"} {:fs-service "oss" :fs-endpoint "http://oss-cn-shanghai.aliyuncs.com" :fs-access-key "LTAI4Fi5MEXXXXXzhjEEF43a" :fs-secret-key "hQhPB8tRFloXXXXXXhKv1GOLdwFVLgt" :fs-rootdir ""}] :default-fs-service "minio" :tasks {:sync-reports {:cron "0 */1 * * * ?"}}}
-
Install PostgreSQL and create the
tservice_dev
database for development
lein deps
To start a web server for the application, run:
lein run
(require '[user :as u])
(u/restart)
# TODO
info:
name: Quartet DNA-Seq Report
version: v1.0.1
description: Parse the results of the quartet-dna-qc app and generate the report.
category: Tool
home: https://github.com/clinico-omics/tservice-plugins
source: PGx
short_name: quartet-dnaseq-report
icons:
- src: ""
type: image/png
sizes: 192x192
author: Jingcheng Yang
plugin:
name: quartet-dnaseq-report
display-name: Quartet DNA-Seq Report
lazy-load: false
init:
# Unpack any files to the specified directory, such as ENV/CONFIG/DATA directory.
# You can write the unpack-env step more than once.
- step: unpack-env
# envname means the name of the file/directory in the resources directory, the file extension can be "tar.gz", "tgz" or "". When the envtype is environment, you need to keep envname same with the plugin name.
envname: quartet-dnaseq-report
# envtype can be the one of 'environment', 'configuration', 'data'
envtype: environment
# post-unpack-cmd can use template variables, such as {{ ENV_DEST_DIR }}, {{ CONFIG_DIR }}, {{ DATA_DIR }}
post-unpack-cmd: 'FIXME: you can write any bash command'
- step: load-namespace
namespace: tservice.plugins.quartet-dnaseq-report
- step: register-plugin
entrypoint: tservice.plugins.quartet-dnaseq-report/metadata
- step: init-event
entrypoint: tservice.plugins.quartet-dnaseq-report/events-init
If you use make-plugin-metadata
and make-routes
to generate routes, then you can get the following variables from the handler's argument.
{
;; All fields which you defined by `body-schema`, `query-schema`, `path-schema`
:owner "current user, maybe email or username."
:workdir "working directory, you can use it as the output directory."
:uuid "uuid is the part of workdir and maybe you need to use it to create a task."
:plugin-context {:plugin-name "plugin-name"
:plugin-version "plugin-version"
:plugin-info "The content of tservice-plugin.yml"
:data-dir "The data directory of the specified plugin, you can generate the data into the directory, all data can be shared by generated tasks of the plugin."
:env-dir "The env directory of the specified plugin."
:jar-path "The jar path of the specified plugin."
:config-dir "The config directory of the specified plugin. When you need to access static files from the plugin, you can located these files into resources directory. TService will copy all these files into config directory if you define a specified unpack-env step in tservice-plugin.yml."}
}
;; #>>> make-plugin-metadata <<<#
(require '[tservice.api.task :refer [make-plugin-metadata]])
(make-plugin-metadata
{:name "xps2pdf"
:params-schema xps2pdf-params-body
:handler (fn [{:keys [filepath plugin-context owner uuid workdir]}]
(println "This is the plugin context: " plugin-context))
:plugin-type :ToolPlugin
:response-type :data2files})
-
Commit all code modifications
-
Give a tag for the latest commit
-
Build your documentation with
lein codox
-
To publish your docs to Github Pages, run the following commands
cd docs git add . git commit -am "Update docs." git push -u origin gh-pages cd ..
make build-docker
make dev-db
Copyright © 2015-2021 Eclipse Public License 2.0