summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--application.rb4
-rw-r--r--docker/Dockerfile73
-rwxr-xr-xdocker/start.sh12
-rw-r--r--docker/swagger.html107
4 files changed, 194 insertions, 2 deletions
diff --git a/application.rb b/application.rb
index ef059b2..fb03a72 100644
--- a/application.rb
+++ b/application.rb
@@ -21,7 +21,7 @@ PUBCHEM_CID_URI = PUBCHEM_URI.split("/")[0..-3].join("/")+"/compound/"
configure :production, :development do
STDOUT.sync = true
$logger = Logger.new(STDOUT)
- $logger.level = Logger::DEBUG
+ #$logger.level = Logger::DEBUG
end
before do
@@ -42,7 +42,7 @@ before do
if request.path =~ /predict/
@accept = request.env['HTTP_ACCEPT'].split(",").first
response['Content-Type'] = @accept
- halt 400, "Mime type #{@accept} is not supported." unless @accept == "text/html" || "*/*"
+ halt 400, "Mime type #{@accept} is not supported." unless @accept == "text/html" or @accept == "*/*"
@version = File.read("VERSION").chomp
else
@accept = request.env['HTTP_ACCEPT'].split(",").first
diff --git a/docker/Dockerfile b/docker/Dockerfile
new file mode 100644
index 0000000..a606b9a
--- /dev/null
+++ b/docker/Dockerfile
@@ -0,0 +1,73 @@
+FROM archlinux/base
+MAINTAINER in-silico toxicology Gmbh
+
+RUN pacman-db-upgrade
+RUN pacman -Syyu --noconfirm
+RUN pacman -S --noconfirm \
+ base-devel \
+ boost-libs \
+ cmake \
+ eigen3 \
+ fontconfig \
+ gcc-fortran \
+ git \
+ gsl \
+ jre10-openjdk-headless \
+ r \
+ ruby \
+ swig \
+ python-pip \
+ catdoc \
+ wget
+RUN pacman -Scc --noconfirm
+
+RUN R -e "install.packages('Rserve', repos='http://rforge.net/')"
+RUN pip install xlsx2csv
+RUN useradd -ms /bin/bash ist
+
+# mongodb has been removed from main repositories
+USER ist
+WORKDIR /home/ist
+RUN mkdir data
+RUN mkdir src
+WORKDIR /home/ist/src
+RUN wget https://aur.archlinux.org/cgit/aur.git/snapshot/mongodb-bin.tar.gz
+RUN tar -xvzf mongodb-bin.tar.gz
+WORKDIR /home/ist/src/mongodb-bin
+RUN makepkg -s --noconfirm
+
+# installation requires root
+USER root
+RUN pacman -U --noconfirm /home/ist/src/mongodb-bin/mongodb-bin*.pkg.tar.xz
+
+# install lazar-gui gem
+RUN echo 'gem: --no-document' > /etc/gemrc
+
+#RUN gem install lazar-gui
+RUN gem install lazar
+RUN gem install qsar-report
+RUN gem install sinatra haml sass rdiscount unicorn
+
+USER ist
+WORKDIR /home/ist
+RUN rm -r src
+
+# lazar-gui
+RUN git clone https://git.in-silico.ch/lazar-gui
+WORKDIR lazar-gui
+RUN git checkout prerelease
+
+# SWAGGER for API
+WORKDIR /home/ist
+RUN git clone https://github.com/swagger-api/swagger-ui.git
+COPY swagger.html /home/ist/swagger-ui/dist/index.html
+
+# TODO adjust to lazar-gui gem path
+RUN ln -s /home/ist/swagger-ui/dist/swagger-ui-bundle.js /home/ist/lazar-gui/public/swagger-ui-bundle.js
+RUN ln -s /home/ist/swagger-ui/dist/swagger-ui-standalone-preset.js /home/ist/lazar-gui/public/swagger-ui-standalone-preset.js
+RUN ln -s /home/ist/swagger-ui/dist/swagger-ui.css /home/ist/lazar-gui/public/swagger-ui.css
+
+# start script
+COPY start.sh /home/ist/start.sh
+
+ENTRYPOINT ["/home/ist/start.sh"]
diff --git a/docker/start.sh b/docker/start.sh
new file mode 100755
index 0000000..ad40a0e
--- /dev/null
+++ b/docker/start.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+# start basic services
+mongod --bind_ip 127.0.0.1 --dbpath ~/data &
+R CMD Rserve --vanilla &
+
+# import data
+ruby -e "require 'lazar'; include OpenTox; Import.public_data"
+
+# start lazar service
+cd $HOME/lazar-gui
+unicorn -p 8088 -E production
diff --git a/docker/swagger.html b/docker/swagger.html
new file mode 100644
index 0000000..239e4f1
--- /dev/null
+++ b/docker/swagger.html
@@ -0,0 +1,107 @@
+<!-- HTML for static distribution bundle build -->
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+ <title>Swagger UI</title>
+ <link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet">
+ <link rel="stylesheet" type="text/css" href="./swagger-ui.css" >
+ <link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
+ <link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
+ <style>
+ html
+ {
+ box-sizing: border-box;
+ overflow: -moz-scrollbars-vertical;
+ overflow-y: scroll;
+ }
+
+ *,
+ *:before,
+ *:after
+ {
+ box-sizing: inherit;
+ }
+
+ body
+ {
+ margin:0;
+ background: #fafafa;
+ }
+ </style>
+ </head>
+
+ <body>
+ <div id="swagger-ui"></div>
+
+ <script src="./swagger-ui-bundle.js"> </script>
+ <script src="./swagger-ui-standalone-preset.js"> </script>
+ <script>
+ window.onload = function() {
+
+ // Build a system
+ var base_url = window.location.origin;
+ var swagger_url = base_url + "/api/api.json";
+ const ui = SwaggerUIBundle({
+ url: swagger_url,
+ dom_id: '#swagger-ui',
+ deepLinking: true,
+ presets: [
+ SwaggerUIBundle.presets.apis,
+ SwaggerUIStandalonePreset
+ ],
+ plugins: [
+ SwaggerUIBundle.plugins.DownloadUrl
+ ],
+ layout: "StandaloneLayout"
+ })
+
+ window.ui = ui;
+ document.getElementsByClassName('topbar')[0].style.backgroundColor = "#fafafa";
+ document.getElementsByClassName('topbar-wrapper')[0].getElementsByTagName('img')[0].alt = "IST";
+ document.getElementsByClassName('topbar-wrapper')[0].getElementsByTagName('img')[0].src = "./IST_logo_s.png";
+ document.getElementsByClassName('topbar-wrapper')[0].getElementsByTagName('img')[0].width = "90";
+ document.getElementsByClassName('topbar-wrapper')[0].getElementsByTagName('img')[0].height = "35";
+ document.getElementsByClassName('topbar-wrapper')[0].getElementsByTagName('img')[0].style.marginRight = "20px";
+ document.getElementsByClassName('topbar-wrapper')[0].getElementsByTagName('span')[0].innerHTML = "lazar-rest-api";
+ };
+
+ // add link for docs
+ setTimeout(function() {
+ var base_url = window.location.origin;
+ var section = document.getElementsByClassName("info")[0];
+ var node = document.createElement("docs");
+ var heading = document.createElement('h2');
+ var headingtext = document.createTextNode("Documentation");
+ var link = document.createElement('a');
+ var linktext = document.createTextNode("See curl examples for a typical workflow.");
+ heading.appendChild(headingtext);
+ link.appendChild(linktext);
+ link.title = "curl examples";
+ link.href = "https://github.com/OpenRiskNet/home/blob/master/openshift/deployments/lazar#curl-examples";
+ link.target = "javascript:void(0);";
+ node.appendChild(heading);
+ node.appendChild(link);
+ section.appendChild(node);
+ }, 1000);
+ // add link for gui
+ setTimeout(function() {
+ var base_url = window.location.origin;
+ var section = document.getElementsByClassName("info")[0];
+ var node = document.createElement("gui");
+ var heading = document.createElement('h2');
+ var headingtext = document.createTextNode("Lazar Graphical User Interface");
+ var link = document.createElement('a');
+ var linktext = document.createTextNode("Lazar (GUI)");
+ heading.appendChild(headingtext);
+ link.appendChild(linktext);
+ link.title = "GUI link";
+ link.href = base_url = "/predict";
+ link.target = "javascript:void(0);";
+ node.appendChild(heading);
+ node.appendChild(link);
+ section.appendChild(node);
+ }, 1000);
+ </script>
+ </body>
+</html>