├── .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 | 11 | -------------------------------------------------------------------------------- /.run/AgentServiceApplication.run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 15 | -------------------------------------------------------------------------------- /.run/FileServerApplication.run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | -------------------------------------------------------------------------------- /.run/JobEngineStarter.run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | -------------------------------------------------------------------------------- /.run/JobMonitorStarter.run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | -------------------------------------------------------------------------------- /.run/ResearchServiceApplication.run.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 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 | } --------------------------------------------------------------------------------