Black Friday tra 20 giorni: i Suoi clienti potranno pagare? -25 % il 1° anno e configurazione offerta, fino al 30 novembreVedi l’offerta →

Integrazione

Cookbook, sicurezza UE e drift

Ricette for_each, smoke CI, verifica dei webhook, GDPR e regola UI o Terraform.

Ottenere la mia chiave APIContratto OpenAPI

Documento completo, senza autenticazione, da passare al Suo generatore di client.

Sicurezza, UE e GDPR

Misura dall’UE. Dati ospitati nell’Unione. Riduca al minimo i dati personali nei nomi degli scenari e nei payload personalizzati. Le esportazioni dell’organizzazione (membri) restano fuori dall’API con chiave, di proposito.

Rotazione: TTL breve sulle chiavi di CI, revoca immediata in caso di fuga. Log applicativi: non registri mai Authorization né il corpo firmato grezzo se contiene il segreto.

UI o Terraform, non entrambi

Il drift compare quando la console e lo stato Terraform divergono. Scelga una fonte di verità per ambiente. Usi l’import nativo del provider per adottare un parco già creato a mano, poi vieti le modifiche da console su quelle risorse.

# Adopter un scénario existant
terraform import pathly_scenario.home scn_…

Cookbook — ricette

Ricette pronte da incollare. Adatti nomi e URL (domini example.* solo nella documentazione).

Parco agenzia — for_each

locals {
  clients = {
    acme  = "https://www.example.com/"
    globex = "https://shop.example.com/"
  }
}

resource "pathly_scenario" "home" {
  for_each     = local.clients
  name         = "home-${each.key}"
  url          = each.value
  interval_sec = 300
  severity     = "critical"
}

GitHub Actions — run-scenario post-deploy

- name: Pathly smoke
  uses: pathlyhq/pathly-action@v1
  with:
    api_token: ${{ secrets.PATHLY_API_TOKEN }}
    operation: run-scenario
    scenario_id: ${{ vars.PATHLY_CHECKOUT_SCENARIO_ID }}
    timeout_sec: "120"

GitLab CI — component

include:
  - component: gitlab.com/pathly1/provider/gitlab-ci/[email protected]
    inputs:
      api_token: $PATHLY_API_TOKEN

Node SDK — Ping, Chain, lister

import { PathlyClient } from "@pathly/sdk";
const client = new PathlyClient({ token: process.env.PATHLY_API_TOKEN });
const s = await client.createScenario({
  name: "Checkout",
  url: "https://www.example.com/cart",
  intervalSec: 300,
  expectText: "Your cart",
});
const chain = await client.createChain({
  name: "Login then /me",
  intervalSec: 300,
  hops: [
    { method: "POST", url: "https://api.example.com/login", assertStatus: 200 },
    { method: "GET", url: "https://api.example.com/me", assertStatus: 200 },
  ],
});
for await (const row of client.paginate((cursor) => client.listScenarios({ cursor }))) {
  console.log(row.id, row.name);
}

Python SDK

from pathly import Client, ScenarioInput
client = Client()
s = client.create_scenario(ScenarioInput(
    name="Checkout",
    url="https://www.example.com/cart",
    intervalSec=300,
    expectText="Your cart",
))
chain = client.create_scenario(ScenarioInput(
    name="Login then /me",
    intervalSec=300,
    httpChain=[
        {"method": "POST", "url": "https://api.example.com/login", "assertStatus": 200},
        {"method": "GET", "url": "https://api.example.com/me", "assertStatus": 200},
    ],
))
print(s.id, chain.id)

jq — filtrare gli scenari critici

curl -sS https://api.pathlyhq.com/v1/scenarios \
  -H "Authorization: Bearer $PATHLY_API_TOKEN" \
  | jq '.items[] | select(.severity=="critical") | {id,name,url}'