Black Friday tra 20 giorni: i Suoi clienti potranno pagare? -25 % il 1° anno e configurazione offerta, fino al 30 novembreVedi l’offerta →
Integrazione
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.
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.
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_…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_TOKENNode 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}'