Skip to main content

Módulo Sleep

O módulo Sleep fornece funcionalidade para pausar a execução por um período específico, útil para delays, throttling e sincronização em fluxos de trabalho.

🚀 Funcionalidades

Características Principais

  • Múltiplas unidades de tempo: milliseconds, seconds, minutes, hours
  • Flexibilidade: Aceita qualquer unidade de tempo
  • Performance: Não bloqueia outros fluxos
  • Observabilidade: Logging integrado
  • Simplicidade: Interface intuitiva

📋 Configuração

Configuração Básica

steps:
- name: "wait_5_seconds"
use: "sleep_module"
input:
seconds: 5

🔧 Parâmetros

Entrada (input)

  • milliseconds (integer, opcional): Tempo em milissegundos (padrão: 0)
  • seconds (integer, opcional): Tempo em segundos (padrão: 0)
  • minutes (integer, opcional): Tempo em minutos (padrão: 0)
  • hours (integer, opcional): Tempo em horas (padrão: 0)

Saída (output)

  • Retorna null após o período de sleep

💻 Exemplos de Uso

Sleep em Diferentes Unidades

steps:
- name: "quick_pause"
use: "sleep_module"
input:
milliseconds: 500

- name: "short_delay"
use: "sleep_module"
input:
seconds: 10

- name: "medium_wait"
use: "sleep_module"
input:
minutes: 2

- name: "long_delay"
use: "sleep_module"
input:
hours: 1

Throttling de API

steps:
- name: "api_call_1"
use: "http_client"
input:
method: "GET"
url: "https://api.example.com/data/1"

- name: "throttle_delay"
use: "sleep_module"
input:
milliseconds: 100

- name: "api_call_2"
use: "http_client"
input:
method: "GET"
url: "https://api.example.com/data/2"

Retry com Backoff

steps:
- name: "attempt_operation"
use: "some_module"
input:
operation: "risky_operation"

- name: "check_success"
condition:
left: "{{ $attempt_operation.success }}"
operator: "equals"
right: false
then:
# Esperar antes de retry
use: "sleep_module"
input:
seconds: 5
else:
return: "{{ $attempt_operation.result }}"

🌐 Exemplo Completo

name: "batch-processor"
version: "1.0.0"
description: "Processamento em lote com delays"

modules:
- name: "sleep_module"
module: "sleep"
version: "0.0.1"

- name: "http_client"
module: "http_request"

- name: "logger"
module: "log"

steps:
- name: "start_processing"
use: "logger"
input:
message: "Iniciando processamento em lote"

- name: "process_batch_1"
use: "http_client"
input:
method: "POST"
url: "https://api.example.com/process"
body: '{"batch": 1, "items": [1, 2, 3]}'

- name: "log_batch_1"
use: "logger"
input:
message: "Lote 1 processado, aguardando..."

- name: "wait_between_batches"
use: "sleep_module"
input:
seconds: 30

- name: "process_batch_2"
use: "http_client"
input:
method: "POST"
url: "https://api.example.com/process"
body: '{"batch": 2, "items": [4, 5, 6]}'

- name: "log_batch_2"
use: "logger"
input:
message: "Lote 2 processado, aguardando..."

- name: "final_wait"
use: "sleep_module"
input:
minutes: 5

- name: "finalize_processing"
use: "http_client"
input:
method: "POST"
url: "https://api.example.com/finalize"
body: '{"status": "completed"}'

- name: "completion_log"
use: "logger"
input:
message: "Processamento completo!"

Rate Limiting Example

name: "api-rate-limiter"
version: "1.0.0"

modules:
- name: "sleep_module"
module: "sleep"

- name: "api_client"
module: "http_request"

steps:
- name: "api_requests"
loop:
items: ["item1", "item2", "item3", "item4", "item5"]
steps:
- name: "make_request"
use: "api_client"
input:
method: "GET"
url: "https://api.example.com/data/{{ $loop.item }}"

- name: "check_rate_limit"
condition:
left: "{{ $make_request.response.status_code }}"
operator: "equals"
right: 429
then:
# Rate limit hit, wait longer
use: "sleep_module"
input:
seconds: 60
else:
# Normal delay between requests
use: "sleep_module"
input:
milliseconds: 200

📊 Casos de Uso Comuns

1. Debouncing

steps:
- name: "user_input"
# Captura entrada do usuário

- name: "debounce_delay"
use: "sleep_module"
input:
milliseconds: 300

- name: "process_input"
# Processa apenas se não houver nova entrada

2. Scheduling

steps:
- name: "schedule_check"
script: |
let now = new Date();
let targetTime = new Date(now.getTime() + 3600000); // 1 hora
targetTime

- name: "wait_until_scheduled"
use: "sleep_module"
input:
hours: 1

- name: "execute_scheduled_task"
# Executa tarefa agendada

3. Circuit Breaker

steps:
- name: "service_call"
use: "external_service"

- name: "handle_failure"
condition:
left: "{{ $service_call.success }}"
operator: "equals"
right: false
then:
# Circuit breaker - wait before next attempt
use: "sleep_module"
input:
minutes: 5

🔧 Configuração Avançada

Combinação de Unidades

# Note: Apenas a primeira unidade encontrada é usada
steps:
- name: "complex_sleep"
use: "sleep_module"
input:
# Apenas seconds será usado (primeiro encontrado)
seconds: 30
minutes: 1 # Ignorado
hours: 1 # Ignorado

Sleep Dinâmico

steps:
- name: "calculate_delay"
script: |
let delay = Math.min(Math.max($attempt_count * 1000, 100), 10000);
delay

- name: "dynamic_sleep"
use: "sleep_module"
input:
milliseconds: "{{ $calculate_delay }}"

🏷️ Tags

  • sleep
  • wait
  • delay
  • throttling
  • timing

Versão: 0.0.1
Autor: Philippe Assis <codephilippe@gmail.com>
Licença: MIT
Repositório: https://github.com/phlowdotdev/phlow