Passer au contenu principal
L’API GraphQL d’AppSignal prend en charge les mutations en plus des requêtes. Là où une requête lit des données, une mutation les écrit : vous pouvez créer un marqueur personnalisé, fermer un incident, ajouter un moniteur de disponibilité, et plus encore. Les mutations utilisent le même point de terminaison et le même jeton d’API personnel que les requêtes. Consultez la page de l’API GraphQL pour plus de détails sur le point de terminaison et l’authentification. La plupart des mutations sont liées à une app et prennent un argument appId qui limite la modification à une seule app. Vous pouvez trouver l’ID de votre app dans l’écran des paramètres de votre app. Certaines mutations sont liées à une organisation et prennent un argument organizationSlug à la place, comme createApp et createStatusPage. Cette page couvre les mutations les plus courantes. Pour la liste complète et générée automatiquement de chaque mutation et de ses arguments, consultez la référence du schéma GraphQL.
Les mutations modifient les données de votre compte. Testez sur une app hors production avant d’automatiser une mutation sur des données de production.

Incidents

Mettre à jour un incident

Modifiez l’état, la gravité, les personnes assignées ou les paramètres de notification d’un incident. Le number est le numéro d’incident affiché dans AppSignal. state accepte OPEN, WIP ou CLOSED. severity accepte UNTRIAGED, CRITICAL, HIGH, LOW, NONE ou INFORMATIONAL.
mutation UpdateIncident(
  $appId: String!
  $number: Int!
  $state: IncidentStateEnum
  $severity: IncidentSeverityEnum
  $assigneeIds: [String!]
) {
  updateIncident(
    appId: $appId
    number: $number
    state: $state
    severity: $severity
    assigneeIds: $assigneeIds
  ) {
    ... on ExceptionIncident {
      id
      number
      state
      severity
    }
    ... on PerformanceIncident {
      id
      number
      state
      severity
    }
  }
}
{
  "appId": "YOUR-APP-ID",
  "number": 42,
  "state": "CLOSED",
  "severity": "LOW"
}

Mise à jour groupée d’incidents

Mettez à jour plusieurs incidents en une seule requête. Contrairement à updateIncident, cette mutation prend les IDs d’incident plutôt que les numéros d’incident.
mutation BulkUpdateIncidents(
  $appId: String!
  $ids: [String]!
  $state: IncidentStateEnum
  $severity: IncidentSeverityEnum
) {
  bulkUpdateIncidents(
    appId: $appId
    ids: $ids
    state: $state
    severity: $severity
  ) {
    ... on ExceptionIncident {
      id
      number
      state
    }
    ... on PerformanceIncident {
      id
      number
      state
    }
    ... on AnomalyIncident {
      id
      number
      state
    }
    ... on LogIncident {
      id
      number
      state
    }
  }
}
{
  "appId": "YOUR-APP-ID",
  "ids": ["INCIDENT-ID-1", "INCIDENT-ID-2"],
  "state": "CLOSED"
}

Créer une note sur un incident

Ajoutez une note au journal d’un incident. Les mêmes champs sont disponibles sur les incidents de performance, d’anomalie et de journal.
mutation CreateIncidentNote(
  $appId: String!
  $incidentNumber: Int!
  $content: String!
) {
  createIncidentNote(
    appId: $appId
    incidentNumber: $incidentNumber
    content: $content
  ) {
    ... on ExceptionIncident {
      id
      number
      logbook {
        items {
          ... on Note {
            id
            content
            createdAt
          }
        }
      }
    }
  }
}
{
  "appId": "YOUR-APP-ID",
  "incidentNumber": 42,
  "content": "Investigating, deploy reverted."
}

Créer un ticket à partir d’un incident

Créez un ticket lié dans une intégration connectée. Cet exemple utilise GitHub ; des mutations équivalentes existent pour d’autres intégrations : createGitlabIssue, createJiraIssue, createLinearIssue, createShortcutStory, createAsanaTask et createTrelloCard.
mutation CreateGithubIssue(
  $appId: String!
  $incidentNumber: Int!
  $title: String!
  $description: String!
) {
  createGithubIssue(
    appId: $appId
    incidentNumber: $incidentNumber
    title: $title
    description: $description
  ) {
    ... on ExceptionIncident {
      id
      number
      integrations {
        ... on GitHub {
          name
          issues {
            url
            title
          }
        }
      }
    }
  }
}
{
  "appId": "YOUR-APP-ID",
  "incidentNumber": 42,
  "title": "NoMethodError in OrdersController#create",
  "description": "Tracked in AppSignal incident #42."
}

Supprimer une intégration d’un incident

