Orquestração de Workflows
Fundamentos
🎯 Definição de Workflows
#!/bin/bash
# Estrutura básica de workflow
declare -A workflow
workflow=(
["start"]="validate_input"
["validate_input"]="process_data"
["process_data"]="generate_report"
["generate_report"]="notify_completion"
["notify_completion"]="end"
)
🔄 Execução de Steps
#!/bin/bash
# Executor de workflow
execute_workflow() {
local current="start"
local data=$1
while [ "$current" != "end" ]; do
echo "Executando: $current"
# Executa step atual
$current "$data"
# Move para próximo step
current=${workflow[$current]}
done
}
Implementação
📋 Gerenciamento de Estado
#!/bin/bash
# Controle de estado do workflow
save_state() {
local workflow_id=$1
local step=$2
local data=$3
echo "{\"step\":\"$step\",\"data\":$data}" > \
"state_${workflow_id}.json"
}
restore_state() {
local workflow_id=$1
if [ -f "state_${workflow_id}.json" ]; then
cat "state_${workflow_id}.json"
fi
}
⏱️ Agendamento
#!/bin/bash
# Agendador de workflows
schedule_workflow() {
local workflow_id=$1
local cron_expr=$2
local command=$3
# Adiciona ao crontab
(crontab -l 2>/dev/null; \
echo "$cron_expr $command # workflow_$workflow_id") | \
crontab -
}
Monitoramento
📊 Métricas e Logs
#!/bin/bash
# Sistema de logging
log_workflow() {
local workflow_id=$1
local step=$2
local status=$3
local message=$4
echo "$(date +%Y-%m-%d\ %H:%M:%S),${workflow_id},${step},${status},\"${message}\"" >> \
workflow_logs.csv
}
# Coleta de métricas
collect_metrics() {
local workflow_id=$1
# Tempo de execução
local start_time=$(date +%s)
# Executa workflow
execute_workflow "$workflow_id"
# Calcula duração
local end_time=$(date +%s)
local duration=$((end_time - start_time))
# Registra métricas
echo "duration_seconds{workflow=\"$workflow_id\"} $duration" >> \
metrics.txt
}
🚨 Alertas
#!/bin/bash
# Sistema de alertas
alert() {
local workflow_id=$1
local severity=$2
local message=$3
case $severity in
"critical")
send_sms "$message"
send_email "$message"
;;
"warning")
send_email "$message"
;;
"info")
log_workflow "$workflow_id" "ALERT" "INFO" "$message"
;;
esac
}
Exercícios Práticos
🎯 Missão 1: Pipeline ETL
#!/bin/bash
# Objetivos:
# 1. Criar workflow ETL
# 2. Implementar checkpoints
# 3. Adicionar recuperação
# 4. Monitorar execução
# Exemplo de implementação
etl_workflow() {
local workflow_id="etl_$(date +%s)"
# Define steps
workflow=(
["start"]="extract_data"
["extract_data"]="transform_data"
["transform_data"]="load_data"
["load_data"]="validate_data"
["validate_data"]="end"
)
# Executa workflow
execute_workflow "$workflow_id"
}
WORKFLOW MASTER
[🎯🎯🎯🎯🎯] 100%
STATUS: ORQUESTRADOR SUPREMO
PRÓXIMO: DISTRIBUTED WORKFLOWS
14 abril 2025