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