Pular para o conteúdo principal
A API GraphQL da AppSignal suporta mutations além de queries. Enquanto uma query lê dados, uma mutation os escreve: você pode criar um marker personalizado, fechar um incidente, adicionar um monitor de uptime e muito mais. Mutations usam o mesmo endpoint e token pessoal de API que as queries. Leia a página da API GraphQL para detalhes sobre o endpoint e a autenticação. A maioria das mutations tem escopo de app e recebe um argumento appId que limita a alteração a um único app. Você pode encontrar o ID do seu app na tela de configurações do app. Algumas mutations têm escopo de organização e recebem um argumento organizationSlug em vez de appId, como createApp e createStatusPage. Esta página cobre as mutations mais comuns. Para a lista completa, gerada automaticamente, de cada mutation e seus argumentos, consulte a referência do schema GraphQL.
Mutations alteram dados na sua conta. Teste em um app que não seja de produção antes de automatizar uma mutation contra dados de produção.

Incidentes

Atualizar um incidente

Altere o estado, severidade, responsáveis ou configurações de notificação de um incidente. O number é o número do incidente exibido na AppSignal. state aceita OPEN, WIP ou CLOSED. severity aceita 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"
}

Atualizar incidentes em massa

Atualize vários incidentes em uma única requisição. Diferente de updateIncident, esta mutation recebe IDs de incidentes em vez de números de incidente.
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"
}

Criar uma nota em um incidente

Adicione uma nota ao log do incidente. Os mesmos campos estão disponíveis para incidentes de performance, anomalia e log.
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."
}

Criar uma issue a partir de um incidente

Crie uma issue vinculada em uma integração conectada. Este exemplo usa o GitHub; existem mutations equivalentes para outras integrações: createGitlabIssue, createJiraIssue, createLinearIssue, createShortcutStory, createAsanaTask e 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."
}

Remover uma integração de um incidente

Remova uma issue de integração previamente vinculada a um incidente.
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"
}

Markers

Criar ou atualizar um marker personalizado

Crie um marker personalizado para anotar um ponto no tempo, como uma mudança de configuração ou uma ação manual. Passe um id para atualizar um marker existente. Omita id para criar um novo marker.
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"
}

Deletar um marker personalizado

Delete um marker personalizado pelo ID.
mutation DeleteCustomMarker($appId: String!, $id: String!) {
  deleteCustomMarker(appId: $appId, id: $id) {
    id
  }
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-MARKER-ID"
}

Alertas e triggers

Criar um trigger

Crie um trigger de alerta baseado em métricas. field aceita um valor de MetricFieldEnum (como MEAN, P90, P95, COUNT, GAUGE ou COUNTER). kind é uma string que descreve o tipo de trigger. A documentação fonte do GraphQL cita ExceptionRate e Throughput como exemplos. A condition define o limite a ser comparado. Para substituir um trigger existente, passe seu ID como previousTriggerId. comparisonOperator aceita 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"]
}

Arquivar um trigger

Arquive um trigger para que ele não avalie mais métricas nem envie alertas.
mutation ArchiveTrigger($appId: String!, $id: String!) {
  archiveTrigger(appId: $appId, id: $id) {
    id
    name
  }
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-TRIGGER-ID"
}

Arquivar um alerta

Arquive um único alerta disparado. Esta mutation retorna true em caso de sucesso.
mutation ArchiveAlert($appId: String!, $id: String!) {
  archiveAlert(appId: $appId, id: $id)
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-ALERT-ID"
}

Fechar o último alerta de um incidente de anomalia

Feche o alerta aberto mais recente de um incidente de anomalia, identificado pelo seu número.
mutation EndLastAlert($appId: String!, $number: Int!) {
  endLastAlert(appId: $appId, number: $number) {
    id
    number
    alertState
  }
}
{
  "appId": "YOUR-APP-ID",
  "number": 42
}

Monitores de uptime

Criar um monitor de uptime

Crie um monitor de uptime a partir de um UptimeMonitorInput. regions aceita um ou mais valores entre 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"]
  }
}

Atualizar um monitor de uptime

Atualize um monitor existente. O input uptimeMonitor tem o mesmo formato usado na criação.
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"]
  }
}

