> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Oban

export const VersionRequirements = ({versions = []}) => {
  if (!Array.isArray(versions) || versions.length === 0) {
    return null;
  }
  const boundaries = {
    upper: " or lower",
    exact: "",
    lower: " or higher"
  };
  const containerStyle = {
    marginTop: "0.5rem",
    marginBottom: "1.5rem"
  };
  const lineStyle = {
    display: "block",
    margin: "0 0 0.35rem 0",
    fontSize: "0.875rem",
    lineHeight: "1.4"
  };
  const pillBaseStyle = {
    display: "inline-block",
    padding: "0.1em 0.4em",
    borderRadius: "0.25rem",
    border: "1px solid",
    fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
    fontSize: "0.85em",
    fontWeight: 500
  };
  const pillColors = {
    "AppSignal for Elixir": {
      background: "#f3e8ff",
      borderColor: "#e9d5ff",
      color: "#9333ea"
    },
    "AppSignal for Front-end": {
      background: "#fef9c3",
      borderColor: "#fde68a",
      color: "#ca8a04"
    },
    "AppSignal for Go": {
      background: "#ccfbf1",
      borderColor: "#99f6e4",
      color: "#0d9488"
    },
    "AppSignal for JavaScript": {
      background: "#fef9c3",
      borderColor: "#fde68a",
      color: "#ca8a04"
    },
    "AppSignal for Node.js": {
      background: "#dcfce7",
      borderColor: "#bbf7d0",
      color: "#16a34a"
    },
    "AppSignal for Python": {
      background: "#dbeafe",
      borderColor: "#bfdbfe",
      color: "#2563eb"
    },
    "AppSignal for Ruby": {
      background: "#fee2e2",
      borderColor: "#fecaca",
      color: "#dc2626"
    },
    "AppSignal for Rust": {
      background: "#ffedd5",
      borderColor: "#fed7aa",
      color: "#ea580c"
    }
  };
  const defaultPillColor = {
    background: "#f4f4f5",
    borderColor: "#e4e4e7",
    color: "#52525b"
  };
  const getPillStyle = name => ({
    ...pillBaseStyle,
    ...pillColors[name] || defaultPillColor
  });
  const getBoundText = bound => {
    return boundaries[bound] || boundaries.lower;
  };
  return <div style={containerStyle}>
      {versions.map((v, i) => <p key={`${v.name}-${v.version}-${v.bound || "lower"}-${i}`} style={lineStyle}>
          This feature requires{" "}
          <code style={getPillStyle(v.name)}>{v.name}</code> version {v.version}
          {getBoundText(v.bound)}.
        </p>)}
    </div>;
};

<VersionRequirements
  versions={[
{ name: "AppSignal for Elixir", version: "2.5.0" },
{ name: "Oban", version: "2.0" }
]}
/>

