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

# Tesla

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.7.3" },
{ name: "Tesla", version: "1.4.3" }
]}
/>

Het AppSignal voor Elixir-pakket instrumenteert HTTP-requests die worden uitgevoerd door [Tesla](https://github.com/elixir-tesla/tesla).

Tesla is een flexibele HTTP-clientbibliotheek voor Elixir. Het kan meerdere middlewares en adapters gebruiken om HTTP-requests te wijzigen en uit te voeren, en heeft ingebouwde ondersteuning voor request-telemetry.

Nadat u Tesla's Telemetry-middleware heeft geconfigureerd, herkent AppSignal requests die via Tesla worden uitgevoerd en toont deze als `request.tesla`-events op de Event Timeline van uw performance samples.

In de Event Timeline ziet u hoeveel tijd Tesla besteedt aan het maken van externe API-requests. Deze data kan u helpen bij de beslissing om de API-requests naar een background job te verplaatsen of caching te introduceren om de performance te verbeteren en onnodige API-requests te beperken.

In de Slow API Requests performance view kunt u geaggregeerde throughput en gemiddelde tijden zien voor verschillende soorten HTTP-requests. Volg de instructies in de sectie [Path Params-groepering](#path-params-grouping) om de informatie in deze view te verbeteren.

## Configuratie

Voeg de middleware `Tesla.Middleware.Telemetry` toe aan de middleware-chain van uw module of client, **vóór alle andere middlewares**:

<CodeGroup>
  ```elixir Elixir theme={null}
  defmodule MyAPIClient do
    use Tesla

    plug Tesla.Middleware.Telemetry
    # ... plug other middlewares here, **after** the Telemetry middleware
  end
  ```
</CodeGroup>

<CodeGroup>
  ```elixir Elixir theme={null}
  client = Tesla.client([
    Tesla.Middleware.Telemetry,
    # ... add other middlewares here, **after** the Telemetry middleware
  ])
  ```
</CodeGroup>

<Tip>
  Als u de Finch-adapter voor Tesla gebruikt, moet u [AppSignal's Finch-
  instrumentatie uitschakelen](/elixir/integrations/finch#automatic-instrumentation) door
  de configuratieoptie `instrument_finch` in te stellen op `false`.
</Tip>

## Verbeterde groepering

Standaard groepeert de AppSignal-instrumentatie voor Tesla requests op de domeinnaam waartegen ze worden uitgevoerd. Het pad van de request wordt niet weergegeven in AppSignal. Echter, door bepaalde Tesla-middlewares te gebruiken, is het mogelijk om meer informatie over de request toe te voegen.

In de volgende secties wordt het gedrag van elke middleware afzonderlijk beschreven, maar het is ook mogelijk ze samen te gebruiken.

### Base URL-groepering

Wanneer u de `BaseUrl`-middleware gebruikt, wordt de opgegeven base-URL, inclusief het pad, gebruikt voor groepering, wat u extra inzicht geeft in het doel van de HTTP-requests die door Tesla worden uitgevoerd:

<CodeGroup>
  ```elixir Elixir theme={null}
  defmodule MyAPIClient do
    use Tesla

    plug Tesla.Middleware.Telemetry
    # make sure Telemetry appears **before** any other middleware!
    plug Tesla.Middleware.BaseUrl, "https://api.example.com/v2/users"

    def user_comments(id) do
      get("/#{id}/comments")
    end
  end
  ```
</CodeGroup>

In het bovenstaande voorbeeld worden requests die door deze client worden uitgevoerd weergegeven in de Event Timeline van de sample en in de Slow API Requests performance view als `GET https://api.example.com/v2/users`, in plaats van alleen `GET https://api.example.com`, wat aanvullende informatie biedt over de requests die worden uitgevoerd.

### Path Params-groepering

Wanneer u de `PathParams`-middleware gebruikt, is de URL die aan Tesla wordt gegeven voor de request een template, waarbij path-parameters apart worden meegegeven:

<CodeGroup>
  ```elixir Elixir theme={null}
  defmodule MyAPIClient do
    use Tesla

    plug Tesla.Middleware.Telemetry
    # make sure Telemetry appears **before** any other middleware!
    plug Tesla.Middleware.PathParams

    def user_comments(id) do
      params = [user: id]
      get("https://api.example.com/v2/users/:user/comments", opts: [path_params: params])
    end
  end
  ```
</CodeGroup>

Wanneer `PathParams` wordt gebruikt, wordt de URL-template weergegeven in AppSignal. Requests verschijnen als `GET https://api.example.com/v2/users/:user/comments` in de Event Timeline van de sample en in de Slow API Requests performance view, wat u een gedetailleerd overzicht biedt van elk request-type dat uw client uitvoert.

## Tesla-instrumentatie uitschakelen

Om de Tesla-instrumentatie uit te schakelen, stelt u [de configuratieoptie `instrument_tesla`](/elixir/configuration/options#option-instrument_tesla) in op `false`.
