You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@marvin.apache.org by lu...@apache.org on 2019/05/10 05:28:56 UTC

[incubator-marvin] branch feature/MARVIN-1 updated: Adding support for building docker images. Initial support for R engines.

This is an automated email from the ASF dual-hosted git repository.

lucasbm88 pushed a commit to branch feature/MARVIN-1
in repository https://gitbox.apache.org/repos/asf/incubator-marvin.git


The following commit(s) were added to refs/heads/feature/MARVIN-1 by this push:
     new 01d1255  Adding support for building docker images. Initial support for R engines.
01d1255 is described below

commit 01d12556df9a5f032ac85dcaa534a25129cb97fc
Author: Lucas Bonatto Miguel <lu...@qume.io>
AuthorDate: Thu May 9 22:26:23 2019 -0700

    Adding support for building docker images.
    Initial support for R engines.
---
 Makefile                                           |  49 ++++++++++++
 .../.github/ISSUE_TEMPLATE/bug_report.md           |   0
 .../.github/ISSUE_TEMPLATE/custom.md               |   0
 .../.github/ISSUE_TEMPLATE/feature_request.md      |   0
 {engine-executor => engine-server}/.gitignore      |   0
 .../CODE_OF_CONDUCT.md                             |   0
 {engine-executor => engine-server}/Makefile        |   0
 {engine-executor => engine-server}/NOTICE          |   0
 .../PULL_REQUEST_TEMPLATE.md                       |   0
 {engine-executor => engine-server}/README.md       |   0
 {engine-executor => engine-server}/build.sbt       |   2 +-
 engine-server/build/Dockerfile                     |  89 +++++++++++++++++++++
 engine-server/build/docker-python/Dockerfile       |  59 ++++++++++++++
 engine-server/build/docker-r/Dockerfile            |  61 ++++++++++++++
 .../build/marvin-engine-server-assembly.jar        | Bin 0 -> 94184375 bytes
 engine-server/build/python-toolbox.tgz             | Bin 0 -> 693248 bytes
 .../project/assembly.sbt                           |   0
 .../project/build.properties                       |   0
 .../project/plugins.sbt                            |   0
 .../project/scalapb.sbt                            |   0
 {engine-executor => engine-server}/sonatype.sbt    |   0
 .../src/main/protobuf/actions.proto                |   0
 .../src/main}/resources/EngineActionSchema.json    |   0
 .../src/main}/resources/EngineMetadataSchema.json  |   0
 .../src/main/resources/application.conf            |   0
 .../src/main/resources/docs/favicon-16x16.png      | Bin
 .../src/main/resources/docs/favicon-32x32.png      | Bin
 .../src/main/resources/docs/index.html             |   0
 .../src/main/resources/docs/oauth2-redirect.html   |   0
 .../src/main/resources/docs/swagger-ui-bundle.js   |   0
 .../main/resources/docs/swagger-ui-bundle.js.map   |   0
 .../resources/docs/swagger-ui-standalone-preset.js |   0
 .../docs/swagger-ui-standalone-preset.js.map       |   0
 .../src/main/resources/docs/swagger-ui.css         |   0
 .../src/main/resources/docs/swagger-ui.css.map     |   0
 .../src/main/resources/docs/swagger-ui.js          |   0
 .../src/main/resources/docs/swagger-ui.js.map      |   0
 .../src/main/resources/log4j.properties            |   0
 .../marvin/artifact/manager/ArtifactFSSaver.scala  |   0
 .../artifact/manager/ArtifactHdfsSaver.scala       |   0
 .../marvin/artifact/manager/ArtifactS3Saver.scala  |   0
 .../marvin/artifact/manager/ArtifactSaver.scala    |   0
 .../exception/MarvinEExecutorException.scala       |   0
 .../org/marvin/executor/EngineExecutorApp.scala    |   0
 .../org/marvin/executor/actions/BatchAction.scala  |   0
 .../org/marvin/executor/actions/OnlineAction.scala |   0
 .../marvin/executor/actions/PipelineAction.scala   |   0
 .../scala/org/marvin/executor/api/GenericAPI.scala |   0
 .../marvin/executor/api/GenericAPIHandlers.scala   |   0
 .../executor/manager/ExecutorClusterListener.scala |   0
 .../marvin/executor/manager/ExecutorManager.scala  |   0
 .../marvin/executor/proxies/BatchActionProxy.scala |   0
 .../org/marvin/executor/proxies/EngineProxy.scala  |   0
 .../executor/proxies/OnlineActionProxy.scala       |   0
 .../executor/statemachine/PredictorFSM.scala       |   0
 .../scala/org/marvin/model/BatchExecution.scala    |   0
 .../src/main/scala/org/marvin/model/Metadata.scala |   0
 .../org/marvin/util/ConfigurationContext.scala     |   0
 .../src/main/scala/org/marvin/util/JsonUtil.scala  |   0
 .../main/scala/org/marvin/util/LocalCache.scala    |   0
 .../main/scala/org/marvin/util/ProtocolUtil.scala  |   0
 .../src/test}/resources/EngineActionSchema.json    |   0
 .../src/test}/resources/EngineMetadataSchema.json  |   0
 .../src/test/resources/application.conf            |   0
 .../src/test/resources/engine_home/docs.yaml       |   0
 .../src/test/resources/engine_home/engine.metadata |   0
 .../src/test/resources/engine_home/engine.params   |   0
 .../resources/engine_home/predictor-message.schema |   0
 .../src/test/resources/metadataToValidate.json     |   0
 .../resources/metadataToValidateWithError.json     |   0
 .../resources/metadataToValidateWithRefError.json  |   0
 .../src/test/resources/test-invalid.json           |   0
 .../src/test/resources/test.json                   |   0
 .../artifact/manager/ArtifactS3SaverTest.scala     |   0
 .../artifact/manager/ArtifactSaverTest.scala       |   0
 .../marvin/executor/EngineExecutorAppTest.scala    |   0
 .../marvin/executor/actions/BatchActionTest.scala  |   0
 .../marvin/executor/actions/OnlineActionTest.scala |   0
 .../org/marvin/executor/api/GenericAPITest.scala   |   0
 .../executor/manager/ExecutorManagerTest.scala     |   0
 .../executor/proxies/BatchActionProxyTest.scala    |   0
 .../executor/proxies/OnlineActionProxyTest.scala   |   0
 .../executor/statemachine/PredictorFSMTest.scala   |   0
 .../scala/org/marvin/fixtures/MetadataMock.scala   |   0
 .../test/scala/org/marvin/util/JsonUtilTest.scala  |   0
 .../scala/org/marvin/util/LocalCacheTest.scala     |   0
 .../scala/org/marvin/util/ProtocolUtilTest.scala   |   0
 python-toolbox/.dev                                |   0
 python-toolbox/setup.py                            |   3 +-
 89 files changed, 261 insertions(+), 2 deletions(-)

diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..f0a548c
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,49 @@
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+# 
+#     http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+.PHONY: help docker-base docker-python docker-r toolbox engine-server
+
+help:
+	@echo "    docker-base"
+	@echo "        Builds the base docker image with common dependecies among languages."
+	@echo "    docker-python"
+	@echo "        Builds a docker image that can run engines in Python."
+	@echo "    docker-r"
+	@echo "        Builds a docker image that can run engines in R."
+	@echo "    toolbox"
+	@echo "        Builds the toolbox and make it available for be included into docker images."
+	@echo "    engine-server"
+	@echo "        Builds a jar with the engine interpreter server."
+
+docker-base:
+	docker build -t marvin-base -f engine-server/build/Dockerfile engine-server/build
+
+docker-python:
+	$(MAKE) engine-server
+	$(MAKE) toolbox
+	docker build -t marvin-python -f engine-server/build/docker-python/Dockerfile engine-server/build
+
+docker-r:
+	$(MAKE) engine-server
+	$(MAKE) toolbox
+	docker build -t marvin-r -f engine-server/build/docker-r/Dockerfile engine-server/build
+
+engine-server:
+	cd engine-server && $(MAKE) package
+	mv engine-server/target/scala-2.12/marvin-engine-server-assembly-*.jar engine-server/build/marvin-engine-server-assembly.jar
+
+toolbox:
+	tar -cf engine-server/build/python-toolbox.tgz python-toolbox
\ No newline at end of file
diff --git a/engine-executor/.github/ISSUE_TEMPLATE/bug_report.md b/engine-server/.github/ISSUE_TEMPLATE/bug_report.md
similarity index 100%
rename from engine-executor/.github/ISSUE_TEMPLATE/bug_report.md
rename to engine-server/.github/ISSUE_TEMPLATE/bug_report.md
diff --git a/engine-executor/.github/ISSUE_TEMPLATE/custom.md b/engine-server/.github/ISSUE_TEMPLATE/custom.md
similarity index 100%
rename from engine-executor/.github/ISSUE_TEMPLATE/custom.md
rename to engine-server/.github/ISSUE_TEMPLATE/custom.md
diff --git a/engine-executor/.github/ISSUE_TEMPLATE/feature_request.md b/engine-server/.github/ISSUE_TEMPLATE/feature_request.md
similarity index 100%
rename from engine-executor/.github/ISSUE_TEMPLATE/feature_request.md
rename to engine-server/.github/ISSUE_TEMPLATE/feature_request.md
diff --git a/engine-executor/.gitignore b/engine-server/.gitignore
similarity index 100%
rename from engine-executor/.gitignore
rename to engine-server/.gitignore
diff --git a/engine-executor/CODE_OF_CONDUCT.md b/engine-server/CODE_OF_CONDUCT.md
similarity index 100%
rename from engine-executor/CODE_OF_CONDUCT.md
rename to engine-server/CODE_OF_CONDUCT.md
diff --git a/engine-executor/Makefile b/engine-server/Makefile
similarity index 100%
rename from engine-executor/Makefile
rename to engine-server/Makefile
diff --git a/engine-executor/NOTICE b/engine-server/NOTICE
similarity index 100%
rename from engine-executor/NOTICE
rename to engine-server/NOTICE
diff --git a/engine-executor/PULL_REQUEST_TEMPLATE.md b/engine-server/PULL_REQUEST_TEMPLATE.md
similarity index 100%
rename from engine-executor/PULL_REQUEST_TEMPLATE.md
rename to engine-server/PULL_REQUEST_TEMPLATE.md
diff --git a/engine-executor/README.md b/engine-server/README.md
similarity index 100%
rename from engine-executor/README.md
rename to engine-server/README.md
diff --git a/engine-executor/build.sbt b/engine-server/build.sbt
similarity index 98%
rename from engine-executor/build.sbt
rename to engine-server/build.sbt
index af58722..696f865 100644
--- a/engine-executor/build.sbt
+++ b/engine-server/build.sbt
@@ -14,7 +14,7 @@
  * limitations under the License.
  *
  */