O pacote AppSignal for Elixir instrumenta jobs executados por workers do [Oban](https://oban.pro) e coleta métricas sobre o desempenho dos seus jobs.

Oban é um sistema de fila e processamento de jobs para Elixir, baseado em PostgreSQL e Ecto. Você pode usar o Oban para agendar jobs para serem executados em segundo plano.

## Instrumentação automática

O suporte ao Oban é instrumentado automaticamente, sem necessidade de configuração.

Para desabilitar a instrumentação do Oban, defina [a opção de configuração `instrument_oban`](/elixir/configuration/options#option-instrument_oban) como `false`.

<Note>
  🔎 A opção de configuração `instrument_oban` foi adicionada na versão `2.5.1` da
  integração AppSignal for Elixir.
</Note>

## Relatório de erros

Por padrão, a instrumentação do Oban criará uma amostra de erro sempre que um dos seus workers falhar ao processar um job, seja retornando uma tupla `{:error, _}` ou lançando uma exceção.

Se você quiser enviar erros para o AppSignal apenas quando a falha causar o descarte do job, ou seja, quando ele atingir o número máximo de tentativas, defina [a opção de configuração `report_oban_errors`](/elixir/configuration/options#option-report_oban_errors) como `"discard"`. Defina-a como `"none"` para nunca enviar erros de jobs do Oban para o AppSignal.

<Tip>
  A opção de configuração `report_oban_errors` foi adicionada na versão `2.5.1` da
  integração AppSignal for Elixir.

  Se estiver usando o Oban versão `2.3.1` ou inferior, a informação sobre o estado
  do job não está disponível, e a opção `"discard"` se comportará como
  `"all"`.
</Tip>

## Amostras de desempenho e erro

O AppSignal criará amostras de desempenho a partir dos jobs executados pelos seus workers do Oban:

<img src="https://mintcdn.com/appsignal-715f5a51/nF8c1Rwq1cS7b5hg/assets/images/screenshots/elixir/integrations/oban/performance-sample.png?fit=max&auto=format&n=nF8c1Rwq1cS7b5hg&q=85&s=621798315f06965a7add76e3394e2951" alt="Amostra de desempenho de uma execução de job do Oban" width="1214" height="1322" data-path="assets/images/screenshots/elixir/integrations/oban/performance-sample.png" />

Ele também notificará erros que causam falhas nos seus workers ao processar um job:

<img src="https://mintcdn.com/appsignal-715f5a51/nF8c1Rwq1cS7b5hg/assets/images/screenshots/elixir/integrations/oban/error-sample.png?fit=max&auto=format&n=nF8c1Rwq1cS7b5hg&q=85&s=5f3981d36741d877d13392bb7ece39ed" alt="Amostra de erro de uma execução de job do Oban" width="1216" height="1344" data-path="assets/images/screenshots/elixir/integrations/oban/error-sample.png" />

Dentro das amostras de desempenho e de erro, as tags conterão informações sobre o job:

* ID do job, queue, worker e priority
* Número de tentativas anteriores
* Estado e resultado do job após a execução

Quaisquer tags ou valores de metadados adicionados ao job também estarão presentes como tags na amostra, permitindo que você filtre as amostras por uma tag específica.

Você também poderá ver quando um job do Oban é inserido na timeline de eventos das amostras de desempenho da sua aplicação:

<img src="https://mintcdn.com/appsignal-715f5a51/nF8c1Rwq1cS7b5hg/assets/images/screenshots/elixir/integrations/oban/event-timeline.png?fit=max&auto=format&n=nF8c1Rwq1cS7b5hg&q=85&s=4ba7ea26be30b29287edeef6b0e53545" alt="Timeline de eventos mostrando uma inserção de job do Oban" width="1164" height="478" data-path="assets/images/screenshots/elixir/integrations/oban/event-timeline.png" />

<Note>
  🔎 Alguns recursos só estão disponíveis em certas versões do Oban:

  * **2.1.0+:** Tags
  * **2.3.1+:** Valores de metadata e priority do job
  * **2.4.0+:** Estado do job após a execução
  * **2.5.0+:** Resultado do job após a execução
  * **2.11.0+:** Evento de inserção de job

  Para usar todos os recursos descritos acima, atualize para a versão mais recente do Oban.
</Note>

## Métricas

Além das amostras de desempenho e erro, o AppSignal for Elixir coletará métricas sobre o desempenho dos seus jobs do Oban:

* `oban_job_duration`: a duração dos jobs processados, tagueada pelo worker, queue e status do job.

* `oban_job_queue_time`: o tempo gasto pelos jobs aguardando na queue, tagueado por queue.

* `oban_job_count`: a quantidade de jobs processados, tagueada pelo worker, queue e status do job.

Usando essas métricas, o AppSignal criará automaticamente o magic dashboard do Oban, que fornece insights-chave sobre o desempenho do seu sistema Oban:

<img src="https://mintcdn.com/appsignal-715f5a51/nF8c1Rwq1cS7b5hg/assets/images/screenshots/elixir/integrations/oban/magic-dashboard.png?fit=max&auto=format&n=nF8c1Rwq1cS7b5hg&q=85&s=9772c0b582e542ca48ef609f26b96037" alt="Magic dashboard mostrando métricas-chave do Oban" width="1830" height="1988" data-path="assets/images/screenshots/elixir/integrations/oban/magic-dashboard.png" />
