netflix-conductor-utilities
Version:
Netflix conductor utilities
420 lines (419 loc) • 12 kB
TypeScript
export declare enum TaskTimeoutPolicy {
retry = "RETRY",
timeOutWF = "TIME_OUT_WF",
alertOnly = "ALERT_ONLY"
}
export declare enum TaskRetryLogic {
fixed = "FIXED",
exponentialBackoff = "EXPONENTIAL_BACKOFF"
}
/**
* See: https://netflix.github.io/conductor/configuration/taskdef/
*/
export interface TaskMetadataDefinition {
/**
* Task Type. Unique name of the Task that resonates with it's function.
*
* Unique
*/
name: string;
/**
* Description of the task
*/
description?: string;
/**
* Email of owner
*/
ownerEmail: string;
/**
* No. of retries to attempt when a Task is marked as failure
*
* defaults to 3
*/
retryCount?: number;
/**
* Mechanism for the retries
*/
retryLogic?: TaskRetryLogic;
/**
* Time to wait before retries
*
* defaults to 60 seconds
*/
retryDelaySeconds?: number;
/**
* Task's timeout policy
*/
timeoutPolicy?: TaskTimeoutPolicy;
/**
* Time in seconds, after which the task is marked as TIMED_OUT if not completed after transitioning to IN_PROGRESS
* status for the first time
*
* No timeouts if set to 0
*/
timeoutSeconds?: number;
/**
* Must be greater than 0 and less than timeoutSeconds. The task is rescheduled if not updated with a status after
* this time (heartbeat mechanism). Useful when the worker polls for the task but fails to complete due to
* errors/network failure.
*
* defaults to 3600
*/
responseTimeoutSeconds?: number;
/**
* Array of keys of task's expected input. Used for documenting task's input.
* See [Using inputKeys and outputKeys](https://netflix.github.io/conductor/configuration/taskdef/#using-inputkeys-and-outputkeys).
*
*/
inputKeys?: string[];
/**
* Array of keys of task's expected output. Used for documenting task's output
*/
outputKeys?: string[];
/**
* See [Using inputTemplate below](https://netflix.github.io/conductor/configuration/taskdef/#using-inputtemplate).
*/
inputTemplate?: any;
/**
* Number of tasks that can be executed at any given time.
*/
concurrentExecLimit?: number;
/**
* See [Task Rate limits below](https://netflix.github.io/conductor/configuration/taskdef/#task-rate-limits).
*/
rateLimitPerFrequency?: number;
/**
* See [Task Rate limits below](https://netflix.github.io/conductor/configuration/taskdef/#task-rate-limits).
*/
rateLimitFrequencyInSeconds?: number;
}
export interface TaskDefinition extends TaskMetadataDefinition {
createTime?: number;
}
type AnyWorkflowTaskMetadata = WorkflowTaskMetadata | SubWorkflowTaskMetadata | DecisionTaskMetadata | DynamicForkTaskMetadata | ForkTaskMetadata | EventTaskMetadata | HTTPTaskMetadata | ExclusiveJoinTaskMetadata | JoinTaskMetadata;
/**
* See: https://netflix.github.io/conductor/configuration/workflowdef/#workflow-definition
*/
export interface WorkflowMetadataDefinition {
/**
* Name of the workflow
*/
name: string;
/**
* Description of the workflow
*/
description?: string;
/**
* Email of owner
*/
ownerEmail: string;
/**
* Numeric field used to identify the version of the schema. Use incrementing numbers
*
* When starting a workflow execution, if not specified, the definition with highest version is used
*/
version?: number;
/**
* An array of task definitions as described below.
*/
tasks: AnyWorkflowTaskMetadata[];
/**
* List of input parameters. Used for documenting the required inputs to workflow
*/
inputParameters?: string[];
/**
* JSON template used to generate the output of the workflow
*
* If not specified, the output is defined as the output of the last executed task
*/
outputParameters?: object;
/**
* String; Workflow to be run on current Workflow failure. Useful for cleanup or post actions on failure.
*/
failureWorkflow?: string;
/**
* Current Conductor Schema version. schemaVersion 1 is discontinued.
*
* Must be 2
*/
schemaVersion?: number;
/**
* Boolean flag to allow Workflow restarts
* defaults to true
*/
restartable?: boolean;
/**
* If true, every workflow that gets terminated or completed will send a notification.
* See [below](https://netflix.github.io/conductor/configuration/workflowdef/#workflow-notifications)
*
* optional (false by default)
*/
workflowStatusListenerEnabled?: boolean;
}
export interface WorkflowDefinition extends WorkflowMetadataDefinition {
createTime?: number;
}
export declare enum WorkflowTaskType {
simple = "SIMPLE",
subWorkflow = "SUB_WORKFLOW",
decision = "DECISION",
event = "EVENT",
http = "HTTP",
forkJoin = "FORK_JOIN",
forkJoinDynamic = "FORK_JOIN_DYNAMIC",
join = "JOIN",
exclusiveJoin = "EXCLUSIVE_JOIN",
wait = "WAIT",
dynamic = "DYNAMIC",
lambda = "LAMBDA",
terminate = "TERMINATE",
kafkaPublish = "KAFKA_PUBLISH",
doWhile = "DO_WHILE"
}
export interface WorkflowTaskMetadata {
/**
* Name of the task. MUST be registered as a task with Conductor before starting the workflow
*/
name: string;
/**
* Alias used to refer the task within the workflow. MUST be unique within workflow.
*/
taskReferenceName: string;
/**
* Type of task. SIMPLE for tasks executed by remote workers, or one of the system task types
*/
type: WorkflowTaskType;
/**
* Description of the task
*/
description?: string;
/**
* true or false. When set to true - workflow continues even if the task fails. The status of the task is reflected
* as COMPLETED_WITH_ERRORS
*
* Defaults to false
*/
optional?: boolean;
/**
* JSON template that defines the input given to the task
*
* See [Wiring Inputs and Outputs for details](https://netflix.github.io/conductor/configuration/workflowdef/#wiring-inputs-and-outputs)
*/
inputParameters?: object;
/**
* See [Task Domains for more information](https://netflix.github.io/conductor/configuration/taskdomains/).
*/
domain?: object;
}
/**
* See [Sub Workflow](https://netflix.github.io/conductor/configuration/systask/#sub-workflow)
*/
export interface SubWorkflowTaskMetadata extends WorkflowTaskMetadata {
subWorkflowParam: {
name: string;
version?: number;
taskToDomain?: object;
};
}
export interface DecisionCaseMap {
[caseName: string]: AnyWorkflowTaskMetadata[];
}
/**
* See [Decision](https://netflix.github.io/conductor/configuration/systask/#decision)
*/
export interface DecisionTaskMetadata extends WorkflowTaskMetadata {
caseValueParam: string;
decisionCases: DecisionCaseMap;
defaultCase?: AnyWorkflowTaskMetadata[];
caseExpression: string;
}
/**
* See [Dynamic Fork](https://netflix.github.io/conductor/configuration/systask/#dynamic-fork)
*/
export interface DynamicForkTaskMetadata extends WorkflowTaskMetadata {
dynamicForkTasksParam: string;
dynamicForkTasksInputParamName: string;
}
/**
* See [Fork](https://netflix.github.io/conductor/configuration/systask/#fork)
*/
export interface ForkTaskMetadata extends WorkflowTaskMetadata {
forkTasks: AnyWorkflowTaskMetadata[][];
}
/**
* See [Event](https://netflix.github.io/conductor/configuration/systask/#event)
*/
export interface EventTaskMetadata extends WorkflowTaskMetadata {
sink: string;
asyncComplete: boolean;
}
/**
* See [HTTP](https://netflix.github.io/conductor/configuration/systask/#http)
*/
export interface HTTPTaskMetadata extends WorkflowTaskMetadata {
http_request: {
uri: string;
method: string;
accept?: string;
contentType?: string;
headers?: object;
body?: any;
vipAddress?: string;
asyncComplete?: boolean;
};
}
/**
* See [Join](https://netflix.github.io/conductor/configuration/systask/#join)
*/
export interface JoinTaskMetadata extends WorkflowTaskMetadata {
joinOn: string[];
}
/**
* See [Exclusive Join](https://netflix.github.io/conductor/configuration/systask/#exclusive-join)
*/
export interface ExclusiveJoinTaskMetadata extends WorkflowTaskMetadata {
joinOn: string[];
defaultExclusiveJoinTask: string[];
}
export interface WorkflowTask extends WorkflowTaskMetadata {
startDelay: number;
taskDefinition: TaskDefinition;
asyncComplete: boolean;
}
export declare enum WorkflowStatus {
running = "RUNNING",
completed = "COMPLETED",
failed = "FAILED",
timedOut = "TIMED_OUT",
terminated = "TERMINATED",
paused = "PAUSED"
}
export interface Workflow<INPUT = any, OUTPUT = any> {
createTime: number;
endTime: number;
priority: number;
schemaVersion: number;
startTime: number;
status: WorkflowStatus;
updateTime: number;
version: number;
workflowDefinition: WorkflowDefinition;
workflowId: string;
workflowName: string;
workflowType: string;
workflowVersion: number;
tasks: Task[];
input?: INPUT;
output?: OUTPUT;
}
export interface Task {
callbackAfterSeconds: number;
callbackFromWorker: boolean;
endTime: number;
executed: boolean;
pollCount: number;
queueWaitTime: number;
rateLimitFrequencyInSeconds: number;
rateLimitPerFrequency: number;
referenceTaskName: string;
responseTimeoutSeconds: number;
retried: boolean;
retryCount: number;
scheduledTime: number;
seq: number;
startDelayInSeconds: number;
startTime: number;
status: TaskState;
taskDefinition: TaskDefinition;
taskDefName: string;
taskId: string;
taskStatus: TaskState;
taskType: string;
updateTime: 0;
workflowInstanceId: string;
workflowPriority: number;
workflowTask: WorkflowTask;
workflowType: number;
}
export interface PollTask {
taskType: string;
status: TaskState;
inputData?: any;
referenceTaskName: string;
retryCount: number;
seq: number;
correlationId: string;
pollCount: number;
taskDefName: string;
scheduledTime: number;
startTime: number;
endTime: number;
updateTime: number;
startDelayInSeconds: number;
retried: boolean;
executed: boolean;
callbackFromWorker: boolean;
responseTimeoutSeconds: number;
workflowInstanceId: string;
workflowType: string;
taskId: string;
callbackAfterSeconds: number;
workerId: string;
workflowTask: WorkflowTask;
rateLimitPerFrequency: number;
rateLimitFrequencyInSeconds: number;
workflowPriority: number;
taskDefinition: TaskDefinition;
queueWaitTime: number;
taskStatus: TaskState;
}
export declare enum TaskState {
scheduled = "SCHEDULED",
inProgress = "IN_PROGRESS",
failed = "FAILED",
completed = "COMPLETED",
cancelled = "CANCELLED",
timedOut = "TIMED_OUT",
skipped = "SKIPPED"
}
export interface RunningTaskCoreInfo {
workflowInstanceId: string;
taskId: string;
}
export interface UpdatingTaskResult<Result = any> extends RunningTaskCoreInfo {
status: TaskState;
callbackAfterSeconds: number;
reasonForIncompletion?: string;
outputData?: Result;
logs?: {
log: string;
createdTime: number;
}[];
}
export interface ConductorSDKOptions {
apiEndpoint?: string;
}
/**
* See https://netflix.github.io/conductor/apispec/#start-workflow-request
*/
export interface StartWorkflowOptions {
/**
* Name of the workflow
*/
name: string;
/**
* Version
*/
version?: number;
/**
* correlation Id
*/
correlationId?: string;
/**
* Priority
*/
priority?: number;
input?: object;
taskToDomain?: object;
}
export {};