CI Visibility Tests

Search or aggregate your CI Visibility test events over HTTP. See the Test Visibility in Datadog page for more information.

GET https://api.ap1.datadoghq.com/api/v2/ci/tests/eventshttps://api.datadoghq.eu/api/v2/ci/tests/eventshttps://api.ddog-gov.com/api/v2/ci/tests/eventshttps://api.datadoghq.com/api/v2/ci/tests/eventshttps://api.us3.datadoghq.com/api/v2/ci/tests/eventshttps://api.us5.datadoghq.com/api/v2/ci/tests/events

Présentation

List endpoint returns CI Visibility test events that match a search query. Results are paginated similarly to logs.

Use this endpoint to see your latest test events.

This endpoint requires the ci_visibility_read permission.

OAuth apps require the ci_visibility_read authorization scope to access this endpoint.

Arguments

Chaînes de requête

Nom

Type

Description

filter[query]

string

Search query following log syntax.

filter[from]

string

Minimum timestamp for requested events.

filter[to]

string

Maximum timestamp for requested events.

sort

enum

Order of events in results.
Allowed enum values: timestamp, -timestamp

page[cursor]

string

List following results with a cursor provided in the previous query.

page[limit]

integer

Maximum number of events in the response.

Réponse

OK

Response object with all test events matching the request and pagination information.

Expand All

Champ

Type

Description

data

[object]

Array of events matching the request.

attributes

object

JSON object containing all event attributes and their associated values.

attributes

object

JSON object of attributes from CI Visibility test events.

tags

[string]

Array of tags associated with your event.

test_level

enum

Test run level. Allowed enum values: session,module,suite,test

id

string

Unique ID of the event.

type

enum

Type of the event. Allowed enum values: citest

links

object

Links attributes.

next

string

Link for the next set of results. The request can also be made using the POST endpoint.

meta

object

The metadata associated with a request.

elapsed

int64

The time elapsed in milliseconds.

page

object

Paging attributes.

after

string

The cursor to use to get the next results, if any. To make the next request, use the same parameters with the addition of page[cursor].

request_id

string

The identifier of the request.

status

enum

The status of the response. Allowed enum values: done,timeout

warnings

[object]

A list of warnings (non-fatal errors) encountered. Partial results may return if warnings are present in the response.

code

string

A unique code for this type of warning.

detail

string

A detailed explanation of this specific warning.

title

string

A short human-readable summary of the warning.

{
  "data": [
    {
      "attributes": {
        "attributes": {
          "customAttribute": 123,
          "duration": 2345
        },
        "tags": [
          "team:A"
        ],
        "test_level": "test"
      },
      "id": "AAAAAWgN8Xwgr1vKDQAAAABBV2dOOFh3ZzZobm1mWXJFYTR0OA",
      "type": "citest"
    }
  ],
  "links": {
    "next": "https://app.datadoghq.com/api/v2/ci/tests/events?filter[query]=foo\u0026page[cursor]=eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ=="
  },
  "meta": {
    "elapsed": 132,
    "page": {
      "after": "eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ=="
    },
    "request_id": "MWlFUjVaWGZTTTZPYzM0VXp1OXU2d3xLSVpEMjZKQ0VKUTI0dEYtM3RSOFVR",
    "status": "done",
    "warnings": [
      {
        "code": "unknown_index",
        "detail": "indexes: foo, bar",
        "title": "One or several indexes are missing or invalid, results hold data from the other indexes"
      }
    ]
  }
}

Bad Request

API error response.

Expand All

Champ

Type

Description

errors [required]

[string]

A list of errors.

{
  "errors": [
    "Bad Request"
  ]
}

Not Authorized

API error response.

Expand All

Champ

Type

Description

errors [required]

[string]

A list of errors.

{
  "errors": [
    "Bad Request"
  ]
}

Too many requests

API error response.

Expand All

Champ

Type

Description

errors [required]

[string]

A list of errors.

