GraphQL Examples

Here are some of the query examples to get you started. You the use the GraphQL explorer here to run these queries.

Fetch deployments

Query

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

{
  "appId": "YOUR-APP-ID",
  "limit": 25
}

Fetch incidents by deployments

Query

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

{
  "appId": "YOUR-APP-ID",
  "markerId": "YOUR-DEPLOY-MARKER-ID",
  "limit": 200
}

Search incidents by tag

Query

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

{
  "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

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

{
  "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

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

{
  "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

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

{
  "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

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

{
  "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
}

Want to help us improve this documentation page?

Create a pull request

Need more help?

Contact us and speak directly with the engineers working on AppSignal. They will help you get set up, tweak your code and make sure you get the most out of using AppSignal.

Contact us

Start a trial - 30 days free

AppSignal is a great way to monitor your Ruby, Elixir & Node.js applications. Works great with Rails, Phoenix, Express and other frameworks, with support for background jobs too. Let's improve your apps together.

Start a trial