lliure / reattempts
Esse pacote tem como objetivo gerar querys/consultas automaticamente para o teste de retentavivas ao decorrer de um periodo estipulado.
Requires
- php: >=7.2 || ^8.0
This package is auto-updated.
Last update: 2025-05-07 17:41:52 UTC
README
Classe utilitária para gerenciar lógicas de retry (tentativas de reprocessamento) com definição de tentativas sequenciais e intervalos programados.
Começando
// 1) Instanciação e configuração
$reattempt = new Reattempts(
attemptsDefault: 5,
columnAttempts: 'attempts',
columnDateNextAttempt: 'nextTry'
);
// 2) Definição de intervalos para tentativas extras
$reattempt
->addInterval('PT5H')
->addInterval('PT12H')
->addInterval('P1D', 2);
// 3) Geração da cláusula WHERE e busca dos registros elegíveis
$where = $reattempt->generateWhereQuery();
$rows = \dibi::getConnection()
->select('*')
->from('sua_tabela')
->where($where)
->fetchAll();
// 4) Processamento e atualização de cada registro
foreach ($rows as $row) {
$result = $reattempt->update($row);
if (is_int($result)) {
// Objeto-model: retorno é número de linhas afetadas
echo "Registro ID {$row->id} atualizado ({$result} linhas).\n";
} else {
// Array: retorno é array de dados para update manual
\dibi::getConnection()
->update('sua_tabela', $result)
->where('id = %i', $row['id'])
->execute();
}
}
Este exemplo demonstra todo o ciclo de retry: do cálculo da cláusula WHERE até a aplicação das atualizações, seja via o método interno update()
ou manualmente com Dibi.
Nota: Para extrair apenas a cláusula WHERE, use
generateWhereQuery()
. Para obter os dados de atualização sem persistir, vejacomputeNextAttemptData()
. Para aplicar atualização imediata, useupdate()
.
Resumo da classe
class Reattempts
{
public function __construct(
int $attemptsDefault = 4,
string $columnAttempts = 'attempts',
string $columnDateNextAttempt = 'nextAttempt'
);
public function setAttemptsDefault(int $attemptsDefault): self;
public function addInterval(string $isoInterval, int $repeat = 1): self;
public function nextInterval(string $isoInterval, int $repeat = 1): self;
public function generateWhereQuery(): string;
public function computeNextAttemptData(array $row): array;
public function update(mixed $row, string $updateMethod = 'update'): int|array;
public function __toString(): string;
}
Métodos
__construct(int $attemptsDefault = 4, string $columnAttempts = 'attempts', string $columnDateNextAttempt = 'nextAttempt')
Define o número de tentativas sequenciais e os nomes das colunas de controle.
setAttemptsDefault(int $attemptsDefault): self
Atualiza o máximo de tentativas sequenciais e reinicia o contador interno para começar a partir desse valor.
addInterval(string $isoInterval, int $repeat = 1): self
Adiciona um ou mais DateInterval
extras (ISO‑8601) ao fluxo de retry para tentativas além das sequenciais. Exemplo: 'PT5H'
, 'P1D'
.
nextInterval(string $isoInterval, int $repeat = 1): self
Sinônimo de addInterval()
, permite encadear múltiplos intervalos de forma fluida.
generateWhereQuery(): string
Gera a cláusula WHERE
para filtrar registros prontos para retry:
`attempts` < (attemptsDefault + soma de tentativas extras)
`nextTry` <= NOW()
computeNextAttemptData(array $row): array
Calcula, sem persistir, os valores para atualizar o registro. Retorna um array:
[
'attempts' => int, // nova contagem de tentativas
'nextTry' => string, // data/hora ISO da próxima tentativa
]
update(mixed $row, string $updateMethod = 'update'): int|array
Versão flexível para aplicar a atualização imediatamente:
- Se
$row
for um objeto com o método definido em$updateMethod
, atribui as colunas e chama$row->{$updateMethod}()
, retornando as linhas afetadas. - Caso contrário, devolve um array com os campos e valores a serem usados em um
UPDATE
manual via Dibi ou outro ORM.