openapi: 3.0.3 info: title: svc-sundial version: 0.2.7 description: A service for scheduling and running Docker-based jobs paths: /_internal_/metrics: get: responses: '200': description: Successful response content: application/json: schema: type: string /api/process_definitions/: get: description: Get all currently registered process definitions responses: '200': description: Successful response content: application/json: schema: type: array items: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsProcessDefinition' /api/process_definitions/{process_definition_name}: get: description: Get a registered process definition parameters: - name: process_definition_name in: path required: true schema: type: string responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsProcessDefinition' put: description: Updates or creates a process definition parameters: - name: process_definition_name in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsProcessDefinition' required: true responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsProcessDefinition' delete: description: Deletes a registered process definition parameters: - name: process_definition_name in: path required: true schema: type: string responses: '204': description: No content /api/process_definitions/{process_definition_name}/pause: post: description: Pause the process schedule parameters: - name: process_definition_name in: path required: true schema: type: string responses: '204': description: No content /api/process_definitions/{process_definition_name}/resume: post: description: Resume the process schedule parameters: - name: process_definition_name in: path required: true schema: type: string responses: '204': description: No content /api/process_definitions/{process_definition_name}/trigger: post: description: Triggers a new instance of the process parameters: - name: process_definition_name in: path required: true schema: type: string - name: task_definition_name in: query required: false schema: type: string responses: '204': description: No content /api/processes/: get: description: Retrieves a list of process runs based on search parameters. parameters: - name: process_definition_name in: query required: false schema: type: string - name: start_time in: query required: false schema: type: string format: date-time - name: end_time in: query required: false schema: type: string format: date-time - name: max_records in: query required: false schema: type: integer format: int32 - name: allowed_statuses in: query required: true schema: type: array items: $ref: '#/components/schemas/ComGiltSvcSundialV0EnumsProcessStatus' responses: '200': description: Successful response content: application/json: schema: type: array items: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsProcess' /api/processes/{process_id}: get: description: Retrieves a process run parameters: - name: process_id in: path required: true schema: type: string format: uuid responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsProcess' /api/processes/{process_id}/kill: post: description: Terminates an active process parameters: - name: process_id in: path required: true schema: type: string format: uuid responses: '204': description: No content /api/processes/{process_id}/retry: post: description: Retries a failed process run by restarting failed tasks; tasks will be given a single additional attempt parameters: - name: process_id in: path required: true schema: type: string format: uuid responses: '204': description: No content /api/tasks/: get: description: Retrieves the most recent tasks meeting the given criteria parameters: - name: process_definition_name in: query required: true schema: type: string - name: task_definition_name in: query required: true schema: type: string - name: allowed_statuses in: query required: true schema: type: array items: $ref: '#/components/schemas/ComGiltSvcSundialV0EnumsTaskStatus' - name: start_time in: query required: false schema: type: string format: date-time - name: end_time in: query required: false schema: type: string format: date-time - name: limit in: query required: false schema: type: integer format: int32 responses: '200': description: Successful response content: application/json: schema: type: array items: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsTask' /api/tasks/{task_id}/fail: post: description: Marks the task as having failed parameters: - name: task_id in: path required: true schema: type: string format: uuid responses: '204': description: No content /api/tasks/{task_id}/log_entries: post: description: Appends log entries for a task; intended for use within the task executable parameters: - name: task_id in: path required: true schema: type: string format: uuid requestBody: content: application/json: schema: type: array items: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsLogEntry' required: true responses: '204': description: No content /api/tasks/{task_id}/metadata: post: description: Appends metadata entries for a task; intended for use within the task executable parameters: - name: task_id in: path required: true schema: type: string format: uuid requestBody: content: application/json: schema: type: array items: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsMetadataEntry' required: true responses: '204': description: No content /api/tasks/{task_id}/succeed: post: description: Marks the task as having succeeded parameters: - name: task_id in: path required: true schema: type: string format: uuid responses: '204': description: No content components: schemas: ComGiltSvcSundialV0ModelsCustomEmrJobFlowRole: description: Custom, preconfigured, EMR EC2 instance role type: object required: - role_name properties: role_name: type: string ComGiltSvcSundialV0ModelsTaskDependency: type: object required: - task_definition_name - success_required properties: task_definition_name: type: string success_required: type: boolean ComGiltSvcSundialV0ModelsPagerduty: description: Pager Duty integration type: object required: - service_key - num_consecutive_failures - api_url properties: service_key: type: string num_consecutive_failures: type: integer format: int32 api_url: default: https://events.pagerduty.com type: string ComGiltSvcSundialV0ModelsEnvironmentVariable: type: object required: - variable_name - value properties: variable_name: type: string value: type: string ComGiltSvcSundialV0ModelsSpot: description: the maximum spot bid price type: object required: - bid_price properties: bid_price: type: number ComGiltSvcSundialV0ModelsExistingEmrCluster: description: Existing EMR cluster configuration object type: object required: - cluster_id properties: cluster_id: description: The EMR cluster id example: j-2CRR69WTM7N31 type: string ComGiltSvcSundialV0ModelsS3LogDetails: type: object required: - log_group_name - log_stream_name properties: log_group_name: type: string log_stream_name: type: string ComGiltSvcSundialV0ModelsEmrInstanceGroupDetails: description: Additional configuration for Master/Core/Task EMR instance Groups. type: object required: - emr_instance_type - instance_count - aws_market properties: emr_instance_type: type: string instance_count: type: integer format: int32 aws_market: $ref: '#/components/schemas/ComGiltSvcSundialV0UnionsAwsMarket' ebs_volume_size: description: optional EBS volume in GB to attach to the emr instance, for simplicity only one volume for the given size and type gp2 will be created. type: integer format: int32 ComGiltSvcSundialV0ModelsDockerImageCommand: type: object required: - image - tag - command - log_paths - environment_variables properties: image: type: string tag: default: latest type: string command: type: array items: type: string memory: type: integer format: int32 cpu: type: integer format: int32 taskRoleArn: type: string log_paths: type: array items: type: string environment_variables: type: array items: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsEnvironmentVariable' ComGiltSvcSundialV0ModelsContinuousSchedule: type: object properties: buffer_seconds: description: The minimum amount of time (in seconds) that must pass between executions of the process type: integer format: int32 ComGiltSvcSundialV0ModelsEmail: description: An email to send notifications to type: object required: - name - email - notify_when properties: name: type: string email: type: string notify_when: $ref: '#/components/schemas/ComGiltSvcSundialV0EnumsNotificationOptions' ComGiltSvcSundialV0ModelsCustomEmrServiceRole: description: Custom, preconfigured, EMR Service role type: object required: - role_name properties: role_name: type: string ComGiltSvcSundialV0ModelsLogEntry: type: object required: - log_entry_id - when - source - message properties: log_entry_id: description: Uniquely identifies the log message to prevent duplication type: string format: uuid when: type: string format: date-time source: type: string message: type: string ComGiltSvcSundialV0ModelsBatchImageCommand: type: object required: - image - tag - command - memory - vCpus - environment_variables properties: image: description: Name of docker image including registry URL if needed type: string tag: description: Tag on docker image default: latest type: string command: description: Command to pass to Docker container type: array items: type: string memory: type: integer format: int32 vCpus: type: integer format: int32 job_role_arn: description: ARN of an IAM role, see http://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-iam-roles.html type: string environment_variables: description: environment variables to be passed to container type: array items: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsEnvironmentVariable' job_queue: description: 'Override default job queue, eg: for priority queue or GPU instances queue' type: string ComGiltSvcSundialV0ModelsCronSchedule: description: See http://quartz-scheduler.org/api/2.2.0/org/quartz/CronExpression.html type: object required: - day_of_week - month - day_of_month - hours - minutes properties: day_of_week: type: string month: type: string day_of_month: type: string hours: type: string minutes: type: string ComGiltSvcSundialV0ModelsProcessDefinition: description: A grouping of related tasks that are run as a single unit on the same schedule type: object required: - process_definition_name - task_definitions - overlap_action properties: process_definition_name: type: string paused: description: If true, ignore schedule and only start process if triggered manually type: boolean process_description: type: string schedule: $ref: '#/components/schemas/ComGiltSvcSundialV0UnionsProcessSchedule' description: The schedule that the process runs on; if not specified, the process will only run when triggered manually task_definitions: type: array items: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsTaskDefinition' overlap_action: $ref: '#/components/schemas/ComGiltSvcSundialV0EnumsProcessOverlapAction' notifications: type: array items: $ref: '#/components/schemas/ComGiltSvcSundialV0UnionsNotification' ComGiltSvcSundialV0ModelsMetadataEntry: type: object required: - metadata_entry_id - when - key - value properties: metadata_entry_id: description: Uniquely identifies the metadata entry to prevent duplication type: string format: uuid when: type: string format: date-time key: type: string value: type: string ComGiltSvcSundialV0ModelsS3Cp: description: Wrapper of the S3DistCp spark job for more info visit the aws [s3-dist-cp](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/UsingEMR_s3distcp.html) page type: object required: - source - destination properties: source: description: Source folder or file to copy. It can be either a s3 or HDFS location example: s3:///my-bucket-root - hdfs://tmp/my-temp-folder type: string destination: description: Source folder or file to copy. It can be either a s3 or HDFS location example: s3:///my-bucket-root - hdfs://tmp/my-temp-folder type: string ComGiltSvcSundialV0ModelsNewEmrCluster: description: New EMR cluster configuration object type: object required: - name - release_label - applications - s3_log_uri - master_instance - emr_service_role - emr_job_flow_role - visible_to_all_users properties: name: type: string release_label: $ref: '#/components/schemas/ComGiltSvcSundialV0EnumsEmrReleaseLabel' applications: type: array items: $ref: '#/components/schemas/ComGiltSvcSundialV0EnumsEmrApplication' s3_log_uri: type: string master_instance: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsEmrInstanceGroupDetails' core_instance: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsEmrInstanceGroupDetails' task_instance: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsEmrInstanceGroupDetails' ec2_subnet: description: To be set in case the EMR cannot be launched in the `default VPC` type: string emr_service_role: $ref: '#/components/schemas/ComGiltSvcSundialV0UnionsEmrServiceRole' description: role to be assigned to the service, the default one should cover most of the cases emr_job_flow_role: $ref: '#/components/schemas/ComGiltSvcSundialV0UnionsEmrJobFlowRole' description: role to be assigned to the ec2 instances composing the EMR cluster. The default one should cover most of the cases visible_to_all_users: description: whether or not to show the new cluster in the list of clusters. For more details see [emr docs](http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-emr-cluster.html#cfn-emr-cluster-visibletoallusers) type: boolean ComGiltSvcSundialV0ModelsHealthcheck: type: object required: - status properties: status: type: string ComGiltSvcSundialV0ModelsEmrCommand: type: object required: - emr_cluster - job_name - region - class - s3_jar_path - spark_conf - args properties: emr_cluster: $ref: '#/components/schemas/ComGiltSvcSundialV0UnionsEmrCluster' description: The EMR cluster on which to launch the job (aka step) job_name: description: NAme to be assigned to the Job type: string region: description: the AWS Region default: us-east-1 type: string class: description: The spark job's `Main.class` to run example: org.apache.spark.examples.SparkPi type: string s3_jar_path: description: the s3 path to the jar of the job to be run example: s3://my-emr-source-bucket/my-emr-jar.jar type: string spark_conf: description: options that will be sent to spark as --conf key=value, e.g. `--conf spark.driver.extraJavaOptions=-Denvironment=integration` example: - spark.driver.extraJavaOptions=-Denvironment=integration type: array items: type: string args: description: command line arguments to be passe to the job's main class example: - --executor-memory - 1g type: array items: type: string s3_log_details: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsS3LogDetails' description: AWS EMR periodically (currently every 5 minutes) zips up all the logs and upload them into S3. This does not work well with sundial's _live logs_. Make use of S3 Logs to visualise in real time job's log on sundial's live logs panel load_data: description: will trigger a s3 dist cp job for every entry in this array, can be used to load data from s3 into HDFS. **requires Hadoop** as application on the cluster type: array items: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsS3Cp' save_results: description: will trigger a s3 dist cp job for every entry in this array, can be used to save data from HDFS to s3. **requires Hadoop** as application on the cluster type: array items: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsS3Cp' ComGiltSvcSundialV0ModelsShellScriptCommand: type: object required: - script properties: script: type: string environment_variables: type: array items: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsEnvironmentVariable' ComGiltSvcSundialV0ModelsProcess: type: object required: - process_id - process_definition_name - start_time - status - task properties: process_id: type: string format: uuid process_definition_name: type: string start_time: type: string format: date-time status: $ref: '#/components/schemas/ComGiltSvcSundialV0EnumsProcessStatus' task: type: array items: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsTask' ComGiltSvcSundialV0ModelsTask: type: object required: - task_id - process_id - process_definition_name - task_definition_name - start_time - previous_attempt_count - log_entries - metadata_entries - status properties: task_id: type: string format: uuid process_id: type: string format: uuid process_definition_name: type: string task_definition_name: type: string start_time: type: string format: date-time end_time: type: string format: date-time previous_attempt_count: type: integer format: int32 log_entries: type: array items: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsLogEntry' metadata_entries: type: array items: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsMetadataEntry' execution_state: description: Internal bookkeeping metadata used for task scheduling (e.g. ECS task ID and cluster name) type: array items: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsMetadataEntry' status: $ref: '#/components/schemas/ComGiltSvcSundialV0EnumsTaskStatus' ComGiltSvcSundialV0ModelsTaskDefinition: description: An individual task that runs as part of a process type: object required: - task_definition_name - dependencies - executable - max_attempts - backoff_base_seconds - backoff_exponent - require_explicit_success properties: task_definition_name: description: The canonical name for this task used by other tasks to identify this task type: string dependencies: description: The tasks that must have completed prior to this one beginning type: array items: $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsTaskDependency' executable: $ref: '#/components/schemas/ComGiltSvcSundialV0UnionsTaskExecutable' max_attempts: type: integer format: int32 max_runtime_seconds: description: The execution time (for a single attempt) after which the system will kill the task type: integer format: int32 backoff_base_seconds: type: integer format: int32 backoff_exponent: type: number format: double require_explicit_success: description: If true, the task must explicitly update its status with Sundial in order to succeed. type: boolean ComGiltSvcSundialV0EnumsTaskStatus: type: string enum: - submitted - runnable - starting - pending - running - failed - succeeded ComGiltSvcSundialV0EnumsEmrApplication: description: List of applications to install in the EMR cluster type: string enum: - Hadoop - Hive - Mahout - Pig - Spark ComGiltSvcSundialV0EnumsProcessStatus: type: string enum: - running - succeeded - failed ComGiltSvcSundialV0EnumsProcessOverlapAction: type: string enum: - wait - terminate ComGiltSvcSundialV0EnumsNotificationOptions: type: string enum: - always - on_failure - on_state_change - on_state_change_and_failures - never ComGiltSvcSundialV0EnumsDefaultEmrJobFlowRole: description: The default EMR EC2 Instance role type: string enum: - EMR_EC2_DefaultRole ComGiltSvcSundialV0EnumsOnDemand: description: The onDemand type of Market Type type: string enum: - on_demand ComGiltSvcSundialV0EnumsDefaultEmrServiceRole: description: The default EMR Service role type: string enum: - EMR_DefaultRole ComGiltSvcSundialV0EnumsEmrReleaseLabel: description: Version (aka label in AWS-EMR) of the EMR stack to create. type: string enum: - emr-5.14.0 - emr-5.13.0 - emr-5.12.1 - emr-5.12.0 - emr-5.11.1 - emr-5.11.0 - emr-5.10.0 - emr-5.9.0 - emr-4.9.2 - emr-4.9.1 ComGiltSvcSundialV0UnionsNotification: oneOf: - $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsEmail' - $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsPagerduty' ComGiltSvcSundialV0UnionsEmrCluster: description: Whether or not to create a new EMR cluster or re-use a pre-existing one oneOf: - $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsNewEmrCluster' - $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsExistingEmrCluster' ComGiltSvcSundialV0UnionsEmrServiceRole: description: The EMR service role to use oneOf: - $ref: '#/components/schemas/ComGiltSvcSundialV0EnumsDefaultEmrServiceRole' - $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsCustomEmrServiceRole' ComGiltSvcSundialV0UnionsAwsMarket: description: The EC2 market of the EC2 instances oneOf: - $ref: '#/components/schemas/ComGiltSvcSundialV0EnumsOnDemand' - $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsSpot' ComGiltSvcSundialV0UnionsEmrJobFlowRole: description: The EMR role to use on the EC2 instances oneOf: - $ref: '#/components/schemas/ComGiltSvcSundialV0EnumsDefaultEmrJobFlowRole' - $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsCustomEmrJobFlowRole' ComGiltSvcSundialV0UnionsProcessSchedule: description: A specification for when a process should be run oneOf: - $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsCronSchedule' - $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsContinuousSchedule' ComGiltSvcSundialV0UnionsTaskExecutable: oneOf: - $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsDockerImageCommand' - $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsShellScriptCommand' - $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsBatchImageCommand' - $ref: '#/components/schemas/ComGiltSvcSundialV0ModelsEmrCommand'