├── .gitignore ├── docs ├── js │ ├── clipboard_init.js │ └── clipboard.min.js ├── img │ ├── appcatalog.png │ ├── appdetails.png │ ├── devconsole.png │ ├── expstat02.png │ ├── expstat1.png │ ├── expstat2.png │ ├── home-page.png │ ├── home-page2.png │ ├── login-page.png │ ├── manageuser.png │ ├── app-catalog.png │ ├── ext-usr-prof.png │ ├── nek-5000-job.png │ ├── wagtail-home.png │ ├── wagtail-nav.png │ ├── detectcovidexp.png │ ├── gau16appdeploy.png │ ├── gau16appdetails.png │ ├── gau16appinput.png │ ├── nek-app-int-1.png │ ├── nek-app-int-2.png │ ├── nek-app-int-3.png │ ├── nek-app-int-4.png │ ├── nek-app-int-5.png │ ├── nek-app-int-6.png │ ├── nek-app-int-7.png │ ├── user-profiles.png │ ├── user-settings.png │ ├── userprofilefix.png │ ├── cms_default_theme.pdf │ ├── crt-ext-usr-prof.png │ ├── detectcovidinput.png │ ├── django-dashboard.png │ ├── nek-5000-app-mod.png │ ├── user-profiles-old.png │ ├── wagtail-home-edit.png │ ├── emailverifyoverride.png │ ├── extendeduserprofile.png │ ├── gau-app-inputoutput1.png │ ├── gau-app-inputoutput2.png │ ├── gau16-app-detail-tab.png │ ├── helix-architecture.png │ ├── monitoring-framework.jpg │ ├── wagtail-child-edit.png │ ├── pga-menu-and-sub-menu.png │ ├── fillextendeduserprofile.png │ ├── multiple-ways-to-use-airavata.png │ └── multiple-ways-to-use-airavata-1.png ├── configuration │ ├── keycloak-configuration.md │ ├── wso2-is-configuration.md │ └── pga-configuration.md ├── user-documentation │ ├── develop-console.md │ ├── manage-notices.md │ ├── cred-store.md │ ├── central-shared.md │ ├── django-releases.md │ ├── gtwy-resource-profile.md │ ├── manage-users.md │ ├── group-resource-profile.md │ ├── supported-applications.md │ ├── exp-statistics.md │ ├── extended-user-profile.md │ ├── admin-groups.md │ ├── django-theme.md │ ├── quick-start.md │ ├── application-catalog.md │ ├── tutorials.md │ └── advance-inputs.md ├── previous-releases.md ├── maintenance │ ├── code-update │ │ ├── pga-update.md │ │ └── airavata-update.md │ └── pga-maintenance.md ├── css │ └── extra.css ├── installation │ ├── airavata-installation.md │ ├── pga-installation.md │ ├── wso2-is-installation.md │ └── airavata-server-properties.md ├── technical-documentation │ ├── django-portal.md │ ├── helix-job-management.md │ ├── sharing-documentation │ │ ├── api-overview.md │ │ ├── introduction.md │ │ ├── sharing-models.md │ │ └── sharing-cpi.md │ └── airavata-api.md ├── contact-us.md ├── index.md └── faq.md ├── requirements.txt ├── .readthedocs.yaml ├── README.md └── mkdocs.yml /.gitignore: -------------------------------------------------------------------------------- 1 | # Apache Airavata documentation 2 | site/ 3 | venv/ 4 | -------------------------------------------------------------------------------- /docs/js/clipboard_init.js: -------------------------------------------------------------------------------- 1 | new ClipboardJS(".btn[data-clipboard-target]"); 2 | -------------------------------------------------------------------------------- /docs/img/appcatalog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/appcatalog.png -------------------------------------------------------------------------------- /docs/img/appdetails.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/appdetails.png -------------------------------------------------------------------------------- /docs/img/devconsole.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/devconsole.png -------------------------------------------------------------------------------- /docs/img/expstat02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/expstat02.png -------------------------------------------------------------------------------- /docs/img/expstat1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/expstat1.png -------------------------------------------------------------------------------- /docs/img/expstat2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/expstat2.png -------------------------------------------------------------------------------- /docs/img/home-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/home-page.png -------------------------------------------------------------------------------- /docs/img/home-page2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/home-page2.png -------------------------------------------------------------------------------- /docs/img/login-page.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/login-page.png -------------------------------------------------------------------------------- /docs/img/manageuser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/manageuser.png -------------------------------------------------------------------------------- /docs/img/app-catalog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/app-catalog.png -------------------------------------------------------------------------------- /docs/img/ext-usr-prof.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/ext-usr-prof.png -------------------------------------------------------------------------------- /docs/img/nek-5000-job.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/nek-5000-job.png -------------------------------------------------------------------------------- /docs/img/wagtail-home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/wagtail-home.png -------------------------------------------------------------------------------- /docs/img/wagtail-nav.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/wagtail-nav.png -------------------------------------------------------------------------------- /docs/img/detectcovidexp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/detectcovidexp.png -------------------------------------------------------------------------------- /docs/img/gau16appdeploy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/gau16appdeploy.png -------------------------------------------------------------------------------- /docs/img/gau16appdetails.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/gau16appdetails.png -------------------------------------------------------------------------------- /docs/img/gau16appinput.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/gau16appinput.png -------------------------------------------------------------------------------- /docs/img/nek-app-int-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/nek-app-int-1.png -------------------------------------------------------------------------------- /docs/img/nek-app-int-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/nek-app-int-2.png -------------------------------------------------------------------------------- /docs/img/nek-app-int-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/nek-app-int-3.png -------------------------------------------------------------------------------- /docs/img/nek-app-int-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/nek-app-int-4.png -------------------------------------------------------------------------------- /docs/img/nek-app-int-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/nek-app-int-5.png -------------------------------------------------------------------------------- /docs/img/nek-app-int-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/nek-app-int-6.png -------------------------------------------------------------------------------- /docs/img/nek-app-int-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/nek-app-int-7.png -------------------------------------------------------------------------------- /docs/img/user-profiles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/user-profiles.png -------------------------------------------------------------------------------- /docs/img/user-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/user-settings.png -------------------------------------------------------------------------------- /docs/img/userprofilefix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/userprofilefix.png -------------------------------------------------------------------------------- /docs/img/cms_default_theme.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/cms_default_theme.pdf -------------------------------------------------------------------------------- /docs/img/crt-ext-usr-prof.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/crt-ext-usr-prof.png -------------------------------------------------------------------------------- /docs/img/detectcovidinput.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/detectcovidinput.png -------------------------------------------------------------------------------- /docs/img/django-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/django-dashboard.png -------------------------------------------------------------------------------- /docs/img/nek-5000-app-mod.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/nek-5000-app-mod.png -------------------------------------------------------------------------------- /docs/img/user-profiles-old.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/user-profiles-old.png -------------------------------------------------------------------------------- /docs/img/wagtail-home-edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/wagtail-home-edit.png -------------------------------------------------------------------------------- /docs/img/emailverifyoverride.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/emailverifyoverride.png -------------------------------------------------------------------------------- /docs/img/extendeduserprofile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/extendeduserprofile.png -------------------------------------------------------------------------------- /docs/img/gau-app-inputoutput1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/gau-app-inputoutput1.png -------------------------------------------------------------------------------- /docs/img/gau-app-inputoutput2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/gau-app-inputoutput2.png -------------------------------------------------------------------------------- /docs/img/gau16-app-detail-tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/gau16-app-detail-tab.png -------------------------------------------------------------------------------- /docs/img/helix-architecture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/helix-architecture.png -------------------------------------------------------------------------------- /docs/img/monitoring-framework.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/monitoring-framework.jpg -------------------------------------------------------------------------------- /docs/img/wagtail-child-edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/wagtail-child-edit.png -------------------------------------------------------------------------------- /docs/img/pga-menu-and-sub-menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/pga-menu-and-sub-menu.png -------------------------------------------------------------------------------- /docs/img/fillextendeduserprofile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/fillextendeduserprofile.png -------------------------------------------------------------------------------- /docs/img/multiple-ways-to-use-airavata.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/multiple-ways-to-use-airavata.png -------------------------------------------------------------------------------- /docs/img/multiple-ways-to-use-airavata-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/apache/airavata-admin-user-docs/main/docs/img/multiple-ways-to-use-airavata-1.png -------------------------------------------------------------------------------- /docs/configuration/keycloak-configuration.md: -------------------------------------------------------------------------------- 1 | 2 | !!! note 3 | Please refer to [this](https://docs.google.com/document/d/1tzqmXPtQgFJR0L_pKuDVdq0D1TjpciBPwLsJE9Ib9ic/edit?usp=sharing). 4 | 5 | -------------------------------------------------------------------------------- /docs/user-documentation/develop-console.md: -------------------------------------------------------------------------------- 1 | ## Developer Console 2 | 3 | 1. This is for gateway developers (Who should have admin access) can download the properties file to set up local Django Portal development environment. 4 | 5 | ![Screenshot](../img/devconsole.png) 6 | Image: Developer Console 7 | -------------------------------------------------------------------------------- /docs/previous-releases.md: -------------------------------------------------------------------------------- 1 | ## Previous Releases 2 | 3 | -

Airavata 0.18 Release Docs

4 | -

Airavata 0.17 Release Docs

5 | -

Airavata 0.16 Release Docs

6 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | click==8.1.2 2 | ghp-import==2.0.2 3 | importlib-metadata==4.11.3 4 | Jinja2==3.1.1 5 | Markdown==3.3.6 6 | MarkupSafe==2.1.1 7 | mergedeep==1.3.4 8 | mkdocs==1.3.0 9 | packaging==21.3 10 | pyparsing==3.0.7 11 | python-dateutil==2.8.2 12 | PyYAML==6.0 13 | pyyaml_env_tag==0.1 14 | six==1.16.0 15 | typing_extensions==4.1.1 16 | watchdog==2.1.7 17 | zipp==3.7.0 18 | -------------------------------------------------------------------------------- /docs/maintenance/code-update/pga-update.md: -------------------------------------------------------------------------------- 1 | ## PGA Update 2 | 3 | 1. In your cloned gateway folder (airavata-php-gateway) get the latest updates from git 4 |
 git pull
5 | 2. Do a composer update 6 |
 composer update 