-name := "marvin-engine-executor"
+name := "marvin-engine-server"
 
 version := "0.0.4"
 
diff --git a/engine-server/build/Dockerfile b/engine-server/build/Dockerfile
new file mode 100644
index 0000000..bbf5394
--- /dev/null
+++ b/engine-server/build/Dockerfile
@@ -0,0 +1,89 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+# 
+#     http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+##############################################################
+# Base docker image for Marvin
+##############################################################
+FROM ubuntu:16.04
+
+ENV SLEEP_MILLIS 0
+
+USER root
+
+##############################################################
+# Creates the marvin user
+##############################################################
+RUN groupadd marvin && \
+    useradd marvin -mg marvin
+
+##############################################################
+# Define all environment variables to be used 
+##############################################################
+
+ENV MARVIN_HOME=/home/marvin
+ENV MARVIN_DATA_PATH=/home/marvin/marvin-data
+ENV MARVIN_ENGINE_HOME=$MARVIN_HOME/engine
+ENV MARVIN_ENGINE_ENV=marvin-engine-env
+
+
+##############################################################
+# Create all folders needed 
+##############################################################
+
+RUN mkdir -p $MARVIN_HOME && \
+    mkdir -p $MARVIN_DATA_PATH && \
+    mkdir -p $MARVIN_ENGINE_HOME && \
+    mkdir -p /var/log/marvin/engines && \
+    mkdir -p /var/run/marvin/engines
+
+
+##############################################################
+# Install the system dependencies for default installation 
+##############################################################
+
+RUN apt-get update -y && \
+    apt-get install -y build-essential && \
+    apt-get install -y maven git cmake software-properties-common curl libstdc++6 && \
+    apt-get install -y wget && \
+    apt-get install -y libffi-dev && \
+    apt-get install -y libssl-dev && \
+    apt-get install -y libxml2-dev && \
+    apt-get install -y libxslt1-dev && \
+    apt-get install -y libpng12-dev && \
+    apt-get install -y libfreetype6-dev && \
+    apt-get install -y libsasl2-dev && \
+    apt-get install -y graphviz && \
+    apt-get clean
+
+### Installs Open JDK 8
+RUN add-apt-repository ppa:openjdk-r/ppa && \
+    apt-get update && \
+    apt-get install -y openjdk-8-jdk
+
+## TODO - Think in a good way to make Spark an option as soon we implement docker supporting it
+##############################################################
+# Install Apache Spark
+#
+# Uncomment if you are using spark, note that is needed the 
+# spark configuration files to the think works correctly.
+##############################################################
+
+# RUN curl https://d3kbcqa49mib13.cloudfront.net/spark-2.1.1-bin-hadoop2.6.tgz -o /tmp/spark-2.1.1-bin-hadoop2.6.tgz && \
+#    tar -xf /tmp/spark-2.1.1-bin-hadoop2.6.tgz -C /opt/ && \
+#    ln -s /opt/spark-2.1.1-bin-hadoop2.6 /opt/spark
+
+# Add the b2w datalake config for Spark
+# ADD spark-conf.tar $SPARK_CONF_DIR
+# RUN mkdir -p $SPARK_CONF_DIR
\ No newline at end of file
diff --git a/engine-server/build/docker-python/Dockerfile b/engine-server/build/docker-python/Dockerfile
new file mode 100644
index 0000000..bd06aef
--- /dev/null
+++ b/engine-server/build/docker-python/Dockerfile
@@ -0,0 +1,59 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+# 
+#     http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+ARG BASE_TAG=latest
+FROM marvin-base:${BASE_TAG}
+
+##############################################################
+# Define all environment variables to be used 
+##############################################################
+ENV WORKON_HOME=$MARVIN_HOME/.virtualenvs
+
+##############################################################
+# Install python dependencies
+##############################################################
+
+RUN apt-get update -y && \
+    apt-get install -y python && \
+    apt-get install -y python2.7-dev && \
+    apt-get install -y python-pip && \
+    apt-get install -y ipython && \
+    # ??? apt-get install -y python-tk && \ ??? #
+    pip install --upgrade pip==9.0.1 && \
+    apt install -y libzmq3-dev libcurl4-openssl-dev libssl-dev && \
+    pip install jupyter && \
+    apt-get clean
+
+##############################################################
+# Copy and Install the marvin engine inside virtualenv
+##############################################################
+
+# adds the package containing the user-generated engine
+ADD python-toolbox.tgz $MARVIN_ENGINE_HOME
+
+# adds the freshly built engine server jar
+ADD marvin-engine-server-assembly.jar $MARVIN_DATA_PATH 
+
+##############################################################
+# Starts the jupyter http server
+##############################################################
+
+EXPOSE 8888
+
+USER marvin
+
+RUN /bin/bash -c "cd $MARVIN_ENGINE_HOME/python-toolbox && pip install . --user"
+
+CMD /bin/bash -c "marvin --help"
\ No newline at end of file
diff --git a/engine-server/build/docker-r/Dockerfile b/engine-server/build/docker-r/Dockerfile
new file mode 100644
index 0000000..dc48dcb
--- /dev/null
+++ b/engine-server/build/docker-r/Dockerfile
@@ -0,0 +1,61 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+# 
+#     http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+ARG BASE_TAG=latest
+FROM marvin-base:${BASE_TAG}
+
+##############################################################
+# Create all folders needed 
+##############################################################
+
+
+##############################################################
+# Install the system dependencies for default R installation 
+##############################################################
+
+RUN apt install -y apt-transport-https &&\
+    apt update && \
+    apt install -y python2.7-dev && \
+    apt install -y python-pip && \
+    apt install -y ipython && \
+    pip install --upgrade pip==9.0.1 && \
+    apt install -y libzmq3-dev libcurl4-openssl-dev libssl-dev && \
+    pip install jupyter
+    
+
+RUN apt install -y r-base && \
+    su -c "R -e \"install.packages(c('repr', 'IRdisplay', 'IRkernel'), type = 'source', repos='http://cran.rstudio.com/')\"" && \
+    su -c "R -e \"IRkernel::installspec(user = FALSE)\""
+
+
+##############################################################
+# Copy and Install the marvin engine inside virtualenv
+##############################################################
+
+# adds the package containing the user-generated engine
+#ADD generated-engine $MARVIN_ENGINE_HOME
+
+# adds the freshly built engine server jar
+#ADD marvin-engine-server-assembly.jar $MARVIN_DATA_PATH 
+
+##############################################################
+# Starts the jupyter http server
+##############################################################
+
+EXPOSE 8888
+
+USER marvin
+
+CMD /bin/bash -c "jupyter notebook --ip=0.0.0.0 --notebook-dir=$MARVIN_HOME"
\ No newline at end of file
diff --git a/engine-server/build/marvin-engine-server-assembly.jar b/engine-server/build/marvin-engine-server-assembly.jar
new file mode 100644
index 0000000..ff8a8f4
Binary files /dev/null and b/engine-server/build/marvin-engine-server-assembly.jar differ
diff --git a/engine-server/build/python-toolbox.tgz b/engine-server/build/python-toolbox.tgz
new file mode 100644
index 0000000..86b60d1
Binary files /dev/null and b/engine-server/build/python-toolbox.tgz differ
diff --git a/engine-executor/project/assembly.sbt b/engine-server/project/assembly.sbt
similarity index 100%
rename from engine-executor/project/assembly.sbt
rename to engine-server/project/assembly.sbt
diff --git a/engine-executor/project/build.properties b/engine-server/project/build.properties
similarity index 100%
rename from engine-executor/project/build.properties
rename to engine-server/project/build.properties
diff --git a/engine-executor/project/plugins.sbt b/engine-server/project/plugins.sbt
similarity index 100%
rename from engine-executor/project/plugins.sbt
rename to engine-server/project/plugins.sbt
diff --git a/engine-executor/project/scalapb.sbt b/engine-server/project/scalapb.sbt
similarity index 100%
rename from engine-executor/project/scalapb.sbt
rename to engine-server/project/scalapb.sbt
diff --git a/engine-executor/sonatype.sbt b/engine-server/sonatype.sbt
similarity index 100%
rename from engine-executor/sonatype.sbt
rename to engine-server/sonatype.sbt
diff --git a/engine-executor/src/main/protobuf/actions.proto b/engine-server/src/main/protobuf/actions.proto
similarity index 100%
rename from engine-executor/src/main/protobuf/actions.proto
rename to engine-server/src/main/protobuf/actions.proto
diff --git a/engine-executor/src/test/resources/EngineActionSchema.json b/engine-server/src/main/resources/EngineActionSchema.json
similarity index 100%
rename from engine-executor/src/test/resources/EngineActionSchema.json
rename to engine-server/src/main/resources/EngineActionSchema.json
diff --git a/engine-executor/src/test/resources/EngineMetadataSchema.json b/engine-server/src/main/resources/EngineMetadataSchema.json
similarity index 100%
rename from engine-executor/src/test/resources/EngineMetadataSchema.json
rename to engine-server/src/main/resources/EngineMetadataSchema.json
diff --git a/engine-executor/src/main/resources/application.conf b/engine-server/src/main/resources/application.conf
similarity index 100%
rename from engine-executor/src/main/resources/application.conf
rename to engine-server/src/main/resources/application.conf
diff --git a/engine-executor/src/main/resources/docs/favicon-16x16.png b/engine-server/src/main/resources/docs/favicon-16x16.png
similarity index 100%
rename from engine-executor/src/main/resources/docs/favicon-16x16.png
rename to engine-server/src/main/resources/docs/favicon-16x16.png
diff --git a/engine-executor/src/main/resources/docs/favicon-32x32.png b/engine-server/src/main/resources/docs/favicon-32x32.png
similarity index 100%
rename from engine-executor/src/main/resources/docs/favicon-32x32.png
rename to engine-server/src/main/resources/docs/favicon-32x32.png
diff --git a/engine-executor/src/main/resources/docs/index.html b/engine-server/src/main/resources/docs/index.html
similarity index 100%
rename from engine-executor/src/main/resources/docs/index.html
rename to engine-server/src/main/resources/docs/index.html
diff --git a/engine-executor/src/main/resources/docs/oauth2-redirect.html b/engine-server/src/main/resources/docs/oauth2-redirect.html
similarity index 100%
rename from engine-executor/src/main/resources/docs/oauth2-redirect.html
rename to engine-server/src/main/resources/docs/oauth2-redirect.html
diff --git a/engine-executor/src/main/resources/docs/swagger-ui-bundle.js b/engine-server/src/main/resources/docs/swagger-ui-bundle.js
similarity index 100%
rename from engine-executor/src/main/resources/docs/swagger-ui-bundle.js
rename to engine-server/src/main/resources/docs/swagger-ui-bundle.js
diff --git a/engine-executor/src/main/resources/docs/swagger-ui-bundle.js.map b/engine-server/src/main/resources/docs/swagger-ui-bundle.js.map
similarity index 100%
rename from engine-executor/src/main/resources/docs/swagger-ui-bundle.js.map
rename to engine-server/src/main/resources/docs/swagger-ui-bundle.js.map
diff --git a/engine-executor/src/main/resources/docs/swagger-ui-standalone-preset.js b/engine-server/src/main/resources/docs/swagger-ui-standalone-preset.js
similarity index 100%
rename from engine-executor/src/main/resources/docs/swagger-ui-standalone-preset.js
rename to engine-server/src/main/resources/docs/swagger-ui-standalone-preset.js
diff --git a/engine-executor/src/main/resources/docs/swagger-ui-standalone-preset.js.map b/engine-server/src/main/resources/docs/swagger-ui-standalone-preset.js.map
similarity index 100%
rename from engine-executor/src/main/resources/docs/swagger-ui-standalone-preset.js.map
rename to engine-server/src/main/resources/docs/swagger-ui-standalone-preset.js.map
diff --git a/engine-executor/src/main/resources/docs/swagger-ui.css b/engine-server/src/main/resources/docs/swagger-ui.css
similarity index 100%
rename from engine-executor/src/main/resources/docs/swagger-ui.css
rename to engine-server/src/main/resources/docs/swagger-ui.css
diff --git a/engine-executor/src/main/resources/docs/swagger-ui.css.map b/engine-server/src/main/resources/docs/swagger-ui.css.map
similarity index 100%
rename from engine-executor/src/main/resources/docs/swagger-ui.css.map
rename to engine-server/src/main/resources/docs/swagger-ui.css.map
diff --git a/engine-executor/src/main/resources/docs/swagger-ui.js b/engine-server/src/main/resources/docs/swagger-ui.js
similarity index 100%
rename from engine-executor/src/main/resources/docs/swagger-ui.js
rename to engine-server/src/main/resources/docs/swagger-ui.js
diff --git a/engine-executor/src/main/resources/docs/swagger-ui.js.map b/engine-server/src/main/resources/docs/swagger-ui.js.map
similarity index 100%
rename from engine-executor/src/main/resources/docs/swagger-ui.js.map
rename to engine-server/src/main/resources/docs/swagger-ui.js.map
diff --git a/engine-executor/src/main/resources/log4j.properties b/engine-server/src/main/resources/log4j.properties
similarity index 100%
rename from engine-executor/src/main/resources/log4j.properties
rename to engine-server/src/main/resources/log4j.properties
diff --git a/engine-executor/src/main/scala/org/marvin/artifact/manager/ArtifactFSSaver.scala b/engine-server/src/main/scala/org/marvin/artifact/manager/ArtifactFSSaver.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/artifact/manager/ArtifactFSSaver.scala
rename to engine-server/src/main/scala/org/marvin/artifact/manager/ArtifactFSSaver.scala
diff --git a/engine-executor/src/main/scala/org/marvin/artifact/manager/ArtifactHdfsSaver.scala b/engine-server/src/main/scala/org/marvin/artifact/manager/ArtifactHdfsSaver.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/artifact/manager/ArtifactHdfsSaver.scala
rename to engine-server/src/main/scala/org/marvin/artifact/manager/ArtifactHdfsSaver.scala
diff --git a/engine-executor/src/main/scala/org/marvin/artifact/manager/ArtifactS3Saver.scala b/engine-server/src/main/scala/org/marvin/artifact/manager/ArtifactS3Saver.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/artifact/manager/ArtifactS3Saver.scala
rename to engine-server/src/main/scala/org/marvin/artifact/manager/ArtifactS3Saver.scala
diff --git a/engine-executor/src/main/scala/org/marvin/artifact/manager/ArtifactSaver.scala b/engine-server/src/main/scala/org/marvin/artifact/manager/ArtifactSaver.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/artifact/manager/ArtifactSaver.scala
rename to engine-server/src/main/scala/org/marvin/artifact/manager/ArtifactSaver.scala
diff --git a/engine-executor/src/main/scala/org/marvin/exception/MarvinEExecutorException.scala b/engine-server/src/main/scala/org/marvin/exception/MarvinEExecutorException.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/exception/MarvinEExecutorException.scala
rename to engine-server/src/main/scala/org/marvin/exception/MarvinEExecutorException.scala
diff --git a/engine-executor/src/main/scala/org/marvin/executor/EngineExecutorApp.scala b/engine-server/src/main/scala/org/marvin/executor/EngineExecutorApp.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/executor/EngineExecutorApp.scala
rename to engine-server/src/main/scala/org/marvin/executor/EngineExecutorApp.scala
diff --git a/engine-executor/src/main/scala/org/marvin/executor/actions/BatchAction.scala b/engine-server/src/main/scala/org/marvin/executor/actions/BatchAction.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/executor/actions/BatchAction.scala
rename to engine-server/src/main/scala/org/marvin/executor/actions/BatchAction.scala
diff --git a/engine-executor/src/main/scala/org/marvin/executor/actions/OnlineAction.scala b/engine-server/src/main/scala/org/marvin/executor/actions/OnlineAction.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/executor/actions/OnlineAction.scala
rename to engine-server/src/main/scala/org/marvin/executor/actions/OnlineAction.scala
diff --git a/engine-executor/src/main/scala/org/marvin/executor/actions/PipelineAction.scala b/engine-server/src/main/scala/org/marvin/executor/actions/PipelineAction.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/executor/actions/PipelineAction.scala
rename to engine-server/src/main/scala/org/marvin/executor/actions/PipelineAction.scala
diff --git a/engine-executor/src/main/scala/org/marvin/executor/api/GenericAPI.scala b/engine-server/src/main/scala/org/marvin/executor/api/GenericAPI.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/executor/api/GenericAPI.scala
rename to engine-server/src/main/scala/org/marvin/executor/api/GenericAPI.scala
diff --git a/engine-executor/src/main/scala/org/marvin/executor/api/GenericAPIHandlers.scala b/engine-server/src/main/scala/org/marvin/executor/api/GenericAPIHandlers.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/executor/api/GenericAPIHandlers.scala
rename to engine-server/src/main/scala/org/marvin/executor/api/GenericAPIHandlers.scala
diff --git a/engine-executor/src/main/scala/org/marvin/executor/manager/ExecutorClusterListener.scala b/engine-server/src/main/scala/org/marvin/executor/manager/ExecutorClusterListener.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/executor/manager/ExecutorClusterListener.scala
rename to engine-server/src/main/scala/org/marvin/executor/manager/ExecutorClusterListener.scala
diff --git a/engine-executor/src/main/scala/org/marvin/executor/manager/ExecutorManager.scala b/engine-server/src/main/scala/org/marvin/executor/manager/ExecutorManager.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/executor/manager/ExecutorManager.scala
rename to engine-server/src/main/scala/org/marvin/executor/manager/ExecutorManager.scala
diff --git a/engine-executor/src/main/scala/org/marvin/executor/proxies/BatchActionProxy.scala b/engine-server/src/main/scala/org/marvin/executor/proxies/BatchActionProxy.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/executor/proxies/BatchActionProxy.scala
rename to engine-server/src/main/scala/org/marvin/executor/proxies/BatchActionProxy.scala
diff --git a/engine-executor/src/main/scala/org/marvin/executor/proxies/EngineProxy.scala b/engine-server/src/main/scala/org/marvin/executor/proxies/EngineProxy.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/executor/proxies/EngineProxy.scala
rename to engine-server/src/main/scala/org/marvin/executor/proxies/EngineProxy.scala
diff --git a/engine-executor/src/main/scala/org/marvin/executor/proxies/OnlineActionProxy.scala b/engine-server/src/main/scala/org/marvin/executor/proxies/OnlineActionProxy.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/executor/proxies/OnlineActionProxy.scala
rename to engine-server/src/main/scala/org/marvin/executor/proxies/OnlineActionProxy.scala
diff --git a/engine-executor/src/main/scala/org/marvin/executor/statemachine/PredictorFSM.scala b/engine-server/src/main/scala/org/marvin/executor/statemachine/PredictorFSM.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/executor/statemachine/PredictorFSM.scala
rename to engine-server/src/main/scala/org/marvin/executor/statemachine/PredictorFSM.scala
diff --git a/engine-executor/src/main/scala/org/marvin/model/BatchExecution.scala b/engine-server/src/main/scala/org/marvin/model/BatchExecution.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/model/BatchExecution.scala
rename to engine-server/src/main/scala/org/marvin/model/BatchExecution.scala
diff --git a/engine-executor/src/main/scala/org/marvin/model/Metadata.scala b/engine-server/src/main/scala/org/marvin/model/Metadata.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/model/Metadata.scala
rename to engine-server/src/main/scala/org/marvin/model/Metadata.scala
diff --git a/engine-executor/src/main/scala/org/marvin/util/ConfigurationContext.scala b/engine-server/src/main/scala/org/marvin/util/ConfigurationContext.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/util/ConfigurationContext.scala
rename to engine-server/src/main/scala/org/marvin/util/ConfigurationContext.scala
diff --git a/engine-executor/src/main/scala/org/marvin/util/JsonUtil.scala b/engine-server/src/main/scala/org/marvin/util/JsonUtil.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/util/JsonUtil.scala
rename to engine-server/src/main/scala/org/marvin/util/JsonUtil.scala
diff --git a/engine-executor/src/main/scala/org/marvin/util/LocalCache.scala b/engine-server/src/main/scala/org/marvin/util/LocalCache.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/util/LocalCache.scala
rename to engine-server/src/main/scala/org/marvin/util/LocalCache.scala
diff --git a/engine-executor/src/main/scala/org/marvin/util/ProtocolUtil.scala b/engine-server/src/main/scala/org/marvin/util/ProtocolUtil.scala
similarity index 100%
rename from engine-executor/src/main/scala/org/marvin/util/ProtocolUtil.scala
rename to engine-server/src/main/scala/org/marvin/util/ProtocolUtil.scala
diff --git a/engine-executor/src/main/resources/EngineActionSchema.json b/engine-server/src/test/resources/EngineActionSchema.json
similarity index 100%
rename from engine-executor/src/main/resources/EngineActionSchema.json
rename to engine-server/src/test/resources/EngineActionSchema.json
diff --git a/engine-executor/src/main/resources/EngineMetadataSchema.json b/engine-server/src/test/resources/EngineMetadataSchema.json
similarity index 100%
rename from engine-executor/src/main/resources/EngineMetadataSchema.json
rename to engine-server/src/test/resources/EngineMetadataSchema.json
diff --git a/engine-executor/src/test/resources/application.conf b/engine-server/src/test/resources/application.conf
similarity index 100%
rename from engine-executor/src/test/resources/application.conf
rename to engine-server/src/test/resources/application.conf
diff --git a/engine-executor/src/test/resources/engine_home/docs.yaml b/engine-server/src/test/resources/engine_home/docs.yaml
similarity index 100%
rename from engine-executor/src/test/resources/engine_home/docs.yaml
rename to engine-server/src/test/resources/engine_home/docs.yaml
diff --git a/engine-executor/src/test/resources/engine_home/engine.metadata b/engine-server/src/test/resources/engine_home/engine.metadata
similarity index 100%
rename from engine-executor/src/test/resources/engine_home/engine.metadata
rename to engine-server/src/test/resources/engine_home/engine.metadata
diff --git a/engine-executor/src/test/resources/engine_home/engine.params b/engine-server/src/test/resources/engine_home/engine.params
similarity index 100%
rename from engine-executor/src/test/resources/engine_home/engine.params
rename to engine-server/src/test/resources/engine_home/engine.params
diff --git a/engine-executor/src/test/resources/engine_home/predictor-message.schema b/engine-server/src/test/resources/engine_home/predictor-message.schema
similarity index 100%
rename from engine-executor/src/test/resources/engine_home/predictor-message.schema
rename to engine-server/src/test/resources/engine_home/predictor-message.schema
diff --git a/engine-executor/src/test/resources/metadataToValidate.json b/engine-server/src/test/resources/metadataToValidate.json
similarity index 100%
rename from engine-executor/src/test/resources/metadataToValidate.json
rename to engine-server/src/test/resources/metadataToValidate.json
diff --git a/engine-executor/src/test/resources/metadataToValidateWithError.json b/engine-server/src/test/resources/metadataToValidateWithError.json
similarity index 100%
rename from engine-executor/src/test/resources/metadataToValidateWithError.json
rename to engine-server/src/test/resources/metadataToValidateWithError.json
diff --git a/engine-executor/src/test/resources/metadataToValidateWithRefError.json b/engine-server/src/test/resources/metadataToValidateWithRefError.json
similarity index 100%
rename from engine-executor/src/test/resources/metadataToValidateWithRefError.json
rename to engine-server/src/test/resources/metadataToValidateWithRefError.json
diff --git a/engine-executor/src/test/resources/test-invalid.json b/engine-server/src/test/resources/test-invalid.json
similarity index 100%
rename from engine-executor/src/test/resources/test-invalid.json
rename to engine-server/src/test/resources/test-invalid.json
diff --git a/engine-executor/src/test/resources/test.json b/engine-server/src/test/resources/test.json
similarity index 100%
rename from engine-executor/src/test/resources/test.json
rename to engine-server/src/test/resources/test.json
diff --git a/engine-executor/src/test/scala/org/marvin/artifact/manager/ArtifactS3SaverTest.scala b/engine-server/src/test/scala/org/marvin/artifact/manager/ArtifactS3SaverTest.scala
similarity index 100%
rename from engine-executor/src/test/scala/org/marvin/artifact/manager/ArtifactS3SaverTest.scala
rename to engine-server/src/test/scala/org/marvin/artifact/manager/ArtifactS3SaverTest.scala
diff --git a/engine-executor/src/test/scala/org/marvin/artifact/manager/ArtifactSaverTest.scala b/engine-server/src/test/scala/org/marvin/artifact/manager/ArtifactSaverTest.scala
similarity index 100%
rename from engine-executor/src/test/scala/org/marvin/artifact/manager/ArtifactSaverTest.scala
rename to engine-server/src/test/scala/org/marvin/artifact/manager/ArtifactSaverTest.scala
diff --git a/engine-executor/src/test/scala/org/marvin/executor/EngineExecutorAppTest.scala b/engine-server/src/test/scala/org/marvin/executor/EngineExecutorAppTest.scala
similarity index 100%
rename from engine-executor/src/test/scala/org/marvin/executor/EngineExecutorAppTest.scala
rename to engine-server/src/test/scala/org/marvin/executor/EngineExecutorAppTest.scala
diff --git a/engine-executor/src/test/scala/org/marvin/executor/actions/BatchActionTest.scala b/engine-server/src/test/scala/org/marvin/executor/actions/BatchActionTest.scala
similarity index 100%
rename from engine-executor/src/test/scala/org/marvin/executor/actions/BatchActionTest.scala
rename to engine-server/src/test/scala/org/marvin/executor/actions/BatchActionTest.scala
diff --git a/engine-executor/src/test/scala/org/marvin/executor/actions/OnlineActionTest.scala b/engine-server/src/test/scala/org/marvin/executor/actions/OnlineActionTest.scala
similarity index 100%
rename from engine-executor/src/test/scala/org/marvin/executor/actions/OnlineActionTest.scala
rename to engine-server/src/test/scala/org/marvin/executor/actions/OnlineActionTest.scala
diff --git a/engine-executor/src/test/scala/org/marvin/executor/api/GenericAPITest.scala b/engine-server/src/test/scala/org/marvin/executor/api/GenericAPITest.scala
similarity index 100%
rename from engine-executor/src/test/scala/org/marvin/executor/api/GenericAPITest.scala
rename to engine-server/src/test/scala/org/marvin/executor/api/GenericAPITest.scala
diff --git a/engine-executor/src/test/scala/org/marvin/executor/manager/ExecutorManagerTest.scala b/engine-server/src/test/scala/org/marvin/executor/manager/ExecutorManagerTest.scala
similarity index 100%
rename from engine-executor/src/test/scala/org/marvin/executor/manager/ExecutorManagerTest.scala
rename to engine-server/src/test/scala/org/marvin/executor/manager/ExecutorManagerTest.scala
diff --git a/engine-executor/src/test/scala/org/marvin/executor/proxies/BatchActionProxyTest.scala b/engine-server/src/test/scala/org/marvin/executor/proxies/BatchActionProxyTest.scala
similarity index 100%
rename from engine-executor/src/test/scala/org/marvin/executor/proxies/BatchActionProxyTest.scala
rename to engine-server/src/test/scala/org/marvin/executor/proxies/BatchActionProxyTest.scala
diff --git a/engine-executor/src/test/scala/org/marvin/executor/proxies/OnlineActionProxyTest.scala b/engine-server/src/test/scala/org/marvin/executor/proxies/OnlineActionProxyTest.scala
similarity index 100%
rename from engine-executor/src/test/scala/org/marvin/executor/proxies/OnlineActionProxyTest.scala
rename to engine-server/src/test/scala/org/marvin/executor/proxies/OnlineActionProxyTest.scala
diff --git a/engine-executor/src/test/scala/org/marvin/executor/statemachine/PredictorFSMTest.scala b/engine-server/src/test/scala/org/marvin/executor/statemachine/PredictorFSMTest.scala
similarity index 100%
rename from engine-executor/src/test/scala/org/marvin/executor/statemachine/PredictorFSMTest.scala
rename to engine-server/src/test/scala/org/marvin/executor/statemachine/PredictorFSMTest.scala
diff --git a/engine-executor/src/test/scala/org/marvin/fixtures/MetadataMock.scala b/engine-server/src/test/scala/org/marvin/fixtures/MetadataMock.scala
similarity index 100%
rename from engine-executor/src/test/scala/org/marvin/fixtures/MetadataMock.scala
rename to engine-server/src/test/scala/org/marvin/fixtures/MetadataMock.scala
diff --git a/engine-executor/src/test/scala/org/marvin/util/JsonUtilTest.scala b/engine-server/src/test/scala/org/marvin/util/JsonUtilTest.scala
similarity index 100%
rename from engine-executor/src/test/scala/org/marvin/util/JsonUtilTest.scala
rename to engine-server/src/test/scala/org/marvin/util/JsonUtilTest.scala
diff --git a/engine-executor/src/test/scala/org/marvin/util/LocalCacheTest.scala b/engine-server/src/test/scala/org/marvin/util/LocalCacheTest.scala
similarity index 100%
rename from engine-executor/src/test/scala/org/marvin/util/LocalCacheTest.scala
rename to engine-server/src/test/scala/org/marvin/util/LocalCacheTest.scala
diff --git a/engine-executor/src/test/scala/org/marvin/util/ProtocolUtilTest.scala b/engine-server/src/test/scala/org/marvin/util/ProtocolUtilTest.scala
similarity index 100%
rename from engine-executor/src/test/scala/org/marvin/util/ProtocolUtilTest.scala
rename to engine-server/src/test/scala/org/marvin/util/ProtocolUtilTest.scala
diff --git a/python-toolbox/.dev b/python-toolbox/.dev
new file mode 100644
index 0000000..e69de29
diff --git a/python-toolbox/setup.py b/python-toolbox/setup.py
index 8e4526d..820953e 100644
--- a/python-toolbox/setup.py
+++ b/python-toolbox/setup.py
@@ -77,7 +77,8 @@ REQUIREMENTS_EXTERNAL = [
     'joblib>=0.11',
     'autopep8>=1.3.3',
     'progressbar2>=3.34.3',
-    'urllib3>=1.21.1',
+    'urllib3==1.21.1',
+    'unidecode==1.0.23',
     'idna>=2.5',
     'bleach>=1.5.0',
     'numpy==1.13.3'