> ## 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.

# Mix-taken

AppSignal voor Elixir instrumenteert Mix-taken niet automatisch, maar u kunt handmatige instrumentatie en foutafhandeling opzetten met behulp van [aangepaste instrumentatie](/elixir/instrumentation/).

## AppSignal starten en stoppen

Aangezien Mix-taken niet automatisch applicaties starten, moet u expliciet de `:appsignal`-applicatie in uw taak starten:

<CodeGroup>
  ```elixir Elixir theme={null}
  Application.ensure_all_started(:appsignal)
  ```
</CodeGroup>

Om er zeker van te zijn dat AppSignal voldoende tijd heeft om data naar zijn agent te flushen, roept u `Appsignal.Nif.stop/0` aan aan het einde van uw taak. Dit blokkeert totdat de extensie voldoende tijd heeft gehad om de verzonden payloads naar de agent te flushen voordat deze stopt.

## Fouten opvangen

Om fouten in uw taak in te pakken zodat deze naar AppSignal worden gestuurd, voegt u een `rescue`-blok toe om fouten uit uw code op te vangen. Geef de opgevangen uitzondering door aan `Appsignal.send_error/3` om deze aan AppSignal te rapporteren. Voeg een `after`-clausule toe aan uw `rescue`-blok om `Appsignal.Nif.stop/0` aan te roepen.

<CodeGroup>
  ```elixir Elixir theme={null}
  defmodule Mix.Tasks.Rescue do
    use Mix.Task

    def run(_) do
      {:ok, _} = Application.ensure_all_started(:appsignal)

      raise "rescue!"
    catch
      kind, reason ->
        stack = __STACKTRACE__
        Appsignal.send_error(kind, reason, stack)
        reraise(reason, stack)
    after
      Appsignal.Nif.stop
      :timer.sleep(35_000) # For one-off containers
    end
  end
  ```
</CodeGroup>

**Opmerking:** Aan het einde van de Mix-taak is een sleep van 35 seconden toegevoegd. Dit wordt aanbevolen voor taken die op one-off containers draaien. Wanneer de taak is voltooid, stopt het proces. De functieaanroep `Appsignal.Nif.stop/0` flusht alle transactiedata die momenteel in de AppSignal-extensie zit naar onze agent. Daar wordt het [met een interval van 30 seconden verzonden](/appsignal/how-appsignal-operates#agent). De one-off container kan vóór die tijd al zijn afgesloten. Om ervoor te zorgen dat de data toch wordt verzonden, moet er 35 seconden gewacht worden.

## Performance meten

Om performance in uw taak te meten, start en stop u een transactie handmatig en voegt u events toe met behulp van de instrumentatiehulpen, zoals beschreven in de [aangepaste helper-instrumentatie](/elixir/instrumentation/instrumentation#helper-transactions).

<CodeGroup>
  ```elixir Elixir theme={null}
  defmodule Mix.Tasks.Instrument do
    use Mix.Task

    def run(_) do
      {:ok, _} = Application.ensure_all_started(:appsignal)

      Appsignal.instrument(fn span ->
        span
        |> Appsignal.Span.set_namespace("background_job")
        |> Appsignal.Span.set_name("Mix.Tasks.Instrument")

        Appsignal.instrument(fn span ->
          Appsignal.Span.set_name("task.instrumented")
          :timer.sleep(1_000)
        end)
      end)

      Appsignal.Nif.stop()
      :timer.sleep(35_000) # For one-off containers
    end
  end
  ```
</CodeGroup>