Supprimez un ticket d’intégration précédemment lié à un incident.
mutation RemoveIntegration(
  $appId: String!
  $incidentNumber: Int!
  $id: String!
) {
  removeIntegration(
    appId: $appId
    incidentNumber: $incidentNumber
    id: $id
  ) {
    ... on ExceptionIncident {
      id
      number
    }
  }
}
{
  "appId": "YOUR-APP-ID",
  "incidentNumber": 42,
  "id": "YOUR-INTEGRATION-ID"
}

Marqueurs

Créer ou mettre à jour un marqueur personnalisé

Créez un marqueur personnalisé pour annoter un instant donné, tel qu’un changement de configuration ou une action manuelle. Passez un id pour mettre à jour un marqueur existant. Omettez id pour créer un nouveau marqueur.
mutation CreateCustomMarker(
  $appId: String!
  $id: String
  $icon: String!
  $message: String
  $createdAt: DateTime
) {
  createOrUpdateCustomMarker(
    appId: $appId
    id: $id
    icon: $icon
    message: $message
    createdAt: $createdAt
  ) {
    id
    icon
    message
    createdAt
  }
}
{
  "appId": "YOUR-APP-ID",
  "icon": "🚀",
  "message": "Ran database migration"
}

Supprimer un marqueur personnalisé

Supprimez un marqueur personnalisé par ID.
mutation DeleteCustomMarker($appId: String!, $id: String!) {
  deleteCustomMarker(appId: $appId, id: $id) {
    id
  }
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-MARKER-ID"
}

Alertes et déclencheurs

Créer un déclencheur

Créez un déclencheur d’alerte basé sur une métrique. field accepte une valeur de MetricFieldEnum (telle que MEAN, P90, P95, COUNT, GAUGE ou COUNTER). kind est une chaîne décrivant le type de déclencheur. La documentation source GraphQL nomme ExceptionRate et Throughput comme exemples. La condition définit le seuil de comparaison. Pour remplacer un déclencheur existant, passez son ID en tant que previousTriggerId. comparisonOperator accepte LESS_THAN, GREATER_THAN, LESS_THAN_OR_EQUAL, GREATER_THAN_OR_EQUAL, EQUAL ou NOT_EQUAL.
mutation CreateTrigger(
  $appId: String!
  $previousTriggerId: String
  $name: String
  $metricName: String!
  $kind: String!
  $field: MetricFieldEnum!
  $condition: ThresholdConditionInput!
  $warmupDuration: Int!
  $cooldownDuration: Int!
  $notifierIds: [String!]
) {
  createTrigger(
    appId: $appId
    previousTriggerId: $previousTriggerId
    name: $name
    metricName: $metricName
    kind: $kind
    field: $field
    condition: $condition
    warmupDuration: $warmupDuration
    cooldownDuration: $cooldownDuration
    notifierIds: $notifierIds
  ) {
    id
    name
    metricName
    field
    thresholdCondition {
      value
      comparisonOperator
    }
    warmupDuration
    cooldownDuration
  }
}
{
  "appId": "YOUR-APP-ID",
  "name": "High error rate",
  "metricName": "transaction_exception_count",
  "kind": "ExceptionRate",
  "field": "COUNTER",
  "condition": { "value": 10, "comparisonOperator": "GREATER_THAN" },
  "warmupDuration": 0,
  "cooldownDuration": 5,
  "notifierIds": ["YOUR-NOTIFIER-ID"]
}

Archiver un déclencheur

Archivez un déclencheur afin qu’il n’évalue plus de métriques ni n’envoie d’alertes.
mutation ArchiveTrigger($appId: String!, $id: String!) {
  archiveTrigger(appId: $appId, id: $id) {
    id
    name
  }
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-TRIGGER-ID"
}

Archiver une alerte

Archivez une seule alerte déclenchée. Cette mutation retourne true en cas de succès.
mutation ArchiveAlert($appId: String!, $id: String!) {
  archiveAlert(appId: $appId, id: $id)
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-ALERT-ID"
}

Fermer la dernière alerte d’un incident d’anomalie

Fermez l’alerte ouverte la plus récente pour un incident d’anomalie, identifié par son numéro d’incident.
mutation EndLastAlert($appId: String!, $number: Int!) {
  endLastAlert(appId: $appId, number: $number) {
    id
    number
    alertState
  }
}
{
  "appId": "YOUR-APP-ID",
  "number": 42
}

Moniteurs de disponibilité

Créer un moniteur de disponibilité

