> ## 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" }
]}
/>

Das AppSignal-für-Elixir-Paket instrumentiert HTTP-Anfragen, die von [Tesla](https://github.com/elixir-tesla/tesla) ausgeführt werden.

Tesla ist eine flexible HTTP-Client-Bibliothek für Elixir. Sie kann mehrere Middlewares und Adapter verwenden, um HTTP-Anfragen zu ändern und auszuführen, und verfügt über integrierte Unterstützung für Request-Telemetry.

Nach der Konfiguration der Telemetry-Middleware von Tesla erkennt AppSignal die über Tesla ausgeführten Anfragen und zeigt sie als `request.tesla`-Events in der Event-Timeline Ihrer Performance-Samples.

In der Event-Timeline sehen Sie, wie viel Zeit Tesla mit externen API-Anfragen verbringt. Diese Daten können Sie dazu veranlassen, die API-Anfragen in einen Hintergrund-Job zu verschieben oder Caching einzuführen, um die Performance zu verbessern und unnötige API-Anfragen zu begrenzen.

In der Performance-Ansicht „Slow API Requests“ können Sie den aggregierten Durchsatz und die durchschnittlichen Zeiten für verschiedene Arten von HTTP-Anfragen sehen. Folgen Sie den Anweisungen im Abschnitt [Path Params Grouping](#path-params-grouping), um die in dieser Ansicht angezeigten Informationen zu verbessern.

## Konfiguration

Fügen Sie die Middleware `Tesla.Middleware.Telemetry` zur Middleware-Kette Ihres Moduls oder Clients hinzu, **vor allen anderen 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>
  Wenn Sie den Finch-Adapter für Tesla verwenden, sollten Sie [AppSignals Finch-
  Instrumentierung deaktivieren](/elixir/integrations/finch#automatic-instrumentation), indem Sie
  die Konfigurationsoption `instrument_finch` auf `false` setzen.
</Tip>

## Verbesserte Gruppierung

Standardmäßig gruppiert die AppSignal-Instrumentierung für Tesla Anfragen nach dem Domainnamen, an den sie ausgeführt werden. Der Pfad der Anfrage wird in AppSignal nicht angezeigt. Mithilfe bestimmter Tesla-Middlewares können jedoch weitere Informationen über die Anfrage hinzugefügt werden.

Die folgenden Abschnitte beschreiben das Verhalten jeder Middleware separat, aber es ist auch möglich, sie zusammen zu verwenden.

### Gruppierung nach Basis-URL

Wenn die `BaseUrl`-Middleware verwendet wird, wird die bereitgestellte Basis-URL einschließlich ihres Pfads zur Gruppierung verwendet, was Ihnen zusätzliche Einblicke in das Ziel der von Tesla ausgeführten HTTP-Anfragen ermöglicht:

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

Im obigen Beispiel werden die von diesem Client ausgeführten Anfragen in der Event-Timeline des Samples und in der Performance-Ansicht „Slow API Requests“ als `GET https://api.example.com/v2/users` angezeigt, anstatt nur als `GET https://api.example.com`, was zusätzliche Informationen über die ausgeführten Anfragen liefert.

### Gruppierung nach Path Params

Wenn die `PathParams`-Middleware verwendet wird, ist die an Tesla für die Anfrage übergebene URL ein Template, wobei Pfadparameter separat übergeben werden:

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

Wenn `PathParams` verwendet wird, wird das URL-Template in AppSignal angezeigt. Anfragen erscheinen als `GET https://api.example.com/v2/users/:user/comments` in der Event-Timeline des Samples und in der Performance-Ansicht „Slow API Requests“, was Ihnen eine detaillierte Ansicht jedes Anfragetyps bietet, den Ihr Client ausführt.

## Tesla-Instrumentierung deaktivieren

Um die Tesla-Instrumentierung zu deaktivieren, setzen Sie [die Konfigurationsoption `instrument_tesla`](/elixir/configuration/options#option-instrument_tesla) auf `false`.
