├── .gitignore ├── AUTHORS ├── LICENSE ├── README.md ├── VERSION ├── client └── src │ ├── app │ ├── admin │ │ ├── admin-page.tpl.html │ │ ├── history-list-dir.js │ │ ├── history-list-service.js │ │ └── setting-list-controller.js │ ├── app.js │ ├── datasets │ │ ├── dataset-collection-create-panel.tpl.html │ │ ├── dataset-collection-list.tpl.html │ │ ├── dataset-irods-pull.tpl.html │ │ ├── dataset-list-controller.js │ │ ├── dataset-list-dir.js │ │ ├── dataset-list.tpl.html │ │ ├── dataset-selector-dialog.tpl.html │ │ └── dataset-upload.tpl.html │ ├── histories │ │ ├── history-list-controller.js │ │ ├── history-list-dir.js │ │ ├── history-list-service.js │ │ ├── history-list.tpl.html │ │ └── history-page.tpl.html │ ├── home │ │ └── home.tpl.html │ ├── users │ │ ├── user-session-controller.js │ │ ├── user-session-dir.js │ │ └── user-sign-in.tpl.html │ └── workflows │ │ ├── workflow-card-dir.js │ │ ├── workflow-card.tpl.html │ │ ├── workflow-detail.tpl.html │ │ ├── workflow-invocation-panel.tpl.html │ │ ├── workflow-invocation-toolbar.tpl.html │ │ ├── workflow-list-controller.js │ │ ├── workflow-list-dir.js │ │ ├── workflow-list-service.js │ │ ├── workflow-list.tpl.html │ │ ├── workflow-run-controller.js │ │ ├── workflow-run-dir.js │ │ ├── workflow-run-service.js │ │ ├── workflow-run-step.tpl.html │ │ └── workflow-run.tpl.html │ ├── common │ ├── resources │ │ ├── API-REQUEST-EXAMPLES.js │ │ ├── common.js │ │ └── error-message.tpl.html │ └── services │ │ └── toArrayFilter.js │ ├── css │ ├── angular-dialogs.min.css │ ├── bootstrap-dialogs.min.css │ ├── bootstrap-sortable.css │ ├── bootstrap.min.css │ ├── galaksio_logo.xcf │ ├── galaksio_logo_2.xcf │ ├── galaxy_logo.png │ ├── galaxy_logo2.png │ ├── home_back_science.png │ ├── invocation_error.png │ ├── invocation_new.png │ ├── invocation_sending.png │ ├── invocation_success.png │ ├── invocation_waiting.png │ ├── invocation_working.gif │ ├── invocation_working.png │ ├── main.css │ └── paintomics_white_300x66.png │ ├── favicon.ico │ ├── favicon.png │ ├── fonts │ ├── FontAwesome.otf │ ├── LICENSE.txt │ ├── OpenSans-Bold.ttf │ ├── OpenSans-BoldItalic.ttf │ ├── OpenSans-ExtraBold.ttf │ ├── OpenSans-ExtraBoldItalic.ttf │ ├── OpenSans-Italic.ttf │ ├── OpenSans-Light.ttf │ ├── OpenSans-LightItalic.ttf │ ├── OpenSans-Regular.ttf │ ├── OpenSans-Semibold.ttf │ ├── OpenSans-SemiboldItalic.ttf │ ├── font-awesome.min.css │ ├── fontawesome-webfont.eot │ ├── fontawesome-webfont.svg │ ├── fontawesome-webfont.ttf │ ├── fontawesome-webfont.woff │ ├── fontawesome-webfont.woff2 │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ └── glyphicons-halflings-regular.woff2 │ ├── index.html │ ├── install.html │ └── lib │ ├── angular-backtop.min.js │ ├── angular-dialogs.min.js │ ├── angular-draganddrop.min.js │ ├── angular-sanitize.min.js │ ├── angular-scrollspy.min.js │ ├── angular-ui-router.min.js │ ├── angular.min.js │ ├── bootstrap-extensions.js │ ├── bootstrap-sortable.js │ ├── bootstrap.min.js │ ├── dagre.min.js │ ├── jquery.min.js │ ├── js.cookie.js │ ├── sigma.customEdgeShapes.min.js │ ├── sigma.customShapes.min.js │ ├── sigma.min.js │ ├── sigma.plugins.min.js │ └── ui-bootstrap-tpls-1.3.2.min.js ├── docker ├── Dockerfile ├── LICENSE ├── README.md ├── configs │ ├── entrypoint.sh │ ├── galaksio.wsgi │ └── httpd.conf ├── docker-compose-template-with-galaxy.yml ├── docker-compose-template.yml ├── docker-compose-with-galaxy.yml └── docker-compose.yml ├── docs ├── 1_1_galaxy.md ├── 1_1_galaxy │ ├── galaksio_logo.png │ ├── galaksio_screenshot.png │ └── galaxy_screenshot.png ├── 1_2_concepts.md ├── 1_2_concepts │ ├── galaksio_logo.png │ ├── galaxy_histories.png │ └── galaxy_workflows.png ├── 1_3_install.md ├── 1_3_install │ └── galaksio_logo.png ├── 1_4_quick_start.md ├── 1_4_quick_start │ ├── galaksio_logo.png │ └── video.png ├── 2_1_users.md ├── 2_1_users │ ├── galaksio_logo.png │ ├── galaksio_users_1.png │ └── galaksio_users_2.png ├── 3_1_histories.md ├── 3_1_histories │ ├── galaksio_logo.png │ └── histories_1.png ├── 3_2_histories.md ├── 3_2_histories │ ├── galaksio_logo.png │ └── histories_2.png ├── 3_3_histories.md ├── 3_3_histories │ ├── galaksio_logo.png │ ├── histories_3.png │ ├── histories_4.png │ ├── histories_5.png │ └── histories_6.png ├── 4_1_workflows.md ├── 4_1_workflows │ ├── galaksio_logo.png │ ├── workflows1.png │ └── workflows2.png ├── 4_2_workflows.md ├── 4_2_workflows │ ├── galaksio_logo.png │ ├── worflows1.png │ ├── worflows2.png │ ├── worflows3.png │ ├── worflows4.png │ ├── worflows5.png │ └── worflows6.png ├── 5_use_case.md ├── 5_use_case │ └── galaksio_logo.png ├── 6_license.md ├── 6_license │ ├── ECH2020.png │ ├── galaksio_logo.png │ ├── gplv3-127x51.png │ └── logoB3Africa400x300.jpg ├── ECH2020.png ├── galaksio_logo.png ├── index.md ├── index │ ├── ECH2020.png │ ├── galaksio_logo.png │ └── logoB3Africa400x300.jpg └── logoB3Africa400x300.jpg ├── mkdocs.yml ├── server ├── __init__.py ├── conf │ └── .dummy ├── launch_server.py ├── log │ └── .dummy ├── resources │ ├── __init__.py │ ├── example_serverconf.cfg │ └── logging.cfg ├── run.sh ├── server.py └── servlets │ ├── AdminFunctions.py │ ├── GalaxyAPI.py │ └── __init__.py └── setup.cfg /.gitignore: -------------------------------------------------------------------------------- 1 | server/venv 2 | server/.idea 3 | server/log/application.log 4 | server/conf/__init__.py 5 | server/conf/logging.cfg 6 | server/conf/server.cfg 7 | server/conf/server.cfg_back 8 | *.pyc 9 | .idea 10 | server/launch_server.pid 11 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | Galaksio has been developed as part of the B3Africa Project (http://www.b3africa.org/), which has received funding from the European Union’s Horizon 2020 research and innovation programme. The project’s 2 | consortium consists of 11 European and African partners. 3 | 4 | Galaksio is a web application which simplifies the usage of the Galaxy bioinformatics platform (https://usegalaxy.org/). 5 | 6 | - SVERIGES LANTBRUKSUNIVERSITET (SLU); Sweden 7 | - BIOBANKING AND BIOMOLECULAR RESOURCES RESEARCH INFRASTRUCTURE CONSORTIUM (BBMRI-ERIC); Austria 8 | - KAROLINSKA INSTITUTET (KI); Sweden 9 | - INSTITUTE OF HUMAN VIROLOGY NIGERIA; Nigeria 10 | - INTERNATIONAL LIVESTOCK RESEARCH INSTITUTE (ILRI); Kenya 11 | - INTERNATIONAL AGENCY FOR RESEARCH ON CANCER (IARC); France 12 | - MAKERERE UNIVERSITY (MAK); Uganda 13 | - MEDIZINISCHE UNIVERSITÄT GRAZ; Austria 14 | - STELLENBOSCH UNIVERSITY (SUN); South Africa 15 | - UNIVERSITY OF THE WESTERN CAPE (UWT); South Africa 16 | - UPPSALA UNIVERSITY (UU); Sweden 17 | 18 | Contributors: 19 | 20 | - Dr. Erik Bongcam-Rudloff (SLU), Project coordinator. 21 | - Tomas Klingström (SLU), coordinator for WP-4 [Bioinformatics]. 22 | - Rafael Hernández (SLU), main developer for WP-4. 23 | - Oskar Danielsson (SLU), developer WP-4 24 | 25 | Other contributors: 26 | - Gerrit Botha (UCT); South Africa 27 | - Zipho Mashologu (SANBI); South Africa 28 | - Peter van Heusden (SANBI); South Africa 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 | > An easy to use GUI for running Galaxy workflows. 6 | 7 | Galaksio is a web application that simplifies the usage of the Galaxy bioinformatics platform (https://usegalaxy.eu/). 8 | Galaksio provides a simple but complete UI for using Galaxy for biologists that require bioinformatics workflows to complete their research. 9 | Using the application, users can run any workflow implemented in the associated Galaxy instance in just few *clicks*. 10 | Besides, the rich user interface allows customizing the execution, uploading the necessary files, downloading the results, and executing several workflows simultaneously in the background. 11 | 12 | ![](./docs/1_1_galaxy/galaksio_screenshot.png) 13 | 14 | ### Quick start 15 | First install all dependencies. For example, the instructions for an Ubuntu 16.04 server would be: 16 | ```bash 17 | apt-get update 18 | apt-get install -y python-pip unzip wget 19 | pip install requests bioblend flask fpdf 20 | ``` 21 | 22 | Download and extract the [latest version](https://github.com/fikipollo/galaksio.git) of Galaksio from the GitHub repository. 23 | ```bash 24 | wget https://github.com/sgbc/galaksio/archive/master.zip 25 | unzip galaksio-latest.zip 26 | ``` 27 | 28 | Launch the Flask server. Your new Galaksio instance will be listening to port 8081. 29 | ```bash 30 | galaksio-latest/server/run.sh --start 31 | ``` 32 | 33 | By default Galaksio is configured to work with the official [Galaxy](https://usegalaxy.eu) instance.This and other options can be customized through the web application. The first time that you access to your Galaksio instance you will need to configure some of the main settings. 34 | 35 | ## Documentation 36 | Documentation for the project, including installation instructions, can be found at the ReadTheDocs platform: [http://galaksio.readthedocs.io/en/latest/](http://galaksio.readthedocs.io/en/latest/). 37 | 38 | ## Docker for Galaksio 39 | The Galaksio Docker Image is an easy distributable full-fledged Galaksio installation. 40 | The docker image for Galaksio can be found in the [docker hub](https://hub.docker.com/r/fikipollo/galaksio/). However, you can download the Dockerfile and other files from the [Github repository](https://github.com/fikipollo/galaksio-docker) 41 | 42 | ## About 43 | Galaksio has been developed by the [SLU Global Bioinformatics Centre](http://sgbc.slu.se/) at the Sveriges lantbruksuniversitet (Swedish University of Agricultural Sciences). 44 | This project is part of the B3Africa Project [http://www.b3africa.org/](http://www.b3africa.org/), which has received funding under grant agreement nr 654404 from the European Union’s Horizon 2020 research and innovation programme. 45 | **Galaksio** application is distributed under **GNU General Public License, Version 3.**. 46 | 47 | 48 | -------------------------------------------------------------------------------- /VERSION: -------------------------------------------------------------------------------- 1 | Galaksio v0.3.1 September 2017 2 | 3 | ## Version Log 4 | 5 | ** VERSION 0.3.1 September 2017 ** 6 | - Visual improvements. 7 | 8 | ** VERSION 0.3 September 2017 ** 9 | - Adding some error control logic and forcing the reload of the page after sign-out (will cancel automatically all the 10 | pending requests) to avoid error messages after signing out (Issue #2). 11 | - Now the panel showing the current invocation state shows also the state for each step in the workflow. Besides 12 | the results for the workflow execution are always shown even if the workflow failed. 13 | Additionally, the user can get more details for each step in the workflow and see the used parameters and other useful 14 | information (Issue #13 and #28). 15 | - Added a more developed method for form validation. Now erroneous fields are indicated at the top of the form and at 16 | the right of each invalid input with a red exclamation symbol. Besides, the application will autofocus the first 17 | invalid field (Issue #10 and #14). 18 | - Added support for "section" data types (Issue #11) 19 | - Upgraded the version of "AngularJS dialogs" library to support the Report button handler (Issue #12). 20 | - Added settings to configure a SMTP server in Galaksio and send the error report via email to the developers account. 21 | Alternatively, if not SMTP settings are provided, the report is forwarded to a main Galaksio server which will send 22 | the report by email (Issue #12). 23 | - Fixed some visual issues (Issue #17). 24 | - Display step name (if any) in data and data collection inputs (Issue #16). 25 | - Added +/- zoom button in workflow diagram, now mouse wheel is used only for scrolling (Issue #18). 26 | - Added affix support to history list, now the left panel scrolls down following the window (Issue #20). 27 | - Replaced yes/no checkboxes by 2 state button (Issue #22). 28 | - Replaced radio buttons by a drop-down menu (Issue #23). 29 | - Replaced multi-select fields by list of checkboxes (Issue #24). 30 | - Fixed to aggressive warning during input data (Issue #25) 31 | - Fixed issues with workflow execution state (erroneous "Finished" state after sending) (Issue #26 and #27) 32 | - Forced to recreate the forms when going back to step 2 during Workflow execution (Issue #31 and #29) 33 | - Added a "Read more" button in workflow description (workflow card) when description is too long (Issue #30). 34 | - Added tools for filtering the list of invocations. Besides, we have improved the performance when retrieving the 35 | list of invocations and their state (reduce the number of requests, avoid repeating requests,...). 36 | -------------------------------------------------------------------------------- /client/src/app/admin/history-list-dir.js: -------------------------------------------------------------------------------- 1 | /* 2 | * (C) Copyright 2016 SLU Global Bioinformatics Centre, SLU 3 | * (http://sgbc.slu.se) and the B3Africa Project (http://www.b3africa.org/). 4 | * 5 | * All rights reserved. This program and the accompanying materials 6 | * are made available under the terms of the GNU Lesser General Public License 7 | * (LGPL) version 3 which accompanies this distribution, and is available at 8 | * http://www.gnu.org/licenses/lgpl.html 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * Contributors: 16 | * Rafael Hernandez de Diego 17 | * Tomas Klingström 18 | * Erik Bongcam-Rudloff 19 | * and others. 20 | * 21 | * THIS FILE CONTAINS THE FOLLOWING MODULE DECLARATION 22 | * - history-list 23 | * 24 | */ 25 | (function(){ 26 | var app = angular.module('histories.directives.history-list', []); 27 | 28 | /***************************************************************************/ 29 | /*DIRECTIVES ***************************************************************/ 30 | /***************************************************************************/ 31 | 32 | app.directive("historyListPanel", function() { 33 | return { 34 | restrict: 'E', 35 | templateUrl: 'app/histories/history-list.tpl.html' 36 | }; 37 | }); 38 | 39 | })(); 40 | -------------------------------------------------------------------------------- /client/src/app/admin/history-list-service.js: -------------------------------------------------------------------------------- 1 | /* 2 | * (C) Copyright 2016 SLU Global Bioinformatics Centre, SLU 3 | * (http://sgbc.slu.se) and the B3Africa Project (http://www.b3africa.org/). 4 | * 5 | * All rights reserved. This program and the accompanying materials 6 | * are made available under the terms of the GNU Lesser General Public License 7 | * (LGPL) version 3 which accompanies this distribution, and is available at 8 | * http://www.gnu.org/licenses/lgpl.html 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * Contributors: 16 | * Rafael Hernandez de Diego 17 | * Tomas Klingström 18 | * Erik Bongcam-Rudloff 19 | * and others. 20 | * 21 | * THIS FILE CONTAINS THE FOLLOWING MODULE DECLARATION 22 | * - histories.services.history-list 23 | * 24 | */ 25 | (function(){ 26 | var app = angular.module('histories.services.history-list', []); 27 | 28 | app.factory("HistoryList", ['$rootScope', function($rootScope) { 29 | var histories = []; 30 | 31 | return { 32 | getHistories: function() { 33 | return histories; 34 | }, 35 | setHistories: function(_histories) { 36 | histories = _histories; 37 | return this; 38 | }, 39 | getHistory: function(history_id) { 40 | for(var i in histories){ 41 | if(histories[i].id === history_id){ 42 | return histories[i]; 43 | } 44 | } 45 | return null; 46 | }, 47 | }; 48 | }]); 49 | })(); 50 | -------------------------------------------------------------------------------- /client/src/app/admin/setting-list-controller.js: -------------------------------------------------------------------------------- 1 | /* 2 | * (C) Copyright 2016 SLU Global Bioinformatics Centre, SLU 3 | * (http://sgbc.slu.se) and the B3Africa Project (http://www.b3africa.org/). 4 | * 5 | * All rights reserved. This program and the accompanying materials 6 | * are made available under the terms of the GNU Lesser General Public License 7 | * (LGPL) version 3 which accompanies this distribution, and is available at 8 | * http://www.gnu.org/licenses/lgpl.html 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * Contributors: 16 | * Rafael Hernandez de Diego 17 | * Tomas Klingström 18 | * Erik Bongcam-Rudloff 19 | * and others. 20 | * 21 | * THIS FILE CONTAINS THE FOLLOWING MODULE DECLARATION 22 | * - AdminController 23 | * 24 | */ 25 | (function(){ 26 | var app = angular.module('admin.controllers.setting-list', [ 27 | 'ui.bootstrap', 28 | 'ang-dialogs', 29 | 'ui.router' 30 | ]); 31 | 32 | /****************************************************************************** 33 | * _____ ____ _ _ _______ _____ ____ _ _ ______ _____ _____ 34 | * / ____/ __ \| \ | |__ __| __ \ / __ \| | | | | ____| __ \ / ____| 35 | * | | | | | | \| | | | | |__) | | | | | | | | |__ | |__) | (___ 36 | * | | | | | | . ` | | | | _ /| | | | | | | | __| | _ / \___ \ 37 | * | |___| |__| | |\ | | | | | \ \| |__| | |____| |____| |____| | \ \ ____) | 38 | * \_____\____/|_| \_| |_| |_| \_\\____/|______|______|______|_| \_\_____/ 39 | * 40 | ******************************************************************************/ 41 | app.controller('AdminController', function($state, $rootScope, $scope, $http, $uibModal, $dialogs, APP_EVENTS){ 42 | /****************************************************************************** 43 | * ___ ___ _ _ _____ ___ ___ _ _ ___ ___ 44 | * / __/ _ \| \| |_ _| _ \/ _ \| | | | | __| _ \ 45 | * | (_| (_) | .` | | | | / (_) | |__| |__| _|| / 46 | * \___\___/|_|\_| |_|_|_|_\\___/|____|____|___|_|_\ 47 | * | __| | | | \| |/ __|_ _|_ _/ _ \| \| / __| 48 | * | _|| |_| | .` | (__ | | | | (_) | .` \__ \ 49 | * |_| \___/|_|\_|\___| |_| |___\___/|_|\_|___/ 50 | * 51 | ******************************************************************************/ 52 | 53 | /** 54 | * This function retrieves the current settings for the application. 55 | * 56 | * @chainable 57 | * @return {Object} the controller. 58 | */ 59 | this.retrieveSettings = function(){ 60 | //GET THE EXTRA INFORMATION FOR THE HISTORY (datasets) 61 | $http($rootScope.getHttpRequestConfig("GET", "setting-list")).then( 62 | function successCallback(response){ 63 | $scope.settings = response.data.settings; 64 | var regInteger = /^\d+$/; 65 | 66 | for(var i in $scope.settings){ 67 | //TRY TO PARSE AS A NUMBER 68 | if(regInteger.test($scope.settings[i])){ 69 | $scope.settings[i] = Number.parseInt($scope.settings[i]); 70 | }else if($scope.settings[i].toLowerCase && ($scope.settings[i].toLowerCase() === "true" || $scope.settings[i].toLowerCase() === "false")){ 71 | $scope.settings[i] = $scope.settings[i].toLowerCase() === "true"; 72 | } 73 | } 74 | 75 | if($scope.settings["AUTO_INSTALL"]){ 76 | me.updateSettingsHandler(); 77 | } 78 | }, 79 | function errorCallback(response){ 80 | debugger; 81 | var message = "Failed when retrieving the list of settings."; 82 | $dialogs.showErrorDialog(message, { 83 | logMessage : message + " at AdminController:retrieveSettings." 84 | }); 85 | console.error(response.data); 86 | document.location.replace("/"); 87 | } 88 | ); 89 | return this; 90 | }; 91 | 92 | /****************************************************************************** 93 | * _____ _____ _ _ _____ 94 | * | __\ \ / / __| \| |_ _| 95 | * | _| \ V /| _|| .` | | | 96 | * _ _ |___| \_/_|___|_|\_| |_| ___ ___ 97 | * | || | /_\ | \| | \| | | __| _ \/ __| 98 | * | __ |/ _ \| .` | |) | |__| _|| /\__ \ 99 | * |_||_/_/ \_\_|\_|___/|____|___|_|_\|___/ 100 | * 101 | ******************************************************************************/ 102 | 103 | /** 104 | * This function updates the settings for the server 105 | * 106 | * @chainable 107 | * @return {Object} the controller. 108 | */ 109 | this.updateSettingsHandler = function(){ 110 | $scope.isLoading = true; 111 | if(!($scope.settings.ADMIN_ACCOUNTS instanceof Array)){ 112 | $scope.settings.ADMIN_ACCOUNTS = $scope.settings.ADMIN_ACCOUNTS.replace(/ /g, "").split(","); 113 | } 114 | 115 | $http($rootScope.getHttpRequestConfig("POST", "setting-update", {data: $scope.settings})).then( 116 | function successCallback(response){ 117 | $dialogs.showSuccessDialog("Settings successfully updated. You may need to restart the server to apply the changes.", { 118 | logMessage : "Settings updated at AdminController:retrieveHistoryData.", 119 | callback : function(){ 120 | $rootScope.$broadcast(APP_EVENTS.logoutRequired); 121 | } 122 | }); 123 | $scope.isLoading = false; 124 | }, 125 | function errorCallback(response){ 126 | $scope.isLoading = false; 127 | 128 | debugger; 129 | var message = "Failed when updating the settings."; 130 | $dialogs.showErrorDialog(message, { 131 | logMessage : message + " at AdminController:updateSettings." 132 | }); 133 | console.error(response.data); 134 | } 135 | ); 136 | return this; 137 | }; 138 | 139 | /****************************************************************************** 140 | * ___ _ _ ___ _____ ___ _ _ ___ ____ _ _____ ___ ___ _ _ 141 | * |_ _| \| |_ _|_ _|_ _| /_\ | | |_ _|_ / /_\_ _|_ _/ _ \| \| | 142 | * | || .` || | | | | | / _ \| |__ | | / / / _ \| | | | (_) | .` | 143 | * |___|_|\_|___| |_| |___/_/ \_\____|___/___/_/ \_\_| |___\___/|_|\_| 144 | * 145 | ******************************************************************************/ 146 | var me = this; 147 | setTimeout(function(){ 148 | me.retrieveSettings(); 149 | },4000); 150 | 151 | 152 | });//end controller 153 | })();//end wrapper 154 | -------------------------------------------------------------------------------- /client/src/app/datasets/dataset-collection-list.tpl.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | Collection name 6 | Type 7 |
8 |
9 | 10 | 11 | Loading collections... 12 | 13 | 14 | 15 | No data 16 | 17 |
20 | {{$index + 1}} 21 | 22 | {{dataset.name}} 23 | {{getCollectionType(dataset)}} 24 |
25 | 26 | 27 | Loading collections... 28 | 29 | 30 |
31 | 32 | {{element.element_identifier}}: 33 | {{element.element_index + 1}}. 34 | {{element.object.name}} 35 | 36 | 37 | Pair {{element.element_identifier}}: 38 |
39 | {{subelement.element_identifier}}: {{subelement.object.name}} 40 |
41 |
42 |
43 |
44 |
45 |
46 | 47 |

Found {{filtered.length}} collections

48 |
49 | 50 | Show {{displayedHistory.content.length - maxDatasets}} more datasets. 51 | 52 |
53 |
54 | -------------------------------------------------------------------------------- /client/src/app/datasets/dataset-irods-pull.tpl.html: -------------------------------------------------------------------------------- 1 |
2 |

Not implemented yet...

3 |
4 | -------------------------------------------------------------------------------- /client/src/app/datasets/dataset-list-dir.js: -------------------------------------------------------------------------------- 1 | /* 2 | * (C) Copyright 2016 SLU Global Bioinformatics Centre, SLU 3 | * (http://sgbc.slu.se) and the B3Africa Project (http://www.b3africa.org/). 4 | * 5 | * All rights reserved. This program and the accompanying materials 6 | * are made available under the terms of the GNU Lesser General Public License 7 | * (LGPL) version 3 which accompanies this distribution, and is available at 8 | * http://www.gnu.org/licenses/lgpl.html 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * Contributors: 16 | * Rafael Hernandez de Diego 17 | * Tomas Klingström 18 | * Erik Bongcam-Rudloff 19 | * and others. 20 | * 21 | * THIS FILE CONTAINS THE FOLLOWING MODULE DECLARATION 22 | * - datasets.services.dataset-upload 23 | * 24 | */ 25 | (function(){ 26 | var app = angular.module('datasets.dataset-list', []); 27 | 28 | app.directive("datasetListPanel", function() { 29 | return { 30 | restrict: 'E', 31 | templateUrl: 'app/datasets/dataset-list.tpl.html' 32 | }; 33 | }); 34 | 35 | app.directive("datasetCollectionListPanel", function() { 36 | return { 37 | restrict: 'E', 38 | templateUrl: 'app/datasets/dataset-collection-list.tpl.html' 39 | }; 40 | }); 41 | 42 | app.directive("datasetCollectionCreatePanel", function() { 43 | return { 44 | restrict: 'E', 45 | templateUrl: 'app/datasets/dataset-collection-create-panel.tpl.html' 46 | }; 47 | }); 48 | 49 | app.directive("datasetListInput", function() { 50 | return { 51 | restrict: 'E', 52 | replace: true, 53 | controller: 'DatasetListController', 54 | template: 55 | '' 61 | }; 62 | }); 63 | 64 | app.directive("datasetCollectionListInput", function() { 65 | return { 66 | restrict: 'E', 67 | replace: true, 68 | controller: 'DatasetListController', 69 | template: 70 | '' 76 | }; 77 | }); 78 | 79 | app.directive("datasetUploadPanel", function() { 80 | return { 81 | restrict: 'E', 82 | templateUrl: 'app/datasets/dataset-upload.tpl.html' 83 | }; 84 | }); 85 | 86 | app.directive('fileModel', ['$parse', function ($parse) { 87 | return { 88 | restrict: 'A', 89 | link: function($scope, element, attrs) { 90 | element.bind('change', function(){ 91 | $scope.$apply(function(){ 92 | if(element[0].files instanceof FileList){ 93 | for(var i=0; i < element[0].files.length; i++){ 94 | element[0].files[i].state="pending" 95 | $scope.files.push(element[0].files[i]); 96 | } 97 | }else{ 98 | element[0].files[0].state="pending" 99 | $scope.files.push(element[0].files[0]); 100 | } 101 | }); 102 | }); 103 | } 104 | }; 105 | }]); 106 | 107 | app.directive("datasetIrodsPullPanel", function() { 108 | return { 109 | restrict: 'E', 110 | templateUrl: 'app/datasets/dataset-irods-pull.tpl.html' 111 | }; 112 | }); 113 | })(); 114 | -------------------------------------------------------------------------------- /client/src/app/datasets/dataset-list.tpl.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 16 | 17 | 18 | 19 | 20 | 23 | 24 | 25 | 26 | 37 | 38 | 39 |
File nameExtensionOptions
14 | Loading datasets... 15 |
No data
{{$index + 1}}{{dataset.name}}{{dataset.extension}} 27 | 28 | Download 29 | 30 | 31 | Delete 32 | 33 | 34 | Undelete 35 | 36 |
40 |
41 | 44 |
45 |
46 | -------------------------------------------------------------------------------- /client/src/app/datasets/dataset-selector-dialog.tpl.html: -------------------------------------------------------------------------------- 1 | 2 | 5 | 53 | 57 | 58 | -------------------------------------------------------------------------------- /client/src/app/datasets/dataset-upload.tpl.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | Please note that max allowed size for files is {{MAX_CONTENT_LENGTH}} MB. 4 |
5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 29 | 34 | 35 | 36 |
File nameSizeTypeStatus
No files selected, use the options below to load data
{{file.name}}{{adaptFileSize(file.size)}}{{file.type}} 24 | {{file.state}} 25 | {{file.state}} 26 | {{file.state}} 27 | {{file.state}} 28 | 30 | 31 | 32 | 33 |
37 | 38 | Upload files 39 | Choose local file 40 |
41 | -------------------------------------------------------------------------------- /client/src/app/histories/history-list-dir.js: -------------------------------------------------------------------------------- 1 | /* 2 | * (C) Copyright 2016 SLU Global Bioinformatics Centre, SLU 3 | * (http://sgbc.slu.se) and the B3Africa Project (http://www.b3africa.org/). 4 | * 5 | * All rights reserved. This program and the accompanying materials 6 | * are made available under the terms of the GNU Lesser General Public License 7 | * (LGPL) version 3 which accompanies this distribution, and is available at 8 | * http://www.gnu.org/licenses/lgpl.html 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * Contributors: 16 | * Rafael Hernandez de Diego 17 | * Tomas Klingström 18 | * Erik Bongcam-Rudloff 19 | * and others. 20 | * 21 | * THIS FILE CONTAINS THE FOLLOWING MODULE DECLARATION 22 | * - history-list 23 | * 24 | */ 25 | (function(){ 26 | var app = angular.module('histories.directives.history-list', []); 27 | 28 | /***************************************************************************/ 29 | /*DIRECTIVES ***************************************************************/ 30 | /***************************************************************************/ 31 | 32 | app.directive("historyListPanel", function() { 33 | return { 34 | restrict: 'E', 35 | templateUrl: 'app/histories/history-list.tpl.html' 36 | }; 37 | }); 38 | 39 | })(); 40 | -------------------------------------------------------------------------------- /client/src/app/histories/history-list-service.js: -------------------------------------------------------------------------------- 1 | /* 2 | * (C) Copyright 2016 SLU Global Bioinformatics Centre, SLU 3 | * (http://sgbc.slu.se) and the B3Africa Project (http://www.b3africa.org/). 4 | * 5 | * All rights reserved. This program and the accompanying materials 6 | * are made available under the terms of the GNU Lesser General Public License 7 | * (LGPL) version 3 which accompanies this distribution, and is available at 8 | * http://www.gnu.org/licenses/lgpl.html 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * Contributors: 16 | * Rafael Hernandez de Diego 17 | * Tomas Klingström 18 | * Erik Bongcam-Rudloff 19 | * and others. 20 | * 21 | * THIS FILE CONTAINS THE FOLLOWING MODULE DECLARATION 22 | * - histories.services.history-list 23 | * 24 | */ 25 | (function(){ 26 | var app = angular.module('histories.services.history-list', []); 27 | 28 | app.factory("HistoryList", ['$rootScope', function($rootScope) { 29 | var histories = []; 30 | 31 | return { 32 | getHistories: function() { 33 | return histories; 34 | }, 35 | setHistories: function(_histories) { 36 | histories = _histories; 37 | return this; 38 | }, 39 | getHistory: function(history_id) { 40 | for(var i in histories){ 41 | if(histories[i].id === history_id){ 42 | return histories[i]; 43 | } 44 | } 45 | return null; 46 | }, 47 | }; 48 | }]); 49 | })(); 50 | -------------------------------------------------------------------------------- /client/src/app/histories/history-list.tpl.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 |
6 |

About histories

7 |

8 | When data is uploaded from your computer or analysis is done on existing data using Galaxy, each output from those steps generates a dataset. These datasets (and the output datasets from later analysis on them) are stored by Galaxy in Histories. 9 |

10 | Learn more about histories 11 |
12 |
13 |
14 | 15 | Refresh 16 | 17 | 18 | New history 19 | 20 | 21 | Switch to this history 22 | 23 | 24 |

Click on one history name to get more details.

25 | 26 | 27 |
28 | 29 | 30 |
31 | 32 |
33 |
34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 48 | 49 | 50 | 51 | 55 | 59 | 62 | 63 | 64 |
History nameCreation dateLast updatedCurrent
46 | Loading histories... 47 |
{{history.name}} 52 | 53 | {{history.create_time | date:'dd/MM/yyyy HH:mm'}} 54 | 56 | 57 | {{history.update_time | date:'dd/MM/yyyy HH:mm'}} 58 | 60 | 61 |
65 |
66 |
67 |
68 |
69 |
70 |
71 | 72 | Upload new files 73 | 74 | 75 | Manage collections 76 | 77 |

History name: {{displayedHistory.name}}

78 | 79 | 80 |

Show hidden and deleted datasets

81 | 82 |
83 | 84 |

Show hidden and deleted collections

85 | 86 |
87 |
88 |
89 | 90 | 95 |
96 | -------------------------------------------------------------------------------- /client/src/app/histories/history-page.tpl.html: -------------------------------------------------------------------------------- 1 |
2 | 5 | 6 |
7 | -------------------------------------------------------------------------------- /client/src/app/home/home.tpl.html: -------------------------------------------------------------------------------- 1 |
2 | 5 |
6 |
7 |
8 |

Welcome to Galaksio!

9 |

A simple but effective way to use Galaxy.

10 |
11 |
12 |
13 | 14 |
15 |
16 |
17 |

Resources

18 | 32 |
33 |
34 |
35 | 36 |
37 |
38 |
39 | 40 | Go to history 41 | 42 |

Current history

43 |

History name: {{displayedHistory.name}}

44 | 45 |
46 |
47 |
48 |
49 | -------------------------------------------------------------------------------- /client/src/app/users/user-session-dir.js: -------------------------------------------------------------------------------- 1 | /* 2 | * (C) Copyright 2016 SLU Global Bioinformatics Centre, SLU 3 | * (http://sgbc.slu.se) and the B3Africa Project (http://www.b3africa.org/). 4 | * 5 | * All rights reserved. This program and the accompanying materials 6 | * are made available under the terms of the GNU Lesser General Public License 7 | * (LGPL) version 3 which accompanies this distribution, and is available at 8 | * http://www.gnu.org/licenses/lgpl.html 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * Contributors: 16 | * Rafael Hernandez de Diego 17 | * Tomas Klingström 18 | * Erik Bongcam-Rudloff 19 | * and others. 20 | * 21 | * THIS FILE CONTAINS THE FOLLOWING MODULE DECLARATION 22 | * - workflow-list 23 | * 24 | */ 25 | (function(){ 26 | var app = angular.module('users.directives.user-session', [ 27 | 'ui.bootstrap', 28 | 'users.controllers.user-session' 29 | ]); 30 | 31 | app.service('loginModal', function ($uibModal, $rootScope) { 32 | function assignCurrentUser (user) { 33 | $rootScope.currentUser = userF; 34 | return user; 35 | } 36 | 37 | return function() { 38 | var instance = $uibModal.open({ 39 | templateUrl: 'app/users/user-sign-in.tpl.html' 40 | }) 41 | 42 | return instance.result.then(assignCurrentUser); 43 | }; 44 | }); 45 | 46 | app.directive("sessionToolbar", function() { 47 | return { 48 | restrict: 'E', 49 | replace:true, 50 | template: 51 | '
' + 52 | ' ' + 64 | '
' 65 | }; 66 | }); 67 | 68 | app.directive('ngPwcheck', [function () { 69 | return { 70 | require: 'ngModel', 71 | link: function (scope, elem, attrs, ctrl) { 72 | var firstPassword = '#' + attrs.ngPwcheck; 73 | elem.on('keyup', function () { 74 | scope.$apply(function () { 75 | var v = elem.val()===$(firstPassword).val(); 76 | ctrl.$setValidity('pwmatch', v); 77 | }); 78 | }); 79 | $(firstPassword).on('keyup', function () { 80 | scope.$apply(function () { 81 | var v = elem.val()===$(firstPassword).val(); 82 | ctrl.$setValidity('pwmatch', v); 83 | }); 84 | }); 85 | } 86 | } 87 | }]); 88 | 89 | app.directive("userSessionInfoPanel", function() { 90 | return { 91 | restrict: 'E', 92 | replace:true, 93 | template: 94 | '
' + 95 | '

Your account

' + 96 | '

Galaxy server:{{GALAXY_SERVER_URL}}

' + 97 | ' ' + 98 | ' Close session' + 99 | ' ' + 100 | '

Signed in as {{userInfo.email}}

' + 101 | '

Disk usage: {{userInfo.disk_usage || "Loading..."}}

' + 102 | '
' 103 | }; 104 | }); 105 | 106 | })(); 107 | -------------------------------------------------------------------------------- /client/src/app/users/user-sign-in.tpl.html: -------------------------------------------------------------------------------- 1 |
2 | 61 |
62 | -------------------------------------------------------------------------------- /client/src/app/workflows/workflow-card-dir.js: -------------------------------------------------------------------------------- 1 | /* 2 | * (C) Copyright 2016 SLU Global Bioinformatics Centre, SLU 3 | * (http://sgbc.slu.se) and the B3Africa Project (http://www.b3africa.org/). 4 | * 5 | * All rights reserved. This program and the accompanying materials 6 | * are made available under the terms of the GNU Lesser General Public License 7 | * (LGPL) version 3 which accompanies this distribution, and is available at 8 | * http://www.gnu.org/licenses/lgpl.html 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * Contributors: 16 | * Rafael Hernandez de Diego 17 | * Tomas Klingström 18 | * Erik Bongcam-Rudloff 19 | * and others. 20 | * 21 | * THIS FILE CONTAINS THE FOLLOWING MODULE DECLARATION 22 | * - workflows.directives.workflow-card 23 | * 24 | */ 25 | (function(){ 26 | var app = angular.module('workflows.directives.workflow-card', [ 27 | ]); 28 | 29 | /***************************************************************************/ 30 | /*DIRECTIVES ***************************************************************/ 31 | /***************************************************************************/ 32 | app.directive("workflowCard", function($timeout) { 33 | return { 34 | restrict: 'E', 35 | templateUrl: "app/workflows/workflow-card.tpl.html", 36 | link: function (scope, element, attrs) { 37 | //Execute the afterRender function (linked to a controller function) 38 | $timeout(scope.$eval(attrs.afterRender), 0); 39 | } 40 | }; 41 | }); 42 | 43 | app.directive('maxContentHeight',function(){ 44 | return { 45 | restrict: 'A', 46 | link: function($scope,$el,$attr) { 47 | $scope.$watch( 48 | function() { 49 | return $($el).height(); 50 | }, 51 | function(height) { 52 | $scope.showMore = height > ~~$attr['maxContentHeight']; 53 | } 54 | )} 55 | }; 56 | }); 57 | })(); 58 | -------------------------------------------------------------------------------- /client/src/app/workflows/workflow-card.tpl.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 |

{{workflow.name}}

7 |
8 | Loading details... 9 |
10 |
11 | 12 | 13 | 14 | [...] 15 | Read more 16 | Read more 17 | 18 | {{workflow.annotation}} 19 | 20 |

No description provided

21 |
22 |
23 | {{tag}} 24 |
25 |
26 |
27 | Created by {{workflow.owner}} 28 |
29 |
30 | Imported workflow 31 |
32 | 33 | Run workflow 34 | 35 | 36 | Import to my collection 37 | 38 | 39 | More details 40 | 41 |
42 | -------------------------------------------------------------------------------- /client/src/app/workflows/workflow-detail.tpl.html: -------------------------------------------------------------------------------- 1 |
2 | 5 |
6 |

Workflow name: {{workflow.name}}

7 | 8 | 9 | 10 |
11 |

Details

12 |

Author: {{workflow.owner}}

13 |

Description: {{((workflow.annotation !== "" && workflow.annotation !== null)?workflow.annotation:"No description provided")}}

14 |
15 | 16 | 17 | 18 |
19 | Update diagram layout 20 |

Workflow overview

21 | 22 | Loading workflow details... 23 | 24 |
25 |
26 |
27 | 28 | 29 | 30 | 40 |
41 |
42 | -------------------------------------------------------------------------------- /client/src/app/workflows/workflow-invocation-panel.tpl.html: -------------------------------------------------------------------------------- 1 |
2 |

Workflow invocations 3 | 4 | Refresh 5 | Loading... 6 |

7 |
8 |
9 | 10 |
11 | 14 |
15 |
16 |
17 |
Show: 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 28 | 29 | 30 | 36 | 37 | 38 | 39 | 40 | 47 | 54 | 61 | 68 | 75 | 82 | 90 | 91 |
Workflow nameDateStateTools
26 | Loading invocations... 27 |
31 |
Whoops! Looks like there are no workflows in the queue.
32 | 35 |
{{invocation.workflow_title}}{{adaptInvocationDate(invocation.update_time)}} 41 | 42 | 43 | 44 | 45 | Done 46 | 48 | 49 | 50 | 51 | 52 | Sending 53 | 55 | 56 | 57 | 58 | 59 | Running 60 | 62 | 63 | 64 | 65 | 66 | Waiting 67 | 69 | 70 | 71 | 72 | 73 | Failed 74 | 76 | 77 | 78 | 79 | 80 | Unknown 81 | 83 | 84 | Recover 85 | 86 | 87 | Hide 88 | 89 |
92 |
93 | 96 | 99 |
100 |
101 | -------------------------------------------------------------------------------- /client/src/app/workflows/workflow-invocation-toolbar.tpl.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | 5 | 6 | 7 | 8 | {{running}} 9 | Running 10 | 11 | 12 | 13 | 14 | 15 | 16 | {{done}} 17 | Done 18 | 19 | 20 | 21 | 22 | 23 | 24 | {{waiting}} 25 | Waiting 26 | 27 | 28 | 29 | 30 | 31 | 32 | {{erroneous}} 33 | Failed 34 | 35 | 36 | 37 | 38 | 39 | 40 | Loading... 41 | 42 |
43 |
44 | 45 | 46 | 47 | 48 | 49 | 50 | 57 | 64 | 71 | 78 | 85 | 92 | 97 | 98 | 99 | 101 | 102 |
Workflow nameDateStateTools
No data
{{invocation.workflow_title}}{{adaptInvocationDate(invocation.update_time)}} 51 | 52 | 53 | 54 | 55 | Done 56 | 58 | 59 | 60 | 61 | 62 | Sending 63 | 65 | 66 | 67 | 68 | 69 | Running 70 | 72 | 73 | 74 | 75 | 76 | Waiting 77 | 79 | 80 | 81 | 82 | 83 | Failed 84 | 86 | 87 | 88 | 89 | 90 | Unknown 91 | 93 | 94 | Recover 95 | 96 |
100 | Show more invocations
103 |
104 |
105 | -------------------------------------------------------------------------------- /client/src/app/workflows/workflow-list-dir.js: -------------------------------------------------------------------------------- 1 | /* 2 | * (C) Copyright 2016 SLU Global Bioinformatics Centre, SLU 3 | * (http://sgbc.slu.se) and the B3Africa Project (http://www.b3africa.org/). 4 | * 5 | * All rights reserved. This program and the accompanying materials 6 | * are made available under the terms of the GNU Lesser General Public License 7 | * (LGPL) version 3 which accompanies this distribution, and is available at 8 | * http://www.gnu.org/licenses/lgpl.html 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * Contributors: 16 | * Rafael Hernandez de Diego 17 | * Tomas Klingström 18 | * Erik Bongcam-Rudloff 19 | * and others. 20 | * 21 | * THIS FILE CONTAINS THE FOLLOWING MODULE DECLARATION 22 | * - workflow-list 23 | * 24 | */ 25 | (function(){ 26 | var app = angular.module('workflows.workflow-list', []); 27 | 28 | /***************************************************************************/ 29 | /*DIRECTIVES ***************************************************************/ 30 | /***************************************************************************/ 31 | 32 | })(); 33 | -------------------------------------------------------------------------------- /client/src/app/workflows/workflow-list-service.js: -------------------------------------------------------------------------------- 1 | /* 2 | * (C) Copyright 2016 SLU Global Bioinformatics Centre, SLU 3 | * (http://sgbc.slu.se) and the B3Africa Project (http://www.b3africa.org/). 4 | * 5 | * All rights reserved. This program and the accompanying materials 6 | * are made available under the terms of the GNU Lesser General Public License 7 | * (LGPL) version 3 which accompanies this distribution, and is available at 8 | * http://www.gnu.org/licenses/lgpl.html 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * Contributors: 16 | * Rafael Hernandez de Diego 17 | * Tomas Klingström 18 | * Erik Bongcam-Rudloff 19 | * and others. 20 | * 21 | * THIS FILE CONTAINS THE FOLLOWING MODULE DECLARATION 22 | * - workflows.services.workflow-list 23 | * 24 | */ 25 | (function(){ 26 | var app = angular.module('workflows.services.workflow-list', []); 27 | 28 | app.factory("WorkflowList", ['$rootScope', function($rootScope) { 29 | var workflows = {}; 30 | var tags = []; 31 | var selectedTags = []; 32 | var filters = []; 33 | var tagColors = ['yellow', 'green', 'red', 'blue', 'purple', 'pink', 'yellow2', 'green2', 'red2', 'blue2', 'purple2', 'pink2'] 34 | var old = new Date(0); 35 | //http://stackoverflow.com/questions/18247130/how-to-store-the-data-to-local-storage 36 | return { 37 | getWorkflows: function() { 38 | return Object.values(workflows); 39 | }, 40 | setWorkflows: function(_workflows) { 41 | workflows = {}; 42 | var workflow; 43 | for(var i in _workflows){ 44 | workflow = _workflows[i]; 45 | if(workflow.name.search(/^imported: /) !== -1){ 46 | workflow.name = workflow.name.replace(/imported: /g, ""); 47 | workflow.imported = true; 48 | } 49 | 50 | workflows[workflow.id] = workflow; 51 | } 52 | 53 | old = new Date(); 54 | return this; 55 | }, 56 | updateWorkflows: function(_workflows) { 57 | var workflow; 58 | for(var i in _workflows){ 59 | workflow = _workflows[i]; 60 | if(workflow.name.search(/^imported: /) !== -1){ 61 | workflow.name = workflow.name.replace(/imported: /g, ""); 62 | workflow.imported = true; 63 | } 64 | workflows[workflow.id] = workflow; 65 | } 66 | 67 | return this; 68 | }, 69 | getWorkflow: function(workflow_id) { 70 | return workflows[workflow_id]; 71 | }, 72 | addWorkflow: function(workflow) { 73 | workflows[workflow.id] = workflow; 74 | return this; 75 | }, 76 | deleteWorkflow: function(workflow) { 77 | delete workflows[workflow.id]; 78 | return this; 79 | }, 80 | getTags: function() { 81 | return tags; 82 | }, 83 | getTag: function(_tag) { 84 | for(var i in tags){ 85 | if(tags[i].name === _tag){ 86 | return tags[i]; 87 | } 88 | } 89 | return null; 90 | }, 91 | setTags: function(_tags) { 92 | tags = _tags; 93 | return this; 94 | }, 95 | updateTags: function() { 96 | var tagsAux = {}, _tags; 97 | var _workflows = this.getWorkflows(); 98 | for(var i in _workflows){ 99 | _tags = _workflows[i].tags; 100 | for(var j in _tags){ 101 | tagsAux[_tags[j]] = { 102 | name: _tags[j], 103 | times: ((tagsAux[_tags[j]] === undefined)?1:tagsAux[_tags[j]].times + 1) 104 | } 105 | } 106 | } 107 | tags = Object.keys(tagsAux).map(function(k) { return tagsAux[k] }); 108 | 109 | for(var i in tags){ 110 | tags[i].color = tagColors[i%tagColors.length] 111 | } 112 | 113 | tags.push({name: "All", times: _workflows.length}) 114 | 115 | return this; 116 | }, 117 | selectTag: function(tag){ 118 | selectedTags.push(tag); 119 | return this; 120 | }, 121 | deselectTag: function(tag){ 122 | var pos = selectedTags.indexOf(tag); 123 | if(pos !== -1){ 124 | selectedTags.splice(pos,1); 125 | } 126 | return this; 127 | }, 128 | getSelectedTags: function(){ 129 | return selectedTags; 130 | }, 131 | removeAllSelectedTags(){ 132 | selectedTags = []; 133 | return this; 134 | }, 135 | getFilters: function() { 136 | return filters; 137 | }, 138 | setFilters: function(_filters) { 139 | filters = _filters; 140 | return this; 141 | }, 142 | removeFilter: function(_filter){ 143 | var pos = filters.indexOf(_filter); 144 | if(pos !== -1){ 145 | filters.splice(pos,1); 146 | } 147 | return this; 148 | }, 149 | removeAllFilters: function(){ 150 | filters = []; 151 | return this; 152 | }, 153 | getOld: function(){ 154 | return (new Date() - old)/120000; 155 | } 156 | }; 157 | }]); 158 | })(); 159 | -------------------------------------------------------------------------------- /client/src/app/workflows/workflow-list.tpl.html: -------------------------------------------------------------------------------- 1 |
2 | 5 | 46 | 78 |
79 |
80 |

About workflows

81 |

82 | Workflows are analyses that are intended to be executed (one ore more times) with different user-provided input datasets. Workflow can be reused over and over, not only reducing tedious work, but enhancing reproducibility by applying the same exact methods to all of your data.
83 | From the perspective of Galaksio, workflows must be designed by skilled users (e.g. a bioinformatician) using the Galaxy tools for workflow edition. 84 |

85 | Learn more about workflows 86 |
87 |

88 | Loading workflows list... 89 |

90 | 91 |
92 | 95 |
96 |
97 | 103 |
104 | -------------------------------------------------------------------------------- /client/src/app/workflows/workflow-run-service.js: -------------------------------------------------------------------------------- 1 | /* 2 | * (C) Copyright 2016 SLU Global Bioinformatics Centre, SLU 3 | * (http://sgbc.slu.se) and the B3Africa Project (http://www.b3africa.org/). 4 | * 5 | * All rights reserved. This program and the accompanying materials 6 | * are made available under the terms of the GNU Lesser General Public License 7 | * (LGPL) version 3 which accompanies this distribution, and is available at 8 | * http://www.gnu.org/licenses/lgpl.html 9 | * 10 | * This library is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | * Lesser General Public License for more details. 14 | * 15 | * Contributors: 16 | * Rafael Hernandez de Diego 17 | * Tomas Klingström 18 | * Erik Bongcam-Rudloff 19 | * and others. 20 | * 21 | * THIS FILE CONTAINS THE FOLLOWING MODULE DECLARATION 22 | * - workflows.services.workflow-run 23 | * 24 | */ 25 | (function(){ 26 | var app = angular.module('workflows.services.workflow-run', []); 27 | 28 | app.factory("WorkflowInvocationList", function() { 29 | var invocations = {}; 30 | var _hasErrors = false; 31 | 32 | return { 33 | getInvocations: function() { 34 | return Object.values(invocations); 35 | }, 36 | setInvocations: function(_invocations) { 37 | invocations = _invocations; 38 | return this; 39 | }, 40 | saveInvocations: function() { 41 | sessionStorage.workflow_invocations = JSON.stringify(invocations); 42 | return this; 43 | }, 44 | loadInvocations: function() { 45 | try { 46 | invocations = JSON.parse(sessionStorage.workflow_invocations); 47 | } catch (e) { 48 | console.error("Unable to load the stored invocations."); 49 | invocations = {}; 50 | } 51 | return this; 52 | }, 53 | clearInvocations: function() { 54 | invocations = {}; 55 | return this; 56 | }, 57 | addInvocation: function(_invocation) { 58 | delete _invocation.checking; 59 | invocations[_invocation.id] = _invocation; 60 | return this; 61 | }, 62 | removeInvocation: function(_invocation) { 63 | delete invocations[_invocation.id]; 64 | return this; 65 | }, 66 | updateInvocation: function(_invocation) { 67 | delete invocations[_invocation.id].checking; 68 | delete _invocation.checking; 69 | for(var attr in _invocation){ 70 | invocations[_invocation.id][attr] = _invocation[attr]; 71 | } 72 | return this; 73 | }, 74 | getInvocation: function(invocation_id) { 75 | return invocations[invocation_id]; 76 | }, 77 | getNewInvocation: function() { 78 | return { 79 | id: '', 80 | workflow_id: '', 81 | workflow_title: '', 82 | current_step : 1 83 | }; 84 | }, 85 | setHasErrors: function(errors) { 86 | _hasErrors = (errors === true); 87 | }, 88 | hasErrors: function() { 89 | return _hasErrors === true; 90 | } 91 | }; 92 | }); 93 | })(); 94 | -------------------------------------------------------------------------------- /client/src/app/workflows/workflow-run-step.tpl.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |
5 | Step {{step.id}} : {{step.name}} 6 | 7 | 8 | 9 | 10 |
11 |
12 | Loading... 13 |
14 | 15 |
16 |
17 |
18 | -------------------------------------------------------------------------------- /client/src/common/resources/API-REQUEST-EXAMPLES.js: -------------------------------------------------------------------------------- 1 | ////EXECUTE A JOB 2 | //data = JSON.stringify({ 3 | // "workflow_id": "b472e2eb553fa0d1", 4 | // "history": "history_id=7b668ee810f6cf46", 5 | // "ds_map": { 6 | // "0": {"src": "hda", "id": "72ad249754f05d26"} 7 | // }, 8 | // "parameters": { 9 | // "1" : { 10 | // "exp" : "asdsa", 11 | // "iterate" : true 12 | // } 13 | // } 14 | //}) 15 | // 16 | //$.ajax({ 17 | // type: "POST", contentType: 'application/json; charset=utf-8', 18 | // url : "http://192.168.0.99/galaxy/api/workflows/b472e2eb553fa0d1/invocations", 19 | // data:data 20 | //}); 21 | // 22 | ////GET HISTORY CONTENT 23 | //http://192.168.0.99/galaxy/api/histories/7b668ee810f6cf46/contents 24 | // 25 | ////GET WORKFLOW COTENTS 26 | //http://192.168.0.99/galaxy/api/workflows/b472e2eb553fa0d1/download 27 | //http://192.168.0.99/galaxy/api/workflows/b472e2eb553fa0d1/invocations 28 | -------------------------------------------------------------------------------- /client/src/common/resources/common.js: -------------------------------------------------------------------------------- 1 | function arrayUnique(array) { 2 | var a = array.concat(); 3 | for(var i=0; i "; 15 | }; 16 | Object.values = function (o) { 17 | return Object.keys(o).map(function (k) { 18 | return o[k]; 19 | }); 20 | }; 21 | 22 | function getPathname(){ 23 | var pathname = window.location.pathname.split("/"); 24 | if(pathname.length > 1 && pathname[1] !== "" && pathname[1].indexOf(".html") === -1){ 25 | pathname = pathname[1] + "/"; 26 | }else{ 27 | pathname = ""; 28 | } 29 | return pathname; 30 | } 31 | 32 | function randomIDgenerator(len){ 33 | var charSet ='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; 34 | var randomString = ''; 35 | for (var i = 0; i < len; i++) { 36 | var randomPoz = Math.floor(Math.random() * charSet.length); 37 | randomString += charSet.substring(randomPoz,randomPoz+1); 38 | } 39 | return randomString; 40 | } 41 | -------------------------------------------------------------------------------- /client/src/common/resources/error-message.tpl.html: -------------------------------------------------------------------------------- 1 | 8 | 9 | 12 | -------------------------------------------------------------------------------- /client/src/common/services/toArrayFilter.js: -------------------------------------------------------------------------------- 1 | (function(){ 2 | angular.module('angular-toArrayFilter', []) 3 | .filter('toArray', function () { 4 | return function (obj, addKey) { 5 | if (!angular.isObject(obj)) return obj; 6 | if ( addKey === false ) { 7 | return Object.keys(obj).map(function(key) { 8 | return obj[key]; 9 | }); 10 | } else { 11 | return Object.keys(obj).map(function (key) { 12 | var value = obj[key]; 13 | return angular.isObject(value) ? 14 | Object.defineProperty(value, '$key', { enumerable: false, value: key}) : 15 | { $key: key, $value: value }; 16 | }); 17 | } 18 | }; 19 | }); 20 | })(); 21 | -------------------------------------------------------------------------------- /client/src/css/angular-dialogs.min.css: -------------------------------------------------------------------------------- 1 | /*! Angular dialogs v0.93 | Rafael Hernandez | MIT license */ 2 | .modal-error .modal-header{background:#d2322d;color:#fff}.modal-error .modal-body{color:#a9211e}.modal-info .modal-header{background:#428bca;color:#fff}.modal-success .modal-header{background:#5cb85c;color:#fff}.modal-warn .modal-header{background:#f0ad4e;color:#fff}.modal-confirmation .modal-header{background:#286090;color:#fff}.glyphicon-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0)}100%{-o-transform:rotate(359deg)}}@keyframes spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}} 3 | -------------------------------------------------------------------------------- /client/src/css/bootstrap-dialogs.min.css: -------------------------------------------------------------------------------- 1 | .dialog-header-error{background-color:#d2322d}.dialog-header-wait{background-color:#428bca}.dialog-header-notify{background-color:#eee}.dialog-header-confirm{background-color:#333}.dialog-header-confirm h4,.dialog-header-confirm span,.dialog-header-error h4,.dialog-header-error span,.dialog-header-wait h4,.dialog-header-wait span{color:#fff} -------------------------------------------------------------------------------- /client/src/css/bootstrap-sortable.css: -------------------------------------------------------------------------------- 1 | table.sortable span.sign { 2 | display: block; 3 | position: absolute; 4 | top: 50%; 5 | right: 5px; 6 | font-size: 12px; 7 | margin-top: -10px; 8 | color: #bfbfc1; 9 | } 10 | 11 | table.sortable th:after { 12 | display: block; 13 | position: absolute; 14 | top: 50%; 15 | right: 5px; 16 | font-size: 12px; 17 | margin-top: -10px; 18 | color: #bfbfc1; 19 | } 20 | 21 | table.sortable th.arrow:after { 22 | content: ''; 23 | } 24 | 25 | table.sortable span.arrow, span.reversed, th.arrow.down:after, th.reversedarrow.down:after, th.arrow.up:after, th.reversedarrow.up:after { 26 | border-style: solid; 27 | border-width: 5px; 28 | font-size: 0; 29 | border-color: #ccc transparent transparent transparent; 30 | line-height: 0; 31 | height: 0; 32 | width: 0; 33 | margin-top: -2px; 34 | } 35 | 36 | table.sortable span.arrow.up, th.arrow.up:after { 37 | border-color: transparent transparent #ccc transparent; 38 | margin-top: -7px; 39 | } 40 | 41 | table.sortable span.reversed, th.reversedarrow.down:after { 42 | border-color: transparent transparent #ccc transparent; 43 | margin-top: -7px; 44 | } 45 | 46 | table.sortable span.reversed.up, th.reversedarrow.up:after { 47 | border-color: #ccc transparent transparent transparent; 48 | margin-top: -2px; 49 | } 50 | 51 | table.sortable span.az:before, th.az.down:after { 52 | content: "a .. z"; 53 | } 54 | 55 | table.sortable span.az.up:before, th.az.up:after { 56 | content: "z .. a"; 57 | } 58 | 59 | table.sortable th.az.nosort:after, th.AZ.nosort:after, th._19.nosort:after, th.month.nosort:after { 60 | content: ".."; 61 | } 62 | 63 | table.sortable span.AZ:before, th.AZ.down:after { 64 | content: "A .. Z"; 65 | } 66 | 67 | table.sortable span.AZ.up:before, th.AZ.up:after { 68 | content: "Z .. A"; 69 | } 70 | 71 | table.sortable span._19:before, th._19.down:after { 72 | content: "1 .. 9"; 73 | } 74 | 75 | table.sortable span._19.up:before, th._19.up:after { 76 | content: "9 .. 1"; 77 | } 78 | 79 | table.sortable span.month:before, th.month.down:after { 80 | content: "jan .. dec"; 81 | } 82 | 83 | table.sortable span.month.up:before, th.month.up:after { 84 | content: "dec .. jan"; 85 | } 86 | 87 | table.sortable thead th:not([data-defaultsort=disabled]) { 88 | cursor: pointer; 89 | position: relative; 90 | top: 0; 91 | left: 0; 92 | } 93 | 94 | table.sortable thead th:hover:not([data-defaultsort=disabled]) { 95 | background: #efefef; 96 | } 97 | 98 | table.sortable thead th div.mozilla { 99 | position: relative; 100 | } 101 | -------------------------------------------------------------------------------- /client/src/css/galaksio_logo.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/css/galaksio_logo.xcf -------------------------------------------------------------------------------- /client/src/css/galaksio_logo_2.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/css/galaksio_logo_2.xcf -------------------------------------------------------------------------------- /client/src/css/galaxy_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/css/galaxy_logo.png -------------------------------------------------------------------------------- /client/src/css/galaxy_logo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/css/galaxy_logo2.png -------------------------------------------------------------------------------- /client/src/css/home_back_science.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/css/home_back_science.png -------------------------------------------------------------------------------- /client/src/css/invocation_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/css/invocation_error.png -------------------------------------------------------------------------------- /client/src/css/invocation_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/css/invocation_new.png -------------------------------------------------------------------------------- /client/src/css/invocation_sending.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/css/invocation_sending.png -------------------------------------------------------------------------------- /client/src/css/invocation_success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/css/invocation_success.png -------------------------------------------------------------------------------- /client/src/css/invocation_waiting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/css/invocation_waiting.png -------------------------------------------------------------------------------- /client/src/css/invocation_working.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/css/invocation_working.gif -------------------------------------------------------------------------------- /client/src/css/invocation_working.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/css/invocation_working.png -------------------------------------------------------------------------------- /client/src/css/paintomics_white_300x66.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/css/paintomics_white_300x66.png -------------------------------------------------------------------------------- /client/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/favicon.ico -------------------------------------------------------------------------------- /client/src/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/favicon.png -------------------------------------------------------------------------------- /client/src/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /client/src/fonts/OpenSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/fonts/OpenSans-Bold.ttf -------------------------------------------------------------------------------- /client/src/fonts/OpenSans-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/fonts/OpenSans-BoldItalic.ttf -------------------------------------------------------------------------------- /client/src/fonts/OpenSans-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/fonts/OpenSans-ExtraBold.ttf -------------------------------------------------------------------------------- /client/src/fonts/OpenSans-ExtraBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/fonts/OpenSans-ExtraBoldItalic.ttf -------------------------------------------------------------------------------- /client/src/fonts/OpenSans-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/fonts/OpenSans-Italic.ttf -------------------------------------------------------------------------------- /client/src/fonts/OpenSans-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/fonts/OpenSans-Light.ttf -------------------------------------------------------------------------------- /client/src/fonts/OpenSans-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/fonts/OpenSans-LightItalic.ttf -------------------------------------------------------------------------------- /client/src/fonts/OpenSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/fonts/OpenSans-Regular.ttf -------------------------------------------------------------------------------- /client/src/fonts/OpenSans-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/fonts/OpenSans-Semibold.ttf -------------------------------------------------------------------------------- /client/src/fonts/OpenSans-SemiboldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/fonts/OpenSans-SemiboldItalic.ttf -------------------------------------------------------------------------------- /client/src/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /client/src/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /client/src/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /client/src/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /client/src/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /client/src/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /client/src/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /client/src/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/client/src/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /client/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Galaksio 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
45 | 66 | 75 |
76 |
77 |
78 |
79 |
80 |
81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /client/src/install.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Galaksio 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 |
44 | 49 |
50 |
51 |
52 |
53 |
54 |
55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /client/src/lib/angular-backtop.min.js: -------------------------------------------------------------------------------- 1 | var backtop = angular.module('angular.backtop', []); 2 | 3 | backtop.directive('backTop', [function() { 4 | return { 5 | restrict: 'E', 6 | transclude: true, 7 | replace: true, 8 | template: ' {{text}}', 9 | scope: { 10 | text: "@buttonText", 11 | speed: "@scrollSpeed", 12 | theme: "@buttonTheme" 13 | }, 14 | link: function(scope, element) { 15 | 16 | scope.text = scope.text || 'Go top!'; 17 | scope.speed = parseInt(scope.speed, 10) || 300; 18 | scope.theme = (scope.theme || ''); 19 | 20 | var self = this; 21 | 22 | scope.currentYPosition = function() { 23 | if (self.pageYOffset) 24 | return self.pageYOffset; 25 | if (document.documentElement && document.documentElement.scrollTop) 26 | return document.documentElement.scrollTop; 27 | if (document.body.scrollTop) 28 | return document.body.scrollTop; 29 | return 0; 30 | }; 31 | 32 | scope.smoothScroll = function() { 33 | var startY = scope.currentYPosition(); 34 | var stopY = 0; 35 | var distance = stopY > startY ? stopY - startY : startY - stopY; 36 | if (distance < 100) { 37 | scrollTo(0, stopY); 38 | return; 39 | } 40 | var speed = Math.round(scope.speed / 100); 41 | var step = Math.round(distance / 25); 42 | var leapY = stopY > startY ? startY + step : startY - step; 43 | var timer = 0; 44 | if (stopY > startY) { 45 | for (var i = startY; i < stopY; i += step) { 46 | setTimeout("window.scrollTo(0, " + leapY + ")", timer * speed); 47 | leapY += step; 48 | if (leapY > stopY) leapY = stopY; 49 | timer++; 50 | } 51 | return; 52 | } 53 | for (var j = startY; j > stopY; j -= step) { 54 | setTimeout("window.scrollTo(0, " + leapY + ")", timer * speed); 55 | leapY -= step; 56 | if (leapY < stopY) leapY = stopY; 57 | timer++; 58 | } 59 | }; 60 | 61 | scope.a = element; 62 | element.addClass('hidden'); 63 | 64 | scope.a.on('click', function() { 65 | scope.smoothScroll(); 66 | element.addClass('hidden'); 67 | }); 68 | 69 | window.addEventListener('scroll', function() { 70 | if (window.pageYOffset > 0) { 71 | element.removeClass('hidden'); 72 | } else { 73 | element.addClass('hidden'); 74 | } 75 | }); 76 | } 77 | }; 78 | 79 | }]); 80 | -------------------------------------------------------------------------------- /client/src/lib/angular-dialogs.min.js: -------------------------------------------------------------------------------- 1 | /*! Angular dialogs v0.93 | Rafael Hernandez | MIT license */ 2 | (function(){var app=angular.module("ang-dialogs",["ui.bootstrap"]);app.service("$dialogs",["$uibModal","$templateCache","$log","$timeout","$interval",function($uibModal,$templateCache,$log,$timeout,$interval){var me=this;this.modals={};this.modalStack=[];this.getModalInstance=function(modalID){return this.modals[modalID]};this.showDefaultDialog=function(message,config){config=config||{};config.messageType="default";config.icon=config.icon||"glyphicon glyphicon-info-sign";return this.showMessage(message,config)};this.showInfoDialog=function(message,config){config=config||{};config.messageType="info";config.icon=config.icon||"glyphicon glyphicon-info-sign";return this.showMessage(message,config)};this.showConfirmationDialog=function(message,config){config=config||{};config.messageType="confirmation";config.icon=config.icon||"glyphicon glyphicon-question-sign";return this.showMessage(message,config)};this.showSuccessDialog=function(message,config){config=config||{};config.messageType="success";config.icon=config.icon||" glyphicon glyphicon-ok-circle";return this.showMessage(message,config)};this.showWarningDialog=function(message,config){config=config||{};config.messageType="warn";config.icon=config.icon||" glyphicon glyphicon-exclamation-sign";return this.showMessage(message,config)};this.showErrorDialog=function(message,config){config=config||{};config.messageType="error";config.icon=config.icon||"glyphicon glyphicon-remove-circle";return this.showMessage(message,config)};this.showWaitDialog=function(message,config){config=config||{};config.messageType="wait";config.icon=config.icon||"glyphicon glyphicon-time";config.button=config.button||false;config.spin=true;return this.showMessage(message,config)};this.showMessage=function(message,config){config={messageType:config.messageType||"info",title:config.title||"",message:message||"",callback:config.callback,logMessage:config.logMessage||(message||""),button:config.button!==false,reportButton:config.reportButton===true,reportButtonHandler:config.reportButtonHandler,buttonReportText:config.buttonReportText||"Send report",buttonOkText:config.buttonOkText||"Accept",buttonCancelText:config.buttonCancelText||"Cancel",buttonCloseText:config.buttonCloseText||"Close",spin:config.spin===true,icon:config.icon||"",closable:config.closable===true,closeTimeout:config.closeTimeout};this.log(config.logMessage,config.messageType);var modalInstance=$uibModal.open({template:$templateCache.get("angular.dialog.tpl.html"),backdrop:config.closable?true:"static",controller:["$scope","$uibModalInstance",function($scope,$uibModalInstance){$scope.config=config;this.sendReportButtonHandler=config.reportButtonHandler||function(){me.log("Not implemented","error")};this.okButtonHandler=function(){$uibModalInstance.close("ok")};this.cancelButtonHandler=function(){$uibModalInstance.close("cancel")};this.closeButtonHandler=function(){$uibModalInstance.dismiss("close")}}],controllerAs:"controller"});modalInstance.config=config;modalInstance.result.then(function(result){me.unregisterModal(modalInstance);if(config.callback){config.callback(result)}},function(reason){me.unregisterModal(modalInstance);if(config.callback){config.callback(reason)}});modalInstance.id=this.getNewModalID();this.modals[modalInstance.id]=modalInstance;this.modalStack.push(modalInstance);if(config.closeTimeout){$timeout(function(){me.log("Autoclosing dialog");me.closeDialog({modalID:modalInstance.id})},config.closeTimeout*1e3);$interval(function(){config.closeTimeout--},1e3,config.closeTimeout)}return modalInstance};this.closeDialog=function(params,modal){params=params||{};params.option=params.option||"ok";if(modal===undefined){if(params.modalID){modal=me.getModalInstance(params.modalID)}else if(params.type){for(var i in me.modalStack){if(me.modalStack[i].config.type===params.type){me.closeDialog(params,me.modalStack[i])}}return}else{modal=me.modalStack[me.modalStack.length-1]}}if(modal===undefined){return}var isOpened=modal.opened.$$state.status;if(isOpened===1){modal.close(params.option)}else{$timeout(function(){me.closeDialog(params,modal)},500)}};this.unregisterModal=function(modal){delete me.modals[modal.id];for(var i in me.modalStack){if(me.modalStack[i].id===modal.id){me.modalStack.splice(i,1);return}}};this.getNewModalID=function(){var newID=Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15);if(this.modals[newID]!==undefined)return this.getNewModalID();return newID};this.log=function(message,messageType){if("warn error log debug".indexOf(messageType)<0){messageType="info"}$log[messageType]((new Date).toUTCString()+" > "+message)};$templateCache.put("angular.dialog.tpl.html",' 3 | 4 | 5 | # Browsing workflows 6 | A workflow is a series of tools and dataset actions that run in sequence as a batch operation. From the perspective of Galaksio, workflows are created from scratch by skilled users (e.g. a bioinformatician) using the workflow editor in Galaxy, and published allowing other users to import and reuse them. 7 | 8 | Your collection of imported workflows, as well as the published workflows are listed in Galaksio at the "Workflows" panel. By default, this panel displays your collection of workflows (Figure 1). However, you can easily browse all the published workflows by choosing the option "Show all public workflows" (Figure 2). This option will retrieve all the published workflows in the associated Galaxy instance. Workflows can be easily filtered by using the search tools. 9 | 10 | When a workflow does not belong to your collection, you will see that there are two options available. Using the option "More details", you can access to a more detailed view of the workflow that included an overview for the planned steps. Alternatively, you can use "Import to my collection" which will copy the selected workflow to our collection. 11 | 12 |
13 | 14 |

Figure 1. The collection of workflows.

15 |
16 | 17 |
18 | 19 |

Figure 2. Browsing all the published workflows.

20 |
21 | -------------------------------------------------------------------------------- /docs/4_1_workflows/galaksio_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/4_1_workflows/galaksio_logo.png -------------------------------------------------------------------------------- /docs/4_1_workflows/workflows1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/4_1_workflows/workflows1.png -------------------------------------------------------------------------------- /docs/4_1_workflows/workflows2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/4_1_workflows/workflows2.png -------------------------------------------------------------------------------- /docs/4_2_workflows.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | # Running a workflow 6 | Workflows are analyses that are intended to be executed (one or more times) with different user-provided input Datasets. Workflow can be reused over and over, not only reducing tedious work, but enhancing reproducibility by applying the same exact methods to all of your data. 7 | 8 | Running a workflow is easy with Galaksio. At the "Workflows" panel, find the workflow that you want to run and click on the option "Run workflow". This option will open a more detailed view of the workflow. The first step in the process displays an overview of the workflow (Figure 1). Using the buttons located at the bottom we can easily configure our workflow execution. 9 | 10 |
11 | 12 |

Figure 1. Overview for the selected workflow.

13 |
14 | 15 | At the second step in the process we can choose the history that contains the files that will be used in the workflow. Additionally, we can upload new datasets or create new dataset collections (Figure 2). 16 | 17 |
18 | 19 |

Figure 2. In step 2, we can optionally choose the history that we want to use for the execution.

20 |
21 | 22 | The third step is probably the most important step in the process. At this step we need to choose the input datasets for the workflow (Figure 3). Input datasets (or dataset collections) can be selected from the current history. Make sure to select the correct files! 23 | 24 |
25 | 26 |

Figure 3. Choosing the input datasets for our example workflow.

27 |
28 | 29 | After selecting the input datasets, we can go to the next step. Step 4 displays all the steps that constitute the workflow. Due to the workflow was designed by an skilled user, we can assume that the default configuration for each step is valid for our analysis. Nevertheless, it is possible to customize the parameters for each step in the process. For example, figure 4 displays a custom configuration for the tool "Bowtie2". 30 | 31 |
32 | 33 |

Figure 4. Customizing the execution of the Bowtie2 tool.

34 |
35 | 36 | Finally, the last step in the process displays an overview of the execution, including the selected input datasets and the custom options for the workflow steps (Figure 5). Now we are ready for launching our workflow! 37 | 38 |
39 | 40 |

Figure 5. The summary for our workflow execution. Now we are ready for launch!

41 |
42 | 43 | Using the option "Run workflow" we will notify Galaxy to start a new run of our customized workflow. Usually workflow execution can take a while to finish. Meanwhile, we can keep working on Galaksio as our worflows will be executed in background. Using the top toolbar we can get follow the current state of our executions and recover them as soon as they finish (Figure 6). 44 | 45 |
46 | 47 |

Figure 6. Workflows can be executed in background. In figure, the top bar displays the status for all the worflows (5 done and 1 running). This information is also available at the home panel, at the "Workflow invocations" section.

48 |
49 | 50 | When our workflow is done, we can recover them and access to the resulting datasets. All the results for our workflow can be downloaded and are stored in our current history. 51 | -------------------------------------------------------------------------------- /docs/4_2_workflows/galaksio_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/4_2_workflows/galaksio_logo.png -------------------------------------------------------------------------------- /docs/4_2_workflows/worflows1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/4_2_workflows/worflows1.png -------------------------------------------------------------------------------- /docs/4_2_workflows/worflows2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/4_2_workflows/worflows2.png -------------------------------------------------------------------------------- /docs/4_2_workflows/worflows3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/4_2_workflows/worflows3.png -------------------------------------------------------------------------------- /docs/4_2_workflows/worflows4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/4_2_workflows/worflows4.png -------------------------------------------------------------------------------- /docs/4_2_workflows/worflows5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/4_2_workflows/worflows5.png -------------------------------------------------------------------------------- /docs/4_2_workflows/worflows6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/4_2_workflows/worflows6.png -------------------------------------------------------------------------------- /docs/5_use_case.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 | 6 | # Use case 1. 7 | -------------------------------------------------------------------------------- /docs/5_use_case/galaksio_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/5_use_case/galaksio_logo.png -------------------------------------------------------------------------------- /docs/6_license.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 | # Galaksio, an easy to use GUI for running Galaxy workflows. 6 | 7 | **Galaksio** application is distributed under **GNU General Public License, Version 3.**. 8 | 9 |
10 | 11 |
12 | 13 | This program is **free software**; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. 14 | 15 | This program is distributed in the hope that it will be useful, but **WITHOUT ANY WARRANTY**; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License along with this program. If not, see [http://www.gnu.org/licenses](http://www.gnu.org/licenses). 18 | 19 | Galaksio has been developed by the [SLU Global Bioinformatics Centre](http://sgbc.slu.se/) at the Sveriges lantbruksuniversitet (Swedish University of Agricultural Sciences). 20 | This project is part of the B3Africa Project [http://www.b3africa.org/](http://www.b3africa.org/), which has received funding from the European Union’s Horizon 2020 research and innovation programme. 21 | 22 | ## Contact 23 | 24 | ** Rafael Hernández de Diego, PhD Student **, Main Developer. 25 | 26 | ** Tomas Klingström, PhD Student **, B3Africa WP4 leader. 27 | 28 | ** Prof. Erik Bongcam-Rudloff **, Head Genomics of the SLU Global Bioinformatics Centre. 29 | 30 | For any question on Galaksio, you can mail us to [rafael.hernandez.de.diego@slu.se](mailto:rafael.hernandez.de.diego@slu.se). 31 | 32 | 33 |
34 | 35 | 36 |
37 | 38 | -------------------------------------------------------------------------------- /docs/6_license/ECH2020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/6_license/ECH2020.png -------------------------------------------------------------------------------- /docs/6_license/galaksio_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/6_license/galaksio_logo.png -------------------------------------------------------------------------------- /docs/6_license/gplv3-127x51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/6_license/gplv3-127x51.png -------------------------------------------------------------------------------- /docs/6_license/logoB3Africa400x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/6_license/logoB3Africa400x300.jpg -------------------------------------------------------------------------------- /docs/ECH2020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/ECH2020.png -------------------------------------------------------------------------------- /docs/galaksio_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/galaksio_logo.png -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 | 6 | # Galaksio, an easy to use GUI for running Galaxy workflows. 7 | 8 | **Welcome to the Galaksio documentation.** 9 | 10 | **Galaksio** is a web tool that provides a simple but complete UI for using Galaxy for biologists that require bioinformatical workflows to complete their researching. 11 | 12 | Galaksio has been developed by the [SLU Global Bioinformatics Centre](http://sgbc.slu.se/) at the Sveriges lantbruksuniversitet (Swedish University of Agricultural Sciences). 13 | This project is part of the B3Africa Project [http://www.b3africa.org/](http://www.b3africa.org/), which has received funding from the European Union’s Horizon 2020 research and innovation programme. 14 | 15 | ## Contact 16 | 17 | ** Rafael Hernández de Diego, PhD Student **, Main Developer. 18 | 19 | ** Tomas Klingström, PhD Student **, B3Africa WP4 leader. 20 | 21 | ** Prof. Erik Bongcam-Rudloff **, Head Genomics of the SLU Global Bioinformatics Centre. 22 | 23 | For any question on Galaksio, you can mail us to [rafael.hernandez.de.diego@slu.se](mailto:rafael.hernandez.de.diego@slu.se). 24 | 25 |
26 | 27 | 28 |
29 | -------------------------------------------------------------------------------- /docs/index/ECH2020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/index/ECH2020.png -------------------------------------------------------------------------------- /docs/index/galaksio_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/index/galaksio_logo.png -------------------------------------------------------------------------------- /docs/index/logoB3Africa400x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/index/logoB3Africa400x300.jpg -------------------------------------------------------------------------------- /docs/logoB3Africa400x300.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/docs/logoB3Africa400x300.jpg -------------------------------------------------------------------------------- /mkdocs.yml: -------------------------------------------------------------------------------- 1 | site_name: Galaksio Documentation 2 | pages: 3 | - ['index.md', 'Home'] 4 | - ['1_1_galaxy.md', 'Getting start', 'The Galaxy project and Galaksio'] 5 | - ['1_2_concepts.md', 'Getting start', 'Must know concepts'] 6 | - ['1_3_install.md', 'Getting start', 'Installing Galaksio'] 7 | - ['1_4_quick_start.md', 'Getting start', 'Quick start'] 8 | - ['2_1_users.md', 'User system', 'Users in Galaksio'] 9 | - ['3_1_histories.md', 'Histories and datasets', 'Histories in Galaksio'] 10 | - ['3_2_histories.md', 'Histories and datasets', 'Managing datasets'] 11 | - ['3_3_histories.md', 'Histories and datasets', 'Managing dataset collections'] 12 | - ['4_1_workflows.md', 'Workflows', 'Browsing workflows'] 13 | - ['4_2_workflows.md', 'Workflows', 'Running a workflow'] 14 | - ['5_use_case.md', 'Use case', 'Example of use'] 15 | - ['6_license.md', 'About', 'License'] 16 | theme: readthedocs 17 | -------------------------------------------------------------------------------- /server/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/server/__init__.py -------------------------------------------------------------------------------- /server/conf/.dummy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/server/conf/.dummy -------------------------------------------------------------------------------- /server/launch_server.py: -------------------------------------------------------------------------------- 1 | import os 2 | import shutil 3 | 4 | from .server import Application 5 | 6 | isFirstLaunch = False 7 | isDocker = False 8 | 9 | if not os.path.isfile(os.path.dirname(os.path.realpath(__file__)) + "/conf/server.cfg"): 10 | print("Configuration not found, creating new settings file") 11 | conf_dir = os.path.dirname(os.path.realpath(__file__)) + "/conf/" 12 | res_dir = os.path.dirname(os.path.realpath(__file__)) + "/resources/" 13 | shutil.copyfile(res_dir + "__init__.py", conf_dir + "__init__.py") 14 | shutil.copyfile(res_dir + "example_serverconf.cfg", conf_dir + "server.cfg") 15 | shutil.copyfile(res_dir + "logging.cfg", conf_dir + "logging.cfg") 16 | isFirstLaunch = True 17 | else: 18 | print("Configuration found, launching application") 19 | 20 | application = Application() 21 | application.isFirstLaunch = isFirstLaunch 22 | application.isDocker = isDocker 23 | app = application.app 24 | 25 | application.launch() 26 | -------------------------------------------------------------------------------- /server/log/.dummy: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/server/log/.dummy -------------------------------------------------------------------------------- /server/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/server/resources/__init__.py -------------------------------------------------------------------------------- /server/resources/example_serverconf.cfg: -------------------------------------------------------------------------------- 1 | [server_settings] 2 | server_host_name = 0.0.0.0 3 | server_subdomain = 4 | server_port_number = 8081 5 | server_allow_debug = False 6 | safe_upload = True 7 | max_content_length = 300 8 | root_directory = 9 | tmp_directory = /tmp 10 | 11 | [galaxy_settings] 12 | galaxy_server = https://usegalaxy.eu 13 | galaxy_server_url = 14 | admin_accounts = myadmin@galaksio.com 15 | 16 | -------------------------------------------------------------------------------- /server/resources/logging.cfg: -------------------------------------------------------------------------------- 1 | [loggers] 2 | keys=root,errorLogger 3 | 4 | [handlers] 5 | keys=consoleHandler,fileHandler 6 | 7 | [formatters] 8 | keys=info 9 | 10 | [logger_root] 11 | level=DEBUG 12 | handlers=fileHandler, consoleHandler 13 | 14 | [logger_errorLogger] 15 | level=ERROR 16 | handlers=fileHandler, consoleHandler 17 | qualname=errorLogger 18 | 19 | [handler_consoleHandler] 20 | class=StreamHandler 21 | formatter=info 22 | args=(sys.stdout,) 23 | 24 | [handler_fileHandler] 25 | formatter=info 26 | class=handlers.RotatingFileHandler 27 | args=(os.path.join(sys.path[0], 'server/log/application.log'), 'a', 31457280, 15) 28 | 29 | [formatter_info] 30 | format=%(asctime)s - %(levelname)s - %(filename)s : %(funcName)s - %(message)s 31 | -------------------------------------------------------------------------------- /server/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | DIR=$(dirname "$0") 4 | 5 | function printHelp { 6 | echo "Usage run.sh --start | --stop | --restart" 7 | echo "" 8 | } 9 | 10 | function start_service { 11 | cd $DIR/.. 12 | PYTHON=$(which python); 13 | $PYTHON -m server.launch_server & 14 | cd - 15 | disown %1; sleep 2 16 | pid=`ps -Af | grep 'launch_server.py' | grep -v "grep" | awk '{ print $2 }'` 17 | echo $pid > $DIR/launch_server.pid 18 | echo "Daemon started." 19 | } 20 | 21 | function stop_service { 22 | kill `cat $DIR/launch_server.pid` 23 | 24 | if [[ "$?" == "0" ]]; then 25 | rm $DIR/launch_server.pid 26 | echo "Success" 27 | else 28 | echo "Failed, daemon not stopped." 29 | fi 30 | } 31 | 32 | case "$1" in 33 | --start) 34 | start_service 35 | ;; 36 | --stop) 37 | stop_service 38 | ;; 39 | --restart) 40 | stop_service && sleep 2 && start_service 41 | ;; 42 | *) 43 | echo "Invalid option." 44 | printHelp 45 | ;; 46 | esac 47 | -------------------------------------------------------------------------------- /server/servlets/GalaxyAPI.py: -------------------------------------------------------------------------------- 1 | """ 2 | # (C) Copyright 2016 SLU Global Bioinformatics Centre, SLU 3 | # (http://sgbc.slu.se) and the B3Africa Project (http://www.b3africa.org/). 4 | # 5 | # All rights reserved. This program and the accompanying materials 6 | # are made available under the terms of the GNU Lesser General Public License 7 | # (LGPL) version 3 which accompanies this distribution, and is available at 8 | # http://www.gnu.org/licenses/lgpl.html 9 | # 10 | # This library is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | # Lesser General Public License for more details. 14 | # 15 | # Contributors: 16 | # Rafael Hernandez de Diego 17 | # Tomas Klingstrom 18 | # Erik Bongcam-Rudloff 19 | # and others. 20 | # 21 | """ 22 | from os import path as osPath 23 | 24 | from bioblend.galaxy import GalaxyInstance 25 | 26 | 27 | def generateWorkflowReport(request, settings): 28 | # Get the invocation and workflow data 29 | invocation = request.json.get("invocation") 30 | workflow = request.json.get("workflow") 31 | 32 | # Open a new connection with bioblend 33 | galaxy_key = request.values.get("key") 34 | gi = GalaxyInstance(settings.GALAXY_SERVER, galaxy_key) 35 | 36 | workflow_steps = {} 37 | for step in workflow.get("steps"): 38 | workflow_steps[step.get("uuid")] = step 39 | 40 | for step in invocation.get("steps"): 41 | workflow_step = workflow_steps[step.get("workflow_step_uuid")] 42 | workflow_step["state"] = step.get("state") 43 | workflow_step["job_id"] = step.get("job_id") 44 | workflow_step["job"] = gi.jobs.show_job(step.get("job_id")) 45 | 46 | # GENERATE THE HTML 47 | html_code = "" 48 | to_close_tags = [] 49 | 50 | html_code += addTag("h2", "Workflow details", "font-size: 30px; color:red") 51 | html_code += getEntryLine("Workflow name", workflow.get("name"), "font-size: 30px; color:red") 52 | html_code += openNewSection("div", "font-size: 20px;", to_close_tags) 53 | html_code += getEntryLine("Workflow name", workflow.get("name"), "font-size: 30px; color:red") 54 | html_code += getEntryLine("Owner", workflow.get("owner")) 55 | html_code += getEntryLine("Run date", invocation.get("update_time")) 56 | html_code += closeSection(to_close_tags) 57 | 58 | html_code += addTag("h2", "Steps details", "font-size: 30px; color:red") 59 | html_code += openNewSection("div", "font-size: 16px;", to_close_tags) 60 | 61 | for step in sorted(list(workflow_steps.values()), key=lambda k: k['id']): 62 | html_code += openNewSection("div", "font-size: 14px;", to_close_tags) 63 | html_code += addTag("h3", "Step" + str(step.get("id")) + ". " + step.get("name"), "font-size: 30px; color:red") 64 | html_code += addTag("b", "Inputs") 65 | 66 | if step.get("type") == "data_input": 67 | pass 68 | else: 69 | try: 70 | html_code += getEntryLine("Inputs", str(step.get("inputs"))) 71 | except Exception: 72 | pass 73 | 74 | html_code += addTag("b", "Params") 75 | try: 76 | html_code += getEntryLine("Inputs", str(step.get("job"))) 77 | except Exception: 78 | pass 79 | 80 | html_code += closeSection(to_close_tags) 81 | 82 | html_code += closeSection(to_close_tags) 83 | 84 | from fpdf import FPDF, HTMLMixin 85 | 86 | class MyFPDF(FPDF, HTMLMixin): 87 | pass 88 | 89 | pdf = MyFPDF() 90 | # First page 91 | pdf.add_page() 92 | pdf.write_html(html_code) 93 | tmp_path = osPath.join(settings.TMP_DIRECTORY, "report.pdf") 94 | pdf.output(tmp_path, 'F') 95 | 96 | return tmp_path 97 | 98 | 99 | def getEntryLine(label, value, style=""): 100 | return "

" + label + ": " + value + "

" 101 | 102 | 103 | def addTag(type, text, style=""): 104 | return "<" + type + " style='" + style + "'>" + text + "" 105 | 106 | 107 | def openNewSection(type, style, to_close_tags): 108 | to_close_tags.append(type) 109 | return "<" + type + " style='" + style + "'>" 110 | 111 | 112 | def closeSection(to_close_tags): 113 | tag = to_close_tags.pop() 114 | return "" 115 | -------------------------------------------------------------------------------- /server/servlets/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SGBC/galaksio/f783fd7a71c74a45b223033b6b102417e416bf6c/server/servlets/__init__.py -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [flake8] 2 | ignore = E501 3 | import-order-style = smarkets 4 | --------------------------------------------------------------------------------