{
  "errors": [
    "Bad Request"
  ]
}

Exemple de code

/**
 * Get a list of tests events returns "OK" response
 */

import { client, v2 } from "@datadog/datadog-api-client";

const configuration = client.createConfiguration();
const apiInstance = new v2.CIVisibilityTestsApi(configuration);

const params: v2.CIVisibilityTestsApiListCIAppTestEventsRequest = {
  filterQuery: "@test.service:web-ui-tests",
  filterFrom: new Date(new Date().getTime() + -30 * 1000),
  filterTo: new Date(),
  pageLimit: 5,
};

apiInstance
  .listCIAppTestEvents(params)
  .then((data: v2.CIAppTestEventsResponse) => {
    console.log(
      "API called successfully. Returned data: " + JSON.stringify(data)
    );
  })
  .catch((error: any) => console.error(error));

Instructions

First install the library and its dependencies and then save the example to example.ts and run following commands:

    
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comddog-gov.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" tsc "example.ts"

POST https://api.ap1.datadoghq.com/api/v2/ci/tests/events/searchhttps://api.datadoghq.eu/api/v2/ci/tests/events/searchhttps://api.ddog-gov.com/api/v2/ci/tests/events/searchhttps://api.datadoghq.com/api/v2/ci/tests/events/searchhttps://api.us3.datadoghq.com/api/v2/ci/tests/events/searchhttps://api.us5.datadoghq.com/api/v2/ci/tests/events/search

Présentation

List endpoint returns CI Visibility test events that match a search query. Results are paginated similarly to logs.

Use this endpoint to build complex events filtering and search.

This endpoint requires the ci_visibility_read permission.

OAuth apps require the ci_visibility_read authorization scope to access this endpoint.

Requête

Body Data

Expand All

Champ

Type

Description

filter

object

The search and filter query settings.

from

string

The minimum time for the requested events; supports date, math, and regular timestamps (in milliseconds).

default: now-15m

query

string

The search query following the CI Visibility Explorer search syntax.

default: *

to

string

The maximum time for the requested events, supports date, math, and regular timestamps (in milliseconds).

default: now

options

object

Global query options that are used during the query. Only supply timezone or time offset, not both. Otherwise, the query fails.

time_offset

int64

The time offset (in seconds) to apply to the query.

timezone

string

The timezone can be specified as GMT, UTC, an offset from UTC (like UTC+1), or as a Timezone Database identifier (like America/New_York).

default: UTC

page

object

Paging attributes for listing events.

cursor

string

List following results with a cursor provided in the previous query.

limit

int32

Maximum number of events in the response.

default: 10

sort

enum

Sort parameters when querying events. Allowed enum values: timestamp,-timestamp

{
  "filter": {
    "from": "now-15m",
    "query": "@test.service:web-ui-tests AND @test.status:skip",
    "to": "now"
  },
  "options": {
    "timezone": "GMT"
  },
  "page": {
    "limit": 25
  },
  "sort": "timestamp"
}
{
  "filter": {
    "from": "now-15m",
    "query": "@test.status:pass AND -@language:python",
    "to": "now"
  },
  "page": {
    "limit": 2
  },
  "sort": "timestamp"
}

Réponse

OK

Response object with all test events matching the request and pagination information.

Expand All

Champ

Type

Description

data

[object]

Array of events matching the request.

attributes

object

JSON object containing all event attributes and their associated values.

attributes

object

JSON object of attributes from CI Visibility test events.

tags

[string]

Array of tags associated with your event.

test_level

enum

Test run level. Allowed enum values: session,module,suite,test

id

string

Unique ID of the event.

type

enum

Type of the event. Allowed enum values: citest

links

object

Links attributes.

next

string

Link for the next set of results. The request can also be made using the POST endpoint.

meta

object

The metadata associated with a request.

elapsed

int64

The time elapsed in milliseconds.

page

object

Paging attributes.

after

string

The cursor to use to get the next results, if any. To make the next request, use the same parameters with the addition of page[cursor].

