GraphQL Examples
Here are some of the query examples to get you started.
You can use an external GraphQL explorer service like Cloud Hasuras GraphQL explorer to run these queries or install and run a service like GraphiQL locally.
You will need to make requests to the following URL:
shell
https://appsignal.com/graphql?token=your-personal-api-token
You can find your API token in the personal settings screen in AppSignal.
You will also need your app ID. This can be found in your app's settings screen.
Fetch deployments
Query
graphql
query MarkersIndexQuery( $appId: String! $limit: Int $offset: Int $start: DateTime $end: DateTime ) { app(id: $appId) { id deployMarkers(limit: $limit, offset: $offset, start: $start, end: $end) { id createdAt shortRevision revision gitCompareUrl user liveForInWords liveFor exceptionCount exceptionRate __typename } __typename } }
Query variables
graphql
{ "appId": "YOUR-APP-ID", "limit": 25 }
Fetch incidents by deployments
Query
graphql
query ExceptionIncidentsQuery( $appId: String! $namespaces: [String] $markerId: String $limit: Int $offset: Int $state: IncidentStateEnum $order: IncidentOrderEnum ) { app(id: $appId) { id exceptionIncidents( namespaces: $namespaces marker: $markerId limit: $limit state: $state offset: $offset order: $order ) { ...ExceptionIncidentRow __typename } __typename } } fragment ExceptionIncidentRow on ExceptionIncident { id number count perMarkerCount(marker: $markerId) lastOccurredAt actionNames exceptionName state namespace firstBacktraceLine errorGroupingStrategy severity }
Query variables
graphql
{ "appId": "YOUR-APP-ID", "markerId": "YOUR-DEPLOY-MARKER-ID", "limit": 200 }
Search incidents by tag
Query
graphql
uery Search( $organizationSlug: String! $query: String $namespace: String $sampleType: SampleTypeEnum ) { organization(slug: $organizationSlug) { search( query: $query namespace: $namespace sampleType: $sampleType ) { ... on ExceptionSample { id time action namespace overview { key value } exception { name message } incident { ... on ExceptionIncident { number } } app { name environment id } } ... on PerformanceSample { id appId time action namespace duration overview { key value } incident { ... on PerformanceIncident { number } } app { name environment id } } } } }
Query variables
graphql
{ "organizationSlug":"APPLICATION-SLUG" // taken from the URL of the application, "sampleType":"EXCEPTION", "query": "tag:value" // replace the word value with the values you are searching for }
Fetch error count
Query
graphql
query MetricsListQuery( $appId: String! $start: DateTime $end: DateTime $timeframe: TimeframeEnum $query: [MetricAggregation!]! ) { app(id: $appId) { id metrics { list(start: $start, end: $end, query: $query, timeframe: $timeframe) { start end rows { name tags { key value } fields { key value } } } } } }
Query variables
graphql
{ "appId": "YOUR-APP-ID", "start": "2021-06-04T13:00:00.000Z", // change this to the date of your preference "end": "2021-12-21T14:00:00.000Z", // change this to the date of your preference "query": [ { "name": "transaction_exception_count", "tags": [{ "key": "namespace", "value": "*" }], "fields": [{ "field": "COUNTER", "aggregate": "SUM" }] } ] }
Fetch Mean (timeseries)
Query
graphql
query MetricTimeseriesQuery( $appId: String! $start: DateTime $end: DateTime $timeframe: TimeframeEnum $query: [MetricTimeseries] ) { app(id: $appId) { id metrics { timeseries( start: $start end: $end timeframe: $timeframe query: $query ) { start end resolution keys { name fields tags { key value } } points { timestamp values { value } } } } } }
Query variables
graphql
{ "appId": "YOUR-APP-ID", "start": "2022-01-10T11:00:00Z", // Start data and time you want to fetch the Mean for "end": "2022-01-10T11:05:00Z", // End data and time you want to fetch the Mean for "query": [ { "name": "transaction_duration", "tags": [ // You can add more namespaces here, this example just fetches the Mean for web namespace. { "key": "namespace", "value": "web" } ], "fields": [ { "field": "MEAN" } ] } ] }
Fetch Mean (aggregated)
Query
graphql
query MetricAggregationQuery( $appId: String! $start: DateTime $end: DateTime $timeframe: TimeframeEnum $query: [MetricAggregation!]! ) { app(id: $appId) { id metrics { list(start: $start, end: $end, timeframe: $timeframe, query: $query) { start end rows { name tags { key value } fields { key value } } } } } }
Query variables
graphql
{ "appId": "YOUR-APP-ID", "start": "2022-01-10T11:00:00Z", // Start data and time you want to fetch the Mean for "end": "2022-01-10T11:05:00Z", // End data and time you want to fetch the Mean for "query": [ { "name": "transaction_duration", "tags": [ // You can add more namespaces here, this example just fetches the Mean for web namespace. { "key": "namespace", "value": "web" } ], "fields": [ {"field":"mean","aggregate":"AVG"} ] } ] }
Fetch incident with sample
Query
graphql
query IncidentQuery( $appId: String! $incidentNumber: Int! $sampleId: String $timestamp: String $timerange: [DateTime] ) { app(id: $appId) { id incident(incidentNumber: $incidentNumber) { ... on ExceptionIncident { ...ExceptionIncident } ... on PerformanceIncident { ...PerformanceIncident } } } } fragment ExceptionIncident on ExceptionIncident { id number lastOccurredAt actionNames exceptionName notificationFrequency state namespace firstBacktraceLine errorGroupingStrategy sample(id: $sampleId, timestamp: $timestamp, timerange: $timerange) { ...ExceptionSample } } fragment ExceptionSample on ExceptionSample { id appId time revision action namespace queueDuration originallyRequested overview { key value } params sessionData customData environment { key value } exception { name message backtrace { original line column path method url type code { line source } error { class message } } } } fragment PerformanceIncident on PerformanceIncident { id number lastOccurredAt actionNames state notificationFrequency notificationThreshold namespace description severity sample(id: $sampleId, timestamp: $timestamp, timerange: $timerange) { ...PerformanceSample __typename } __typename } fragment PerformanceSample on PerformanceSample { id appId time revision action namespace originallyRequested hasNPlusOne timelineTruncatedEvents overview { key value __typename } params sessionData customData environment { key value __typename } duration queueDuration timeline { ...TimelineEvent __typename } version __typename } fragment TimelineEvent on TimelineEvent { action duration childDuration group name payload { name body __typename } time end digest count level allocationCount childAllocationCount __typename }
Query variables
graphql
{ "appId": "YOUR-APP-ID", "incidentNumber": ID-OF-INCIDENT, "sampleId": "SAMPLE-ID-STRING", // this is optional "timestamp": "SAMPLE-TIME-STAMP", // this is optional "timerange": "SAMPLE-TIME-RANGE", // this is optional }
Fetch uptime monitors and their alerts
Query
graphql
query uptimeMonitorsQuery($appId: String!) { app(id: $appId) { id uptimeMonitors { ...UptimeMonitor } } } fragment UptimeMonitor on UptimeMonitor { id name url description notifierIds warmupDuration checkBodyContent regions headers { key value } alerts { ...Alert } statusPages { ...StatusPage } } fragment Alert on Alert { id state message metricDigest createdAt openedAt resolvedAt closedAt timeframeStartAt timeframeEndAt lastValue peakValue mean tags { key value } } fragment StatusPage on StatusPage { id title subdomain hostname description threshold uptimeMonitorIds }
Query variables
graphql
{ "appId": "YOUR-APP-ID" }
Fetch uptime monitors status
Query
graphql
query MetricTimeseriesQuery( $appId: String! $start: DateTime $end: DateTime $timeframe: TimeframeEnum $query: [MetricTimeseries] ) { app(id: $appId) { id metrics { timeseries( start: $start end: $end timeframe: $timeframe query: $query ) { start end resolution keys { digest name fields tags { key value } } points { timestamp values { key value } } } } } }
Query variables
graphql
{ "appId": "YOUR-APP-ID", "timeframe": "R1H", // Available option (R1H,R4H,R8H,R12H,,R24H,R48H, R7D,R30D) "query": [ { "name": "uptime_monitor_error_count", "tags": [ { "key": "name", "value": "NAME-OF-UPTIME-MONITOR" }, { "key": "region", "value": "*" // You can filter this to specific region as well. } ], "fields": [ { "field": "COUNTER" } ] } ] }