105 lines
3.2 KiB
Plaintext
105 lines
3.2 KiB
Plaintext
digraph job_flow {
|
|
rankdir=TB
|
|
node [shape=box, style=rounded, fontname="Helvetica"]
|
|
edge [fontname="Helvetica", fontsize=10]
|
|
|
|
labelloc="t"
|
|
label="MPR - Job Flow"
|
|
fontsize=16
|
|
fontname="Helvetica-Bold"
|
|
|
|
graph [splines=ortho, nodesep=0.6, ranksep=0.6]
|
|
|
|
// API entry points
|
|
subgraph cluster_api {
|
|
label="API Entry Points"
|
|
style=dashed
|
|
color=gray
|
|
|
|
rest_create [label="POST /api/jobs/", shape=ellipse]
|
|
gql_create [label="mutation createJob", shape=ellipse]
|
|
rest_cancel [label="POST /api/jobs/{id}/cancel", shape=ellipse]
|
|
rest_callback [label="POST /api/jobs/{id}/callback", shape=ellipse]
|
|
}
|
|
|
|
// Job states
|
|
subgraph cluster_states {
|
|
label="Job States"
|
|
style=filled
|
|
fillcolor="#f8f8f8"
|
|
|
|
pending [label="PENDING", fillcolor="#ffc107", style="filled,rounded"]
|
|
processing [label="PROCESSING", fillcolor="#17a2b8", style="filled,rounded", fontcolor=white]
|
|
completed [label="COMPLETED", fillcolor="#28a745", style="filled,rounded", fontcolor=white]
|
|
failed [label="FAILED", fillcolor="#dc3545", style="filled,rounded", fontcolor=white]
|
|
cancelled [label="CANCELLED", fillcolor="#6c757d", style="filled,rounded", fontcolor=white]
|
|
}
|
|
|
|
// State transitions
|
|
pending -> processing [xlabel="worker picks up"]
|
|
processing -> completed [xlabel="success"]
|
|
processing -> failed [xlabel="error"]
|
|
pending -> cancelled [xlabel="user cancels"]
|
|
processing -> cancelled [xlabel="user cancels"]
|
|
failed -> pending [xlabel="retry"]
|
|
|
|
rest_create -> pending
|
|
gql_create -> pending
|
|
rest_cancel -> cancelled [style=dashed]
|
|
|
|
// Executor dispatch
|
|
subgraph cluster_dispatch {
|
|
label="Executor Dispatch"
|
|
style=filled
|
|
fillcolor="#fff8e8"
|
|
|
|
dispatch [label="MPR_EXECUTOR", shape=diamond]
|
|
}
|
|
|
|
pending -> dispatch
|
|
|
|
// Local path
|
|
subgraph cluster_local {
|
|
label="Local Mode (Celery)"
|
|
style=filled
|
|
fillcolor="#e8f4e8"
|
|
|
|
celery_task [label="Celery Task\n(transcode queue)"]
|
|
s3_download [label="S3 Download\n(MinIO)"]
|
|
ffmpeg_local [label="FFmpeg\ntranscode/trim"]
|
|
s3_upload [label="S3 Upload\n(MinIO)"]
|
|
db_update [label="DB Update\n(update_job_progress)"]
|
|
}
|
|
|
|
dispatch -> celery_task [xlabel="local"]
|
|
celery_task -> s3_download
|
|
s3_download -> ffmpeg_local
|
|
ffmpeg_local -> s3_upload
|
|
s3_upload -> db_update
|
|
db_update -> completed [style=dotted]
|
|
|
|
// Lambda path
|
|
subgraph cluster_lambda {
|
|
label="Lambda Mode (AWS)"
|
|
style=filled
|
|
fillcolor="#fde8d0"
|
|
|
|
sfn_start [label="Step Functions\nstart_execution"]
|
|
lambda_fn [label="Lambda\nFFmpeg container"]
|
|
s3_dl_aws [label="S3 Download\n(AWS)"]
|
|
ffmpeg_aws [label="FFmpeg\ntranscode/trim"]
|
|
s3_ul_aws [label="S3 Upload\n(AWS)"]
|
|
callback [label="HTTP Callback\nPOST /jobs/{id}/callback"]
|
|
}
|
|
|
|
dispatch -> sfn_start [xlabel="lambda"]
|
|
sfn_start -> lambda_fn
|
|
lambda_fn -> s3_dl_aws
|
|
s3_dl_aws -> ffmpeg_aws
|
|
ffmpeg_aws -> s3_ul_aws
|
|
s3_ul_aws -> callback
|
|
callback -> completed [style=dotted]
|
|
|
|
rest_callback -> completed [style=dashed, xlabel="Lambda reports"]
|
|
}
|