7 | This may take little time.... 8 | 3. You are all set with latest updates! 9 | 4. For Airavata updating steps try [Airavata Update](airavata-update.md) 10 | -------------------------------------------------------------------------------- /docs/css/extra.css: -------------------------------------------------------------------------------- 1 | .darkred{ 2 | color: #7f0000; 3 | /*darkred*/ 4 | } 5 | 6 | .lred{ 7 | color: #b20000; 8 | /*lighterred*/ 9 | } 10 | 11 | .blue{ 12 | color: #3333ff; 13 | /*darkblue*/ 14 | } 15 | 16 | h3 17 | { 18 | display:inline; 19 | } 20 | 21 | h5 22 | { 23 | display:inline; 24 | } 25 | 26 | h6 27 | { 28 | display:inline; 29 | } 30 | 31 | .wy-nav-content{ 32 | max-width: 80%; 33 | } -------------------------------------------------------------------------------- /.readthedocs.yaml: -------------------------------------------------------------------------------- 1 | # .readthedocs.yaml 2 | # Read the Docs configuration file 3 | # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details 4 | 5 | # Required 6 | version: 2 7 | 8 | # Set the version of Python and other tools you might need 9 | build: 10 | os: ubuntu-22.04 11 | tools: 12 | python: "3.10" 13 | 14 | mkdocs: 15 | configuration: mkdocs.yml 16 | 17 | # Optionally declare the Python requirements required to build your docs 18 | python: 19 | install: 20 | - requirements: requirements.txt 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Apache Airavata User Documentation 2 | 3 | Apache Airavata user documentation with Markdown. 4 | 5 | --- 6 | 7 | - View the [Apache Airavata user documentation][airavata-doc]. 8 | 9 | [airavata-doc]: http://airavata-user-docs.readthedocs.io 10 | 11 | 12 | ## Building documentation 13 | 14 | ## Documentation 15 | 16 | Create a virtual environment first (one time setup): 17 | 18 | ``` 19 | python3 -m venv venv 20 | source venv/bin/activate 21 | pip install -r requirements.txt 22 | ``` 23 | 24 | Build the documentation locally: 25 | ``` 26 | mkdocs serve 27 | ``` 28 | -------------------------------------------------------------------------------- /docs/installation/airavata-installation.md: -------------------------------------------------------------------------------- 1 | ##Airavata & Django Portal Installation 2 | 3 | ###Intended Users 4 | 1. This section is mainly for gateway developers. 5 | 2. Installing local copy of Airavata, Django and related other applications will provides insight in to the system. 6 | 7 | ###Installation Instructions 8 | Please follow the instructions provided in InteliJ IDEA Installation
9 | This installation will set you up with fully functioning middleware and gateway portal. It is also set up to launch test experimental jobs on Jetstream cloud SLURM cluster. 10 | -------------------------------------------------------------------------------- /docs/user-documentation/manage-notices.md: -------------------------------------------------------------------------------- 1 | ## Communication with Gateway Users 2 | 1. Provides a method to notify the gateway user. 3 | 2. When user logs in, a 'Bell' icon will be displayed with the number of unread messages next to Dashboard on top menu bar. 4 | 3. Gateway admin can create these notices with an assigned priority. 5 | 4. navigate to Settings → Manage Notices 6 | 5. Click 'New Notice +' 7 | 6. Provide: 8 | - Notice Title: Gordon cluster is retiring (A heading for the notice) 9 | - Notice Message: Gordon cluster is retiring from Dec 31st 2016. Preserve your files now. 10 | - Publish Date: Select from the provided calendar 11 | - Expiration Date: Mandatory. 12 | - Priority: LOW (Default is 'LOW'. Admin can change) -------------------------------------------------------------------------------- /docs/technical-documentation/django-portal.md: -------------------------------------------------------------------------------- 1 | ##Django Portal Documentation 2 | Please refer Apache Airavata Django Portal Documentation for details on Django portal implementation. 3 | 4 | For a sample "Hello World" Django 'App' example refer Hello World Django App 5 | 6 | We have integrated a map tool as a Django 'App' for our SimCCS gateway
7 | refer our SimCCS Map tool code 8 | 9 | Contact us if you need a Django research gateway from Apache Airavata. We would assist you in your 'App' implementation. -------------------------------------------------------------------------------- /docs/user-documentation/cred-store.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | #####
Using Credential Store
6 | 1. Navigate to Settings → Credential Store. 7 | 2. Click 'New SSH Credential +' and provide a key description. 8 | 3. The new key will be generated and available to copy. 9 | 4. Apart from using the key for SSH communications with compute resources and gateway storage resource, you can share the key with other gateway users and user groups. 10 | 5. When sharing a key, there are 3 permission levels, READ, WRITE and MANAGE_SHARING. 11 | 6. READ permission enables the users to use the key, WRITE permission enables using the key plus deleting the key. MANAGE_SHARING is use the key, delete it and also share with other users and user groups behalf of the owner of the key. 12 | 7. NOTE: Make sure not to delete once assigned to a compute resource or the storage resource.
13 | ![Screenshot](../img/django-dashboard.png) -------------------------------------------------------------------------------- /docs/contact-us.md: -------------------------------------------------------------------------------- 1 | ## Contact Us 2 | 3 | To request for a gateway with Apache Airavata create an account in SciGaP Portal
4 | Submit a request using the online application.
5 | We will contact you to discuss your requirement and provide you with the best Solution for You! 6 | 7 | 8 | For your clarifications, Questions and Suggestions please contact us through 9 | Airavata mailing list 10 | 11 | OR 12 | 13 | Slack 14 | 15 | Issue Reporting 16 | Any issue encountered with Airavata or our gateway please log through; 17 | 18 | Airavata JIRA 19 |

20 | NOTE: If you don't have an account in Apache JIRA you have to create one prior to submitting issues. 21 | 22 | 23 | -------------------------------------------------------------------------------- /docs/user-documentation/central-shared.md: -------------------------------------------------------------------------------- 1 | ## Shared Storage Directory 2 | 3 | ###Gateway Storage 4 | 1. Storage is available for gateway users to view their experiment data and also to create directories and store their data files. 5 | 2. Apart from individually created data directories and experimental data directories gateways can also have a central shared directory for all the gateway users to access. 6 | 3. To enable the 'Shared' central directory, as the gateway admin you need to request from the SciGaP team. 7 | 4. This Directory is accessible to admins and other users though **Workspace** → **Storage** 8 | 5. The 'Shared' directory cannot be deleted. 9 | 6. As the gateway admin, you can; 10 | - Add child directories to the 'Shared' 11 | - Add files into 'Shared' 12 | - Add files into child directories within 'Shared' 13 | - Remove files from 'Shared' and child directories 14 | - Delete child directories 15 | 7. Please NOTE: once deleted there is no method to recover. Prior to deletion, you would be prompted with a confirmation message to ensure that you are responsible for the action as the gateway admin. 16 | 17 | 18 | -------------------------------------------------------------------------------- /docs/installation/pga-installation.md: -------------------------------------------------------------------------------- 1 | ## PGA Installation 2 | 3 | ### PGA 0.17 Installation Steps 4 | - Uses Ansible playbooks.
5 | - Link [1] to the playbook file on the ‘master’ branch. 6 | - This playbook consist of two roles, env_setup [2] and pga [3] and you can look at those roles for further details. 7 | - But first read [4] 8 | - Only for Cent OS 7 9 | 10 | [1] PGA Ansible Playbooks
11 | [2] Env_setup
12 | [3] PGA
13 | [4] READ ME
14 | 15 | 16 | Previous PGA version: PGA 0.16 Installation Steps
17 | NOTE: For gateway developers who prefers to install latest version using step by step instruction, can use the 0.16 instructions as a guide. -------------------------------------------------------------------------------- /docs/user-documentation/django-releases.md: -------------------------------------------------------------------------------- 1 | ## Django Releases 2 | 3 | ###2023 4 | ####

February

5 | 1. Central shared data directory 6 | - JIRA ticket
7 | - [Documentation](central-shared.md) 8 | 2. Print gateway user's experiment data full directory path in Experiment Statistics 9 | - JIRA Ticket
10 | - [Documentation](exp-statistics.md) 11 | 3. Fix: When experiments are cloned and left without a mandatory file, throws exception 12 | - JIRA Ticket
13 | 14 | 15 | ####January 16 | 1. Extended User Profile (EUP) 17 | - JIRA Ticket
18 | - [Documentation](extended-user-profile.md) 19 | 2. Gateway admins search experiments using the Job ID in Experiment Statistics 20 | - JIRA ticket
21 | - [Documentation](exp-statistics.md)
22 | 3. Enable view only access to Read-Only-Admin users for EUP configuration. 23 | - JIRA Ticket
24 | - [Documentation](extended-user-profile.md) 25 | -------------------------------------------------------------------------------- /docs/user-documentation/gtwy-resource-profile.md: -------------------------------------------------------------------------------- 1 | ## Gateway Resource Profile 2 | 3 | ######
Register Storage Resource
4 | NOTE: SciGaP admins will do this configuration for you in SciGaP Portal.
5 | 6 | 7 | #####
Gateway Resource Profile
8 | 1. NOTE: This is the section to configure the storage resource for the gateway. Storage resource is the place to hold all gateway user data: inputs and outputs from computations.
9 | 2. Navigate to Settings → Gateway Resource Profile. 10 | 3. Select a SSH key from the list or generate new one and assign it. 11 | 4. Click: New Storage Preference +. 12 | 5. Select Storage Resource: This is the storage resource for the user files and generally its the same server that holds the Django portal. If the gateway is deployed for you, this part would be taken cared by the SciGaP team. If the gateway is self-deployed select the host name of the server you deployed the gateway. 13 | 6. Login Username: pga (This is the username which uses to ssh to the storage resource) 14 | 7. File System Root Location: /var/www/portals/gateway-user-data/seagrid (The path which stores all user files, input files and output files) 15 | 8. Resource Specific Credential Store Token: Select a token from the list. (Public key of this token need to be added to authorized_keys in your storage resource 'pga' login) 16 | 9. Save. 17 | 18 | -------------------------------------------------------------------------------- /docs/user-documentation/manage-users.md: -------------------------------------------------------------------------------- 1 | ##Manage Users 2 | 3 | 1. Manage Users page is for gateway admins to 4 | - Override Email Verification
5 | - Correct User Profile
6 | - Add users to Groups
7 | - Remove users from Group
8 | - Delete Unverified Users
9 | 10 | #####
Override Email Verification
11 | 1. This is applicable for users who crated local accounts providing their details. 12 | 2. Users have to verify their email, but in the case of email verification link is delayed, the gateway admin can override and enable the user. 13 | 14 | ------ 15 | ![Screenshot](../img/emailverifyoverride.png) 16 | Image:Override Email Verification and Enable User 17 | 18 | #####
User Profile Correction
19 | 1. When users use their existing institutional login, to create accounts sometimes gateway may not receive vital information such as first name, last name, email and rarely the username also not in the right format. 20 | 2. Such situations, gateway admin need to fix. 21 | 3. Gateway admin can add the first name, last name and set the username to the email linked to the institution selected. 22 | 23 | ------ 24 | ![Screenshot](../img/userprofilefix.png) 25 | Image:User Profile Correction Tab 26 | 27 | #####
User Profile Correction
-------------------------------------------------------------------------------- /docs/technical-documentation/helix-job-management.md: -------------------------------------------------------------------------------- 1 | ## Job Management 2 | 3 | Job Management is a key component of Airavata and we recently upgraded the GFac based Job Management system to a new 4 | system which is more efficient and extendible. Job Management system mainly covers two areas 5 | 6 | 1. Executing workflows related to job submission and data transfers among compute and storage resources 7 | 2. Monitoring the status of already executing jobs in the remote compute resources 8 | 9 | For executing workflows, we use Apache Helix as a generic workflow engine. Workflow managers accept workflow execution 10 | requests from the orchestrator and job monitors and transfers those requests into the Helix cluster to execute them. Helix 11 | cluster is aware of how to decode those requests and execute workflows reliably and efficiently. Tasks in the Helix cluster 12 | uses Adaptor Support libraries to talk to external resources according the relevant protocol and security guidelines. 13 | 14 | ![architecture](../img/helix-architecture.png) 15 | 16 | For job monitoring, new system supports multiple job monitoring mechanisms. Email monitoring is the primary method of 17 | monitoring jobs where it listens to the email alters sent by compute resources while the jobs' states were changed. 18 | Realtime monitoring is the new mechanism we added into the monitoring framework where it gets notified directly from the 19 | jobs when their states are changed. Using both of these mechanisms, we managed to achieve both reduced response time and 20 | better accuracy in job monitoring. 21 | 22 | ![monitoring](../img/monitoring-framework.jpg) -------------------------------------------------------------------------------- /docs/user-documentation/group-resource-profile.md: -------------------------------------------------------------------------------- 1 | ## Group Resource Profile (GRP) 2 | 3 | #####
Register your Compute & Storage Resources

4 | 5 | NOTE: Only SciGaP admins or gateway service provider can add compute resources and storage resources.
6 |

What is a compute resource?
A compute resource is an object that represents a host, host cluster, or pool in a virtualization platform, a virtual data center, or an Amazon region on which machines can be provisioned. 7 |
Compute resource could come as national resources, campus resources or even a private cluster. 8 |
NOTE:For testing purposes, users (mainly gateway developers) this could even be the local machine. 9 |

What is a storage resource?
A storage resource is the server that stores all user data files: application input files and output files. 10 |
Most of the time this is the same server that the gateway is deployed in. The storage resource can be either provided by the gateway provider or by you. 11 |
If the gateway service provider is providing the resource, then there will be file retention policies in place. 12 | 13 | ###### Compute Resource Information 14 | Provide the information below to get your compute resource/HPC registered with Super admin portal, SciGaP
15 | 1. HPC Name (This is the name used to SSH to the resource)
16 | 2. Queue details (Queue name, maximum limits of nodes, CPUs and Walltime.)
17 | 3. Resource manager type (SLURM, PBS)
18 | 4. Job command binary path
19 | 20 | 21 | -------------------------------------------------------------------------------- /mkdocs.yml: -------------------------------------------------------------------------------- 1 | site_name: Apache Airavata Admin User Docs 2 | site_url: https://airavata.apache.org/ 3 | site_description: Apache Airavata Documentation 4 | 5 | repo_url: https://github.com/apache/airavata-docs 6 | 7 | docs_dir: docs 8 | 9 | nav: 10 | - Home: 'index.md' 11 | - Admin User Documentation: 12 | - Quick Start: 'user-documentation/quick-start.md' 13 | - Tutorial: 'user-documentation/tutorials.md' 14 | - Application Catalog: 'user-documentation/application-catalog.md' 15 | - Advance Application Inputs: 'user-documentation/advance-inputs.md' 16 | - Experiment Statistis: 'user-documentation/exp-statistics.md' 17 | - Manage Users: 'user-documentation/manage-users.md' 18 | - Admin User Groups: 'user-documentation/admin-groups.md' 19 | - Credential Store: 'user-documentation/cred-store.md' 20 | - Group Resource Profile: 'user-documentation/group-resource-profile.md' 21 | - Gateway Resource Profile: 'user-documentation/gtwy-resource-profile.md' 22 | - Manage Notices: 'user-documentation/manage-notices.md' 23 | - Central Shared Storage Directory: 'user-documentation/central-shared.md' 24 | - Extended User Profile: 'user-documentation/extended-user-profile.md' 25 | - Developer Console: 'user-documentation/develop-console.md' 26 | - Django Theme Construction: 'user-documentation/django-theme.md' 27 | - Django Releases: 'user-documentation/django-releases.md' 28 | - Contact Us: 'contact-us.md' 29 | 30 | theme: readthedocs 31 | 32 | extra_css: 33 | - css/extra.css 34 | 35 | extra_javascript: 36 | - js/clipboard.min.js 37 | - js/clipboard_init.js 38 | 39 | markdown_extensions: 40 | - toc: 41 | permalink:  42 | - admonition 43 | -------------------------------------------------------------------------------- /docs/user-documentation/supported-applications.md: -------------------------------------------------------------------------------- 1 | ## Supported Applications 2 | 3 | ### Few Applications Supported by Airavata 4 | This list contains a sub section of application supported via gateways linked to Airavata. 5 | We can help you to run these in your own gateway. 6 | 7 | | Application | Availability | 8 | |:----------------- |:------------------------------------- | 9 | | Abaqus | Comet | 10 | | Abaqus-6.13-3 | Comet | 11 | | Abinit | BigRed, Bridges, Comet | 12 | | Amber_Sander | BigRed, Comet, Stampede | 13 | | AutoDock | BigRed, Karst | 14 | | AutoDock_Vina | Comet, Stampede | 15 | | CP2K | Comet, Stampede | 16 | | CPMD | Comet | 17 | | DDSCat | Comet | 18 | | DFTB+ | Stampede | 19 | | Gamess | BigRed, Comet, Gordon, Stampede | 20 | | Gaussian | BigRed. Bridges, Comet, Gordon | 21 | | Gaussian16 | Bridges | 22 | | Gromacs | BigRed, Bridges, Comet, Stampede | 23 | | Lammps | BigRed, Comet, Gordon, Stampede | 24 | | Molcas | Stampede KNL, Stampede | 25 | | NEK5000 | BigRed | 26 | | NWChem | Comet, Stampede | 27 | | Phasta_P | Stampede | 28 | | PSI4.0 | Comet | 29 | | QChem | Comet | 30 | | Quantum_Espresso | Comet, Bridges, JetStream, Stampede | 31 | | Tinker_Monte | Stampede | 32 | | Trinity | Karst | 33 | | WRF | Stampede | 34 | 35 | 36 | 37 | ### Application Inputs 38 | Inputs for all applications currently available in Airavata can be found Here! 39 | 40 | 41 | 42 | ### Application Configuration 43 | For sample configurations please refer [Admin Tutorials](quick-start.md) -------------------------------------------------------------------------------- /docs/user-documentation/exp-statistics.md: -------------------------------------------------------------------------------- 1 | ##Experiment Statistics for Monitoring 2 | 3 | ##### Monitor Gateway Traffic 4 | 1. Monitor current gateway experiment and job statuses through Settings → Experiment Statistics. 5 | 2. Gateway admin can view and filter experiments using this page. 6 | 3. To view individual experiments one can use 7 | - Experiment ID search 8 | - Job ID search 9 | 3. In **Experiment Statistics** page, by default, the gateway status for last 24 hours will be displayed. 10 | 4. Two buttons, 'Past 24 Hours' and 'Past Week' will group and list the experiments for the selected time. 11 | 5. In order to further filter the experiments use, **Filters**. 12 | - Username: AnneMarie (Gateway username need to be typed in) 13 | - Application Name: Gaussian16 (All the application in teh gateway will be listed) 14 | - Hostname: Expanse (A drop down will provide all the compute resources to select) 15 | - Click 'Get Statistics' 16 | 6. Using the calendar, you can search experiments for a specific time. 17 | 7. Once the experiments are filtered and grouped, click on the desired group (Existing experiments groups are 'Total','Created','Running', Completed','Cancelled' and 'Failed'). 18 | 8. When you list an experiment group you can select the experiment you want to view using 'View Details'. 19 | 9. This will open the experiment Details in a new tab. 20 | 10. In the page, you can view 21 | - Experiment status 22 | - Job status, job ID and name 23 | - Job script 24 | - Remote working directory path 25 | - Experimental data directory path 26 | - All the experiment launch and job submission tasks, their details, statuses 27 | - If any error messages 28 | - Responses from remote resource 29 | 11. **Experiment statistics** is mainly useful to investigate experiments and jobs users report issues. 30 | 31 | 32 | ![Screenshot](../img/expstat1.png) 33 | Image:Experiment Statistics 34 | 35 | ![Screenshot](../img/expstat02.png) 36 | Image: Experiment Details 37 | -------------------------------------------------------------------------------- /docs/configuration/wso2-is-configuration.md: -------------------------------------------------------------------------------- 1 | ## WSO2 Identity Server (IS) Configuration 2 | 3 | The steps below are for IS configuration when IS is hosted by Airavata team. In this situation you will be a tenant created under Airavata hosted IS. 4 | 5 | ### Request a Tenant Account 6 | 1. Request from Airavata team for a new Tenant account. For this use 7 |
Airavata mailing list 8 | OR 9 | HipChat 10 | 2. As the gateway admin, for the account creation provide; 11 | - First name 12 | - Last name 13 | - Preferred username & password as the admin (This is the username you will use to login to WSO2 IS and gateway as the admin user) 14 | - Email account 15 | 3. When Airavata team receives your request they will communicate with you if more information is required. 16 | 4. Once the tenant is created you will receive 17 | - URL for WSO2 IS 18 | - Username and password to login to WSO2 IS 19 |
20 |
21 | ### Configure Your Tenant 22 | 1. Login to IS server as the gateway admin tenant user. 23 | - Use the URL provided by the Airavata team; WSO2 URL for Gateway Admin 24 | - Use the username and password provided by you. (Please change your password in first login) 25 | 2. Navigate to Main Tab -->Service Providers --> Add 26 | - Give a service provider name and 'Register' 27 | - Out of the list below expand 'Inbound Authentication Configuration' 28 | - Out of the usb list underneath expand 'OAuth/OpenID Connect Configuration' and click 'Configure' 29 | - You will be navigated to 'Register New Application' UI. 30 | 3. To register new application; 31 | - Select OAuth Version = 2.0 32 | - From Allowed Grant Types select only 'Password' and 'Refresh Token' 33 | - Add 34 | 35 | 4. Copy the 'OAuth Client Key', 'OAuth Client Secret', Admin username, password and name to pga_config.php. 36 | 5. Navigate to Configure —> Claim management —>http://wso2.org/claims. And make "Supported by Default = true" 37 | 6. Navigate to Configure --> Users & Roles --> Users. Find the admin user and click 'User Profile'. Add the username at the bottom and update. 38 | 39 | You are all set to start configuring the gateway for job submission. For Gateway Configurations visit [PGA Configuration](pga-configuration.md). 40 | -------------------------------------------------------------------------------- /docs/user-documentation/extended-user-profile.md: -------------------------------------------------------------------------------- 1 | ##Extended User Profile 2 | 3 | 1. This feature is for gateway admins/PIs to obtain more gateway user information.
The users will create the accounts by providing the minimum information on local account creation and also comes through CILogon.
4 | In both these the gateway admins will only know;
5 | - First Name
6 | - Last Name
7 | - Email
8 | 9 | 2. Manage Users page is for gateway admins to
10 | - Enable the Feature
11 | - Feature in Action
12 | 13 | #####
Enable the Feature
14 | 1. With the Extended User Profile Feature, you can add any additional information you would want to obtain from the user. This information would assist with better serving the gateways users.
15 | 2. Navigate to **Settings** → **Manage Users** → **Extended User Profile**
16 | ![Screenshot](../img/ext-usr-prof.png) 17 | Image: Access Extended User Profile
18 | 19 | 3. To enable the Extended User Profile, first you need to configure what information you require from the users. You can shape the questions, using fields;
20 | - Single Choice
21 | - Multiple Choice
22 | - Text
23 | - User Agreement
24 | 25 | ![Screenshot](../img/crt-ext-usr-prof.png) 26 | Image: Options of Extended User Profile
27 | 4. When adding above, you can state whether the information is required or optional. Optional information can be ignored by the user at will but the required information must be provided to gain access to the gateway.
28 | 5. Gateway users, will be directed to complete the details of the extended user profile, upon login and will not be able to bypass, unless they provide the required details.
29 | 6. The gateway admins can review and update the required information time to time and keep it upto date with details needed to capture from the users. 30 | 31 | ![Screenshot](../img/extendeduserprofile.png) 32 | Image: Configure Extended User Profile 33 | 34 | #####
Feature in Action
35 | 1. Once the Extended User Profile details are configured, all gateway users will be directed to fill, except for admin users.
36 | 2. The gateway admins will be notified about new user account creations only after the users fill the profile details and the provided details will be shared though an email.
37 | 3. Users has the option of changing their profile detail through **User Settings** 38 | 39 | ![Screenshot](../img/fillextendeduserprofile.png) 40 | Image: Capture Extended User Profile Information -------------------------------------------------------------------------------- /docs/user-documentation/admin-groups.md: -------------------------------------------------------------------------------- 1 | ## Apache Airavata User Groups 2 | 3 | ### What Are Airavata User Groups? 4 | 5 | 1. Prior to using Airavata, lets identify and understand the user groups available and their features. 6 | 2. Knowing the groups and the features of each, will assist on shaping your gateway user hierarchy. 7 | 3. There are 3 base user groups in Airavata with different set of features at each level. 8 | - Admin 9 | - Admin-Read-Only 10 | - Gateway-User 11 | 12 | ### Features of each User Group 13 | 14 | 1. Admin Group 15 | - Set up gateway Group Resource Profiles. 16 | - Add gateway storage resource profile. 17 | - Generate SSH keys for compute and storage resource SSH communications.. 18 | - Add the generated SSH key to group resource profiles. 19 | - Add the generated SSH keys to authorized_key files in each resource. 20 | - Create Applications and their deployments in to the gateway. 21 | - Manage users, add the mto base groups. 22 |
NOTE: If user hosts his own gateway; 'Gateway Admin' role will have access to create compute resources and storage resources as well.

23 | 2. Admin-Read-Only 24 | - Can view everything in Settings but cannot Add, Edit or Delete any records from dashboard. 25 | - Can monitor experiments through Experiments Statistics in Experiment statistics. 26 |

27 | 3. Gateway User 28 | - Create, launch their own experiments in using available applications and compute resources. 29 | - Monitor progress of experiment execution. 30 | - Download experiment outputs from experiment summary or from the storage. 31 | - Upload files in to the storage for future use. 32 | - Group experiments by creating Projects. 33 | - Create own SSH keys from Credential store 34 | - Create Group Resource profiles to use individual HPC allocations for job submission through the gateway. 35 | - Password reset. 36 | 37 | 38 | ### How User Groups Work? 39 | 40 | 1. Users can belong to one or many user groups. 41 | 2. Two main categories of groups 42 | - Base groups - Created as default groups in the gateway at gateway deployment 43 | - User groups - Any user in the gateway can create user groups, and add other gateway users to the group. 44 | 3. Users in group will have one of the three roles. Three roles are: 45 | - Owner - Person who creates the user group 46 | - Admin - Person who can add other users in to the group. These users' role cannot be changed by users with admin role. 47 | - Member - This person can use benefits of the group, but cannot add or remove users from the group. 48 | 4. Only the owner of the group can change users; role. 49 | 5. Adding users to base groups can be done using two interfaces. 50 | - Settings → Manage Users 51 | - Top right-hand corner dropdown menu → Groups 52 | 6. Adding users to any other group that you are an admin of or the owner of can be done using 53 | - Top right-hand corner dropdown menu → Groups 54 | 7. In Manage Users page, users are listed with all the groups they are a member of. 55 | 56 | 57 | -------------------------------------------------------------------------------- /docs/maintenance/code-update/airavata-update.md: -------------------------------------------------------------------------------- 1 | ## Apache Airavata Update 2 | 3 | 1. In order to update Airavata with latest master code; go to the folder (Created in installation; LocalAiravata) initially created to clone Airavata. 4 | 2. Within your local folder navigate to folder 'airavata' and execute
git pull 
5 | Hint: If you are in the wrong folder you would probably get message
'fatal: Not a git repository (or any of the parent directories): .git'
6 | 3. Now build the code 7 |
 mvn clean install
8 | Hint: To avoid the 'tests on install' run
mvn clean install -Dmaven.test.skip=true
9 | 4. Once the build is success, stop the running Airavata server. You can either stop the java server using 10 |
kill -9 <process ID>
11 | OR
12 | Navigate to bin folder where airavata server exists (LocalAiravata/apache-airavata-server-0.15-SNAPSHOT/bin). and stop the server 13 |
./airavata-server.sh stop -force
14 | 5. For references, back up the currently existing release 15 |
mv apache-airavata-server-0.15-SNAPSHOT apache-airavata-server-0.15-SNAPSHOT-bk
16 | 6. Copy the new release to your local folder (LocalAiravata) 17 |
cp /<path to created folder>/LocalAiravata/airavata/distribution/target/apache-airavata-server-0.16-SNAPSHOT-bin.tar.gz .
18 | 7. Un-tar the copied new release 19 |
tar -xvf apache-airavata-server-0.16-SNAPSHOT-bin.tar.gz
20 | 8. Navigate to the new bin folder and back up airavata-server.properties and gfac-config.yaml files. 21 | 9. Copy your previously used airavata-server.properties from the backed up release to bin folder (This is the easiest way to get the properties file updated. If you prefer, you can change the new file manually. ☺) 22 |
/<your local path>/LocalAiravata/LocalAiravata/apache-airavata-server-0.16-SNAPSHOT-bk/bin/airavata-server.properties .
23 | 10. Copy your previously used gfac-config.yaml from the backed up release 24 |
cp /<your local path>/LocalAiravata/apache-airavata-server-0.16-SNAPSHOT-bk/bin/gfac-config.yaml .
25 | 11. Now compare with the new airavata-server.properties and gfac-config.yaml and make necessary changes in the copied files. 26 | Try
 diff airavata-server.properties airavata-server.properties-bk
27 | 12. Check the path correctness of credential store keystore in airavata-server.properties file. 28 |
credential.store.keystore.url=/<your local path>/LocalAiravata/airavata_sym.jks
29 | 13. Go to lib folder and copy mySQL jar (mysql-connector-java-5.1.38-bin.jar) from old backed up lib to the new lib 30 |
  cp /home/airavata/LocalAiravata/apache-airavata-server-0.16-SNAPSHOT-bk/lib/mysql-connector-java-5.1.38-bin.jar .
31 | 14. Now restart airavata server in bin folder 32 |
./airavata-server.sh start
33 | 15. Airavata ready for job submissions! 34 | 16. For PGA updating steps try [PGA Update](pga-update.md). 35 | -------------------------------------------------------------------------------- /docs/user-documentation/django-theme.md: -------------------------------------------------------------------------------- 1 | ## Gateway Theme Management 2 | 3 | In Django portal, the gateway branding or the theme is managed through a CMS. The Djangop portal uses WagTail CMS for the theme.
4 | The CMS takes care fo the gateway home page, child pages content.
5 | Gateways are initially deployed with a common base theme, but the gateway admins can re-brand according to their needs.
6 | In order to change the theme user needs to be in the Admin group.
7 | 8 | #####Default Django Theme Update In Details 9 | 10 | Django default theme [cms_default_theme.pdf](../img/cms_default_theme.pdf) 11 | 12 | ### Instructions on Gateway Theme 13 | NOTE: For details instructions please refer Github CMS Instructions 14 | 15 | 1. Login to your gateway portal. 16 | ![Screenshot](../img/login-page.png)

17 | 18 | 2. Once logged in navigate to Home page. 19 | ![Screenshot](../img/home-page.png)

20 | 21 | 3. Click on the Wagtail icon → Go to Wagtail Admin 22 | ![Screenshot](../img/home-page2.png)

23 | 24 | 4. You are no in Wagtail CMS 25 | ![Screenshot](../img/wagtail-home.png)

26 | 27 | 5. To create a new child page or to edit the existing Home page, navigate to Pages, on left. 28 | ![Screenshot](../img/wagtail-nav.png)

29 | 30 | 6. Keep using the arrow and navigating until the page you want to edit appears in the list. To edit the Home page, use the right arrow and then click on Home or the pen icon. 31 | ![Screenshot](../img/wagtail-home-edit.png)

32 | 33 | 7. Once the changes are done, Save as a draft or Publish or Preview from options at the bottom. 34 | 8. If you want to create a page as a child page of Home page, Click on the Pages link on the left side-bar. 35 | 9. You will get a side pop-up which will contain "Welcome to your new Wagtail Site" and a "pencil" icon and a "right-arrow" icon. 36 | 10. You will get "Home" Link. This is the default page. If you want to modify it you can click on "pencil" icon. if you already have any child pages to "Home", you will also be able to find a "right-arrow" icon 37 | 11. To create a new page as a child of "Home". you need to click on "Home" Link. 38 | 12. Then Click on "ADD CHILD PAGE" link. 39 | 13. Choose a page template type. Currently, three of them are available. 40 | - Blank Page -> (Build a page from scratch (Best Way)) 41 | - Cybergateway Home Page -> (Build an IU Themed Home Page) 42 | - Home Page -> (Build a seagrid website based Home page) 43 | 14. Each page has four tabs namely: 44 | - CONTENT (On page load) 45 | - CUSTOMIZATION 46 | - PROMOTE 47 | - SETTINGS 48 | 15. Provide a title(required) for the page so that you can see it in the CMS. 49 | 16. Head over to the PROMOTE Section. 50 | - Provide a slug url ( which is the url extension at which the page will be available). for example if you are creating a documentation page. Provide a slug like documentation so that when you visit <--yourwebsite.com-->/documentation you will visit this page. 51 | - Provide a Page Title. This will show up in the page title of each page. 52 | ![Screenshot](../img/wagtail-child-edit.png)

53 | 54 | 17. Once the changes are done, you can preview, publish or save as a draft. 55 | 56 | -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | # Django Portal Admin User Documentation 2 | 3 | ###Airavata Middleware 4 | - A distributed framework that supports execution and management of computational scientific applications and workflows in grid based systems, remote clusters and cloud based systems. 5 | - Primarily focused on submitting and managing application executions and workflows in grid based systems. 6 | - Architecturally extensible to support other underlying resources. 7 | - Provides a desktop tools and browser-based web interface components for managing applications, workflows and generated data. 8 | - Contains sophisticated server-side tools for registering and managing scientific applications on computational resources. 9 | 10 | ### Django Portal 11 | - The Django portal, the 'Science Gateway' provides tools and methods to easily integrate with post processing applications and application centric interfaces. 12 | - Django portal is the users interface to use services available through Apache Airavata Middleware. 13 | - Django portal mainly has 3 user groups; General User, Read-only- admin user and Admin user 14 | - This documentation provides step by step instructions on functionality available for general users. 15 | 16 | 17 | 18 | More information on Apache Airavata
19 | More information on Django Portal 20 |
21 |
22 | 23 |       24 |       25 |     26 |       27 | 28 | 29 |

30 | 31 | 32 | 33 | ###Django Releases 34 | ####2023 35 | #####
February
36 | 1. The central shared data directory implementation for each gateway 37 | 2. Print gateway user data full directory path in experiment statistics for each experiment 38 | 3. Fix: When experiments are cloned and left without a mandatory file, exception is thrown 39 | 40 | More [Details](user-documentation/django-releases/#February) 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /docs/user-documentation/quick-start.md: -------------------------------------------------------------------------------- 1 | ## Quick Start Steps for Admins 2 | 3 | This is for quick intro for most common tasks carried out by gateway admins. 4 |

5 | - Add New Application
6 | - Check Experiment Status
7 | - Manage Users
8 | 9 | 10 | #####
Create New Application
11 | 1. **Settings** → **Application Catalog** → **New Application+** 12 | 2. In the first _Details_ tab provide the 13 | - Name (Mandatory) 14 | - Version (Optional) 15 | - Description (Optional) 16 | 3. Upon saving, the next two tabs (Interface & Deployment) will be accessible. 17 | 4. The _Interface_ tab is where you would add the application inputs, These are the required inputs for the application to execute. 18 | 19 | ![Screenshot](../img/gau16appdetails.png) 20 | Image: Application Details 21 | 22 | ![Screenshot](../img/gau16appinput.png) 23 | Image: Application Input Configuration 24 | 25 | 5. The _Interface_ is also the place to add any output file you would want to make available for users to download. 26 | 27 | 5. The _Deployment_ tab is to add all the details required to execute the application on the remote resource. This includes 28 | - application's executable path 29 | - commands to load any required modules 30 | - Any environment variables 31 | - Pre and post job conditions 32 | 6. Plus you can set the default queue and its properties for users. You would choose the default queue and add default number of nodes, CPUs and walltime. 33 | 7. This is helpful for general user, as they can just use the default settings. 34 | 8. For more information refer: [Application Catalog](application-catalog.md)
35 |
36 | - 37 | ![Screenshot](../img/gau16appdeploy.png) 38 | Image: Application Deployment 39 | 40 | 41 | #####
Check Experiment Status
42 | 1. This is one of the most used functions by gateway admins. 43 | 2. When a gateway user need help with a particular job or need to monitor the gateway job submission rate and their statuses admins use this. 44 | 3. **Settings** → **Experiment Statistics** (Third option in the left icon menu) 45 | 4. Here you can search a specific experiment with its job details using the experiment ID 46 | 5. It will retrieve experiment details, job details, statuses and all tha task statuses in he experiment life cycle. 47 | 6. It will also show you the job submission script generated to submit the job and input files and output files. 48 | 7. Most importantly, this will show you if an error occurred the error messages and exactly which task failed. 49 | 8. This will also list job submission responses from the remote resource and that usually gives a clue if something went wrong with job at the remote resource. 50 | 51 | 52 | ![Screenshot](../img/expstat1.png) 53 | ![Screenshot](../img/expstat2.png) 54 | Image: Experiment Statistics for an Experiment 55 | 56 | 9. Gateway admins can use _**Experiment Statistics**_ to get an general idea of the experiment statuses. 57 | 10. The page will show by default the total number of experiments and their statuses for the last 2 hours. 58 | 11. Gateway admins can view experiment status for either 24 hours or for the last week or can give the period of choice using the calendar option. Can also use extra filters; 59 | - Application Name 60 | - User Name 61 | - Compute Resource 62 | e.g. Retrieve all experiment from Mar/01/2022 - Jun/01/2022 submitted to Expanse resource. 63 | 64 | 65 | #####
Manage Users
66 | 1. **Settings** → **Manage Users** 67 | 2. You can search gateway user sand add or remove them from gateway user groups. 68 | 3. Gateway admins mostly use this to enable users on the gateway. 69 | 4. As an gateway admin you can add users to any base group (admin, read-only-admin or general) 70 | 5. If you have other admin groups created within the gateway, you can add users to them as well. 71 | 6. Just like adding users, you can remove users from the group either to revoke gateway access from base group or any other admin groups in the gateway. 72 | 73 | - 74 | ![Screenshot](../img/manageuser.png) 75 | Image: Manage Users 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /docs/installation/wso2-is-installation.md: -------------------------------------------------------------------------------- 1 | ## WSO2 Identity Server (IS) Installation 2 | 3 | ### Installation 4 | 1. Download IS 5.1.0 from WSO2 Site and extract it. 5 | 2. Open <IS_HOME>/repository/conf/carbon.xml and set the HideAdminServiceWSDLs property to false. 6 |
<HideAdminServiceWSDLs>false</HideAdminServiceWSDLs>
7 | 3. To enable self signup and account confirmation follow the below steps 8 | - Open <IS_HOME>/repository/conf/claim-config.xml and add the following claims mappings in the <Dialect dialectURI="http://wso2.org/claims"> section. 9 |
<Claim>
10 |           <ClaimURI>http://wso2.org/claims/identity/accountLocked</ClaimURI>
11 |           <DisplayName>Account Locked</DisplayName>
12 |           <AttributeID>accountLock</AttributeID>
13 |           <Description>Account Locked</Description>
14 | </Claim>
15 | <Claim>
16 |           <ClaimURI>http://wso2.org/claims/identity/passwordTimestamp</ClaimURI>
17 |           <DisplayName>Password Timestamp</DisplayName>
18 |           <AttributeID>facsimileTelephoneNumber</AttributeID>
19 |           <Description>Password Timestamp</Description>
20 | </Claim>
21 | <Claim>
22 |           <ClaimURI>http://wso2.org/claims/username</ClaimURI>
23 |           <DisplayName>Username</DisplayName>
24 |           <AttributeID>uid</AttributeID>
25 |           <Description>Username</Description>
26 | </Claim>
27 | 
28 | - Open <IS_HOME>/repository/conf/claim-config.xml and add the following claims mappings in the <Dialect dialectURI="http://wso2.org/oidc/claim"> section. 29 |
<Claim>
30 |           <ClaimURI>roles</ClaimURI>
31 |           <DisplayName>Roles</DisplayName>
32 |           <AttributeID>role</AttributeID>
33 |           <Description>Roles</Description>
34 | </Claim>
35 | 
36 |
37 | 38 | - Enable the Identity Listener by setting the following property to true in the <IS_HOME>/repository/conf/identity/identity.xml file. 39 |
<EventListener type="org.wso2.carbon.user.core.listener.UserOperationEventListener" name="org.wso2.carbon.identity.mgt.IdentityMgtEventListener" orderId="50" enable="true"/>
40 | 41 | - Do the following configurations in the <IS_HOME>/repository/conf/identity/identity­-mgt.properties file. 42 |

43 | Notification.Sending.Internally.Managed=true
44 | Authentication.Policy.Account.Lock.On.Creation=true
45 | Notification.Expire.Time=7200
46 | Notification.Sending.Enable=true
47 | Authentication.Policy.Enable=true
48 | 
49 | 50 | - Configure the email-admin-config.xml file found in <IS_HOME>/repository/conf/email/ with the email template of type “accountConfirmation”. 51 | 52 | - Edit the org.apache.axis2.transport.mail.MailTransportSender section in the <IS_HOME>/repository/conf/axis2/axis2.xml to valid email account configuration. 53 |
IS server should have access to this email account for remotely login. 54 |

55 | <transportSender name="mailto"class="org.apache.axis2.transport.mail.MailTransportSender">
56 |         <parameter name="mail.smtp.from">wso2demomail@gmail.com</parameter>
57 |         <parameter name="mail.smtp.user">wso2demomail</parameter>
58 |         <parameter name="mail.smtp.password">mailpassword</parameter>
59 |         <parameter name="mail.smtp.host">smtp.gmail.com</parameter>
60 |         <parameter name="mail.smtp.port">587</parameter>
61 |         <parameter name="mail.smtp.starttls.enable">true</parameter>
62 |         <parameter name="mail.smtp.auth">true</parameter>
63 | </transportSender>
64 | 
65 | 66 | 4. Go to <IS_HOME>/bin and start IS server using ./wso2server.sh (use ./wso2server.sh start for starting in daemon mode). 67 | 68 | ### WSO2 IS Configuration 69 | 1. Creating a new tenant. 70 | 2. Registering a new OAuth Service Provider. 71 | 72 | ### Optional Steps 73 | 1. How to configure a mysql backend database for wso2 IS server - MySQL DB Configuration 74 | 2. How to configure a valid server certificate for the wso2 IS server - Configure Server Certificate 75 | -------------------------------------------------------------------------------- /docs/technical-documentation/sharing-documentation/api-overview.md: -------------------------------------------------------------------------------- 1 | 2 | ## All Thrift Declarations 3 | 4 | | Module | Services | Data types | Constants | 5 | | ------ | -------- | ---------- | --------- | 6 | | sharing_cpi | [SharingRegistryService](sharing-cpi.md#Svc_SharingRegistryService)
  • [addChildGroupsToParentGroup](sharing-cpi.md#Fn_SharingRegistryService_addChildGroupsToParentGroup)
  • [addUsersToGroup](sharing-cpi.md#Fn_SharingRegistryService_addUsersToGroup)
  • [createDomain](sharing-cpi.md#Fn_SharingRegistryService_createDomain)
  • [createEntity](sharing-cpi.md#Fn_SharingRegistryService_createEntity)
  • [createEntityType](sharing-cpi.md#Fn_SharingRegistryService_createEntityType)
  • [createGroup](sharing-cpi.md#Fn_SharingRegistryService_createGroup)
  • [createPermissionType](sharing-cpi.md#Fn_SharingRegistryService_createPermissionType)
  • [createUser](sharing-cpi.md#Fn_SharingRegistryService_createUser)
  • [deleteDomain](sharing-cpi.md#Fn_SharingRegistryService_deleteDomain)
  • [deleteEntity](sharing-cpi.md#Fn_SharingRegistryService_deleteEntity)
  • [deleteEntityType](sharing-cpi.md#Fn_SharingRegistryService_deleteEntityType)
  • [deleteGroup](sharing-cpi.md#Fn_SharingRegistryService_deleteGroup)
  • [deletePermissionType](sharing-cpi.md#Fn_SharingRegistryService_deletePermissionType)
  • [deleteUser](sharing-cpi.md#Fn_SharingRegistryService_deleteUser)
  • [getDomain](sharing-cpi.md#Fn_SharingRegistryService_getDomain)
  • [getDomains](sharing-cpi.md#Fn_SharingRegistryService_getDomains)
  • [getEntity](sharing-cpi.md#Fn_SharingRegistryService_getEntity)
  • [getEntityType](sharing-cpi.md#Fn_SharingRegistryService_getEntityType)
  • [getEntityTypes](sharing-cpi.md#Fn_SharingRegistryService_getEntityTypes)
  • [getGroup](sharing-cpi.md#Fn_SharingRegistryService_getGroup)
  • [getGroupMembersOfTypeGroup](sharing-cpi.md#Fn_SharingRegistryService_getGroupMembersOfTypeGroup)
  • [getGroupMembersOfTypeUser](sharing-cpi.md#Fn_SharingRegistryService_getGroupMembersOfTypeUser)
  • [getGroups](sharing-cpi.md#Fn_SharingRegistryService_getGroups)
  • [getListOfSharedGroups](sharing-cpi.md#Fn_SharingRegistryService_getListOfSharedGroups)
  • [getListOfSharedUsers](sharing-cpi.md#Fn_SharingRegistryService_getListOfSharedUsers)
  • [getPermissionType](sharing-cpi.md#Fn_SharingRegistryService_getPermissionType)
  • [getPermissionTypes](sharing-cpi.md#Fn_SharingRegistryService_getPermissionTypes)
  • [getUser](sharing-cpi.md#Fn_SharingRegistryService_getUser)
  • [getUsers](sharing-cpi.md#Fn_SharingRegistryService_getUsers)
  • [removeChildGroupFromParentGroup](sharing-cpi.md#Fn_SharingRegistryService_removeChildGroupFromParentGroup)
  • [removeUsersFromGroup](sharing-cpi.md#Fn_SharingRegistryService_removeUsersFromGroup)
  • [revokeEntitySharingFromGroups](sharing-cpi.md#Fn_SharingRegistryService_revokeEntitySharingFromGroups)
  • [revokeEntitySharingFromUsers](sharing-cpi.md#Fn_SharingRegistryService_revokeEntitySharingFromUsers)
  • [searchEntities](sharing-cpi.md#Fn_SharingRegistryService_searchEntities)
  • [shareEntityWithGroups](sharing-cpi.md#Fn_SharingRegistryService_shareEntityWithGroups)
  • [shareEntityWithUsers](sharing-cpi.md#Fn_SharingRegistryService_shareEntityWithUsers)
  • [updateDomain](sharing-cpi.md#Fn_SharingRegistryService_updateDomain)
  • [updateEntity](sharing-cpi.md#Fn_SharingRegistryService_updateEntity)
  • [updateEntityType](sharing-cpi.md#Fn_SharingRegistryService_updateEntityType)
  • [updateGroup](sharing-cpi.md#Fn_SharingRegistryService_updateGroup)
  • [updatePermissionType](sharing-cpi.md#Fn_SharingRegistryService_updatePermissionType)
  • [updatedUser](sharing-cpi.md#Fn_SharingRegistryService_updatedUser)
  • [userHasAccess](sharing-cpi.md#Fn_SharingRegistryService_userHasAccess)
| | | 7 | | sharing_models | |
  • [Domain](sharing-models.md#Struct_Domain)
  • [Entity](sharing-models.md#Struct_Entity)
  • [EntitySearchField](sharing-models.md#Enum_EntitySearchField)
  • [EntityType](sharing-models.md#Struct_EntityType)
  • [GroupCardinality](sharing-models.md#Enum_GroupCardinality)
  • [GroupChildType](sharing-models.md#Enum_GroupChildType)
  • [GroupMembership](sharing-models.md#Struct_GroupMembership)
  • [GroupType](sharing-models.md#Enum_GroupType)
  • [PermissionType](sharing-models.md#Struct_PermissionType)
  • [SearchCondition](sharing-models.md#Enum_SearchCondition)
  • [SearchCriteria](sharing-models.md#Struct_SearchCriteria)
  • [Sharing](sharing-models.md#Struct_Sharing)
  • [SharingRegistryException](sharing-models.md#Struct_SharingRegistryException)
  • [SharingType](sharing-models.md#Enum_SharingType)
  • [User](sharing-models.md#Struct_User)
  • [UserGroup](sharing-models.md#Struct_UserGroup)
| [`DO_NOT_SET_AT_CLIENTS_ID`](sharing-models.md#Const_DO_NOT_SET_AT_CLIENTS_ID) | 8 | -------------------------------------------------------------------------------- /docs/installation/airavata-server-properties.md: -------------------------------------------------------------------------------- 1 | ## Apache Airavata Server Properties 2 | 3 | 1. API Server Registry Configuration 4 | - Comment out the derby DB properties 5 | - Change MySQL configurations 6 | - registry.jdbc.url=jdbc:mysql://localhost:3306/experiment_catalog (replace 'localhost' with correct server name if the DB is in a different server) 7 | - registry.jdbc.user=airavata 8 | - registry.jdbc.password=airavata 9 | - enable.sharing=true (This will set sharing within the gateway to be enabled. This is the advices mode) 10 | - default.registry.gateway=php_reference_gateway (Give the gateway name you prefer. Default exists in the file) 11 | - super.tenant.gatewayId=php_reference_gateway (Since you are hosting your own gateway this is the ID of your own gateway) 12 | 2. Application Catalog DB Configuration 13 | - Comment out the derby DB properties 14 | - Change MySQL configurations 15 | - appcatalog.jdbc.url=jdbc:mysql://localhost:3306/app_catalog 16 | - appcatalog.jdbc.user=airavata 17 | - appcatalog.jdbc.password=airavata 18 | 3. Replica Catalog DB Configuration 19 | - Comment out the derby DB properties 20 | - Change MySQL configurations 21 | - replicacatalog.jdbc.url=jdbc:mysql://localhost:3306/replica_catalog 22 | - replicacatalog.jdbc.user=airavata 23 | - replicacatalog.jdbc.password=airavata 24 | 4. Workflow Catalog DB Configuration 25 | - Comment out the derby DB properties 26 | - Change MySQL configurations 27 | - workflowcatalog.jdbc.url=jdbc:mysql://localhost:3306/workflow_catalog 28 | - workflowcatalog.jdbc.user=airavata 29 | - workflowcatalog.jdbc.password=airavata 30 | 5. Sharing Catalog DB Configuration 31 | - Comment out the derby DB properties 32 | - sharingcatalog.jdbc.url=jdbc:mysql://localhost:3306/sharing_catalog 33 | - sharingcatalog.jdbc.user=airavata 34 | - sharingcatalog.jdbc.password=airavata 35 | 6. Sharing Registry Server Configuration 36 | - 37 | 7. User Profile MongoDB Configuration 38 | - 39 | 8. Server Module Configuration 40 | - Make sure all servers required to start are added as given 41 | - servers=credentialstore,apiserver,orchestrator,gfac 42 | 9. API Server Configurations 43 | 44 | 10. API Server SSL Configurations 45 | - Give the correct path for key generation file. This is in the bin directory and it is shipped default with Airavata. 46 | - apiserver.keystore=/home/airavata/LocalAiravata/apache-airavata-server-0.16-SNAPSHOT/bin/airavata.jks 47 | 11. Orchestrator Server Configurations 48 | 49 | 12. GFac Server Configurations 50 | 51 | 13. Registry Server Configurations 52 | 53 | 14. Airavata Workflow Interpreter Configurations 54 | 55 | 15. Job Scheduler can send informative email messages......... 56 | 57 | 16. Credential Store module Configuration 58 | - Add the path to SSH key generation file 59 | - E.g.: credential.store.keystore.url=/home/airavata/LocalAiravata/airavata-sym.jks 60 | - Comment out the derby DB properties 61 | - Change MySQL configurations 62 | - credential.store.jdbc.url=jdbc:mysql://localhost:3306/credential_store 63 | - credential.store.jdbc.user=airavata 64 | - credential.store.jdbc.password=airavata 65 | - credential.store.keystore.url=/home/airavata/production-deployment/airavata_sym.jks 66 | 17. Monitoring Module Configuration 67 | - Add your email address, username and password for email monitoring. This is the email account the job status change emails will be received from compute resources. 68 | - email.based.monitor.host=imap.gmail.com 69 | - email.based.monitor.address=jobs@sample.org 70 | - email.based.monitor.password=SamplePassword 71 | 18. AMQP Notification Configuration 72 | - Users can use RabbitMQ as 'Guest' users. This is the easy method. For this uncomment 73 | - rabbitmq.broker.url=amqp://localhost:5672 74 | - To use as a 'Production' user 75 | - Navigate to RabbitMQ bin folder. 76 | - Make sure the RabbitMQ server is running. For production use
rabbitmq-server -detached
to start. 77 | - Create a virtual-host and user with a password. Follow documentation in RabbitMQ Users & VirtualHost 78 | - To create a user;
rabbitmqctl add_user Username Password
79 | - To create a vitrual-host
rabbitmqctl add_vhost vhostauthvhost
80 | - Provide permission to created 'Username' to the created vhost
rabbitmqctl set_permissions -p messaging airavata ".*" ".*" ".*”
81 | - Uncomment rabbitmq.broker.url=amqp://Username:Password@localhost:5672/Vhost. Add the created username, password and Vhost in the URL. 82 | - If you need to stop RabbitMQ use
rabbitmqctl stop
83 | - If the RabbitMQ server stopped then the above user creation, vhost creation and permission granting commands need to run again after restarting the servers. 84 | 19. Zookeeper Server Configuration 85 | - For 'Production' scenario make; 86 | - embedded.zk=false 87 | 20. Aurora Scheduler Configuration 88 | 89 | 90 | 21. API Security Configuration 91 | - Make sure 92 | - api.secured=false 93 | - TLS.enabled=false 94 | -------------------------------------------------------------------------------- /docs/maintenance/pga-maintenance.md: -------------------------------------------------------------------------------- 1 | ## PGA Maintenance 2 | 3 | 4 | 1. Investigate FAILED experiments/jobs
5 | 2. Handling unavailable Compute Resources
6 | 3. Managing User Accounts
7 | 4. Changing roles are not providing proper access
8 | 5. Community account ran out of SUs
9 | 6. Add Pre and Post Job Commands for an Application
10 | 7. Add Environment Variables for an Application Deployment
11 | 8. Register your Compute & Storage Resources
12 | 9. Gateway Preference Management
13 | 10. Communication with Gateway Users
14 | 11. Monitor Gateway Traffic
15 | 12. Using Credential Store
16 | 17 | Q1. One of my gateway users wants me to investigate his FAILED experiment. How should I proceed? 18 |
Answer: To investigate a specific FAILED experiment or failed experiment within a time frame,
19 | 1. Navigate to AdminDashboard ⇒ Experiment Statistics
20 | 2. Search the experiment by using the experiment ID.
21 | OR 22 | 3. Search by providing the creation time period. You can further filter by giving
23 | - Gateway username
24 | - Application
25 | - Compute Resource
26 | 4. You could also use pre-defined selection criteria ('Get Experiments from Last 24 Hours' OR 'Get Experiments from Last Week')
27 | 5. Once the experiment/s listed click on the 'Check Stats' 28 | 6. Experiment task breakdown is listed and as the admin you could locate which task failed. Advice the gateway user accordingly. 29 | 30 | Q2. One of the resources used by my gateway is not available for the day. How to stop user job submissions? 31 |
Answer: To temporarily stop users submitting jobs to a particular resource...
32 | 1. Navigate to AdminDashboard ⇒ Compute Resources (Browse)
33 | 2. Un-check the 'Enabled' box for the specific resource. This disables job submissions for the resource
34 | 3. To enable job submission simply check the box and you are back in track!
35 | NOTE: In order to enable disable resources you require super admin rights to the gateway. If not you need to contact SciGaP admins. 36 | 37 | Q3. How to upgrade access for a gateway user? 38 |
Answer: User access can be upgraded or downgraded by changing the assigned user role.
39 | 1. Navigate to Admin Dashboard ⇒ Users (Browse)
40 | 2. Search for the specific user and click 'Check All Roles'
41 | 3. From this you can remove/add roles.
42 | 4. For each modification user will receive an email with 'Your Privileges has Changed!'
43 | 44 | Q4. Gateway users who has role 'gateway-user' cannot access experiment creation. Seems like privileges are not accessible.! 45 |
Answer: User roles are given through PGA Admin Dashboard. If the roles are set correctly then check pga_config.php
46 | 1. To check the config file use 47 |
vi /var/www/html/airavata-php-gateway/app/config/pga_config.php
48 | 2. Roles attached to users should exists in the config file against correct role attribute type 49 |

 50 |         /**
 51 |          * Admin Role Name
 52 |          */
 53 |         'admin-role-name' => 'admin',
 54 |         /**
 55 |          * Read only Admin Role Name
 56 |          */
 57 |         'read-only-admin-role-name' => 'admin-read-only',
 58 |         /**
 59 |          * Gateway user role
 60 |          */
 61 |         'user-role-name' => 'airavata-user',
 62 | 
63 | 64 | NOTE: In order to view and change config file you require access to PGA backend. If not you need to contact SciGaP admins. 65 | 66 | Q5. I have ran out of allocation for my current community account used in gateway for a resource. What should I do? 67 |
Answer:
68 | 1. If you have another community account you could update the information in Admin Dashboard ⇒ Gateway Profile under Compute Resource Preferences.
69 | 2. Select the resource and modify account information and save.
70 | 3. Login to the resource as the new user and update the authorized_keys with the public key assigned to the resource.
71 | 72 | Q6. I want to send notices to my gateway users. How? 73 |
Answer:
74 | 1. Navigate to Admin Dashboard ⇒ Notices
75 | 2. Use 'Create a New Notice' button add a new notice.
76 | 3. Based on the published date you provided it will be available for users as a Notice ! 77 | 78 | Q7. How to open the gateway to any user who create an user account? In the gateway not required to enable/activate user accounts. 79 |
Answer:
80 | 1. Gateway admin can switch between options of opening the gateway to all account creations OR gateway admin to activate accounts after creation.
81 | 2. In order to do open the gateway to all,
82 | - If the gateway is hosted by Airavata team, please request from them
83 | - If you are hosting the gateway, navigate to
vi /var/www/html/airavata-php-gateway/app/config/pga_config.php
Then change the initial user role to 'gateway-user'
84 |

 85 |                 /**
 86 |                  * Initial user role. This is the initial user role assigned to a new
 87 |                  * user. Set this to one of the three roles above to automatically
 88 |                  * grant new users that role, or set to some other role ('user-pending')
 89 |                  * to require admin approval before users have access.
 90 |                  */
 91 |                 'initial-role-name' => 'gateway-user',
 92 |         
93 | 94 | Q7. I want my gateway users to use their own compute resource allocation to submit jobs through the gateway. How to do this? 95 |
Answer:
96 | 1. Users can add their own allocation account details.
97 | 2. In order to do so first login to the gateway.
98 | 3. Then Go to User Settings ⇒ Compute Resources
99 | 4. Click the 'Add a Compute Resource Account' and enter all the details and save.
100 | 101 | After at experiment creation,edit and clone
102 | 1. When you select the compute resource which has your account defined in the gateway, default option is to submit the job using user's own account.
103 | 2. User has the option of selecting community account for job submission as well.
-------------------------------------------------------------------------------- /docs/user-documentation/application-catalog.md: -------------------------------------------------------------------------------- 1 | ## Application Catalog 2 | 3 | - Available actions on Experiments 4 | - Introduction
5 | - Add Gaussian16 Details
6 | - Add Gaussian16 Inputs and Outputs
7 | - Add Gaussian16 Deployment
8 | - Edit
9 | - Launch
10 | 11 | #####
Introduction
12 | - _**Application Catalog**_ is where you will add your gateway applications/tools/codes for gateway users to consume. 13 | - Application/tool/code is what you create in the gateway, which will have all the configurations required to execute the actual code in the remote resource. 14 | - Configuring an _Application_ is a three step process. You would; 15 | - First add the main _Details_ of the application 16 | - Next its the _Interface_, where you would add all the input required to execute application and also the outputs that the gateway should bring back for the user. 17 | - Last is the _Deployment_, Which is the place you will add all the commands that are needed to execute the application in the remote resource. 18 | 19 | - Gateway admins can; 20 | - Create new applications 21 | - Test the application with job submissions 22 | - Edit existing applications 23 | - Delete applications no longer needed 24 | 25 | NOTE: In order to explain how an application could be added to the gateway, we would take Gaussian16 application as the example. 26 | 27 | #####
Add Gaussian16 Details
28 | 29 | 1. **Settings** → **Application Catalog** → **New Application +** 30 | 2. In Details tab: 31 | - Application Name: _Gaussian16_ 32 | - Application Version: _Gaussian 16: ES64L-G16RevA.03_ (Optional) 33 | - Application Description: Gaussian computes molecular electronic properties using ab inito and dft techniques. Core Count should be same as %nproc value in the input. (Optional) 34 | - Save 35 | 36 | ------ 37 | ![Screenshot](../img/gau16-app-detail-tab.png) 38 | Image:Adding Gaussian16 Details 39 | 40 | #####
Add Gaussian16 Inputs and Outputs
41 | 1. **Settings** → **Application Catalog** → **Gaussian16** → **Interface** 42 | 2. In Interface tab: 43 | - Set _Enable Archiving Working Directory_ to `True` (Why? - This is set to true when you want to bring back all the files in the remote working directory back to the gateway portal. Caution: Gateway has a size restriction on ARCHIVE. Please contact SciGaP admins for more details.) 44 | - Set _Show Queue Settings_ to `False` - This is your gateway preference. If you gateway users are not give the option of changing the queue properties when submitting jobs, you can hide this and have same properties set for all the users. 45 | - Provide Input Fields 46 | - Click _Add Application Input_ 47 | - _Name_: `Input-File` 48 | - _Initial Value_: `gaussian.com` (This is if you want to override the input names given by the user, if not leave it empty) 49 | - _Type_: `URI` (Why? - This is the type for file uploads) 50 | - _Application Arguments_: NULL 51 | - _Required in Commandline_: `True` 52 | - _Required_: `True` 53 | - _Read Only_: `False` (Why? - this is only meaningful for String, Integer or Float inputs) 54 | - _User Friendly Description_: Gaussian16 input file specifying desired calculation type, model chemistry, molecular system and other parameters. (This is information to the user at creating job experiment. Optional) 55 | - _Advanced Input Field Modification Metadata_: NULL (Why? - This is used mostly for advance string input options. For more information refer: [Advance Application Inputs](advance-inputs.md) 56 | 57 |
58 | NOTE: For this application, only a single input, and its a file. For applications, there can be multiple inputs and different input types, such as String, Integer or multiple files. 59 | - Provide application outputs
60 | NOTE: 4 application outputs to define.
61 | - 1st Output 62 | - Click _Add application output_ 63 | - _Name_: `Gaussian-Application-Output` 64 | - _Value_: `*.log` 65 | - _Type_: `URI_COLLECTION` 66 | - _Application Argument_: NULL 67 | - _Is Required_: `True` 68 | - _Required on Command Line_: `True` 69 | - _Metadata_: 70 |
71 | ``` 72 | json 73 | { 74 | "output-view-providers": [ 75 | "gaussian_eigenvalues_view" 76 | ] 77 | } 78 | ``` 79 |
80 | 81 | - 2nd output 82 | - CLick _Add Application Output_ 83 | - _Name_: `Gaussian_Checkpoint_File` 84 | - _Value_: `*.chk` 85 | - _Type_: `URI_COLLECTION` 86 | - _Application Argument_: NULL 87 | - _Is Required_: `True` 88 | - _Required on Command Line_: `True` 89 | - _Metadata_: NULL 90 | - For applications, STDOUT and STDERR will be automatically added for you. 91 | ![Screenshot](../img/gau-app-inputoutput1.png) 92 | ![Screenshot](../img/gau-app-inputoutput2.png) 93 | Image: Gaussian16 Inputs and Outputs 94 | 95 | #####
Add Gaussian16 Deployment
96 | 1. **Settings** → **Application Catalog** → **Gaussian16** → **Deployment** 97 | 2. In _Deployment_ tab 98 | - Click _New Deployment +_ 99 | - Select _Expanse_ 100 | - _Share_ button: Add groups and users you want to have access to this deployment. Meaning, who can submit Gaussian16 jobs to Expanse 101 | - _Application Executable Path_: `/home/gridchem/bin/rung09_with_chk_recovery.sh` 102 | - _Application Parallelism Type_: `SERIAL` 103 | - Application Deployment Description: Gaussian16 Rev A.03 104 | - Module Load Commands: 105 | -
#SBATCH -N 1
106 | - export MODULEPATH=/share/apps/compute/modulefiles/applications:$MODULEPATH; module load gaussian/16.B.01 107 | - Pre Job Commands: 108 | - export AIRAVATA_USERNAME=$gatewayUserName 109 | - export AIRAVATA_INPUTS=$inputs 110 | - export AIRAVATA_ExptDataDir=$experimentDataDir; 111 | - Default Queue Name: shared 112 | - Default Node Count: 1 113 | - Default CPU Count: 4 114 | - Default Walltime: 30 115 | - Save 116 | 117 | ![Screenshot](../img/gau-app-dep1.png) 118 | Image: Gaussian16 Deployment 119 | 120 | #####
Other Application Catalog Details
121 | 1. An Application can have multiple deployment, each deployment is for each remote resource the gateway wants to submit jobs to. 122 | 2. When sharing application, deployment you would only share it with gateway user who you want to use it. 123 | 3. Tip: When you are adding a new application, you can keep it without sharing it with gateway users until you test it. Unshared applications will appear grayed out to gateway uses. 124 | 125 | 126 | 127 | 128 | 129 | 130 | -------------------------------------------------------------------------------- /docs/user-documentation/tutorials.md: -------------------------------------------------------------------------------- 1 | ## Admin Tutorial Hands on: Create an Application with Advance Input Components 2 | - Section covered; 3 | - Get Access
4 | - Create a New Application
5 | - Add Application Interfaces
6 | - Add Application Deployment
7 | - More Details On...
8 | 9 | #####
Getting Access
10 | 1. Log into TestDrive Portal 11 |

12 | 2. First, you'll need a user account. Create an account using your existing institutional login through CILogon. 13 |

14 | 3. After you've logged in, an administrator will grant you access to create the test application _**DetectCovid**_. 15 |

16 | 4. When you log in for the first time you will be in the 'Workspace'. Switch to 'Settings' 17 |

18 | 5. 'Settings' is the admin space of the gateway. Here the first is "Application Catalog" 19 |
NOTE: the purpose of this hands on is to demonstrate some of the advance application input options available in the gateway. 20 | 21 | ![Screenshot](../img/appcatalog.png) 22 | Image: Application Catalog 23 | 24 | #####
Create New Application "DetectCovid"
25 | 1. Application Catalog is where all the available applications are listed as well as the option to create new. 26 |

27 | 2. Use _New Application+_ to create new application. 28 |

29 | 3. In the 'Details' tab provide the name, version and description. 30 | - Application Name: DetectCovd-Peter 31 | - Application Version: V1.0 32 | - Application Description: Test tutorial application to detect Covid spread 33 |

34 | 4. For _Application Name_ provide `DetectCovid-`. Appending your 35 | name will allow you to distinguish your version of _**DetectCovid**_ from other 36 | users. 37 |
e.g. DetectCovid-Peter 38 |

39 | ![Screenshot](../img/appdetails.png) 40 | Image: Application Details Tab 41 |

42 | 43 | 5. Upon saving the _Details_ users can add _Interface_ and _Deployment_ of the application in respective tabs. 44 | 45 | #####
Add Application Interfaces
46 | 47 | 1. Click on the **Interface** tab. 48 |

49 | 2. Click button, _Add application input_. 50 |

51 | 3. Add the first Application Input 52 | - _Name_: Vaccination Status 53 | - _Type_: String 54 | - _Initial Value_: Yes 55 | - _Application Argument_: `-v` 56 | - _User Friendly Description_: `Add your Vaccintion Status` 57 | - _Required on Command Line_: `True` 58 | - _Required_: `True` 59 | - _Read Only_: `False` 60 | 61 | 4. Add the second Application Input 62 | - _Name_: Symptoms 63 | - _Type_: String 64 | - _Initial Value_: a 65 | - _Application Argument_: `-s` 66 | - _User Friendly Description_: `Select all your symptoms` 67 | - _Required on Command Line_: `True` 68 | - _Required_: `True` 69 | - _Read Only_: `False` 70 | - _Advanced Input Field Modification Metadata_: 71 | 72 | 73 | 76 |
77 | ```json 78 | { 79 | "editor": { 80 | "ui-component-id": "checkbox-input-editor", 81 | "config": { 82 | "options": [ 83 | { 84 | "value": "a", 85 | "text": "Cough" 86 | }, 87 | { 88 | "value": "b", 89 | "text": "Fever" 90 | }, 91 | { 92 | "value": "c", 93 | "text": "Shortness of Breath" 94 | }, 95 | { 96 | "value": "d", 97 | "text": "Loss of Smell" 98 | } 99 | ] 100 | } 101 | } 102 | } 103 | ``` 104 |
105 | 106 | ![Screenshot](../img/detectcovidinput.png) 107 | Image:DetectCovid Checkbox Input 108 | 109 | 4. Add the third Application Input 110 | - _Name_: Last Location 111 | - _Type_: String 112 | - _Initial Value_: main 113 | - _Application Argument_: `-l` 114 | - _User Friendly Description_: `Select your last location` 115 | - _Required on Command Line_: `True` 116 | - _Required_: `True` 117 | - _Read Only_: `False` 118 | - _Metadata_ 119 | 120 | 123 |
124 | ```json 125 | { 126 | "editor": { 127 | "ui-component-id": "radio-button-input-editor", 128 | "config": { 129 | "options": [ 130 | { 131 | "value": "lobby", 132 | "text": "Lobby" 133 | }, 134 | { 135 | "value": "loft", 136 | "text": "Loft" 137 | }, 138 | { 139 | "value": "main", 140 | "text": "Main" 141 | } 142 | ] 143 | } 144 | } 145 | } 146 | ``` 147 |
148 | 149 | 5. Add the last Application Input 150 | - _Name_: Crowd Size 151 | - _Type_: String 152 | - _Initial Value_: 50 153 | - _Application Argument_: `-cd` 154 | - _User Friendly Description_: `Select the crowd size of the location` 155 | - _Required on Command Line_: `True` 156 | - _Required_: `True` 157 | - _Read Only_: `False` 158 | - _Metadata_ 159 | 160 | 163 |
164 | ```json 165 | { 166 | "editor": { 167 | "ui-component-id": "slider-input-editor", 168 | "config": { 169 | "min": 0, 170 | "max": 200, 171 | "step": 10, 172 | "valueFormat": { 173 | "percentage": false 174 | }, 175 | "displayFormat": { 176 | "percentage": false 177 | } 178 | } 179 | } 180 | } 181 | ``` 182 |
183 | 184 | 6. In the interface tab, you can also add any output you explicitly wants to bring back from the remote resource and make available for the gateway users to download, for this tutorial, we will not be adding outputs. 185 | 7. After you added all the above inputs, the experiment creation page would look like below; 186 | 187 | ![Screenshot](../img/detectcovidexp.png) 188 | Image:Create DetectCovid Experiment 189 | 190 | #####
Add Application Deployment
191 | 1. The Application **Deployment** is where we add command to execute the computation in a specific remote computational resource. 192 | 193 | 2. Choose _Expanse_ as the compute resource. 194 | 195 | 3. For this tutorial, In the Deployment tab, as the _executable path_ add `\executable path` 196 | 197 | 4. Ignore rest of the fields and save. 198 | 199 | 5. NOTE: This application is purely to demonstrate the application input options and not to actually submit and run on a resource. 200 |

201 | 202 | #####
More Details On...
203 | 1. [Creating Applications](application-catalog.md) 204 | 2. [Advance Input Options](advance-inputs.md) -------------------------------------------------------------------------------- /docs/configuration/pga-configuration.md: -------------------------------------------------------------------------------- 1 | ## PGA Configuration 2 | ### You Need to Have 3 | 1. Airavata & PGA installed and running. 4 | 2. Tenant created in WSO2 IS hosted by you or Airavata team. 5 | 3. Administrator privileges to the gateway. (How do you know? - Can you view Admin Dashboard and view buttons to create applications) 6 |
7 |
8 | ### Apache Airavata Component Configuration 9 | 1. For this we use 'Admin Dashboard' 10 | 2. Gateway Admin need to configure;
11 | - Compute Resources
12 | - Storage Resources
13 | - Gateway Management
14 | - Application Catalog
15 | - Application Module
16 | - Application Interface
17 | - Application Deployment
18 | - Credential Store 19 | - Generate Credential Store Token + SSH Key. 20 | - Add these to authorized key files and into resource preferences. 21 | - Notices 22 | - Notices for all active gateway users. 23 | - Identity Management 24 | 25 | NOTE: for gateways hosted by SciGaP gateway admins/PIs not required to register the compute resources and storage resource. Please skip the 1st and 2nd and go to Gateway Management section. 26 |
27 | ###Compute Resources 28 | 1. Navigate to Admin Dashboard ⇒ Compute Resources ⇒ Register 29 | 2. Add Host Name, Description and create the resource. 30 |
Hint: host name is used when ssh to the resource from airavata. 31 | 3. Then keep adding information on rest of the appeared tabs. 32 | - Queues (Queue name is unique and cannot be updated. Can delete and create new if required) 33 | - File Systems (This is only for information capturing for future use. Currently this information is not used. So can skip if you want) 34 | - Job Submission Interfaces 35 | - Data Movement Interfaces 36 | 5. Similarly you can add multiple compute resources in to your gateway by selecting 'Register' from the left-hand-side menu. 37 | 6. To view the added compute resources navigate to Admin Dashboard ⇒ Compute Resource ⇒ Browse 38 | 7. All the resources will be listed. Gateway admin can view, edit, delete and enable and disable them. 39 |
40 |
41 | ###Storage Resources 42 | 1. Navigate to Admin Dashboard ⇒ Storage Resources ⇒ Register 43 | 2. Add Storage Name, Description and create the resource. 44 | 3. Then add data storage information in 45 | - Data Movement Interfaces 46 | 4. Similarly you can add multiple storage resources in to your gateway by selecting 'Register' from the left-hand-side menu. 47 | 5. To view the added resources navigate to Admin Dashboard ⇒ Storage Resources ⇒ Browse 48 | 6. All the resources will be listed. Gateway admin can view, edit, delete them. 49 | 7. Although enable and disable can be done in registration it's functionality is not yet implemented. 50 |
51 |
52 | ###Gateway Management of Resources 53 | 1. Navigate Admin Dashboard ⇒ Gateway Management 54 | 2. Both compute resource and storage resource specific preferences are defined here. 55 | 3. To add compute resource related preferences click "Add a Compute Resource Preference" and select the resource from the drop-down list. 56 | 4. Add/select preferred options and click "Set preferences". 57 |
Repeat this for all the resources used within the gateway. 58 | 4. For each compute resource, gateway admin need to specify; 59 | - Preferences can be overridden by Airavata - Yes/No? 60 | - Resource login name 61 | - Preferred job submission protocols 62 | - Preferred data movement protocols 63 | - Preferred queue 64 | - Scratch location 65 | - Project allocation number 66 | - Resource specific credential store token
(When added Base Credential Store Token is not valid for the specific resource) 67 | - Gateway ID for usage reporting
(This field will only appear if the compute resource registration is set to report usage details back to the resource) 68 | - Quality of service 69 | - Reservation name 70 | - Reservation start and end date time 71 | 5. For adding storage resource preference click "Add a Storage Resource Preferences", and rest is similar to adding a compute resource preference. 72 | 6. For a gateway currently when a storage resource is selected, that resource ID need to be added in to the pga_config.php file in config folder of the hosted gateway. 73 | 7. For storage resource preference, gateway admin need to add; 74 | - Login username 75 | - File System Root Location 76 | - Resource Specific Credential Store Token 77 | 8. Apart from adding preference the same interface is used to assign a 'Base Credential Store Token". If this is added this is the token used across the gateway for communication with all the compute resources and storage resource. 78 |
79 |
80 | ###Application Catalog 81 | 1. Users in Admin group can add applications in to the gateway. 82 | 2. Adding an application involves adding details in to the three tabs - Details, Interface and Deployments. 83 | 4. What each tab means and capture? 84 | - Application Module 85 | - Navigation: Admin Dashboard ⇒ App Catalog ⇒ Module 86 | - This is the simple introduction of the application; Name, Version and Description. 87 | - Click 'Create a New Application Module', provide information and create. On creation Application Module ID will be generated for the module. 88 | - All existing modules are listed; Search by name is available for a particular module. 89 | - Gateway admin can edit, delete existing modules. 90 | - Deleting a module will be restricted if it has application interfaces and deployments linked. 91 | - Application interface 92 | - Navigation: Admin Dashboard ⇒ App Catalog ⇒ Interface 93 | - Application interface defines the required inputs, outputs produced and their characteristics. 94 | - Click on 'Create a New Application Interface', provide information and create. On creation Application Interface ID will be generated for the module. 95 | - All available interfaces are also listed; admin has the option of searching for a particular interface by providing the name in the search. 96 | - Gateway admin can edit, delete existing interfaces. 97 | - Gateway admin cal also clone an existing interface in order to create a new similar interface with slight changes. 98 | - Application deployment 99 | - Navigation: Admin Dashboard ⇒ App Catalog ⇒ Deployment 100 | - Application deployment describes application deployment details on a specific resource. 101 | - For an application for each resource there is a separate deployment. 102 | - A single application can be deployed in multiple resources. 103 | - Multiple application modules can be deployed in a single resource. E.g: Gaussian09 and Gaussian16 both exists in bridges.psc.edu and they both use same application interface. 104 |
105 |
106 | ###Credential Store 107 | 1. Navigation: Settings ⇒ Credential Store 108 | 2. This interface is used to generate SSH key + token pairs. 109 | 3. These generated keys can be added in to the authorized key files in each resource for SSH key based communication. 110 | 4. Generated key can be either assigned at gateway level or/and at individual resource allocation level; one key + token pair for all the resources OR have separate key for each resource. 111 | 5. SSH keys are used for communication with compute resources and storage resources. 112 | 113 | ###Keycloak Configuration 114 | 115 | -------------------------------------------------------------------------------- /docs/js/clipboard.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * clipboard.js v2.0.8 3 | * https://clipboardjs.com/ 4 | * 5 | * Licensed MIT © Zeno Rocha 6 | */ 7 | !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return o}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),c=n.n(e);function a(t){try{return document.execCommand(t)}catch(t){return}}var f=function(t){t=c()(t);return a("cut"),t};var l=function(t){var e,n,o,r=1
50 | ### Dependencies 51 | 52 | You can hide/show inputs based on the values of other inputs. For example, if the option selected in input A is 'list-of-urls' then you can have input B show a field to upload a file. 53 | 54 | **Example** 55 | 56 | ```json 57 | { 58 | "editor": { 59 | "dependencies": { 60 | "show": { 61 | "Select reading options": { 62 | "comparison": "equals", 63 | "value": "list-urls" 64 | } 65 | } 66 | } 67 | } 68 | } 69 | ``` 70 | 71 | ## Alternate UI Components 72 | 73 | ### Checkboxes 74 | 75 | **Example** 76 | 77 | ```json 78 | { 79 | "editor": { 80 | "ui-component-id": "checkbox-input-editor", 81 | "config": { 82 | "options": [ 83 | { 84 | "value": "a", 85 | "text": "A label" 86 | }, 87 | { 88 | "value": "b", 89 | "text": "B label" 90 | }, 91 | { 92 | "value": "c", 93 | "text": "C label" 94 | } 95 | ] 96 | } 97 | } 98 | } 99 | ``` 100 | 101 | ### Radio Buttons 102 | 103 | **Example** 104 | 105 | ```json 106 | { 107 | "editor": { 108 | "ui-component-id": "radio-button-input-editor", 109 | "config": { 110 | "options": [ 111 | { 112 | "value": "breakfast", 113 | "text": "Breakfast" 114 | }, 115 | { 116 | "value": "lunch", 117 | "text": "Lunch" 118 | }, 119 | { 120 | "value": "dinner", 121 | "text": "Dinner" 122 | } 123 | ] 124 | } 125 | } 126 | } 127 | ``` 128 | 129 | ### Selects 130 | 131 | **Example** 132 | 133 | ```json 134 | { 135 | "editor": { 136 | "ui-component-id": "select-input-editor", 137 | "config": { 138 | "options": [ 139 | { 140 | "value": "breakfast", 141 | "text": "Breakfast" 142 | }, 143 | { 144 | "value": "lunch", 145 | "text": "Lunch" 146 | }, 147 | { 148 | "value": "dinner", 149 | "text": "Dinner" 150 | } 151 | ] 152 | } 153 | } 154 | } 155 | ``` 156 | 157 | ### Slider 158 | 159 | Displays a slider for picking a value between some minimum and maximum value. 160 | 161 | #### Config options 162 | 163 | - _min_ - minimum value, defaults to 0. 164 | - _max_ - maximum value, defaults to 100. 165 | - _step_ - step between values. Default is 1. Can be less that one for decimal 166 | values. 167 | - _valueFormat.percentage_ - whether to save the value with a trailing "%". 168 | Defaults to false. Note, this is the value that will be placed in the job 169 | script. 170 | - _displayFormat.percentage_ - whether to display the value to the user with a 171 | trailing "%". Defaults to false. 172 | 173 | **Example** 174 | 175 | ```json 176 | { 177 | "editor": { 178 | "ui-component-id": "slider-input-editor", 179 | "config": { 180 | "min": 32, 181 | "max": 212, 182 | "step": 0.1, 183 | "valueFormat": { 184 | "percentage": true 185 | }, 186 | "displayFormat": { 187 | "percentage": true 188 | } 189 | } 190 | } 191 | } 192 | ``` 193 | 194 | ### Range Slider 195 | 196 | Like the Slider component but there are two sliders, one for selecting the 197 | beginning and one for selecting the end of a range. 198 | 199 | #### Config options 200 | 201 | All of the options of the Slider component, plus: 202 | 203 | - _delimiter_ - the character to place between the values, for example, ",". 204 | The default value is a hyphen, "-". This will be placed into the job script. 205 | 206 | **Example** 207 | ```json 208 | { 209 | "editor": { 210 | "ui-component-id": "range-slider-input-editor", 211 | "config": { 212 | "min": 32, 213 | "max": 212, 214 | "step": 0.1, 215 | "valueFormat": { 216 | "percentage": true 217 | }, 218 | "displayFormat": { 219 | "percentage": true 220 | }, 221 | "delimiter": "," 222 | } 223 | } 224 | } 225 | ``` 226 | 227 | ### Autocomplete 228 | 229 | The Autocomplete UI component looks up matching entries for the given substring 230 | typed by the user. This one requires that a custom Django app be developed to 231 | implement the REST API for returning autocomplete suggestions. 232 | 233 | #### REST API contract 234 | 235 | - URL is called with query parameter search with value of whatever the user 236 | has currently typed 237 | - URL should return a JSON response with a search key and the value of that 238 | key used for the search and an results key with a list matching results, 239 | limited to the top 10. Each result should have a text key with the text 240 | displayed to the user and a value key which is the value applied to the 241 | experiment input if selected. For example: 242 | 243 | **Example** 244 | ```json 245 | { 246 | "search": "mammal", 247 | "results": [ 248 | { 249 | "text": "Horse", 250 | "value": "horse" 251 | }, 252 | { 253 | "text": "Mouse", 254 | "value": "mouse" 255 | } 256 | ] 257 | } 258 | ``` 259 | 260 | - URL can also be called with query parameter exact with a value that was 261 | previously returned. This call is made by the UI to retrieve the "text" 262 | value to display to the user for this value. The JSON response should be 263 | similar to the above except that it should only have one result: 264 | 265 | ```json 266 | { 267 | "search": "horse", 268 | "results": [ 269 | { 270 | "text": "Horse", 271 | "value": "horse" 272 | } 273 | ] 274 | } 275 | ``` 276 | 277 | - If the exact query parameter is specified and there is no match for that 278 | value, the JSON response should have HTTP status 404. The error reason can 279 | be added to the "detail" key of the response body, for example: 280 | 281 | ```json 282 | { 283 | "detail": "No matching value was found." 284 | } 285 | ``` 286 | 287 | #### Example REST API implementation 288 | 289 | To create the REST API backend needed by the Autocomplete component, first you 290 | need a create a custom Django app. See 291 | Custom Django App 292 | 293 | Here's a simple implementation of a view function that looks up words in the 294 | system dictionary file: 295 | 296 | ```python 297 | def test_autocomplete_search(request): 298 | """Find matching words for given search string.""" 299 | import re 300 | if 'search' in request.GET: 301 | query = request.GET['search'] 302 | pattern = re.compile(re.escape(query), re.IGNORECASE) 303 | elif 'exact' in request.GET: 304 | query = request.GET['exact'] 305 | pattern = re.compile(r"^" + re.escape(query) + r"$") 306 | else: 307 | return generic_json_exception_response( 308 | "Missing required query parameter: one of 'search' or 'exact'", status=400) 309 | 310 | matches = [] 311 | with open("/usr/share/dict/words", 'r') as f: 312 | matches = [line.strip() for line in f if pattern.search(line)] 313 | # TODO: if 'exact', make sure len(matches) == 1. if 0, then return 404 314 | if 'exact' in request.GET and len(matches) == 0: 315 | return generic_json_exception_response(f"No match for exact = {request.GET['exact']}", status=404) 316 | return JsonResponse({ 317 | "search": query, 318 | "results": [{"text": m, "value": m} for m in matches[:20]] 319 | }) 320 | ``` 321 | 322 | See also a real world example 323 | [miga-autocomplete](https://github.com/bio-miga/miga-autocomplete). 324 | 325 | #### Example Input Metadata Configuration 326 | 327 | ```json 328 | { 329 | "editor": { 330 | "ui-component-id": "autocomplete-input-editor", 331 | "config": { 332 | "url": "/custom/search/" 333 | } 334 | } 335 | } 336 | ``` 337 | 338 | -------------------------------------------------------------------------------- /docs/technical-documentation/airavata-api.md: -------------------------------------------------------------------------------- 1 | ## Apache Airavata API 2 | 3 | For latest Airavata API documentation please visit Airavata Master Branch (0.20) API Documentation 4 | 5 | Legacy Airavata API documentation please visit: 6 | Airavata 0.16 API Documentation 7 | 8 | ###

Airavata APIs for Experiments & Projects

9 | 10 | | Gateway Function/Feature | Airavata API | Description | 11 | |:--------------------------------------|:----------------------------------|:------------------------------| 12 | Project 13 | | Create a Project | createProject | Linked with Create Project in PGA. | 14 | | Update Project | updateProject | To update Project name and description. | 15 | | Get a Project | getProject | Retrieve Project by providing the ID. | 16 | | Search Project by Name | searchProjectsByProjectName | Search for Project by giving part or full project name. | 17 | | Search Project by Desc | searchProjectsByProjectDesc | Search for Project by giving part or full project description. | 18 | | Get all user Projects | getUserProjects | Retrieve all Projects of a user. | 19 | Experiment 20 | | Create an Experiment | createExperiment | Create an Experiment. | 21 | | Update an Experiment | updateExperiment | Update ab Experiment. Experiments with CREATED exp-status can be updated. | 22 | | Get an Experiment | getExperiment | Retrieve Experiment by providing the experiment ID. | 23 | | Get Detailed Experiment | getDetailedExperimentTree | Retrieve detailed Experiment by providing the experiment ID. | 24 | | Clone an Experiment | cloneExperiment | Clone an existing Experiment. Experiment with any exp-status can be cloned by providing the ID. | 25 | | Cancel an Experiment | terminateExperiment | Cancel an existing Experiment. Experiments with exp-statuses LAUNCHING or EXECUTING can be cancelled. | 26 | | Search Experiment by Name | searchExperimentsByName | Search Experiment by giving full or part of the name. | 27 | | Search Experiment by Desc | searchExperimentsByDesc | Search Experiment by giving full or part of the description. | 28 | | Search Experiments by Application Name | searchExperimentsByApplication | Search Experiment by giving the application name. | 29 | | Search Experiment by Creation Time | searchExperimentsByCreationTime | Search Experiment by giving creationTime period. | 30 | | Get all user Experiments | getUserExperiments | Search for all the experiments of a single user. | 31 | | Get Experiments for a Project | getExperimentsInProject | Retrieve all the experiments in a particular Project. | 32 | 33 | 34 | 35 | 36 | 37 | ###

Airavata APIs for Admin Dashboard

38 | 39 | | Admin Function/Feature | Airavata API | Description | 40 | |:----------------------------------------------|:--------------------------------------|:------------------------------------------------------------------------------------------------ | 41 | Add Gateway 42 | | Add a gateway | addGateway | Adding a new Gateway. | 43 | Credential Store 44 | | Generate a Token/SSH Key | generateAndRegisterSSHKeys | Generate new SSH Key and Token. | 45 | | Get all Credential Store Tokens | getAllGatewaySSHPubKeys | Retrieve all the generated keys of a Gateway. | 46 | | Remove a Token/SSH Key | deleteSSHPubKey | Select and delete a particular SSH Key Token pair. | 47 | Compute Resource (CR) 48 | | Get all application deployed CRs | getAllApplicationDeployments | Get all Application deployed Compute Resources. | 49 | | Get a CR | getComputeResource | Retrieve Compute Resource information by providing the resource ID. | 50 | | Register CR | registerComputeResource | Register a new Compute Resource. This is Super Admin Feature.| 51 | | Update CR | updateComputeResource | Retrieve an existing Compute Resource and update.| 52 | | Enable and Disable CR | getComputeResource updateComputeResource | Retrieve the CR and enable or disable through update. This is a Super Admin feature.| 53 | | Delete a Queue | deleteBatchQueue | Delete a selected Queue from the Compute Resource. | 54 | Storage Resource (SR) 55 | | Get all SR Names | getAllStorageResourceNames | Retrieve all storage resources of the gateway. | 56 | | Get a SR | getStorageResource | Fetch Storage Resource by providing the Storage ID. | 57 | | Register a SR | registerStorageResource | Register a new Storage Resource. This is a Super Admin Feature.| 58 | | Update a SR | updateStorageResource | Update and existing Storage Resource.| 59 | | Enable and Disable SR | getStorageResource updateStorageResource |Retrieve the SR and enable or disable through update. This is a Super Admin feature.| 60 | | Delete SR | deleteStorageResource |Select and delete and existing Storage Resource. | 61 | | Delete Data Movement Interface of SR | deleteDataMovementInterface |Delete a Data Movement Interface of a Storage Resource| 62 | Experiment Statistics 63 | | Get Experiment Statistics | getExperimentStatistics | Displays experiments grouped by the experiment status and derived for the given date time range. | 64 | Gateway Preferences 65 | | Add CR Preference for a gateway | addGatewayComputeResourcePreference || 66 | | Edit CR Preference | addGatewayComputeResourcePreference || 67 | | Delete a CR Preference | || 68 | | Add SR Preference for a gateway | addGatewayStoragePreference || 69 | | Edit SR Preference | addGatewayStoragePreference || 70 | | Delete a SR Preference | || 71 | Other 72 | | Get all Notices | noticesView | View all existing Notices. | 73 | 74 | 75 | 76 | 77 | 78 |

79 | If any questions or clarification regarding the API documentation please contact us through; 80 |
Airavata Mailing List

OR
81 | HipChat 82 | -------------------------------------------------------------------------------- /docs/faq.md: -------------------------------------------------------------------------------- 1 | ## FAQs 2 | 3 | Installation FAQs
4 | Configuration FAQs
5 | User FAQs 6 | 7 | ###

Installation FAQs

8 | Q1. I have setup my own gateway and Airavata. When I log into the gateway I cannot create Compute resources. What should I do?
9 | Answer: In your pga_config.php (in folder .../testdrive/app/config) under heading 'Portal Related Configurations' set 'super-admin-portal' => false, to true.
10 | 11 |
Q2. I don't get notifications when users create new accounts in my gateway. Why?
12 | Answer: That's because you have not defined an email address in
'admin-emails' => ['xxx@xxx.com','yyy@yyy.com']. Here you can add one or many.
13 | 14 |

Q3. I am not receiving email notifications from compute resources for job status changes. What should I do?
15 | Answer: In airavata-server.properties please locate and set your email account information. 16 |
email.based.monitor.host=imap.gmail.com
 17 | email.based.monitor.address=airavata-user@kuytje.nl
 18 | email.based.monitor.password=zzzz
 19 | email.based.monitor.folder.name=INBOX
 20 | email.based.monitor.store.protocol=imaps (either imaps or pop3)
21 |

Q4. In my Airavata log I have error messages like 22 |
ERROR org.apache.airavata.api.server.handler.AiravataServerHandler - Error occurred while retrieving SSH public keys for gateway 23 |
ERROR org.apache.airavata.credential.store.server.CredentialStoreServerHandler - Error occurred while retrieving credentials 24 |

What should I do?
25 |
Answer: This could be due to missing tables in your credential store database. Check whether CREDENTIALS and COMMUNITY_USER tables exits. If not create then using 26 |
CREATE TABLE COMMUNITY_USER
 27 | (
 28 |         GATEWAY_ID VARCHAR(256) NOT NULL,
 29 |         COMMUNITY_USER_NAME VARCHAR(256) NOT NULL,
 30 |         TOKEN_ID VARCHAR(256) NOT NULL,
 31 |         COMMUNITY_USER_EMAIL VARCHAR(256) NOT NULL,
 32 |         PRIMARY KEY (GATEWAY_ID, COMMUNITY_USER_NAME, TOKEN_ID)
 33 | );
 34 | 
35 |
CREATE TABLE CREDENTIALS
 36 | (
 37 |         GATEWAY_ID VARCHAR(256) NOT NULL,
 38 |         TOKEN_ID VARCHAR(256) NOT NULL,
 39 |         CREDENTIAL BLOB NOT NULL,
 40 |         PORTAL_USER_ID VARCHAR(256) NOT NULL,
 41 |         TIME_PERSISTED TIMESTAMP DEFAULT NOW() ON UPDATE NOW(),
 42 |         PRIMARY KEY (GATEWAY_ID, TOKEN_ID)
 43 | );
 44 | 
45 | 46 |

Q5. I cannot login to my Compute Resource and launch jobs from Airavata using the SSH key I generated. What should I do? 47 |
Answer: Steps to use generated SSH key
48 | - Generate SSH key + token using Credential Store
49 | - Add the generated token to your resource through PGA --> Admin Dashboard --> Gateway Preferences
50 | - Add the generated SSH key
51 | 52 |
Q6. When installing PGA in MAC i got below error after updating the composer. 53 |
- Error
54 | Mcrypt PHP extension required.
55 | Script php artisan clear-compiled handling the post-update-cmd event returned with an error
56 | [RuntimeException]
57 | Error Output: 58 |
Answer: 59 | Install mcrypt installation; 60 | mcrypt Installation Steps 61 | 62 |
Q7. After following the required steps only the home page is working and some images are not shown properly. 63 |
Answer: If you are facing this behavior first check whether you have enabled mod_rewrite module in apache webserver. 64 |
And also check whether you have set AllowOverride All in the Vhost configuration file in apache web server.
(e.g file location is /etc/apache2/sites-available/default and there should be two places where you want to change) 65 |

 66 | 
 67 |     ServerAdmin webmaster@dummy-host.example.com
 68 |     DocumentRoot /var/www/html/portal/public
 69 |     ServerName pga.example.com
 70 |     
 71 |        AllowOverride all
 72 |     
 73 |     ErrorLog logs/pga_error_log
 74 |     CustomLog logs/pga--access_log common
 75 | 
76 |
77 | 78 |
Q8. I get the Error message Permission Denied to app/storage directory.
79 |
Answer: Execute the following command and grant all permissions;
 sudo chmod -R 777 app/storage
80 | 81 |
Q9. In Ubuntu environment when executing sudo composer update it fails with message "Mcrypt PHP extension required". 82 |
Answer: To fix this install PHP mcrypt extension by following the below steps; 83 |
sudo apt-get install php5-mcrypt
84 | Locate mcrypt.so ,to get its location 85 | Locate mcrypt.ini and open the mcrypt.ini file 86 |
sudo pico /etc/php5/mods-available/mcrypt.ini
87 | Change the at line a extension= eg:/usr/lib/php5/20121212/mcrypt.so Save changes. 88 | Execute the command:
sudo php5enmod mcrypt
89 | Now restart the apache server again and test PGA web-interface 90 | 91 |
Q10. When tried to login or create a new user account an Error is thrown which is similar to PHP Fatal error: SOAP-ERROR: Parsing WSDL: Couldn't load from... 92 |
Answer: If you face this kind of an error first check whether you have enabled PHP SOAP and OpenSSL extensions. If even after enabling them the issue is still occurring try updating the PHP OpenSSL extension. (Using command like yum update openssl) 93 | 94 |
Q11. If you are seeing an error similar to following in your airavata.log
95 | Error: ERROR org.apache.airavata.registry.core.app.catalog.impl.StorageResourceImpl  - Error while retrieving storage resource... 96 | javax.persistence.NoResultException: Query "SELECT p FROM StorageResource p WHERE p.storageResourceId =:param0" selected no result, but expected unique result. 97 |
Answer: Add storage resource ID in to the pga_config.php in your gateway code/app/config directory. 98 | 99 |
Q12. I am getting error
100 | 2016-05-19 16:17:08,225 [main] ERROR org.apache.airavata.server.ServerMain - Server Start Error: 101 | java.lang.RuntimeException: Failed to create database connection pool.
102 | 103 | What should i do? 104 |
Answer: Airavata cannot create database connection because the mysql jar is not existing. Please follow step 8 of documentation in Installation --> Airavata --> Airavata Installation 105 | 106 | ###

Configuration FAQs

107 |
Q1 What each application input property mean?
108 | Answer:
109 | - Name:
110 | Identifier of the application input
111 | - Value:
112 | This could be a STRING value or it can also be used to set input file name.
113 | - Type:
114 | Input type, List contain STRING, INTEGER, FLOAT, URI, STDOUT and STDERR
115 | - Application Arguments:
116 | These are are the characters you would want on commandline in job execution for each input file or character input.
117 | - Standard Input:
118 | Futuristic property and not in real use at the moment
119 | - User Friendly Description:
120 | A description about the input to the gateway user. This will be displayed for users at experiment creation.
121 | - Input Order:
122 | this is a number field. This will be the order inputs displayed in experiment creation.
123 | - Data is Staged:
124 | - Is the Input Required:
125 | Futuristic property and not in real use at the moment. Whether set to true or false all inputs are currently treated as mandatory.
126 | - Required in Commandline:
127 | When this is set to true the arguments and the input file or the value will be available in job execution commandline in job script.
128 | - Meta Data:
129 | 130 |
Q2 Application Output Properties
131 | Answer: 132 | Add Application Output
133 | - Name:
134 | This is the label for the output.
135 | - Value:
136 | This would be the actual name of the output airavata brings back to the PGA.
137 | - Type:
138 | Tye of the output. This is mostly depended on the application. To troubleshoot for almost all applications define STDOUT and STDERR
139 | - Application Argument:
140 | This would be arguments for outputs need to be in commandline.
141 | - Data Movement:
142 | Futuristic property and not in real use at the moment. Whether set to true or false all outputs are currently brought back to PGA.
143 | - Is the Output required?:
144 | - Required on command line?:
145 | When this is set to true the arguments and the output file or the value will be available in job execution commandline in job script.
146 | - Location:
147 | - Search Query:
148 | 149 |
Q3 How to make input file available as an executable?
150 | Answer:
151 | - Input files defined are copied to the experiment working directory.
152 | - Input files will be available in commandline when 'Required on Commandline' = true
153 | - To add a commandline argument for a input file add 'Application Argument' for each input file. This will also define the order of files in commandline.
154 | 155 |
Q4 In Application Interface what is the use of 'Enable Optional File Inputs'
156 | Answer:
157 | - By setting 'Enable Optional File Inputs' = true user can add none or many input files at experiment creation.
158 | - In Airavata any input file required for the application to execute need to be defined as a separate input.
159 | - When inputs are defined they are treated as 'Mandatory' inputs.
160 | 161 |
Q5 Where do I add remote resource execution commands?
162 | Answer: In Admin Dashboard --> Application Deployment
163 | - Add module load commands
164 | - Pre and post job commands
165 | - Environment variables 166 | 167 | ###

User FAQs

168 | Q1 What is the Project?
169 | Answer:
170 | - Project is simply a collection of experiments.
171 | - When creating an experiment it will be under the project you select.
172 | - Projects can be shared with fellow gateway users.
173 | - When the project is shared all experiments in the project will be shared as well. 174 | 175 |
Q2 Where can I get test inputs?
176 | Answer: If you need test inputs try downloading from Test Input Files
177 | 178 |
Q3 Do I need to provide values for wall-time, node count and CPU count? OR can I go ahead with the given default values?
179 | Answer: Default values are given to make life little easy for users. But depending on the job you should change the values.
E.g.: If you need only two or less cores than 16 better to change. If you need more wall-time change it, etc....
180 | 181 | 182 |
Q4 What can I do with email Notifications in experiment?
183 | Answer: Submitting a job from PGA does not guarantee job getting executed in the remote resource right away. If you add your email address, when the job starts and completes an email will be sent to you from the remote resource.
184 | 185 |
Q5 Why 'Save' and 'Save and Launch'?
186 | Answer: User has the option of either create and 'Save' the experiment for later launch at remote resource
Or
187 | can directly 'Save and Launch' at once.
188 | 189 |
Q6 How do I monitor progress?
190 | Answer: When the experiment is launched navigate to Experiment Summary Page. 191 | There the experiment and job status will be present. 192 | You can monitor the experiment and job status changes. Refresh the status using 'Refresh' icon on top of the summary page.
193 | 194 |
Q7 How do I view/download my outputs?
195 | Answer: Same way you monitor the experiment progress! 196 |
For each experiment inputs can be downloaded from
197 | - Experiment Summary page
198 | - From 'Storage' at the top menu. Here you need to know the Project the experiment belongs to. 199 |
Once you locate the project you can browse for your experiment.
200 | 201 |
Q8 I want to bring back all the outputs generated by my job. How?
202 | Answer: You need to request your gateway admin to simply set Archive to 'true' in respective application interface in Admin Dashboard. Then all the files in the working directory will be brought back to PGA. This flag is set at gateway level not at individual user level. 203 | 204 |
Q9 I want to cancel my experiment. How?
205 | Answer: Navigate to experiment Summary and click 'Cancel' button. 206 | Experiments only in operation (LAUNCHED, EXECUTING experiment statuses) can be cancelled. 207 | 208 |
Q10 2. When I cancel do I still receive any outputs generated?
209 | Answer: Files will be not transferred from the remote resource if the experiment is cancelled. However, if the output files were transferred to PGA data directories prior to the cancel request then they will be displayed. 210 | 211 |
Q11 How can I run same application with different different inputs?
212 | Answer: Simply clone an existing experiment and change the input files and launch. 213 | 214 |
Q12 I want to change the wall-time of my experiment before launch. How can I do?
215 | Answer: Experiments in CREATED state can be modified through Experiment Summary page. Click 'Edit' change values and Save or Save and Launch. 216 | -------------------------------------------------------------------------------- /docs/technical-documentation/sharing-documentation/introduction.md: -------------------------------------------------------------------------------- 1 | ## Welcome to Airavata Sharing Registry Service Documentation 2 | 3 | Airavata Data Sharing Registry Service is a general purpose **Collaborative Workspace Management Component** that can solve your Scientific Data Management requirements related to sharing and access controlling. 4 | 5 | !!! note 6 | This component is under active development and this document will keep on evolving. Click [here](api-overview.md) to see the API docs. 7 | 8 | 13 | 14 | 15 | 16 | ### Getting started with the Java client 17 | 18 | 35 |
36 | 37 |
38 |

0. Required maven dependencies

39 |
 40 |     <dependency>
 41 |         <groupId>org.apache.airavata</groupId>
 42 |         <artifactId>airavata-sharing-registry-stubs</artifactId>
 43 |         <version>0.17-SNAPSHOT</version>
 44 |     </dependency>
 45 | 
 46 |     <dependency>
 47 |         <groupId>org.apache.thrift</groupId>
 48 |         <artifactId>libthrift</artifactId>
 49 |         <version>0.9.3</version>
 50 |     </dependency>
 51 | 
52 |
53 | 54 |
55 |

1. Creating the thrift client

56 |
 57 |     //should use the correct host name and port here
 58 |     String serverHost = "gw56.iu.xsede.org";
 59 |     int serverPort = 7878;
 60 | 
 61 |     TTransport transport = new TSocket(serverHost, serverPort);
 62 |     transport.open();
 63 |     TProtocol protocol = new TBinaryProtocol(transport);
 64 |     SharingRegistryService.Client sharingServiceClient = new SharingRegistryService.Client(protocol);
 65 | 
66 |
67 | 68 |
69 |

2. Create a domain

70 |
 71 |     Domain domain = new Domain();
 72 |     //has to be one word
 73 |     domain.setName("test-domain");
 74 |     //optional
 75 |     domain.setDescription("test domain description");
 76 | 
 77 |     //domain id will be same as domain name
 78 |     String domainId = sharingServiceClient.createDomain(domain);
 79 | 
80 |
81 | 82 |
83 |

2. Create Users

84 |
 85 |     User user1 = new User();
 86 |     String userName = "test-user-1";
 87 |     String userId1 =  "test-user-1";
 88 |     //required
 89 |     user1.setUserId(userId1);
 90 |     //required
 91 |     user.setUserName(userName);
 92 |     //required
 93 |     user1.setDomainId(domainId);
 94 |     //required
 95 |     user1.setFirstName("John");
 96 |     //required
 97 |     user1.setLastName("Doe");
 98 |     //required
 99 |     user1.setEmail("john.doe@abc.com");
100 |     //optional - this should be bytes of the users image icon
101 |     //byte[] icon = new byte[10];
102 |     //user1.setIcon(icon);
103 | 
104 |     sharingServiceClient.createUser(user1);
105 | 
106 |     //Similarly create two more users user2 and user3.
107 |         .
108 |         .
109 |         .
110 | 
111 |
112 | 113 |
114 |

3. Create User Groups

115 |
116 |     UserGroup userGroup1 = new UserGroup();
117 |     //required
118 |     userGroup1.setGroupId("test-group-1");
119 |     //required
120 |     userGroup1.setDomainId(domainId);
121 |     //required
122 |     userGroup1.setName("test-group-1");
123 |     //optional
124 |     userGroup1.setDescription("test group description");
125 |     //required
126 |     userGroup1.setOwnerId("test-user-1");
127 |     //required
128 |     userGroup1.setGroupType(GroupType.USER_LEVEL_GROUP);
129 | 
130 |     sharingServiceClient.createGroup(userGroup1);
131 | 
132 |     //Similarly create another group "userGroup2" with the owner being "test-user-2".
133 |         .
134 |         .
135 |         .
136 | 
137 |
138 | 139 |
140 |

4. Assign Users to a Group

141 |
142 |     sharingServiceClient.addUsersToGroup(domainId, Arrays.asList("test-user-3"), "test-group-2");
143 | 
144 |
145 | 146 |
147 |

5. Assign groups to a group

148 |
149 |     sharingServiceClient.addChildGroupsToParentGroup(domainId, Arrays.asList("test-group-2"), "test-group-1");
150 | 
151 |     /********************************************/
152 |     /*              test-group-1                */
153 |     /*                 /     \                  */
154 |     /*                /       \                 */
155 |     /*        test-user-1   test-group-2        */
156 |     /*                        /        \        */
157 |     /*                 test-user-2  test-user-3 */
158 |     /********************************************/
159 | 
160 |
161 | 162 |
163 |

6. Create Permission types for your Domain

164 |
165 |     PermissionType permissionType1 = new PermissionType();
166 |     //required
167 |     permissionType1.setPermissionTypeId("READ");
168 |     //required
169 |     permissionType1.setDomainId(domainId);
170 |     //required
171 |     permissionType1.setName("READ");
172 |     //optional
173 |     permissionType1.setDescription("READ description");
174 |     sharingServiceClient.createPermissionType(permissionType1);
175 | 
176 |     PermissionType permissionType2 = new PermissionType();
177 |     permissionType2.setPermissionTypeId("WRITE");
178 |     permissionType2.setDomainId(domainId);
179 |     permissionType2.setName("WRITE");
180 |     permissionType2.setDescription("WRITE description");
181 |     sharingServiceClient.createPermissionType(permissionType2);
182 | 
183 |     PermissionType permissionType3 = new PermissionType();
184 |     permissionType3.setPermissionTypeId("CLONE");
185 |     permissionType3.setDomainId(domainId);
186 |     permissionType3.setName("CLONE");
187 |     permissionType3.setDescription("CLONE description");
188 |     sharingServiceClient.createPermissionType(permissionType3);
189 | 
190 |
191 | 192 |
193 |

7. Create Entity Types for your Domain

194 |
195 |     EntityType entityType1 = new EntityType();
196 |     //required
197 |     entityType1.setEntityTypeId("PROJECT");
198 |     //required
199 |     entityType1.setDomainId(domainId);
200 |     //required
201 |     entityType1.setName("PROJECT");
202 |     //optional
203 |     entityType1.setDescription("PROJECT entity type description");
204 |     sharingServiceClient.createEntityType(entityType1);
205 | 
206 |     EntityType entityType2 = new EntityType();
207 |     entityType2.setEntityTypeId("EXPERIMENT");
208 |     entityType2.setDomainId(domainId);
209 |     entityType2.setName("EXPERIMENT");
210 |     entityType2.setDescription("EXPERIMENT entity type");
211 |     sharingServiceClient.createEntityType(entityType2);
212 | 
213 |     EntityType entityType3 = new EntityType();
214 |     entityType3.setEntityTypeId("FILE");
215 |     entityType3.setDomainId(domainId);
216 |     entityType3.setName("FILE");
217 |     entityType3.setDescription("FILE entity type");
218 |     sharingServiceClient.createEntityType(entityType3);
219 | 
220 |
221 | 222 |
223 |

8. Create Entities

224 |
225 |     Entity entity1 = new Entity();
226 |     //required
227 |     entity1.setEntityId("test-project-1");
228 |     //required
229 |     entity1.setDomainId(domainId);
230 |     //required
231 |     entity1.setEntityTypeId("PROJECT");
232 |     //required
233 |     entity1.setOwnerId("test-user-1");
234 |     //required
235 |     entity1.setName("test-project-1");
236 |     //optional
237 |     entity1.setDescription("test project 1 description");
238 |     //optional
239 |     entity1.setFullText("test project 1 stampede gaussian seagrid");
240 |     //optional - If not set this will be default to current system time
241 |     entity1.setOriginalEntityCreationTime(System.currentTimeMillis());
242 | 
243 |     Entity entity2 = new Entity();
244 |     entity2.setEntityId("test-experiment-1");
245 |     entity2.setDomainId(domainId);
246 |     entity2.setEntityTypeId("EXPERIMENT");
247 |     entity2.setOwnerId("test-user-1");
248 |     entity2.setName("test-experiment-1");
249 |     entity2.setDescription("test experiment 1 description");
250 |     entity2.setParentEntityId("test-project-1");
251 |     entity2.setFullText("test experiment 1 benzene");
252 |     sharingServiceClient.createEntity(entity2);
253 | 
254 |     Entity entity3 = new Entity();
255 |     entity3.setEntityId("test-experiment-2");
256 |     entity3.setDomainId(domainId);
257 |     entity3.setEntityTypeId("EXPERIMENT");
258 |     entity3.setOwnerId("test-user-1");
259 |     entity3.setName("test-experiment-2");
260 |     entity3.setDescription("test experiment 2 description");
261 |     entity3.setParentEntityId("test-project-1");
262 |     entity3.setFullText("test experiment 1 3-methyl 1-butanol stampede");
263 |     sharingServiceClient.createEntity(entity3);
264 | 
265 |     Entity entity4 = new Entity();
266 |     entity4.setEntityId("test-file-1");
267 |     entity4.setDomainId(domainId);
268 |     entity4.setEntityTypeId("FILE");
269 |     entity4.setOwnerId("test-user-1");
270 |     entity4.setName("test-file-1");
271 |     entity4.setDescription("test file 1 description");
272 |     entity4.setParentEntityId("test-experiment-2");
273 |     entity4.setFullText("test input file 1 for experiment 2");
274 |     sharingServiceClient.createEntity(entity4);
275 | 
276 |
277 | 278 |
279 |

9. Share Entities with Users and Groups

280 |
281 |     //shared with cascading permissions
282 |     sharingServiceClient.shareEntityWithUsers(domainId, "test-project-1", Arrays.asList("test-user-2"), "WRITE", true);
283 |     sharingServiceClient.shareEntityWithGroups(domainId, "test-experiment-2", Arrays.asList("test-group-2"), "READ", true);
284 | 
285 |     //shared with non cascading permissions
286 |     sharingServiceClient.shareEntityWithGroups(domainId, "test-experiment-2", Arrays.asList("test-group-2"), "CLONE", false);
287 | 
288 |     /************************************************************************************************************/
289 |     /*          test-project-1 (OWNER:test-user-1, WRITE:test-user-2)                                           */
290 |     /*             /                                              \                                             */
291 |     /*    test-experiment-1                                 test-experiment-2                                   */
292 |     /*   (OWNER:test-user-1,WRITE:test-user-2)  (OWNER:test-user-1, WRITE:test-user-2, READ/CLONE:test-group-2) */
293 |     /*                                                                  |                                       */
294 |     /*                                                             test-file-1                                  */
295 |     /*                                        (OWNER:test-user-1, WRITE:test-user-2, READ:test-group-2)         */
296 |     /************************************************************************************************************/
297 | 
298 |
299 | 300 |
301 |

9. Checking whether a User has Permission to access an Entity with specified Permission

302 |
303 |     //test-project-1 is explicitly shared with test-user-2 with WRITE permission
304 |     System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-project-1", "WRITE"));
305 | 
306 |     //test-user-2 has WRITE permission to test-experiment-1 and test-experiment-2 indirectly
307 |     System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-1", "WRITE"));
308 |     System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-2", "WRITE"));
309 | 
310 |     //test-user-2 does not have READ permission to test-experiment-1 and test-experiment-2
311 |     System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-1", "READ"));
312 |     System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-2", "test-experiment-2", "READ"));
313 | 
314 |     //test-user-3 does not have READ permission to test-project-1
315 |     System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-project-1", "READ"));
316 | 
317 |     //test-experiment-2 is shared with test-group-2 with READ permission. Therefore test-user-3 has READ permission
318 |     System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-experiment-2", "READ"));
319 | 
320 |     //test-user-3 does not have WRITE permission to test-experiment-2
321 |     System.out.println(sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-experiment-2", "WRITE"));
322 | 
323 |     //test-user-3 has CLONE permission to test-experiment-2
324 |     System.out.println((sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-experiment-2", "CLONE")));
325 |     //test-user-3 does not have CLONE permission to test-file-1
326 |     System.out.println((sharingServiceClient.userHasAccess(domainId, "test-user-3", "test-file-1", "CLONE")));
327 | 
328 |
329 | 330 |
331 |

10. Searching Entities

332 |
333 |     ArrayList<SearchCriteria> filters = new ArrayList<>();
334 |     SearchCriteria searchCriteria = new SearchCriteria();
335 |     searchCriteria.setSearchCondition(SearchCondition.FULL_TEXT);
336 |     searchCriteria.setValue("experiment stampede methyl");
337 |     searchCriteria.setSearchField(EntitySearchField.FULL_TEXT);
338 |     filters.add(searchCriteria);
339 | 
340 |     searchCriteria = new SearchCriteria();
341 |     searchCriteria.setSearchCondition(SearchCondition.EQUAL);
342 |     searchCriteria.setValue("EXPERIMENT");
343 |     searchCriteria.setSearchField(EntitySearchField.ENTITY_TYPE_ID);
344 |     filters.add(searchCriteria);
345 | 
346 |     searchCriteria = new SearchCriteria();
347 |     searchCriteria.setSearchCondition(SearchCondition.EQUAL);
348 |     searchCriteria.setValue("READ");
349 |     searchCriteria.setSearchField(EntitySearchField.PERMISSION_TYPE_ID);
350 |     filters.add(searchCriteria);
351 | 
352 |     System.out.println(sharingServiceClient.searchEntities(domainId, "test-user-2", "EXPERIMENT", filters, 0, -1).size());
353 | 
354 |
355 | -------------------------------------------------------------------------------- /docs/technical-documentation/sharing-documentation/sharing-models.md: -------------------------------------------------------------------------------- 1 | 2 |
3 |

Thrift module: sharing_models

4 | 5 | 6 | 7 | 24 | 26 |
ModuleServicesData typesConstants
sharing_modelsDomain
8 | Entity
9 | EntitySearchField
10 | EntityType
11 | GroupCardinality
12 | GroupChildType
13 | GroupMembership
14 | GroupType
15 | PermissionType
16 | SearchCondition
17 | SearchCriteria
18 | Sharing
19 | SharingRegistryException
20 | SharingType
21 | User
22 | UserGroup
23 |
DO_NOT_SET_AT_CLIENTS_ID
25 |
27 |

Constants

28 | 29 |
ConstantTypeValue
DO_NOT_SET_AT_CLIENTS_IDstring"DO_NOT_SET_AT_CLIENTS_ID"

Enumerations

30 |

Enumeration: GroupCardinality

31 |

This is an system internal enum used to define single user groups and multi users groups. Every user is also 32 | considered as a group in it's own right for implementation ease

33 | 34 |

35 | 37 | 39 |
SINGLE_USER0 36 |
MULTI_USER1 38 |
40 |

Enumeration: GroupType

41 |

Group types can be either user level or domain level groups.

42 | 43 |

44 | 46 | 48 |
DOMAIN_LEVEL_GROUP0 45 |
USER_LEVEL_GROUP1 47 |
49 |

Enumeration: GroupChildType

50 |

System internal data type to match group child types

51 | 52 |

53 | 55 | 57 |
USER0 54 |
GROUP1 56 |
58 |

Enumeration: EntitySearchField

59 |

This list of fields that can be used to search entities

60 |
  • NAME : Name of the entity
  • 61 |
  • DESCRIPTION : Description of the entity
  • 62 |
  • FULL_TEXT : Full text field of the entity
  • 63 |
  • PARENT_ENTITY_ID : Parent entity id of the entity
  • 64 |
  • OWNER_ID : Owner of the entity
  • 65 |
  • CREATED_TIME : Created time of the entity
  • 66 |
  • UPDATED_TIME : Updated time of the entity
  • 67 |
  • ENTITY_TYPE_ID : Entity type ID
  • 68 | 69 |

    70 | 72 | 74 | 76 | 78 | 80 | 82 | 84 | 86 | 87 | 88 | 89 | 91 | 92 |
    NAME0 71 |
    DESCRIPTION1 73 |
    FULL_TEXT2 75 |
    PARRENT_ENTITY_ID3 77 |
    OWNER_ID4 79 |
    PERMISSION_TYPE_ID5 81 |
    CREATED_TIME6 83 |
    UPDATED_TIME7 85 |
    ENTITY_TYPE_ID8 90 |
    93 |

    Enumeration: SearchCondition

    94 |

    Different search operators that can be used with the entity search fields

    95 |
  • EQUAL : Simply matches for equality. Applicable for name, and parent entity id
  • 96 |
  • LIKE : Check for the condition %$FIELD% condition. Applicable for name, and description
  • 97 |
  • FULL_TEXT : Does a full text search. Only applicable for the FULL_TEXT field.
  • 98 |
  • GTE : Greater than or equal. Only applicable for created time and updated time.
  • 99 |
  • LTE : Less than or equal. Only applicable for created time and updated time.
  • 100 |
  • NOT : Not operator. Only applicable for name, permission type id, parent entity id and owner id.
  • 101 | 102 |

    103 | 105 | 107 | 109 | 111 | 113 | 114 | 115 | 116 | 118 | 119 |
    EQUAL0 104 |
    LIKE1 106 |
    FULL_TEXT2 108 |
    GTE3 110 |
    LTE4 112 |
    NOT5 117 |
    120 |

    Enumeration: SharingType

    121 |

    This is an internal enum type for managing sharings

    122 | 123 |

    124 | 126 | 128 | 130 |
    DIRECT_NON_CASCADING0 125 |
    DIRECT_CASCADING1 127 |
    INDIRECT_CASCADING2 129 |
    131 |

    Data structures

    132 |

    Struct: Domain

    133 | 134 | 135 | 136 | 137 | 138 | 139 |
    KeyFieldTypeDescriptionRequirednessDefault value
    1domainIdstringoptional"DO_NOT_SET_AT_CLIENTS_ID"
    2namestringoptional
    3descriptionstringoptional
    4createdTimei64optional
    5updatedTimei64optional

    Domain is the entity that enables multi-tenency in this componenet. Every tenant will be 140 | operating separately it's own silo which is identified by the domain id. In the current implementation domain id 141 | will be same as the domain name

    142 |
  • domainId : Will be generated by the server based on the domain name
  • 143 |
  • name : A single word name that identifies the domain e.g seagrid, ultrascan
  • 144 |
  • description : A short description for the domain
  • 145 |
  • createdTime : Will be set by the system
  • 146 |
  • updatedTime : Will be set by the system
  • 147 | 148 |

    Struct: User

    149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 |
    KeyFieldTypeDescriptionRequirednessDefault value
    1userIdstringoptional
    2domainIdstringoptional
    3userNamestringoptional
    4firstNamestringoptional
    5lastNamestringoptional
    6emailstringoptional
    7iconbinaryoptional
    8createdTimei64optional
    9updatedTimei64optional

    User is the model used to register a user in the system. Minimal user information will be required to provide 160 | regarding the user.

    161 |
  • userId : User id provided by the client
  • 162 |
  • domainId : Domain id for that user
  • 163 |
  • userName : User name for the user
  • 164 |
  • firstName : First name of the user
  • 165 |
  • lastName : Last name of the user
  • 166 |
  • email : Email address of the user
  • 167 |
  • icon : A binary field for storing the user icon
  • 168 |
  • createdTime : If client provides this value then the system will use it if not the current time will be set
  • 169 |
  • updatedTime : If client provides this value then the system will use it if not the current time will be set
  • 170 | 171 |

    Struct: UserGroup

    172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 |
    KeyFieldTypeDescriptionRequirednessDefault value
    1groupIdstringoptional
    2domainIdstringoptional
    3namestringoptional
    4descriptionstringoptional
    5ownerIdstringoptional
    6groupTypeGroupTypeoptional
    7groupCardinalityGroupCardinalityoptional
    8createdTimei64optional
    9updatedTimei64optional

    User group is a collection of users.

    183 |
  • groupId : Group id provided by the client
  • 184 |
  • domainId : Domain id for this user group
  • 185 |
  • name : Name for the user group. should be one word
  • 186 |
  • description : Short description for the group.
  • 187 |
  • ownerId : Owner id of this group.
  • 188 |
  • groupType : Group type (DOMAIN_LEVEL_GROUP, USER_LEVEL_GROUP)
  • 189 |
  • groupCardinality : Group cardinality (SINGLE_USER, MULTI_USER)
  • 190 |
  • createdTime : Will be set by the system
  • 191 |
  • updatedTime : Will be set by the system
  • 192 | 193 |

    Struct: GroupMembership

    194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 |
    KeyFieldTypeDescriptionRequirednessDefault value
    1parentIdstringoptional
    2childIdstringoptional
    3domainIdstringoptional
    4childTypeGroupChildTypeoptional
    5createdTimei64optional
    6updatedTimei64optional

    System internal data type to map group memberships

    202 | 203 |

    Struct: EntityType

    204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 |
    KeyFieldTypeDescriptionRequirednessDefault value
    1entityTypeIdstringoptional
    2domainIdstringoptional
    3namestringoptional
    4descriptionstringoptional
    5createdTimei64optional
    6updatedTimei64optional

    client defined entity types

    212 |
  • entityTypeId : Entity type id provided by the client
  • 213 |
  • domainId : Domain id of the domain.
  • 214 |
  • name : Name for the entity type. Should be a single word.
  • 215 |
  • description : Short description for the entity type.
  • 216 |
  • createdTime : Will be set by the system
  • 217 |
  • updatedTime : Will be set by the system
  • 218 | 219 |

    Struct: SearchCriteria

    220 | 221 | 222 | 223 | 224 |
    KeyFieldTypeDescriptionRequirednessDefault value
    1searchFieldEntitySearchFieldoptional
    2valuestringoptional
    3searchConditionSearchConditionoptional

    Container object for search criteria

    225 |
  • searchField : Entity search field
  • 226 |
  • value : Search value
  • 227 |
  • searchCondition : EQUAL, LIKE etc..
  • 228 | 229 |

    Struct: Entity

    230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 |
    KeyFieldTypeDescriptionRequirednessDefault value
    1entityIdstringoptional
    2domainIdstringoptional
    3entityTypeIdstringoptional
    4ownerIdstringoptional
    5parentEntityIdstringoptional
    6namestringoptional
    7descriptionstringoptional
    8binaryDatabinaryoptional
    9fullTextstringoptional
    10originalEntityCreationTimei64optional
    11createdTimei64optional
    12updatedTimei64optional

    Entity object which is used to register an entity in the system.

    244 |
  • entityId : Entity id provided by the client
  • 245 |
  • domainId : Domain id
  • 246 |
  • entityTypeId : Entity type id
  • 247 |
  • ownerId : Owner id
  • 248 |
  • parentEntityId : Parent entity id
  • 249 |
  • name : Name
  • 250 |
  • description : Short description for the entity
  • 251 |
  • binaryData : Any information stored in binary format
  • 252 |
  • fullText : A string which will be considered for full text search
  • 253 |
  • originalEntityCreationTime : When registering old records what is the original entity creation time. If not 254 | set will be default to current time
  • 255 |
  • createdTime : Will be set by the system
  • 256 |
  • updatedTime : Will be set by the system
  • 257 | 258 |

    Struct: PermissionType

    259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 |
    KeyFieldTypeDescriptionRequirednessDefault value
    1permissionTypeIdstringoptional
    2domainIdstringoptional
    3namestringoptional
    4descriptionstringoptional
    5createdTimei64optional
    6updatedTimei64optional

    Object for creating client defined permission type

    267 |
  • permissionTypeId : Permission type id provided by the client
  • 268 |
  • domainId : Domain id
  • 269 |
  • name : Single word name for the permission
  • 270 |
  • description : Short description for the permission type
  • 271 |
  • createdTime : Will be set by the system
  • 272 |
  • updatedTime : Will be set by the system
  • 273 | 274 |

    Struct: Sharing

    275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 |
    KeyFieldTypeDescriptionRequirednessDefault value
    1permissionTypeIdstringoptional
    2entityIdstringoptional
    3groupIdstringoptional
    4sharingTypeSharingTypeoptional
    5domainIdstringoptional
    6inheritedParentIdstringoptional
    7createdTimei64optional
    8updatedTimei64optional

    This is an internal enum type for managing sharings

    285 | 286 |

    Exception: SharingRegistryException

    287 | 288 | 289 |
    KeyFieldTypeDescriptionRequirednessDefault value
    1messagestringrequired

    Exception model used in the sharing registry service

    290 | 291 |
    292 | 293 | -------------------------------------------------------------------------------- /docs/technical-documentation/sharing-documentation/sharing-cpi.md: -------------------------------------------------------------------------------- 1 | 2 |
    3 |

    Thrift module: sharing_cpi

    4 | 5 | 6 | 53 | 54 | 55 |
    ModuleServicesData typesConstants
    sharing_cpiSharingRegistryService
    7 | 52 |
    56 |

    Services

    57 |

    Service: SharingRegistryService

    58 |

    Function: SharingRegistryService.createDomain

    59 |
    string createDomain(sharing_models.Domain domain)
     60 |     throws sharing_models.SharingRegistryException
     61 | 

    API method to create a new domain

    62 |

    Function: SharingRegistryService.updateDomain

    63 |
    bool updateDomain(sharing_models.Domain domain)
     64 |     throws sharing_models.SharingRegistryException
     65 | 

    API method to update a domain

    66 |

    Function: SharingRegistryService.deleteDomain

    67 |
    bool deleteDomain(string domainId)
     68 |     throws sharing_models.SharingRegistryException
     69 | 

    API method to delete domain

    70 |

    Function: SharingRegistryService.getDomain

    71 |
    sharing_models.Domain getDomain(string domainId)
     72 |     throws sharing_models.SharingRegistryException
     73 | 

    API method to retrieve a domain

    74 |

    Function: SharingRegistryService.getDomains

    75 |
    list<sharing_models.Domain> getDomains(i32 offset,
     76 |                                        i32 limit)
     77 |     throws sharing_models.SharingRegistryException
     78 | 

    API method to get all domain.

    79 |

    Function: SharingRegistryService.createUser

    80 |
    string createUser(sharing_models.User user)
     81 |     throws sharing_models.SharingRegistryException
     82 | 

    API method to register a user in the system

    83 |

    Function: SharingRegistryService.updatedUser

    84 |
    bool updatedUser(sharing_models.User user)
     85 |     throws sharing_models.SharingRegistryException
     86 | 

    API method to update existing user

    87 |

    Function: SharingRegistryService.deleteUser

    88 |
    bool deleteUser(string domainId,
     89 |                 string userId)
     90 |     throws sharing_models.SharingRegistryException
     91 | 

    API method to delete user

    92 |

    Function: SharingRegistryService.getUser

    93 |
    sharing_models.User getUser(string domainId,
     94 |                             string userId)
     95 |     throws sharing_models.SharingRegistryException
     96 | 

    API method to get a user

    97 |

    Function: SharingRegistryService.getUsers

    98 |
    list<sharing_models.User> getUsers(string domainId,
     99 |                                    i32 offset,
    100 |                                    i32 limit)
    101 |     throws sharing_models.SharingRegistryException
    102 | 

    API method to get a list of users in a specific domain.

    103 |
  • domainId : Domain id
  • 104 |
  • offset : Starting result number
  • 105 |
  • limit : Number of max results to be sent
  • 106 |

    Function: SharingRegistryService.createGroup

    107 |
    string createGroup(sharing_models.UserGroup group)
    108 |     throws sharing_models.SharingRegistryException
    109 | 

    API method to create a new group

    110 |

    Function: SharingRegistryService.updateGroup

    111 |
    bool updateGroup(sharing_models.UserGroup group)
    112 |     throws sharing_models.SharingRegistryException
    113 | 

    API method to update a group

    114 |

    Function: SharingRegistryService.deleteGroup

    115 |
    bool deleteGroup(string domainId,
    116 |                  string groupId)
    117 |     throws sharing_models.SharingRegistryException
    118 | 

    API method to delete a group

    119 |

    Function: SharingRegistryService.getGroup

    120 |
    sharing_models.UserGroup getGroup(string domainId,
    121 |                                   string groupId)
    122 |     throws sharing_models.SharingRegistryException
    123 | 

    API method to get a group

    124 |

    Function: SharingRegistryService.getGroups

    125 |
    list<sharing_models.UserGroup> getGroups(string domainId,
    126 |                                          i32 offset,
    127 |                                          i32 limit)
    128 | 

    API method to get groups in a domainId.

    129 |

    Function: SharingRegistryService.addUsersToGroup

    130 |
    bool addUsersToGroup(string domainId,
    131 |                      list<string> userIds,
    132 |                      string groupId)
    133 |     throws sharing_models.SharingRegistryException
    134 | 

    API method to add list of users to a group

    135 |

    Function: SharingRegistryService.removeUsersFromGroup

    136 |
    bool removeUsersFromGroup(string domainId,
    137 |                           list<string> userIds,
    138 |                           string groupId)
    139 |     throws sharing_models.SharingRegistryException
    140 | 

    API method to remove users from a group

    141 |

    Function: SharingRegistryService.getGroupMembersOfTypeUser

    142 |
    list<sharing_models.User> getGroupMembersOfTypeUser(string domainId,
    143 |                                                     string groupId,
    144 |                                                     i32 offset,
    145 |                                                     i32 limit)
    146 |     throws sharing_models.SharingRegistryException
    147 | 

    API method to get list of child users in a group. Only the direct members will be returned.

    148 |

    Function: SharingRegistryService.getGroupMembersOfTypeGroup

    149 |
    list<sharing_models.UserGroup> getGroupMembersOfTypeGroup(string domainId,
    150 |                                                           string groupId,
    151 |                                                           i32 offset,
    152 |                                                           i32 limit)
    153 |     throws sharing_models.SharingRegistryException
    154 | 

    API method to get list of child groups in a group. Only the direct members will be returned.

    155 |

    Function: SharingRegistryService.addChildGroupsToParentGroup

    156 |
    bool addChildGroupsToParentGroup(string domainId,
    157 |                                  list<string> childIds,
    158 |                                  string groupId)
    159 |     throws sharing_models.SharingRegistryException
    160 | 

    API method to add a child group to a parent group.

    161 |

    Function: SharingRegistryService.removeChildGroupFromParentGroup

    162 |
    bool removeChildGroupFromParentGroup(string domainId,
    163 |                                      string childId,
    164 |                                      string groupId)
    165 |     throws sharing_models.SharingRegistryException
    166 | 

    API method to remove a child group from parent group.

    167 |

    Function: SharingRegistryService.createEntityType

    168 |
    string createEntityType(sharing_models.EntityType entityType)
    169 |     throws sharing_models.SharingRegistryException
    170 | 

    API method to create a new entity type

    171 |

    Function: SharingRegistryService.updateEntityType

    172 |
    bool updateEntityType(sharing_models.EntityType entityType)
    173 |     throws sharing_models.SharingRegistryException
    174 | 

    API method to update entity type

    175 |

    Function: SharingRegistryService.deleteEntityType

    176 |
    bool deleteEntityType(string domainId,
    177 |                       string entityTypeId)
    178 |     throws sharing_models.SharingRegistryException
    179 | 

    API method to delete entity type

    180 |

    Function: SharingRegistryService.getEntityType

    181 |
    sharing_models.EntityType getEntityType(string domainId,
    182 |                                         string entityTypeId)
    183 |     throws sharing_models.SharingRegistryException
    184 | 

    API method to get an entity type

    185 |

    Function: SharingRegistryService.getEntityTypes

    186 |
    list<sharing_models.EntityType> getEntityTypes(string domainId,
    187 |                                                i32 offset,
    188 |                                                i32 limit)
    189 |     throws sharing_models.SharingRegistryException
    190 | 

    API method to get entity types in a domainId.

    191 |

    Function: SharingRegistryService.createEntity

    192 |
    string createEntity(sharing_models.Entity entity)
    193 |     throws sharing_models.SharingRegistryException
    194 | 

    API method to register new entity

    195 |

    Function: SharingRegistryService.updateEntity

    196 |
    bool updateEntity(sharing_models.Entity entity)
    197 |     throws sharing_models.SharingRegistryException
    198 | 

    API method to update entity

    199 |

    Function: SharingRegistryService.deleteEntity

    200 |
    bool deleteEntity(string domainId,
    201 |                   string entityId)
    202 |     throws sharing_models.SharingRegistryException
    203 | 

    API method to delete entity

    204 |

    Function: SharingRegistryService.getEntity

    205 |
    sharing_models.Entity getEntity(string domainId,
    206 |                                 string entityId)
    207 |     throws sharing_models.SharingRegistryException
    208 | 

    API method to get entity

    209 |

    Function: SharingRegistryService.searchEntities

    210 |
    list<sharing_models.Entity> searchEntities(string domainId,
    211 |                                            string userId,
    212 |                                            list<sharing_models.SearchCriteria> filters,
    213 |                                            i32 offset,
    214 |                                            i32 limit)
    215 |     throws sharing_models.SharingRegistryException
    216 | 

    API method to search entities

    217 |

    Function: SharingRegistryService.getListOfSharedUsers

    218 |
    list<sharing_models.User> getListOfSharedUsers(string domainId,
    219 |                                                string entityId,
    220 |                                                string permissionTypeId)
    221 |     throws sharing_models.SharingRegistryException
    222 | 

    API method to get a list of shared users given the entity id

    223 |

    Function: SharingRegistryService.getListOfSharedGroups

    224 |
    list<sharing_models.UserGroup> getListOfSharedGroups(string domainId,
    225 |                                                      string entityId,
    226 |                                                      string permissionTypeId)
    227 |     throws sharing_models.SharingRegistryException
    228 | 

    API method to get a list of shared groups given the entity id

    229 |

    Function: SharingRegistryService.createPermissionType

    230 |
    string createPermissionType(sharing_models.PermissionType permissionType)
    231 |     throws sharing_models.SharingRegistryException
    232 | 

    API method to create permission type

    233 |

    Function: SharingRegistryService.updatePermissionType

    234 |
    bool updatePermissionType(sharing_models.PermissionType permissionType)
    235 |     throws sharing_models.SharingRegistryException
    236 | 

    API method to update permission type

    237 |

    Function: SharingRegistryService.deletePermissionType

    238 |
    bool deletePermissionType(string domainId,
    239 |                           string permissionTypeId)
    240 |     throws sharing_models.SharingRegistryException
    241 | 

    API method to delete permission type

    242 |

    Function: SharingRegistryService.getPermissionType

    243 |
    sharing_models.PermissionType getPermissionType(string domainId,
    244 |                                                 string permissionTypeId)
    245 |     throws sharing_models.SharingRegistryException
    246 | 

    API method to get permission type

    247 |

    Function: SharingRegistryService.getPermissionTypes

    248 |
    list<sharing_models.PermissionType> getPermissionTypes(string domainId,
    249 |                                                        i32 offset,
    250 |                                                        i32 limit)
    251 |     throws sharing_models.SharingRegistryException
    252 | 

    API method to get list of permission types in a given domainId.

    253 |

    Function: SharingRegistryService.shareEntityWithUsers

    254 |
    bool shareEntityWithUsers(string domainId,
    255 |                           string entityId,
    256 |                           list<string> userList,
    257 |                           string perssionTypeId,
    258 |                           bool cascadePermission)
    259 |     throws sharing_models.SharingRegistryException
    260 | 

    API method to share an entity with users

    261 |

    Function: SharingRegistryService.revokeEntitySharingFromUsers

    262 |
    bool revokeEntitySharingFromUsers(string domainId,
    263 |                                   string entityId,
    264 |                                   list<string> userList,
    265 |                                   string perssionTypeId)
    266 |     throws sharing_models.SharingRegistryException
    267 | 

    API method to revoke sharing from a list of users

    268 |

    Function: SharingRegistryService.shareEntityWithGroups

    269 |
    bool shareEntityWithGroups(string domainId,
    270 |                            string entityId,
    271 |                            list<string> groupList,
    272 |                            string perssionTypeId,
    273 |                            bool cascadePermission)
    274 |     throws sharing_models.SharingRegistryException
    275 | 

    API method to share an entity with list of groups

    276 |

    Function: SharingRegistryService.revokeEntitySharingFromGroups

    277 |
    bool revokeEntitySharingFromGroups(string domainId,
    278 |                                    string entityId,
    279 |                                    list<string> groupList,
    280 |                                    string perssionTypeId)
    281 |     throws sharing_models.SharingRegistryException
    282 | 

    API method to revoke sharing from list of users

    283 |

    Function: SharingRegistryService.userHasAccess

    284 |
    bool userHasAccess(string domainId,
    285 |                    string userId,
    286 |                    string entityId,
    287 |                    string permissionTypeId)
    288 |     throws sharing_models.SharingRegistryException
    289 | 

    API method to check whether a user has access to a specific entity

    290 |
    291 | --------------------------------------------------------------------------------