├── .dockerignore ├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── config.yml │ ├── documentation.md │ └── feature_request.md ├── dependabot.yml ├── pull_request_template.md ├── release-drafter.yml └── workflows │ ├── ci.yml │ ├── generate_gh_pages.yml │ ├── java-client-v4-build.yml │ ├── java-client-v4-integration-tests.yml │ ├── java-client-v4-publish-release.yml │ ├── publish.yml │ ├── publish_build.yaml │ └── release_draft.yml ├── .gitignore ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── OSSMETADATA ├── README.md ├── RELATED.md ├── ROADMAP.md ├── SECURITY.md ├── USERS.md ├── amqp ├── build.gradle └── src │ ├── main │ └── java │ │ └── com │ │ └── netflix │ │ └── conductor │ │ └── contribs │ │ └── queue │ │ └── amqp │ │ ├── AMQPConnection.java │ │ ├── AMQPObservableQueue.java │ │ ├── config │ │ ├── AMQPEventQueueConfiguration.java │ │ ├── AMQPEventQueueProperties.java │ │ ├── AMQPEventQueueProvider.java │ │ └── AMQPRetryPattern.java │ │ └── util │ │ ├── AMQPConfigurations.java │ │ ├── AMQPConstants.java │ │ ├── AMQPSettings.java │ │ ├── ConnectionType.java │ │ └── RetryType.java │ └── test │ └── java │ └── com │ └── netflix │ └── conductor │ └── contribs │ └── queue │ └── amqp │ ├── AMQPEventQueueProviderTest.java │ ├── AMQPObservableQueueTest.java │ └── AMQPSettingsTest.java ├── annotations-processor ├── README.md ├── build.gradle └── src │ ├── example │ └── java │ │ └── com │ │ └── example │ │ └── Example.java │ ├── main │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ └── annotationsprocessor │ │ │ └── protogen │ │ │ ├── AbstractMessage.java │ │ │ ├── Enum.java │ │ │ ├── Message.java │ │ │ ├── ProtoFile.java │ │ │ ├── ProtoGen.java │ │ │ ├── ProtoGenTask.java │ │ │ └── types │ │ │ ├── AbstractType.java │ │ │ ├── ExternMessageType.java │ │ │ ├── GenericType.java │ │ │ ├── ListType.java │ │ │ ├── MapType.java │ │ │ ├── MessageType.java │ │ │ ├── ScalarType.java │ │ │ ├── TypeMapper.java │ │ │ └── WrappedType.java │ └── resources │ │ └── templates │ │ ├── file.proto │ │ └── message.proto │ └── test │ ├── java │ └── com │ │ └── netflix │ │ └── conductor │ │ └── annotationsprocessor │ │ └── protogen │ │ └── ProtoGenTest.java │ └── resources │ └── example.proto.txt ├── annotations ├── README.md ├── build.gradle └── src │ └── main │ └── java │ └── com │ └── netflix │ └── conductor │ └── annotations │ └── protogen │ ├── ProtoEnum.java │ ├── ProtoField.java │ └── ProtoMessage.java ├── awss3-storage ├── README.md ├── build.gradle └── src │ └── main │ ├── java │ └── com │ │ └── netflix │ │ └── conductor │ │ └── s3 │ │ ├── config │ │ ├── S3Configuration.java │ │ └── S3Properties.java │ │ └── storage │ │ └── S3PayloadStorage.java │ └── resources │ └── META-INF │ └── additional-spring-configuration-metadata.json ├── awssqs-event-queue ├── README.md ├── build.gradle └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ └── sqs │ │ │ ├── config │ │ │ ├── SQSEventQueueConfiguration.java │ │ │ ├── SQSEventQueueProperties.java │ │ │ └── SQSEventQueueProvider.java │ │ │ └── eventqueue │ │ │ └── SQSObservableQueue.java │ └── resources │ │ └── META-INF │ │ └── additional-spring-configuration-metadata.json │ └── test │ └── java │ └── com │ └── netflix │ └── conductor │ └── sqs │ └── eventqueue │ ├── DefaultEventQueueProcessorTest.java │ └── SQSObservableQueueTest.java ├── azureblob-storage ├── README.md ├── build.gradle └── src │ ├── main │ └── java │ │ └── com │ │ └── netflix │ │ └── conductor │ │ └── azureblob │ │ ├── config │ │ ├── AzureBlobConfiguration.java │ │ └── AzureBlobProperties.java │ │ └── storage │ │ └── AzureBlobPayloadStorage.java │ └── test │ └── java │ └── com │ └── netflix │ └── conductor │ └── azureblob │ └── storage │ └── AzureBlobPayloadStorageTest.java ├── build.gradle ├── cassandra-persistence ├── build.gradle └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ └── cassandra │ │ │ ├── config │ │ │ ├── CassandraConfiguration.java │ │ │ ├── CassandraProperties.java │ │ │ └── cache │ │ │ │ ├── CacheableEventHandlerDAO.java │ │ │ │ ├── CacheableMetadataDAO.java │ │ │ │ └── CachingConfig.java │ │ │ ├── dao │ │ │ ├── CassandraBaseDAO.java │ │ │ ├── CassandraEventHandlerDAO.java │ │ │ ├── CassandraExecutionDAO.java │ │ │ ├── CassandraMetadataDAO.java │ │ │ └── CassandraPollDataDAO.java │ │ │ └── util │ │ │ ├── Constants.java │ │ │ └── Statements.java │ └── resources │ │ └── META-INF │ │ └── additional-spring-configuration-metadata.json │ └── test │ └── groovy │ └── com │ └── netflix │ └── conductor │ └── cassandra │ ├── dao │ ├── CassandraEventHandlerDAOSpec.groovy │ ├── CassandraExecutionDAOSpec.groovy │ ├── CassandraMetadataDAOSpec.groovy │ └── CassandraSpec.groovy │ └── util │ └── StatementsSpec.groovy ├── client-spring ├── README.md ├── build.gradle └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ └── client │ │ │ └── spring │ │ │ ├── ClientProperties.java │ │ │ ├── ConductorClientAutoConfiguration.java │ │ │ ├── ConductorWorkerAutoConfiguration.java │ │ │ └── SpringWorkerConfiguration.java │ └── resources │ │ └── META-INF │ │ ├── spring.factories │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ └── test │ ├── java │ └── com │ │ └── netflix │ │ └── conductor │ │ └── client │ │ └── spring │ │ ├── ExampleClient.java │ │ └── Workers.java │ └── resources │ └── application.properties ├── client ├── README.md ├── build.gradle ├── spotbugsExclude.xml └── src │ ├── main │ └── java │ │ └── com │ │ └── netflix │ │ └── conductor │ │ └── client │ │ ├── automator │ │ ├── PollingSemaphore.java │ │ ├── TaskPollExecutor.java │ │ └── TaskRunnerConfigurer.java │ │ ├── config │ │ ├── ConductorClientConfiguration.java │ │ ├── DefaultConductorClientConfiguration.java │ │ └── PropertyFactory.java │ │ ├── exception │ │ └── ConductorClientException.java │ │ ├── http │ │ ├── ClientBase.java │ │ ├── ClientRequestHandler.java │ │ ├── EventClient.java │ │ ├── MetadataClient.java │ │ ├── PayloadStorage.java │ │ ├── TaskClient.java │ │ └── WorkflowClient.java │ │ ├── telemetry │ │ └── MetricsContainer.java │ │ └── worker │ │ └── Worker.java │ └── test │ ├── groovy │ └── com │ │ └── netflix │ │ └── conductor │ │ └── client │ │ └── http │ │ ├── ClientSpecification.groovy │ │ ├── EventClientSpec.groovy │ │ ├── MetadataClientSpec.groovy │ │ ├── TaskClientSpec.groovy │ │ └── WorkflowClientSpec.groovy │ ├── java │ └── com │ │ └── netflix │ │ └── conductor │ │ └── client │ │ ├── automator │ │ ├── PollingSemaphoreTest.java │ │ ├── TaskPollExecutorTest.java │ │ └── TaskRunnerConfigurerTest.java │ │ ├── config │ │ └── TestPropertyFactory.java │ │ ├── sample │ │ ├── Main.java │ │ └── SampleWorker.java │ │ ├── testing │ │ ├── AbstractWorkflowTests.java │ │ ├── LoanWorkflowInput.java │ │ ├── LoanWorkflowTest.java │ │ ├── RegressionTest.java │ │ └── SubWorkflowTest.java │ │ └── worker │ │ └── TestWorkflowTask.java │ └── resources │ ├── config.properties │ ├── tasks.json │ ├── test_data │ ├── loan_workflow_input.json │ └── workflow1_run.json │ └── workflows │ ├── PopulationMinMax.json │ ├── calculate_loan_workflow.json │ ├── kitchensink.json │ └── workflow1.json ├── common-persistence ├── build.gradle └── src │ └── test │ └── java │ └── com │ └── netflix │ └── conductor │ └── dao │ ├── ExecutionDAOTest.java │ └── TestBase.java ├── common ├── build.gradle └── src │ ├── main │ └── java │ │ └── com │ │ └── netflix │ │ └── conductor │ │ ├── annotations │ │ └── protogen │ │ │ ├── ProtoEnum.java │ │ │ ├── ProtoField.java │ │ │ └── ProtoMessage.java │ │ └── common │ │ ├── config │ │ ├── ObjectMapperBuilderConfiguration.java │ │ ├── ObjectMapperConfiguration.java │ │ └── ObjectMapperProvider.java │ │ ├── constraints │ │ ├── NoSemiColonConstraint.java │ │ ├── OwnerEmailMandatoryConstraint.java │ │ ├── TaskReferenceNameUniqueConstraint.java │ │ ├── TaskTimeoutConstraint.java │ │ └── ValidNameConstraint.java │ │ ├── jackson │ │ └── JsonProtoModule.java │ │ ├── metadata │ │ ├── Auditable.java │ │ ├── BaseDef.java │ │ ├── SchemaDef.java │ │ ├── acl │ │ │ └── Permission.java │ │ ├── events │ │ │ ├── EventExecution.java │ │ │ └── EventHandler.java │ │ ├── tasks │ │ │ ├── PollData.java │ │ │ ├── Task.java │ │ │ ├── TaskDef.java │ │ │ ├── TaskExecLog.java │ │ │ ├── TaskResult.java │ │ │ └── TaskType.java │ │ └── workflow │ │ │ ├── DynamicForkJoinTask.java │ │ │ ├── DynamicForkJoinTaskList.java │ │ │ ├── IdempotencyStrategy.java │ │ │ ├── RateLimitConfig.java │ │ │ ├── RerunWorkflowRequest.java │ │ │ ├── SkipTaskRequest.java │ │ │ ├── StartWorkflowRequest.java │ │ │ ├── StateChangeEvent.java │ │ │ ├── SubWorkflowParams.java │ │ │ ├── UpgradeWorkflowRequest.java │ │ │ ├── WorkflowDef.java │ │ │ ├── WorkflowDefSummary.java │ │ │ └── WorkflowTask.java │ │ ├── model │ │ └── BulkResponse.java │ │ ├── run │ │ ├── ExternalStorageLocation.java │ │ ├── SearchResult.java │ │ ├── TaskSummary.java │ │ ├── Workflow.java │ │ ├── WorkflowSummary.java │ │ ├── WorkflowSummaryExtended.java │ │ └── WorkflowTestRequest.java │ │ ├── utils │ │ ├── ConstraintParamUtil.java │ │ ├── EnvUtils.java │ │ ├── ExternalPayloadStorage.java │ │ ├── SummaryUtil.java │ │ └── TaskUtils.java │ │ └── validation │ │ ├── ErrorResponse.java │ │ └── ValidationError.java │ └── test │ ├── java │ └── com │ │ └── netflix │ │ └── conductor │ │ └── common │ │ ├── config │ │ └── TestObjectMapperConfiguration.java │ │ ├── constraints │ │ └── NameValidatorTest.java │ │ ├── events │ │ └── EventHandlerTest.java │ │ ├── run │ │ └── TaskSummaryTest.java │ │ ├── tasks │ │ ├── TaskDefTest.java │ │ ├── TaskResultTest.java │ │ └── TaskTest.java │ │ ├── utils │ │ ├── ConstraintParamUtilTest.java │ │ └── SummaryUtilTest.java │ │ └── workflow │ │ ├── SubWorkflowParamsTest.java │ │ ├── WorkflowDefValidatorTest.java │ │ └── WorkflowTaskTest.java │ └── resources │ └── application.properties ├── conductor-clients ├── README.md └── java │ └── conductor-java-sdk │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── build.gradle │ ├── buildSrc │ ├── build.gradle │ └── src │ │ └── main │ │ ├── groovy │ │ └── io │ │ │ └── orkes │ │ │ └── conductor │ │ │ └── gradle │ │ │ └── PublishConfigPlugin.groovy │ │ └── resources │ │ └── META-INF │ │ └── gradle-plugins │ │ └── publish-config.properties │ ├── conductor-client-metrics │ ├── README.md │ ├── build.gradle │ └── src │ │ └── main │ │ └── java │ │ └── com │ │ └── netflix │ │ └── conductor │ │ └── client │ │ └── metrics │ │ └── prometheus │ │ └── PrometheusMetricsCollector.java │ ├── conductor-client-spring │ ├── README.md │ ├── build.gradle │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ └── client │ │ │ └── spring │ │ │ ├── ClientProperties.java │ │ │ ├── ConductorClientAutoConfiguration.java │ │ │ ├── ConductorWorkerAutoConfiguration.java │ │ │ └── SpringWorkerConfiguration.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ ├── conductor-client │ ├── README.md │ ├── build.gradle │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ ├── client │ │ │ ├── automator │ │ │ │ ├── TaskRunner.java │ │ │ │ ├── TaskRunnerConfigurer.java │ │ │ │ └── filters │ │ │ │ │ └── PollFilter.java │ │ │ ├── config │ │ │ │ ├── ConductorClientConfiguration.java │ │ │ │ ├── DefaultConductorClientConfiguration.java │ │ │ │ └── PropertyFactory.java │ │ │ ├── events │ │ │ │ ├── ConductorClientEvent.java │ │ │ │ ├── dispatcher │ │ │ │ │ └── EventDispatcher.java │ │ │ │ ├── listeners │ │ │ │ │ ├── ListenerRegister.java │ │ │ │ │ ├── TaskClientListener.java │ │ │ │ │ ├── TaskRunnerEventsListener.java │ │ │ │ │ └── WorkflowClientListener.java │ │ │ │ ├── task │ │ │ │ │ ├── TaskClientEvent.java │ │ │ │ │ ├── TaskPayloadUsedEvent.java │ │ │ │ │ └── TaskResultPayloadSizeEvent.java │ │ │ │ ├── taskrunner │ │ │ │ │ ├── PollCompleted.java │ │ │ │ │ ├── PollFailure.java │ │ │ │ │ ├── PollStarted.java │ │ │ │ │ ├── TaskExecutionCompleted.java │ │ │ │ │ ├── TaskExecutionFailure.java │ │ │ │ │ ├── TaskExecutionStarted.java │ │ │ │ │ └── TaskRunnerEvent.java │ │ │ │ └── workflow │ │ │ │ │ ├── WorkflowClientEvent.java │ │ │ │ │ ├── WorkflowInputPayloadSizeEvent.java │ │ │ │ │ ├── WorkflowPayloadUsedEvent.java │ │ │ │ │ └── WorkflowStartedEvent.java │ │ │ ├── exception │ │ │ │ └── ConductorClientException.java │ │ │ ├── http │ │ │ │ ├── ConductorClient.java │ │ │ │ ├── ConductorClientRequest.java │ │ │ │ ├── ConductorClientResponse.java │ │ │ │ ├── ConnectionPoolConfig.java │ │ │ │ ├── EventClient.java │ │ │ │ ├── HeaderSupplier.java │ │ │ │ ├── MetadataClient.java │ │ │ │ ├── Param.java │ │ │ │ ├── PayloadStorage.java │ │ │ │ ├── TaskClient.java │ │ │ │ └── WorkflowClient.java │ │ │ ├── metrics │ │ │ │ └── MetricsCollector.java │ │ │ └── worker │ │ │ │ └── Worker.java │ │ │ └── common │ │ │ ├── config │ │ │ └── ObjectMapperProvider.java │ │ │ ├── metadata │ │ │ ├── Auditable.java │ │ │ ├── SchemaDef.java │ │ │ ├── events │ │ │ │ ├── EventExecution.java │ │ │ │ └── EventHandler.java │ │ │ ├── tasks │ │ │ │ ├── PollData.java │ │ │ │ ├── Task.java │ │ │ │ ├── TaskDef.java │ │ │ │ ├── TaskExecLog.java │ │ │ │ ├── TaskResult.java │ │ │ │ └── TaskType.java │ │ │ └── workflow │ │ │ │ ├── DynamicForkJoinTask.java │ │ │ │ ├── DynamicForkJoinTaskList.java │ │ │ │ ├── IdempotencyStrategy.java │ │ │ │ ├── RateLimitConfig.java │ │ │ │ ├── RerunWorkflowRequest.java │ │ │ │ ├── SkipTaskRequest.java │ │ │ │ ├── StartWorkflowRequest.java │ │ │ │ ├── StateChangeEvent.java │ │ │ │ ├── SubWorkflowParams.java │ │ │ │ ├── UpgradeWorkflowRequest.java │ │ │ │ ├── WorkflowDef.java │ │ │ │ ├── WorkflowDefSummary.java │ │ │ │ └── WorkflowTask.java │ │ │ ├── model │ │ │ └── BulkResponse.java │ │ │ ├── run │ │ │ ├── ExternalStorageLocation.java │ │ │ ├── SearchResult.java │ │ │ ├── TaskSummary.java │ │ │ ├── Workflow.java │ │ │ ├── WorkflowSummary.java │ │ │ └── WorkflowTestRequest.java │ │ │ ├── utils │ │ │ ├── ConstraintParamUtil.java │ │ │ ├── EnvUtils.java │ │ │ ├── ExternalPayloadStorage.java │ │ │ ├── MetadataUtils.java │ │ │ ├── SummaryUtil.java │ │ │ └── TaskUtils.java │ │ │ └── validation │ │ │ ├── ErrorResponse.java │ │ │ └── ValidationError.java │ │ └── test │ │ ├── groovy │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ ├── client │ │ │ └── http │ │ │ │ ├── ClientSpecification.groovy │ │ │ │ ├── EventClientSpec.groovy │ │ │ │ ├── MetadataClientSpec.groovy │ │ │ │ ├── TaskClientSpec.groovy │ │ │ │ └── WorkflowClientSpec.groovy │ │ │ └── common │ │ │ └── utils │ │ │ └── MetadataUtilsSpec.groovy │ │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ ├── client │ │ │ ├── automator │ │ │ │ └── TaskRunnerConfigurerTest.java │ │ │ ├── config │ │ │ │ └── TestPropertyFactory.java │ │ │ ├── sample │ │ │ │ ├── Main.java │ │ │ │ └── SampleWorker.java │ │ │ ├── testing │ │ │ │ ├── AbstractWorkflowTests.java │ │ │ │ ├── LoanWorkflowInput.java │ │ │ │ ├── LoanWorkflowTest.java │ │ │ │ ├── RegressionTest.java │ │ │ │ └── SubWorkflowTest.java │ │ │ └── worker │ │ │ │ └── TestWorkflowTask.java │ │ │ ├── common │ │ │ ├── metadata │ │ │ │ ├── TestAuditablePojoMethods.java │ │ │ │ ├── TestSchemaDefPojoMethods.java │ │ │ │ ├── TestSerDerAuditable.java │ │ │ │ ├── TestSerDerSchemaDef.java │ │ │ │ ├── events │ │ │ │ │ ├── TestEventExecutionPojoMethods.java │ │ │ │ │ ├── TestEventHandlerPojoMethods.java │ │ │ │ │ ├── TestSerDerEventExecution.java │ │ │ │ │ └── TestSerDerEventHandler.java │ │ │ │ ├── tasks │ │ │ │ │ ├── TaskDefSerDerTest.java │ │ │ │ │ ├── TestPollDataPojoMethods.java │ │ │ │ │ ├── TestSerDerPollData.java │ │ │ │ │ ├── TestSerDerTask.java │ │ │ │ │ ├── TestSerDerTaskExecLog.java │ │ │ │ │ ├── TestSerDerTaskResult.java │ │ │ │ │ ├── TestTaskDefPojoMethods.java │ │ │ │ │ ├── TestTaskExecLogPojoMethods.java │ │ │ │ │ ├── TestTaskPojoMethods.java │ │ │ │ │ └── TestTaskResultPojoMethods.java │ │ │ │ └── workflow │ │ │ │ │ ├── TestDynamicForkJoinTaskListPojoMethods.java │ │ │ │ │ ├── TestDynamicForkJoinTaskPojoMethods.java │ │ │ │ │ ├── TestRateLimitConfigPojoMethods.java │ │ │ │ │ ├── TestRerunWorkflowRequestPojoMethods.java │ │ │ │ │ ├── TestSerDerDynamicForkJoinTask.java │ │ │ │ │ ├── TestSerDerDynamicForkJoinTaskList.java │ │ │ │ │ ├── TestSerDerRateLimitConfig.java │ │ │ │ │ ├── TestSerDerRerunWorkflowRequest.java │ │ │ │ │ ├── TestSerDerStartWorkflowRequest.java │ │ │ │ │ ├── TestSerDerStateChangeEvent.java │ │ │ │ │ ├── TestSerDerSubWorkflowParams.java │ │ │ │ │ ├── TestSerDerUpgradeWorkflowRequest.java │ │ │ │ │ ├── TestSerDerWorkflowDef.java │ │ │ │ │ ├── TestSerDerWorkflowDefSummary.java │ │ │ │ │ ├── TestSerDerWorkflowTask.java │ │ │ │ │ ├── TestSkipTaskRequestPojoMethods.java │ │ │ │ │ ├── TestSkipTaskRequestSerDer.java │ │ │ │ │ ├── TestStartWorkflowRequestPojoMethods.java │ │ │ │ │ ├── TestStateChangeEventPojoMethods.java │ │ │ │ │ ├── TestSubWorkflowParamsPojoMethods.java │ │ │ │ │ ├── TestUpgradeWorkflowRequestPojoMethods.java │ │ │ │ │ ├── TestWorkflowDefPojoMethods.java │ │ │ │ │ ├── TestWorkflowDefSummaryPojoMethods.java │ │ │ │ │ ├── TestWorkflowTaskPojoMethods.java │ │ │ │ │ └── WorkflowDefDeserializationTest.java │ │ │ ├── model │ │ │ │ └── TestSerDerBulkResponse.java │ │ │ └── run │ │ │ │ ├── TaskSummarySerDeTest.java │ │ │ │ ├── TestExternalStorageLocationPojoMethods.java │ │ │ │ ├── TestSearchResultPojoMethods.java │ │ │ │ ├── TestSerDerExternalStorageLocation.java │ │ │ │ ├── TestSerDerSearchResult.java │ │ │ │ ├── TestSerDerWorkflow.java │ │ │ │ ├── TestSerDerWorkflowSummary.java │ │ │ │ ├── TestSerDerWorkflowTestRequest.java │ │ │ │ ├── TestTaskSummaryPojoMethods.java │ │ │ │ ├── TestWorkflowPojoMethods.java │ │ │ │ ├── TestWorkflowSummaryPojoMethods.java │ │ │ │ └── TestWorkflowTestRequestPojoMethods.java │ │ │ └── util │ │ │ └── JsonTemplateSerDeserResolverUtil.java │ │ └── resources │ │ ├── conductor-workers.properties │ │ ├── config.properties │ │ ├── ser_deser_json_string.json │ │ ├── tasks.json │ │ ├── test_data │ │ ├── loan_workflow_input.json │ │ └── workflow1_run.json │ │ └── workflows │ │ ├── PopulationMinMax.json │ │ ├── calculate_loan_workflow.json │ │ ├── kitchensink.json │ │ ├── main_workflow.json │ │ └── workflow1.json │ ├── examples │ ├── README.md │ ├── build.gradle │ └── src │ │ └── main │ │ ├── java │ │ ├── com │ │ │ └── netflix │ │ │ │ └── conductor │ │ │ │ ├── gettingstarted │ │ │ │ ├── CreateWorkflow.java │ │ │ │ ├── HelloWorker.java │ │ │ │ └── StartWorkflow.java │ │ │ │ └── sdk │ │ │ │ └── examples │ │ │ │ ├── TaskRegistration.java │ │ │ │ ├── TaskRunner.java │ │ │ │ ├── events │ │ │ │ └── EventListenerExample.java │ │ │ │ ├── helloworld │ │ │ │ ├── Main.java │ │ │ │ ├── workers │ │ │ │ │ └── Workers.java │ │ │ │ └── workflowdef │ │ │ │ │ └── GreetingsWorkflow.java │ │ │ │ ├── sendemail │ │ │ │ ├── Main.java │ │ │ │ ├── workers │ │ │ │ │ └── Workers.java │ │ │ │ └── workflowdef │ │ │ │ │ └── SendEmailWorkflow.java │ │ │ │ ├── shipment │ │ │ │ ├── Main.java │ │ │ │ ├── Order.java │ │ │ │ ├── Shipment.java │ │ │ │ ├── ShipmentState.java │ │ │ │ ├── ShipmentWorkers.java │ │ │ │ ├── ShipmentWorkflow.java │ │ │ │ └── User.java │ │ │ │ └── taskdomains │ │ │ │ ├── Main.java │ │ │ │ └── Workers.java │ │ └── io │ │ │ └── orkes │ │ │ └── conductor │ │ │ └── sdk │ │ │ └── examples │ │ │ ├── AuthorizationManagement.java │ │ │ ├── MetadataManagement.java │ │ │ ├── SchedulerManagement.java │ │ │ ├── WorkflowManagement.java │ │ │ ├── WorkflowManagement2.java │ │ │ ├── util │ │ │ └── ClientUtil.java │ │ │ └── workflowops │ │ │ ├── Main.java │ │ │ └── workflowdef │ │ │ └── GreetingsWorkflow.java │ │ └── resources │ │ ├── logback.xml │ │ ├── script.js │ │ ├── task_domain_wf.json │ │ └── workflow.json │ ├── gradle.properties │ ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── licenseheader.txt │ ├── orkes-client │ ├── build.gradle │ └── src │ │ ├── main │ │ └── java │ │ │ └── io │ │ │ └── orkes │ │ │ └── conductor │ │ │ └── client │ │ │ ├── ApiClient.java │ │ │ ├── AuthorizationClient.java │ │ │ ├── IntegrationClient.java │ │ │ ├── OrkesClients.java │ │ │ ├── PromptClient.java │ │ │ ├── SchedulerClient.java │ │ │ ├── SecretClient.java │ │ │ ├── http │ │ │ ├── ApiCallback.java │ │ │ ├── ApiResponse.java │ │ │ ├── ApplicationResource.java │ │ │ ├── AuthorizationResource.java │ │ │ ├── EventResource.java │ │ │ ├── GroupResource.java │ │ │ ├── IntegrationResource.java │ │ │ ├── MetadataResource.java │ │ │ ├── OrkesAuthentication.java │ │ │ ├── OrkesAuthorizationClient.java │ │ │ ├── OrkesEventClient.java │ │ │ ├── OrkesIntegrationClient.java │ │ │ ├── OrkesMetadataClient.java │ │ │ ├── OrkesPromptClient.java │ │ │ ├── OrkesSchedulerClient.java │ │ │ ├── OrkesSecretClient.java │ │ │ ├── OrkesTaskClient.java │ │ │ ├── OrkesWorkflowClient.java │ │ │ ├── Pair.java │ │ │ ├── SchedulerResource.java │ │ │ ├── SecretResource.java │ │ │ ├── TagsResource.java │ │ │ ├── TokenResource.java │ │ │ ├── UserResource.java │ │ │ ├── WorkflowBulkResource.java │ │ │ └── WorkflowResource.java │ │ │ ├── model │ │ │ ├── AccessKeyResponse.java │ │ │ ├── AccessKeyStatus.java │ │ │ ├── AuthorizationRequest.java │ │ │ ├── ConductorApplication.java │ │ │ ├── ConductorUser.java │ │ │ ├── CorrelationIdsSearchRequest.java │ │ │ ├── CreateAccessKeyResponse.java │ │ │ ├── CreateOrUpdateApplicationRequest.java │ │ │ ├── ExternalStorageLocation.java │ │ │ ├── GenerateTokenRequest.java │ │ │ ├── GrantedAccess.java │ │ │ ├── GrantedAccessResponse.java │ │ │ ├── Group.java │ │ │ ├── Permission.java │ │ │ ├── Role.java │ │ │ ├── SaveScheduleRequest.java │ │ │ ├── SearchResultWorkflowScheduleExecution.java │ │ │ ├── SearchResultWorkflowScheduleExecutionModel.java │ │ │ ├── SearchResultWorkflowSummary.java │ │ │ ├── Subject.java │ │ │ ├── SubjectRef.java │ │ │ ├── Tag.java │ │ │ ├── TagObject.java │ │ │ ├── TagString.java │ │ │ ├── TargetRef.java │ │ │ ├── TaskDetails.java │ │ │ ├── TerminateWorkflow.java │ │ │ ├── TokenResponse.java │ │ │ ├── UpsertGroupRequest.java │ │ │ ├── UpsertUserRequest.java │ │ │ ├── WorkflowRun.java │ │ │ ├── WorkflowSchedule.java │ │ │ ├── WorkflowScheduleExecutionModel.java │ │ │ ├── WorkflowStateUpdate.java │ │ │ ├── WorkflowStatus.java │ │ │ ├── event │ │ │ │ ├── QueueConfiguration.java │ │ │ │ └── QueueWorkerConfiguration.java │ │ │ └── integration │ │ │ │ ├── Category.java │ │ │ │ ├── ConfigKey.java │ │ │ │ ├── Integration.java │ │ │ │ ├── IntegrationApi.java │ │ │ │ ├── IntegrationApiUpdate.java │ │ │ │ ├── IntegrationDef.java │ │ │ │ ├── IntegrationDefFormField.java │ │ │ │ ├── IntegrationUpdate.java │ │ │ │ ├── PromptTemplateTestRequest.java │ │ │ │ └── ai │ │ │ │ ├── ChatCompletion.java │ │ │ │ ├── ChatMessage.java │ │ │ │ ├── EmbeddingRequest.java │ │ │ │ ├── IndexDocInput.java │ │ │ │ ├── IndexedDoc.java │ │ │ │ ├── LLMResponse.java │ │ │ │ ├── LLMWorkerInput.java │ │ │ │ ├── PromptTemplate.java │ │ │ │ ├── PromptTemplateTestRequest.java │ │ │ │ ├── StoreEmbeddingsInput.java │ │ │ │ ├── TextCompletion.java │ │ │ │ └── VectorDBInput.java │ │ │ └── worker │ │ │ ├── WorkerFn.java │ │ │ └── Workers.java │ │ └── test │ │ ├── java │ │ └── io │ │ │ └── orkes │ │ │ └── conductor │ │ │ └── client │ │ │ ├── model │ │ │ ├── TestAuthorizationRequestPojoMethods.java │ │ │ ├── TestConductorApplicationPojoMethods.java │ │ │ ├── TestConductorUserPojoMethods.java │ │ │ ├── TestCreateAccessKeyResponsePojoMethods.java │ │ │ ├── TestCreateOrUpdateApplicationRequestPojoMethods.java │ │ │ ├── TestExternalStorageLocationPojoMethods.java │ │ │ ├── TestGrantedAccessPojoMethods.java │ │ │ ├── TestGrantedAccessResponsePojoMethods.java │ │ │ ├── TestGroupPojoMethods.java │ │ │ ├── TestPermissionPojoMethods.java │ │ │ ├── TestRolePojoMethods.java │ │ │ ├── TestSaveScheduleRequestPojoMethods.java │ │ │ ├── TestSerDerAccessKeyResponse.java │ │ │ ├── TestSerDerAuthorizationRequest.java │ │ │ ├── TestSerDerConductorApplication.java │ │ │ ├── TestSerDerConductorUser.java │ │ │ ├── TestSerDerCorrelationIdsSearchRequest.java │ │ │ ├── TestSerDerCreateAccessKeyResponse.java │ │ │ ├── TestSerDerCreateOrUpdateApplicationRequest.java │ │ │ ├── TestSerDerExternalStorageLocation.java │ │ │ ├── TestSerDerGenerateTokenRequest.java │ │ │ ├── TestSerDerGrantedAccess.java │ │ │ ├── TestSerDerGrantedAccessResponse.java │ │ │ ├── TestSerDerGroup.java │ │ │ ├── TestSerDerPermission.java │ │ │ ├── TestSerDerRole.java │ │ │ ├── TestSerDerSaveScheduleRequest.java │ │ │ ├── TestSerDerSubject.java │ │ │ ├── TestSerDerSubjectRef.java │ │ │ ├── TestSerDerTargetRef.java │ │ │ ├── TestSerDerTaskDetails.java │ │ │ ├── TestSerDerTerminateWorkflow.java │ │ │ ├── TestSerDerTokenResponse.java │ │ │ ├── TestSerDerUpsertGroupRequest.java │ │ │ ├── TestSerDerUpsertUserRequest.java │ │ │ ├── TestSerDerWorkflowSchedule.java │ │ │ ├── TestSerDerWorkflowScheduleExecutionModel.java │ │ │ ├── TestSerDerWorkflowStateUpdate.java │ │ │ ├── TestSerDerWorkflowStatus.java │ │ │ ├── TestSubjectPojoMethods.java │ │ │ ├── TestSubjectRefPojoMethods.java │ │ │ ├── TestTargetRefPojoMethods.java │ │ │ ├── TestTaskDetailsPojoMethods.java │ │ │ ├── TestTerminateWorkflowPojoMethods.java │ │ │ ├── TestUpsertGroupRequestPojoMethods.java │ │ │ ├── TestUpsertUserRequestPojoMethods.java │ │ │ ├── TestWorkflowScheduleExecutionModelPojoMethods.java │ │ │ ├── TestWorkflowSchedulePojoMethods.java │ │ │ ├── TestWorkflowStatusPojoMethods.java │ │ │ └── integration │ │ │ │ ├── TestSerDePromptTemplateTestRequest.java │ │ │ │ ├── TestSerDerIntegration.java │ │ │ │ ├── TestSerDerIntegrationApi.java │ │ │ │ ├── TestSerDerIntegrationApiUpdate.java │ │ │ │ ├── TestSerDerIntegrationDef.java │ │ │ │ ├── TestSerDerIntegrationUpdate.java │ │ │ │ └── ai │ │ │ │ ├── TestIndexDocInputPojoMethods.java │ │ │ │ ├── TestIndexedDocPojoMethods.java │ │ │ │ ├── TestSerDerChatCompletion.java │ │ │ │ ├── TestSerDerChatMessage.java │ │ │ │ ├── TestSerDerEmbeddingRequest.java │ │ │ │ ├── TestSerDerIndexDocInput.java │ │ │ │ ├── TestSerDerIndexedDoc.java │ │ │ │ ├── TestSerDerLLMResponse.java │ │ │ │ ├── TestSerDerLLMWorkerInput.java │ │ │ │ ├── TestSerDerPromptTemplateTestRequest.java │ │ │ │ ├── TestSerDerStoreEmbeddingsInput.java │ │ │ │ ├── TestSerDerTextCompletion.java │ │ │ │ └── TestSerDerVectorDBInput.java │ │ │ └── util │ │ │ └── JsonTemplateSerDeserResolverUtil.java │ │ └── resources │ │ └── ser_deser_json_string.json │ ├── orkes-spring │ ├── build.gradle │ └── src │ │ └── main │ │ ├── java │ │ └── io │ │ │ └── orkes │ │ │ └── conductor │ │ │ └── client │ │ │ └── spring │ │ │ ├── OrkesClientProperties.java │ │ │ └── OrkesConductorClientAutoConfiguration.java │ │ └── resources │ │ └── META-INF │ │ └── spring │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ ├── sdk │ ├── README.md │ ├── build.gradle │ ├── src │ │ ├── main │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── netflix │ │ │ │ └── conductor │ │ │ │ └── sdk │ │ │ │ ├── healthcheck │ │ │ │ └── HealthCheckClient.java │ │ │ │ ├── testing │ │ │ │ ├── LocalServerRunner.java │ │ │ │ └── WorkflowTestRunner.java │ │ │ │ └── workflow │ │ │ │ ├── def │ │ │ │ ├── ConductorWorkflow.java │ │ │ │ ├── ValidationError.java │ │ │ │ ├── WorkflowBuilder.java │ │ │ │ └── tasks │ │ │ │ │ ├── DoWhile.java │ │ │ │ │ ├── Dynamic.java │ │ │ │ │ ├── DynamicFork.java │ │ │ │ │ ├── DynamicForkInput.java │ │ │ │ │ ├── Event.java │ │ │ │ │ ├── ForkJoin.java │ │ │ │ │ ├── Http.java │ │ │ │ │ ├── JQ.java │ │ │ │ │ ├── Javascript.java │ │ │ │ │ ├── Join.java │ │ │ │ │ ├── SetVariable.java │ │ │ │ │ ├── SimpleTask.java │ │ │ │ │ ├── SubWorkflow.java │ │ │ │ │ ├── Switch.java │ │ │ │ │ ├── Task.java │ │ │ │ │ ├── TaskRegistry.java │ │ │ │ │ ├── Terminate.java │ │ │ │ │ └── Wait.java │ │ │ │ ├── executor │ │ │ │ ├── WorkflowExecutor.java │ │ │ │ └── task │ │ │ │ │ ├── AnnotatedWorker.java │ │ │ │ │ ├── AnnotatedWorkerExecutor.java │ │ │ │ │ ├── DynamicForkWorker.java │ │ │ │ │ ├── NonRetryableException.java │ │ │ │ │ ├── TaskContext.java │ │ │ │ │ └── WorkerConfiguration.java │ │ │ │ ├── task │ │ │ │ ├── InputParam.java │ │ │ │ ├── OutputParam.java │ │ │ │ ├── WorkerTask.java │ │ │ │ └── WorkflowInstanceIdInputParam.java │ │ │ │ └── utils │ │ │ │ ├── InputOutputGetter.java │ │ │ │ └── MapBuilder.java │ │ └── test │ │ │ ├── java │ │ │ └── com │ │ │ │ └── netflix │ │ │ │ └── conductor │ │ │ │ └── sdk │ │ │ │ └── workflow │ │ │ │ ├── def │ │ │ │ ├── TaskConversionsTests.java │ │ │ │ ├── WorkflowCreationTests.java │ │ │ │ ├── WorkflowDefTaskTests.java │ │ │ │ └── WorkflowState.java │ │ │ │ ├── executor │ │ │ │ └── task │ │ │ │ │ ├── AnnotatedWorkerTests.java │ │ │ │ │ ├── Bike.java │ │ │ │ │ ├── Car.java │ │ │ │ │ ├── CarWorker.java │ │ │ │ │ └── TestWorkerConfig.java │ │ │ │ └── testing │ │ │ │ ├── Task1Input.java │ │ │ │ ├── TestWorkflowInput.java │ │ │ │ └── WorkflowTestFrameworkTests.java │ │ │ └── resources │ │ │ ├── application-integrationtest.properties │ │ │ ├── log4j2.xml │ │ │ ├── script.js │ │ │ ├── simple_workflow.json │ │ │ ├── tasks.json │ │ │ └── test-server.properties │ ├── testing_framework.md │ ├── worker_sdk.md │ └── workflow_sdk.md │ ├── settings.gradle │ ├── tests │ ├── build.gradle │ └── src │ │ └── test │ │ ├── java │ │ └── io │ │ │ └── orkes │ │ │ └── conductor │ │ │ ├── client │ │ │ ├── ApiClientTest.java │ │ │ ├── LoadTestWorker.java │ │ │ ├── LocalWorkerTest.java │ │ │ ├── WorkflowRetryTest.java │ │ │ ├── http │ │ │ │ ├── AuthorizationClientTests.java │ │ │ │ ├── EventClientTests.java │ │ │ │ ├── MetadataClientTests.java │ │ │ │ ├── PathSuffixTest.java │ │ │ │ ├── SchedulerClientTests.java │ │ │ │ ├── SecretClientTests.java │ │ │ │ ├── TaskClientTests.java │ │ │ │ ├── WorkflowClientTests.java │ │ │ │ └── WorkflowStateUpdateTests.java │ │ │ ├── util │ │ │ │ ├── ClientTestUtil.java │ │ │ │ ├── Commons.java │ │ │ │ ├── SimpleWorker.java │ │ │ │ ├── TestUtil.java │ │ │ │ └── WorkflowUtil.java │ │ │ └── worker │ │ │ │ ├── LocalServerWorkflowExecutionTests.java │ │ │ │ └── WorkflowExecutionTests.java │ │ │ └── sdk │ │ │ └── WorkflowSDKTests.java │ │ └── resources │ │ ├── application.properties │ │ ├── logback-test.xml │ │ ├── metadata │ │ ├── sub_workflow_tests.json │ │ └── workflows.json │ │ ├── sample_tasks.json │ │ ├── sample_workflow.json │ │ └── sdk_test.json │ └── versions.gradle ├── core ├── build.gradle └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ ├── annotations │ │ │ ├── Audit.java │ │ │ ├── Trace.java │ │ │ └── VisibleForTesting.java │ │ │ ├── core │ │ │ ├── LifecycleAwareComponent.java │ │ │ ├── WorkflowContext.java │ │ │ ├── config │ │ │ │ ├── ConductorCoreConfiguration.java │ │ │ │ ├── ConductorProperties.java │ │ │ │ └── SchedulerConfiguration.java │ │ │ ├── dal │ │ │ │ └── ExecutionDAOFacade.java │ │ │ ├── events │ │ │ │ ├── ActionProcessor.java │ │ │ │ ├── DefaultEventProcessor.java │ │ │ │ ├── DefaultEventQueueManager.java │ │ │ │ ├── EventQueueManager.java │ │ │ │ ├── EventQueueProvider.java │ │ │ │ ├── EventQueues.java │ │ │ │ ├── ScriptEvaluator.java │ │ │ │ ├── SimpleActionProcessor.java │ │ │ │ └── queue │ │ │ │ │ ├── ConductorEventQueueProvider.java │ │ │ │ │ ├── ConductorObservableQueue.java │ │ │ │ │ ├── DefaultEventQueueProcessor.java │ │ │ │ │ ├── Message.java │ │ │ │ │ └── ObservableQueue.java │ │ │ ├── exception │ │ │ │ ├── ConflictException.java │ │ │ │ ├── NonTransientException.java │ │ │ │ ├── NotFoundException.java │ │ │ │ ├── TerminateWorkflowException.java │ │ │ │ └── TransientException.java │ │ │ ├── execution │ │ │ │ ├── AsyncSystemTaskExecutor.java │ │ │ │ ├── DeciderService.java │ │ │ │ ├── StartWorkflowInput.java │ │ │ │ ├── WorkflowExecutor.java │ │ │ │ ├── WorkflowExecutorOps.java │ │ │ │ ├── evaluators │ │ │ │ │ ├── Evaluator.java │ │ │ │ │ ├── JavascriptEvaluator.java │ │ │ │ │ ├── PythonEvaluator.java │ │ │ │ │ └── ValueParamEvaluator.java │ │ │ │ ├── mapper │ │ │ │ │ ├── DecisionTaskMapper.java │ │ │ │ │ ├── DoWhileTaskMapper.java │ │ │ │ │ ├── DynamicTaskMapper.java │ │ │ │ │ ├── EventTaskMapper.java │ │ │ │ │ ├── ExclusiveJoinTaskMapper.java │ │ │ │ │ ├── ForkJoinDynamicTaskMapper.java │ │ │ │ │ ├── ForkJoinTaskMapper.java │ │ │ │ │ ├── HTTPTaskMapper.java │ │ │ │ │ ├── HumanTaskMapper.java │ │ │ │ │ ├── InlineTaskMapper.java │ │ │ │ │ ├── JoinTaskMapper.java │ │ │ │ │ ├── JsonJQTransformTaskMapper.java │ │ │ │ │ ├── KafkaPublishTaskMapper.java │ │ │ │ │ ├── LambdaTaskMapper.java │ │ │ │ │ ├── NoopTaskMapper.java │ │ │ │ │ ├── SetVariableTaskMapper.java │ │ │ │ │ ├── SimpleTaskMapper.java │ │ │ │ │ ├── StartWorkflowTaskMapper.java │ │ │ │ │ ├── SubWorkflowTaskMapper.java │ │ │ │ │ ├── SwitchTaskMapper.java │ │ │ │ │ ├── TaskMapper.java │ │ │ │ │ ├── TaskMapperContext.java │ │ │ │ │ ├── TerminateTaskMapper.java │ │ │ │ │ ├── UserDefinedTaskMapper.java │ │ │ │ │ └── WaitTaskMapper.java │ │ │ │ └── tasks │ │ │ │ │ ├── Decision.java │ │ │ │ │ ├── DoWhile.java │ │ │ │ │ ├── Event.java │ │ │ │ │ ├── ExclusiveJoin.java │ │ │ │ │ ├── ExecutionConfig.java │ │ │ │ │ ├── Fork.java │ │ │ │ │ ├── Human.java │ │ │ │ │ ├── Inline.java │ │ │ │ │ ├── IsolatedTaskQueueProducer.java │ │ │ │ │ ├── Join.java │ │ │ │ │ ├── Lambda.java │ │ │ │ │ ├── Noop.java │ │ │ │ │ ├── SetVariable.java │ │ │ │ │ ├── StartWorkflow.java │ │ │ │ │ ├── SubWorkflow.java │ │ │ │ │ ├── Switch.java │ │ │ │ │ ├── SystemTaskRegistry.java │ │ │ │ │ ├── SystemTaskWorker.java │ │ │ │ │ ├── SystemTaskWorkerCoordinator.java │ │ │ │ │ ├── Terminate.java │ │ │ │ │ ├── Wait.java │ │ │ │ │ └── WorkflowSystemTask.java │ │ │ ├── index │ │ │ │ ├── NoopIndexDAO.java │ │ │ │ └── NoopIndexDAOConfiguration.java │ │ │ ├── listener │ │ │ │ ├── TaskStatusListener.java │ │ │ │ ├── TaskStatusListenerStub.java │ │ │ │ ├── WorkflowStatusListener.java │ │ │ │ └── WorkflowStatusListenerStub.java │ │ │ ├── metadata │ │ │ │ └── MetadataMapperService.java │ │ │ ├── reconciliation │ │ │ │ ├── WorkflowReconciler.java │ │ │ │ ├── WorkflowRepairService.java │ │ │ │ └── WorkflowSweeper.java │ │ │ ├── storage │ │ │ │ └── DummyPayloadStorage.java │ │ │ ├── sync │ │ │ │ ├── Lock.java │ │ │ │ ├── local │ │ │ │ │ ├── LocalOnlyLock.java │ │ │ │ │ └── LocalOnlyLockConfiguration.java │ │ │ │ └── noop │ │ │ │ │ └── NoopLock.java │ │ │ └── utils │ │ │ │ ├── DateTimeUtils.java │ │ │ │ ├── ExternalPayloadStorageUtils.java │ │ │ │ ├── IDGenerator.java │ │ │ │ ├── JsonUtils.java │ │ │ │ ├── ParametersUtils.java │ │ │ │ ├── QueueUtils.java │ │ │ │ ├── SemaphoreUtil.java │ │ │ │ └── Utils.java │ │ │ ├── dao │ │ │ ├── ConcurrentExecutionLimitDAO.java │ │ │ ├── EventHandlerDAO.java │ │ │ ├── ExecutionDAO.java │ │ │ ├── IndexDAO.java │ │ │ ├── MetadataDAO.java │ │ │ ├── PollDataDAO.java │ │ │ ├── QueueDAO.java │ │ │ └── RateLimitingDAO.java │ │ │ ├── metrics │ │ │ ├── Monitors.java │ │ │ └── WorkflowMonitor.java │ │ │ ├── model │ │ │ ├── TaskModel.java │ │ │ └── WorkflowModel.java │ │ │ ├── service │ │ │ ├── AdminService.java │ │ │ ├── AdminServiceImpl.java │ │ │ ├── EventService.java │ │ │ ├── EventServiceImpl.java │ │ │ ├── ExecutionLockService.java │ │ │ ├── ExecutionService.java │ │ │ ├── MetadataService.java │ │ │ ├── MetadataServiceImpl.java │ │ │ ├── TaskService.java │ │ │ ├── TaskServiceImpl.java │ │ │ ├── WorkflowBulkService.java │ │ │ ├── WorkflowBulkServiceImpl.java │ │ │ ├── WorkflowService.java │ │ │ ├── WorkflowServiceImpl.java │ │ │ └── WorkflowTestService.java │ │ │ └── validations │ │ │ ├── ValidationContext.java │ │ │ └── WorkflowTaskTypeConstraint.java │ └── resources │ │ └── META-INF │ │ ├── additional-spring-configuration-metadata.json │ │ ├── validation.xml │ │ └── validation │ │ └── constraints.xml │ └── test │ ├── groovy │ └── com │ │ └── netflix │ │ └── conductor │ │ ├── core │ │ └── execution │ │ │ ├── AsyncSystemTaskExecutorTest.groovy │ │ │ └── tasks │ │ │ ├── DoWhileSpec.groovy │ │ │ ├── EventSpec.groovy │ │ │ ├── IsolatedTaskQueueProducerSpec.groovy │ │ │ └── StartWorkflowSpec.groovy │ │ └── model │ │ ├── TaskModelSpec.groovy │ │ └── WorkflowModelSpec.groovy │ ├── java │ └── com │ │ └── netflix │ │ └── conductor │ │ ├── TestUtils.java │ │ ├── core │ │ ├── dal │ │ │ └── ExecutionDAOFacadeTest.java │ │ ├── events │ │ │ ├── MockObservableQueue.java │ │ │ ├── MockQueueProvider.java │ │ │ ├── TestDefaultEventProcessor.java │ │ │ ├── TestScriptEval.java │ │ │ └── TestSimpleActionProcessor.java │ │ ├── execution │ │ │ ├── TestDeciderOutcomes.java │ │ │ ├── TestDeciderService.java │ │ │ ├── TestWorkflowDef.java │ │ │ ├── TestWorkflowExecutor.java │ │ │ ├── WorkflowSystemTaskStub.java │ │ │ ├── mapper │ │ │ │ ├── DecisionTaskMapperTest.java │ │ │ │ ├── DoWhileTaskMapperTest.java │ │ │ │ ├── DynamicTaskMapperTest.java │ │ │ │ ├── EventTaskMapperTest.java │ │ │ │ ├── ForkJoinDynamicTaskMapperTest.java │ │ │ │ ├── ForkJoinTaskMapperTest.java │ │ │ │ ├── HTTPTaskMapperTest.java │ │ │ │ ├── HumanTaskMapperTest.java │ │ │ │ ├── InlineTaskMapperTest.java │ │ │ │ ├── JoinTaskMapperTest.java │ │ │ │ ├── JsonJQTransformTaskMapperTest.java │ │ │ │ ├── KafkaPublishTaskMapperTest.java │ │ │ │ ├── LambdaTaskMapperTest.java │ │ │ │ ├── NoopTaskMapperTest.java │ │ │ │ ├── SetVariableTaskMapperTest.java │ │ │ │ ├── SimpleTaskMapperTest.java │ │ │ │ ├── SubWorkflowTaskMapperTest.java │ │ │ │ ├── SwitchTaskMapperTest.java │ │ │ │ ├── TerminateTaskMapperTest.java │ │ │ │ ├── UserDefinedTaskMapperTest.java │ │ │ │ └── WaitTaskMapperTest.java │ │ │ └── tasks │ │ │ │ ├── EventQueueResolutionTest.java │ │ │ │ ├── InlineTest.java │ │ │ │ ├── TestJoin.java │ │ │ │ ├── TestLambda.java │ │ │ │ ├── TestNoop.java │ │ │ │ ├── TestSubWorkflow.java │ │ │ │ ├── TestSystemTaskWorker.java │ │ │ │ ├── TestSystemTaskWorkerCoordinator.java │ │ │ │ └── TestTerminate.java │ │ ├── metadata │ │ │ └── MetadataMapperServiceTest.java │ │ ├── reconciliation │ │ │ ├── TestWorkflowRepairService.java │ │ │ └── TestWorkflowSweeper.java │ │ ├── storage │ │ │ └── DummyPayloadStorageTest.java │ │ ├── sync │ │ │ └── local │ │ │ │ └── LocalOnlyLockTest.java │ │ └── utils │ │ │ ├── DateTimeUtilsTest.java │ │ │ ├── ExternalPayloadStorageUtilsTest.java │ │ │ ├── JsonUtilsTest.java │ │ │ ├── ParametersUtilsTest.java │ │ │ ├── QueueUtilsTest.java │ │ │ └── SemaphoreUtilTest.java │ │ ├── dao │ │ ├── ExecutionDAOTest.java │ │ └── PollDataDAOTest.java │ │ ├── metrics │ │ └── WorkflowMonitorTest.java │ │ ├── service │ │ ├── EventServiceTest.java │ │ ├── ExecutionServiceTest.java │ │ ├── MetadataServiceTest.java │ │ ├── TaskServiceTest.java │ │ ├── WorkflowBulkServiceTest.java │ │ └── WorkflowServiceTest.java │ │ └── validations │ │ ├── WorkflowDefConstraintTest.java │ │ └── WorkflowTaskTypeConstraintTest.java │ └── resources │ ├── completed.json │ ├── conditional_flow.json │ ├── conditional_flow_with_switch.json │ ├── payload.json │ └── test.json ├── dependencies.gradle ├── deploy.gradle ├── docker ├── README.md ├── ci │ └── Dockerfile ├── docker-compose-mysql.yaml ├── docker-compose-postgres-es7.yaml ├── docker-compose-postgres.yaml ├── docker-compose-redis-os.yaml ├── docker-compose.yaml ├── server │ ├── Dockerfile │ ├── bin │ │ └── startup.sh │ ├── config │ │ ├── config-mysql.properties │ │ ├── config-postgres-es7.properties │ │ ├── config-postgres.properties │ │ ├── config-redis-os.properties │ │ ├── config-redis.properties │ │ ├── config.properties │ │ ├── log4j-file-appender.properties │ │ ├── log4j.properties │ │ └── redis.conf │ └── nginx │ │ └── nginx.conf └── ui │ ├── Dockerfile │ └── README.md ├── docs ├── assets │ └── images │ │ └── favicon.png ├── css │ └── custom.css ├── devguide │ ├── architecture │ │ ├── PollTimeoutSeconds.png │ │ ├── ResponseTimeoutSeconds.png │ │ ├── TaskFailure.png │ │ ├── TimeoutSeconds.png │ │ ├── conductor-architecture.png │ │ ├── dag_workflow.png │ │ ├── dag_workflow2.png │ │ ├── directed-acyclic-graph.md │ │ ├── directed_graph.png │ │ ├── index.md │ │ ├── overview.png │ │ ├── pirate_graph.gif │ │ ├── regular_graph.png │ │ ├── task_states.png │ │ ├── tasklifecycle.md │ │ └── technicaldetails.md │ ├── bestpractices.md │ ├── concepts │ │ ├── index.md │ │ ├── tasks.md │ │ ├── why.md │ │ ├── workers.md │ │ └── workflows.md │ ├── faq.md │ ├── how-tos │ │ ├── Monitoring │ │ │ └── Conductor-LogLevel.md │ │ ├── Tasks │ │ │ ├── creating-tasks.md │ │ │ ├── dynamic-vs-switch-tasks.md │ │ │ ├── extending-system-tasks.md │ │ │ ├── monitoring-task-queues.md │ │ │ ├── reusing-tasks.md │ │ │ ├── task-configurations.md │ │ │ ├── task-inputs.md │ │ │ ├── task-timeouts.md │ │ │ └── updating-tasks.md │ │ ├── Workers │ │ │ ├── build-a-golang-task-worker.md │ │ │ ├── build-a-java-task-worker.md │ │ │ ├── build-a-python-task-worker.md │ │ │ └── scaling-workers.md │ │ └── Workflows │ │ │ ├── debugging-workflows.md │ │ │ ├── handling-errors.md │ │ │ ├── searching-workflows.md │ │ │ ├── starting-workflows.md │ │ │ ├── updating-workflows.md │ │ │ ├── versioning-workflows.md │ │ │ ├── view-workflow-executions.md │ │ │ ├── workflow_debugging.png │ │ │ ├── workflow_execution_view.png │ │ │ └── workflow_task_fail.png │ ├── labs │ │ ├── eventhandlers.md │ │ ├── first-workflow.md │ │ ├── img │ │ │ ├── EventHandlerCycle.png │ │ │ ├── bgnr_complete_workflow.png │ │ │ ├── bgnr_state_scheduled.png │ │ │ └── bgnr_systask_state.png │ │ ├── index.md │ │ ├── kitchensink.md │ │ ├── kitchensink.png │ │ ├── metadataWorkflowPost.png │ │ ├── metadataWorkflowRun.png │ │ ├── uiWorkflowDefinition.png │ │ ├── uiWorkflowDefinitionVisual.png │ │ ├── workflowLoaded.png │ │ └── workflowRunIdCopy.png │ └── running │ │ ├── conductorUI.png │ │ ├── docker.md │ │ ├── hosted.md │ │ ├── source.md │ │ └── swagger.png ├── documentation │ ├── advanced │ │ ├── annotation-processor.md │ │ ├── archival-of-workflows.md │ │ ├── azureblob-storage.md │ │ ├── extend.md │ │ ├── externalpayloadstorage.md │ │ ├── isolationgroups.md │ │ ├── postgresql.md │ │ └── redis.md │ ├── api │ │ ├── index.md │ │ ├── metadata.md │ │ ├── startworkflow.md │ │ ├── task.md │ │ ├── taskdomains.md │ │ └── workflow.md │ ├── clientsdks │ │ ├── clojure-sdk.md │ │ ├── csharp-sdk.md │ │ ├── go-sdk.md │ │ ├── index.md │ │ ├── java-sdk.md │ │ ├── js-sdk.md │ │ └── python-sdk.md │ ├── configuration │ │ ├── appconf.md │ │ ├── eventhandlers.md │ │ ├── taskdef.md │ │ └── workflowdef │ │ │ ├── index.md │ │ │ ├── operators │ │ │ ├── ShippingWorkflow.png │ │ │ ├── ShippingWorkflowRunning.png │ │ │ ├── ShippingWorkflowUPS.png │ │ │ ├── Switch_Fedex.png │ │ │ ├── Terminate_Task.png │ │ │ ├── do-while-task.md │ │ │ ├── dynamic-fork-task.md │ │ │ ├── dynamic-task-diagram.png │ │ │ ├── dynamic-task.md │ │ │ ├── fork-task-diagram.png │ │ │ ├── fork-task.md │ │ │ ├── index.md │ │ │ ├── join-task.md │ │ │ ├── set-variable-task.md │ │ │ ├── start-workflow-task.md │ │ │ ├── sub-workflow-task.md │ │ │ ├── subworkflow_diagram.png │ │ │ ├── switch-task.md │ │ │ ├── terminate-task.md │ │ │ └── workflow_fork.png │ │ │ └── systemtasks │ │ │ ├── event-task.md │ │ │ ├── http-task.md │ │ │ ├── human-task.md │ │ │ ├── index.md │ │ │ ├── inline-task.md │ │ │ ├── json-jq-transform-task.md │ │ │ ├── kafka-publish-task.md │ │ │ └── wait-task.md │ └── metrics │ │ ├── client.md │ │ └── server.md ├── home │ ├── devex.png │ ├── icons │ │ ├── brackets.svg │ │ ├── conductor.svg │ │ ├── modular.svg │ │ ├── network.svg │ │ ├── osi.svg │ │ ├── server.svg │ │ ├── shield.svg │ │ └── wrench.svg │ ├── redirect.html │ ├── timeline.png │ └── workflow.svg ├── img │ └── logo.svg ├── index.md ├── overrides │ └── partials │ │ └── logo.html └── resources │ ├── contributing.md │ ├── license.md │ └── related.md ├── es6-persistence ├── build.gradle └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ └── es6 │ │ │ ├── config │ │ │ ├── ElasticSearchConditions.java │ │ │ ├── ElasticSearchProperties.java │ │ │ ├── ElasticSearchV6Configuration.java │ │ │ ├── IsHttpProtocol.java │ │ │ └── IsTcpProtocol.java │ │ │ └── dao │ │ │ ├── index │ │ │ ├── BulkRequestBuilderWrapper.java │ │ │ ├── BulkRequestWrapper.java │ │ │ ├── ElasticSearchBaseDAO.java │ │ │ ├── ElasticSearchDAOV6.java │ │ │ └── ElasticSearchRestDAOV6.java │ │ │ └── query │ │ │ └── parser │ │ │ ├── Expression.java │ │ │ ├── FilterProvider.java │ │ │ ├── GroupedExpression.java │ │ │ ├── NameValue.java │ │ │ └── internal │ │ │ ├── AbstractNode.java │ │ │ ├── BooleanOp.java │ │ │ ├── ComparisonOp.java │ │ │ ├── ConstValue.java │ │ │ ├── FunctionThrowingException.java │ │ │ ├── ListConst.java │ │ │ ├── Name.java │ │ │ ├── ParserException.java │ │ │ └── Range.java │ └── resources │ │ ├── mappings_docType_task.json │ │ ├── mappings_docType_workflow.json │ │ ├── template_event.json │ │ ├── template_message.json │ │ └── template_task_log.json │ └── test │ ├── java │ └── com │ │ └── netflix │ │ └── conductor │ │ └── es6 │ │ ├── dao │ │ ├── index │ │ │ ├── ElasticSearchDaoBaseTest.java │ │ │ ├── ElasticSearchRestDaoBaseTest.java │ │ │ ├── ElasticSearchTest.java │ │ │ ├── TestElasticSearchDAOV6.java │ │ │ ├── TestElasticSearchDAOV6Batch.java │ │ │ ├── TestElasticSearchRestDAOV6.java │ │ │ └── TestElasticSearchRestDAOV6Batch.java │ │ └── query │ │ │ └── parser │ │ │ ├── TestExpression.java │ │ │ └── internal │ │ │ ├── TestAbstractParser.java │ │ │ ├── TestBooleanOp.java │ │ │ ├── TestComparisonOp.java │ │ │ ├── TestConstValue.java │ │ │ └── TestName.java │ │ └── utils │ │ └── TestUtils.java │ └── resources │ ├── expected_template_task_log.json │ ├── task_summary.json │ └── workflow_summary.json ├── es7-persistence ├── README.md ├── build.gradle └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ └── es7 │ │ │ ├── config │ │ │ ├── ElasticSearchConditions.java │ │ │ ├── ElasticSearchProperties.java │ │ │ └── ElasticSearchV7Configuration.java │ │ │ └── dao │ │ │ ├── index │ │ │ ├── BulkRequestBuilderWrapper.java │ │ │ ├── BulkRequestWrapper.java │ │ │ ├── ElasticSearchBaseDAO.java │ │ │ └── ElasticSearchRestDAOV7.java │ │ │ └── query │ │ │ └── parser │ │ │ ├── Expression.java │ │ │ ├── FilterProvider.java │ │ │ ├── GroupedExpression.java │ │ │ ├── NameValue.java │ │ │ └── internal │ │ │ ├── AbstractNode.java │ │ │ ├── BooleanOp.java │ │ │ ├── ComparisonOp.java │ │ │ ├── ConstValue.java │ │ │ ├── FunctionThrowingException.java │ │ │ ├── ListConst.java │ │ │ ├── Name.java │ │ │ ├── ParserException.java │ │ │ └── Range.java │ └── resources │ │ ├── mappings_docType_task.json │ │ ├── mappings_docType_workflow.json │ │ ├── template_event.json │ │ ├── template_message.json │ │ └── template_task_log.json │ └── test │ ├── java │ └── com │ │ └── netflix │ │ └── conductor │ │ └── es7 │ │ ├── dao │ │ ├── index │ │ │ ├── ElasticSearchRestDaoBaseTest.java │ │ │ ├── ElasticSearchTest.java │ │ │ ├── TestBulkRequestBuilderWrapper.java │ │ │ ├── TestElasticSearchRestDAOV7.java │ │ │ └── TestElasticSearchRestDAOV7Batch.java │ │ └── query │ │ │ └── parser │ │ │ ├── TestExpression.java │ │ │ ├── TestGroupedExpression.java │ │ │ └── internal │ │ │ ├── AbstractParserTest.java │ │ │ ├── TestBooleanOp.java │ │ │ ├── TestComparisonOp.java │ │ │ ├── TestConstValue.java │ │ │ └── TestName.java │ │ └── utils │ │ └── TestUtils.java │ └── resources │ ├── expected_template_task_log.json │ ├── task_summary.json │ └── workflow_summary.json ├── family.properties ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── grpc-client ├── README.md ├── build.gradle └── src │ ├── main │ └── java │ │ └── com │ │ └── netflix │ │ └── conductor │ │ └── client │ │ └── grpc │ │ ├── ClientBase.java │ │ ├── EventClient.java │ │ ├── MetadataClient.java │ │ ├── TaskClient.java │ │ └── WorkflowClient.java │ └── test │ ├── java │ └── com │ │ └── netflix │ │ └── conductor │ │ └── client │ │ └── grpc │ │ ├── EventClientTest.java │ │ ├── TaskClientTest.java │ │ └── WorkflowClientTest.java │ └── resources │ └── mockito-extensions │ └── org.mockito.plugins.MockMaker ├── grpc-server ├── build.gradle └── src │ ├── main │ └── java │ │ └── com │ │ └── netflix │ │ └── conductor │ │ └── grpc │ │ └── server │ │ ├── GRPCServer.java │ │ ├── GRPCServerProperties.java │ │ ├── GrpcConfiguration.java │ │ └── service │ │ ├── EventServiceImpl.java │ │ ├── GRPCHelper.java │ │ ├── HealthServiceImpl.java │ │ ├── MetadataServiceImpl.java │ │ ├── TaskServiceImpl.java │ │ └── WorkflowServiceImpl.java │ └── test │ ├── java │ └── com │ │ └── netflix │ │ └── conductor │ │ └── grpc │ │ └── server │ │ └── service │ │ ├── HealthServiceImplTest.java │ │ ├── TaskServiceImplTest.java │ │ └── WorkflowServiceImplTest.java │ └── resources │ └── log4j.properties ├── grpc ├── build.gradle └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ └── grpc │ │ │ ├── AbstractProtoMapper.java │ │ │ └── ProtoMapper.java │ └── proto │ │ ├── grpc │ │ ├── event_service.proto │ │ ├── metadata_service.proto │ │ ├── search.proto │ │ ├── task_service.proto │ │ └── workflow_service.proto │ │ └── model │ │ ├── dynamicforkjointask.proto │ │ ├── dynamicforkjointasklist.proto │ │ ├── eventexecution.proto │ │ ├── eventhandler.proto │ │ ├── polldata.proto │ │ ├── ratelimitconfig.proto │ │ ├── rerunworkflowrequest.proto │ │ ├── schemadef.proto │ │ ├── skiptaskrequest.proto │ │ ├── startworkflowrequest.proto │ │ ├── statechangeevent.proto │ │ ├── subworkflowparams.proto │ │ ├── task.proto │ │ ├── taskdef.proto │ │ ├── taskexeclog.proto │ │ ├── taskresult.proto │ │ ├── tasksummary.proto │ │ ├── upgradeworkflowrequest.proto │ │ ├── workflow.proto │ │ ├── workflowdef.proto │ │ ├── workflowdefsummary.proto │ │ ├── workflowsummary.proto │ │ └── workflowtask.proto │ └── test │ └── java │ └── com │ └── netflix │ └── conductor │ └── grpc │ └── TestProtoMapper.java ├── http-task ├── build.gradle └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ └── tasks │ │ │ └── http │ │ │ ├── HttpTask.java │ │ │ └── providers │ │ │ ├── DefaultRestTemplateProvider.java │ │ │ └── RestTemplateProvider.java │ └── resources │ │ └── META-INF │ │ └── additional-spring-configuration-metadata.json │ └── test │ └── java │ └── com │ └── netflix │ └── conductor │ └── tasks │ └── http │ ├── HttpTaskTest.java │ └── providers │ └── DefaultRestTemplateProviderTest.java ├── java-sdk ├── README.md ├── build.gradle ├── example │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ └── sdk │ │ │ └── example │ │ │ └── shipment │ │ │ ├── Order.java │ │ │ ├── Shipment.java │ │ │ ├── ShipmentState.java │ │ │ ├── ShipmentWorkers.java │ │ │ ├── ShipmentWorkflow.java │ │ │ └── User.java │ └── resources │ │ └── script.js ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── netflix │ │ │ │ └── conductor │ │ │ │ └── sdk │ │ │ │ ├── healthcheck │ │ │ │ └── HealthCheckClient.java │ │ │ │ ├── testing │ │ │ │ ├── LocalServerRunner.java │ │ │ │ └── WorkflowTestRunner.java │ │ │ │ └── workflow │ │ │ │ ├── def │ │ │ │ ├── ConductorWorkflow.java │ │ │ │ ├── ValidationError.java │ │ │ │ ├── WorkflowBuilder.java │ │ │ │ └── tasks │ │ │ │ │ ├── DoWhile.java │ │ │ │ │ ├── Dynamic.java │ │ │ │ │ ├── DynamicFork.java │ │ │ │ │ ├── DynamicForkInput.java │ │ │ │ │ ├── Event.java │ │ │ │ │ ├── ForkJoin.java │ │ │ │ │ ├── Http.java │ │ │ │ │ ├── JQ.java │ │ │ │ │ ├── Javascript.java │ │ │ │ │ ├── Join.java │ │ │ │ │ ├── Python.java │ │ │ │ │ ├── SetVariable.java │ │ │ │ │ ├── SimpleTask.java │ │ │ │ │ ├── SubWorkflow.java │ │ │ │ │ ├── Switch.java │ │ │ │ │ ├── Task.java │ │ │ │ │ ├── TaskRegistry.java │ │ │ │ │ ├── Terminate.java │ │ │ │ │ └── Wait.java │ │ │ │ ├── executor │ │ │ │ ├── WorkflowExecutor.java │ │ │ │ └── task │ │ │ │ │ ├── AnnotatedWorker.java │ │ │ │ │ ├── AnnotatedWorkerExecutor.java │ │ │ │ │ ├── DynamicForkWorker.java │ │ │ │ │ ├── NonRetryableException.java │ │ │ │ │ ├── TaskContext.java │ │ │ │ │ └── WorkerConfiguration.java │ │ │ │ ├── task │ │ │ │ ├── InputParam.java │ │ │ │ ├── OutputParam.java │ │ │ │ └── WorkerTask.java │ │ │ │ └── utils │ │ │ │ ├── InputOutputGetter.java │ │ │ │ ├── MapBuilder.java │ │ │ │ └── ObjectMapperProvider.java │ │ └── resources │ │ │ └── test-server.properties │ └── test │ │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ └── sdk │ │ │ └── workflow │ │ │ ├── def │ │ │ ├── TaskConversionsTests.java │ │ │ ├── WorkflowCreationTests.java │ │ │ ├── WorkflowDefTaskTests.java │ │ │ └── WorkflowState.java │ │ │ ├── executor │ │ │ └── task │ │ │ │ ├── AnnotatedWorkerTests.java │ │ │ │ └── TestWorkerConfig.java │ │ │ └── testing │ │ │ ├── Task1Input.java │ │ │ ├── TestWorkflowInput.java │ │ │ └── WorkflowTestFrameworkTests.java │ │ └── resources │ │ ├── application-integrationtest.properties │ │ ├── log4j2.xml │ │ ├── script.js │ │ ├── simple_workflow.json │ │ └── tasks.json ├── testing_framework.md ├── worker_sdk.md └── workflow_sdk.md ├── json-jq-task ├── build.gradle └── src │ ├── main │ └── java │ │ └── com │ │ └── netflix │ │ └── conductor │ │ └── tasks │ │ └── json │ │ └── JsonJqTransform.java │ └── test │ └── java │ └── com │ └── netflix │ └── conductor │ └── tasks │ └── json │ └── JsonJqTransformTest.java ├── kafka-event-queue ├── README.md ├── build.gradle └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ └── kafkaeq │ │ │ ├── config │ │ │ ├── KafkaEventQueueConfiguration.java │ │ │ ├── KafkaEventQueueProperties.java │ │ │ └── KafkaEventQueueProvider.java │ │ │ └── eventqueue │ │ │ └── KafkaObservableQueue.java │ └── resources │ │ └── META-INF │ │ └── additional-spring-configuration-metadata.json │ └── test │ └── java │ └── com │ └── netflix │ └── conductor │ └── kafkaeq │ └── eventqueue │ └── KafkaObservableQueueTest.java ├── kafka ├── README.md ├── build.gradle └── src │ ├── main │ └── java │ │ └── com │ │ └── netflix │ │ └── conductor │ │ ├── contribs │ │ └── tasks │ │ │ └── kafka │ │ │ ├── KafkaProducerManager.java │ │ │ └── KafkaPublishTask.java │ │ └── core │ │ └── execution │ │ └── mapper │ │ └── KafkaPublishTaskMapper.java │ └── test │ ├── groovy │ └── com │ │ └── netflix │ │ └── conductor │ │ └── test │ │ └── integration │ │ └── KafkaPublishTaskSpec.groovy │ ├── java │ └── com │ │ └── netflix │ │ └── conductor │ │ ├── contribs │ │ └── tasks │ │ │ └── kafka │ │ │ ├── KafkaProducerManagerTest.java │ │ │ └── KafkaPublishTaskTest.java │ │ └── core │ │ └── execution │ │ └── mapper │ │ └── KafkaPublishTaskMapperTest.java │ └── resources │ ├── application-integrationtest.properties │ ├── input.json │ ├── output.json │ └── simple_json_jq_transform_integration_test.json ├── licenseheader.txt ├── main.py ├── metrics ├── README.md ├── build.gradle └── src │ ├── main │ └── java │ │ └── com │ │ └── netflix │ │ └── conductor │ │ └── contribs │ │ └── metrics │ │ ├── LoggingMetricsConfiguration.java │ │ ├── MetricsRegistryConfiguration.java │ │ └── PrometheusMetricsConfiguration.java │ └── test │ └── java │ └── com │ └── netflix │ └── conductor │ └── contribs │ └── metrics │ ├── LoggingMetricsConfigurationTest.java │ └── PrometheusMetricsConfigurationTest.java ├── mkdocs.yml ├── mysql-persistence ├── build.gradle └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ └── mysql │ │ │ ├── config │ │ │ ├── MySQLConfiguration.java │ │ │ └── MySQLProperties.java │ │ │ ├── dao │ │ │ ├── MySQLBaseDAO.java │ │ │ ├── MySQLExecutionDAO.java │ │ │ ├── MySQLMetadataDAO.java │ │ │ └── MySQLQueueDAO.java │ │ │ └── util │ │ │ ├── ExecuteFunction.java │ │ │ ├── LazyToString.java │ │ │ ├── Query.java │ │ │ ├── QueryFunction.java │ │ │ ├── ResultSetHandler.java │ │ │ └── TransactionalFunction.java │ └── resources │ │ └── db │ │ └── migration │ │ ├── V1__initial_schema.sql │ │ ├── V2__queue_message_timestamps.sql │ │ ├── V3__queue_add_priority.sql │ │ ├── V4__1009_Fix_MySQLExecutionDAO_Index.sql │ │ ├── V5__correlation_id_index.sql │ │ ├── V6__new_qm_index_with_priority.sql │ │ ├── V7__new_queue_message_pk.sql │ │ └── V8__update_pk.sql │ └── test │ ├── java │ └── com │ │ └── netflix │ │ └── conductor │ │ ├── mysql │ │ └── dao │ │ │ ├── MySQLExecutionDAOTest.java │ │ │ ├── MySQLMetadataDAOTest.java │ │ │ └── MySQLQueueDAOTest.java │ │ └── test │ │ └── integration │ │ └── grpc │ │ └── mysql │ │ └── MySQLGrpcEndToEndTest.java │ └── resources │ └── application.properties ├── nats-streaming ├── README.md ├── build.gradle └── src │ └── main │ └── java │ └── com │ └── netflix │ └── conductor │ └── contribs │ └── queue │ └── stan │ ├── NATSAbstractQueue.java │ ├── NATSObservableQueue.java │ ├── NATSStreamObservableQueue.java │ └── config │ ├── NATSConfiguration.java │ ├── NATSEventQueueProvider.java │ ├── NATSStreamConfiguration.java │ ├── NATSStreamEventQueueProvider.java │ └── NATSStreamProperties.java ├── nats ├── build.gradle └── src │ └── main │ └── java │ └── com │ └── netflix │ └── conductor │ └── contribs │ └── queue │ └── nats │ ├── JetStreamObservableQueue.java │ ├── JsmMessage.java │ ├── LoggingNatsErrorListener.java │ ├── NATSAbstractQueue.java │ ├── NATSObservableQueue.java │ ├── NatsException.java │ └── config │ ├── JetStreamConfiguration.java │ ├── JetStreamEventQueueProvider.java │ ├── JetStreamProperties.java │ ├── NATSConfiguration.java │ └── NATSEventQueueProvider.java ├── os-persistence ├── build.gradle └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ └── os │ │ │ ├── config │ │ │ ├── OpenSearchConditions.java │ │ │ ├── OpenSearchConfiguration.java │ │ │ └── OpenSearchProperties.java │ │ │ └── dao │ │ │ ├── index │ │ │ ├── BulkRequestBuilderWrapper.java │ │ │ ├── BulkRequestWrapper.java │ │ │ ├── OpenSearchBaseDAO.java │ │ │ └── OpenSearchRestDAO.java │ │ │ └── query │ │ │ └── parser │ │ │ ├── Expression.java │ │ │ ├── FilterProvider.java │ │ │ ├── GroupedExpression.java │ │ │ ├── NameValue.java │ │ │ └── internal │ │ │ ├── AbstractNode.java │ │ │ ├── BooleanOp.java │ │ │ ├── ComparisonOp.java │ │ │ ├── ConstValue.java │ │ │ ├── FunctionThrowingException.java │ │ │ ├── ListConst.java │ │ │ ├── Name.java │ │ │ ├── ParserException.java │ │ │ └── Range.java │ └── resources │ │ ├── mappings_docType_task.json │ │ ├── mappings_docType_workflow.json │ │ ├── template_event.json │ │ ├── template_message.json │ │ └── template_task_log.json │ └── test │ ├── java │ └── com │ │ └── netflix │ │ └── conductor │ │ └── os │ │ ├── dao │ │ ├── index │ │ │ ├── OpenSearchRestDaoBaseTest.java │ │ │ ├── OpenSearchTest.java │ │ │ ├── TestBulkRequestBuilderWrapper.java │ │ │ ├── TestOpenSearchRestDAO.java │ │ │ └── TestOpenSearchRestDAOBatch.java │ │ └── query │ │ │ └── parser │ │ │ ├── TestExpression.java │ │ │ ├── TestGroupedExpression.java │ │ │ └── internal │ │ │ ├── AbstractParserTest.java │ │ │ ├── TestBooleanOp.java │ │ │ ├── TestComparisonOp.java │ │ │ ├── TestConstValue.java │ │ │ └── TestName.java │ │ └── utils │ │ └── TestUtils.java │ └── resources │ ├── expected_template_task_log.json │ ├── task_summary.json │ └── workflow_summary.json ├── polyglot-clients └── README.md ├── postgres-external-storage ├── README.md ├── build.gradle └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ └── postgres │ │ │ ├── config │ │ │ ├── PostgresPayloadConfiguration.java │ │ │ └── PostgresPayloadProperties.java │ │ │ ├── controller │ │ │ └── ExternalPostgresPayloadResource.java │ │ │ └── storage │ │ │ └── PostgresPayloadStorage.java │ └── resources │ │ └── db │ │ └── migration_external_postgres │ │ └── R__initial_schema.sql │ └── test │ └── java │ └── com │ └── netflix │ └── conductor │ └── postgres │ ├── controller │ └── ExternalPostgresPayloadResourceTest.java │ └── storage │ ├── PostgresPayloadStorageTest.java │ └── PostgresPayloadTestUtil.java ├── postgres-persistence ├── build.gradle └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ └── postgres │ │ │ ├── config │ │ │ ├── PostgresConfiguration.java │ │ │ └── PostgresProperties.java │ │ │ ├── dao │ │ │ ├── PostgresBaseDAO.java │ │ │ ├── PostgresExecutionDAO.java │ │ │ ├── PostgresIndexDAO.java │ │ │ ├── PostgresLockDAO.java │ │ │ ├── PostgresMetadataDAO.java │ │ │ ├── PostgresPollDataDAO.java │ │ │ └── PostgresQueueDAO.java │ │ │ └── util │ │ │ ├── ExecuteFunction.java │ │ │ ├── ExecutorsUtil.java │ │ │ ├── LazyToString.java │ │ │ ├── PostgresIndexQueryBuilder.java │ │ │ ├── PostgresQueueListener.java │ │ │ ├── Query.java │ │ │ ├── QueryFunction.java │ │ │ ├── QueueStats.java │ │ │ ├── ResultSetHandler.java │ │ │ └── TransactionalFunction.java │ └── resources │ │ └── db │ │ ├── migration_postgres │ │ ├── V10__poll_data_check.sql │ │ ├── V11__locking.sql │ │ ├── V12__task_index_columns.sql │ │ ├── V13.1__workflow_index_columns.sql │ │ ├── V1__initial_schema.sql │ │ ├── V2__1009_Fix_PostgresExecutionDAO_Index.sql │ │ ├── V3__correlation_id_index.sql │ │ ├── V4__new_qm_index_with_priority.sql │ │ ├── V5__new_queue_message_pk.sql │ │ ├── V6__update_pk.sql │ │ ├── V7__new_qm_index_desc_priority.sql │ │ ├── V8__indexing.sql │ │ └── V9__indexing_index_fix.sql │ │ ├── migration_postgres_data │ │ └── V13.2__workflow_index_backfill_update_time.sql │ │ └── migration_postgres_notify │ │ └── V10.1__notify.sql │ └── test │ ├── java │ └── com │ │ └── netflix │ │ └── conductor │ │ ├── postgres │ │ ├── config │ │ │ └── PostgresConfigurationDataMigrationTest.java │ │ ├── dao │ │ │ ├── PostgresExecutionDAOTest.java │ │ │ ├── PostgresIndexDAOStatusChangeOnlyTest.java │ │ │ ├── PostgresIndexDAOTest.java │ │ │ ├── PostgresLockDAOTest.java │ │ │ ├── PostgresMetadataDAOTest.java │ │ │ ├── PostgresPollDataDAOCacheTest.java │ │ │ ├── PostgresPollDataDAONoCacheTest.java │ │ │ └── PostgresQueueDAOTest.java │ │ ├── performance │ │ │ └── PerformanceTest.java │ │ └── util │ │ │ ├── PostgresIndexQueryBuilderTest.java │ │ │ └── PostgresQueueListenerTest.java │ │ └── test │ │ └── integration │ │ └── grpc │ │ └── postgres │ │ └── PostgresGrpcEndToEndTest.java │ └── resources │ └── application.properties ├── redis-concurrency-limit ├── build.gradle └── src │ ├── main │ └── java │ │ └── com │ │ └── netflix │ │ └── conductor │ │ └── redis │ │ └── limit │ │ ├── RedisConcurrentExecutionLimitDAO.java │ │ └── config │ │ ├── RedisConcurrentExecutionLimitConfiguration.java │ │ └── RedisConcurrentExecutionLimitProperties.java │ └── test │ └── groovy │ └── com │ └── netflix │ └── conductor │ └── redis │ └── limit │ └── RedisConcurrentExecutionLimitDAOSpec.groovy ├── redis-lock ├── build.gradle └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ └── redislock │ │ │ ├── config │ │ │ ├── RedisHealthIndicator.java │ │ │ ├── RedisLockConfiguration.java │ │ │ └── RedisLockProperties.java │ │ │ └── lock │ │ │ └── RedisLock.java │ └── resources │ │ └── META-INF │ │ └── additional-spring-configuration-metadata.json │ └── test │ └── java │ └── com │ └── netflix │ └── conductor │ ├── redis │ └── lock │ │ └── RedisLockTest.java │ └── redislock │ └── config │ └── RedisHealthIndicatorTest.java ├── redis-persistence ├── build.gradle └── src │ ├── main │ └── java │ │ └── com │ │ └── netflix │ │ └── conductor │ │ └── redis │ │ ├── config │ │ ├── AnyRedisCondition.java │ │ ├── DynomiteClusterConfiguration.java │ │ ├── InMemoryRedisConfiguration.java │ │ ├── JedisCommandsConfigurer.java │ │ ├── RedisClusterConfiguration.java │ │ ├── RedisCommonConfiguration.java │ │ ├── RedisProperties.java │ │ ├── RedisSentinelConfiguration.java │ │ └── RedisStandaloneConfiguration.java │ │ ├── dao │ │ ├── BaseDynoDAO.java │ │ ├── DynoQueueDAO.java │ │ ├── RedisEventHandlerDAO.java │ │ ├── RedisExecutionDAO.java │ │ ├── RedisMetadataDAO.java │ │ ├── RedisPollDataDAO.java │ │ └── RedisRateLimitingDAO.java │ │ ├── dynoqueue │ │ ├── ConfigurationHostSupplier.java │ │ ├── LocalhostHostSupplier.java │ │ └── RedisQueuesShardingStrategyProvider.java │ │ └── jedis │ │ ├── JedisCluster.java │ │ ├── JedisMock.java │ │ ├── JedisProxy.java │ │ ├── JedisSentinel.java │ │ └── JedisStandalone.java │ └── test │ └── java │ └── com │ └── netflix │ └── conductor │ └── redis │ ├── config │ └── utils │ │ └── RedisQueuesShardingStrategyProviderTest.java │ ├── dao │ ├── BaseDynoDAOTest.java │ ├── DynoQueueDAOTest.java │ ├── RedisEventHandlerDAOTest.java │ ├── RedisExecutionDAOTest.java │ ├── RedisMetadataDAOTest.java │ ├── RedisPollDataDAOTest.java │ └── RedisRateLimitDAOTest.java │ └── jedis │ ├── ConfigurationHostSupplierTest.java │ ├── JedisClusterTest.java │ └── JedisSentinelTest.java ├── requirements.txt ├── rest ├── build.gradle └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ └── rest │ │ │ ├── config │ │ │ ├── RequestMappingConstants.java │ │ │ └── RestConfiguration.java │ │ │ ├── controllers │ │ │ ├── AdminResource.java │ │ │ ├── ApplicationExceptionMapper.java │ │ │ ├── EventResource.java │ │ │ ├── HealthCheckResource.java │ │ │ ├── MetadataResource.java │ │ │ ├── QueueAdminResource.java │ │ │ ├── TaskResource.java │ │ │ ├── ValidationExceptionMapper.java │ │ │ ├── WorkflowBulkResource.java │ │ │ └── WorkflowResource.java │ │ │ └── startup │ │ │ └── KitchenSinkInitializer.java │ └── resources │ │ ├── kitchensink │ │ ├── kitchenSink-ephemeralWorkflowWithEphemeralTasks.json │ │ ├── kitchenSink-ephemeralWorkflowWithStoredTasks.json │ │ ├── kitchensink.json │ │ ├── sub_flow_1.json │ │ ├── wf1.json │ │ └── wf2.json │ │ └── static │ │ ├── favicon.ico │ │ ├── index.html │ │ └── logo.png │ └── test │ └── java │ └── com │ └── netflix │ └── conductor │ └── rest │ └── controllers │ ├── AdminResourceTest.java │ ├── ApplicationExceptionMapperTest.java │ ├── EventResourceTest.java │ ├── MetadataResourceTest.java │ ├── TaskResourceTest.java │ └── WorkflowResourceTest.java ├── server-lite ├── build.gradle ├── build_ui.sh └── src │ └── main │ ├── java │ └── org │ │ └── conductoross │ │ └── conductor │ │ ├── Conductor.java │ │ ├── RestConfiguration.java │ │ └── SpaInterceptor.java │ └── resources │ └── application.properties ├── server ├── build.gradle └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ └── Conductor.java │ └── resources │ │ ├── META-INF │ │ └── additional-spring-configuration-metadata.json │ │ ├── application.properties │ │ ├── banner.txt │ │ └── log4j2.xml │ └── test │ └── java │ └── com │ └── netflix │ └── conductor │ └── common │ └── config │ └── ConductorObjectMapperTest.java ├── settings.gradle ├── springboot-bom-overrides.gradle ├── sqlite-persistence ├── build.gradle └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── netflix │ │ │ └── conductor │ │ │ └── sqlite │ │ │ ├── config │ │ │ ├── SqliteConfiguration.java │ │ │ └── SqliteProperties.java │ │ │ ├── dao │ │ │ ├── SqliteBaseDAO.java │ │ │ ├── SqliteExecutionDAO.java │ │ │ ├── SqliteIndexDAO.java │ │ │ ├── SqlitePollDataDAO.java │ │ │ ├── SqliteQueueDAO.java │ │ │ └── metadata │ │ │ │ ├── SqliteEventHandlerMetadataDAO.java │ │ │ │ ├── SqliteMetadataDAO.java │ │ │ │ ├── SqliteTaskMetadataDAO.java │ │ │ │ └── SqliteWorkflowMetadataDAO.java │ │ │ └── util │ │ │ ├── ExecuteFunction.java │ │ │ ├── ExecutorsUtil.java │ │ │ ├── LazyToString.java │ │ │ ├── Query.java │ │ │ ├── QueryFunction.java │ │ │ ├── QueueStats.java │ │ │ ├── ResultSetHandler.java │ │ │ ├── SqliteIndexQueryBuilder.java │ │ │ └── TransactionalFunction.java │ └── resources │ │ └── db │ │ └── migration_sqlite │ │ └── V1__initial_schema.sql │ └── test │ ├── java │ └── com │ │ └── netflix │ │ └── conductor │ │ └── sqlite │ │ └── dao │ │ ├── SqliteExecutionDAOTest.java │ │ ├── SqliteIndexDAOTest.java │ │ ├── SqliteMetadataDAOTest.java │ │ ├── SqlitePollDataTest.java │ │ └── SqliteQueueDAOTest.java │ └── resources │ └── application.properties ├── task-status-listener ├── build.gradle └── src │ └── main │ └── java │ └── com │ └── netflix │ └── conductor │ └── contribs │ └── listener │ ├── RestClientManager.java │ ├── StatusNotifier.java │ ├── StatusNotifierNotificationProperties.java │ ├── TaskNotification.java │ ├── TaskStatusPublisher.java │ └── TaskStatusPublisherConfiguration.java ├── test-harness ├── build.gradle └── src │ └── test │ ├── groovy │ └── com │ │ └── netflix │ │ └── conductor │ │ └── test │ │ ├── base │ │ ├── AbstractResiliencySpecification.groovy │ │ └── AbstractSpecification.groovy │ │ ├── integration │ │ ├── DecisionTaskSpec.groovy │ │ ├── DoWhileSpec.groovy │ │ ├── DynamicForkJoinSpec.groovy │ │ ├── EventTaskSpec.groovy │ │ ├── ExclusiveJoinSpec.groovy │ │ ├── ExternalPayloadStorageSpec.groovy │ │ ├── FailureWorkflowSpec.groovy │ │ ├── ForkJoinSpec.groovy │ │ ├── HierarchicalForkJoinSubworkflowRerunSpec.groovy │ │ ├── HierarchicalForkJoinSubworkflowRestartSpec.groovy │ │ ├── HierarchicalForkJoinSubworkflowRetrySpec.groovy │ │ ├── JsonJQTransformSpec.groovy │ │ ├── LambdaAndTerminateTaskSpec.groovy │ │ ├── NestedForkJoinSubWorkflowSpec.groovy │ │ ├── SetVariableTaskSpec.groovy │ │ ├── SimpleWorkflowSpec.groovy │ │ ├── StartWorkflowSpec.groovy │ │ ├── SubWorkflowRerunSpec.groovy │ │ ├── SubWorkflowRestartSpec.groovy │ │ ├── SubWorkflowRetrySpec.groovy │ │ ├── SubWorkflowSpec.groovy │ │ ├── SwitchTaskSpec.groovy │ │ ├── SystemTaskSpec.groovy │ │ ├── TaskLimitsWorkflowSpec.groovy │ │ ├── TestWorkflowSpec.groovy │ │ ├── WaitTaskSpec.groovy │ │ └── WorkflowAndTaskConfigurationSpec.groovy │ │ ├── resiliency │ │ ├── QueueResiliencySpec.groovy │ │ └── TaskResiliencySpec.groovy │ │ └── util │ │ └── WorkflowTestUtil.groovy │ ├── java │ └── com │ │ └── netflix │ │ └── conductor │ │ ├── ConductorTestApp.java │ │ └── test │ │ ├── integration │ │ ├── AbstractEndToEndTest.java │ │ ├── grpc │ │ │ ├── AbstractGrpcEndToEndTest.java │ │ │ └── GrpcEndToEndTest.java │ │ └── http │ │ │ ├── AbstractHttpEndToEndTest.java │ │ │ └── HttpEndToEndTest.java │ │ └── utils │ │ ├── MockExternalPayloadStorage.java │ │ └── UserTask.java │ └── resources │ ├── application-integrationtest.properties │ ├── concurrency_limited_task_workflow_integration_test.json │ ├── conditional_switch_task_workflow_integration_test.json │ ├── conditional_system_task_workflow_integration_test.json │ ├── conditional_task_workflow_integration_test.json │ ├── decision_and_fork_join_integration_test.json │ ├── decision_and_terminate_integration_test.json │ ├── do_while_as_subtask_integration_test.json │ ├── do_while_five_loop_over_integration_test.json │ ├── do_while_integration_test.json │ ├── do_while_iteration_fix_test.json │ ├── do_while_multiple_integration_test.json │ ├── do_while_set_variable_fix.json │ ├── do_while_sub_workflow_integration_test.json │ ├── do_while_system_tasks.json │ ├── do_while_with_decision_task.json │ ├── dynamic_fork_join_integration_test.json │ ├── event_workflow_integration_test.json │ ├── exclusive_join_integration_test.json │ ├── failure_workflow_for_terminate_task_workflow.json │ ├── fork_join_integration_test.json │ ├── fork_join_permissive_integration_test.json │ ├── fork_join_sub_workflow.json │ ├── fork_join_with_no_permissive_task_retry_integration_test.json │ ├── fork_join_with_no_task_retry_integration_test.json │ ├── fork_join_with_optional_sub_workflow_forks_integration_test.json │ ├── hierarchical_fork_join_swf.json │ ├── input.json │ ├── json_jq_transform_result_integration_test.json │ ├── nested_fork_join_integration_test.json │ ├── nested_fork_join_swf.json │ ├── nested_fork_join_with_sub_workflow_integration_test.json │ ├── output.json │ ├── rate_limited_simple_task_workflow_integration_test.json │ ├── rate_limited_system_task_workflow_integration_test.json │ ├── sequential_json_jq_transform_integration_test.json │ ├── set_variable_workflow_integration_test.json │ ├── simple_decision_task_integration_test.json │ ├── simple_json_jq_transform_integration_test.json │ ├── simple_lambda_workflow_integration_test.json │ ├── simple_one_task_sub_workflow_integration_test.json │ ├── simple_set_variable_workflow_integration_test.json │ ├── simple_switch_task_integration_test.json │ ├── simple_wait_task_workflow_integration_test.json │ ├── simple_workflow_1_input_template_integration_test.json │ ├── simple_workflow_1_integration_test.json │ ├── simple_workflow_3_integration_test.json │ ├── simple_workflow_with_async_complete_system_task_integration_test.json │ ├── simple_workflow_with_optional_task_integration_test.json │ ├── simple_workflow_with_permissive_optional_task_integration_test.json │ ├── simple_workflow_with_permissive_task_integration_test.json │ ├── simple_workflow_with_resp_time_out_integration_test.json │ ├── simple_workflow_with_sub_workflow_inline_def_integration_test.json │ ├── start_workflow_input.json │ ├── switch_and_fork_join_integration_test.json │ ├── switch_and_terminate_integration_test.json │ ├── switch_with_no_default_case_integration_test.json │ ├── terminate_task_completed_workflow_integration_test.json │ ├── terminate_task_failed_workflow_integration.json │ ├── terminate_task_parent_workflow.json │ ├── terminate_task_sub_workflow.json │ ├── test_task_failed_parent_workflow.json │ ├── test_task_failed_sub_workflow.json │ ├── wait_workflow_integration_test.json │ ├── workflow_that_starts_another_workflow.json │ ├── workflow_with_sub_workflow_1_integration_test.json │ └── workflow_with_synchronous_system_task.json ├── test-util ├── build.gradle └── src │ └── test │ ├── groovy │ └── com │ │ └── netflix │ │ └── conductor │ │ └── test │ │ ├── base │ │ ├── AbstractResiliencySpecification.groovy │ │ └── AbstractSpecification.groovy │ │ └── util │ │ └── WorkflowTestUtil.groovy │ ├── java │ └── com │ │ └── netflix │ │ └── conductor │ │ ├── ConductorTestApp.java │ │ ├── common │ │ └── config │ │ │ └── TestObjectMapperConfiguration.java │ │ └── test │ │ └── integration │ │ ├── AbstractEndToEndTest.java │ │ └── grpc │ │ └── AbstractGrpcEndToEndTest.java │ └── resources │ └── application-integrationtest.properties ├── ui ├── .env ├── .eslintrc ├── .gitignore ├── .prettierignore ├── .prettierrc.json ├── README.md ├── cypress.config.ts ├── cypress │ ├── e2e │ │ └── spec.cy.js │ ├── fixtures │ │ ├── doWhile │ │ │ └── doWhileSwitch.json │ │ ├── dynamicFork.json │ │ ├── dynamicFork │ │ │ ├── externalizedInput.json │ │ │ ├── noneSpawned.json │ │ │ ├── notExecuted.json │ │ │ ├── oneFailed.json │ │ │ └── success.json │ │ ├── metadataTasks.json │ │ ├── metadataWorkflow.json │ │ ├── taskSearch.json │ │ └── workflowSearch.json │ └── support │ │ ├── commands.ts │ │ ├── component-index.html │ │ ├── component.ts │ │ └── e2e.ts ├── package-lock.json ├── package.json ├── public │ ├── diagramDotBg.svg │ ├── favicon.svg │ ├── index.html │ ├── logo.svg │ └── robots.txt ├── src │ ├── App.jsx │ ├── components │ │ ├── Banner.jsx │ │ ├── Button.jsx │ │ ├── ButtonGroup.jsx │ │ ├── ConfirmChoiceDialog.jsx │ │ ├── CustomButtons.jsx │ │ ├── DataTable.jsx │ │ ├── DateRangePicker.jsx │ │ ├── Dropdown.jsx │ │ ├── DropdownButton.jsx │ │ ├── Heading.jsx │ │ ├── Input.jsx │ │ ├── KeyValueTable.jsx │ │ ├── LinearProgress.jsx │ │ ├── NavLink.jsx │ │ ├── Paper.jsx │ │ ├── Pill.jsx │ │ ├── PrimaryButton.jsx │ │ ├── ReactJson.jsx │ │ ├── SecondaryButton.jsx │ │ ├── Select.jsx │ │ ├── SplitButton.jsx │ │ ├── StatusBadge.jsx │ │ ├── Tabs.jsx │ │ ├── TaskLink.jsx │ │ ├── TaskNameInput.jsx │ │ ├── TertiaryButton.jsx │ │ ├── Text.jsx │ │ ├── WorkflowNameInput.jsx │ │ ├── definitionList │ │ │ └── DefinitionList.jsx │ │ ├── diagram │ │ │ ├── PanAndZoomWrapper.jsx │ │ │ ├── TaskPointer.d.ts │ │ │ ├── TaskResult.d.ts │ │ │ ├── WorkflowDAG.js │ │ │ ├── WorkflowGraph.jsx │ │ │ ├── WorkflowGraph.test.cy.js │ │ │ ├── ZoomControlButton.jsx │ │ │ ├── ZoomControls.jsx │ │ │ └── diagram.scss │ │ ├── formik │ │ │ ├── FormikCronEditor.jsx │ │ │ ├── FormikDropdown.jsx │ │ │ ├── FormikInput.jsx │ │ │ ├── FormikJsonInput.jsx │ │ │ ├── FormikSwitch.jsx │ │ │ ├── FormikVersionDropdown.jsx │ │ │ ├── FormikWorkflowNameInput.jsx │ │ │ └── cron.css │ │ ├── icons │ │ │ ├── FitToFrame.jsx │ │ │ ├── Home.jsx │ │ │ ├── Minus.jsx │ │ │ └── Plus.jsx │ │ └── index.js │ ├── data │ │ ├── actions.js │ │ ├── bulkactions.js │ │ ├── common.js │ │ ├── misc.js │ │ ├── task.js │ │ └── workflow.js │ ├── hooks │ │ └── useTime.js │ ├── index.css │ ├── index.js │ ├── pages │ │ ├── definition │ │ │ ├── EventHandler.jsx │ │ │ ├── ResetConfirmationDialog.jsx │ │ │ ├── SaveTaskDialog.jsx │ │ │ ├── SaveWorkflowDialog.jsx │ │ │ ├── TaskDefinition.jsx │ │ │ └── WorkflowDefinition.jsx │ │ ├── definitions │ │ │ ├── EventHandler.jsx │ │ │ ├── Header.jsx │ │ │ ├── Task.jsx │ │ │ └── Workflow.jsx │ │ ├── errors │ │ │ ├── ErrorsInspector.jsx │ │ │ ├── components │ │ │ │ ├── FailureReasonChart.jsx │ │ │ │ ├── LiveTailButton.jsx │ │ │ │ ├── Notification.jsx │ │ │ │ ├── StatusChart.jsx │ │ │ │ ├── SummaryCard.jsx │ │ │ │ ├── TimeRangeDropdown.jsx │ │ │ │ ├── TimeSeriesChart.jsx │ │ │ │ └── WorkflowTypeChart.jsx │ │ │ ├── errorsInspectorStyles.js │ │ │ └── hooks │ │ │ │ └── useWorkflowErrorGroups.js │ │ ├── execution │ │ │ ├── ActionModule.jsx │ │ │ ├── Execution.jsx │ │ │ ├── ExecutionInputOutput.jsx │ │ │ ├── ExecutionJson.jsx │ │ │ ├── ExecutionSummary.jsx │ │ │ ├── Legend.jsx │ │ │ ├── RightPanel.jsx │ │ │ ├── TaskDetails.jsx │ │ │ ├── TaskList.jsx │ │ │ ├── TaskLogs.jsx │ │ │ ├── TaskPollData.jsx │ │ │ ├── TaskSummary.jsx │ │ │ ├── Timeline.jsx │ │ │ └── timeline.scss │ │ ├── executions │ │ │ ├── BulkActionModule.jsx │ │ │ ├── ResultsTable.jsx │ │ │ ├── SearchTabs.jsx │ │ │ ├── TaskResultsTable.jsx │ │ │ ├── TaskSearch.jsx │ │ │ ├── WorkflowSearch.jsx │ │ │ └── executionsStyles.js │ │ ├── kitchensink │ │ │ ├── DataTableDemo.jsx │ │ │ ├── DiagramTest.jsx │ │ │ ├── Dropdown.jsx │ │ │ ├── EnhancedTable.jsx │ │ │ ├── Examples.jsx │ │ │ ├── Gantt.jsx │ │ │ ├── KitchenSink.jsx │ │ │ └── sampleMovieData.js │ │ ├── misc │ │ │ └── TaskQueue.jsx │ │ ├── styles.js │ │ └── workbench │ │ │ ├── ExecutionHistory.jsx │ │ │ ├── RunHistory.tsx │ │ │ ├── Workbench.jsx │ │ │ └── WorkbenchForm.jsx │ ├── plugins │ │ ├── AppBarModules.jsx │ │ ├── AppLogo.jsx │ │ ├── CustomAppBarButtons.jsx │ │ ├── CustomRoutes.jsx │ │ ├── constants.js │ │ ├── customTypeRenderers.jsx │ │ ├── env.js │ │ └── fetch.js │ ├── react-app-env.d.ts │ ├── schema │ │ ├── task.js │ │ └── workflow.js │ ├── serviceWorker.js │ ├── setupProxy.js │ ├── setupTests.js │ ├── theme │ │ ├── colorOverrides.js │ │ ├── colors.js │ │ ├── index.js │ │ ├── provider.jsx │ │ ├── theme.js │ │ └── variables.js │ └── utils │ │ ├── constants.js │ │ ├── helperFunctions.js │ │ ├── helpers.js │ │ ├── localstorage.ts │ │ └── path.js ├── test-karbon.sh ├── tsconfig.json └── yarn.lock └── workflow-event-listener ├── README.md ├── build.gradle └── src ├── main ├── java │ └── com │ │ └── netflix │ │ └── conductor │ │ └── contribs │ │ └── listener │ │ ├── archive │ │ ├── ArchivingWithTTLWorkflowStatusListener.java │ │ ├── ArchivingWorkflowListenerConfiguration.java │ │ ├── ArchivingWorkflowListenerProperties.java │ │ ├── ArchivingWorkflowStatusListener.java │ │ └── ArchivingWorkflowToS3.java │ │ ├── conductorqueue │ │ ├── ConductorQueueStatusPublisher.java │ │ ├── ConductorQueueStatusPublisherConfiguration.java │ │ └── ConductorQueueStatusPublisherProperties.java │ │ ├── kafka │ │ ├── KafkaWorkflowStatusPublisher.java │ │ ├── KafkaWorkflowStatusPublisherConfiguration.java │ │ └── KafkaWorkflowStatusPublisherProperties.java │ │ └── statuschange │ │ ├── StatusChangeNotification.java │ │ ├── StatusChangePublisher.java │ │ └── StatusChangePublisherConfiguration.java └── resources │ └── META-INF │ └── additional-spring-configuration-metadata.json └── test ├── java └── com │ └── netflix │ └── conductor │ ├── contribs │ └── listener │ │ └── ArchivingWorkflowStatusListenerTest.java │ └── test │ └── listener │ └── WorkflowStatusPublisherIntegrationTest.java └── resources └── application-integrationtest.properties /.dockerignore: -------------------------------------------------------------------------------- 1 | # General 2 | 3 | # Backend 4 | server/build/libs 5 | 6 | # UI 7 | **/node_modules 8 | ui/build -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | gradlew eol=lf 2 | *.gradle eol=lf 3 | *.java eol=lf 4 | *.groovy eol=lf 5 | spring.factories eol=lf 6 | *.sh eol=lf 7 | 8 | docs/* linguist-documentation 9 | server/src/main/resources/swagger-ui/* linguist-vendored 10 | 11 | 12 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: "" 5 | labels: 'type: bug' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **Details** 14 | Conductor version: 15 | Persistence implementation: Cassandra, Postgres, MySQL, Dynomite etc 16 | Queue implementation: Postgres, MySQL, Dynoqueues etc 17 | Lock: Redis or Zookeeper? 18 | Workflow definition: 19 | Task definition: 20 | Event handler definition: 21 | 22 | 23 | **To Reproduce** 24 | Steps to reproduce the behavior: 25 | 1. Go to '...' 26 | 2. Click on '....' 27 | 3. Scroll down to '....' 28 | 4. See error 29 | 30 | **Expected behavior** 31 | A clear and concise description of what you expected to happen. 32 | 33 | **Screenshots** 34 | If applicable, add screenshots to help explain your problem. 35 | 36 | **Additional context** 37 | Add any other context about the problem here. 38 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/documentation.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Documentation 3 | about: Something in the documentation that needs improvement 4 | title: "[DOC]: " 5 | labels: 'type: docs' 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## What are you missing in the docs 11 | 12 | ## Proposed text 13 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Propose a new feature 4 | title: "[FEATURE]: " 5 | labels: 'type: feature' 6 | assignees: '' 7 | 8 | --- 9 | 10 | Please read our [contributor guide](https://github.com/conductor-oss/conductor/blob/main/CONTRIBUTING.md) before creating an issue. 11 | Also consider discussing your idea on the [discussion forum](https://github.com/conductor-oss/conductor/discussions) first. 12 | 13 | ## Describe the Feature Request 14 | _A clear and concise description of what the feature request is._ 15 | 16 | ## Describe Preferred Solution 17 | _A clear and concise description of what you want to happen._ 18 | 19 | ## Describe Alternatives 20 | _A clear and concise description of any alternative solutions or features you've considered._ 21 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "gradle" 4 | directory: "/" 5 | schedule: 6 | interval: "weekly" 7 | reviewers: 8 | - "v1r3n" 9 | - "boney9" 10 | - "c4lm" 11 | - package-ecosystem: "github-actions" 12 | directory: "/" 13 | schedule: 14 | interval: "weekly" 15 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | Pull Request type 2 | ---- 3 | - [ ] Bugfix 4 | - [ ] Feature 5 | - [ ] Refactoring (no functional changes, no api changes) 6 | - [ ] Build related changes 7 | - [ ] WHOSUSING.md 8 | - [ ] Other (please describe): 9 | 10 | **NOTE**: Please remember to run `./gradlew spotlessApply` to fix any format violations. 11 | 12 | Changes in this PR 13 | ---- 14 | 15 | _Describe the new behavior from this PR, and why it's needed_ 16 | Issue # 17 | 18 | Alternatives considered 19 | ---- 20 | 21 | _Describe alternative implementation you have considered_ 22 | -------------------------------------------------------------------------------- /.github/release-drafter.yml: -------------------------------------------------------------------------------- 1 | template: | 2 | ## What’s Changed 3 | 4 | $CHANGES 5 | 6 | name-template: 'v$RESOLVED_VERSION' 7 | tag-template: 'v$RESOLVED_VERSION' 8 | 9 | categories: 10 | - title: 'IMPORTANT' 11 | label: 'type: important' 12 | - title: 'New' 13 | label: 'type: feature' 14 | - title: 'Bug Fixes' 15 | label: 'type: bug' 16 | - title: 'Refactor' 17 | label: 'type: maintenance' 18 | - title: 'Documentation' 19 | label: 'type: docs' 20 | - title: 'Dependency Updates' 21 | label: 'type: dependencies' 22 | 23 | version-resolver: 24 | minor: 25 | labels: 26 | - 'type: important' 27 | 28 | patch: 29 | labels: 30 | - 'type: bug' 31 | - 'type: maintenance' 32 | - 'type: docs' 33 | - 'type: dependencies' 34 | - 'type: feature' 35 | 36 | exclude-labels: 37 | - 'skip-changelog' 38 | - 'gradle-wrapper' 39 | - 'github_actions' 40 | -------------------------------------------------------------------------------- /.github/workflows/generate_gh_pages.yml: -------------------------------------------------------------------------------- 1 | name: Publish docs via GitHub Pages 2 | on: 3 | workflow_dispatch 4 | 5 | jobs: 6 | build: 7 | name: Deploy docs 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Checkout main 11 | uses: actions/checkout@v2 12 | 13 | - name: Deploy docs 14 | uses: mhausenblas/mkdocs-deploy-gh-pages@master 15 | env: 16 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 17 | CONFIG_FILE: mkdocs.yml 18 | REQUIREMENTS: requirements.txt 19 | -------------------------------------------------------------------------------- /.github/workflows/release_draft.yml: -------------------------------------------------------------------------------- 1 | name: Release Drafter 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | paths-ignore: 8 | - 'conductor-clients/**' 9 | 10 | permissions: 11 | contents: read 12 | 13 | jobs: 14 | update_release_draft: 15 | permissions: 16 | contents: write # for release-drafter/release-drafter to create a github release 17 | pull-requests: write # for release-drafter/release-drafter to add label to PR 18 | runs-on: ubuntu-latest 19 | steps: 20 | - uses: release-drafter/release-drafter@v5 21 | env: 22 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Java Build 2 | .gradle 3 | .classpath 4 | dump.rdb 5 | out 6 | bin 7 | target 8 | buildscan.log 9 | /docs/site 10 | 11 | # Python 12 | /polyglot-clients/python/conductor.egg-info 13 | *.pyc 14 | 15 | # OS & IDE 16 | .DS_Store 17 | .settings 18 | .vscode 19 | .idea 20 | .project 21 | *.iml 22 | 23 | # JS & UI Related 24 | node_modules 25 | /ui/build 26 | /ui/public/monaco-editor 27 | 28 | # publishing secrets 29 | secrets/signing-key 30 | 31 | # local builds 32 | lib/ 33 | build/ 34 | */build/ 35 | 36 | # asdf version file 37 | .tool-versions 38 | 39 | 40 | .qodo 41 | conductorosstest.db 42 | conductorosstest.db 43 | /server-lite/src/main/resources/static 44 | yarn.lock 45 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/conductor-oss/conductor/c81fefe292295738a5fa7de5269102fde45f80cb/CHANGELOG.md -------------------------------------------------------------------------------- /OSSMETADATA: -------------------------------------------------------------------------------- 1 | osslifecycle=active 2 | -------------------------------------------------------------------------------- /RELATED.md: -------------------------------------------------------------------------------- 1 | [Related Projects](docs/resources/related.md) 2 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | | Version | Supported | 6 | | ------- | ------------------ | 7 | | 3.x.x | :white_check_mark: | 8 | | 2.x.x | :x: | 9 | | 1.x.x | :x: | 10 | 11 | ## Reporting a Vulnerability 12 | 13 | Please email oss@orkes.com to report vulnerabilities. 14 | -------------------------------------------------------------------------------- /amqp/build.gradle: -------------------------------------------------------------------------------- 1 | dependencies { 2 | implementation project(':conductor-common') 3 | implementation project(':conductor-core') 4 | 5 | implementation "com.rabbitmq:amqp-client:${revAmqpClient}" 6 | implementation "org.apache.commons:commons-lang3:" 7 | implementation "com.google.guava:guava:${revGuava}" 8 | implementation "io.reactivex:rxjava:${revRxJava}" 9 | 10 | compileOnly 'org.springframework.boot:spring-boot-starter' 11 | compileOnly 'org.springframework.boot:spring-boot-starter-web' 12 | } -------------------------------------------------------------------------------- /amqp/src/main/java/com/netflix/conductor/contribs/queue/amqp/util/ConnectionType.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 Conductor Authors. 3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with 5 | * the License. You may obtain a copy of the License at 6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on 10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the 11 | * specific language governing permissions and limitations under the License. 12 | */ 13 | package com.netflix.conductor.contribs.queue.amqp.util; 14 | 15 | public enum ConnectionType { 16 | PUBLISHER, 17 | SUBSCRIBER 18 | } 19 | -------------------------------------------------------------------------------- /amqp/src/main/java/com/netflix/conductor/contribs/queue/amqp/util/RetryType.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 Conductor Authors. 3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with 5 | * the License. You may obtain a copy of the License at 6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on 10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the 11 | * specific language governing permissions and limitations under the License. 12 | */ 13 | package com.netflix.conductor.contribs.queue.amqp.util; 14 | 15 | /** RetryType holds the retry type */ 16 | public enum RetryType { 17 | REGULARINTERVALS, 18 | EXPONENTIALBACKOFF, 19 | INCREMENTALINTERVALS 20 | } 21 | -------------------------------------------------------------------------------- /annotations-processor/README.md: -------------------------------------------------------------------------------- 1 | Annotation processor is used to generate protobuf files from the annotations. 2 | -------------------------------------------------------------------------------- /annotations-processor/build.gradle: -------------------------------------------------------------------------------- 1 | 2 | sourceSets { 3 | example 4 | } 5 | 6 | dependencies { 7 | implementation project(':conductor-annotations') 8 | api 'com.google.guava:guava:31.1-jre' 9 | api 'com.squareup:javapoet:1.13.0' 10 | api 'com.github.jknack:handlebars:4.3.1' 11 | api 'com.google.protobuf:protobuf-java:3.21.12' 12 | api 'jakarta.annotation:jakarta.annotation-api:2.1.1' 13 | api gradleApi() 14 | 15 | exampleImplementation sourceSets.main.output 16 | exampleImplementation project(':conductor-annotations') 17 | } 18 | 19 | task exampleJar(type: Jar) { 20 | archiveFileName = 'example.jar' 21 | from sourceSets.example.output.classesDirs 22 | } 23 | 24 | testClasses.finalizedBy(exampleJar) 25 | -------------------------------------------------------------------------------- /annotations-processor/src/example/java/com/example/Example.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2022 Conductor Authors. 3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with 5 | * the License. You may obtain a copy of the License at 6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on 10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the 11 | * specific language governing permissions and limitations under the License. 12 | */ 13 | package com.example; 14 | 15 | import com.netflix.conductor.annotations.protogen.ProtoField; 16 | import com.netflix.conductor.annotations.protogen.ProtoMessage; 17 | 18 | @ProtoMessage 19 | public class Example { 20 | @ProtoField(id = 1) 21 | public String name; 22 | 23 | @ProtoField(id = 2) 24 | public Long count; 25 | } 26 | -------------------------------------------------------------------------------- /annotations-processor/src/main/resources/templates/file.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package {{protoPackageName}}; 3 | 4 | {{#includes}} 5 | import "{{this}}"; 6 | {{/includes}} 7 | 8 | option java_package = "{{javaPackageName}}"; 9 | option java_outer_classname = "{{javaClassName}}"; 10 | option go_package = "{{goPackageName}}"; 11 | 12 | {{#message}} 13 | {{>message}} 14 | {{/message}} 15 | -------------------------------------------------------------------------------- /annotations-processor/src/main/resources/templates/message.proto: -------------------------------------------------------------------------------- 1 | {{protoClass}} {{name}} { 2 | {{#nested}} 3 | {{>message}} 4 | {{/nested}} 5 | {{#fields}} 6 | {{protoTypeDeclaration}}; 7 | {{/fields}} 8 | } 9 | -------------------------------------------------------------------------------- /annotations-processor/src/test/resources/example.proto.txt: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package protoPackage; 3 | 4 | 5 | option java_package = "abc.protogen.example"; 6 | option java_outer_classname = "ExamplePb"; 7 | option go_package = "goPackage"; 8 | 9 | message Example { 10 | string name = 1; 11 | int64 count = 2; 12 | } 13 | -------------------------------------------------------------------------------- /annotations/README.md: -------------------------------------------------------------------------------- 1 | # Annotations 2 | Used for Conductor to convert Java POJs to protobuf files. 3 | 4 | - `protogen` Annotations 5 | - Original Author: Vicent Martí - https://github.com/vmg 6 | - Original Repo: https://github.com/vmg/protogen 7 | 8 | 9 | -------------------------------------------------------------------------------- /annotations/build.gradle: -------------------------------------------------------------------------------- 1 | 2 | 3 | dependencies { 4 | 5 | } -------------------------------------------------------------------------------- /awss3-storage/README.md: -------------------------------------------------------------------------------- 1 | # S3 external storage support 2 | Used by Conductor to support external payload into S3 blob. 3 | 4 | See [https://docs.conductor-oss.org/documentation/advanced/externalpayloadstorage.html](https://docs.conductor-oss.org/documentation/advanced/externalpayloadstorage.html) for more details 5 | -------------------------------------------------------------------------------- /awss3-storage/build.gradle: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023 Conductor authors 3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with 5 | * the License. You may obtain a copy of the License at 6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 |
14 | dependencies {
15 | implementation project(':conductor-common')
16 | implementation project(':conductor-core')
17 | compileOnly 'org.springframework.boot:spring-boot-starter'
18 |
19 | implementation "com.amazonaws:aws-java-sdk-s3:${revAwsSdk}"
20 | implementation "com.amazonaws:aws-java-sdk-sts:${revAwsSdk}"
21 | implementation "org.apache.commons:commons-lang3"
22 | }
23 |
--------------------------------------------------------------------------------
/awss3-storage/src/main/resources/META-INF/additional-spring-configuration-metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "hints": [
3 | {
4 | "name": "conductor.external-payload-storage.type",
5 | "values": [
6 | {
7 | "value": "s3",
8 | "description": "Use AWS S3 as the external payload storage."
9 | }
10 | ]
11 | }
12 | ]
13 | }
14 |
--------------------------------------------------------------------------------
/awssqs-event-queue/README.md:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/conductor-oss/conductor/c81fefe292295738a5fa7de5269102fde45f80cb/awssqs-event-queue/README.md
--------------------------------------------------------------------------------
/awssqs-event-queue/build.gradle:
--------------------------------------------------------------------------------
1 | dependencies {
2 | implementation project(':conductor-common')
3 | implementation project(':conductor-core')
4 | compileOnly 'org.springframework.boot:spring-boot-starter'
5 |
6 | implementation "org.apache.commons:commons-lang3"
7 | // SBMTODO: remove guava dep
8 | implementation "com.google.guava:guava:${revGuava}"
9 |
10 | implementation "com.amazonaws:aws-java-sdk-sqs:${revAwsSdk}"
11 |
12 | implementation "io.reactivex:rxjava:${revRxJava}"
13 |
14 | testImplementation 'org.springframework.boot:spring-boot-starter'
15 | testImplementation project(':conductor-common').sourceSets.test.output
16 | }
--------------------------------------------------------------------------------
/awssqs-event-queue/src/main/resources/META-INF/additional-spring-configuration-metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "properties": [
3 | {
4 | "name": "conductor.event-queues.sqs.enabled",
5 | "type": "java.lang.Boolean",
6 | "description": "Enable the use of AWS SQS implementation to provide queues for consuming events.",
7 | "sourceType": "com.netflix.conductor.sqs.config.SQSEventQueueConfiguration"
8 | },
9 | {
10 | "name": "conductor.default-event-queue.type",
11 | "type": "java.lang.String",
12 | "description": "The default event queue type to listen on for the WAIT task.",
13 | "sourceType": "com.netflix.conductor.sqs.config.SQSEventQueueConfiguration"
14 | }
15 | ],
16 | "hints": [
17 | {
18 | "name": "conductor.default-event-queue.type",
19 | "values": [
20 | {
21 | "value": "sqs",
22 | "description": "Use AWS SQS as the event queue to listen on for the WAIT task."
23 | }
24 | ]
25 | }
26 | ]
27 | }
--------------------------------------------------------------------------------
/azureblob-storage/build.gradle:
--------------------------------------------------------------------------------
1 | dependencies {
2 | compileOnly 'org.springframework.boot:spring-boot-starter'
3 | implementation project(':conductor-common')
4 | implementation project(':conductor-core')
5 |
6 | implementation "com.azure:azure-storage-blob:${revAzureStorageBlobSdk}"
7 | implementation "org.apache.commons:commons-lang3"
8 | }
9 |
--------------------------------------------------------------------------------
/cassandra-persistence/src/main/resources/META-INF/additional-spring-configuration-metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "properties": [
3 | {
4 | "name": "conductor.cassandra.write-consistency-level",
5 | "defaultValue": "LOCAL_QUORUM"
6 | },
7 | {
8 | "name": "conductor.cassandra.read-consistency-level",
9 | "defaultValue": "LOCAL_QUORUM"
10 | }
11 | ],
12 | "hints": [
13 | {
14 | "name": "conductor.cassandra.write-consistency-level",
15 | "providers": [
16 | {
17 | "name": "handle-as",
18 | "parameters": {
19 | "target": "java.lang.Enum"
20 | }
21 | }
22 | ]
23 | },
24 | {
25 | "name": "conductor.cassandra.read-consistency-level",
26 | "providers": [
27 | {
28 | "name": "handle-as",
29 | "parameters": {
30 | "target": "java.lang.Enum"
31 | }
32 | }
33 | ]
34 | }
35 | ]
36 | }
37 |
--------------------------------------------------------------------------------
/client-spring/README.md:
--------------------------------------------------------------------------------
1 | # Deprecation Notice
2 |
3 | **IMPORTANT - 2024-09-19**
4 |
5 | This Spring module along with Client (v3) are being **deprecated** and will be **removed**.
6 |
7 | It will be replaced by [**Client v4**](../conductor-clients/java/conductor-java-sdk/conductor-client), which offers improved features, better performance,
8 | and other enhancements.
9 |
10 | We strongly encourage all users to migrate to [**Client v4**](../conductor-clients/java/conductor-java-sdk/conductor-client) as soon as it becomes available. Expected release date: **2024-10-15**.
11 |
12 | ## Deprecation Timeline
13 |
14 | - **Current Phase:** Client v3 is currently in maintenance phase and will receive critical fixes only.
15 | - **Final Phase Out:** Client v3 will be fully removed from the codebase on **2024-11-20**. The artifacts will remain available in Maven repo.
16 |
--------------------------------------------------------------------------------
/client-spring/build.gradle:
--------------------------------------------------------------------------------
1 |
2 | dependencies {
3 |
4 | implementation project(':conductor-common')
5 | api project(':conductor-client')
6 | api project(':conductor-java-sdk')
7 |
8 | implementation "com.netflix.eureka:eureka-client:${revEurekaClient}"
9 | implementation 'org.springframework.boot:spring-boot-starter'
10 | }
11 |
--------------------------------------------------------------------------------
/client-spring/src/main/resources/META-INF/spring.factories:
--------------------------------------------------------------------------------
1 | org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
2 | com.netflix.conductor.client.spring.ConductorClientAutoConfiguration
3 |
--------------------------------------------------------------------------------
/client-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
--------------------------------------------------------------------------------
1 | com.netflix.conductor.client.spring.ConductorClientAutoConfiguration
--------------------------------------------------------------------------------
/client-spring/src/test/resources/application.properties:
--------------------------------------------------------------------------------
1 | conductor.client.rootUri=http://localhost:8080/api/
2 | conductor.worker.hello.threadCount=100
3 | conductor.worker.hello_again.domain=test
--------------------------------------------------------------------------------
/client/README.md:
--------------------------------------------------------------------------------
1 | # Deprecation Notice
2 |
3 | **IMPORTANT - 2024-09-19**
4 |
5 | This Client (v3) is being **deprecated** and will be **removed**.
6 |
7 | It will be replaced by [**Client v4**](../conductor-clients/java/conductor-java-sdk/conductor-client), which offers improved features, better performance,
8 | and other enhancements.
9 |
10 | We strongly encourage all users to migrate to [**Client v4**](../conductor-clients/java/conductor-java-sdk/conductor-client) as soon as it becomes available. Expected release date: **2024-10-15**.
11 |
12 | ## Deprecation Timeline
13 |
14 | - **Current Phase:** Client v3 is currently in maintenance phase and will receive critical fixes only.
15 | - **Final Phase Out:** Client v3 will be fully removed from the codebase on **2024-11-20**. The artifacts will remain available in Maven repo.
16 |
--------------------------------------------------------------------------------
/client/spotbugsExclude.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with 5 | * the License. You may obtain a copy of the License at 6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on 10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the 11 | * specific language governing permissions and limitations under the License. 12 | */ 13 | package com.netflix.conductor.dao; 14 | 15 | public class TestBase {} 16 | -------------------------------------------------------------------------------- /common/src/main/java/com/netflix/conductor/common/metadata/acl/Permission.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2022 Conductor Authors. 3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with 5 | * the License. You may obtain a copy of the License at 6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on 10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the 11 | * specific language governing permissions and limitations under the License. 12 | */ 13 | package com.netflix.conductor.common.metadata.acl; 14 | 15 | import com.netflix.conductor.annotations.protogen.ProtoEnum; 16 | 17 | @ProtoEnum 18 | @Deprecated 19 | public enum Permission { 20 | OWNER, 21 | OPERATOR 22 | } 23 | -------------------------------------------------------------------------------- /common/src/main/java/com/netflix/conductor/common/metadata/workflow/IdempotencyStrategy.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2020 Conductor Authors. 3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with 5 | * the License. You may obtain a copy of the License at 6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on 10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the 11 | * specific language governing permissions and limitations under the License. 12 | */ 13 | package com.netflix.conductor.common.metadata.workflow; 14 | 15 | public enum IdempotencyStrategy { 16 | FAIL, 17 | RETURN_EXISTING, 18 | FAIL_ON_RUNNING 19 | } 20 | -------------------------------------------------------------------------------- /common/src/test/resources/application.properties: -------------------------------------------------------------------------------- 1 | conductor.app.workflow.name-validation.enabled=true 2 | -------------------------------------------------------------------------------- /conductor-clients/README.md: -------------------------------------------------------------------------------- 1 | # Conductor Clients 2 | 3 | This directory serves as the central repository for various officially supported Conductor client projects. 4 | 5 | > **Note (2024-09-17):** 6 | > 7 | > Currently, it only contains the incubating Java client/SDK v3. 8 | > 9 | > We are in the process of refactoring our clients/SDKs (see: [conductor-sdk](https://github.com/conductor-sdk)) and will be moving them here soon. 10 | -------------------------------------------------------------------------------- /conductor-clients/java/conductor-java-sdk/buildSrc/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'groovy' 3 | } 4 | 5 | repositories { 6 | mavenCentral() 7 | } 8 | 9 | dependencies { 10 | implementation gradleApi() 11 | implementation localGroovy() 12 | } 13 | -------------------------------------------------------------------------------- /conductor-clients/java/conductor-java-sdk/buildSrc/src/main/resources/META-INF/gradle-plugins/publish-config.properties: -------------------------------------------------------------------------------- 1 | implementation-class=io.orkes.conductor.gradle.PublishConfigPlugin -------------------------------------------------------------------------------- /conductor-clients/java/conductor-java-sdk/conductor-client-metrics/README.md: -------------------------------------------------------------------------------- 1 | # Conductor Client Metrics 2 | 3 | **Status: Incubating.** 4 | 5 | Provides metrics and monitoring capabilities for Conductor clients. 6 | 7 | It helps developers track the performance and health of their workers, offering insights into task execution times, error rates, and system throughput. 8 | 9 | As an incubating module, it's still under development and subject to changes. -------------------------------------------------------------------------------- /conductor-clients/java/conductor-java-sdk/conductor-client-metrics/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'java-library' 3 | id 'idea' 4 | // id 'maven-publish' 5 | // id 'signing' 6 | } 7 | 8 | //ext { 9 | // artifactName = 'Conductor Client Metrics' 10 | // artifactDescription = 'Conductor Client Metrics' 11 | //} 12 | // 13 | //apply plugin: 'publish-config' 14 | 15 | dependencies { 16 | implementation 'io.micrometer:micrometer-registry-prometheus:1.10.5' 17 | implementation project(":conductor-client") 18 | 19 | testImplementation 'org.mockito:mockito-core:5.4.0' 20 | testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' 21 | testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' 22 | } 23 | 24 | java { 25 | withSourcesJar() 26 | withJavadocJar() 27 | } 28 | 29 | test { 30 | useJUnitPlatform() 31 | } -------------------------------------------------------------------------------- /conductor-clients/java/conductor-java-sdk/conductor-client-spring/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'java-library' 3 | id 'idea' 4 | id 'maven-publish' 5 | id 'signing' 6 | } 7 | 8 | ext { 9 | artifactName = 'Conductor OSS Client Spring' 10 | artifactDescription = 'Spring autoconfig for Conductor Client and SDK' 11 | } 12 | 13 | apply plugin: 'publish-config' 14 | 15 | compileJava { 16 | sourceCompatibility = 17 17 | targetCompatibility = 17 18 | } 19 | 20 | repositories { 21 | mavenCentral() 22 | } 23 | 24 | dependencies { 25 | api project(":conductor-client") 26 | api project(":sdk") 27 | 28 | implementation 'org.springframework.boot:spring-boot-starter:3.3.0' 29 | } 30 | 31 | java { 32 | withSourcesJar() 33 | withJavadocJar() 34 | } 35 | 36 | test { 37 | useJUnitPlatform() 38 | } 39 | -------------------------------------------------------------------------------- /conductor-clients/java/conductor-java-sdk/conductor-client-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports: -------------------------------------------------------------------------------- 1 | com.netflix.conductor.client.spring.ConductorClientAutoConfiguration 2 | com.netflix.conductor.client.spring.ConductorWorkerAutoConfiguration 3 | -------------------------------------------------------------------------------- /conductor-clients/java/conductor-java-sdk/conductor-client/src/main/java/com/netflix/conductor/client/automator/filters/PollFilter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024 Conductor Authors. 3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with 5 | * the License. You may obtain a copy of the License at 6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on 10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the 11 | * specific language governing permissions and limitations under the License. 12 | */ 13 | package com.netflix.conductor.client.automator.filters; 14 | 15 | @FunctionalInterface 16 | public interface PollFilter { 17 | boolean filter(String type, String domain); 18 | } 19 | -------------------------------------------------------------------------------- /conductor-clients/java/conductor-java-sdk/conductor-client/src/main/java/com/netflix/conductor/client/events/ConductorClientEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024 Conductor Authors. 3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with 5 | * the License. You may obtain a copy of the License at 6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on 10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the 11 | * specific language governing permissions and limitations under the License. 12 | */ 13 | package com.netflix.conductor.client.events; 14 | 15 | import java.time.Instant; 16 | 17 | import lombok.Getter; 18 | import lombok.ToString; 19 | 20 | @Getter 21 | @ToString 22 | public abstract class ConductorClientEvent { 23 | private final Instant time = Instant.now(); 24 | } 25 | -------------------------------------------------------------------------------- /conductor-clients/java/conductor-java-sdk/conductor-client/src/main/java/com/netflix/conductor/client/events/taskrunner/PollStarted.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024 Conductor Authors. 3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with 5 | * the License. You may obtain a copy of the License at 6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on 10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the 11 | * specific language governing permissions and limitations under the License. 12 | */ 13 | package com.netflix.conductor.client.events.taskrunner; 14 | 15 | import lombok.ToString; 16 | 17 | @ToString 18 | public final class PollStarted extends TaskRunnerEvent { 19 | 20 | public PollStarted(String taskType) { 21 | super(taskType); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /conductor-clients/java/conductor-java-sdk/conductor-client/src/main/java/com/netflix/conductor/client/http/HeaderSupplier.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2024 Conductor Authors. 3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with 5 | * the License. You may obtain a copy of the License at 6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.client.http;
14 |
15 | import java.util.Map;
16 |
17 |
18 | public interface HeaderSupplier {
19 |
20 | void init(ConductorClient client);
21 |
22 | Map
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.common.metadata.workflow;
14 |
15 | public enum IdempotencyStrategy {
16 |
17 | FAIL, RETURN_EXISTING,
18 | FAIL_ON_RUNNING
19 | }
--------------------------------------------------------------------------------
/conductor-clients/java/conductor-java-sdk/conductor-client/src/main/java/com/netflix/conductor/common/run/SearchResult.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2020 Conductor Authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.common.run;
14 |
15 | import java.util.List;
16 |
17 | import lombok.*;
18 |
19 | @Data
20 | @NoArgsConstructor
21 | @Builder
22 | @AllArgsConstructor
23 | public class SearchResult
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
--------------------------------------------------------------------------------
/conductor-clients/java/conductor-java-sdk/orkes-client/src/main/java/io/orkes/conductor/client/model/AccessKeyResponse.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022 Conductor Authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package io.orkes.conductor.client.model;
14 |
15 | import lombok.*;
16 |
17 | @Data
18 | @NoArgsConstructor
19 | @Builder
20 | @AllArgsConstructor(access = AccessLevel.PRIVATE)
21 | public class AccessKeyResponse {
22 | private String id;
23 | private Long createdAt;
24 | private AccessKeyStatus status;
25 | }
--------------------------------------------------------------------------------
/conductor-clients/java/conductor-java-sdk/orkes-client/src/main/java/io/orkes/conductor/client/model/AccessKeyStatus.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022 Conductor Authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package io.orkes.conductor.client.model;
14 |
15 | public enum AccessKeyStatus {
16 | ACTIVE,
17 | INACTIVE
18 | }
--------------------------------------------------------------------------------
/conductor-clients/java/conductor-java-sdk/orkes-client/src/main/java/io/orkes/conductor/client/model/CreateAccessKeyResponse.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022 Conductor Authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package io.orkes.conductor.client.model;
14 |
15 | import lombok.*;
16 |
17 | @Data
18 | @NoArgsConstructor
19 | @Builder
20 | @AllArgsConstructor(access = AccessLevel.PRIVATE)
21 | public class CreateAccessKeyResponse {
22 | private String id;
23 | private String secret;
24 | }
--------------------------------------------------------------------------------
/conductor-clients/java/conductor-java-sdk/orkes-client/src/main/java/io/orkes/conductor/client/model/Tag.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2025 Conductor Authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package io.orkes.conductor.client.model;
14 |
15 | import lombok.*;
16 |
17 | @Data
18 | @NoArgsConstructor
19 | @Builder
20 | @AllArgsConstructor(access = AccessLevel.PRIVATE)
21 | public class Tag {
22 |
23 | private String key;
24 | private String value;
25 | }
26 |
--------------------------------------------------------------------------------
/conductor-clients/java/conductor-java-sdk/orkes-client/src/main/java/io/orkes/conductor/client/model/TokenResponse.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024 Conductor Authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package io.orkes.conductor.client.model;
14 |
15 | import lombok.*;
16 |
17 | @Data
18 | @NoArgsConstructor
19 | @Builder
20 | @AllArgsConstructor(access = AccessLevel.PRIVATE)
21 | public class TokenResponse {
22 |
23 | private String token;
24 |
25 | }
--------------------------------------------------------------------------------
/conductor-clients/java/conductor-java-sdk/orkes-client/src/main/java/io/orkes/conductor/client/model/integration/Category.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024 Conductor Authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package io.orkes.conductor.client.model.integration;
14 |
15 | public enum Category {
16 |
17 | API,
18 |
19 | AI_MODEL,
20 |
21 | VECTOR_DB,
22 |
23 | RELATIONAL_DB,
24 |
25 | MESSAGE_BROKER,
26 |
27 | GIT,
28 |
29 | EMAIL
30 |
31 | }
--------------------------------------------------------------------------------
/conductor-clients/java/conductor-java-sdk/orkes-client/src/main/java/io/orkes/conductor/client/worker/WorkerFn.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022 Conductor Authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package io.orkes.conductor.client.worker;
14 |
15 | import com.netflix.conductor.common.metadata.tasks.Task;
16 | import com.netflix.conductor.common.metadata.tasks.TaskResult;
17 |
18 | @FunctionalInterface
19 | public interface WorkerFn {
20 | TaskResult execute(Task task);
21 | }
22 |
--------------------------------------------------------------------------------
/conductor-clients/java/conductor-java-sdk/orkes-spring/build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | id 'java-library'
3 | id 'idea'
4 | id 'maven-publish'
5 | id 'signing'
6 | }
7 |
8 | group = 'io.orkes.conductor'
9 |
10 | ext {
11 | artifactId = 'orkes-conductor-client-spring'
12 | artifactName = 'Orkes Conductor Client/SDK Spring'
13 | artifactDescription = 'Spring autoconfig for Orkes Conductor Client and SDK'
14 | }
15 |
16 | apply plugin: 'publish-config'
17 |
18 | compileJava {
19 | sourceCompatibility = 17
20 | targetCompatibility = 17
21 | }
22 |
23 | repositories {
24 | mavenCentral()
25 | }
26 |
27 | dependencies {
28 | api project(":conductor-client")
29 | api project(":orkes-client")
30 | api project(":sdk")
31 | api project(":conductor-client-spring")
32 |
33 | implementation 'org.springframework.boot:spring-boot-starter:3.3.0'
34 | }
35 |
36 | java {
37 | withSourcesJar()
38 | withJavadocJar()
39 | }
40 |
41 | test {
42 | useJUnitPlatform()
43 | }
44 |
--------------------------------------------------------------------------------
/conductor-clients/java/conductor-java-sdk/orkes-spring/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
--------------------------------------------------------------------------------
1 | io.orkes.conductor.client.spring.OrkesConductorClientAutoConfiguration
2 |
--------------------------------------------------------------------------------
/conductor-clients/java/conductor-java-sdk/sdk/README.md:
--------------------------------------------------------------------------------
1 | # SDK for Conductor
2 | Conductor SDK allows developers to create, test and execute workflows using code.
3 |
4 | There are three main features of the SDK:
5 |
6 | 1. [Create and run workflows using code](workflow_sdk.md)
7 | 2. [Create and run strongly typed workers](worker_sdk.md)
8 | 3. [Unit Testing framework for workflows and workers](testing_framework.md)
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/conductor-clients/java/conductor-java-sdk/sdk/build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | id 'java-library'
3 | id 'idea'
4 | id 'maven-publish'
5 | id 'signing'
6 | }
7 |
8 | ext {
9 | artifactId = 'java-sdk'
10 | artifactName = 'Orkes Conductor SDK'
11 | artifactDescription = 'OSS & Orkes Conductor SDK'
12 | }
13 |
14 | apply plugin: 'publish-config'
15 |
16 | dependencies {
17 | implementation project(":conductor-client")
18 | testImplementation 'org.mockito:mockito-core:5.4.0'
19 | testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
20 | testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
21 | }
22 |
23 | java {
24 | withSourcesJar()
25 | withJavadocJar()
26 | }
27 |
28 | test {
29 | useJUnitPlatform()
30 | }
--------------------------------------------------------------------------------
/conductor-clients/java/conductor-java-sdk/sdk/src/main/java/com/netflix/conductor/sdk/workflow/def/ValidationError.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022 Conductor Authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.sdk.workflow.def;
14 |
15 | public class ValidationError extends RuntimeException {
16 |
17 | public ValidationError(String message) {
18 | super(message);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/conductor-clients/java/conductor-java-sdk/sdk/src/test/java/com/netflix/conductor/sdk/workflow/executor/task/Bike.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024 Conductor Authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.sdk.workflow.executor.task;
14 |
15 | public class Bike {
16 | String brand;
17 |
18 | String getBrand() {
19 | return brand;
20 | }
21 |
22 | void setBrand(String brand) {
23 | this.brand = brand;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/conductor-clients/java/conductor-java-sdk/sdk/src/test/java/com/netflix/conductor/sdk/workflow/executor/task/Car.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2024 Conductor Authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.sdk.workflow.executor.task;
14 |
15 | public class Car {
16 | String brand;
17 |
18 | String getBrand() {
19 | return brand;
20 | }
21 |
22 | void setBrand(String brand) {
23 | this.brand = brand;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/conductor-clients/java/conductor-java-sdk/sdk/src/test/resources/script.js:
--------------------------------------------------------------------------------
1 | function e() {
2 | if ($.value > 1){
3 | return {
4 | "key": "value",
5 | "key2": 42
6 | };
7 | } else {
8 | return {};
9 | }
10 | }
11 | e();
--------------------------------------------------------------------------------
/conductor-clients/java/conductor-java-sdk/sdk/src/test/resources/test-server.properties:
--------------------------------------------------------------------------------
1 | conductor.db.type=memory
2 | conductor.indexing.enabled=false
3 | conductor.workflow-repair-service.enabled=false
4 | loadSample=true
5 | conductor.system-task-workers.enabled=false
--------------------------------------------------------------------------------
/conductor-clients/java/conductor-java-sdk/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'conductor-java-sdk'
2 | include 'conductor-client'
3 | include 'conductor-client-metrics'
4 | include 'conductor-client-spring'
5 | include 'sdk'
6 | include 'examples'
7 | include 'tests'
8 | include 'orkes-client'
9 | include 'orkes-spring'
10 |
--------------------------------------------------------------------------------
/conductor-clients/java/conductor-java-sdk/tests/src/test/resources/application.properties:
--------------------------------------------------------------------------------
1 | conductor.worker.all.domain=domainx
2 | conductor.worker.all.pollingInterval=3
3 | #conductor.worker.all.threadCount=7
4 |
5 | conductor.worker.hello.domain=helo_domain
6 | conductor.worker.hello.pollingInterval=1
7 | conductor.worker.hello.threadCount=13
--------------------------------------------------------------------------------
/conductor-clients/java/conductor-java-sdk/tests/src/test/resources/logback-test.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.annotations;
14 |
15 | import java.lang.annotation.Retention;
16 | import java.lang.annotation.Target;
17 |
18 | import static java.lang.annotation.ElementType.TYPE;
19 | import static java.lang.annotation.RetentionPolicy.RUNTIME;
20 |
21 | @Target({TYPE})
22 | @Retention(RUNTIME)
23 | public @interface Trace {}
24 |
--------------------------------------------------------------------------------
/core/src/main/java/com/netflix/conductor/core/events/ActionProcessor.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022 Conductor Authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.core.events;
14 |
15 | import java.util.Map;
16 |
17 | import com.netflix.conductor.common.metadata.events.EventHandler;
18 |
19 | public interface ActionProcessor {
20 |
21 | Map
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.core.events;
14 |
15 | import java.util.Map;
16 |
17 | public interface EventQueueManager {
18 |
19 | Map
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.core.exception;
14 |
15 | public class NonTransientException extends RuntimeException {
16 |
17 | public NonTransientException(String message) {
18 | super(message);
19 | }
20 |
21 | public NonTransientException(String message, Throwable cause) {
22 | super(message, cause);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/core/src/main/java/com/netflix/conductor/core/exception/TransientException.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2022 Conductor Authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.core.exception;
14 |
15 | public class TransientException extends RuntimeException {
16 |
17 | public TransientException(String message) {
18 | super(message);
19 | }
20 |
21 | public TransientException(String message, Throwable cause) {
22 | super(message, cause);
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/docker/ci/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM openjdk:17-jdk
2 |
3 | WORKDIR /workspace/conductor
4 | COPY . /workspace/conductor
5 |
6 | RUN ./gradlew clean build
7 |
--------------------------------------------------------------------------------
/docker/server/config/config-mysql.properties:
--------------------------------------------------------------------------------
1 | # Database persistence type.
2 | conductor.db.type=mysql
3 |
4 |
5 | # mysql
6 | spring.datasource.url=jdbc:mysql://mysql:3306/conductor
7 | spring.datasource.username=conductor
8 | spring.datasource.password=conductor
9 |
10 | # redis queues
11 | conductor.queue.type=redis_standalone
12 | conductor.redis.hosts=rs:6379:us-east-1c
13 | conductor.redis-lock.serverAddress=redis://rs:6379
14 |
15 |
16 | # Elastic search instance indexing is enabled.
17 | conductor.indexing.enabled=true
18 | conductor.elasticsearch.url=http://es:9200
19 | conductor.elasticsearch.indexName=conductor
20 | conductor.elasticsearch.version=7
21 | conductor.elasticsearch.clusterHealthColor=yellow
22 |
23 | # Additional modules for metrics collection exposed to Prometheus (optional)
24 | conductor.metrics-prometheus.enabled=true
25 | management.endpoints.web.exposure.include=prometheus
26 |
27 | # Load sample kitchen-sink workflow
28 | loadSample=true
29 |
--------------------------------------------------------------------------------
/docker/server/config/config-postgres.properties:
--------------------------------------------------------------------------------
1 | # Database persistence type.
2 | conductor.db.type=postgres
3 | conductor.queue.type=postgres
4 | conductor.external-payload-storage.type=postgres
5 |
6 | # Database connectivity
7 | spring.datasource.url=jdbc:postgresql://postgresdb:5432/postgres
8 | spring.datasource.username=conductor
9 | spring.datasource.password=conductor
10 |
11 |
12 | # Indexing Properties
13 | conductor.indexing.enabled=true
14 | conductor.indexing.type=postgres
15 | # Required to disable connecting to elasticsearch.
16 | conductor.elasticsearch.version=0
17 |
18 | # Additional modules for metrics collection exposed to Prometheus (optional)
19 | conductor.metrics-prometheus.enabled=true
20 | management.endpoints.web.exposure.include=prometheus
21 |
22 | # Load sample kitchen-sink workflow
23 | loadSample=true
--------------------------------------------------------------------------------
/docker/server/config/redis.conf:
--------------------------------------------------------------------------------
1 | appendonly yes
--------------------------------------------------------------------------------
/docker/ui/Dockerfile:
--------------------------------------------------------------------------------
1 | #
2 | # conductor:ui - Conductor UI
3 | #
4 | FROM node:20-alpine
5 | LABEL maintainer="Orkes OSS Redirecting ...
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.es6.dao.query.parser;
14 |
15 | import org.elasticsearch.index.query.QueryBuilder;
16 |
17 | public interface FilterProvider {
18 |
19 | /**
20 | * @return FilterBuilder for elasticsearch
21 | */
22 | public QueryBuilder getFilterBuilder();
23 | }
24 |
--------------------------------------------------------------------------------
/es6-persistence/src/main/java/com/netflix/conductor/es6/dao/query/parser/internal/FunctionThrowingException.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2020 Conductor Authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.es6.dao.query.parser.internal;
14 |
15 | @FunctionalInterface
16 | public interface FunctionThrowingException
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.es7.dao.query.parser;
14 |
15 | import org.elasticsearch.index.query.QueryBuilder;
16 |
17 | /**
18 | * @author Viren
19 | */
20 | public interface FilterProvider {
21 |
22 | /**
23 | * @return FilterBuilder for elasticsearch
24 | */
25 | public QueryBuilder getFilterBuilder();
26 | }
27 |
--------------------------------------------------------------------------------
/es7-persistence/src/main/java/com/netflix/conductor/es7/dao/query/parser/internal/FunctionThrowingException.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Conductor Authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.es7.dao.query.parser.internal;
14 |
15 | /**
16 | * @author Viren
17 | */
18 | @FunctionalInterface
19 | public interface FunctionThrowingException
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.es7.dao.query.parser;
14 |
15 | import org.junit.Test;
16 |
17 | /**
18 | * @author Viren
19 | */
20 | public class TestGroupedExpression {
21 |
22 | @Test
23 | public void test() {}
24 | }
25 |
--------------------------------------------------------------------------------
/es7-persistence/src/test/resources/expected_template_task_log.json:
--------------------------------------------------------------------------------
1 | {
2 | "index_patterns" : [ "*conductor_task*log*" ],
3 | "template" : {
4 | "settings" : {
5 | "refresh_interval" : "1s"
6 | },
7 | "mappings" : {
8 | "properties" : {
9 | "createdTime" : {
10 | "type" : "long"
11 | },
12 | "log" : {
13 | "type" : "keyword",
14 | "index" : true
15 | },
16 | "taskId" : {
17 | "type" : "keyword",
18 | "index" : true
19 | }
20 | }
21 | },
22 | "aliases" : { }
23 | }
24 | }
--------------------------------------------------------------------------------
/es7-persistence/src/test/resources/task_summary.json:
--------------------------------------------------------------------------------
1 | {
2 | "taskId": "9dea4567-0240-4eab-bde8-99f4535ea3fc",
3 | "taskDefName": "templated_task",
4 | "taskType": "templated_task",
5 | "workflowId": "WORKFLOW_INSTANCE_ID",
6 | "workflowType": "template_workflow",
7 | "correlationId": "testTaskDefTemplate",
8 | "scheduledTime": "2021-08-22T05:18:25.121Z",
9 | "startTime": "0",
10 | "endTime": "0",
11 | "updateTime": "2021-08-23T00:18:25.121Z",
12 | "status": "SCHEDULED",
13 | "workflowPriority": 1,
14 | "queueWaitTime": 0,
15 | "executionTime": 0,
16 | "input": "{http_request={method=GET, vipStack=test_stack, body={requestDetails={key1=value1, key2=42}, outputPath=s3://bucket/outputPath, inputPaths=[file://path1, file://path2]}, uri=/get/something}}"
17 | }
--------------------------------------------------------------------------------
/es7-persistence/src/test/resources/workflow_summary.json:
--------------------------------------------------------------------------------
1 | {
2 | "workflowType": "template_workflow",
3 | "version": 1,
4 | "workflowId": "WORKFLOW_INSTANCE_ID",
5 | "priority": 1,
6 | "correlationId": "testTaskDefTemplate",
7 | "startTime": 1534983505050,
8 | "updateTime": 1534983505131,
9 | "endTime": 0,
10 | "status": "RUNNING",
11 | "input": "{path1=file://path1, path2=file://path2, requestDetails={key1=value1, key2=42}, outputPath=s3://bucket/outputPath}"
12 | }
13 |
--------------------------------------------------------------------------------
/family.properties:
--------------------------------------------------------------------------------
1 | generation=1
2 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.daemon=true
2 | org.gradle.jvmargs=-Xmx1g
3 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/conductor-oss/conductor/c81fefe292295738a5fa7de5269102fde45f80cb/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionSha256Sum=9d926787066a081739e8200858338b4a69e837c3a821a33aca9db09dd4a41026
4 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
5 | networkTimeout=10000
6 | validateDistributionUrl=true
7 | zipStoreBase=GRADLE_USER_HOME
8 | zipStorePath=wrapper/dists
9 |
--------------------------------------------------------------------------------
/grpc-client/README.md:
--------------------------------------------------------------------------------
1 | # gRPC client for Conductor OSS
2 |
3 | > **Note:** This module will be relocated to [conductor-clients/java/conductor-java-sdk/sdk](conductor-clients/java/conductor-java-sdk/).
4 | >
5 | > Expected completion date: 2024-10-15.
6 |
--------------------------------------------------------------------------------
/grpc-client/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker:
--------------------------------------------------------------------------------
1 | mock-maker-inline
2 |
--------------------------------------------------------------------------------
/grpc-server/build.gradle:
--------------------------------------------------------------------------------
1 | dependencies {
2 | implementation project(':conductor-common')
3 | implementation project(':conductor-core')
4 | implementation project(':conductor-grpc')
5 |
6 | compileOnly 'org.springframework.boot:spring-boot-starter'
7 |
8 | implementation "io.grpc:grpc-netty:${revGrpc}"
9 | implementation "io.grpc:grpc-services:${revGrpc}"
10 | implementation "io.grpc:grpc-protobuf:${revGrpc}"
11 | implementation "com.google.guava:guava:${revGuava}"
12 | implementation "org.apache.commons:commons-lang3"
13 | implementation "com.fasterxml.jackson.core:jackson-databind"
14 | implementation "com.fasterxml.jackson.core:jackson-core"
15 | implementation "com.fasterxml.jackson.core:jackson-annotations"
16 |
17 | testImplementation "io.grpc:grpc-testing:${revGrpc}"
18 | testImplementation "io.grpc:grpc-protobuf:${revGrpc}"
19 | testImplementation "org.testinfected.hamcrest-matchers:all-matchers:${revHamcrestAllMatchers}"
20 | }
21 |
--------------------------------------------------------------------------------
/grpc-server/src/test/resources/log4j.properties:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright 2023 Conductor authors
3 | #
4 | # Licensed under the Apache License, Version 2.0 (the "License");
5 | # you may not use this file except in compliance with the License.
6 | # You may obtain a copy of the License at
7 | #
8 | # http://www.apache.org/licenses/LICENSE-2.0
9 | #
10 | # Unless required by applicable law or agreed to in writing, software
11 | # distributed under the License is distributed on an "AS IS" BASIS,
12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | # See the License for the specific language governing permissions and
14 | # limitations under the License.
15 | #
16 |
17 | # Set root logger level to WARN and its only appender to A1.
18 | log4j.rootLogger=WARN, A1
19 |
20 | # A1 is set to be a ConsoleAppender.
21 | log4j.appender.A1=org.apache.log4j.ConsoleAppender
22 |
23 | # A1 uses PatternLayout.
24 | log4j.appender.A1.layout=org.apache.log4j.PatternLayout
25 | log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
--------------------------------------------------------------------------------
/grpc/src/main/proto/grpc/search.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 | package conductor.grpc.search;
3 |
4 | option java_package = "com.netflix.conductor.grpc";
5 | option java_outer_classname = "SearchPb";
6 | option go_package = "github.com/netflix/conductor/client/gogrpc/conductor/grpc/search";
7 |
8 | message Request {
9 | int32 start = 1;
10 | int32 size = 2;
11 | string sort = 3;
12 | string free_text = 4;
13 | string query = 5;
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/grpc/src/main/proto/model/dynamicforkjointask.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 | package conductor.proto;
3 |
4 | import "google/protobuf/struct.proto";
5 |
6 | option java_package = "com.netflix.conductor.proto";
7 | option java_outer_classname = "DynamicForkJoinTaskPb";
8 | option go_package = "github.com/netflix/conductor/client/gogrpc/conductor/model";
9 |
10 | message DynamicForkJoinTask {
11 | string task_name = 1;
12 | string workflow_name = 2;
13 | string reference_name = 3;
14 | map
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.sdk.workflow.def;
14 |
15 | public class ValidationError extends RuntimeException {
16 |
17 | public ValidationError(String message) {
18 | super(message);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/java-sdk/src/main/resources/test-server.properties:
--------------------------------------------------------------------------------
1 | conductor.db.type=memory
2 | conductor.indexing.enabled=false
3 | conductor.workflow-repair-service.enabled=false
4 | loadSample=true
5 | conductor.system-task-workers.enabled=false
--------------------------------------------------------------------------------
/java-sdk/src/test/resources/script.js:
--------------------------------------------------------------------------------
1 | function e() {
2 | if ($.value > 1){
3 | return {
4 | "key": "value",
5 | "key2": 42
6 | };
7 | } else {
8 | return {};
9 | }
10 | }
11 | e();
--------------------------------------------------------------------------------
/json-jq-task/build.gradle:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Conductor authors
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 |
14 | dependencies {
15 | implementation project(':conductor-common')
16 | implementation project(':conductor-core')
17 | compileOnly 'org.springframework.boot:spring-boot-starter'
18 |
19 | implementation "net.thisptr:jackson-jq:${revJq}"
20 | implementation "com.github.ben-manes.caffeine:caffeine"
21 | }
22 |
--------------------------------------------------------------------------------
/kafka-event-queue/src/main/resources/META-INF/additional-spring-configuration-metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "properties": [
3 | {
4 | "name": "conductor.event-queues.kafka.enabled",
5 | "type": "java.lang.Boolean",
6 | "description": "Enable the use of Kafka implementation to provide queues for consuming events.",
7 | "sourceType": "com.netflix.conductor.kafkaeq.config.KafkaEventQueueConfiguration"
8 | },
9 | {
10 | "name": "conductor.default-event-queue.type",
11 | "type": "java.lang.String",
12 | "description": "The default event queue type to listen on for the WAIT task.",
13 | "sourceType": "com.netflix.conductor.kafkaeq.config.KafkaEventQueueConfiguration"
14 | }
15 | ],
16 | "hints": [
17 | {
18 | "name": "conductor.default-event-queue.type",
19 | "values": [
20 | {
21 | "value": "kafka",
22 | "description": "Use kafka as the event queue to listen on for the WAIT task."
23 | }
24 | ]
25 | }
26 | ]
27 | }
--------------------------------------------------------------------------------
/kafka/src/test/resources/input.json:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/conductor-oss/conductor/c81fefe292295738a5fa7de5269102fde45f80cb/kafka/src/test/resources/input.json
--------------------------------------------------------------------------------
/kafka/src/test/resources/simple_json_jq_transform_integration_test.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "test_json_jq_transform_wf",
3 | "version": 1,
4 | "tasks": [
5 | {
6 | "name": "jq",
7 | "taskReferenceName": "jq_1",
8 | "inputParameters": {
9 | "input": "${workflow.input}",
10 | "queryExpression": ".input as $_ | { out: ($_.in1.array + $_.in2.array) }"
11 | },
12 | "type": "JSON_JQ_TRANSFORM",
13 | "decisionCases": {},
14 | "defaultCase": [],
15 | "forkTasks": [],
16 | "startDelay": 0,
17 | "joinOn": [],
18 | "optional": false,
19 | "defaultExclusiveJoinTask": [],
20 | "asyncComplete": false,
21 | "loopOver": []
22 | }
23 | ],
24 | "inputParameters": [],
25 | "outputParameters": {},
26 | "schemaVersion": 2,
27 | "restartable": true,
28 | "workflowStatusListenerEnabled": false,
29 | "timeoutPolicy": "ALERT_ONLY",
30 | "timeoutSeconds": 0,
31 | "ownerEmail": "test@harness.com"
32 | }
--------------------------------------------------------------------------------
/licenseheader.txt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright $YEAR Conductor Authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
--------------------------------------------------------------------------------
/metrics/README.md:
--------------------------------------------------------------------------------
1 | # Metrics
2 | Conductor publishes detailed metrics for the server.
3 | For the list of metrics published by server, see:
4 |
5 | https://netflix.github.io/conductor/metrics/server/
6 |
7 | Conductor supports plugging in metrics collectors, the following are currently supported by this module:
8 | 1. Datadog
9 | 2. Prometheus
10 | 3. Logging (dumps all the metrics to Slf4J logger)
11 |
12 | ## Published Artifacts
13 |
14 | Group: `com.netflix.conductor`
15 |
16 | | Published Artifact | Description |
17 | | ----------- | ----------- |
18 | | conductor-metrics | Metrics configuration |
19 |
20 | **Note**: If you are using `condutor-contribs` as a dependency, the metrics module is already included, you do not need to include it separately.
21 |
22 | #### Configuration
23 | * Logging Metrics
24 |
25 | `conductor.metrics-logger.enabled=true`
26 | * Prometheus
27 |
28 | `conductor.metrics-prometheus.enabled=true`
29 | * Datadog
30 |
31 | `conductor.metrics-datadog.enabled=true`
--------------------------------------------------------------------------------
/mysql-persistence/src/main/java/com/netflix/conductor/mysql/util/ExecuteFunction.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Conductor Authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.mysql.util;
14 |
15 | import java.sql.SQLException;
16 |
17 | /**
18 | * Functional interface for {@link Query} executions with no expected result.
19 | *
20 | * @author mustafa
21 | */
22 | @FunctionalInterface
23 | public interface ExecuteFunction {
24 |
25 | void apply(Query query) throws SQLException;
26 | }
27 |
--------------------------------------------------------------------------------
/mysql-persistence/src/main/java/com/netflix/conductor/mysql/util/QueryFunction.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Conductor Authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.mysql.util;
14 |
15 | import java.sql.SQLException;
16 |
17 | /**
18 | * Functional interface for {@link Query} executions that return results.
19 | *
20 | * @author mustafa
21 | */
22 | @FunctionalInterface
23 | public interface QueryFunction
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.os.dao.query.parser;
14 |
15 | import org.opensearch.index.query.QueryBuilder;
16 |
17 | /**
18 | * @author Viren
19 | */
20 | public interface FilterProvider {
21 |
22 | /**
23 | * @return FilterBuilder for elasticsearch
24 | */
25 | public QueryBuilder getFilterBuilder();
26 | }
27 |
--------------------------------------------------------------------------------
/os-persistence/src/main/java/com/netflix/conductor/os/dao/query/parser/internal/FunctionThrowingException.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Conductor Authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.os.dao.query.parser.internal;
14 |
15 | /**
16 | * @author Viren
17 | */
18 | @FunctionalInterface
19 | public interface FunctionThrowingException
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.os.dao.query.parser;
14 |
15 | import org.junit.Test;
16 |
17 | /**
18 | * @author Viren
19 | */
20 | public class TestGroupedExpression {
21 |
22 | @Test
23 | public void test() {}
24 | }
25 |
--------------------------------------------------------------------------------
/os-persistence/src/test/resources/expected_template_task_log.json:
--------------------------------------------------------------------------------
1 | {
2 | "index_patterns" : [ "*conductor_task*log*" ],
3 | "template" : {
4 | "settings" : {
5 | "refresh_interval" : "1s"
6 | },
7 | "mappings" : {
8 | "properties" : {
9 | "createdTime" : {
10 | "type" : "long"
11 | },
12 | "log" : {
13 | "type" : "keyword",
14 | "index" : true
15 | },
16 | "taskId" : {
17 | "type" : "keyword",
18 | "index" : true
19 | }
20 | }
21 | },
22 | "aliases" : { }
23 | }
24 | }
--------------------------------------------------------------------------------
/os-persistence/src/test/resources/task_summary.json:
--------------------------------------------------------------------------------
1 | {
2 | "taskId": "9dea4567-0240-4eab-bde8-99f4535ea3fc",
3 | "taskDefName": "templated_task",
4 | "taskType": "templated_task",
5 | "workflowId": "WORKFLOW_INSTANCE_ID",
6 | "workflowType": "template_workflow",
7 | "correlationId": "testTaskDefTemplate",
8 | "scheduledTime": "2021-08-22T05:18:25.121Z",
9 | "startTime": "0",
10 | "endTime": "0",
11 | "updateTime": "2021-08-23T00:18:25.121Z",
12 | "status": "SCHEDULED",
13 | "workflowPriority": 1,
14 | "queueWaitTime": 0,
15 | "executionTime": 0,
16 | "input": "{http_request={method=GET, vipStack=test_stack, body={requestDetails={key1=value1, key2=42}, outputPath=s3://bucket/outputPath, inputPaths=[file://path1, file://path2]}, uri=/get/something}}"
17 | }
--------------------------------------------------------------------------------
/os-persistence/src/test/resources/workflow_summary.json:
--------------------------------------------------------------------------------
1 | {
2 | "workflowType": "template_workflow",
3 | "version": 1,
4 | "workflowId": "WORKFLOW_INSTANCE_ID",
5 | "priority": 1,
6 | "correlationId": "testTaskDefTemplate",
7 | "startTime": 1534983505050,
8 | "updateTime": 1534983505131,
9 | "endTime": 0,
10 | "status": "RUNNING",
11 | "input": "{path1=file://path1, path2=file://path2, requestDetails={key1=value1, key2=42}, outputPath=s3://bucket/outputPath}"
12 | }
13 |
--------------------------------------------------------------------------------
/polyglot-clients/README.md:
--------------------------------------------------------------------------------
1 | # SDKs for other languages
2 |
3 | Language specific client SDKs are maintained at a dedicated [conductor-sdk](https://github.com/conductor-sdk) repository.
4 |
5 |
6 | Check the repository for the latest list, but there are SDK clients for:
7 |
8 | ## SDK List
9 | * [Clojure](https://github.com/conductor-sdk/conductor-clojure)
10 | * [C#](https://github.com/conductor-sdk/conductor-csharp)
11 | * [Go](https://github.com/conductor-sdk/conductor-go)
12 | * [Python](https://github.com/conductor-sdk/conductor-python)
13 |
14 |
15 | ### In progress (PRs encouraged!)
16 | * [JavaScript](https://github.com/conductor-sdk/conductor-javascript)
--------------------------------------------------------------------------------
/postgres-external-storage/build.gradle:
--------------------------------------------------------------------------------
1 | dependencies {
2 | implementation project(':conductor-common')
3 | implementation project(':conductor-core')
4 |
5 | compileOnly 'org.springframework.boot:spring-boot-starter'
6 | compileOnly 'org.springframework.boot:spring-boot-starter-web'
7 |
8 | implementation "org.postgresql:postgresql:${revPostgres}"
9 | implementation 'org.springframework.boot:spring-boot-starter-jdbc'
10 | implementation "org.flywaydb:flyway-core:${revFlyway}"
11 | implementation "org.flywaydb:flyway-database-postgresql:${revFlyway}"
12 |
13 | implementation "org.springdoc:springdoc-openapi-starter-webmvc-ui:${revSpringDoc}"
14 | implementation "commons-codec:commons-codec:${revCodec}"
15 |
16 | testImplementation 'org.springframework.boot:spring-boot-starter-web'
17 | testImplementation "org.testcontainers:postgresql:${revTestContainer}"
18 | testImplementation project(':conductor-test-util').sourceSets.test.output
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/postgres-persistence/src/main/java/com/netflix/conductor/postgres/util/QueryFunction.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2023 Conductor Authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.postgres.util;
14 |
15 | import java.sql.SQLException;
16 |
17 | /**
18 | * Functional interface for {@link Query} executions that return results.
19 | *
20 | * @author mustafa
21 | */
22 | @FunctionalInterface
23 | public interface QueryFunction
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5 | * the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10 | * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11 | * specific language governing permissions and limitations under the License.
12 | */
13 | package com.netflix.conductor.sqlite.util;
14 |
15 | import java.sql.SQLException;
16 |
17 | /**
18 | * Functional interface for {@link Query} executions that return results.
19 | *
20 | * @author mustafa
21 | */
22 | @FunctionalInterface
23 | public interface QueryFunction
4 |
5 | {% endif %}
--------------------------------------------------------------------------------
/docs/resources/license.md:
--------------------------------------------------------------------------------
1 | # License
2 |
3 | Copyright 2023 Conductor authors.
4 |
5 | Licensed under the Apache License, Version 2.0 (the "License");
6 | you may not use this file except in compliance with the License.
7 | You may obtain a copy of the License at
8 |
9 | [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)
10 |
11 | Unless required by applicable law or agreed to in writing, software
12 | distributed under the License is distributed on an "AS IS" BASIS,
13 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | See the License for the specific language governing permissions and
15 | limitations under the License.
16 |
--------------------------------------------------------------------------------
/es6-persistence/src/main/java/com/netflix/conductor/es6/dao/query/parser/FilterProvider.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2020 Conductor Authors.
3 | *
8 |
10 | );
11 |
12 | export default withStyles((theme) => ({
13 | root: {
14 | "& tr:first-child": {
15 | borderTopColor: theme.palette.divider,
16 | borderTopStyle: "solid",
17 | borderTopWidth: "1px",
18 | },
19 | },
20 | }))(DefinitionList);
21 |
--------------------------------------------------------------------------------
/ui/src/components/diagram/TaskPointer.d.ts:
--------------------------------------------------------------------------------
1 | export type TaskPointer = {
2 | id: ?string;
3 | ref: ?string;
4 | };
5 |
--------------------------------------------------------------------------------
/ui/src/components/diagram/TaskResult.d.ts:
--------------------------------------------------------------------------------
1 | export type TaskWrapper = {};
2 |
--------------------------------------------------------------------------------
/ui/src/components/diagram/ZoomControlButton.jsx:
--------------------------------------------------------------------------------
1 | import { IconButton, Tooltip } from "@material-ui/core";
2 |
3 | export const ZoomControlsButton = ({
4 | style,
5 | children,
6 | tooltip = "",
7 | ...props
8 | }) => {
9 | return (
10 | ;
17 | }
18 |
--------------------------------------------------------------------------------
/ui/src/plugins/CustomAppBarButtons.jsx:
--------------------------------------------------------------------------------
1 | export default function CustomAppBarButtons() {
2 | return <>>;
3 | }
4 |
--------------------------------------------------------------------------------
/ui/src/plugins/CustomRoutes.jsx:
--------------------------------------------------------------------------------
1 | export default function CustomRoutes() {
2 | return <>>;
3 | }
4 |
--------------------------------------------------------------------------------
/ui/src/plugins/constants.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/conductor-oss/conductor/c81fefe292295738a5fa7de5269102fde45f80cb/ui/src/plugins/constants.js
--------------------------------------------------------------------------------
/ui/src/plugins/customTypeRenderers.jsx:
--------------------------------------------------------------------------------
1 | export const customTypeRenderers = {};
2 |
--------------------------------------------------------------------------------
/ui/src/plugins/env.js:
--------------------------------------------------------------------------------
1 | export function useEnv() {
2 | return {
3 | stack: "default",
4 | defaultStack: "default",
5 | };
6 | }
7 |
--------------------------------------------------------------------------------
/ui/src/react-app-env.d.ts:
--------------------------------------------------------------------------------
1 | ///