├── .asf.yaml
├── .devcontainer
├── Dockerfile
├── database_scripts
│ └── init
│ │ ├── 00-accounts.sql
│ │ ├── 01-databases.sql
│ │ ├── 02-sharing-registry-migrations.sql
│ │ ├── 03-appcatalog-migrations.sql
│ │ ├── 04-expcatalog-migrations.sql
│ │ ├── 05-replica-catalog-migrations.sql
│ │ └── 06-cloud-execution-support-migration.sql
├── devcontainer.json
├── docker-compose-alt.yml
├── docker-compose.yml
├── gateway-storage
│ ├── Dockerfile
│ └── authorized_keys
├── keycloak
│ ├── keycloak.conf
│ └── realm-default.json
├── portals
│ ├── Dockerfile
│ ├── pga-default.conf
│ └── pga_config.php
└── proxy
│ ├── http.conf
│ ├── nginx.conf
│ └── stream.conf
├── .dockerignore
├── .github
└── workflows
│ ├── build-and-publish.yml
│ ├── codeql.yml
│ ├── maven-build.yml
│ └── style-check.yml
├── .gitignore
├── .run
├── APIServerStarter.run.xml
├── AgentServiceApplication.run.xml
├── FileServerApplication.run.xml
├── JobEngineStarter.run.xml
├── JobMonitorStarter.run.xml
└── ResearchServiceApplication.run.xml
├── .vscode
└── launch.json
├── CITATION.cff
├── DEPLOY
├── Dockerfile
├── INSTALL
├── LICENSE
├── NOTICE
├── README.md
├── RELEASE_NOTES
├── airavata-api
├── pom.xml
└── src
│ ├── main
│ ├── assembly
│ │ ├── api-server-bin-assembly.xml
│ │ └── api-server-src-assembly.xml
│ ├── docker
│ │ └── Dockerfile
│ ├── java-templates
│ │ └── org
│ │ │ └── apache
│ │ │ └── airavata
│ │ │ └── common
│ │ │ └── utils
│ │ │ └── BuildConstant.java
│ ├── java
│ │ └── org
│ │ │ └── apache
│ │ │ └── airavata
│ │ │ ├── accountprovisioning
│ │ │ ├── ConfigParam.java
│ │ │ ├── InvalidSetupException.java
│ │ │ ├── InvalidUsernameException.java
│ │ │ ├── SSHAccountManager.java
│ │ │ ├── SSHAccountProvisioner.java
│ │ │ ├── SSHAccountProvisionerFactory.java
│ │ │ ├── SSHAccountProvisionerProvider.java
│ │ │ ├── SSHUtil.java
│ │ │ └── provisioner
│ │ │ │ ├── IULdapSSHAccountProvisioner.java
│ │ │ │ └── IULdapSSHAccountProvisionerProvider.java
│ │ │ ├── agents
│ │ │ ├── api
│ │ │ │ ├── AdaptorParams.java
│ │ │ │ ├── Agent.java
│ │ │ │ ├── AgentAdaptor.java
│ │ │ │ ├── AgentException.java
│ │ │ │ ├── AgentUtils.java
│ │ │ │ ├── CommandOutput.java
│ │ │ │ ├── FileMetadata.java
│ │ │ │ ├── JobSubmissionOutput.java
│ │ │ │ └── StorageResourceAdaptor.java
│ │ │ └── streaming
│ │ │ │ ├── TransferResult.java
│ │ │ │ ├── VirtualInputStream.java
│ │ │ │ ├── VirtualOutputStream.java
│ │ │ │ └── VirtualStreamProducer.java
│ │ │ ├── api
│ │ │ ├── client
│ │ │ │ └── AiravataClientFactory.java
│ │ │ └── server
│ │ │ │ ├── AiravataAPIServer.java
│ │ │ │ ├── handler
│ │ │ │ └── AiravataServerHandler.java
│ │ │ │ └── util
│ │ │ │ └── Constants.java
│ │ │ ├── cluster
│ │ │ └── monitoring
│ │ │ │ ├── ClusterStatusMonitorJob.java
│ │ │ │ └── ClusterStatusMonitorJobScheduler.java
│ │ │ ├── common
│ │ │ ├── context
│ │ │ │ ├── RequestContext.java
│ │ │ │ └── WorkflowContext.java
│ │ │ ├── exception
│ │ │ │ ├── AiravataConfigurationException.java
│ │ │ │ ├── AiravataException.java
│ │ │ │ ├── AiravataStartupException.java
│ │ │ │ └── ApplicationSettingsException.java
│ │ │ ├── logging
│ │ │ │ ├── Exception.java
│ │ │ │ ├── MDCConstants.java
│ │ │ │ └── MDCUtil.java
│ │ │ └── utils
│ │ │ │ ├── AiravataJobState.java
│ │ │ │ ├── AiravataUtils.java
│ │ │ │ ├── ApplicationSettings.java
│ │ │ │ ├── Constants.java
│ │ │ │ ├── DBEventManagerConstants.java
│ │ │ │ ├── DBEventService.java
│ │ │ │ ├── DBInitConfig.java
│ │ │ │ ├── DBInitializer.java
│ │ │ │ ├── DBUtil.java
│ │ │ │ ├── DatabaseCreator.java
│ │ │ │ ├── DatabaseTestCases.java
│ │ │ │ ├── DefaultKeyStorePasswordCallback.java
│ │ │ │ ├── DerbyUtil.java
│ │ │ │ ├── ExecutionMode.java
│ │ │ │ ├── IOUtil.java
│ │ │ │ ├── IServer.java
│ │ │ │ ├── JDBCConfig.java
│ │ │ │ ├── JPAUtils.java
│ │ │ │ ├── JSONUtil.java
│ │ │ │ ├── KeyStorePasswordCallback.java
│ │ │ │ ├── LocalEventPublisher.java
│ │ │ │ ├── NameValidator.java
│ │ │ │ ├── Pair.java
│ │ │ │ ├── SecurityUtil.java
│ │ │ │ ├── ServerSettings.java
│ │ │ │ ├── StringUtil.java
│ │ │ │ ├── SwingUtil.java
│ │ │ │ ├── ThriftClientPool.java
│ │ │ │ ├── ThriftUtils.java
│ │ │ │ ├── Version.java
│ │ │ │ ├── WSConstants.java
│ │ │ │ └── ZkConstants.java
│ │ │ ├── compute
│ │ │ └── resource
│ │ │ │ └── monitoring
│ │ │ │ ├── ComputationalResourceMonitoringService.java
│ │ │ │ ├── job
│ │ │ │ ├── ComputeResourceMonitor.java
│ │ │ │ ├── MonitoringJob.java
│ │ │ │ └── output
│ │ │ │ │ ├── OutputParser.java
│ │ │ │ │ └── OutputParserImpl.java
│ │ │ │ └── utils
│ │ │ │ └── Constants.java
│ │ │ ├── credential
│ │ │ └── store
│ │ │ │ ├── client
│ │ │ │ ├── CredentialStoreClientFactory.java
│ │ │ │ └── TestSSLClient.java
│ │ │ │ ├── credential
│ │ │ │ ├── AuditInfo.java
│ │ │ │ ├── CommunityUser.java
│ │ │ │ ├── Credential.java
│ │ │ │ ├── CredentialOwnerType.java
│ │ │ │ └── impl
│ │ │ │ │ ├── certificate
│ │ │ │ │ ├── CertificateAuditInfo.java
│ │ │ │ │ └── CertificateCredential.java
│ │ │ │ │ ├── password
│ │ │ │ │ └── PasswordCredential.java
│ │ │ │ │ └── ssh
│ │ │ │ │ └── SSHCredential.java
│ │ │ │ ├── notifier
│ │ │ │ ├── CredentialStoreNotifier.java
│ │ │ │ ├── NotificationMessage.java
│ │ │ │ ├── NotifierBootstrap.java
│ │ │ │ └── impl
│ │ │ │ │ ├── EmailNotificationMessage.java
│ │ │ │ │ ├── EmailNotifier.java
│ │ │ │ │ └── EmailNotifierConfiguration.java
│ │ │ │ ├── server
│ │ │ │ ├── CredentialStoreServer.java
│ │ │ │ └── CredentialStoreServerHandler.java
│ │ │ │ ├── store
│ │ │ │ ├── CredentialReader.java
│ │ │ │ ├── CredentialReaderFactory.java
│ │ │ │ ├── CredentialStoreException.java
│ │ │ │ ├── CredentialWriter.java
│ │ │ │ └── impl
│ │ │ │ │ ├── CertificateCredentialWriter.java
│ │ │ │ │ ├── CredentialReaderImpl.java
│ │ │ │ │ ├── SSHCredentialWriter.java
│ │ │ │ │ ├── db
│ │ │ │ │ ├── CommunityUserDAO.java
│ │ │ │ │ ├── CredentialsDAO.java
│ │ │ │ │ └── ParentDAO.java
│ │ │ │ │ └── util
│ │ │ │ │ ├── CredentialStoreDBInitConfig.java
│ │ │ │ │ └── CredentialStoreJDBCConfig.java
│ │ │ │ └── util
│ │ │ │ ├── ConfigurationReader.java
│ │ │ │ ├── CredentialStoreConstants.java
│ │ │ │ ├── PrivateKeyStore.java
│ │ │ │ ├── TokenGenerator.java
│ │ │ │ └── Utility.java
│ │ │ ├── db
│ │ │ └── event
│ │ │ │ └── manager
│ │ │ │ ├── DBEventManagerRunner.java
│ │ │ │ ├── messaging
│ │ │ │ ├── DBEventManagerException.java
│ │ │ │ ├── DBEventManagerMessagingFactory.java
│ │ │ │ └── impl
│ │ │ │ │ └── DBEventMessageHandler.java
│ │ │ │ └── utils
│ │ │ │ ├── Constants.java
│ │ │ │ └── DbEventManagerZkUtils.java
│ │ │ ├── helix
│ │ │ ├── adaptor
│ │ │ │ ├── PoolingSSHJClient.java
│ │ │ │ ├── SSHJAgentAdaptor.java
│ │ │ │ ├── SSHJStorageAdaptor.java
│ │ │ │ └── wrapper
│ │ │ │ │ ├── SCPFileTransferWrapper.java
│ │ │ │ │ ├── SFTPClientWrapper.java
│ │ │ │ │ ├── SSHClientWrapper.java
│ │ │ │ │ └── SessionWrapper.java
│ │ │ ├── agent
│ │ │ │ ├── ssh
│ │ │ │ │ ├── SSHUtil.java
│ │ │ │ │ ├── SshAdaptorParams.java
│ │ │ │ │ ├── SshAgentAdaptor.java
│ │ │ │ │ └── StandardOutReader.java
│ │ │ │ └── storage
│ │ │ │ │ └── StorageResourceAdaptorImpl.java
│ │ │ ├── core
│ │ │ │ ├── AbstractTask.java
│ │ │ │ ├── OutPort.java
│ │ │ │ ├── participant
│ │ │ │ │ └── HelixParticipant.java
│ │ │ │ ├── support
│ │ │ │ │ ├── TaskHelperImpl.java
│ │ │ │ │ └── adaptor
│ │ │ │ │ │ ├── AdaptorSupportImpl.java
│ │ │ │ │ │ └── AgentStore.java
│ │ │ │ └── util
│ │ │ │ │ ├── MonitoringUtil.java
│ │ │ │ │ ├── PropertyResolver.java
│ │ │ │ │ └── TaskUtil.java
│ │ │ ├── impl
│ │ │ │ ├── controller
│ │ │ │ │ ├── HelixController.java
│ │ │ │ │ └── WorkflowCleanupAgent.java
│ │ │ │ ├── participant
│ │ │ │ │ └── GlobalParticipant.java
│ │ │ │ ├── task
│ │ │ │ │ ├── AWSTaskFactory.java
│ │ │ │ │ ├── AiravataTask.java
│ │ │ │ │ ├── HelixTaskFactory.java
│ │ │ │ │ ├── SlurmTaskFactory.java
│ │ │ │ │ ├── TaskContext.java
│ │ │ │ │ ├── TaskFactory.java
│ │ │ │ │ ├── TaskOnFailException.java
│ │ │ │ │ ├── aws
│ │ │ │ │ │ ├── AWSCompletingTask.java
│ │ │ │ │ │ ├── AWSJobSubmissionTask.java
│ │ │ │ │ │ ├── AWSProcessContextManager.java
│ │ │ │ │ │ ├── CreateEC2InstanceTask.java
│ │ │ │ │ │ ├── NoOperationTask.java
│ │ │ │ │ │ └── utils
│ │ │ │ │ │ │ ├── AWSTaskUtil.java
│ │ │ │ │ │ │ └── ExponentialBackoffWaiter.java
│ │ │ │ │ ├── cancel
│ │ │ │ │ │ ├── CancelCompletingTask.java
│ │ │ │ │ │ ├── RemoteJobCancellationTask.java
│ │ │ │ │ │ └── WorkflowCancellationTask.java
│ │ │ │ │ ├── completing
│ │ │ │ │ │ └── CompletingTask.java
│ │ │ │ │ ├── env
│ │ │ │ │ │ └── EnvSetupTask.java
│ │ │ │ │ ├── mock
│ │ │ │ │ │ └── MockTask.java
│ │ │ │ │ ├── parsing
│ │ │ │ │ │ ├── DataParsingTask.java
│ │ │ │ │ │ ├── ParsingTriggeringTask.java
│ │ │ │ │ │ ├── ProcessCompletionMessage.java
│ │ │ │ │ │ ├── kafka
│ │ │ │ │ │ │ ├── ProcessCompletionMessageDeserializer.java
│ │ │ │ │ │ │ └── ProcessCompletionMessageSerializer.java
│ │ │ │ │ │ └── models
│ │ │ │ │ │ │ ├── ParsingTaskInput.java
│ │ │ │ │ │ │ ├── ParsingTaskInputs.java
│ │ │ │ │ │ │ ├── ParsingTaskOutput.java
│ │ │ │ │ │ │ └── ParsingTaskOutputs.java
│ │ │ │ │ ├── staging
│ │ │ │ │ │ ├── ArchiveTask.java
│ │ │ │ │ │ ├── DataStagingTask.java
│ │ │ │ │ │ ├── InputDataStagingTask.java
│ │ │ │ │ │ ├── JobVerificationTask.java
│ │ │ │ │ │ └── OutputDataStagingTask.java
│ │ │ │ │ └── submission
│ │ │ │ │ │ ├── DefaultJobSubmissionTask.java
│ │ │ │ │ │ ├── ForkJobSubmissionTask.java
│ │ │ │ │ │ ├── JobSubmissionTask.java
│ │ │ │ │ │ ├── LocalJobSubmissionTask.java
│ │ │ │ │ │ └── config
│ │ │ │ │ │ ├── GroovyMapBuilder.java
│ │ │ │ │ │ ├── GroovyMapData.java
│ │ │ │ │ │ ├── JobFactory.java
│ │ │ │ │ │ ├── JobManagerConfiguration.java
│ │ │ │ │ │ ├── OutputParser.java
│ │ │ │ │ │ ├── RawCommandInfo.java
│ │ │ │ │ │ ├── ScriptTag.java
│ │ │ │ │ │ └── app
│ │ │ │ │ │ ├── CloudJobManagerConfiguration.java
│ │ │ │ │ │ ├── ForkJobConfiguration.java
│ │ │ │ │ │ ├── HTCondorJobConfiguration.java
│ │ │ │ │ │ ├── JobUtil.java
│ │ │ │ │ │ ├── LSFJobConfiguration.java
│ │ │ │ │ │ ├── PBSJobConfiguration.java
│ │ │ │ │ │ ├── SlurmJobConfiguration.java
│ │ │ │ │ │ ├── UGEJobConfiguration.java
│ │ │ │ │ │ └── parser
│ │ │ │ │ │ ├── AiravataCustomCommandOutputParser.java
│ │ │ │ │ │ ├── ForkOutputParser.java
│ │ │ │ │ │ ├── HTCondorOutputParser.java
│ │ │ │ │ │ ├── LSFOutputParser.java
│ │ │ │ │ │ ├── PBSOutputParser.java
│ │ │ │ │ │ ├── SlurmOutputParser.java
│ │ │ │ │ │ └── UGEOutputParser.java
│ │ │ │ └── workflow
│ │ │ │ │ ├── ParserWorkflowManager.java
│ │ │ │ │ ├── PostWorkflowManager.java
│ │ │ │ │ ├── PreWorkflowManager.java
│ │ │ │ │ └── WorkflowManager.java
│ │ │ ├── task
│ │ │ │ └── api
│ │ │ │ │ ├── TaskHelper.java
│ │ │ │ │ ├── TaskParamType.java
│ │ │ │ │ ├── annotation
│ │ │ │ │ ├── TaskDef.java
│ │ │ │ │ ├── TaskOutPort.java
│ │ │ │ │ └── TaskParam.java
│ │ │ │ │ └── support
│ │ │ │ │ └── AdaptorSupport.java
│ │ │ └── workflow
│ │ │ │ ├── QueueOperator.java
│ │ │ │ └── WorkflowOperator.java
│ │ │ ├── messaging
│ │ │ ├── client
│ │ │ │ ├── RabbitMQListener.java
│ │ │ │ └── TestReader.java
│ │ │ └── core
│ │ │ │ ├── MessageContext.java
│ │ │ │ ├── MessageHandler.java
│ │ │ │ ├── MessagingConstants.java
│ │ │ │ ├── MessagingFactory.java
│ │ │ │ ├── Publisher.java
│ │ │ │ ├── RabbitMQProperties.java
│ │ │ │ ├── Subscriber.java
│ │ │ │ ├── TestClient.java
│ │ │ │ ├── Type.java
│ │ │ │ ├── impl
│ │ │ │ ├── ExperimentConsumer.java
│ │ │ │ ├── MessageConsumer.java
│ │ │ │ ├── ProcessConsumer.java
│ │ │ │ ├── RabbitMQPublisher.java
│ │ │ │ ├── RabbitMQSubscriber.java
│ │ │ │ └── StatusConsumer.java
│ │ │ │ ├── stats
│ │ │ │ ├── CountWriterTask.java
│ │ │ │ ├── LatencyWriterTask.java
│ │ │ │ └── StatCounter.java
│ │ │ │ └── util
│ │ │ │ └── DBEventPublisherUtils.java
│ │ │ ├── metascheduler
│ │ │ ├── core
│ │ │ │ ├── api
│ │ │ │ │ └── ProcessScheduler.java
│ │ │ │ ├── engine
│ │ │ │ │ ├── ComputeResourceSelectionPolicy.java
│ │ │ │ │ ├── DataAnalyzer.java
│ │ │ │ │ ├── ProcessScanner.java
│ │ │ │ │ └── ReScheduler.java
│ │ │ │ └── utils
│ │ │ │ │ └── Utils.java
│ │ │ ├── metadata
│ │ │ │ └── analyzer
│ │ │ │ │ ├── DataInterpreterService.java
│ │ │ │ │ ├── impl
│ │ │ │ │ └── DataAnalyzerImpl.java
│ │ │ │ │ └── utils
│ │ │ │ │ └── Constants.java
│ │ │ └── process
│ │ │ │ └── scheduling
│ │ │ │ ├── api
│ │ │ │ └── ProcessSchedulerImpl.java
│ │ │ │ ├── engine
│ │ │ │ ├── cr
│ │ │ │ │ └── selection
│ │ │ │ │ │ ├── ComputeResourceSelectionPolicyImpl.java
│ │ │ │ │ │ ├── DefaultComputeResourceSelectionPolicy.java
│ │ │ │ │ │ └── MultipleComputeResourcePolicy.java
│ │ │ │ └── rescheduler
│ │ │ │ │ ├── ExponentialBackOffReScheduler.java
│ │ │ │ │ ├── ProcessReschedulingService.java
│ │ │ │ │ └── ProcessScannerImpl.java
│ │ │ │ └── utils
│ │ │ │ └── Constants.java
│ │ │ ├── model
│ │ │ └── util
│ │ │ │ ├── AppDeploymentUtil.java
│ │ │ │ ├── AppInterfaceUtil.java
│ │ │ │ ├── ExecutionType.java
│ │ │ │ ├── ExperimentModelUtil.java
│ │ │ │ ├── GroupComputeResourcePreferenceUtil.java
│ │ │ │ └── ProjectModelUtil.java
│ │ │ ├── monitor
│ │ │ ├── AbstractMonitor.java
│ │ │ ├── JobStateValidator.java
│ │ │ ├── JobStatusResult.java
│ │ │ ├── MonitoringException.java
│ │ │ ├── email
│ │ │ │ ├── EmailBasedMonitor.java
│ │ │ │ └── parser
│ │ │ │ │ ├── AiravataCustomMailParser.java
│ │ │ │ │ ├── EmailParser.java
│ │ │ │ │ ├── HTCondorEmailParser.java
│ │ │ │ │ ├── LSFEmailParser.java
│ │ │ │ │ ├── PBSEmailParser.java
│ │ │ │ │ ├── ResourceConfig.java
│ │ │ │ │ ├── SLURMEmailParser.java
│ │ │ │ │ └── UGEEmailParser.java
│ │ │ ├── kafka
│ │ │ │ ├── JobStatusResultDeserializer.java
│ │ │ │ ├── JobStatusResultSerializer.java
│ │ │ │ └── MessageProducer.java
│ │ │ └── realtime
│ │ │ │ ├── RealtimeMonitor.java
│ │ │ │ └── parser
│ │ │ │ └── RealtimeJobStatusParser.java
│ │ │ ├── orchestrator
│ │ │ ├── client
│ │ │ │ └── OrchestratorClientFactory.java
│ │ │ ├── core
│ │ │ │ ├── OrchestratorConfiguration.java
│ │ │ │ ├── context
│ │ │ │ │ └── OrchestratorContext.java
│ │ │ │ ├── exception
│ │ │ │ │ └── OrchestratorException.java
│ │ │ │ ├── impl
│ │ │ │ │ └── GFACPassiveJobSubmitter.java
│ │ │ │ ├── job
│ │ │ │ │ └── JobSubmitter.java
│ │ │ │ ├── schedule
│ │ │ │ │ ├── DefaultHostScheduler.java
│ │ │ │ │ └── HostScheduler.java
│ │ │ │ ├── utils
│ │ │ │ │ ├── OrchestratorConstants.java
│ │ │ │ │ └── OrchestratorUtils.java
│ │ │ │ └── validator
│ │ │ │ │ ├── JobMetadataValidator.java
│ │ │ │ │ └── impl
│ │ │ │ │ ├── BatchQueueValidator.java
│ │ │ │ │ ├── ExperimentStatusValidator.java
│ │ │ │ │ └── GroupResourceProfileValidator.java
│ │ │ ├── cpi
│ │ │ │ ├── Orchestrator.java
│ │ │ │ └── impl
│ │ │ │ │ ├── AbstractOrchestrator.java
│ │ │ │ │ └── SimpleOrchestratorImpl.java
│ │ │ ├── sample
│ │ │ │ └── OrchestratorClientSample.java
│ │ │ ├── server
│ │ │ │ ├── OrchestratorServer.java
│ │ │ │ └── OrchestratorServerHandler.java
│ │ │ └── util
│ │ │ │ ├── Constants.java
│ │ │ │ ├── OrchestratorServerThreadPoolExecutor.java
│ │ │ │ └── OrchestratorUtils.java
│ │ │ ├── patform
│ │ │ └── monitoring
│ │ │ │ ├── CountMonitor.java
│ │ │ │ ├── GaugeMonitor.java
│ │ │ │ └── MonitoringServer.java
│ │ │ ├── registry
│ │ │ ├── api
│ │ │ │ ├── client
│ │ │ │ │ └── RegistryServiceClientFactory.java
│ │ │ │ └── service
│ │ │ │ │ ├── RegistryAPIServer.java
│ │ │ │ │ ├── handler
│ │ │ │ │ └── RegistryServerHandler.java
│ │ │ │ │ ├── messaging
│ │ │ │ │ ├── RegistryServiceDBEventHandler.java
│ │ │ │ │ └── RegistryServiceDBEventMessagingFactory.java
│ │ │ │ │ └── util
│ │ │ │ │ └── Constants.java
│ │ │ ├── core
│ │ │ │ ├── RegistryException.java
│ │ │ │ ├── entities
│ │ │ │ │ ├── airavataworkflowcatalog
│ │ │ │ │ │ ├── AiravataWorkflowEntity.java
│ │ │ │ │ │ ├── AiravataWorkflowErrorEntity.java
│ │ │ │ │ │ ├── AiravataWorkflowErrorPK.java
│ │ │ │ │ │ ├── AiravataWorkflowStatusEntity.java
│ │ │ │ │ │ ├── AiravataWorkflowStatusPK.java
│ │ │ │ │ │ ├── ApplicationErrorEntity.java
│ │ │ │ │ │ ├── ApplicationErrorPK.java
│ │ │ │ │ │ ├── ApplicationStatusEntity.java
│ │ │ │ │ │ ├── ApplicationStatusPK.java
│ │ │ │ │ │ ├── HandlerErrorEntity.java
│ │ │ │ │ │ ├── HandlerErrorPK.java
│ │ │ │ │ │ ├── HandlerInputEntity.java
│ │ │ │ │ │ ├── HandlerInputPK.java
│ │ │ │ │ │ ├── HandlerOutputEntity.java
│ │ │ │ │ │ ├── HandlerOutputPK.java
│ │ │ │ │ │ ├── HandlerStatusEntity.java
│ │ │ │ │ │ ├── HandlerStatusPK.java
│ │ │ │ │ │ ├── WorkflowApplicationEntity.java
│ │ │ │ │ │ ├── WorkflowApplicationPK.java
│ │ │ │ │ │ ├── WorkflowConnectionEntity.java
│ │ │ │ │ │ ├── WorkflowConnectionPK.java
│ │ │ │ │ │ ├── WorkflowDataBlockEntity.java
│ │ │ │ │ │ ├── WorkflowHandlerEntity.java
│ │ │ │ │ │ └── WorkflowHandlerPK.java
│ │ │ │ │ ├── appcatalog
│ │ │ │ │ │ ├── AWSGroupComputeResourcePrefEntity.java
│ │ │ │ │ │ ├── AppEnvironmentEntity.java
│ │ │ │ │ │ ├── AppEnvironmentPK.java
│ │ │ │ │ │ ├── AppModuleMappingEntity.java
│ │ │ │ │ │ ├── AppModuleMappingPK.java
│ │ │ │ │ │ ├── ApplicationDeploymentEntity.java
│ │ │ │ │ │ ├── ApplicationInputEntity.java
│ │ │ │ │ │ ├── ApplicationInputPK.java
│ │ │ │ │ │ ├── ApplicationInterfaceEntity.java
│ │ │ │ │ │ ├── ApplicationModuleEntity.java
│ │ │ │ │ │ ├── ApplicationOutputEntity.java
│ │ │ │ │ │ ├── ApplicationOutputPK.java
│ │ │ │ │ │ ├── BatchQueueEntity.java
│ │ │ │ │ │ ├── BatchQueuePK.java
│ │ │ │ │ │ ├── BatchQueueResourcePolicyEntity.java
│ │ │ │ │ │ ├── CloudJobSubmissionEntity.java
│ │ │ │ │ │ ├── ComputeResourceEntity.java
│ │ │ │ │ │ ├── ComputeResourceFileSystemEntity.java
│ │ │ │ │ │ ├── ComputeResourceFileSystemPK.java
│ │ │ │ │ │ ├── ComputeResourcePolicyEntity.java
│ │ │ │ │ │ ├── ComputeResourcePreferenceEntity.java
│ │ │ │ │ │ ├── ComputeResourcePreferencePK.java
│ │ │ │ │ │ ├── ComputeResourceReservationEntity.java
│ │ │ │ │ │ ├── DataMovementInterfaceEntity.java
│ │ │ │ │ │ ├── DataMovementInterfacePK.java
│ │ │ │ │ │ ├── GatewayGroupsEntity.java
│ │ │ │ │ │ ├── GatewayProfileEntity.java
│ │ │ │ │ │ ├── GlobusGkEndpointEntity.java
│ │ │ │ │ │ ├── GlobusGkEndpointPK.java
│ │ │ │ │ │ ├── GlobusSubmissionEntity.java
│ │ │ │ │ │ ├── GridftpDataMovementEntity.java
│ │ │ │ │ │ ├── GridftpEndpointEntity.java
│ │ │ │ │ │ ├── GridftpEndpointPK.java
│ │ │ │ │ │ ├── GroupComputeResourcePrefEntity.java
│ │ │ │ │ │ ├── GroupComputeResourcePrefPK.java
│ │ │ │ │ │ ├── GroupResourceProfileEntity.java
│ │ │ │ │ │ ├── GroupSSHAccountProvisionerConfig.java
│ │ │ │ │ │ ├── GroupSSHAccountProvisionerConfigPK.java
│ │ │ │ │ │ ├── GsisshExportEntity.java
│ │ │ │ │ │ ├── GsisshExportPK.java
│ │ │ │ │ │ ├── GsisshPostjobcommandEntity.java
│ │ │ │ │ │ ├── GsisshPostjobcommandPK.java
│ │ │ │ │ │ ├── GsisshPrejobcommandEntity.java
│ │ │ │ │ │ ├── GsisshPrejobcommandPK.java
│ │ │ │ │ │ ├── GsisshSubmissionEntity.java
│ │ │ │ │ │ ├── JobManagerCommandEntity.java
│ │ │ │ │ │ ├── JobManagerCommandPK.java
│ │ │ │ │ │ ├── JobSubmissionInterfaceEntity.java
│ │ │ │ │ │ ├── JobSubmissionInterfacePK.java
│ │ │ │ │ │ ├── LibraryApendPathEntity.java
│ │ │ │ │ │ ├── LibraryAppendPathPK.java
│ │ │ │ │ │ ├── LibraryPrependPathEntity.java
│ │ │ │ │ │ ├── LibraryPrependPathPK.java
│ │ │ │ │ │ ├── LocalDataMovementEntity.java
│ │ │ │ │ │ ├── LocalSubmissionEntity.java
│ │ │ │ │ │ ├── ModuleLoadCmdEntity.java
│ │ │ │ │ │ ├── ModuleLoadCmdPK.java
│ │ │ │ │ │ ├── ParallelismCommandEntity.java
│ │ │ │ │ │ ├── ParallelismCommandPK.java
│ │ │ │ │ │ ├── ParserConnectorEntity.java
│ │ │ │ │ │ ├── ParserConnectorInputEntity.java
│ │ │ │ │ │ ├── ParserEntity.java
│ │ │ │ │ │ ├── ParserInputEntity.java
│ │ │ │ │ │ ├── ParserOutputEntity.java
│ │ │ │ │ │ ├── ParsingTemplateEntity.java
│ │ │ │ │ │ ├── ParsingTemplateInputEntity.java
│ │ │ │ │ │ ├── PostjobCommandEntity.java
│ │ │ │ │ │ ├── PostjobCommandPK.java
│ │ │ │ │ │ ├── PrejobCommandEntity.java
│ │ │ │ │ │ ├── PrejobCommandPK.java
│ │ │ │ │ │ ├── ResourceJobManagerEntity.java
│ │ │ │ │ │ ├── SSHAccountProvisionerConfiguration.java
│ │ │ │ │ │ ├── SSHAccountProvisionerConfigurationPK.java
│ │ │ │ │ │ ├── ScpDataMovementEntity.java
│ │ │ │ │ │ ├── SlurmGroupComputeResourcePrefEntity.java
│ │ │ │ │ │ ├── SshJobSubmissionEntity.java
│ │ │ │ │ │ ├── StorageInterfaceEntity.java
│ │ │ │ │ │ ├── StorageInterfacePK.java
│ │ │ │ │ │ ├── StoragePreferenceEntity.java
│ │ │ │ │ │ ├── StoragePreferencePK.java
│ │ │ │ │ │ ├── StorageResourceEntity.java
│ │ │ │ │ │ ├── UnicoreDatamovementEntity.java
│ │ │ │ │ │ ├── UnicoreSubmissionEntity.java
│ │ │ │ │ │ ├── UserComputeResourcePreferenceEntity.java
│ │ │ │ │ │ ├── UserComputeResourcePreferencePK.java
│ │ │ │ │ │ ├── UserResourceProfileEntity.java
│ │ │ │ │ │ ├── UserResourceProfilePK.java
│ │ │ │ │ │ ├── UserStoragePreferenceEntity.java
│ │ │ │ │ │ └── UserStoragePreferencePK.java
│ │ │ │ │ ├── expcatalog
│ │ │ │ │ │ ├── ComputationalResourceSchedulingEntity.java
│ │ │ │ │ │ ├── ComputationalResourceSchedulingPK.java
│ │ │ │ │ │ ├── ExperimentEntity.java
│ │ │ │ │ │ ├── ExperimentErrorEntity.java
│ │ │ │ │ │ ├── ExperimentErrorPK.java
│ │ │ │ │ │ ├── ExperimentInputEntity.java
│ │ │ │ │ │ ├── ExperimentInputPK.java
│ │ │ │ │ │ ├── ExperimentOutputEntity.java
│ │ │ │ │ │ ├── ExperimentOutputPK.java
│ │ │ │ │ │ ├── ExperimentStatusEntity.java
│ │ │ │ │ │ ├── ExperimentStatusPK.java
│ │ │ │ │ │ ├── ExperimentSummaryEntity.java
│ │ │ │ │ │ ├── GatewayEntity.java
│ │ │ │ │ │ ├── GatewayUsageReportingCommandEntity.java
│ │ │ │ │ │ ├── GatewayUsageReportingPK.java
│ │ │ │ │ │ ├── GatewayWorkerEntity.java
│ │ │ │ │ │ ├── GatewayWorkerPK.java
│ │ │ │ │ │ ├── JobEntity.java
│ │ │ │ │ │ ├── JobPK.java
│ │ │ │ │ │ ├── JobStatusEntity.java
│ │ │ │ │ │ ├── JobStatusPK.java
│ │ │ │ │ │ ├── NotificationEntity.java
│ │ │ │ │ │ ├── ProcessEntity.java
│ │ │ │ │ │ ├── ProcessErrorEntity.java
│ │ │ │ │ │ ├── ProcessErrorPK.java
│ │ │ │ │ │ ├── ProcessInputEntity.java
│ │ │ │ │ │ ├── ProcessInputPK.java
│ │ │ │ │ │ ├── ProcessOutputEntity.java
│ │ │ │ │ │ ├── ProcessOutputPK.java
│ │ │ │ │ │ ├── ProcessResourceScheduleEntity.java
│ │ │ │ │ │ ├── ProcessStatusEntity.java
│ │ │ │ │ │ ├── ProcessStatusPK.java
│ │ │ │ │ │ ├── ProcessWorkflowEntity.java
│ │ │ │ │ │ ├── ProcessWorkflowPK.java
│ │ │ │ │ │ ├── ProjectEntity.java
│ │ │ │ │ │ ├── ProjectUserEntity.java
│ │ │ │ │ │ ├── ProjectUserPK.java
│ │ │ │ │ │ ├── QueueStatusEntity.java
│ │ │ │ │ │ ├── QueueStatusPK.java
│ │ │ │ │ │ ├── TaskEntity.java
│ │ │ │ │ │ ├── TaskErrorEntity.java
│ │ │ │ │ │ ├── TaskErrorPK.java
│ │ │ │ │ │ ├── TaskStatusEntity.java
│ │ │ │ │ │ ├── TaskStatusPK.java
│ │ │ │ │ │ ├── UserConfigurationDataEntity.java
│ │ │ │ │ │ ├── UserEntity.java
│ │ │ │ │ │ └── UserPK.java
│ │ │ │ │ ├── replicacatalog
│ │ │ │ │ │ ├── ConfigurationEntity.java
│ │ │ │ │ │ ├── ConfigurationPK.java
│ │ │ │ │ │ ├── DataProductEntity.java
│ │ │ │ │ │ ├── DataProductMetadataEntity.java
│ │ │ │ │ │ ├── DataProductMetadataPK.java
│ │ │ │ │ │ ├── DataReplicaLocationEntity.java
│ │ │ │ │ │ ├── DataReplicaMetadataEntity.java
│ │ │ │ │ │ └── DataReplicaMetadataPK.java
│ │ │ │ │ └── workflowcatalog
│ │ │ │ │ │ ├── ComponentStatusEntity.java
│ │ │ │ │ │ ├── EdgeEntity.java
│ │ │ │ │ │ ├── EdgePK.java
│ │ │ │ │ │ ├── NodeEntity.java
│ │ │ │ │ │ ├── NodePK.java
│ │ │ │ │ │ ├── PortEntity.java
│ │ │ │ │ │ ├── PortPK.java
│ │ │ │ │ │ ├── WorkflowEntity.java
│ │ │ │ │ │ ├── WorkflowInputEntity.java
│ │ │ │ │ │ ├── WorkflowInputPK.java
│ │ │ │ │ │ ├── WorkflowOutputEntity.java
│ │ │ │ │ │ ├── WorkflowOutputPK.java
│ │ │ │ │ │ ├── WorkflowStatusEntity.java
│ │ │ │ │ │ └── WorkflowStatusPK.java
│ │ │ │ ├── repositories
│ │ │ │ │ ├── AbstractRepository.java
│ │ │ │ │ ├── appcatalog
│ │ │ │ │ │ ├── AppCatAbstractRepository.java
│ │ │ │ │ │ ├── ApplicationDeploymentRepository.java
│ │ │ │ │ │ ├── ApplicationInputRepository.java
│ │ │ │ │ │ ├── ApplicationInterfaceRepository.java
│ │ │ │ │ │ ├── ApplicationModuleRepository.java
│ │ │ │ │ │ ├── ApplicationOutputRepository.java
│ │ │ │ │ │ ├── BatchQueuePolicyRepository.java
│ │ │ │ │ │ ├── BatchQueueRepository.java
│ │ │ │ │ │ ├── ComputeResourcePolicyRepository.java
│ │ │ │ │ │ ├── ComputeResourcePrefRepository.java
│ │ │ │ │ │ ├── ComputeResourceRepository.java
│ │ │ │ │ │ ├── DataMovementRepository.java
│ │ │ │ │ │ ├── GatewayGroupsRepository.java
│ │ │ │ │ │ ├── GroupResourceProfileRepository.java
│ │ │ │ │ │ ├── GrpComputePrefRepository.java
│ │ │ │ │ │ ├── GwyResourceProfileRepository.java
│ │ │ │ │ │ ├── JobSubmissionInterfaceRepository.java
│ │ │ │ │ │ ├── ParserInputRepository.java
│ │ │ │ │ │ ├── ParserOutputRepository.java
│ │ │ │ │ │ ├── ParserRepository.java
│ │ │ │ │ │ ├── ParsingTemplateRepository.java
│ │ │ │ │ │ ├── ResourceJobManagerRepository.java
│ │ │ │ │ │ ├── StoragePrefRepository.java
│ │ │ │ │ │ ├── StorageResourceRepository.java
│ │ │ │ │ │ ├── UserComputeResourcePreferenceRepository.java
│ │ │ │ │ │ ├── UserResourceProfileRepository.java
│ │ │ │ │ │ └── UserStoragePreferenceRepository.java
│ │ │ │ │ ├── expcatalog
│ │ │ │ │ │ ├── ExpCatAbstractRepository.java
│ │ │ │ │ │ ├── ExperimentErrorRepository.java
│ │ │ │ │ │ ├── ExperimentInputRepository.java
│ │ │ │ │ │ ├── ExperimentOutputRepository.java
│ │ │ │ │ │ ├── ExperimentRepository.java
│ │ │ │ │ │ ├── ExperimentStatusRepository.java
│ │ │ │ │ │ ├── ExperimentSummaryRepository.java
│ │ │ │ │ │ ├── GatewayRepository.java
│ │ │ │ │ │ ├── GatewayUsageReportingCommandRepository.java
│ │ │ │ │ │ ├── JobRepository.java
│ │ │ │ │ │ ├── JobStatusRepository.java
│ │ │ │ │ │ ├── NotificationRepository.java
│ │ │ │ │ │ ├── ProcessErrorRepository.java
│ │ │ │ │ │ ├── ProcessInputRepository.java
│ │ │ │ │ │ ├── ProcessOutputRepository.java
│ │ │ │ │ │ ├── ProcessRepository.java
│ │ │ │ │ │ ├── ProcessStatusRepository.java
│ │ │ │ │ │ ├── ProcessWorkflowRepository.java
│ │ │ │ │ │ ├── ProjectRepository.java
│ │ │ │ │ │ ├── QueueStatusRepository.java
│ │ │ │ │ │ ├── TaskErrorRepository.java
│ │ │ │ │ │ ├── TaskRepository.java
│ │ │ │ │ │ ├── TaskStatusRepository.java
│ │ │ │ │ │ └── UserRepository.java
│ │ │ │ │ ├── replicacatalog
│ │ │ │ │ │ ├── DataProductRepository.java
│ │ │ │ │ │ ├── DataReplicaLocationRepository.java
│ │ │ │ │ │ └── RepCatAbstractRepository.java
│ │ │ │ │ └── workflowcatalog
│ │ │ │ │ │ ├── WorkflowCatAbstractRepository.java
│ │ │ │ │ │ └── WorkflowRepository.java
│ │ │ │ └── utils
│ │ │ │ │ ├── AppCatalogDBInitConfig.java
│ │ │ │ │ ├── AppCatalogJDBCConfig.java
│ │ │ │ │ ├── AppCatalogUtils.java
│ │ │ │ │ ├── Committer.java
│ │ │ │ │ ├── CustomBeanFactory.java
│ │ │ │ │ ├── DBConstants.java
│ │ │ │ │ ├── DozerConverter
│ │ │ │ │ ├── CsvStringConverter.java
│ │ │ │ │ └── StorageDateConverter.java
│ │ │ │ │ ├── ExpCatalogDBInitConfig.java
│ │ │ │ │ ├── ExpCatalogJDBCConfig.java
│ │ │ │ │ ├── ExpCatalogUtils.java
│ │ │ │ │ ├── JPAUtil
│ │ │ │ │ ├── AppCatalogJPAUtils.java
│ │ │ │ │ ├── ExpCatalogJPAUtils.java
│ │ │ │ │ ├── RepCatalogJPAUtils.java
│ │ │ │ │ └── WorkflowCatalogJPAUtils.java
│ │ │ │ │ ├── ObjectMapperSingleton.java
│ │ │ │ │ ├── QueryConstants.java
│ │ │ │ │ ├── ReplicaCatalogDBInitConfig.java
│ │ │ │ │ ├── ReplicaCatalogJDBCConfig.java
│ │ │ │ │ ├── WorkflowCatalogDBInitConfig.java
│ │ │ │ │ ├── WorkflowCatalogJDBCConfig.java
│ │ │ │ │ ├── WorkflowCatalogUtils.java
│ │ │ │ │ └── migration
│ │ │ │ │ ├── MappingToolRunner.java
│ │ │ │ │ └── MigrationSchemaGenerator.java
│ │ │ └── cpi
│ │ │ │ ├── AppCatalog.java
│ │ │ │ ├── AppCatalogException.java
│ │ │ │ ├── ApplicationDeployment.java
│ │ │ │ ├── ApplicationInterface.java
│ │ │ │ ├── CompositeIdentifier.java
│ │ │ │ ├── ComputeResource.java
│ │ │ │ ├── DataProductInterface.java
│ │ │ │ ├── DataReplicaLocationInterface.java
│ │ │ │ ├── ExpCatChildDataType.java
│ │ │ │ ├── ExpCatParentDataType.java
│ │ │ │ ├── ExperimentCatalog.java
│ │ │ │ ├── ExperimentCatalogException.java
│ │ │ │ ├── ExperimentCatalogModelType.java
│ │ │ │ ├── GwyClientCredential.java
│ │ │ │ ├── GwyResourceProfile.java
│ │ │ │ ├── Registry.java
│ │ │ │ ├── RegistryException.java
│ │ │ │ ├── ReplicaCatalog.java
│ │ │ │ ├── ReplicaCatalogException.java
│ │ │ │ ├── ResultOrderType.java
│ │ │ │ ├── StorageResource.java
│ │ │ │ ├── UsrResourceProfile.java
│ │ │ │ ├── WorkflowCatalog.java
│ │ │ │ ├── WorkflowCatalogException.java
│ │ │ │ └── utils
│ │ │ │ ├── Constants.java
│ │ │ │ └── StatusType.java
│ │ │ ├── security
│ │ │ ├── AbstractAuthenticator.java
│ │ │ ├── AbstractDatabaseAuthenticator.java
│ │ │ ├── AiravataSecurityException.java
│ │ │ ├── AuthenticationException.java
│ │ │ ├── Authenticator.java
│ │ │ ├── Authoriser.java
│ │ │ ├── UserStore.java
│ │ │ ├── UserStoreException.java
│ │ │ ├── configurations
│ │ │ │ ├── AbstractConfigurationReader.java
│ │ │ │ └── AuthenticatorConfigurationReader.java
│ │ │ ├── userstore
│ │ │ │ ├── AbstractJDBCUserStore.java
│ │ │ │ ├── JDBCUserStore.java
│ │ │ │ ├── LDAPUserStore.java
│ │ │ │ └── SessionDBUserStore.java
│ │ │ └── util
│ │ │ │ └── PasswordDigester.java
│ │ │ ├── server
│ │ │ └── ServerMain.java
│ │ │ ├── service
│ │ │ ├── profile
│ │ │ │ ├── client
│ │ │ │ │ └── ProfileServiceClientFactory.java
│ │ │ │ ├── commons
│ │ │ │ │ ├── repositories
│ │ │ │ │ │ └── AbstractRepository.java
│ │ │ │ │ ├── tenant
│ │ │ │ │ │ └── entities
│ │ │ │ │ │ │ └── GatewayEntity.java
│ │ │ │ │ ├── user
│ │ │ │ │ │ └── entities
│ │ │ │ │ │ │ ├── CustomizedDashboardEntity.java
│ │ │ │ │ │ │ ├── NSFDemographicsEntity.java
│ │ │ │ │ │ │ └── UserProfileEntity.java
│ │ │ │ │ └── utils
│ │ │ │ │ │ ├── Committer.java
│ │ │ │ │ │ ├── JPAConstants.java
│ │ │ │ │ │ ├── JPAUtils.java
│ │ │ │ │ │ ├── ObjectMapperSingleton.java
│ │ │ │ │ │ ├── ProfileServiceJDBCConfig.java
│ │ │ │ │ │ ├── QueryConstants.java
│ │ │ │ │ │ └── Utils.java
│ │ │ │ ├── handlers
│ │ │ │ │ ├── GroupManagerServiceHandler.java
│ │ │ │ │ ├── IamAdminServicesHandler.java
│ │ │ │ │ ├── TenantProfileServiceHandler.java
│ │ │ │ │ └── UserProfileServiceHandler.java
│ │ │ │ ├── iam
│ │ │ │ │ └── admin
│ │ │ │ │ │ └── services
│ │ │ │ │ │ └── core
│ │ │ │ │ │ ├── impl
│ │ │ │ │ │ └── TenantManagementKeycloakImpl.java
│ │ │ │ │ │ └── interfaces
│ │ │ │ │ │ └── TenantManagementInterface.java
│ │ │ │ ├── server
│ │ │ │ │ └── ProfileServiceServer.java
│ │ │ │ ├── tenant
│ │ │ │ │ └── core
│ │ │ │ │ │ └── repositories
│ │ │ │ │ │ └── TenantProfileRepository.java
│ │ │ │ └── user
│ │ │ │ │ └── core
│ │ │ │ │ ├── exceptions
│ │ │ │ │ └── UserProfileRegistryException.java
│ │ │ │ │ ├── repositories
│ │ │ │ │ └── UserProfileRepository.java
│ │ │ │ │ └── utils
│ │ │ │ │ ├── UserProfileCatalogDBInitConfig.java
│ │ │ │ │ └── UserProfileCatalogJDBCConfig.java
│ │ │ └── security
│ │ │ │ ├── AiravataSecurityManager.java
│ │ │ │ ├── GatewayGroupsInitializer.java
│ │ │ │ ├── IdentityContext.java
│ │ │ │ ├── KeyCloakSecurityManager.java
│ │ │ │ ├── SecurityManagerFactory.java
│ │ │ │ ├── UserInfo.java
│ │ │ │ ├── authzcache
│ │ │ │ ├── AuthzCache.java
│ │ │ │ ├── AuthzCacheEntry.java
│ │ │ │ ├── AuthzCacheIndex.java
│ │ │ │ ├── AuthzCacheManager.java
│ │ │ │ ├── AuthzCacheManagerFactory.java
│ │ │ │ ├── AuthzCachedStatus.java
│ │ │ │ └── DefaultAuthzCacheManager.java
│ │ │ │ └── interceptor
│ │ │ │ ├── SecurityCheck.java
│ │ │ │ ├── SecurityInterceptor.java
│ │ │ │ └── SecurityModule.java
│ │ │ └── sharing
│ │ │ └── registry
│ │ │ ├── client
│ │ │ └── SharingRegistryServiceClientFactory.java
│ │ │ ├── db
│ │ │ ├── entities
│ │ │ │ ├── DomainEntity.java
│ │ │ │ ├── EntityEntity.java
│ │ │ │ ├── EntityPK.java
│ │ │ │ ├── EntityTypeEntity.java
│ │ │ │ ├── EntityTypePK.java
│ │ │ │ ├── GroupAdminEntity.java
│ │ │ │ ├── GroupAdminPK.java
│ │ │ │ ├── GroupMembershipEntity.java
│ │ │ │ ├── GroupMembershipPK.java
│ │ │ │ ├── PermissionTypeEntity.java
│ │ │ │ ├── PermissionTypePK.java
│ │ │ │ ├── SharingEntity.java
│ │ │ │ ├── SharingPK.java
│ │ │ │ ├── UserEntity.java
│ │ │ │ ├── UserGroupEntity.java
│ │ │ │ ├── UserGroupPK.java
│ │ │ │ └── UserPK.java
│ │ │ ├── repositories
│ │ │ │ ├── AbstractRepository.java
│ │ │ │ ├── DomainRepository.java
│ │ │ │ ├── EntityRepository.java
│ │ │ │ ├── EntityTypeRepository.java
│ │ │ │ ├── GroupAdminRepository.java
│ │ │ │ ├── GroupMembershipRepository.java
│ │ │ │ ├── PermissionTypeRepository.java
│ │ │ │ ├── SharingRepository.java
│ │ │ │ ├── UserGroupRepository.java
│ │ │ │ └── UserRepository.java
│ │ │ └── utils
│ │ │ │ ├── Committer.java
│ │ │ │ ├── DBConstants.java
│ │ │ │ ├── JPAUtils.java
│ │ │ │ ├── ObjectMapperSingleton.java
│ │ │ │ ├── SharingRegistryDBInitConfig.java
│ │ │ │ └── SharingRegistryJDBCConfig.java
│ │ │ ├── messaging
│ │ │ ├── SharingServiceDBEventHandler.java
│ │ │ └── SharingServiceDBEventMessagingFactory.java
│ │ │ ├── migrator
│ │ │ └── airavata
│ │ │ │ ├── AiravataDataMigrator.java
│ │ │ │ └── ConnectionFactory.java
│ │ │ ├── server
│ │ │ ├── ServerMain.java
│ │ │ ├── SharingRegistryServer.java
│ │ │ └── SharingRegistryServerHandler.java
│ │ │ └── utils
│ │ │ ├── Constants.java
│ │ │ └── ThriftDataModelConversion.java
│ └── resources
│ │ ├── META-INF
│ │ └── persistence.xml
│ │ ├── airavata-server.properties
│ │ ├── database_scripts
│ │ ├── airavataworkflowcatalog-derby.sql
│ │ ├── appcatalog-mysql.sql
│ │ ├── credstore-mysql.sql
│ │ ├── expcatalog-mysql.sql
│ │ ├── replicacatalog-mysql.sql
│ │ ├── sharing-registry-mysql.sql
│ │ ├── user-profile-catalog-mysql.sql
│ │ └── workflowcatalog-mysql.sql
│ │ ├── distribution
│ │ ├── bin
│ │ │ ├── controller.sh
│ │ │ ├── email-monitor.sh
│ │ │ ├── orchestrator.sh
│ │ │ ├── parser-wm.sh
│ │ │ ├── participant.sh
│ │ │ ├── post-wm.sh
│ │ │ ├── pre-wm.sh
│ │ │ ├── realtime-monitor.sh
│ │ │ ├── setenv.sh
│ │ │ └── sharing-registry.sh
│ │ └── conf
│ │ │ └── .gitkeep
│ │ ├── dozer_mapping.xml
│ │ ├── email-config.yaml
│ │ ├── log4j2.xml
│ │ ├── migrations-util
│ │ ├── derby
│ │ │ └── airavata-server.properties
│ │ └── mysql
│ │ │ ├── airavata-server.properties
│ │ │ ├── docker-compose.yml
│ │ │ └── docker-entrypoint-initdb.d
│ │ │ └── create_databases.sql
│ │ └── templates
│ │ ├── CLOUD_Groovy.template
│ │ ├── FORK_Groovy.template
│ │ ├── HTCONDOR_Groovy.template
│ │ ├── LSF_Groovy.template
│ │ ├── PBS_Groovy.template
│ │ ├── SLURM_Groovy.template
│ │ └── UGE_Groovy.template
│ └── test
│ ├── java
│ └── org
│ │ └── apache
│ │ └── airavata
│ │ ├── accountprovisioning
│ │ ├── SSHAccountProvisionerFactoryTest.java
│ │ └── provisioner
│ │ │ ├── TestSSHAccountProvisioner.java
│ │ │ └── TestSSHAccountProvisionerProvider.java
│ │ ├── common
│ │ └── utils
│ │ │ ├── ApplicationSettingsTest.java
│ │ │ ├── DerbyTestUtil.java
│ │ │ ├── SecurityUtilTest.java
│ │ │ └── ThriftClientPoolTest.java
│ │ ├── credential
│ │ └── store
│ │ │ ├── cpi
│ │ │ └── SSHSummaryTest
│ │ │ │ └── SSHSummaryTest.java
│ │ │ ├── notifier
│ │ │ └── impl
│ │ │ │ └── EmailNotifierTest.java
│ │ │ ├── store
│ │ │ └── impl
│ │ │ │ └── db
│ │ │ │ ├── CommunityUserDAOTest.java
│ │ │ │ ├── CredentialsDAOTest.java
│ │ │ │ └── SSHCredentialTest.java
│ │ │ └── util
│ │ │ ├── ConfigurationReaderTest.java
│ │ │ └── TokenGeneratorTest.java
│ │ ├── model
│ │ └── util
│ │ │ └── GroupComputeResourcePreferenceUtilTest.java
│ │ ├── orchestrator
│ │ ├── client
│ │ │ └── OrchestratorClientFactoryTest.java
│ │ └── core
│ │ │ ├── BaseOrchestratorTest.java
│ │ │ ├── NewOrchestratorTest.java
│ │ │ ├── OrchestratorTestWithGRAM.java
│ │ │ └── OrchestratorTestWithMyProxyAuth.java
│ │ ├── registry
│ │ └── core
│ │ │ ├── repositories
│ │ │ ├── WorkspaceRepositoryTest.java
│ │ │ ├── appcatalog
│ │ │ │ ├── ApplicationDeploymentRepositoryTest.java
│ │ │ │ ├── ApplicationInterfaceRepositoryTest.java
│ │ │ │ ├── ComputeResourceRepositoryTest.java
│ │ │ │ ├── GatewayGroupsRepositoryTest.java
│ │ │ │ ├── GatewayProfileRepositoryTest.java
│ │ │ │ ├── GroupResourceProfileRepositoryTest.java
│ │ │ │ ├── JobSubmissionInterfaceRepositoryTest.java
│ │ │ │ ├── StorageResourceRepositoryTest.java
│ │ │ │ └── UserResourceProfileRepositoryTest.java
│ │ │ ├── common
│ │ │ │ ├── DerbyTestUtil.java
│ │ │ │ └── TestBase.java
│ │ │ ├── expcatalog
│ │ │ │ ├── ExperimentErrorRepositoryTest.java
│ │ │ │ ├── ExperimentInputRepositoryTest.java
│ │ │ │ ├── ExperimentOutputRepositoryTest.java
│ │ │ │ ├── ExperimentRepositoryTest.java
│ │ │ │ ├── ExperimentStatusRepositoryTest.java
│ │ │ │ ├── ExperimentSummaryRepositoryTest.java
│ │ │ │ ├── GatewayRepositoryTest.java
│ │ │ │ ├── JobRepositoryTest.java
│ │ │ │ ├── JobStatusRepositoryTest.java
│ │ │ │ ├── NotificationRepositoryTest.java
│ │ │ │ ├── ProcessErrorRepositoryTest.java
│ │ │ │ ├── ProcessInputRepositoryTest.java
│ │ │ │ ├── ProcessOutputRepositoryTest.java
│ │ │ │ ├── ProcessRepositoryTest.java
│ │ │ │ ├── ProcessStatusRepositoryTest.java
│ │ │ │ ├── ProjectRepositoryTest.java
│ │ │ │ ├── QueueStatusRepositoryTest.java
│ │ │ │ ├── TaskErrorRepositoryTest.java
│ │ │ │ ├── TaskRepositoryTest.java
│ │ │ │ ├── TaskStatusRepositoryTest.java
│ │ │ │ └── UserRepositoryTest.java
│ │ │ ├── replicacatalog
│ │ │ │ ├── DataProductRepositoryTest.java
│ │ │ │ └── DataReplicaLocationRepositoryTest.java
│ │ │ └── workflowcatalog
│ │ │ │ └── WorkflowRepositoryTest.java
│ │ │ └── utils
│ │ │ ├── CustomBeanFactoryTest.java
│ │ │ └── ObjectMapperSingletonTest.java
│ │ ├── security
│ │ ├── configurations
│ │ │ ├── AuthenticatorConfigurationReaderTest.java
│ │ │ ├── TestDBAuthenticator1.java
│ │ │ ├── TestDBAuthenticator2.java
│ │ │ ├── TestDBAuthenticator3.java
│ │ │ └── TestUserStore.java
│ │ └── userstore
│ │ │ ├── JDBCUserStoreTest.java
│ │ │ ├── LDAPUserStoreTest.java
│ │ │ └── SessionDBUserStoreTest.java
│ │ ├── service
│ │ ├── profile
│ │ │ └── iam
│ │ │ │ └── admin
│ │ │ │ └── services
│ │ │ │ └── core
│ │ │ │ └── tests
│ │ │ │ └── SetupNewGateway.java
│ │ └── security
│ │ │ ├── GatewayGroupsInitializerTest.java
│ │ │ └── KeyCloakSecurityManagerTest.java
│ │ └── sharing
│ │ └── registry
│ │ ├── CipresTest.java
│ │ ├── SharingRegistryServerHandlerTest.java
│ │ └── SharingRegistryServiceTest.java
│ └── resources
│ ├── PBSTemplate.xslt
│ ├── airavata-server.properties
│ ├── authenticators.xml
│ ├── disabled-authenticator.xml
│ ├── gsissh.properties
│ ├── jdbc-authenticator.xml
│ ├── ldap-authenticator.xml
│ ├── log4j2.xml
│ ├── monitor.properties
│ ├── orchestrator.properties
│ ├── session-authenticator.xml
│ └── zoo.cfg
├── apache-license-header-java.txt
├── apache-license-header-xml.txt
├── apache-license-header.txt
├── assets
├── airavata-components.png
├── airavata-dataflow.png
└── airavata-state-transitions.png
├── dev-tools
├── airavata-php-sdk
│ ├── LICENSE
│ ├── NOTICE
│ ├── README
│ ├── conf
│ │ ├── airavata-client-properties.ini
│ │ └── app-catalog-identifiers.ini
│ └── lib
│ │ ├── Airavata
│ │ ├── API
│ │ │ ├── Airavata.php
│ │ │ ├── Error
│ │ │ │ └── Types.php
│ │ │ ├── Sharing
│ │ │ │ ├── SharingRegistryService.php
│ │ │ │ └── Types.php
│ │ │ └── Types.php
│ │ ├── Base
│ │ │ └── API
│ │ │ │ ├── BaseAPI.php
│ │ │ │ └── Types.php
│ │ ├── Model
│ │ │ ├── AppCatalog
│ │ │ │ ├── AccountProvisioning
│ │ │ │ │ └── Types.php
│ │ │ │ ├── AppDeployment
│ │ │ │ │ └── Types.php
│ │ │ │ ├── AppInterface
│ │ │ │ │ └── Types.php
│ │ │ │ ├── ComputeResource
│ │ │ │ │ └── Types.php
│ │ │ │ ├── GatewayGroups
│ │ │ │ │ └── Types.php
│ │ │ │ ├── GatewayProfile
│ │ │ │ │ └── Types.php
│ │ │ │ ├── GroupResourceProfile
│ │ │ │ │ └── Types.php
│ │ │ │ ├── Parallelism
│ │ │ │ │ └── Types.php
│ │ │ │ ├── Parser
│ │ │ │ │ └── Types.php
│ │ │ │ ├── StorageResource
│ │ │ │ │ └── Types.php
│ │ │ │ └── UserResourceProfile
│ │ │ │ │ └── Types.php
│ │ │ ├── Application
│ │ │ │ └── Io
│ │ │ │ │ └── Types.php
│ │ │ ├── Commons
│ │ │ │ └── Types.php
│ │ │ ├── Credential
│ │ │ │ └── Store
│ │ │ │ │ └── Types.php
│ │ │ ├── Data
│ │ │ │ ├── Movement
│ │ │ │ │ └── Types.php
│ │ │ │ └── Replica
│ │ │ │ │ └── Types.php
│ │ │ ├── Dbevent
│ │ │ │ └── Types.php
│ │ │ ├── Experiment
│ │ │ │ └── Types.php
│ │ │ ├── Group
│ │ │ │ └── Types.php
│ │ │ ├── Job
│ │ │ │ └── Types.php
│ │ │ ├── Messaging
│ │ │ │ └── Event
│ │ │ │ │ └── Types.php
│ │ │ ├── Process
│ │ │ │ └── Types.php
│ │ │ ├── Scheduling
│ │ │ │ └── Types.php
│ │ │ ├── Security
│ │ │ │ └── Types.php
│ │ │ ├── Sharing
│ │ │ │ └── Types.php
│ │ │ ├── Status
│ │ │ │ └── Types.php
│ │ │ ├── Task
│ │ │ │ └── Types.php
│ │ │ ├── Tenant
│ │ │ │ └── Types.php
│ │ │ ├── Types.php
│ │ │ ├── User
│ │ │ │ └── Types.php
│ │ │ ├── Workflow
│ │ │ │ └── Types.php
│ │ │ └── Workspace
│ │ │ │ └── Types.php
│ │ └── Service
│ │ │ ├── Iam
│ │ │ └── Admin
│ │ │ │ └── Services
│ │ │ │ └── CPI
│ │ │ │ ├── Error
│ │ │ │ └── Types.php
│ │ │ │ ├── IamAdminServices.php
│ │ │ │ └── Types.php
│ │ │ └── Profile
│ │ │ ├── Groupmanager
│ │ │ └── CPI
│ │ │ │ ├── Error
│ │ │ │ └── Types.php
│ │ │ │ ├── GroupManagerService.php
│ │ │ │ └── Types.php
│ │ │ ├── Tenant
│ │ │ └── CPI
│ │ │ │ ├── Error
│ │ │ │ └── Types.php
│ │ │ │ ├── TenantProfileService.php
│ │ │ │ └── Types.php
│ │ │ ├── Types.php
│ │ │ └── User
│ │ │ └── CPI
│ │ │ ├── Error
│ │ │ └── Types.php
│ │ │ ├── Types.php
│ │ │ └── UserProfileService.php
│ │ ├── AiravataClientFactory.php
│ │ ├── Thrift
│ │ ├── Base
│ │ │ └── TBase.php
│ │ ├── ClassLoader
│ │ │ └── ThriftClassLoader.php
│ │ ├── Exception
│ │ │ ├── TApplicationException.php
│ │ │ ├── TException.php
│ │ │ ├── TProtocolException.php
│ │ │ └── TTransportException.php
│ │ ├── Factory
│ │ │ ├── TBinaryProtocolFactory.php
│ │ │ ├── TCompactProtocolFactory.php
│ │ │ ├── TJSONProtocolFactory.php
│ │ │ ├── TProtocolFactory.php
│ │ │ ├── TStringFuncFactory.php
│ │ │ └── TTransportFactory.php
│ │ ├── Protocol
│ │ │ ├── JSON
│ │ │ │ ├── BaseContext.php
│ │ │ │ ├── ListContext.php
│ │ │ │ ├── LookaheadReader.php
│ │ │ │ └── PairContext.php
│ │ │ ├── TBinaryProtocol.php
│ │ │ ├── TBinaryProtocolAccelerated.php
│ │ │ ├── TCompactProtocol.php
│ │ │ ├── TJSONProtocol.php
│ │ │ └── TProtocol.php
│ │ ├── Serializer
│ │ │ └── TBinarySerializer.php
│ │ ├── Server
│ │ │ ├── TForkingServer.php
│ │ │ ├── TServer.php
│ │ │ ├── TServerSocket.php
│ │ │ ├── TServerTransport.php
│ │ │ └── TSimpleServer.php
│ │ ├── StringFunc
│ │ │ ├── Core.php
│ │ │ ├── Mbstring.php
│ │ │ └── TStringFunc.php
│ │ ├── Thrift.php
│ │ ├── Transport
│ │ │ ├── TBufferedTransport.php
│ │ │ ├── TFramedTransport.php
│ │ │ ├── THttpClient.php
│ │ │ ├── TMemoryBuffer.php
│ │ │ ├── TNullTransport.php
│ │ │ ├── TPhpStream.php
│ │ │ ├── TSocket.php
│ │ │ ├── TSocketPool.php
│ │ │ └── TTransport.php
│ │ ├── Type
│ │ │ ├── TMessageType.php
│ │ │ └── TType.php
│ │ └── autoload.php
│ │ └── Types.php
├── airavata-python-sdk
│ ├── .gitignore
│ ├── LICENSE
│ ├── Makefile
│ ├── README.md
│ ├── __init__.py
│ ├── airavata
│ │ ├── __init__.py
│ │ ├── api
│ │ │ ├── Airavata-remote
│ │ │ ├── Airavata.py
│ │ │ ├── __init__.py
│ │ │ ├── constants.py
│ │ │ ├── credential
│ │ │ │ ├── __init__.py
│ │ │ │ └── store
│ │ │ │ │ ├── CredentialStoreService-remote
│ │ │ │ │ ├── CredentialStoreService.py
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── constants.py
│ │ │ │ │ ├── error
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── constants.py
│ │ │ │ │ └── ttypes.py
│ │ │ │ │ └── ttypes.py
│ │ │ ├── error
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ │ ├── sharing
│ │ │ │ ├── SharingRegistryService-remote
│ │ │ │ ├── SharingRegistryService.py
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ │ ├── ttypes.py
│ │ │ └── workflow
│ │ │ │ ├── Workflow-remote
│ │ │ │ ├── Workflow.py
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ ├── base
│ │ │ ├── __init__.py
│ │ │ └── api
│ │ │ │ ├── BaseAPI-remote
│ │ │ │ ├── BaseAPI.py
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ ├── model
│ │ │ ├── __init__.py
│ │ │ ├── appcatalog
│ │ │ │ ├── __init__.py
│ │ │ │ ├── accountprovisioning
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── constants.py
│ │ │ │ │ └── ttypes.py
│ │ │ │ ├── appdeployment
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── constants.py
│ │ │ │ │ └── ttypes.py
│ │ │ │ ├── appinterface
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── constants.py
│ │ │ │ │ └── ttypes.py
│ │ │ │ ├── computeresource
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── constants.py
│ │ │ │ │ └── ttypes.py
│ │ │ │ ├── gatewaygroups
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── constants.py
│ │ │ │ │ └── ttypes.py
│ │ │ │ ├── gatewayprofile
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── constants.py
│ │ │ │ │ └── ttypes.py
│ │ │ │ ├── groupresourceprofile
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── constants.py
│ │ │ │ │ └── ttypes.py
│ │ │ │ ├── parallelism
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── constants.py
│ │ │ │ │ └── ttypes.py
│ │ │ │ ├── parser
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── constants.py
│ │ │ │ │ └── ttypes.py
│ │ │ │ ├── storageresource
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── constants.py
│ │ │ │ │ └── ttypes.py
│ │ │ │ └── userresourceprofile
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── constants.py
│ │ │ │ │ └── ttypes.py
│ │ │ ├── application
│ │ │ │ ├── __init__.py
│ │ │ │ └── io
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── constants.py
│ │ │ │ │ └── ttypes.py
│ │ │ ├── commons
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ │ ├── constants.py
│ │ │ ├── credential
│ │ │ │ ├── __init__.py
│ │ │ │ └── store
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── constants.py
│ │ │ │ │ └── ttypes.py
│ │ │ ├── data
│ │ │ │ ├── __init__.py
│ │ │ │ ├── movement
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── constants.py
│ │ │ │ │ └── ttypes.py
│ │ │ │ └── replica
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── constants.py
│ │ │ │ │ └── ttypes.py
│ │ │ ├── dbevent
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ │ ├── experiment
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ │ ├── group
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ │ ├── job
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ │ ├── messaging
│ │ │ │ ├── __init__.py
│ │ │ │ └── event
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ ├── constants.py
│ │ │ │ │ └── ttypes.py
│ │ │ ├── process
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ │ ├── scheduling
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ │ ├── security
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ │ ├── sharing
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ │ ├── status
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ │ ├── task
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ │ ├── tenant
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ │ ├── ttypes.py
│ │ │ ├── user
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ │ ├── workflow
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ │ └── workspace
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ └── service
│ │ │ ├── __init__.py
│ │ │ └── profile
│ │ │ ├── __init__.py
│ │ │ ├── groupmanager
│ │ │ ├── __init__.py
│ │ │ └── cpi
│ │ │ │ ├── GroupManagerService-remote
│ │ │ │ ├── GroupManagerService.py
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ ├── error
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ │ │ └── ttypes.py
│ │ │ ├── iam
│ │ │ ├── __init__.py
│ │ │ └── admin
│ │ │ │ ├── __init__.py
│ │ │ │ └── services
│ │ │ │ ├── __init__.py
│ │ │ │ └── cpi
│ │ │ │ ├── IamAdminServices-remote
│ │ │ │ ├── IamAdminServices.py
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ ├── error
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ │ │ └── ttypes.py
│ │ │ ├── tenant
│ │ │ ├── __init__.py
│ │ │ └── cpi
│ │ │ │ ├── TenantProfileService-remote
│ │ │ │ ├── TenantProfileService.py
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ ├── error
│ │ │ │ ├── __init__.py
│ │ │ │ ├── constants.py
│ │ │ │ └── ttypes.py
│ │ │ │ └── ttypes.py
│ │ │ └── user
│ │ │ ├── __init__.py
│ │ │ └── cpi
│ │ │ ├── UserProfileService-remote
│ │ │ ├── UserProfileService.py
│ │ │ ├── __init__.py
│ │ │ ├── constants.py
│ │ │ ├── error
│ │ │ ├── __init__.py
│ │ │ ├── constants.py
│ │ │ └── ttypes.py
│ │ │ └── ttypes.py
│ ├── airavata_auth
│ │ └── device_auth.py
│ ├── airavata_experiments
│ │ ├── __init__.py
│ │ ├── airavata.py
│ │ ├── base.py
│ │ ├── md
│ │ │ ├── __init__.py
│ │ │ └── applications.py
│ │ ├── neuro
│ │ │ ├── __init__.py
│ │ │ └── applications.py
│ │ ├── plan.py
│ │ ├── runtime.py
│ │ ├── scripter.py
│ │ ├── sftp.py
│ │ └── task.py
│ ├── airavata_jupyter_magic
│ │ └── __init__.py
│ ├── airavata_sdk
│ │ ├── __init__.py
│ │ ├── clients
│ │ │ ├── __init__.py
│ │ │ ├── api_server_client.py
│ │ │ ├── credential_store_client.py
│ │ │ ├── file_handling_client.py
│ │ │ ├── group_manager_client.py
│ │ │ ├── iam_admin_client.py
│ │ │ ├── keycloak_token_fetcher.py
│ │ │ ├── sftp_file_handling_client.py
│ │ │ ├── sharing_registry_client.py
│ │ │ ├── tenant_profile_client.py
│ │ │ ├── user_profile_client.py
│ │ │ └── utils
│ │ │ │ ├── __init__.py
│ │ │ │ ├── api_server_client_util.py
│ │ │ │ ├── data_model_creation_util.py
│ │ │ │ └── experiment_handler_util.py
│ │ ├── samples
│ │ │ ├── __init__.py
│ │ │ ├── api_server_client_samples.py
│ │ │ ├── create_launch_echo_experiment.py
│ │ │ ├── create_launch_gaussian_experiment.py
│ │ │ ├── file_utils.py
│ │ │ ├── group_manager_client_samples.py
│ │ │ ├── iam_admin_client_samples.py
│ │ │ ├── metadata_fetcher.py
│ │ │ ├── resources
│ │ │ │ ├── __init__.py
│ │ │ │ └── incommon_rsa_server_ca.pem
│ │ │ ├── sharing_registry_client_samples.py
│ │ │ ├── tenant_profile_client_samples.py
│ │ │ └── user_profile_client_samples.py
│ │ └── transport
│ │ │ ├── __init__.py
│ │ │ └── utils.py
│ ├── docs
│ │ ├── index.md
│ │ └── reference
│ │ │ ├── airavata_experiments.md
│ │ │ ├── airavata_jupyter_magic.md
│ │ │ └── airavata_sdk.md
│ ├── mkdocs.yml
│ └── pyproject.toml
├── amqpwstunnel
│ ├── python
│ │ ├── amqpwstunnel.py
│ │ └── config.json
│ └── wstest.html
├── ansible
│ ├── .gitignore
│ ├── NOTE
│ ├── README.md
│ ├── airavata-iam-setup.yml
│ ├── airavata.yml
│ ├── ansible.cfg
│ ├── apiserver.yml
│ ├── database.yml
│ ├── dev_airavata_deploy.yml
│ ├── dev_pga_deploy.yml
│ ├── django.yml
│ ├── gfac.yml
│ ├── helix.yml
│ ├── inventories
│ │ ├── geogateway-dev
│ │ │ ├── group_vars
│ │ │ │ └── pga
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ └── hosts
│ │ ├── scigap
│ │ │ ├── PICKSC-Production
│ │ │ │ ├── group_vars
│ │ │ │ │ └── pga
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ └── hosts
│ │ │ ├── SGCI-SSC
│ │ │ │ ├── group_vars
│ │ │ │ │ └── pga
│ │ │ │ │ │ └── vars.yml
│ │ │ │ └── hosts
│ │ │ ├── develop
│ │ │ │ ├── files
│ │ │ │ │ ├── airavata.jks
│ │ │ │ │ ├── airavata_sym.jks
│ │ │ │ │ ├── client_truststore.jks
│ │ │ │ │ └── keycloak.jks
│ │ │ │ ├── group_vars
│ │ │ │ │ ├── all
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ └── django
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ ├── host_vars
│ │ │ │ │ ├── amp
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── csbglsu
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── custos-testdrive
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── cyberwater
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── delta
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── dev-gkeyll
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── dev-ultrascan
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── geo
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── interactwel
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── mines
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── nexttdb
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── pfec-hydro
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── rnamake
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── saver-x
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── scigap
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── seagrid
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── simccs
│ │ │ │ │ │ ├── files
│ │ │ │ │ │ │ └── django-ssl-vhost.conf.j2
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── simvascular
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ └── usd
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ └── hosts
│ │ │ ├── dreg-production
│ │ │ │ ├── files
│ │ │ │ │ └── pga-ssl-vhost.conf.j2
│ │ │ │ ├── group_vars
│ │ │ │ │ ├── all
│ │ │ │ │ │ └── vars.yml
│ │ │ │ │ └── pga
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ └── hosts
│ │ │ ├── nexttdb-production
│ │ │ │ ├── group_vars
│ │ │ │ │ └── pga
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ └── hosts
│ │ │ ├── pfec-hydro-production
│ │ │ │ ├── group_vars
│ │ │ │ │ ├── all
│ │ │ │ │ │ └── vars.yml
│ │ │ │ │ └── pga
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ └── hosts
│ │ │ ├── production
│ │ │ │ ├── files
│ │ │ │ │ ├── airavata.jks
│ │ │ │ │ ├── airavata_sym.jks
│ │ │ │ │ ├── client_truststore.jks
│ │ │ │ │ ├── keycloak.jks
│ │ │ │ │ └── letsencrypt_apiprod.jks
│ │ │ │ ├── group_vars
│ │ │ │ │ ├── all
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ └── django
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ ├── host_vars
│ │ │ │ │ ├── ai-confluence
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── ampgateway
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── bayesprism
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── bcbportal
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── covid-geoact
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── csbglsu
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── deeppdb
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── delta
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── dev-smiles
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── distantreader
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── dreg
│ │ │ │ │ │ ├── files
│ │ │ │ │ │ │ └── django-ssl-vhost.conf.j2
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── dt4h
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── ehtgateway
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── enveomics
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── epwgateway
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── futurewater
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── geo
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── georgiastate
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── global-flood
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── hicops-deepsnap
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── hubzero
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── immune
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── interactwel
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── iugateway
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── kentucky
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── louisiana-state
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── lrose
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── microbial-genomes
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── mines
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── molecular-dynamics
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── nanoconfinement
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── nanoshape
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── nasa-veda
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── ncsaindustry
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── neuroscience-cybershuttle
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── newmexicostate
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── nexttdb
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── oscer
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── pace-gatech
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── pathogenomics
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── phasta
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── physicell
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── r-hpc
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── regsnps
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── saverx
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── sdstate
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── seagrid
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── searchsra
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── simccs
│ │ │ │ │ │ ├── files
│ │ │ │ │ │ │ └── django-ssl-vhost.conf.j2
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── simvascular
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── simvascular_old
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── smaltr
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── smiles
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── snowvision
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── southdakota
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── testdrive-cs
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── testdrive
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── toppic
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── tsunami
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── tutorial
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── uab
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── ucmerced
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── ultrascan
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── unggateway
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── v4i
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── vlab-plasmascience
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ └── wvsu
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ ├── hosts
│ │ │ │ └── pga_config
│ │ │ │ │ ├── Kentucky
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── NCSAIndustry
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── ampgateway
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── csbglsu
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── ddstudio
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── distantreader
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── epwgateway
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── gatech
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── georgiastate
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── hubzero
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── interactwel
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── iugateway
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── iugeosurvey
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── lsu
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── mines
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── nanoconfinement
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── nanoshape
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── newmexicostate
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── nexttdb
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── oscer
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── pfec-hydro
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── phasta
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── r-hpc
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── rutgersgemr
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── saverx
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── scigap
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── sdstate
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── seagrid
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── searchingSRA
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── simvascular
│ │ │ │ │ ├── files
│ │ │ │ │ │ └── pga_config.php.j2
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── snowvision
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── southdakota
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── southernillinois
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── testdrive
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── uab
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── ultrascan
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ └── wvsu
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ ├── staging
│ │ │ │ ├── files
│ │ │ │ │ ├── airavata.jks
│ │ │ │ │ ├── airavata_sym.jks
│ │ │ │ │ ├── client_truststore.jks
│ │ │ │ │ └── keycloak.jks
│ │ │ │ ├── group_vars
│ │ │ │ │ ├── all
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ └── django
│ │ │ │ │ │ └── vars.yml
│ │ │ │ ├── host_vars
│ │ │ │ │ ├── dreg
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── gateways19
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── pearc19
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── seagrid
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── searchsra
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── simccs
│ │ │ │ │ │ ├── files
│ │ │ │ │ │ │ └── django-ssl-vhost.conf.j2
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── testdrive
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ │ └── ultrascan
│ │ │ │ │ │ ├── vars.yml
│ │ │ │ │ │ └── vault.yml
│ │ │ │ ├── hosts
│ │ │ │ └── pga_config
│ │ │ │ │ ├── scigap
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── seagrid
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ ├── testdrive
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ │ └── ultrascan
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ └── testing
│ │ │ │ ├── files
│ │ │ │ ├── airavata.jks
│ │ │ │ ├── airavata_sym.jks
│ │ │ │ ├── client_truststore.jks
│ │ │ │ └── keycloak.jks
│ │ │ │ ├── group_vars
│ │ │ │ └── all
│ │ │ │ │ ├── vars.yml
│ │ │ │ │ └── vault.yml
│ │ │ │ ├── hosts
│ │ │ │ └── pga_config
│ │ │ │ ├── scigap
│ │ │ │ ├── vars.yml
│ │ │ │ └── vault.yml
│ │ │ │ ├── seagrid
│ │ │ │ ├── vars.yml
│ │ │ │ └── vault.yml
│ │ │ │ └── testdrive
│ │ │ │ ├── vars.yml
│ │ │ │ └── vault.yml
│ │ ├── standalone
│ │ │ ├── group_vars
│ │ │ │ ├── all
│ │ │ │ │ └── vars.yml
│ │ │ │ ├── helix
│ │ │ │ │ └── vars.yml
│ │ │ │ └── pga
│ │ │ │ │ └── vars.yml
│ │ │ ├── hosts
│ │ │ └── templates
│ │ │ │ └── pga-vhost.conf.j2
│ │ └── template
│ │ │ ├── group_vars
│ │ │ ├── all
│ │ │ │ └── vars.yml
│ │ │ └── pga
│ │ │ │ └── vars.yml
│ │ │ └── hosts
│ ├── kafka-rest-proxy.yml
│ ├── keycloak.yml
│ ├── local_airavata_deploy.yml
│ ├── pga-scigap-dev.yml
│ ├── pga-scigap-prod.yml
│ ├── pga-scigap-staging.yml
│ ├── pga-scigap-stagingnew.yml
│ ├── pga-scigap-testing.yml
│ ├── pga-single-vhost.yml
│ ├── pga.yml
│ ├── platform-monitor.yml
│ ├── requirements.txt
│ ├── roles
│ │ ├── airavata_build
│ │ │ └── tasks
│ │ │ │ └── main.yml
│ │ ├── airavata_deploy
│ │ │ ├── defaults
│ │ │ │ └── main.yml
│ │ │ ├── handlers
│ │ │ │ └── main.yml
│ │ │ └── tasks
│ │ │ │ └── main.yml
│ │ ├── api-orch
│ │ │ ├── defaults
│ │ │ │ └── main.yml
│ │ │ ├── files
│ │ │ │ └── prepareLetsEncryptCertificates.sh
│ │ │ ├── handlers
│ │ │ │ └── main.yml
│ │ │ ├── tasks
│ │ │ │ ├── haproxy
│ │ │ │ │ ├── install_deps_Centos_7.yml
│ │ │ │ │ └── install_deps_Rocky_8.yml
│ │ │ │ └── main.yml
│ │ │ └── templates
│ │ │ │ ├── airavata-server.properties.j2
│ │ │ │ ├── apiorch.service.j2
│ │ │ │ ├── haproxy.cfg.j2
│ │ │ │ └── log4j2.xml.j2
│ │ ├── common
│ │ │ ├── defaults
│ │ │ │ └── main.yml
│ │ │ ├── files
│ │ │ │ ├── airavata.jks
│ │ │ │ └── airavata_sym.jks
│ │ │ ├── tasks
│ │ │ │ └── main.yml
│ │ │ ├── templates
│ │ │ │ └── maven.sh
│ │ │ └── vars
│ │ │ │ └── main.yml
│ │ ├── database
│ │ │ ├── defaults
│ │ │ │ └── main.yml
│ │ │ ├── files
│ │ │ │ ├── MariaDB_yum_CentOS_7.repo
│ │ │ │ └── mysql-tmp.te
│ │ │ ├── handlers
│ │ │ │ └── main.yml
│ │ │ ├── tasks
│ │ │ │ ├── keycloak.yml
│ │ │ │ ├── main.yml
│ │ │ │ └── secure_install.yml
│ │ │ ├── templates
│ │ │ │ └── my.cnf.j2
│ │ │ └── vars
│ │ │ │ └── main.yml
│ │ ├── django
│ │ │ ├── defaults
│ │ │ │ └── main.yml
│ │ │ ├── files
│ │ │ │ └── remove_old_js_css_files.py
│ │ │ ├── handlers
│ │ │ │ └── main.yml
│ │ │ ├── tasks
│ │ │ │ ├── database.yml
│ │ │ │ ├── install_deps_Centos_7.yml
│ │ │ │ ├── install_deps_Rocky_8.yml
│ │ │ │ └── main.yml
│ │ │ └── templates
│ │ │ │ ├── archive_user_data.cron.j2
│ │ │ │ ├── django-ssl-vhost.conf.j2
│ │ │ │ ├── django-vhost.conf.j2
│ │ │ │ └── settings_local.py.j2
│ │ ├── django_setup
│ │ │ ├── defaults
│ │ │ │ └── main.yml
│ │ │ ├── files
│ │ │ │ ├── 00-wsgi.conf
│ │ │ │ └── django-httpd.te
│ │ │ └── tasks
│ │ │ │ ├── install_deps_CentOS_7.yml
│ │ │ │ ├── install_deps_Rocky_8.yml
│ │ │ │ ├── install_deps_Ubuntu_18.yml
│ │ │ │ └── main.yml
│ │ ├── env_setup
│ │ │ └── tasks
│ │ │ │ ├── files
│ │ │ │ ├── dnf-cron.conf
│ │ │ │ └── yum-cron.conf
│ │ │ │ ├── main.yml
│ │ │ │ └── redhat.yml
│ │ ├── helix_setup
│ │ │ ├── defaults
│ │ │ │ └── main.yml
│ │ │ ├── handlers
│ │ │ │ └── main.yml
│ │ │ ├── tasks
│ │ │ │ └── main.yml
│ │ │ └── templates
│ │ │ │ ├── controller
│ │ │ │ ├── airavata-server.properties.j2
│ │ │ │ ├── helixcontroller.service.j2
│ │ │ │ └── log4j2.xml.j2
│ │ │ │ ├── parser-wm
│ │ │ │ ├── airavata-server.properties.j2
│ │ │ │ └── log4j2.xml.j2
│ │ │ │ ├── participant
│ │ │ │ ├── airavata-server.properties.j2
│ │ │ │ ├── helixparticipant.service.j2
│ │ │ │ └── log4j2.xml.j2
│ │ │ │ ├── post-wm
│ │ │ │ ├── airavata-server.properties.j2
│ │ │ │ ├── log4j2.xml.j2
│ │ │ │ └── postwm.service.j2
│ │ │ │ └── pre-wm
│ │ │ │ ├── airavata-server.properties.j2
│ │ │ │ ├── log4j2.xml.j2
│ │ │ │ └── prewm.service.j2
│ │ ├── httpd
│ │ │ ├── defaults
│ │ │ │ └── main.yml
│ │ │ ├── handlers
│ │ │ │ └── main.yml
│ │ │ ├── tasks
│ │ │ │ ├── install_deps_CentOS_7.yml
│ │ │ │ ├── install_deps_Rocky_8.yml
│ │ │ │ ├── install_deps_Ubuntu_16.yml
│ │ │ │ ├── install_deps_Ubuntu_18.yml
│ │ │ │ └── main.yml
│ │ │ └── templates
│ │ │ │ ├── default.conf.j2
│ │ │ │ └── ssl.conf.j2
│ │ ├── java
│ │ │ ├── tasks
│ │ │ │ └── main.yml
│ │ │ └── vars
│ │ │ │ └── main.yml
│ │ ├── job_monitor
│ │ │ ├── defaults
│ │ │ │ └── main.yml
│ │ │ ├── tasks
│ │ │ │ └── main.yml
│ │ │ └── templates
│ │ │ │ ├── email-monitor
│ │ │ │ ├── airavata-server.properties.j2
│ │ │ │ ├── email-config.yaml.j2
│ │ │ │ └── log4j2.xml.j2
│ │ │ │ └── realtime-monitor
│ │ │ │ ├── airavata-server.properties.j2
│ │ │ │ └── log4j2.xml.j2
│ │ ├── kafka
│ │ │ ├── defaults
│ │ │ │ └── main.yml
│ │ │ ├── handlers
│ │ │ │ └── main.yml
│ │ │ ├── tasks
│ │ │ │ └── main.yml
│ │ │ └── templates
│ │ │ │ ├── kafka-rest-proxy.service.j2
│ │ │ │ ├── kafka-rest.properties.j2
│ │ │ │ ├── kafka.service.j2
│ │ │ │ └── server.properties.j2
│ │ ├── keycloak
│ │ │ ├── README.md
│ │ │ ├── defaults
│ │ │ │ └── main.yml
│ │ │ ├── handlers
│ │ │ │ └── main.yml
│ │ │ ├── tasks
│ │ │ │ └── main.yml
│ │ │ └── templates
│ │ │ │ ├── basic-vhost.conf.j2
│ │ │ │ ├── keycloak-hacluster-init.j2
│ │ │ │ ├── keycloak-standalone-init.j2
│ │ │ │ ├── keycloak.service.j2
│ │ │ │ ├── module.j2
│ │ │ │ ├── standalone-ha.xml.j2
│ │ │ │ ├── standalone.xml.j2
│ │ │ │ └── vhost.conf.j2
│ │ ├── letsencrypt
│ │ │ └── tasks
│ │ │ │ ├── install_deps_CentOS_7.yml
│ │ │ │ ├── install_deps_Rocky_8.yml
│ │ │ │ └── main.yml
│ │ ├── pga
│ │ │ ├── defaults
│ │ │ │ └── main.yml
│ │ │ ├── handlers
│ │ │ │ └── main.yml
│ │ │ ├── tasks
│ │ │ │ ├── install_deps_CentOS_7.yml
│ │ │ │ ├── install_deps_Ubuntu_14.yml
│ │ │ │ ├── install_deps_Ubuntu_16.yml
│ │ │ │ ├── install_deps_Ubuntu_18.yml
│ │ │ │ └── main.yml
│ │ │ └── templates
│ │ │ │ ├── default.conf.j2
│ │ │ │ ├── pga-ssl-vhost.conf.j2
│ │ │ │ ├── pga-vhost.conf.j2
│ │ │ │ ├── pga_config.php.j2
│ │ │ │ └── ssl.conf.j2
│ │ ├── pga_deploy
│ │ │ ├── handlers
│ │ │ │ └── main.yml
│ │ │ └── tasks
│ │ │ │ └── main.yml
│ │ ├── rabbitmq
│ │ │ ├── handlers
│ │ │ │ └── main.yml
│ │ │ ├── tasks
│ │ │ │ └── main.yml
│ │ │ └── vars
│ │ │ │ └── main.yml
│ │ ├── registry
│ │ │ ├── tasks
│ │ │ │ └── main.yml
│ │ │ └── templates
│ │ │ │ └── airavata-server.properties.j2
│ │ ├── tusd
│ │ │ ├── defaults
│ │ │ │ └── main.yml
│ │ │ ├── files
│ │ │ │ └── my-tusd.te
│ │ │ ├── handlers
│ │ │ │ └── main.yml
│ │ │ ├── tasks
│ │ │ │ └── main.yml
│ │ │ └── templates
│ │ │ │ ├── tus-temp-dir-cleanup.cron.j2
│ │ │ │ ├── tus-vhost.conf.j2
│ │ │ │ └── tus.service.j2
│ │ ├── zabbix
│ │ │ ├── defaults
│ │ │ │ └── main.yml
│ │ │ ├── files
│ │ │ │ ├── check-domains.sh
│ │ │ │ └── check-needs-restarting.cron
│ │ │ ├── tasks
│ │ │ │ ├── install_deps_CentOS_7.yml
│ │ │ │ ├── install_deps_Rocky_8.yml
│ │ │ │ └── main.yml
│ │ │ └── templates
│ │ │ │ └── zabbix_agentd.conf.j2
│ │ └── zookeeper
│ │ │ ├── handlers
│ │ │ └── main.yml
│ │ │ ├── tasks
│ │ │ └── main.yml
│ │ │ ├── templates
│ │ │ ├── java.env.j2
│ │ │ ├── zoo.cfg.j2
│ │ │ └── zookeeper.service.j2
│ │ │ └── vars
│ │ │ └── main.yml
│ ├── site.yml
│ ├── zabbix.yml
│ └── zookeeper.yml
├── deployment-scripts
│ ├── airavata-server.properties
│ ├── deploy_portal.sh
│ ├── distribution_backup.sh
│ ├── distribution_update.sh
│ ├── docker-startup.sh
│ ├── services_down.sh
│ └── services_up.sh
├── job-status-rest-server
│ ├── README.MD
│ ├── api_test.py
│ └── app.py
├── load-client
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ ├── assembly
│ │ └── load-client-bin-assembly.xml
│ │ ├── java
│ │ └── org
│ │ │ └── apache
│ │ │ └── airavata
│ │ │ └── tools
│ │ │ └── load
│ │ │ ├── Authenticator.java
│ │ │ ├── Configuration.java
│ │ │ ├── Configurations.java
│ │ │ ├── LoadClient.java
│ │ │ ├── StatusMonitor.java
│ │ │ ├── StorageResourceManager.java
│ │ │ └── UnitLoad.java
│ │ └── resources
│ │ ├── bin
│ │ ├── load-client.sh
│ │ └── setenv.sh
│ │ └── conf
│ │ └── load-config.yml
└── simstream
│ ├── README.md
│ ├── example
│ ├── README.md
│ ├── logfile_checker
│ │ ├── README.md
│ │ ├── generate_logs.sh
│ │ ├── log_consumer.py
│ │ ├── log_streamer.py
│ │ ├── remote_log.slurm
│ │ └── test.txt
│ ├── mem_streamer
│ │ ├── README.md
│ │ ├── memory_consumption.py
│ │ └── memory_streamer.py
│ ├── openmm_example
│ │ ├── README.md
│ │ ├── application
│ │ │ ├── alanine_dipeptide.py
│ │ │ ├── input.pdb
│ │ │ └── trajectory.dcd
│ │ ├── openmm_consumer.py
│ │ ├── openmm_log_consumer.py
│ │ ├── openmm_rmsd_consumer.py
│ │ ├── openmm_stream.slurm
│ │ ├── openmm_streamer.py
│ │ └── test.txt
│ └── settings.json
│ ├── setup.py
│ └── simstream
│ ├── __init__.py
│ ├── datacollector.py
│ ├── datareporter.py
│ ├── eventhandler.py
│ ├── eventmonitor.py
│ ├── pikaasyncconsumer.py
│ ├── pikaproducer.py
│ └── simstream.py
├── docker-compose.yml
├── examples
├── airavata-api-java-client-samples
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ └── java
│ │ └── org
│ │ └── apache
│ │ └── airavata
│ │ └── client
│ │ ├── samples
│ │ ├── CancelExperiments.java
│ │ ├── CreateLaunchBES.java
│ │ ├── CreateLaunchExperiment.java
│ │ ├── CreateLaunchExperimentUS3.java
│ │ ├── ReplicaCatalogSample.java
│ │ └── SampleEchoExperiment.java
│ │ ├── secure
│ │ └── client
│ │ │ ├── Properties.java
│ │ │ └── SecureClient.java
│ │ └── tools
│ │ ├── RegisterOGCEUS3Application.java
│ │ ├── RegisterSampleApplications.java
│ │ ├── RegisterSampleApplicationsUtils.java
│ │ └── RegisterUS3Application.java
├── php-cli-samples
│ ├── README
│ ├── airavata-client-api-tester.php
│ ├── cloneExperiment.php
│ ├── createExperiment.php
│ ├── createProject.php
│ ├── deleteApplicationInterface.php
│ ├── deleteComputeResource.php
│ ├── deleteGatewayComputeResourcePreference.php
│ ├── getAPIVersion.php
│ ├── getAiravataClient.php
│ ├── getAllApplicationInterfaceNames.php
│ ├── getAllComputeResourceNames.php
│ ├── getAllExperimentsInProject.php
│ ├── getAllUserExperiments.php
│ ├── getAllUserProjects.php
│ ├── getApplicationDeployedResources.php
│ ├── getApplicationDeployment.php
│ ├── getApplicationInputs.php
│ ├── getApplicationModule.php
│ ├── getApplicationOutputs.php
│ ├── getAvailableAppInterfaceComputeResources.php
│ ├── getComputeResource.php
│ ├── getExperiment.php
│ ├── getExperimentOutputs.php
│ ├── getExperimentStatus.php
│ ├── getGatewayComputeResourcePreference.php
│ ├── isUserExists.php
│ ├── launchExperiment.php
│ ├── registerApplicationDeployment.php
│ ├── registerApplicationInterface.php
│ ├── registerApplicationModule.php
│ ├── registerComputeResource.php
│ ├── search_experiments_by_application.php
│ ├── search_experiments_by_description.php
│ ├── search_experiments_by_name.php
│ ├── terminateExperiment.php
│ ├── updateApplicationInterface.php
│ ├── updateExperiment.php
│ └── updateProject.php
├── profile-service-java-client-samples
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ ├── java
│ │ └── org
│ │ │ └── apache
│ │ │ └── airavata
│ │ │ └── service
│ │ │ └── profile
│ │ │ └── client
│ │ │ ├── samples
│ │ │ ├── GroupManagerSample.java
│ │ │ ├── TenantProfileSample.java
│ │ │ └── UserProfileSample.java
│ │ │ └── util
│ │ │ └── ProfileServiceClientUtil.java
│ │ └── resources
│ │ └── profile-client-sample.properties
├── projects_using_airavata.md
├── python_sdk_experiment_tracking.md
├── python_sdk_jupyter_notebooks.md
├── registry-core-README.md
└── sharing-service-docs
│ ├── api-docs
│ ├── index.html
│ ├── sharing_cpi.html
│ ├── sharing_models.html
│ └── style.css
│ ├── index.html
│ ├── sharing_overview.png
│ └── style.css
├── keystores
├── airavata.sym.p12
├── generate_keystore.sh
├── server.crt
└── server.key
├── logo.txt
├── modules
├── agent-framework
│ ├── agent-service
│ │ ├── .gitignore
│ │ ├── pom.xml
│ │ └── src
│ │ │ └── main
│ │ │ ├── assembly
│ │ │ └── agent-service-bin-assembly.xml
│ │ │ ├── java
│ │ │ └── org
│ │ │ │ └── apache
│ │ │ │ └── airavata
│ │ │ │ └── agent
│ │ │ │ └── connection
│ │ │ │ └── service
│ │ │ │ ├── AgentServiceApplication.java
│ │ │ │ ├── UserContext.java
│ │ │ │ ├── config
│ │ │ │ ├── AuthzTokenFilter.java
│ │ │ │ └── ClusterApplicationConfig.java
│ │ │ │ ├── controllers
│ │ │ │ ├── AgentController.java
│ │ │ │ ├── ExperimentController.java
│ │ │ │ └── PlanController.java
│ │ │ │ ├── db
│ │ │ │ ├── entity
│ │ │ │ │ ├── AgentDeploymentInfo.java
│ │ │ │ │ ├── AgentExecution.java
│ │ │ │ │ ├── AgentExecutionStatus.java
│ │ │ │ │ └── Plan.java
│ │ │ │ └── repo
│ │ │ │ │ ├── AgentDeploymentInfoRepo.java
│ │ │ │ │ ├── AgentExecutionRepo.java
│ │ │ │ │ ├── AgentExecutionStatusRepo.java
│ │ │ │ │ └── PlanRepo.java
│ │ │ │ ├── handlers
│ │ │ │ ├── AgentConnectionHandler.java
│ │ │ │ ├── AgentManagementHandler.java
│ │ │ │ ├── FuseFSHandler.java
│ │ │ │ └── PlanHandler.java
│ │ │ │ ├── models
│ │ │ │ ├── AgentAsyncCommandExecutionRequest.java
│ │ │ │ ├── AgentAsyncCommandExecutionResponse.java
│ │ │ │ ├── AgentAsyncCommandListRequest.java
│ │ │ │ ├── AgentAsyncCommandListResponse.java
│ │ │ │ ├── AgentAsyncCommandTerminateRequest.java
│ │ │ │ ├── AgentAsyncCommandTerminateResponse.java
│ │ │ │ ├── AgentCommandExecutionAck.java
│ │ │ │ ├── AgentCommandExecutionRequest.java
│ │ │ │ ├── AgentCommandExecutionResponse.java
│ │ │ │ ├── AgentEnvSetupAck.java
│ │ │ │ ├── AgentEnvSetupRequest.java
│ │ │ │ ├── AgentEnvSetupResponse.java
│ │ │ │ ├── AgentInfoResponse.java
│ │ │ │ ├── AgentJupyterExecutionAck.java
│ │ │ │ ├── AgentJupyterExecutionRequest.java
│ │ │ │ ├── AgentJupyterExecutionResponse.java
│ │ │ │ ├── AgentKernelRestartAck.java
│ │ │ │ ├── AgentKernelRestartRequest.java
│ │ │ │ ├── AgentKernelRestartResponse.java
│ │ │ │ ├── AgentLaunchRequest.java
│ │ │ │ ├── AgentLaunchResponse.java
│ │ │ │ ├── AgentPythonExecutionAck.java
│ │ │ │ ├── AgentPythonExecutionRequest.java
│ │ │ │ ├── AgentPythonExecutionResponse.java
│ │ │ │ ├── AgentTerminateResponse.java
│ │ │ │ ├── AgentTunnelAck.java
│ │ │ │ ├── AgentTunnelCreateRequest.java
│ │ │ │ ├── AgentTunnelCreateResponse.java
│ │ │ │ ├── AgentTunnelTerminateRequest.java
│ │ │ │ ├── AgentTunnelTerminateResponse.java
│ │ │ │ ├── AsyncCommand.java
│ │ │ │ ├── DirectoryInfo.java
│ │ │ │ ├── ExperimentStorageResponse.java
│ │ │ │ └── FileInfo.java
│ │ │ │ └── services
│ │ │ │ ├── AiravataFileService.java
│ │ │ │ └── AiravataService.java
│ │ │ └── resources
│ │ │ ├── application.yml
│ │ │ ├── distribution
│ │ │ ├── bin
│ │ │ │ ├── agent-service.sh
│ │ │ │ └── setenv.sh
│ │ │ └── conf
│ │ │ │ └── .gitkeep
│ │ │ └── log4j2.xml
│ ├── airavata-agent
│ │ ├── .gitignore
│ │ ├── Dockerfile
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── agent-communication.proto
│ │ ├── agent.go
│ │ ├── agent.sh
│ │ ├── application
│ │ │ ├── README.md
│ │ │ ├── alphafold2.sh
│ │ │ ├── gaussian16.sh
│ │ │ ├── gromacs.sh
│ │ │ ├── namd.sh
│ │ │ ├── pmemd_cuda.sh
│ │ │ ├── pmemd_mpi.sh
│ │ │ └── psi4.sh
│ │ ├── go.mod
│ │ ├── kernel.py
│ │ ├── pkg
│ │ │ ├── jupyter.go
│ │ │ ├── python.go
│ │ │ ├── shell.go
│ │ │ ├── tunnel.go
│ │ │ └── types.go
│ │ └── protos
│ │ │ ├── agent-communication.pb.go
│ │ │ └── agent-communication_grpc.pb.go
│ ├── airavata-fuse
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── data
│ │ │ ├── foo
│ │ │ │ └── bar.txt
│ │ │ └── hello.txt
│ │ └── src
│ │ │ ├── grpcfs
│ │ │ ├── adapters.go
│ │ │ ├── fs.go
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ ├── grpc.go
│ │ │ ├── inode.go
│ │ │ └── pb
│ │ │ │ ├── grpcfs.pb.go
│ │ │ │ └── grpcfs_grpc.pb.go
│ │ │ ├── grpcfs_client
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ └── main.go
│ │ │ ├── grpcfs_server
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ └── main.go
│ │ │ └── proto
│ │ │ └── grpcfs.proto
│ └── proto
│ │ ├── agent-communication.proto
│ │ └── airavata-fuse.proto
├── file-server
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ ├── assembly
│ │ └── file-service-bin-assembly.xml
│ │ ├── java
│ │ └── org
│ │ │ └── apache
│ │ │ └── airavata
│ │ │ └── file
│ │ │ └── server
│ │ │ ├── FileServerApplication.java
│ │ │ ├── FileServerConfiguration.java
│ │ │ ├── controller
│ │ │ └── FileController.java
│ │ │ ├── model
│ │ │ ├── AiravataDirectory.java
│ │ │ ├── AiravataFile.java
│ │ │ └── FileUploadResponse.java
│ │ │ └── service
│ │ │ ├── AirvataFileService.java
│ │ │ └── ProcessDataManager.java
│ │ └── resources
│ │ ├── application.properties
│ │ ├── distribution
│ │ ├── bin
│ │ │ ├── file-service.sh
│ │ │ └── setenv.sh
│ │ └── conf
│ │ │ └── .gitkeep
│ │ └── log4j2.xml
├── ide-integration
│ ├── .gitignore
│ ├── README.md
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ └── java
│ │ └── org
│ │ └── apache
│ │ └── airavata
│ │ └── ide
│ │ └── integration
│ │ ├── APIServerStarter.java
│ │ ├── JobEngineStarter.java
│ │ └── JobMonitorStarter.java
├── registry-db-migrator
│ ├── README.md
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ ├── java
│ │ └── org
│ │ │ └── apache
│ │ │ └── airavata
│ │ │ └── registry
│ │ │ └── tool
│ │ │ └── DBMigrator.java
│ │ └── resources
│ │ ├── db-migrate.sh
│ │ └── db-scripts
│ │ ├── 0.6
│ │ ├── migrate_derby.sql
│ │ └── migrate_mysql.sql
│ │ ├── 0.7
│ │ ├── migrate_derby.sql
│ │ └── migrate_mysql.sql
│ │ └── 0.8
│ │ ├── migrate_derby.sql
│ │ └── migrate_mysql.sql
├── registry-jpa-generator
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ └── java
│ │ ├── appcatalog
│ │ └── computeresource
│ │ │ ├── BatchQueueGenerator.java
│ │ │ ├── ComputeResourceDescriptionGenerator.java
│ │ │ ├── DataMovementInterfaceGenerator.java
│ │ │ ├── FileSystemsGenerator.java
│ │ │ ├── GridFTPDataMovementGenerator.java
│ │ │ ├── GridFTPEndpointsGenerator.java
│ │ │ ├── JobManagerCommandGenerator.java
│ │ │ ├── JobSubmissionInterfaceGenerator.java
│ │ │ ├── LocalDataMovementGenerator.java
│ │ │ ├── LocalSubmissionGenerator.java
│ │ │ ├── ModuleCMDGenerator.java
│ │ │ ├── ResourceJobManagerGenerator.java
│ │ │ ├── SCPDataMovementGenerator.java
│ │ │ └── SSHJobSubmissionGenerator.java
│ │ ├── generators
│ │ ├── AbstractGenerator.java
│ │ ├── JPAClassGenerator.java
│ │ ├── JPAResourceClassGenerator.java
│ │ └── SQLGenerator.java
│ │ ├── model
│ │ ├── JPAClassField.java
│ │ ├── JPAClassModel.java
│ │ ├── JPAPKClassModel.java
│ │ ├── JPAResourceClassModel.java
│ │ └── SQLData.java
│ │ └── test
│ │ └── Test.java
├── release-migration-scripts
│ ├── 0.16-0.17
│ │ ├── DeltaScripts
│ │ │ ├── appCatalog_schema_delta.sql
│ │ │ ├── credentialStore_schema_delta.sql
│ │ │ ├── expCatalog_schema_delta.sql
│ │ │ ├── profile_service_schema_delta.sql
│ │ │ ├── replicaCatalog_schema_delta.sql
│ │ │ ├── sharingCatalog_schema_delta.sql
│ │ │ └── workFlow_schema_delta.sql
│ │ ├── keycloak-migration-replica-catalog
│ │ │ └── replicaCatalog_lowercase_user_data_dir_example.sql
│ │ ├── keycloak-migration
│ │ │ ├── credentialStore_keycloak_migration.sql
│ │ │ ├── expCatalog_keycloak_migration.sql
│ │ │ ├── profileService_keycloak_migration.sql
│ │ │ └── sharingCatalog_keycloak_migration.sql
│ │ └── migration-notes.md
│ ├── 0.17-0.18
│ │ └── DeltaScripts
│ │ │ ├── expCatalog_schema_delta.sql
│ │ │ ├── profile_service_schema_delta.sql
│ │ │ └── sharingCatalog_schema_delta.sql
│ ├── 0.18-0.19
│ │ └── DeltaScripts
│ │ │ ├── appCatalog_schema_delta.sql
│ │ │ ├── credential_store_schema_delta.sql
│ │ │ ├── experimentCatalog_schema_delta.sql
│ │ │ ├── profile_service_schema_delta.sql
│ │ │ ├── replicaCatalog_schema_delta.sql
│ │ │ └── sharingCatalog_schema_delta.sql
│ ├── 0.19-0.20
│ │ └── DeltaScripts
│ │ │ ├── appCatalog_schema_delta.sql
│ │ │ ├── credential_store_schema_delta.sql
│ │ │ ├── experimentCatalog_schema_delta.sql
│ │ │ ├── profile_service_schema_delta.sql
│ │ │ ├── replicaCatalog_schema_delta.sql
│ │ │ └── sharingCatalog_schema_delta.sql
│ └── next
│ │ └── DeltaScripts
│ │ ├── appCatalog_schema_delta.sql
│ │ ├── credential_store_schema_delta.sql
│ │ ├── experimentCatalog_schema_delta.sql
│ │ ├── profile_service_schema_delta.sql
│ │ ├── replicaCatalog_schema_delta.sql
│ │ └── sharingCatalog_schema_delta.sql
├── research-framework
│ ├── research-hub
│ │ ├── Dockerfile
│ │ ├── custom_templates
│ │ │ └── login.html
│ │ ├── docker-compose.yaml
│ │ ├── jupyterhub_config.py
│ │ └── user-container
│ │ │ ├── Dockerfile
│ │ │ ├── Makefile
│ │ │ └── init.sh
│ ├── research-service
│ │ ├── README.md
│ │ ├── pom.xml
│ │ └── src
│ │ │ └── main
│ │ │ ├── assembly
│ │ │ └── research-service-bin-assembly.xml
│ │ │ ├── compose
│ │ │ ├── dbinit
│ │ │ │ └── 01-init-db.sql
│ │ │ └── docker-compose.yaml
│ │ │ ├── java
│ │ │ └── org
│ │ │ │ └── apache
│ │ │ │ └── airavata
│ │ │ │ └── research
│ │ │ │ └── service
│ │ │ │ ├── AiravataService.java
│ │ │ │ ├── ResearchServiceApplication.java
│ │ │ │ ├── config
│ │ │ │ ├── AuthzTokenFilter.java
│ │ │ │ ├── DevDataInitializer.java
│ │ │ │ ├── OpenApiConfig.java
│ │ │ │ └── WebMvcConfig.java
│ │ │ │ ├── controller
│ │ │ │ ├── GlobalExceptionController.java
│ │ │ │ ├── ProjectController.java
│ │ │ │ ├── ResearchHubController.java
│ │ │ │ ├── ResourceController.java
│ │ │ │ └── SessionController.java
│ │ │ │ ├── dto
│ │ │ │ ├── CreateProjectRequest.java
│ │ │ │ ├── CreateResourceRequest.java
│ │ │ │ ├── ModifyResourceRequest.java
│ │ │ │ ├── RedirectResponse.java
│ │ │ │ └── ResourceResponse.java
│ │ │ │ ├── enums
│ │ │ │ ├── PrivacyEnum.java
│ │ │ │ ├── ResourceTypeEnum.java
│ │ │ │ ├── SessionStatusEnum.java
│ │ │ │ ├── StateEnum.java
│ │ │ │ └── StatusEnum.java
│ │ │ │ ├── exception
│ │ │ │ ├── ErrorResponse.java
│ │ │ │ └── GlobalExceptionHandler.java
│ │ │ │ ├── handlers
│ │ │ │ ├── ProjectHandler.java
│ │ │ │ ├── ResearchHubHandler.java
│ │ │ │ ├── ResourceHandler.java
│ │ │ │ └── SessionHandler.java
│ │ │ │ └── model
│ │ │ │ ├── UserContext.java
│ │ │ │ ├── entity
│ │ │ │ ├── DatasetResource.java
│ │ │ │ ├── ModelResource.java
│ │ │ │ ├── NotebookResource.java
│ │ │ │ ├── Project.java
│ │ │ │ ├── RepositoryResource.java
│ │ │ │ ├── Resource.java
│ │ │ │ ├── ResourceStar.java
│ │ │ │ ├── Session.java
│ │ │ │ └── Tag.java
│ │ │ │ └── repo
│ │ │ │ ├── ProjectRepository.java
│ │ │ │ ├── ResourceRepository.java
│ │ │ │ ├── ResourceStarRepository.java
│ │ │ │ ├── SessionRepository.java
│ │ │ │ └── TagRepository.java
│ │ │ ├── proto
│ │ │ └── research-service.proto
│ │ │ └── resources
│ │ │ ├── application.yml
│ │ │ ├── distribution
│ │ │ ├── bin
│ │ │ │ ├── research-service.sh
│ │ │ │ └── setenv.sh
│ │ │ └── conf
│ │ │ │ └── .gitkeep
│ │ │ └── log4j2.xml
│ └── simexr_mod
│ │ ├── .gitignore
│ │ ├── FINAL_REPORT.md
│ │ ├── README.md
│ │ ├── api
│ │ ├── __init__.py
│ │ ├── config.py
│ │ ├── dependencies.py
│ │ ├── main.py
│ │ ├── models.py
│ │ └── routers
│ │ │ ├── __init__.py
│ │ │ ├── database.py
│ │ │ ├── health.py
│ │ │ ├── reasoning.py
│ │ │ └── simulation.py
│ │ ├── app.py
│ │ ├── code
│ │ ├── __init__.py
│ │ ├── extract
│ │ │ └── llm_extract.py
│ │ ├── helpers
│ │ │ ├── ast_helpers.py
│ │ │ └── locate_helpers.py
│ │ ├── inject
│ │ │ └── inject_overrides.py
│ │ ├── locate
│ │ │ ├── locate.py
│ │ │ └── param_usage_visitor.py
│ │ ├── models
│ │ │ └── param_ref.py
│ │ ├── refactor
│ │ │ └── llm_refactor.py
│ │ ├── test
│ │ │ ├── __init__.py
│ │ │ └── simulation_refiner.py
│ │ └── utils
│ │ │ ├── github_utils.py
│ │ │ └── notebook_utils.py
│ │ ├── config.yaml.example
│ │ ├── core
│ │ ├── __init__.py
│ │ ├── interfaces.py
│ │ ├── parser.py
│ │ ├── patterns.py
│ │ └── services.py
│ │ ├── db
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── config
│ │ │ ├── __init__.py
│ │ │ └── database.py
│ │ ├── models
│ │ │ ├── __init__.py
│ │ │ ├── base.py
│ │ │ └── simulation.py
│ │ ├── repositories
│ │ │ ├── __init__.py
│ │ │ ├── base.py
│ │ │ ├── reasoning.py
│ │ │ └── simulation.py
│ │ ├── services
│ │ │ ├── __init__.py
│ │ │ ├── reasoning.py
│ │ │ ├── results.py
│ │ │ └── store.py
│ │ └── utils
│ │ │ ├── __init__.py
│ │ │ ├── hash_utils.py
│ │ │ ├── json_utils.py
│ │ │ └── transform_utils.py
│ │ ├── execute
│ │ ├── __init__.py
│ │ ├── base.py
│ │ ├── loader
│ │ │ ├── __init__.py
│ │ │ ├── simulate_loader.py
│ │ │ └── transform_code.py
│ │ ├── logging
│ │ │ ├── __init__.py
│ │ │ └── run_logger.py
│ │ ├── model
│ │ │ ├── __init__.py
│ │ │ └── smoke_test_result.py
│ │ ├── persistence
│ │ │ ├── __init__.py
│ │ │ └── save_script.py
│ │ ├── run
│ │ │ ├── __init__.py
│ │ │ ├── batch_runner.py
│ │ │ └── simulation_runner.py
│ │ ├── test
│ │ │ ├── __init__.py
│ │ │ ├── fix_agent.py
│ │ │ ├── simulation_refiner.py
│ │ │ └── smoke_tester.py
│ │ └── utils
│ │ │ ├── __init__.py
│ │ │ ├── black_formatter.py
│ │ │ ├── error_context.py
│ │ │ ├── json_utlils.py
│ │ │ ├── model_utils.py
│ │ │ ├── python_utils.py
│ │ │ └── requirements_manager.py
│ │ ├── llm
│ │ ├── local_llm.py
│ │ └── prompt_templates.py
│ │ ├── pages
│ │ └── param_annotations.py
│ │ ├── reasoning
│ │ ├── __init__.py
│ │ ├── agent
│ │ │ ├── __init__.py
│ │ │ └── loop.py
│ │ ├── base.py
│ │ ├── config
│ │ │ ├── __init__.py
│ │ │ └── tools.py
│ │ ├── helpers
│ │ │ ├── __init__.py
│ │ │ ├── chat_utils.py
│ │ │ └── prompts.py
│ │ ├── messages
│ │ │ ├── __init__.py
│ │ │ ├── llm_client.py
│ │ │ ├── model.py
│ │ │ └── openai_client.py
│ │ ├── model
│ │ │ ├── __init__.py
│ │ │ └── reasoning_result.py
│ │ ├── tools
│ │ │ ├── __init__.py
│ │ │ ├── final_answer.py
│ │ │ ├── python_exec.py
│ │ │ └── simulate_exec.py
│ │ └── utils
│ │ │ ├── __init__.py
│ │ │ ├── extract_code_map.py
│ │ │ ├── history.py
│ │ │ ├── json_utils.py
│ │ │ └── load_results.py
│ │ ├── requirements.txt
│ │ ├── setup.sh
│ │ ├── start_api.py
│ │ ├── start_streamlit.py
│ │ ├── test_all_apis.py
│ │ └── utils
│ │ ├── config.py
│ │ ├── logger.py
│ │ └── openai_config.py
└── restproxy
│ ├── pom.xml
│ └── src
│ └── main
│ ├── assembly
│ └── restproxy-bin-assembly.xml
│ ├── java
│ └── org
│ │ └── apache
│ │ └── airavata
│ │ └── restproxy
│ │ ├── RestProxyApplication.java
│ │ ├── RestProxyConfiguration.java
│ │ └── controller
│ │ └── ProxyController.java
│ └── resources
│ ├── application.properties
│ ├── distribution
│ ├── bin
│ │ ├── restproxy.sh
│ │ └── setenv.sh
│ └── conf
│ │ └── .gitkeep
│ └── log4j2.xml
├── pom.xml
└── thrift-interface-descriptions
├── airavata-apis
├── airavata_api.thrift
├── airavata_commons.thrift
├── airavata_errors.thrift
├── db_event_model.thrift
├── messaging_events.thrift
├── security_model.thrift
└── workflow_api.thrift
├── base-api
└── base_api.thrift
├── data-models
├── account_provisioning_model.thrift
├── application_deployment_model.thrift
├── application_interface_model.thrift
├── application_io_models.thrift
├── compute_resource_model.thrift
├── credential_store_models.thrift
├── data_movement_models.thrift
├── experiment_model.thrift
├── gateway_groups_model.thrift
├── gateway_resource_profile_model.thrift
├── group_manager_model.thrift
├── group_resource_profile_model.thrift
├── job_model.thrift
├── parallelism_model.thrift
├── parser_model.thrift
├── process_model.thrift
├── replica_catalog_models.thrift
├── scheduling_model.thrift
├── sharing_models.thrift
├── status_models.thrift
├── storage_resource_model.thrift
├── task_model.thrift
├── tenant_profile_model.thrift
├── user_profile_model.thrift
├── user_resource_profile_model.thrift
├── workflow_data_model.thrift
├── workflow_model.thrift
└── workspace_model.thrift
├── generate-thrift-stubs.sh
├── service-cpis
├── credential-store-cpi.thrift
├── credential_store_errors.thrift
├── orchestrator-cpi.thrift
├── profile-service-cpi.thrift
├── profile-service
│ ├── group-manager
│ │ ├── group-manager-cpi.thrift
│ │ └── group_manager_cpi_errors.thrift
│ ├── iam-admin-services
│ │ ├── iam-admin-services-cpi.thrift
│ │ └── iam_admin_services_cpi_errors.thrift
│ ├── profile-tenant
│ │ ├── profile-tenant-cpi.thrift
│ │ └── profile_tenant_cpi_errors.thrift
│ └── profile-user
│ │ ├── profile-user-cpi.thrift
│ │ └── profile_user_cpi_errors.thrift
├── registry-api.thrift
├── registry_api_errors.thrift
├── sharing_cpi.thrift
├── user-profile-cpi.thrift
└── user_profile_cpi_errors.thrift
├── stubs_java.thrift
├── stubs_php.thrift
└── stubs_python.thrift
/.devcontainer/database_scripts/init/00-accounts.sql:
--------------------------------------------------------------------------------
1 | CREATE USER IF NOT EXISTS 'airavata'@'%' IDENTIFIED BY '123456';
2 | GRANT ALL PRIVILEGES ON *.* TO 'airavata'@'%';
3 | FLUSH PRIVILEGES;
--------------------------------------------------------------------------------
/.devcontainer/database_scripts/init/02-sharing-registry-migrations.sql:
--------------------------------------------------------------------------------
1 | use sharing_catalog;
2 |
3 | ALTER TABLE DOMAIN ADD COLUMN IF NOT EXISTS INITIAL_USER_GROUP_ID varchar(255);
4 | ALTER TABLE DOMAIN ADD CONSTRAINT `DOMAIN_INITIAL_USER_GROUP_ID_FK` FOREIGN KEY IF NOT EXISTS (INITIAL_USER_GROUP_ID, DOMAIN_ID) REFERENCES USER_GROUP(GROUP_ID, DOMAIN_ID) ON DELETE CASCADE ON UPDATE NO ACTION;
5 |
--------------------------------------------------------------------------------
/.devcontainer/database_scripts/init/05-replica-catalog-migrations.sql:
--------------------------------------------------------------------------------
1 | USE replica_catalog;
2 |
3 | -- AIRAVATA-3697: Support file names that have UTF8 characters and that are long
4 | ALTER TABLE
5 | DATA_PRODUCT
6 | MODIFY
7 | PRODUCT_NAME text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
8 |
9 | ALTER TABLE
10 | DATA_PRODUCT
11 | MODIFY
12 | PRODUCT_DESCRIPTION varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
13 |
14 | ALTER TABLE
15 | DATA_REPLICA_LOCATION
16 | MODIFY
17 | REPLICA_NAME text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
18 |
19 | ALTER TABLE
20 | DATA_REPLICA_LOCATION
21 | MODIFY
22 | REPLICA_DESCRIPTION varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
23 |
24 | ALTER TABLE
25 | DATA_REPLICA_LOCATION
26 | MODIFY
27 | FILE_PATH varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
28 |
--------------------------------------------------------------------------------
/.devcontainer/devcontainer.json:
--------------------------------------------------------------------------------
1 | // For format details, see https://aka.ms/devcontainer.json. For config options, see the
2 | // README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu
3 | {
4 | "name": "Airavata",
5 | "dockerComposeFile": "docker-compose.yml",
6 | "service": "devcontainer",
7 | "features": {},
8 | "workspaceFolder": "/home/developer/workspace",
9 | "forwardPorts": [],
10 | "customizations": {
11 | "vscode": {
12 | "extensions": [
13 | "esbenp.prettier-vscode",
14 | "eamodio.gitlens",
15 | "foxundermoon.shell-format",
16 | "golang.go",
17 | "lkrms.inifmt",
18 | "ms-python.python",
19 | "ms-python.autopep8",
20 | "ms-python.isort",
21 | "ms-toolsai.jupyter",
22 | "njpwerner.autodocstring",
23 | "vscjava.vscode-java-pack",
24 | ]
25 | },
26 | }
27 | }
--------------------------------------------------------------------------------
/.devcontainer/gateway-storage/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM ubuntu:16.04
2 |
3 | RUN apt-get update && apt-get install -y openssh-server
4 | RUN mkdir /var/run/sshd
5 | RUN echo 'root:root' | chpasswd
6 | RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
7 |
8 | # SSH login fix. Otherwise user is kicked off after login
9 | RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
10 |
11 | ENV NOTVISIBLE "in users profile"
12 | RUN echo "export VISIBLE=now" >> /etc/profile
13 |
14 | RUN mkdir -p /var/www/portals/gateway-user-data
15 | RUN mkdir /root/.ssh
16 | ADD authorized_keys /root/.ssh/authorized_keys
17 |
18 | RUN chmod 700 /root/.ssh
19 | RUN chmod 644 /root/.ssh/authorized_keys
20 |
21 | EXPOSE 22
22 | CMD ["/usr/sbin/sshd", "-D"]
--------------------------------------------------------------------------------
/.devcontainer/gateway-storage/authorized_keys:
--------------------------------------------------------------------------------
1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCr0zWkrd3MJe397xm1q7EBZd7HuIcgLva0Dl3uyE3N7vqcWeXjXngtVicJLIROIASwy1+MAbhDDQLykQtIcJTJ5cvZM29nqqsIZ9l0acURVtDVnMd7PqRs+0wBQnrdZm34NT3/QJhxZTOuSn+i44VPFM1HWFObDP7GGtRMheGAKKV2tTbF1o/q1XaBiQJABOsP/Yt20nox1Hd6OCl0E3loK0sA+DnVVK9Ox0WShr4CWOLUCWavghXbgbDQPe/3VMSvwYqvLjNd+VfrNiAx7jNm+nxVKQSzYJ46RSwVs4jLKrnrG85+eAFwLeIFjlLyrsVNvBlOCs6XQ6lmVDD1u97B
--------------------------------------------------------------------------------
/.devcontainer/keycloak/keycloak.conf:
--------------------------------------------------------------------------------
1 | db=dev-mem
2 | http-enabled=true
3 | http-port=18080
4 | proxy=edge
5 | proxy-headers=xforwarded
6 | hostname-strict=false
7 | health-enabled=true
8 | metrics-enabled=true
9 | log-level=INFO
10 |
--------------------------------------------------------------------------------
/.devcontainer/portals/pga-default.conf:
--------------------------------------------------------------------------------
1 |
2 |
3 | DocumentRoot /var/www/html/default/public
4 |
5 | AllowOverride All
6 |
7 | ErrorLog /var/log/apache2/default.error.log
8 | CustomLog /var/log/apache2/default.requests.log combined
9 |
10 |
--------------------------------------------------------------------------------
/.devcontainer/proxy/nginx.conf:
--------------------------------------------------------------------------------
1 | worker_processes auto;
2 | error_log /var/log/nginx/error.log warn;
3 | pid /var/run/nginx.pid;
4 |
5 | events {
6 | worker_connections 1024;
7 | }
8 |
9 | http {
10 | include /etc/nginx/conf.d/http.conf;
11 | }
12 |
13 | stream {
14 | include /etc/nginx/conf.d/stream.conf;
15 | }
--------------------------------------------------------------------------------
/.devcontainer/proxy/stream.conf:
--------------------------------------------------------------------------------
1 | # Thrift server (9930 -> 8930)
2 | server {
3 | listen 9930 ssl; # accept TLS on port 9930
4 | proxy_pass 192.168.100.9:8930; # forward decrypted traffic
5 |
6 | # point to your cert+key
7 | ssl_certificate /vault/server.crt;
8 | ssl_certificate_key /vault/server.key;
9 |
10 | # (optional) enforce modern TLS only
11 | ssl_protocols TLSv1.2 TLSv1.3;
12 | ssl_ciphers HIGH:!aNULL:!MD5;
13 | ssl_prefer_server_ciphers on;
14 |
15 | # tuning
16 | proxy_connect_timeout 5s;
17 | proxy_timeout 5s;
18 | }
19 |
--------------------------------------------------------------------------------
/.dockerignore:
--------------------------------------------------------------------------------
1 | .devcontainer
2 | .github
3 | .idea
4 | .run
5 | .vscode
--------------------------------------------------------------------------------
/.run/APIServerStarter.run.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.run/AgentServiceApplication.run.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/.run/FileServerApplication.run.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.run/JobEngineStarter.run.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.run/JobMonitorStarter.run.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.run/ResearchServiceApplication.run.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "configurations": [
3 | {
4 | "type": "java",
5 | "name": "Start API Server",
6 | "request": "launch",
7 | "cwd": "${workspaceFolder}/modules/ide-integration",
8 | "mainClass": "org.apache.airavata.ide.integration.APIServerStarter",
9 | "vmArgs": "-javaagent:/home/vscode/.m2/repository/org/apache/openjpa/openjpa/4.0.1/openjpa-4.0.1.jar",
10 | },
11 | {
12 | "type": "java",
13 | "name": "Start Job Engine",
14 | "request": "launch",
15 | "cwd": "${workspaceFolder}/modules/ide-integration",
16 | "mainClass": "org.apache.airavata.ide.integration.JobEngineStarter"
17 | },
18 | {
19 | "type": "java",
20 | "name": "Start Job Monitor",
21 | "request": "launch",
22 | "cwd": "${workspaceFolder}/modules/ide-integration",
23 | "mainClass": "org.apache.airavata.ide.integration.JobMonitorStarter"
24 | }
25 | ],
26 | }
--------------------------------------------------------------------------------
/DEPLOY:
--------------------------------------------------------------------------------
1 | ## Build Server
2 |
3 | ```bash
4 |
5 | # build from source
6 | mvn clean install -DskipTests
7 |
8 | # prepare the distribution directory for upload
9 | cp -r dev-tools/deployment-scripts/ distribution
10 | cp -r vault/ distribution/vault
11 |
12 | # define hostname and basepath
13 | HOSTNAME=exouser@api.dev.cybershuttle.org
14 | BASEPATH="~/airavata-deployment/airavata-services-v2"
15 |
16 | # upload the distribution directory
17 | scp -r distribution/* $HOSTNAME:$BASEPATH
18 |
19 | ```
20 |
21 | ## Deployment Server
22 | ```bash
23 |
24 | BASEPATH=$HOME/airavata-deployment/airavata-services-v2
25 | cd $BASEPATH
26 |
27 | ./services_down.sh
28 | ./distribution_update.sh
29 | ./services_up.sh
30 |
31 | multitail apache-airavata-*/logs/*.log
32 |
33 | ```
--------------------------------------------------------------------------------
/airavata-api/src/main/resources/distribution/conf/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apache/airavata/e6fc9582fcd38e102aad0ef5dd7f92e49cb7e5f5/airavata-api/src/main/resources/distribution/conf/.gitkeep
--------------------------------------------------------------------------------
/airavata-api/src/main/resources/migrations-util/mysql/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3'
2 | services:
3 | db:
4 | image: mariadb:10.4.13
5 | environment:
6 | - MYSQL_ROOT_PASSWORD=123456
7 | - MYSQL_USER=airavata
8 | - MYSQL_PASSWORD=123456
9 | volumes:
10 | - ./docker-entrypoint-initdb.d/:/docker-entrypoint-initdb.d
11 | ports:
12 | - "13306:3306"
13 | command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci', '--sql_mode=']
14 | # Connect to database with:
15 | # $ docker run --network mysql_default -it --rm mariadb:10 mysql -h mysql_db_1 -u airavata -p123456
16 |
--------------------------------------------------------------------------------
/airavata-api/src/main/resources/templates/FORK_Groovy.template:
--------------------------------------------------------------------------------
1 | #!${shellName}
2 | # FORK job submission script generated by Apache Airavata
3 |
4 | <% if (exports != null) for(com in exports) out.print 'export ' + com +'\n'
5 | if (moduleCommands != null) for(mc in moduleCommands) out.print mc +'\n'
6 | if (workingDirectory != null) out.print 'cd ' + workingDirectory +'\n'
7 | if (preJobCommands != null) for(pjc in preJobCommands) out.print pjc +'\n'
8 | if (jobSubmitterCommand != null) out.print jobSubmitterCommand + ' '
9 | if (executablePath != null) out.print executablePath + ' '
10 | if (inputs != null) for(input in inputs) out.print input + ' '
11 | out.print '\n'
12 | if (postJobCommands != null) for(pjc in postJobCommands) out.print pjc +'\n'
13 | %>
--------------------------------------------------------------------------------
/airavata-api/src/test/resources/zoo.cfg:
--------------------------------------------------------------------------------
1 | # Licensed to the Apache Software Foundation (ASF) under one
2 | # or more contributor license agreements. See the NOTICE file
3 | # distributed with this work for additional information
4 | # regarding copyright ownership. The ASF licenses this file
5 | # to you under the Apache License, Version 2.0 (the
6 | # "License"); you may not use this file except in compliance
7 | # with the License. You may obtain a copy of the License at
8 | #
9 | # http://www.apache.org/licenses/LICENSE-2.0
10 | #
11 | # Unless required by applicable law or agreed to in writing,
12 | # software distributed under the License is distributed on an
13 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 | # KIND, either express or implied. See the License for the
15 | # specific language governing permissions and limitations
16 | # under the License.
17 |
18 | tickTime=2000
19 | initLimit=10
20 | syncLimit=5
21 | dataDir=data
22 | clientPort=2185
--------------------------------------------------------------------------------
/apache-license-header-java.txt:
--------------------------------------------------------------------------------
1 | /**
2 | *
3 | * Licensed to the Apache Software Foundation (ASF) under one
4 | * or more contributor license agreements. See the NOTICE file
5 | * distributed with this work for additional information
6 | * regarding copyright ownership. The ASF licenses this file
7 | * to you under the Apache License, Version 2.0 (the
8 | * "License"); you may not use this file except in compliance
9 | * with the License. You may obtain a copy of the License at
10 | *
11 | * http://www.apache.org/licenses/LICENSE-2.0
12 | *
13 | * Unless required by applicable law or agreed to in writing,
14 | * software distributed under the License is distributed on an
15 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 | * KIND, either express or implied. See the License for the
17 | * specific language governing permissions and limitations
18 | * under the License.
19 | */
20 |
--------------------------------------------------------------------------------
/apache-license-header-xml.txt:
--------------------------------------------------------------------------------
1 |
19 |
--------------------------------------------------------------------------------
/apache-license-header.txt:
--------------------------------------------------------------------------------
1 |
2 | Licensed to the Apache Software Foundation (ASF) under one
3 | or more contributor license agreements. See the NOTICE file
4 | distributed with this work for additional information
5 | regarding copyright ownership. The ASF licenses this file
6 | to you under the Apache License, Version 2.0 (the
7 | "License"); you may not use this file except in compliance
8 | with the License. You may obtain a copy of the License at
9 |
10 | http://www.apache.org/licenses/LICENSE-2.0
11 |
12 | Unless required by applicable law or agreed to in writing,
13 | software distributed under the License is distributed on an
14 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 | KIND, either express or implied. See the License for the
16 | specific language governing permissions and limitations
17 | under the License.
--------------------------------------------------------------------------------
/assets/airavata-components.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apache/airavata/e6fc9582fcd38e102aad0ef5dd7f92e49cb7e5f5/assets/airavata-components.png
--------------------------------------------------------------------------------
/assets/airavata-dataflow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apache/airavata/e6fc9582fcd38e102aad0ef5dd7f92e49cb7e5f5/assets/airavata-dataflow.png
--------------------------------------------------------------------------------
/assets/airavata-state-transitions.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apache/airavata/e6fc9582fcd38e102aad0ef5dd7f92e49cb7e5f5/assets/airavata-state-transitions.png
--------------------------------------------------------------------------------
/dev-tools/airavata-php-sdk/NOTICE:
--------------------------------------------------------------------------------
1 | Apache Airavata
2 | Copyright 2014 The Apache Software Foundation
3 |
4 | This product includes software developed at
5 | The Apache Software Foundation (http://www.apache.org/).
--------------------------------------------------------------------------------
/dev-tools/airavata-php-sdk/README:
--------------------------------------------------------------------------------
1 | Apache Airavata Thrift PHP Software Development Kit.
2 |
3 | The lib directory has THRIFT files and Airavata generated PHP stubs.
4 |
5 | The samples directory has example PHP code.
--------------------------------------------------------------------------------
/dev-tools/airavata-php-sdk/lib/Airavata/API/Sharing/Types.php:
--------------------------------------------------------------------------------
1 | /etc/ssl/$CERTIFICATE/$CERTIFICATE.pem
13 |
14 | done
15 |
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/common/files/airavata.jks:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apache/airavata/e6fc9582fcd38e102aad0ef5dd7f92e49cb7e5f5/dev-tools/ansible/roles/common/files/airavata.jks
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/common/files/airavata_sym.jks:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apache/airavata/e6fc9582fcd38e102aad0ef5dd7f92e49cb7e5f5/dev-tools/ansible/roles/common/files/airavata_sym.jks
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/common/templates/maven.sh:
--------------------------------------------------------------------------------
1 | export PATH=/opt/{{ apache_maven_version }}/bin:${PATH}
2 |
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/common/vars/main.yml:
--------------------------------------------------------------------------------
1 | #
2 | #
3 | # Licensed to the Apache Software Foundation (ASF) under one
4 | # or more contributor license agreements. See the NOTICE file
5 | # distributed with this work for additional information
6 | # regarding copyright ownership. The ASF licenses this file
7 | # to you under the Apache License, Version 2.0 (the
8 | # "License"); you may not use this file except in compliance
9 | # with the License. You may obtain a copy of the License at
10 | #
11 | # http://www.apache.org/licenses/LICENSE-2.0
12 | #
13 | # Unless required by applicable law or agreed to in writing,
14 | # software distributed under the License is distributed on an
15 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 | # KIND, either express or implied. See the License for the
17 | # specific language governing permissions and limitations
18 | # under the License.
19 | #
20 |
21 | ---
22 | # Common variables
23 |
24 | ...
25 |
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/database/defaults/main.yml:
--------------------------------------------------------------------------------
1 | #
2 | #
3 | # Licensed to the Apache Software Foundation (ASF) under one
4 | # or more contributor license agreements. See the NOTICE file
5 | # distributed with this work for additional information
6 | # regarding copyright ownership. The ASF licenses this file
7 | # to you under the Apache License, Version 2.0 (the
8 | # "License"); you may not use this file except in compliance
9 | # with the License. You may obtain a copy of the License at
10 | #
11 | # http://www.apache.org/licenses/LICENSE-2.0
12 | #
13 | # Unless required by applicable law or agreed to in writing,
14 | # software distributed under the License is distributed on an
15 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 | # KIND, either express or implied. See the License for the
17 | # specific language governing permissions and limitations
18 | # under the License.
19 | #
20 |
21 | mysql_root_password: "admin"
22 |
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/database/templates/my.cnf.j2:
--------------------------------------------------------------------------------
1 | # Example .my.cnf file for setting the root password
2 | [client]
3 | user=root
4 | password="{{ mysql_root_password }}"
5 |
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/django/templates/archive_user_data.cron.j2:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | su {{user}} -c ' source "{{ django_venv_dir }}/bin/activate"; cd "{{ airavata_django_checkout }}"; python manage.py archive_user_data'
4 |
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/django_setup/files/00-wsgi.conf:
--------------------------------------------------------------------------------
1 | LoadModule wsgi_module modules/mod_wsgi.so
2 |
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/helix_setup/templates/controller/helixcontroller.service.j2:
--------------------------------------------------------------------------------
1 | # {{ansible_managed}}
2 |
3 | [Unit]
4 | Description=helixcontroller
5 | Before=
6 | After=network.target
7 |
8 | [Service]
9 | LOG_DIR={{ helix_controller_log_dir }}
10 | ExecStart={{ helix_dir }}/{{ helix_controller_version }}/bin/controller-daemon.sh {{ helix_dir }}/{{ helix_controller_version }}/conf/airavata-server.properties
11 | Restart=on-abort
12 |
13 | [Install]
14 | WantedBy=multi-user.target
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/helix_setup/templates/participant/helixparticipant.service.j2:
--------------------------------------------------------------------------------
1 | # {{ansible_managed}}
2 |
3 | [Unit]
4 | Description=helixparticipant
5 | Before=
6 | After=network.target
7 |
8 | [Service]
9 | LOG_DIR={{ helix_participant_log_dir }}
10 | ExecStart={{ helix_dir }}/{{ helix_participant_version }}/bin/participant-daemon.sh {{ helix_dir }}/{{ helix_participant_version }}/conf/airavata-server.properties
11 | Restart=on-abort
12 |
13 | [Install]
14 | WantedBy=multi-user.target
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/helix_setup/templates/post-wm/postwm.service.j2:
--------------------------------------------------------------------------------
1 | # {{ansible_managed}}
2 |
3 | [Unit]
4 | Description=postwm
5 | Before=
6 | After=network.target
7 |
8 | [Service]
9 | LOG_DIR={{ helix_post_wm_dist_log_dir }}
10 | ExecStart={{ helix_dir }}/{{ helix_post_wm_version }}/bin/post-wm-daemon.sh {{ helix_dir }}/{{ helix_post_wm_version }}/conf/airavata-server.properties
11 | Restart=on-abort
12 |
13 | [Install]
14 | WantedBy=multi-user.target
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/helix_setup/templates/pre-wm/prewm.service.j2:
--------------------------------------------------------------------------------
1 | # {{ansible_managed}}
2 |
3 | [Unit]
4 | Description=prewm
5 | Before=
6 | After=network.target
7 |
8 | [Service]
9 | LOG_DIR={{ helix_pre_wm_dist_log_dir }}
10 | ExecStart={{ helix_dir }}/{{ helix_pre_wm_version }}/bin/pre-wm-daemon.sh {{ helix_dir }}/{{ helix_pre_wm_version }}/conf/airavata-server.properties
11 | Restart=on-abort
12 |
13 | [Install]
14 | WantedBy=multi-user.target
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/httpd/templates/default.conf.j2:
--------------------------------------------------------------------------------
1 | # Setup default virtual host as a catchall to prevent resolving to the first defined virtual host
2 | # This will show the welcome page when requesting on the ip address or server default hostname
3 |
4 | DocumentRoot "{{ httpd_default_document_root[ansible_os_family] }}"
5 |
6 |
7 | DocumentRoot "{{ httpd_default_document_root[ansible_os_family] }}"
8 | SSLEngine on
9 | SSLCertificateFile "{{ httpd_default_ssl_vhost_certificate_location[ansible_os_family] }}"
10 | SSLCertificateKeyFile "{{ httpd_default_ssl_vhost_certificate_key_location[ansible_os_family] }}"
11 |
12 |
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/kafka/templates/kafka-rest-proxy.service.j2:
--------------------------------------------------------------------------------
1 | # {{ansible_managed}}
2 |
3 | [Unit]
4 | Description=Kafka-Rest-Proxy
5 | Before=
6 | After=network.target
7 |
8 | [Service]
9 | LOG_DIR={{ kafka_dir }}/logs
10 | ExecStart={{ kafka_dir }}/bin/kafka-rest-start {{ kafka_dir }}/etc/kafka-rest/kafka-rest.properties
11 | Restart=on-abort
12 |
13 | [Install]
14 | WantedBy=multi-user.target
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/kafka/templates/kafka.service.j2:
--------------------------------------------------------------------------------
1 | # {{ansible_managed}}
2 |
3 | [Unit]
4 | Description=Kafka
5 | Before=
6 | After=network.target
7 |
8 | [Service]
9 | LOG_DIR={{ kafka_dir }}/logs
10 | ExecStart={{ kafka_dir }}/bin/kafka-server-start {{ kafka_dir }}/etc/kafka/server.properties
11 | Restart=on-abort
12 |
13 | [Install]
14 | WantedBy=multi-user.target
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/keycloak/README.md:
--------------------------------------------------------------------------------
1 | ## Keycloak Deployment
2 |
3 | ###Configuration variables are distributed between :
4 | 1. `roles/keycloak/default/main.yml` - defaults for keycloak internal variables
5 | 2. `inventories/airavata-iam/group_vars/all.yml` - Global variables
6 |
7 | ###Running instructions:
8 |
9 | 1. Make sure all the variables are configured correctly
10 | 2. Dont use the Database role, rather set up the VM with default version provided by centos, tested with MySql 5.6 & MariaDB 5.5.52), Ansible role for the same is coming soon.
11 | 3. Ensure the host file: `inventories/airavata-iam/hosts` has correct IP address
12 | 4. For Standalone mode deployment : `ansible-playbook -i inventories/airavata-iam keycloak.yml`
13 |
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/keycloak/templates/basic-vhost.conf.j2:
--------------------------------------------------------------------------------
1 |
2 | ServerName {{ groups['keycloak'][0] }}
3 | DocumentRoot "/var/www/html"
4 |
5 |
6 | Options -Indexes +FollowSymLinks
7 | AllowOverride All
8 |
9 |
10 |
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/keycloak/templates/module.j2:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/pga/templates/default.conf.j2:
--------------------------------------------------------------------------------
1 | # Setup default virtual host as a catchall to prevent resolving to the first defined virtual host
2 | # This will show the welcome page when requesting on the ip address or server default hostname
3 |
4 | DocumentRoot "/www/default"
5 |
6 |
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/pga/templates/pga-vhost.conf.j2:
--------------------------------------------------------------------------------
1 | {% if vhost_server_redirect is defined %}
2 |
3 | ServerName {{ vhost_server_redirect }}
4 | Redirect "/" "http://{{ vhost_servername }}"
5 |
6 | {% endif %}
7 |
8 |
9 | ServerName {{ vhost_servername }}
10 | {% if vhost_serveralias is defined %}
11 | ServerAlias {{ vhost_serveralias }}
12 | {% endif %}
13 |
14 | DocumentRoot {{ doc_root_dir }}/public
15 |
16 | AllowOverride All
17 | php_value upload_max_filesize {{ php_upload_max_filesize }}
18 | php_value post_max_size {{ php_post_max_size }}
19 |
20 | ErrorLog {{ httpd_log_dir[ansible_os_family] }}/{{ gateway_id }}.error.log
21 | CustomLog {{ httpd_log_dir[ansible_os_family] }}/{{ gateway_id }}.requests.log combined
22 |
23 |
24 |
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/rabbitmq/vars/main.yml:
--------------------------------------------------------------------------------
1 | #
2 | #
3 | # Licensed to the Apache Software Foundation (ASF) under one
4 | # or more contributor license agreements. See the NOTICE file
5 | # distributed with this work for additional information
6 | # regarding copyright ownership. The ASF licenses this file
7 | # to you under the Apache License, Version 2.0 (the
8 | # "License"); you may not use this file except in compliance
9 | # with the License. You may obtain a copy of the License at
10 | #
11 | # http://www.apache.org/licenses/LICENSE-2.0
12 | #
13 | # Unless required by applicable law or agreed to in writing,
14 | # software distributed under the License is distributed on an
15 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 | # KIND, either express or implied. See the License for the
17 | # specific language governing permissions and limitations
18 | # under the License.
19 | #
20 |
21 | ---
22 | management_plugin_port: "15672"
23 |
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/tusd/templates/tus-temp-dir-cleanup.cron.j2:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # Delete files that are older than 7 days
4 | find {{ tusd_upload_dir }} -mtime +7 -exec rm -rf {} \;
5 |
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/zabbix/files/check-needs-restarting.cron:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | /usr/bin/needs-restarting -r > /dev/null
4 | echo $? > /etc/zabbix/needs-restarting
5 |
6 | exit 0
7 |
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/zookeeper/templates/java.env.j2:
--------------------------------------------------------------------------------
1 | export ZOO_LOG_DIR={{ zookeeper_dir }}/logs
--------------------------------------------------------------------------------
/dev-tools/ansible/roles/zookeeper/templates/zookeeper.service.j2:
--------------------------------------------------------------------------------
1 | # {{ansible_managed}}
2 |
3 | [Unit]
4 | Description=ZooKeeper
5 |
6 |
7 | [Service]
8 | Type=forking
9 | ExecStart={{zookeeper_dir}}/bin/zkServer.sh start
10 | ExecStop={{ zookeeper_dir }}/bin/zkServer.sh stop
11 | Restart=always
12 | TimeoutSec=300
13 | User={{ user }}
14 |
15 | [Install]
16 | WantedBy=multi-user.target
17 |
--------------------------------------------------------------------------------
/dev-tools/deployment-scripts/distribution_backup.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | log() {
4 | echo "$(date '+%Y-%m-%d %H:%M:%S') - $1"
5 | }
6 |
7 | # ================================
8 | # Create the Backup Directory
9 | # ================================
10 | BACKUP_DIR="./backup/$(date +%Y-%m-%d)"
11 | mkdir -p $BACKUP_DIR
12 |
13 | # ================================
14 | # Backup the Distribution
15 | # ================================
16 | log "Backing up the Distribution..."
17 | cp -r ./apache-airavata-api-server-0.21-SNAPSHOT $BACKUP_DIR/
18 | cp -r ./apache-airavata-agent-service-0.21-SNAPSHOT $BACKUP_DIR/
19 | cp -r ./apache-airavata-research-service-0.21-SNAPSHOT $BACKUP_DIR/
20 | cp -r ./apache-airavata-file-server-0.21-SNAPSHOT $BACKUP_DIR/
21 | cp -r ./apache-airavata-restproxy-0.21-SNAPSHOT $BACKUP_DIR/
22 | log "Distribution backed up."
23 |
--------------------------------------------------------------------------------
/dev-tools/job-status-rest-server/README.MD:
--------------------------------------------------------------------------------
1 | Python Flask framework based REST API for sending job statuses from clusters
2 | ============================================================================
3 |
4 | Requirement
5 | * pip install flask
6 | * pip install flask-restful
7 |
8 | Sample CURL Command
9 | curl -X POST -d "job_id=ABC&job_name=Test&status=0&emails[]=supun.nakandala@gmail.com&emails[]=eabeysin@iu.edu" http://localhost:8089/job_status
--------------------------------------------------------------------------------
/dev-tools/load-client/src/main/resources/conf/load-config.yml:
--------------------------------------------------------------------------------
1 | apiHost: apidev.scigap.org
2 | apiPort: 9930
3 | configurations:
4 | - experimentBaseName: "TestEcho"
5 | userId: "dimuthu"
6 | gatewayId: "seagrid"
7 | projectId: "DefaultProject_7ac38275-0ca1-433a-ab6a-630c8c1df2ef"
8 | applicationInterfaceId: "Echo_3f480d1f-ea86-4018-94bb-015423d66a1c"
9 | computeResourceId: "bigred2.uits.iu.edu_ac140dca-3c88-46d8-b9ed-875d96ea6908"
10 | storageResourceId: "pgadev.scigap.org_7ddf28fd-d503-4ff8-bbc5-3279a7c3b99e"
11 | keycloakUrl: "https://iamdev.scigap.org/auth"
12 | keycloakClientId: "pga"
13 | keycloakClientSecret: "secret"
14 |
15 | inputs:
16 | - name: "Input-to-Echo"
17 | value: "Test"
18 |
19 | queue: "cpu"
20 | wallTime: 60
21 | cpuCount: 2
22 | nodeCount: 1
23 | physicalMemory: 512
24 |
25 | concurrentUsers: 1
26 | iterationsPerUser: 2
27 | randomMSDelayWithinSubmissions: 100
28 |
--------------------------------------------------------------------------------
/dev-tools/simstream/example/openmm_example/application/trajectory.dcd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apache/airavata/e6fc9582fcd38e102aad0ef5dd7f92e49cb7e5f5/dev-tools/simstream/example/openmm_example/application/trajectory.dcd
--------------------------------------------------------------------------------
/dev-tools/simstream/example/openmm_example/openmm_stream.slurm:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | #SBATCH -J remote_logger # Job name
4 | #SBATCH -o remote_logger.o%j # Name of stdout output file(%j expands to jobId)
5 | #SBATCH -e remote_logger.o%j # Name of stderr output file(%j expands to jobId)
6 | #SBATCH -p development # large queue for jobs > 256 nodes
7 | #SBATCH -t 00:10:00 # Run time (hh:mm:ss) - 1.5 hours
8 | #SBATCH -n 1 # Nodes to use
9 |
10 | #module use "/home1/03947/tg832463/modulefiles"
11 | #module load openmm
12 |
13 | touch test.txt
14 |
15 | python openmm_streamer.py ./application/sim.out ./application/trajectory.dcd ./application/input.pdb ./application/input.pdb &
16 |
17 | cd application
18 | python alanine_dipeptide.py > sim.out
19 | sleep 5
20 |
--------------------------------------------------------------------------------
/dev-tools/simstream/example/openmm_example/test.txt:
--------------------------------------------------------------------------------
1 | ====
2 |
3 | Licensed to the Apache Software Foundation (ASF) under one
4 | or more contributor license agreements. See the NOTICE file
5 | distributed with this work for additional information
6 | regarding copyright ownership. The ASF licenses this file
7 | to you under the Apache License, Version 2.0 (the
8 | "License"); you may not use this file except in compliance
9 | with the License. You may obtain a copy of the License at
10 |
11 | http://www.apache.org/licenses/LICENSE-2.0
12 |
13 | Unless required by applicable law or agreed to in writing,
14 | software distributed under the License is distributed on an
15 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 | KIND, either express or implied. See the License for the
17 | specific language governing permissions and limitations
18 | under the License.
19 | ====
20 |
21 |
--------------------------------------------------------------------------------
/dev-tools/simstream/example/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "url": "amqp://guest:guest@localhost:5672",
3 | "exchange": "simstream",
4 | "queue": "test",
5 | "exchange_type": "topic"
6 | }
7 |
--------------------------------------------------------------------------------
/examples/php-cli-samples/README:
--------------------------------------------------------------------------------
1 | This directory contains files that can be used to test the Apache Airavata client API using PHP command-line tools.
2 | You will need PHP installed on your test environment.
3 | To run a command from a terminal shell prompt, use, for example:
4 | [prompt%> php createProject.php project-name
5 |
6 | Please see the wiki page for detailed descriptions and usage of the scripts:
7 | https://cwiki.apache.org/confluence/display/AIRAVATA/Airavata+API+PHP+Client+Samples
8 |
--------------------------------------------------------------------------------
/examples/python_sdk_experiment_tracking.md:
--------------------------------------------------------------------------------
1 | # Python SDK - Launch and Track Experiments
2 |
3 |
--------------------------------------------------------------------------------
/examples/python_sdk_jupyter_notebooks.md:
--------------------------------------------------------------------------------
1 | # Python SDK - Running Jupyter Notebooks
2 |
3 |
--------------------------------------------------------------------------------
/examples/sharing-service-docs/sharing_overview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apache/airavata/e6fc9582fcd38e102aad0ef5dd7f92e49cb7e5f5/examples/sharing-service-docs/sharing_overview.png
--------------------------------------------------------------------------------
/keystores/airavata.sym.p12:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apache/airavata/e6fc9582fcd38e102aad0ef5dd7f92e49cb7e5f5/keystores/airavata.sym.p12
--------------------------------------------------------------------------------
/modules/agent-framework/agent-service/.gitignore:
--------------------------------------------------------------------------------
1 | /target
--------------------------------------------------------------------------------
/modules/agent-framework/agent-service/src/main/resources/distribution/conf/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apache/airavata/e6fc9582fcd38e102aad0ef5dd7f92e49cb7e5f5/modules/agent-framework/agent-service/src/main/resources/distribution/conf/.gitkeep
--------------------------------------------------------------------------------
/modules/agent-framework/airavata-agent/.gitignore:
--------------------------------------------------------------------------------
1 | /airavata-agent*
2 | /jupyter/
3 | go.sum
4 | *.egg-info
5 | *.ipynb_checkpoints
6 | *.sif
--------------------------------------------------------------------------------
/modules/agent-framework/airavata-agent/agent-communication.proto:
--------------------------------------------------------------------------------
1 | ../proto/agent-communication.proto
--------------------------------------------------------------------------------
/modules/agent-framework/airavata-agent/application/README.md:
--------------------------------------------------------------------------------
1 | # Applications Scripts - Agent
2 |
3 | ## NAMD
4 |
5 | ### Expanse
6 | ```sh
7 | NAMD_CPU_MODULES="cpu/0.17.3b gcc/10.2.0 openmpi/4.1.1"
8 | NAMD_CPU_PATH=/home/scigap/applications/NAMD_3.1alpha2_Linux-x86_64-multicore
9 | NAMD_GPU_MODULES="gpu/0.17.3b"
10 | NAMD_GPU_PATH=/home/scigap/applications/NAMD_3.0.1_Linux-x86_64-multicore-CUDA
11 | ```
12 |
13 | ### Delta
14 | ```sh
15 | NAMD_CPU_MODULES="openmpi/4.1.6 fftw/3.3.10"
16 | NAMD_CPU_PATH=/sw/namd/NAMD_3.0b3_Linux-x86_64-multicore
17 | NAMD_GPU_MODULES="namd3/2024.02.mulitcore_cuda.s11"
18 | NAMD_GPU_PATH=/sw/namd/NAMD_3.0b3_Linux-x86_64-multicore-CUDA
19 | ```
20 |
--------------------------------------------------------------------------------
/modules/agent-framework/airavata-agent/application/pmemd_cuda.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash -x
2 | set -euo pipefail
3 |
4 | srun pmemd.cuda "$@"
5 |
--------------------------------------------------------------------------------
/modules/agent-framework/airavata-agent/application/pmemd_mpi.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash -x
2 | set -euo pipefail
3 |
4 | srun pmemd.MPI "$@"
5 |
--------------------------------------------------------------------------------
/modules/agent-framework/airavata-agent/application/psi4.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash -x
2 | set -euo pipefail
3 |
4 | psi4 "$@"
5 |
--------------------------------------------------------------------------------
/modules/agent-framework/airavata-fuse/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /bin
3 | /data
4 | /tmp
--------------------------------------------------------------------------------
/modules/agent-framework/airavata-fuse/data/foo/bar.txt:
--------------------------------------------------------------------------------
1 | test file - bar.txt
--------------------------------------------------------------------------------
/modules/agent-framework/airavata-fuse/data/hello.txt:
--------------------------------------------------------------------------------
1 | hello world!
--------------------------------------------------------------------------------
/modules/agent-framework/airavata-fuse/src/grpcfs/go.mod:
--------------------------------------------------------------------------------
1 | module grpcfs
2 |
3 | go 1.23.0
4 |
5 | toolchain go1.24.4
6 |
7 | require (
8 | github.com/jacobsa/fuse v0.0.0-20250702080931-3e9d24d5e3ff
9 | google.golang.org/grpc v1.73.0
10 | google.golang.org/protobuf v1.36.6
11 | )
12 |
13 | require (
14 | golang.org/x/net v0.41.0 // indirect
15 | golang.org/x/sys v0.33.0 // indirect
16 | golang.org/x/text v0.26.0 // indirect
17 | google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect
18 | )
19 |
--------------------------------------------------------------------------------
/modules/agent-framework/airavata-fuse/src/grpcfs_client/go.mod:
--------------------------------------------------------------------------------
1 | module client
2 |
3 | go 1.23.0
4 |
5 | replace grpcfs => ../grpcfs
6 |
7 | require (
8 | github.com/jacobsa/fuse v0.0.0-20250702080931-3e9d24d5e3ff
9 | grpcfs v0.0.0-00010101000000-000000000000
10 | )
11 |
12 | require (
13 | golang.org/x/net v0.41.0 // indirect
14 | golang.org/x/sys v0.33.0 // indirect
15 | golang.org/x/text v0.26.0 // indirect
16 | google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect
17 | google.golang.org/grpc v1.73.0 // indirect
18 | google.golang.org/protobuf v1.36.6 // indirect
19 | )
20 |
--------------------------------------------------------------------------------
/modules/agent-framework/airavata-fuse/src/grpcfs_server/go.mod:
--------------------------------------------------------------------------------
1 | module server
2 |
3 | go 1.23.0
4 |
5 | toolchain go1.24.4
6 |
7 | replace grpcfs => ../grpcfs
8 |
9 | require (
10 | golang.org/x/sys v0.33.0
11 | google.golang.org/grpc v1.73.0
12 | google.golang.org/protobuf v1.36.6
13 | grpcfs v0.0.0-00010101000000-000000000000
14 | )
15 |
16 | require (
17 | golang.org/x/net v0.41.0 // indirect
18 | golang.org/x/text v0.26.0 // indirect
19 | google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 // indirect
20 | )
21 |
--------------------------------------------------------------------------------
/modules/file-server/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | spring.servlet.multipart.max-file-size=10MB
2 | spring.servlet.multipart.max-request-size=10MB
3 |
4 | regserver.server.host=airavata.host
5 | regserver.server.port=8970
6 | credential.store.server.host=airavata.host
7 | credential.store.server.port=8960
8 |
9 | server.port=8050
10 |
--------------------------------------------------------------------------------
/modules/file-server/src/main/resources/distribution/conf/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apache/airavata/e6fc9582fcd38e102aad0ef5dd7f92e49cb7e5f5/modules/file-server/src/main/resources/distribution/conf/.gitkeep
--------------------------------------------------------------------------------
/modules/ide-integration/.gitignore:
--------------------------------------------------------------------------------
1 | database_data/
2 |
--------------------------------------------------------------------------------
/modules/registry-db-migrator/README.md:
--------------------------------------------------------------------------------
1 | 0.7 => 0.8
2 | ==============
3 |
4 | 1. Build registry-db-migrator
5 | 2. Copy registry-db-migrator-0.8-SNAPSHOT.jar and commons-cli-1.1.jar (you will find this in your maven repository) to /lib
6 | 3. Copy db-migrate.sh file to /bin
7 | 4. Make sure previous version of airavata database is up and running
8 | 5. Run db-migrate.sh script file
9 | ./db-migrate.sh -url jdbc:mysql://localhost:3306/experiment_catalog -user airavata -pwd airavata -v 0.7
--------------------------------------------------------------------------------
/modules/research-framework/research-hub/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM jupyterhub/jupyterhub:latest
2 |
3 | RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
4 | RUN pip install oauthenticator requests pyjwt dockerspawner jupyterhub-idle-culler ipywidgets
5 |
6 | COPY jupyterhub_config.py /srv/jupyterhub/jupyterhub_config.py
7 | COPY custom_templates /srv/jupyterhub/custom_templates
8 |
9 | ENV JUPYTERHUB_CONFIG=/srv/jupyterhub/jupyterhub_config.py
10 | ENV PYTHONPATH=/srv/jupyterhub
11 |
12 | EXPOSE 20000
13 |
14 | CMD ["jupyterhub"]
--------------------------------------------------------------------------------
/modules/research-framework/research-hub/docker-compose.yaml:
--------------------------------------------------------------------------------
1 | services:
2 | jupyterhub:
3 | build: .
4 | container_name: jupyterhub
5 | ports:
6 | - "8000:20000"
7 | environment:
8 | OAUTH_CLIENT_ID: "cs-jupyterlab"
9 | OAUTH_CLIENT_SECRET: "DxeMtfiWU1qkDEmaGHf13RDahCujzhy1"
10 | JUPYTERHUB_CRYPT_KEY: "a99323294a5d6f9b1d0e7e33450dff44db664264231b985e069c6eba8f9a3e09"
11 | DOCKER_NETWORK_NAME: jupyterhub_network
12 | DOCKER_NOTEBOOK_IMAGE: cybershuttle/dev_jupyterlab-base
13 | volumes:
14 | - ./jupyterlab:/home/jovyan
15 | - ./jupyterhub_config.py:/srv/jupyterhub/jupyterhub_config.py
16 | - ./custom_templates:/srv/jupyterhub/custom_templates
17 | - /var/run/docker.sock:/var/run/docker.sock
18 | restart: always
19 | networks:
20 | - jupyterhub_network
21 |
22 | networks:
23 | jupyterhub_network:
24 | name: jupyterhub_network
--------------------------------------------------------------------------------
/modules/research-framework/research-hub/user-container/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM quay.io/jupyter/base-notebook:latest
2 |
3 | COPY init.sh /usr/local/bin/init.sh
4 |
5 | USER root
6 | RUN chmod +x /usr/local/bin/init.sh
7 | RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*
8 |
9 | USER $NB_USER
10 | RUN pip install ipywidgets jupyterlab-git
11 |
12 | CMD ["start-notebook.py"]
--------------------------------------------------------------------------------
/modules/research-framework/research-hub/user-container/Makefile:
--------------------------------------------------------------------------------
1 | deploy:
2 | docker build --platform linux/x86_64 -t cybershuttle/jupyterlab-base . && \
3 | docker push cybershuttle/jupyterlab-base
--------------------------------------------------------------------------------
/modules/research-framework/research-hub/user-container/init.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | TARGET_DIR="/home/jovyan/work"
4 | SHARED_TMP="/cybershuttle_data"
5 |
6 | mkdir -p "$TARGET_DIR"
7 |
8 | if [ ! -f "$TARGET_DIR/.initialized" ]; then
9 | chown -R jovyan:users "$TARGET_DIR"
10 |
11 | # If $GIT_URL is set, clone the repo into the workspace
12 | if [ -n "$GIT_URL" ]; then
13 | echo "Cloning repo from $GIT_URL..."
14 | cd "$TARGET_DIR"
15 | git clone "$GIT_URL" .
16 | chown -R jovyan:users .
17 | fi
18 | touch "$TARGET_DIR/.initialized"
19 | else
20 | echo "Docker default files already exist, skipping copy."
21 | fi
22 |
23 | if [ -d "$SHARED_TMP" ]; then
24 | echo "Linking shared data to workspace..."
25 | ln -s "$SHARED_TMP" "$TARGET_DIR/cybershuttle_data"
26 | fi
27 |
28 | exec "$@"
29 |
--------------------------------------------------------------------------------
/modules/research-framework/research-service/src/main/compose/dbinit/01-init-db.sql:
--------------------------------------------------------------------------------
1 | CREATE DATABASE IF NOT EXISTS research_catalog;
2 |
3 | CREATE USER IF NOT EXISTS 'airavata'@'%' IDENTIFIED BY '123456';
4 | ALTER USER 'airavata'@'%' IDENTIFIED BY '123456';
5 |
6 | GRANT ALL PRIVILEGES ON *.* TO 'airavata'@'%';
7 |
8 | FLUSH PRIVILEGES;
--------------------------------------------------------------------------------
/modules/research-framework/research-service/src/main/resources/distribution/conf/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apache/airavata/e6fc9582fcd38e102aad0ef5dd7f92e49cb7e5f5/modules/research-framework/research-service/src/main/resources/distribution/conf/.gitkeep
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/api/__init__.py:
--------------------------------------------------------------------------------
1 | """
2 | SimExR API - FastAPI application for simulation execution and reasoning.
3 |
4 | This module provides REST APIs for:
5 | - Simulation execution and batch processing
6 | - Reasoning agent interactions
7 | - Database operations and results management
8 | - System health and testing
9 | """
10 |
11 | from .main import app
12 |
13 | __all__ = ["app"]
14 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/api/routers/__init__.py:
--------------------------------------------------------------------------------
1 | """API router modules."""
2 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/code/__init__.py:
--------------------------------------------------------------------------------
1 | """
2 | Code processing module for SimExR.
3 |
4 | This module handles code refactoring, testing, and utility functions
5 | for processing simulation scripts.
6 | """
7 |
8 | __all__ = []
9 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/code/models/param_ref.py:
--------------------------------------------------------------------------------
1 | from dataclasses import dataclass
2 |
3 |
4 | @dataclass
5 | class ParamRef:
6 | param: str
7 | line: int
8 | col: int
9 | kind: str # 'subscript' | 'get' | 'alias' | 'name'
10 | context: str # one-line preview + caret
11 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/code/test/__init__.py:
--------------------------------------------------------------------------------
1 | """Code testing utilities."""
2 |
3 | from .simulation_refiner import SimulationRefiner
4 |
5 | __all__ = ["SimulationRefiner"]
6 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/config.yaml.example:
--------------------------------------------------------------------------------
1 | # SimExR Configuration File
2 | # Copy this file to config.yaml and update with your actual values
3 |
4 | openai:
5 | # Replace with your actual OpenAI API key
6 | # Get your API key from: https://platform.openai.com/account/api-keys
7 | api_key: "YOUR_OPENAI_API_KEY_HERE"
8 |
9 | database:
10 | # Path to the SQLite database file
11 | path: "mcp.db"
12 |
13 | media:
14 | # Root directory for storing simulation results and media files
15 | root: "results_media"
16 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/core/__init__.py:
--------------------------------------------------------------------------------
1 | # Core module stub
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/db/config/__init__.py:
--------------------------------------------------------------------------------
1 | """Configuration module for database connections."""
2 |
3 | from .database import DatabaseConfig
4 |
5 | __all__ = ["DatabaseConfig"]
6 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/db/models/__init__.py:
--------------------------------------------------------------------------------
1 | """Model classes for database entities."""
2 |
3 | from .base import BaseModel
4 | from .simulation import SimulationResult
5 |
6 | __all__ = ["BaseModel", "SimulationResult"]
7 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/db/repositories/__init__.py:
--------------------------------------------------------------------------------
1 | """Repository classes for data access."""
2 |
3 | from .base import BaseRepository
4 | from .reasoning import ReasoningRepository
5 | from .simulation import SimulationRepository
6 |
7 | __all__ = ["BaseRepository", "ReasoningRepository", "SimulationRepository"]
8 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/db/repositories/reasoning.py:
--------------------------------------------------------------------------------
1 |
2 | from pathlib import Path
3 | from typing import List
4 | import json
5 | from ..config.database import DatabaseConfig
6 |
7 | class ReasoningRepository:
8 | def __init__(self, db_config: DatabaseConfig = None):
9 | self.db_config = db_config or DatabaseConfig()
10 |
11 | def store_report(self, model_id: str, question: str, answer: str, image_paths: List[str]) -> None:
12 | """
13 | Insert a reasoning report into the `reasoning_agent` table.
14 | """
15 | with self.db_config.get_sqlite_connection() as conn:
16 | conn.execute("""
17 | INSERT INTO reasoning_agent (model_id, question, answer, images)
18 | VALUES (?, ?, ?, ?)
19 | """, (
20 | model_id,
21 | question,
22 | answer,
23 | json.dumps(image_paths, ensure_ascii=False),
24 | ))
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/db/services/__init__.py:
--------------------------------------------------------------------------------
1 | """Service classes for business logic."""
2 |
3 | from .reasoning import ReasoningService
4 | from .results import ResultsService
5 | from .store import StorageService
6 |
7 | __all__ = ["ReasoningService", "ResultsService", "StorageService"]
8 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/db/utils/__init__.py:
--------------------------------------------------------------------------------
1 | """Utility modules for database operations."""
2 |
3 | from .hash_utils import generate_model_id
4 | from .json_utils import _safe_parse
5 | from .transform_utils import _explode_row, _is_listy, _to_list
6 |
7 | __all__ = ["generate_model_id", "_safe_parse", "_explode_row", "_is_listy", "_to_list"]
8 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/db/utils/hash_utils.py:
--------------------------------------------------------------------------------
1 | import hashlib
2 | from pathlib import Path
3 | from typing import Union
4 |
5 | HASH_LENGTH = 12
6 |
7 | def generate_model_id(model_name: str, model_script_path: Union[str, Path]) -> str:
8 | """
9 | Generate a unique model identifier by combining the model name with a content hash.
10 |
11 | Args:
12 | model_name: Name of the machine learning model
13 | model_script_path: Path to the model's script file
14 |
15 | Returns:
16 | str: Combined identifier in format 'model_name_contenthash'
17 | """
18 | def calculate_content_hash(file_content: str) -> str:
19 | return hashlib.sha1(file_content.encode()).hexdigest()[:HASH_LENGTH]
20 |
21 | script_content = Path(model_script_path).read_text()
22 | content_hash = calculate_content_hash(script_content)
23 |
24 | return f"{model_name}_{content_hash}"
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/execute/loader/__init__.py:
--------------------------------------------------------------------------------
1 | """Import module for loading and transforming external scripts."""
2 |
3 | from .simulate_loader import SimulateLoader
4 | from .transform_code import ExternalScriptImporter
5 |
6 | __all__ = ["SimulateLoader", "ExternalScriptImporter"]
7 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/execute/logging/__init__.py:
--------------------------------------------------------------------------------
1 | """Logging module for execution tracking."""
2 |
3 | from .run_logger import RunLogger
4 |
5 | __all__ = ["RunLogger"]
6 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/execute/model/__init__.py:
--------------------------------------------------------------------------------
1 | """Model classes for execution results."""
2 |
3 | from .smoke_test_result import SmokeTestResult
4 |
5 | __all__ = ["SmokeTestResult"]
6 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/execute/model/smoke_test_result.py:
--------------------------------------------------------------------------------
1 | from dataclasses import dataclass
2 |
3 |
4 | @dataclass
5 | class SmokeTestResult:
6 | ok: bool
7 | log: str # "OK" or traceback/message
8 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/execute/persistence/__init__.py:
--------------------------------------------------------------------------------
1 | """Persistence module for saving and loading simulation scripts."""
2 |
3 | from .save_script import ScriptRepository
4 |
5 | __all__ = ["ScriptRepository"]
6 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/execute/run/__init__.py:
--------------------------------------------------------------------------------
1 | """Execution runners for single and batch simulations."""
2 |
3 | from .batch_runner import BatchRunner
4 | from .simulation_runner import SimulationRunner
5 |
6 | __all__ = ["BatchRunner", "SimulationRunner"]
7 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/execute/test/__init__.py:
--------------------------------------------------------------------------------
1 | """Testing and refinement modules for simulation code."""
2 |
3 | # FixAgent import made lazy to avoid langchain_openai dependency at startup
4 | # from .fix_agent import FixAgent
5 | from .simulation_refiner import SimulationRefiner
6 | from .smoke_tester import SmokeTester
7 |
8 | __all__ = ["SimulationRefiner", "SmokeTester"] # FixAgent removed to avoid circular imports
9 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/execute/utils/__init__.py:
--------------------------------------------------------------------------------
1 | """Utility modules for execution support."""
2 |
3 | from .black_formatter import BlackFormatter
4 | from .error_context import ErrorContext
5 | from .json_utlils import json_convert
6 | from .model_utils import make_variant_name
7 | from .python_utils import CodeUtils
8 | from .requirements_manager import RequirementManager
9 |
10 | __all__ = [
11 | "BlackFormatter",
12 | "ErrorContext",
13 | "json_convert",
14 | "make_variant_name",
15 | "CodeUtils",
16 | "RequirementManager"
17 | ]
18 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/execute/utils/black_formatter.py:
--------------------------------------------------------------------------------
1 | import subprocess
2 | from dataclasses import dataclass
3 | from typing import Sequence
4 |
5 | from execute.base import BaseFormatter
6 |
7 |
8 | @dataclass
9 | class BlackFormatter(BaseFormatter):
10 | """Formats Python code via black; falls back to original code on failure."""
11 | black_cmd: Sequence[str] = ("black", "-q", "-")
12 |
13 | def format(self, code: str) -> str:
14 | try:
15 | res = subprocess.run(
16 | list(self.black_cmd),
17 | input=code,
18 | text=True,
19 | capture_output=True,
20 | check=True,
21 | )
22 | return res.stdout
23 | except Exception:
24 | return code
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/reasoning/agent/__init__.py:
--------------------------------------------------------------------------------
1 | """Agent module for reasoning operations."""
2 |
3 | from .loop import ReasoningAgent
4 |
5 | __all__ = ["ReasoningAgent"]
6 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/reasoning/config/__init__.py:
--------------------------------------------------------------------------------
1 | """Configuration module for reasoning tools."""
2 |
3 | from .tools import _openai_tools_spec
4 |
5 | __all__ = ["_openai_tools_spec"]
6 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/reasoning/helpers/__init__.py:
--------------------------------------------------------------------------------
1 | """Helper modules for reasoning operations."""
2 |
3 | from .chat_utils import prune_history
4 | from .prompts import _default_system_prompt, _append_tool_message
5 |
6 | __all__ = ["prune_history", "_default_system_prompt", "_append_tool_message"]
7 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/reasoning/messages/__init__.py:
--------------------------------------------------------------------------------
1 | """Message handling for LLM communication."""
2 |
3 | from .llm_client import LLMClient
4 | from .model import ModelMessage
5 | from .openai_client import OpenAIChatClient
6 |
7 | __all__ = ["LLMClient", "ModelMessage", "OpenAIChatClient"]
8 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/reasoning/messages/llm_client.py:
--------------------------------------------------------------------------------
1 | from typing import Protocol, List, Dict, Any
2 |
3 | from reasoning.messages.model import ModelMessage
4 |
5 |
6 | class LLMClient(Protocol):
7 | def chat(self, messages: List[ModelMessage], tools: List[Dict[str, Any]]) -> ModelMessage: ...
8 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/reasoning/messages/model.py:
--------------------------------------------------------------------------------
1 | from typing import TypedDict
2 |
3 |
4 | class ModelMessage(TypedDict, total=False):
5 | role: str
6 | content: str
7 | tool_calls: list # raw passthrough of SDK fields
8 |
9 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/reasoning/model/__init__.py:
--------------------------------------------------------------------------------
1 | """Model classes for reasoning results."""
2 |
3 | from .reasoning_result import ReasoningResult
4 |
5 | __all__ = ["ReasoningResult"]
6 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/reasoning/model/reasoning_result.py:
--------------------------------------------------------------------------------
1 | from dataclasses import dataclass
2 | from typing import List, Dict, Any
3 |
4 |
5 | @dataclass
6 | class ReasoningResult:
7 | history: List[Dict[str, Any]]
8 | code_map: Dict[int, str]
9 | answer: str
10 | images: List[str]
11 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/reasoning/tools/__init__.py:
--------------------------------------------------------------------------------
1 | """Tool modules for reasoning operations."""
2 |
3 | from .final_answer import FinalAnswerTool
4 | from .python_exec import PythonExecTool
5 | from .simulate_exec import SimulateTools
6 |
7 | __all__ = ["FinalAnswerTool", "PythonExecTool", "SimulateTools"]
8 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/reasoning/utils/__init__.py:
--------------------------------------------------------------------------------
1 | """Utility modules for reasoning support."""
2 |
3 | from .extract_code_map import extract_code_map
4 | from .history import prune_history
5 | from .json_utils import _safe_parse
6 | from .load_results import load_results
7 |
8 | __all__ = ["extract_code_map", "prune_history", "_safe_parse", "load_results"]
9 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/reasoning/utils/extract_code_map.py:
--------------------------------------------------------------------------------
1 | import json
2 | from typing import List, Dict, Any
3 |
4 | def extract_code_map(history: List[Dict[str, Any]]) -> Dict[int, str]:
5 | """
6 | Scan the agent’s conversation history and pull out every python_exec
7 | call’s `code` snippet, keyed by the step index in `history`.
8 | """
9 | code_map: Dict[int, str] = {}
10 | for idx, entry in enumerate(history):
11 | # assistant function‐call entries look like:
12 | # {"role":"assistant", "function_call": {"name":"python_exec", "arguments": {"code": "..."}}, ...}
13 | fc = entry.get("function_call")
14 | if fc and isinstance(fc, dict):
15 | args = fc.get("arguments", {})
16 | args = json.loads(args)
17 | code = args.get("code")
18 | if code:
19 | code_map[idx] = code
20 | return code_map
21 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/reasoning/utils/json_utils.py:
--------------------------------------------------------------------------------
1 | import json
2 |
3 |
4 | def _safe_parse(d: str | None) -> dict:
5 | try:
6 | val = json.loads(d)
7 | return val if isinstance(val, dict) else {}
8 | except Exception:
9 | return {}
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/requirements.txt:
--------------------------------------------------------------------------------
1 | # SimExR Framework Dependencies
2 | # Core Framework
3 | fastapi>=0.104.0
4 | uvicorn[standard]>=0.24.0
5 | pydantic>=2.5.0
6 |
7 | # OpenAI Integration
8 | openai>=1.3.0
9 |
10 | # Scientific Computing
11 | numpy>=1.24.0
12 | scipy>=1.11.0
13 | pandas>=2.1.0
14 | matplotlib>=3.7.0
15 |
16 | # Database
17 | sqlalchemy>=2.0.0
18 |
19 | # Progress Bars
20 | tqdm>=4.66.0
21 |
22 | # HTTP Client
23 | requests>=2.31.0
24 | httpx>=0.25.0
25 |
26 | # Code Processing
27 | ast>=0.0.2
28 | astunparse>=1.6.3
29 |
30 | # Utilities
31 | python-multipart>=0.0.6
32 | python-dotenv>=1.0.0
33 | pyyaml>=6.0.1
34 |
35 | # Optional: LangChain for advanced reasoning
36 | langchain>=0.1.0
37 | langchain-openai>=0.0.5
38 |
39 | # Development and Testing
40 | pytest>=7.4.0
41 | pytest-asyncio>=0.21.0
42 | black>=23.0.0
43 | flake8>=6.0.0
44 |
--------------------------------------------------------------------------------
/modules/research-framework/simexr_mod/utils/logger.py:
--------------------------------------------------------------------------------
1 | # delete the failing import
2 | # from utils.logger import setup_logging
3 |
4 | import logging
5 |
6 | def setup_logging(name: str):
7 | logging.basicConfig(level=logging.INFO,
8 | format="%(asctime)s %(levelname)s %(message)s")
9 | return logging.getLogger(name)
10 |
11 | logger = setup_logging("sandbox_executor")
12 |
--------------------------------------------------------------------------------
/modules/restproxy/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | restproxy.broker.url=airavata.host:9092
2 | server.port=8082
--------------------------------------------------------------------------------
/modules/restproxy/src/main/resources/distribution/conf/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/apache/airavata/e6fc9582fcd38e102aad0ef5dd7f92e49cb7e5f5/modules/restproxy/src/main/resources/distribution/conf/.gitkeep
--------------------------------------------------------------------------------
/thrift-interface-descriptions/base-api/base_api.thrift:
--------------------------------------------------------------------------------
1 | namespace java org.apache.airavata.base.api
2 | namespace php Airavata.Base.API
3 | namespace cpp apache.airavata.base.api
4 | namespace perl ApacheAiravataBaseAPI
5 | namespace py airavata.base.api
6 | namespace js ApacheAiravataBaseAPI
7 |
8 | service BaseAPI {
9 | string getAPIVersion()
10 | }
--------------------------------------------------------------------------------