First Release

This commit is contained in:
giancarlo 2020-10-16 17:22:37 +02:00
commit 11dee73b0f
6 changed files with 245 additions and 0 deletions

52
Dockerfile Normal file
View File

@ -0,0 +1,52 @@
# Dockerfile
#
# version: 1.0
# author: Giancarlo Panichi
# date: 2020/10/09
# R images
# see for more image:
# https://hub.docker.com/u/rocker/
#
# Version-stable build of R, rstudio, and R packages ~2.48GB
# FROM rocker/tidyverse:latest
#
# In this case I will use the r-base image by adding some debian packages
# necessary for the correct build of the image.
# In this case I will obtain an image of ~1.2GB.
# Better ad-hoc solutions can be found to reduce the image size.
#
# Base Version ~824MB
FROM rocker/r-base:latest
RUN apt-get update -qq && apt-get -y --no-install-recommends install \
libssl-dev \
libxml2-dev \
libcairo2-dev \
libssh2-1-dev \
libsasl2-dev \
libcurl4-openssl-dev
## create directories
RUN mkdir -p /code
WORKDIR /code
RUN mkdir -p src
## copy files
COPY /src/* src/
COPY sortapp .
RUN chmod +x sortapp
## install R-packages
RUN Rscript src/install_packages.R
## create a link
WORKDIR /
RUN ln -sf /code/sortapp /usr/bin/sortapp
# RUN Script
# CMD sortapp

58
README.md Normal file
View File

@ -0,0 +1,58 @@
# SortAppR
SortAppR is a simple example that allows you to sort a file in input.
Starting from this example, you can first create an simple script R and then a docker image in which it is installed the created script.
This example declare the sortapp command as entrypoint.
So once you can use this command at command line to run the example:
```
sortapp <token> <file-item-id> <temp-dir-item-id>
```
The image created in this way can be executed in a container with the following command:
```
docker run -i -t --rm --name sortappr-cont sortappr sortapp <token> <file-item-id> <temp-dir-item-id>
```
To be able to create an image from this application you need to have Docker and Docker-Compose installed on your machine and the relative python packages, see:
[Docker](https://docs.docker.com/engine/),
[Docker-Compose](https://docs.docker.com/compose/install/) and
[Docker Package for Python](https://pypi.org/project/docker/).
## Useful Commands
### Create Docker Image
```
docker build -t sortappr .
```
### Save Docker Image in file
```
docker save sortappr | gzip > sortappr.tar.gz
```
### Publish Docker Image on DockerHub
Re-tagging an existing local image:
```
docker tag sortappr <hub-user>/<repo-name>[:<tag>]
```
Login in DockerHub(use your Docker ID):
```
docker login
```
Now you can push this repository to the registry designated by its name or tag:
```
docker push <hub-user>/<repo-name>:<tag>
```
Then logout for security:
```
docker logout
```

14
sortapp Executable file
View File

@ -0,0 +1,14 @@
#!/bin/bash
#
# SortApp
#
# version: 1.0
# author: Giancarlo Panichi
# date: 2020/10/09
#
echo "Run Rscript"
echo "Token: " $1
echo "FileItemId: " $2
echo "TempFolderItemId" $3
Rscript /code/src/sortapp.R $1 $2 $3

62
src/StorageHubCL.R Normal file
View File

@ -0,0 +1,62 @@
#
# StorageHubCL.R
#
# version: 1.0
# author: Giancarlo Panichi
# date: 2020/10/09
# GoogleVIS is very verbose
#suppressPackageStartupMessages(library(googleVis))
library(XML)
require(XML)
library(jsonlite)
library(stringr)
library(httr)
require("httr")
discoverStorageHub<-function(){
urlString = paste("http://registry.d4science.org/icproxy/gcube/service/GCoreEndpoint/DataAccess/StorageHub?gcube-token=",token,sep="")
got<-GET(urlString, timeout(1*3600))
xmlfile <- xmlTreeParse(got)
class(xmlfile)
xmltop = xmlRoot(xmlfile)
listxpath = xpathSApply(xmltop, "//Results/Result")
print(listxpath)
listx<-(rapply(listxpath, function(x) head(x, 1)))
if (length(listx)>0){
storagehubEP<<-as.character(listx[which(listx=="Endpoint")[[1]]+3])
}else{
cat("Found no storage ub endpoint\n")
}
}
downloadSH<-function(itemid,filename){
cat("About to download",itemid,"\n")
cat("Downloading...\n")
reqDownload<<-paste(sep="",storagehubEP,"/items/",itemid,"/download?exclude=hl:accounting&gcube-token=",token);
download.file(url = reqDownload, destfile = filename, method="wget", quiet = T, mode = "w",cacheOK = FALSE)
cat("All done.\n")
}
uploadSH<-function(folderitemid,localfilename,filename, descr){
cat("About to upload: [folder=",folderitemid,", filename=",filename,"\n")
cat("Uploading...\n")
reqUpload<<-paste(storagehubEP,"/items/",folderitemid,"/create/FILE?gcube-token=",token,sep="");
print(reqUpload)
res<-POST(reqUpload,
body=list(name=filename, description=descr, file=upload_file(localfilename)),
add_headers("Content-Type" = "multipart/form-data"),
verbose())
print(res)
cat("All done.\n")
}

13
src/install_packages.R Normal file
View File

@ -0,0 +1,13 @@
# Install Packages
#
# Uncomment and add necessary packages
#
#install.packages("devtools", repos = "http://cran.rstudio.com/",dependencies=TRUE)
#install.packages("dplyr", dependencies=TRUE)
#install.packages("ggplot2", dependencies=TRUE)
#install.packages("forcats", dependencies=TRUE)
install.packages("XML", dependencies=TRUE)
install.packages("jsonline", dependencies=TRUE)
install.packages("stringr", dependencies=TRUE)
install.packages("httr", dependencies=TRUE)

46
src/sortapp.R Normal file
View File

@ -0,0 +1,46 @@
#
# SortAppr.R
#
# version: 1.0
# author: Giancarlo Panichi
# date: 2020/10/09
print("Start SortApp.R")
args <- commandArgs(trailingOnly = TRUE)
print(args)
print(paste("current dir: ",getwd()),sep="")
setwd("/code/src")
print(paste("working dir: ",getwd()),sep="")
source("StorageHubCL.R")
token<-args[1]
itemid<-args[2]
tempfolderitemid<-args[3]
filename<-"sortableelements.txt"
discoverStorageHub()
downloadSH(itemid,filename)
print("Read from SH...")
print("Read data from file...")
df <- read.table("sortableelements.txt",header = FALSE)
print("Sort data...")
df <- df[order(df[,1]),]
print(df)
print("Write data to file...")
write.table(df, "result.txt", append = FALSE, sep = " ", dec = ".",
row.names = FALSE, col.names = FALSE)
print("Save on SH...")
uploadSH(tempfolderitemid,"result.txt","result.txt","SortApp result")
print("SortApp.R done")