-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
variables: | ||
APP_NAME_FRONT: rnaget-nginx | ||
APP_NAME_BACK: rnaget-server | ||
BASE_PATH: /rnaget-beacon | ||
|
||
stages: | ||
- build | ||
- deploy | ||
|
||
build_containers: | ||
only: | ||
- master | ||
|
||
tags: | ||
- docker | ||
- monstre | ||
|
||
stage: build | ||
image: docker:latest | ||
|
||
before_script: | ||
- echo $CI_REGISTRY_PASSWORD | docker login $CI_REGISTRY -u $CI_REGISTRY_USER --password-stdin | ||
|
||
script: | ||
- docker build --build-arg BASE_PATH="$BASE_PATH" -t gitlab.linux.crg.es:5005/monstre/rnaget-implementation/$APP_NAME_FRONT ./nginx | ||
- docker push gitlab.linux.crg.es:5005/monstre/rnaget-implementation/$APP_NAME_FRONT | ||
- docker build -t gitlab.linux.crg.es:5005/monstre/rnaget-implementation/$APP_NAME_BACK ./server | ||
- docker push gitlab.linux.crg.es:5005/monstre/rnaget-implementation/$APP_NAME_BACK | ||
|
||
deploy_containers: | ||
stage: deploy | ||
tags: | ||
- shell | ||
- monstre | ||
script: | ||
- cat $ENV_FILE > .env | ||
- docker-compose -f docker-compose.yml down -v | ||
- docker-compose -f docker-compose.yml up -d |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
html { | ||
box-sizing: border-box; | ||
overflow: -moz-scrollbars-vertical; | ||
overflow-y: scroll; | ||
} | ||
|
||
*, | ||
*:before, | ||
*:after { | ||
box-sizing: inherit; | ||
} | ||
|
||
body { | ||
margin: 0; | ||
background: #fafafa; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
<!doctype html> | ||
<html lang="en-US"> | ||
<head> | ||
<title>Swagger UI: OAuth2 Redirect</title> | ||
</head> | ||
<body> | ||
<script> | ||
'use strict'; | ||
function run () { | ||
var oauth2 = window.opener.swaggerUIRedirectOauth2; | ||
var sentState = oauth2.state; | ||
var redirectUrl = oauth2.redirectUrl; | ||
var isValid, qp, arr; | ||
|
||
if (/code|token|error/.test(window.location.hash)) { | ||
qp = window.location.hash.substring(1).replace('?', '&'); | ||
} else { | ||
qp = location.search.substring(1); | ||
} | ||
|
||
arr = qp.split("&"); | ||
arr.forEach(function (v,i,_arr) { _arr[i] = '"' + v.replace('=', '":"') + '"';}); | ||
qp = qp ? JSON.parse('{' + arr.join() + '}', | ||
function (key, value) { | ||
return key === "" ? value : decodeURIComponent(value); | ||
} | ||
) : {}; | ||
|
||
isValid = qp.state === sentState; | ||
|
||
if (( | ||
oauth2.auth.schema.get("flow") === "accessCode" || | ||
oauth2.auth.schema.get("flow") === "authorizationCode" || | ||
oauth2.auth.schema.get("flow") === "authorization_code" | ||
) && !oauth2.auth.code) { | ||
if (!isValid) { | ||
oauth2.errCb({ | ||
authId: oauth2.auth.name, | ||
source: "auth", | ||
level: "warning", | ||
message: "Authorization may be unsafe, passed state was changed in server. The passed state wasn't returned from auth server." | ||
}); | ||
} | ||
|
||
if (qp.code) { | ||
delete oauth2.state; | ||
oauth2.auth.code = qp.code; | ||
oauth2.callback({auth: oauth2.auth, redirectUrl: redirectUrl}); | ||
} else { | ||
let oauthErrorMsg; | ||
if (qp.error) { | ||
oauthErrorMsg = "["+qp.error+"]: " + | ||
(qp.error_description ? qp.error_description+ ". " : "no accessCode received from the server. ") + | ||
(qp.error_uri ? "More info: "+qp.error_uri : ""); | ||
} | ||
|
||
oauth2.errCb({ | ||
authId: oauth2.auth.name, | ||
source: "auth", | ||
level: "error", | ||
message: oauthErrorMsg || "[Authorization failed]: no accessCode received from the server." | ||
}); | ||
} | ||
} else { | ||
oauth2.callback({auth: oauth2.auth, token: qp, isValid: isValid, redirectUrl: redirectUrl}); | ||
} | ||
window.close(); | ||
} | ||
|
||
if (document.readyState !== 'loading') { | ||
run(); | ||
} else { | ||
document.addEventListener('DOMContentLoaded', function () { | ||
run(); | ||
}); | ||
} | ||
</script> | ||
</body> | ||
</html> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
window.onload = function() { | ||
//<editor-fold desc="Changeable Configuration Block"> | ||
|
||
// the following lines will be replaced by docker/configurator, when it runs in a docker-container | ||
window.ui = SwaggerUIBundle({ | ||
url: "rnaget-beacon-schema.yaml", | ||
dom_id: '#swagger-ui', | ||
deepLinking: true, | ||
presets: [ | ||
SwaggerUIBundle.presets.apis, | ||
SwaggerUIStandalonePreset | ||
], | ||
plugins: [ | ||
SwaggerUIBundle.plugins.DownloadUrl | ||
], | ||
layout: "StandaloneLayout" | ||
}); | ||
|
||
//</editor-fold> | ||
}; |
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Large diffs are not rendered by default.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,65 +1,75 @@ | ||
version: '3' | ||
|
||
services: | ||
|
||
nginx: | ||
build: | ||
context: ./nginx | ||
dockerfile: Dockerfile | ||
args: | ||
- BASE_PATH=$BASE_PATH | ||
container_name: ${NGINX_HOST} | ||
restart: always | ||
environment: | ||
- API_PORT=${API_PORT} | ||
- API_HOST=${API_HOST} | ||
- BASE_PATH=${BASE_PATH} | ||
ports: | ||
- "94:${API_PORT}" | ||
|
||
mongo: | ||
rnaget-mongo: | ||
image: mongo:6.0 | ||
container_name: "${DB_HOST}" | ||
env_file: | ||
- .env | ||
restart: always | ||
volumes: | ||
- ./mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh | ||
- mongodb-data:${MONGODB_DATA_DIR} | ||
- /data/rnaget-data:/data/db | ||
ports: | ||
- "${DB_PORT}:27017" | ||
networks: | ||
- monstre | ||
|
||
rnaget-nginx: | ||
image: gitlab.linux.crg.es:5005/monstre/rnaget-implementation/rnaget-nginx | ||
container_name: ${NGINX_HOST} | ||
restart: always | ||
environment: | ||
- API_PORT=${API_PORT} | ||
- API_HOST=${API_HOST} | ||
- BASE_PATH=${BASE_PATH} | ||
labels: | ||
- "traefik.enable=true" | ||
- "traefik.http.routers.rnaget-nginx.rule=(Host(`genome.crg.es`) || Host(`genome.crg.cat`) || Host(`genome.crg.eu`)) && PathPrefix(`/rnaget-beacon`)" | ||
- "traefik.http.routers.rnaget-nginx.tls=true" | ||
- "traefik.http.routers.rnaget-nginx.entrypoints=web_https" | ||
- "traefik.http.services.rnaget-nginx.loadBalancer.server.port=80" | ||
ports: | ||
- "94:${API_PORT}" | ||
networks: | ||
- monstre | ||
|
||
server: | ||
build: ./server | ||
rnaget-server: | ||
image: gitlab.linux.crg.es:5005/monstre/rnaget-implementation/rnaget-server | ||
container_name: ${API_HOST} | ||
restart: always | ||
volumes: | ||
- ./server:/server | ||
env_file: | ||
- .env | ||
depends_on: | ||
- redis | ||
ports: | ||
- "5000:5000" # Expose | ||
- rnaget-redis | ||
networks: | ||
- monstre | ||
|
||
celery: | ||
build: ./server | ||
rnaget-celery: | ||
image: gitlab.linux.crg.es:5005/monstre/rnaget-implementation/rnaget-server | ||
command: celery --app app.celery_app worker --loglevel=info --autoscale=1,1 --max-tasks-per-child=1 | ||
restart: always | ||
volumes: | ||
- ./server:/server | ||
env_file: | ||
- .env | ||
depends_on: | ||
- server | ||
- mongo | ||
- redis | ||
- rnaget-server | ||
- rnaget-mongo | ||
- rnaget-redis | ||
networks: | ||
- monstre | ||
|
||
redis: | ||
rnaget-redis: | ||
image: "redis:alpine" | ||
|
||
volumes: | ||
app: | ||
mongodb-data: | ||
node_modules: | ||
shared_files: | ||
expose: | ||
- "6378" | ||
networks: | ||
- monstre | ||
networks: | ||
monstre: | ||
external: | ||
name: monstre |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
<!-- HTML for static distribution bundle build --> | ||
<!DOCTYPE html> | ||
<html lang="en"> | ||
<head> | ||
<meta charset="UTF-8"> | ||
<title>Swagger UI</title> | ||
<link rel="stylesheet" type="text/css" href="dist/swagger-ui.css" /> | ||
<link rel="stylesheet" type="text/css" href="index.css" /> | ||
<link rel="icon" type="image/png" href="dist/favicon-32x32.png" sizes="32x32" /> | ||
<link rel="icon" type="image/png" href="dist/favicon-16x16.png" sizes="16x16" /> | ||
</head> | ||
|
||
<body> | ||
<div id="swagger-ui"></div> | ||
<script src="dist/swagger-ui-bundle.js" charset="UTF-8"> </script> | ||
<script src="dist/swagger-ui-standalone-preset.js" charset="UTF-8"> </script> | ||
<script src="dist/swagger-initializer.js" charset="UTF-8"> </script> | ||
</body> | ||
</html> |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,15 @@ | ||
openapi: 3.0.0 | ||
|
||
info: | ||
version: "2.0.0" | ||
version: "1.0.0" | ||
title: "RNAget Extension for BeaconV2 API" | ||
contact: | ||
email: "[email protected]" | ||
|
||
servers: | ||
- url: https://genome.crg.es/rnaget-beacon/api | ||
description: Demo server containing some gene expression data to test rnaget-beaconV2 API implementation | ||
|
||
tags: | ||
- name: "matrices" | ||
- name: "features" | ||
|
@@ -348,12 +352,65 @@ paths: | |
data: | ||
type: "array" | ||
items: | ||
$ref: "#/components/schemas/BioSample" | ||
$ref: "#/components/schemas/ExpressionValue" | ||
total: | ||
type: "number" | ||
"404": | ||
description: "Matrix not found" | ||
|
||
post: | ||
tags: | ||
- "matrices" | ||
summary: "Endpoint to retrieve a paginated list of expression values from a matrix id" | ||
parameters: | ||
- in: "path" | ||
name: "id" | ||
required: true | ||
schema: | ||
type: "string" | ||
requestBody: | ||
required: true | ||
content: | ||
application/json: | ||
schema: | ||
type: "object" | ||
properties: | ||
skip: | ||
type: "number" | ||
default: 0 | ||
description: "Number of records to skip for pagination" | ||
limit: | ||
type: "number" | ||
default: 10 | ||
description: "Maximum number of records to return" | ||
featureIDList: | ||
type: "string" | ||
description: "Comma-separated list of feature IDs to filter the results" | ||
biosampleIDList: | ||
type: "string" | ||
description: "Comma-separated list of biosample IDs to filter the results" | ||
maxValue: | ||
type: "number" | ||
description: "Maximum expression count value to filter in the results" | ||
minValue: | ||
type: "number" | ||
description: "Minimum expression count value to filter in the results" | ||
responses: | ||
"200": | ||
description: "successful operation" | ||
content: | ||
application/json: | ||
schema: | ||
type: "object" | ||
properties: | ||
data: | ||
type: "array" | ||
items: | ||
$ref: "#/components/schemas/ExpressionValue" | ||
total: | ||
type: "number" | ||
"404": | ||
description: "Matrix not found" | ||
|
||
components: | ||
schemas: | ||
|