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

Le paquet AppSignal pour Elixir instrumente les requêtes HTTP effectuées par [Tesla](https://github.com/elixir-tesla/tesla).

Tesla est une bibliothèque cliente HTTP flexible pour Elixir. Elle peut utiliser plusieurs middlewares et adaptateurs pour modifier et effectuer des requêtes HTTP, et elle prend en charge nativement la télémétrie des requêtes.

Après avoir configuré le middleware Telemetry de Tesla, AppSignal reconnaîtra les requêtes exécutées via Tesla et les affichera comme des événements `request.tesla` sur l'Event Timeline de vos échantillons de performance.

Dans l'Event Timeline, vous verrez combien de temps Tesla passe à effectuer des requêtes API externes. Ces données peuvent vous aider à décider de déplacer les requêtes API vers un job en arrière-plan ou à introduire de la mise en cache pour aider à accélérer les performances et limiter les requêtes API inutiles.

Dans la vue de performance Slow API Requests, vous pourrez voir le débit agrégé et les temps moyens pour différents types de requêtes HTTP. Suivez les instructions de la section [Path Params Grouping](#path-params-grouping) afin d'améliorer les informations affichées dans cette vue.

## Configuration

Ajoutez le middleware `Tesla.Middleware.Telemetry` à la chaîne de middlewares de votre module ou client, **avant tout autre middleware** :

<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>
  Si vous utilisez l'adaptateur Finch pour Tesla, vous devriez [désactiver l'instrumentation
  Finch d'AppSignal](/elixir/integrations/finch#automatic-instrumentation) en
  définissant l'option de configuration `instrument_finch` sur `false`.
</Tip>

## Regroupement amélioré

Par défaut, l'instrumentation AppSignal pour Tesla regroupera les requêtes par le nom de domaine sur lequel elles sont effectuées. Le chemin de la requête ne sera pas affiché dans AppSignal. Cependant, en utilisant certains middlewares Tesla, il est possible d'ajouter plus d'informations sur la requête.

Les sections suivantes décrivent le comportement de chaque middleware séparément, mais il est également possible de les utiliser ensemble.

### Regroupement par URL de base

Lorsque vous utilisez le middleware `BaseUrl`, l'URL de base fournie, y compris son chemin, sera utilisée pour le regroupement, vous fournissant un aperçu supplémentaire de la cible des requêtes HTTP effectuées par Tesla :

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

Dans l'exemple ci-dessus, les requêtes effectuées par ce client seront affichées dans l'Event Timeline de l'échantillon et dans la vue de performance Slow API Requests sous la forme `GET https://api.example.com/v2/users`, au lieu de simplement `GET https://api.example.com`, fournissant des informations supplémentaires sur les requêtes effectuées.

### Regroupement par paramètres de chemin

Lorsque vous utilisez le middleware `PathParams`, l'URL donnée à Tesla pour la requête sera un template, avec des paramètres de chemin passés séparément :

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

Lorsque `PathParams` est utilisé, le template d'URL sera affiché dans AppSignal. Les requêtes apparaîtront comme `GET https://api.example.com/v2/users/:user/comments` dans l'Event Timeline de l'échantillon et dans la vue de performance Slow API Requests, vous fournissant une vue détaillée de chaque type de requête effectuée par votre client.

## Désactiver l'instrumentation Tesla

Pour désactiver l'instrumentation Tesla, définissez [l'option de configuration `instrument_tesla`](/elixir/configuration/options#option-instrument_tesla) sur `false`.