request_id

string

The identifier of the request.

status

enum

The status of the response. Allowed enum values: done,timeout

warnings

[object]

A list of warnings (non-fatal errors) encountered. Partial results may return if warnings are present in the response.

code

string

A unique code for this type of warning.

detail

string

A detailed explanation of this specific warning.

title

string

A short human-readable summary of the warning.

{
  "data": [
    {
      "attributes": {
        "attributes": {
          "customAttribute": 123,
          "duration": 2345
        },
        "tags": [
          "team:A"
        ],
        "test_level": "test"
      },
      "id": "AAAAAWgN8Xwgr1vKDQAAAABBV2dOOFh3ZzZobm1mWXJFYTR0OA",
      "type": "citest"
    }
  ],
  "links": {
    "next": "https://app.datadoghq.com/api/v2/ci/tests/events?filter[query]=foo\u0026page[cursor]=eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ=="
  },
  "meta": {
    "elapsed": 132,
    "page": {
      "after": "eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ=="
    },
    "request_id": "MWlFUjVaWGZTTTZPYzM0VXp1OXU2d3xLSVpEMjZKQ0VKUTI0dEYtM3RSOFVR",
    "status": "done",
    "warnings": [
      {
        "code": "unknown_index",
        "detail": "indexes: foo, bar",
        "title": "One or several indexes are missing or invalid, results hold data from the other indexes"
      }
    ]
  }
}

Bad Request

API error response.

Expand All

Champ

Type

Description

errors [required]

[string]

A list of errors.

{
  "errors": [
    "Bad Request"
  ]
}

Not Authorized

API error response.

Expand All

Champ

Type

Description

errors [required]

[string]

A list of errors.

{
  "errors": [
    "Bad Request"
  ]
}

Too many requests

API error response.

Expand All

Champ

Type

Description

errors [required]

[string]

A list of errors.

{
  "errors": [
    "Bad Request"
  ]
}

Exemple de code

/**
 * Search tests events returns "OK" response
 */

import { client, v2 } from "@datadog/datadog-api-client";

const configuration = client.createConfiguration();
const apiInstance = new v2.CIVisibilityTestsApi(configuration);

const params: v2.CIVisibilityTestsApiSearchCIAppTestEventsRequest = {
  body: {
    filter: {
      from: "now-15m",
      query: "@test.service:web-ui-tests AND @test.status:skip",
      to: "now",
    },
    options: {
      timezone: "GMT",
    },
    page: {
      limit: 25,
    },
    sort: "timestamp",
  },
};

apiInstance
  .searchCIAppTestEvents(params)
  .then((data: v2.CIAppTestEventsResponse) => {
    console.log(
      "API called successfully. Returned data: " + JSON.stringify(data)
    );
  })
  .catch((error: any) => console.error(error));
/**
 * Search tests events returns "OK" response with pagination
 */

import { client, v2 } from "@datadog/datadog-api-client";

const configuration = client.createConfiguration();
const apiInstance = new v2.CIVisibilityTestsApi(configuration);

const params: v2.CIVisibilityTestsApiSearchCIAppTestEventsRequest = {
  body: {
    filter: {
      from: "now-15m",
      query: "@test.status:pass AND -@language:python",
      to: "now",
    },
    page: {
      limit: 2,
    },
    sort: "timestamp",
  },
};

(async () => {
  try {
    for await (const item of apiInstance.searchCIAppTestEventsWithPagination(
      params
    )) {
      console.log(item);
    }
  } catch (error) {
    console.error(error);
  }
})();

Instructions

First install the library and its dependencies and then save the example to example.ts and run following commands:

    
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comddog-gov.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" tsc "example.ts"