Deletar um monitor de uptime

Delete um monitor pelo ID. Esta mutation retorna o monitor deletado.
mutation DeleteUptimeMonitor($appId: String!, $id: String!) {
  deleteUptimeMonitor(appId: $appId, id: $id) {
    id
    name
  }
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-UPTIME-MONITOR-ID"
}

Check-ins

Criar um trigger de check-in

Crie um trigger de check-in cron ou heartbeat. kind aceita CRON ou HEARTBEAT. Para um trigger cron, defina syntax com a expressão cron. Use UTC em timezone sempre que possível.
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"]
}

Atualizar um trigger de check-in

Atualize um trigger de check-in existente. Apenas os campos que você passar são alterados.
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
}

Deletar um trigger de check-in

Delete um trigger de check-in pelo ID.
mutation DeleteCheckInTrigger($appId: String!, $id: String!) {
  deleteCheckInTrigger(appId: $appId, id: $id) {
    id
    identifier
  }
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-CHECK-IN-TRIGGER-ID"
}

Dashboards

Criar um dashboard

Crie um dashboard vazio. Adicione visuais a ele com as mutations createVisualTimeseries e createVisualNumber, ou importe um dashboard completo com importDashboard. Os visuais de dashboard também são gerenciados pelas mutations createVisualTimeseries, createVisualNumber, updateVisualTimeseries, updateVisualNumber, updateVisualLayouts e deleteVisual. Para criar um visual salvo independente para recuperação posterior pelos endpoints REST de visuais salvos, use 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."
}

Atualizar um dashboard

Atualize o título ou a descrição de um dashboard. O title é obrigatório.
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."
}

Deletar um dashboard

Delete um dashboard pelo ID.
mutation DeleteDashboard($appId: String!, $id: String!) {
  deleteDashboard(appId: $appId, id: $id) {
    id
    title
  }
}
{
  "appId": "YOUR-APP-ID",
  "id": "YOUR-DASHBOARD-ID"
}

Importar um dashboard

Importe um dashboard a partir de uma definição JSON. O argumento json é uma string codificada em JSON, então escape-a ao enviá-la como variável.
mutation ImportDashboard($appId: String!, $json: String!) {
  importDashboard(appId: $appId, json: $json) {
    id
    title
  }
}
{
  "appId": "YOUR-APP-ID",
  "json": "{\"title\":\"Imported dashboard\",\"visuals\":[]}"
}

Logs

Criar um trigger de log

Crie um trigger que abre um incidente quando linhas de log correspondem a uma query. severities aceita nomes de severidade de log como 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"]
}
Logs também são gerenciados via GraphQL além de triggers. Use createLogSource, updateLogSource e deleteLogSource para sources; createLogView, updateLogView e deleteLogView para visualizações salvas; createLogLineAction, updateLogLineAction, deleteLogLineAction e reorderLogLineActions para regras de ingestão; updateLogTrigger e deleteLogTrigger para triggers de log; e createLogExport, updateLogExport e deleteLogExport para exports para o S3.

Mutations com escopo de organização

Algumas mutations atuam em uma organização e não em um único app, então recebem um argumento organizationSlug em vez de appId. Você encontra o slug na URL da sua organização na AppSignal.

Criar um app

Crie um novo app dentro de uma organização.
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"
}

Criar uma página de status

Crie uma página de status pública a partir de um CreateStatusPageInput. title e hostname são obrigatórios.
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
  }
}
As páginas de status também suportam createStatusPageUpdate, updateStatusPage, updateStatusPageUpdate, deleteStatusPage e deleteStatusPageUpdate. Para exports em CSV, use createCsvExport para iniciar um export e createCsvExportUrl para gerar uma URL de download para um export concluído.

Mais mutations

Estes exemplos cobrem as operações mais comuns. A API inclui muito mais, agrupadas na referência do schema sob Core (gerenciamento de app e collector hospedado), Dashboards (visuais e layouts), Logs (sources, views e exports), Exports (CSV), Status pages (atualizações) e User preferences. Para a lista completa de mutations e seus argumentos, consulte a referência do schema GraphQL.