Créez un moniteur de disponibilité à partir d’un UptimeMonitorInput. regions accepte une ou plusieurs valeurs parmi EUROPE, NORTH_AMERICA, ASIA_PACIFIC ou SOUTH_AMERICA.
mutation CreateUptimeMonitor(
  $appId: String!
  $uptimeMonitor: UptimeMonitorInput!
) {
  createUptimeMonitor(appId: $appId, uptimeMonitor: $uptimeMonitor) {
    id
    name
    url
    regions
    warmupDuration
  }
}
{
  "appId": "YOUR-APP-ID",
  "uptimeMonitor": {
    "name": "Marketing site",
    "url": "https://example.com",
    "regions": ["EUROPE", "NORTH_AMERICA"],
    "warmupDuration": 1,
    "notifierIds": ["YOUR-NOTIFIER-ID"]
  }
}

Mettre à jour un moniteur de disponibilité

Mettez à jour un moniteur existant. L’entrée uptimeMonitor prend la même forme que lors de la création.
mutation UpdateUptimeMonitor(
  $appId: String!
  $id: String!
  $uptimeMonitor: UptimeMonitorInput!
) {
  updateUptimeMonitor(
    appId: $appId
    id: $id
    uptimeMonitor: $uptimeMonitor
  ) {
    id
    name
    url
    regions
  }
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-UPTIME-MONITOR-ID",
  "uptimeMonitor": {
    "name": "Marketing site",
    "url": "https://example.com/health",
    "regions": ["EUROPE"]
  }
}

Supprimer un moniteur de disponibilité

Supprimez un moniteur par ID. Cette mutation retourne le moniteur supprimé.
mutation DeleteUptimeMonitor($appId: String!, $id: String!) {
  deleteUptimeMonitor(appId: $appId, id: $id) {
    id
    name
  }
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-UPTIME-MONITOR-ID"
}

Check-ins

Créer un déclencheur de check-in

Créez un déclencheur de check-in cron ou heartbeat. kind accepte CRON ou HEARTBEAT. Pour un déclencheur cron, définissez syntax sur l’expression cron. Utilisez UTC pour timezone lorsque cela est possible.
mutation CreateCheckInTrigger(
  $appId: String!
  $identifier: String!
  $kind: CheckInTriggerKindEnum!
  $waitTimeMinutes: Int!
  $syntax: String
  $timezone: String
  $notifierIds: [String!]
) {
  createCheckInTrigger(
    appId: $appId
    identifier: $identifier
    kind: $kind
    waitTimeMinutes: $waitTimeMinutes
    syntax: $syntax
    timezone: $timezone
    notifierIds: $notifierIds
  ) {
    id
    identifier
    kind
    syntax
    timezone
    waitTimeMinutes
  }
}
{
  "appId": "YOUR-APP-ID",
  "identifier": "nightly-backup",
  "kind": "CRON",
  "syntax": "0 2 * * *",
  "timezone": "UTC",
  "waitTimeMinutes": 5,
  "notifierIds": ["YOUR-NOTIFIER-ID"]
}

Mettre à jour un déclencheur de check-in

Mettez à jour un déclencheur de check-in existant. Seuls les champs que vous passez sont modifiés.
mutation UpdateCheckInTrigger(
  $appId: String!
  $id: String!
  $syntax: String
  $waitTimeMinutes: Int
  $notifierIds: [String!]
) {
  updateCheckInTrigger(
    appId: $appId
    id: $id
    syntax: $syntax
    waitTimeMinutes: $waitTimeMinutes
    notifierIds: $notifierIds
  ) {
    id
    identifier
    syntax
    waitTimeMinutes
  }
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-CHECK-IN-TRIGGER-ID",
  "syntax": "0 3 * * *",
  "waitTimeMinutes": 10
}

Supprimer un déclencheur de check-in

Supprimez un déclencheur de check-in par ID.
mutation DeleteCheckInTrigger($appId: String!, $id: String!) {
  deleteCheckInTrigger(appId: $appId, id: $id) {
    id
    identifier
  }
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-CHECK-IN-TRIGGER-ID"
}

Tableaux de bord

Créer un tableau de bord

Créez un tableau de bord vide. Ajoutez-y des visuels avec les mutations createVisualTimeseries et createVisualNumber, ou importez un tableau de bord complet avec importDashboard. Les visuels de tableau de bord sont également gérés via createVisualTimeseries, createVisualNumber, updateVisualTimeseries, updateVisualNumber, updateVisualLayouts et deleteVisual. Pour créer un visuel enregistré autonome récupérable ultérieurement via les points de terminaison REST des visuels enregistrés, utilisez createSavedVisual.
mutation CreateDashboard(
  $appId: String!
  $title: String!
  $description: String
) {
  createDashboard(appId: $appId, title: $title, description: $description) {
    id
    title
    description
  }
}
{
  "appId": "YOUR-APP-ID",
  "title": "Background jobs",
  "description": "Throughput and queue time for worker jobs."
}