POST https://api.ap1.datadoghq.com/api/v2/ci/tests/analytics/aggregatehttps://api.datadoghq.eu/api/v2/ci/tests/analytics/aggregatehttps://api.ddog-gov.com/api/v2/ci/tests/analytics/aggregatehttps://api.datadoghq.com/api/v2/ci/tests/analytics/aggregatehttps://api.us3.datadoghq.com/api/v2/ci/tests/analytics/aggregatehttps://api.us5.datadoghq.com/api/v2/ci/tests/analytics/aggregate

Présentation

The API endpoint to aggregate CI Visibility test events into buckets of computed metrics and timeseries. This endpoint requires the ci_visibility_read permission.

OAuth apps require the ci_visibility_read authorization scope to access this endpoint.

Requête

Body Data (required)

Expand All

Champ

Type

Description

compute

[object]

The list of metrics or timeseries to compute for the retrieved buckets.

aggregation [required]

enum

An aggregation function. Allowed enum values: count,cardinality,pc75,pc90,pc95,pc98,pc99,sum,min,max,avg,median,latest,earliest,most_frequent,delta

interval

string

The time buckets' size (only used for type=timeseries) Defaults to a resolution of 150 points.

metric

string

The metric to use.

type

enum

The type of compute. Allowed enum values: timeseries,total

default: total

filter

object

The search and filter query settings.

from

string

The minimum time for the requested events; supports date, math, and regular timestamps (in milliseconds).

default: now-15m

query

string

The search query following the CI Visibility Explorer search syntax.

default: *

to

string

The maximum time for the requested events, supports date, math, and regular timestamps (in milliseconds).

default: now

group_by

[object]

The rules for the group-by.

facet [required]

string

The name of the facet to use (required).

histogram

object

Used to perform a histogram computation (only for measure facets). At most, 100 buckets are allowed, the number of buckets is (max - min)/interval.

interval [required]

double

The bin size of the histogram buckets.

max [required]

double

The maximum value for the measure used in the histogram (values greater than this one are filtered out).

min [required]

double

The minimum value for the measure used in the histogram (values smaller than this one are filtered out).

limit

int64

The maximum buckets to return for this group-by.

default: 10

missing

 <oneOf>

The value to use for logs that don't have the facet used to group-by.

Option 1

string

The missing value to use if there is a string valued facet.

Option 2

double

The missing value to use if there is a number valued facet.

sort

object

A sort rule. The aggregation field is required when type is measure.

aggregation

enum

An aggregation function. Allowed enum values: count,cardinality,pc75,pc90,pc95,pc98,pc99,sum,min,max,avg,median,latest,earliest,most_frequent,delta

metric

string

The metric to sort by (only used for type=measure).

order

enum

The order to use, ascending or descending. Allowed enum values: asc,desc

type

enum

The type of sorting algorithm. Allowed enum values: alphabetical,measure

default: alphabetical

total

 <oneOf>

A resulting object to put the given computes in over all the matching records.

Option 1

boolean

If set to true, creates an additional bucket labeled "$facet_total".

Option 2

string

A string to use as the key value for the total bucket.

Option 3

double

A number to use as the key value for the total bucket.

options

object

Global query options that are used during the query. Only supply timezone or time offset, not both. Otherwise, the query fails.

time_offset

int64

The time offset (in seconds) to apply to the query.

timezone

string

The timezone can be specified as GMT, UTC, an offset from UTC (like UTC+1), or as a Timezone Database identifier (like America/New_York).

default: UTC

{
  "compute": [
    {
      "aggregation": "count",
      "metric": "@test.is_flaky",
      "type": "total"
    }
  ],
  "filter": {
    "from": "now-15m",
    "query": "@language:(python OR go)",
    "to": "now"
  },
  "group_by": [
    {
      "facet": "@git.branch",
      "limit": 10,
      "sort": {
        "order": "asc"
      },
      "total": false
    }
  ],
  "options": {
    "timezone": "GMT"
  }
}

Réponse

OK

The response object for the test events aggregate API endpoint.

Expand All

Champ

Type

Description

data

object

The query results.

buckets

[object]

The list of matching buckets, one item per bucket.

