Clients

Os clients fazem o papel de implementar a comunicação mais lowlevel com as APIs finals. Por exemplo a comunicação com o Marathon seria feita toda por um client específico.

Esse client é o mapeamento exato das entradas e saídas dess API com a qual ele se comunica.

Todos os clients devem enviar e retornar modelos dos recursos que a API em questão expõe. Um exemplo é o client para o chronos:

class asgard.clients.chronos.ChronosClient(url: str, user: Optional[str] = None, password: Optional[str] = None)[código fonte]
create_job(job: asgard.clients.chronos.models.job.ChronosJob) → asgard.clients.chronos.models.job.ChronosJob[código fonte]

O Chronos, pelo menos até a versão v3.0.2, tem um problema com jobs que usam timezone diferente de UTC. Quando colocamos, por exemplo, tz=America/Sao_Paulo o jobs fica programado para a hora certa, mas quando o momento chega o job fica com status OVERDUE mas não roda, nem aparece nos logs a tentativa de rodar o jobs.

delete_job(job: asgard.clients.chronos.models.job.ChronosJob) → asgard.clients.chronos.models.job.ChronosJob[código fonte]
get_job_by_id(job_id: str) → asgard.clients.chronos.models.job.ChronosJob[código fonte]

Retorna um Job do Chronos, dado seu id (nome). Raise asgard.http.exceptions.HTTPNotFound() se o job não existir

search(name: str) → List[asgard.clients.chronos.models.job.ChronosJob][código fonte]

Procura por todos os jobs que contenham o termo name em seu nome.

Como exemplo o método get_job_by_id() retorna um modelo que representa um Job no Chronos, exatamente como a API original do Chronos retorna. Esse modelo está aqui:

class asgard.clients.chronos.models.job.ChronosJob[código fonte]

Mapeando todas as entradas e saídas das APIs acabamos tendo validação de schema quando nos comunicamos com essas APIs. Essa é a ideia de um client, apenas ser um wrapper para uma API com validação de schema das entradas e saídas.

Os clients não possuem uma interface abstrata fixa, podemos escolher quais são as ações disponíveis. Um Backend pode usar múltiplas ações de um client para exeutar uma de suas próprias ações.