Mettre à jour un tableau de bord

Mettez à jour le titre ou la description d’un tableau de bord. Le title est obligatoire.
mutation UpdateDashboard(
  $appId: String!
  $id: String!
  $title: String!
  $description: String
) {
  updateDashboard(
    appId: $appId
    id: $id
    title: $title
    description: $description
  ) {
    id
    title
    description
  }
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-DASHBOARD-ID",
  "title": "Background jobs",
  "description": "Updated description."
}

Supprimer un tableau de bord

Supprimez un tableau de bord par ID.
mutation DeleteDashboard($appId: String!, $id: String!) {
  deleteDashboard(appId: $appId, id: $id) {
    id
    title
  }
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-DASHBOARD-ID"
}

Importer un tableau de bord

Importez un tableau de bord à partir d’une définition JSON. L’argument json est une chaîne encodée en JSON, donc échappez-la lorsque vous l’envoyez en tant que variable.
mutation ImportDashboard($appId: String!, $json: String!) {
  importDashboard(appId: $appId, json: $json) {
    id
    title
  }
}
{
  "appId": "YOUR-APP-ID",
  "json": "{\"title\":\"Imported dashboard\",\"visuals\":[]}"
}

Journaux

Créer un déclencheur de journal

Créez un déclencheur qui ouvre un incident lorsque des lignes de journal correspondent à une requête. severities accepte les noms de gravité de journal tels que error, warn ou info.
mutation CreateLogTrigger(
  $appId: String!
  $name: String!
  $query: String!
  $sourceIds: [String!]
  $severities: [String!]
  $notifierIds: [String!]
) {
  createLogTrigger(
    appId: $appId
    name: $name
    query: $query
    sourceIds: $sourceIds
    severities: $severities
    notifierIds: $notifierIds
  ) {
    id
    name
    query
    severities
  }
}
{
  "appId": "YOUR-APP-ID",
  "name": "Payment errors",
  "query": "payment failed",
  "severities": ["error"],
  "notifierIds": ["YOUR-NOTIFIER-ID"]
}
Les journaux sont également gérés via GraphQL au-delà des déclencheurs. Utilisez createLogSource, updateLogSource et deleteLogSource pour les sources ; createLogView, updateLogView et deleteLogView pour les vues enregistrées ; createLogLineAction, updateLogLineAction, deleteLogLineAction et reorderLogLineActions pour les règles d’ingestion ; updateLogTrigger et deleteLogTrigger pour les déclencheurs de journal ; et createLogExport, updateLogExport et deleteLogExport pour les exports S3.

Mutations à l’échelle de l’organisation

Certaines mutations agissent sur une organisation plutôt que sur une seule app, et prennent donc un argument organizationSlug au lieu de appId. Vous pouvez trouver le slug dans l’URL de votre organisation dans AppSignal.

Créer une app

Créez une nouvelle app au sein d’une organisation.
mutation CreateApp(
  $organizationSlug: String!
  $name: String!
  $environment: String!
) {
  createApp(
    organizationSlug: $organizationSlug
    name: $name
    environment: $environment
  ) {
    id
    name
    environment
  }
}
{
  "organizationSlug": "YOUR-ORGANIZATION-SLUG",
  "name": "My app",
  "environment": "production"
}

Créer une page de statut

Créez une page de statut publique à partir d’un CreateStatusPageInput. title et hostname sont obligatoires.
mutation CreateStatusPage(
  $organizationSlug: String!
  $statusPage: CreateStatusPageInput!
) {
  createStatusPage(
    organizationSlug: $organizationSlug
    statusPage: $statusPage
  ) {
    id
    title
    hostname
    state
  }
}
{
  "organizationSlug": "YOUR-ORGANIZATION-SLUG",
  "statusPage": {
    "title": "Service status",
    "hostname": "status.example.com",
    "uptimeMonitorIds": ["YOUR-UPTIME-MONITOR-ID"],
    "threshold": 1
  }
}
Les pages de statut prennent également en charge createStatusPageUpdate, updateStatusPage, updateStatusPageUpdate, deleteStatusPage et deleteStatusPageUpdate. Pour les exports CSV, utilisez createCsvExport pour démarrer un export et createCsvExportUrl pour générer une URL de téléchargement pour un export terminé.

Autres mutations

Ces exemples couvrent les opérations les plus courantes. L’API en contient davantage, regroupées dans la référence du schéma sous Core (gestion des apps et des collecteurs hébergés), Tableaux de bord (visuels et mises en page), Journaux (sources, vues et exports), Exports (CSV), Pages de statut (mises à jour) et Préférences utilisateur. Pour la liste complète des mutations et de leurs arguments, consultez la référence du schéma GraphQL.