by

object

The key-value pairs for each group-by.

<any-key>

The values for each group-by.

computes

object

A map of the metric name to value for regular compute, or a list of values for a timeseries.

<any-key>

 <oneOf>

A bucket value, can either be a timeseries or a single value.

Option 1

string

A single string value.

Option 2

double

A single number value.

Option 3

[object]

A timeseries array.

time

date-time

The time value for this point.

value

double

The value for this point.

links

object

Links attributes.

next

string

Link for the next set of results. The request can also be made using the POST endpoint.

meta

object

The metadata associated with a request.

elapsed

int64

The time elapsed in milliseconds.

page

object

Paging attributes.

after

string

The cursor to use to get the next results, if any. To make the next request, use the same parameters with the addition of page[cursor].

request_id

string

The identifier of the request.

status

enum

The status of the response. Allowed enum values: done,timeout

warnings

[object]

A list of warnings (non-fatal errors) encountered. Partial results may return if warnings are present in the response.

code

string

A unique code for this type of warning.

detail

string

A detailed explanation of this specific warning.

title

string

A short human-readable summary of the warning.

{
  "data": {
    "buckets": [
      {
        "by": {
          "<any-key>": "undefined"
        },
        "computes": {
          "<any-key>": {
            "description": "undefined",
            "type": "undefined"
          }
        }
      }
    ]
  },
  "links": {
    "next": "https://app.datadoghq.com/api/v2/ci/tests/events?filter[query]=foo\u0026page[cursor]=eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ=="
  },
  "meta": {
    "elapsed": 132,
    "page": {
      "after": "eyJzdGFydEF0IjoiQVFBQUFYS2tMS3pPbm40NGV3QUFBQUJCV0V0clRFdDZVbG8zY3pCRmNsbHJiVmxDWlEifQ=="
    },
    "request_id": "MWlFUjVaWGZTTTZPYzM0VXp1OXU2d3xLSVpEMjZKQ0VKUTI0dEYtM3RSOFVR",
    "status": "done",
    "warnings": [
      {
        "code": "unknown_index",
        "detail": "indexes: foo, bar",
        "title": "One or several indexes are missing or invalid, results hold data from the other indexes"
      }
    ]
  }
}

Bad Request

API error response.

Expand All

Champ

Type

Description

errors [required]

[string]

A list of errors.

{
  "errors": [
    "Bad Request"
  ]
}

Not Authorized

API error response.

Expand All

Champ

Type

Description

errors [required]

[string]

A list of errors.

{
  "errors": [
    "Bad Request"
  ]
}

Too many requests

API error response.

Expand All

Champ

Type

Description

errors [required]

[string]

A list of errors.

{
  "errors": [
    "Bad Request"
  ]
}

Exemple de code

/**
 * Aggregate tests events returns "OK" response
 */

import { client, v2 } from "@datadog/datadog-api-client";

const configuration = client.createConfiguration();
const apiInstance = new v2.CIVisibilityTestsApi(configuration);

const params: v2.CIVisibilityTestsApiAggregateCIAppTestEventsRequest = {
  body: {
    compute: [
      {
        aggregation: "count",
        metric: "@test.is_flaky",
        type: "total",
      },
    ],
    filter: {
      from: "now-15m",
      query: "@language:(python OR go)",
      to: "now",
    },
    groupBy: [
      {
        facet: "@git.branch",
        limit: 10,
        sort: {
          order: "asc",
        },
        total: false,
      },
    ],
    options: {
      timezone: "GMT",
    },
  },
};

apiInstance
  .aggregateCIAppTestEvents(params)
  .then((data: v2.CIAppTestsAnalyticsAggregateResponse) => {
    console.log(
      "API called successfully. Returned data: " + JSON.stringify(data)
    );
  })
  .catch((error: any) => console.error(error));

Instructions

First install the library and its dependencies and then save the example to example.ts and run following commands:

    
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comddog-gov.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" tsc "example.ts"