여정 시계열 분석 계산하기
https://api.datadoghq.com/api/v2/product-analytics/journey/timeserieshttps://api.us3.datadoghq.com/api/v2/product-analytics/journey/timeserieshttps://api.us5.datadoghq.com/api/v2/product-analytics/journey/timeserieshttps://api.datadoghq.eu/api/v2/product-analytics/journey/timeserieshttps://api.ap1.datadoghq.com/api/v2/product-analytics/journey/timeserieshttps://api.ap2.datadoghq.com/api/v2/product-analytics/journey/timeserieshttps://api.uk1.datadoghq.com/api/v2/product-analytics/journey/timeserieshttps://api.ddog-gov.com/api/v2/product-analytics/journey/timeserieshttps://api.us2.ddog-gov.com/api/v2/product-analytics/journey/timeseries개요
여정 쿼리에 대한 시계열 결과를 계산합니다. 요청된 간격으로 버킷팅된 그룹화 조합당 하나의 시리즈를 반환합니다.
요청
Body Data (required)
data [required]여정 시계열 쿼리를 위한 요청 본문입니다.
attributes [required]Attributes of a journey timeseries request.
from [required]Start of the query window, in epoch milliseconds.
intervalTime bucket interval in milliseconds.
query [required]Query definition for a journey timeseries request.
compute [required]Defines the metric computed over the journey.
aggregation [required]Aggregation function: count, cardinality, avg, median, min, max, sum,
or a percentile of the form pc<N> such as pc95. Defaults to cardinality.
intervalTime bucket interval in milliseconds, used by timeseries queries.
metricMetric to aggregate on. Use a facet path such as @view.time_spent, or one of the
journey metrics __dd.conversion, __dd.conversion_rate, __dd.time_to_convert,
or __dd.dropoff_rate. Defaults to __dd.conversion.
targetA reference to a step, or a range of steps, in the journey.
Use a node target to name a single step, or a path target to name the range
between two steps.
<type=node>A reference to a single step of the journey.
type [required]The discriminator identifying a target that references a single step.
nodevalue [required]Alias of the targeted node.
<type=path>A reference to the range of steps between two nodes of the journey.
end [required]Alias of the node the path ends at.
start [required]Alias of the node the path starts at.
type [required]The discriminator identifying a target that references a range of steps.
pathgroup_bySegments the results by the values of one or more facets.
facet [required]Attribute path to group by.
limitMaximum number of groups to return. Omit it to let the service choose.
should_exclude_missingWhether to exclude entities that have no value for this facet.
falsesortSort configuration for group-by results.
aggregationThe aggregation function to sort by.
metricThe metric to sort by.
orderDirection of sort.
descasc, descsourceAudience dimension to group by, instead of an event facet.
product_analytics_audience_filters.users, product_analytics_audience_filters.accountstargetA reference to a step, or a range of steps, in the journey.
Use a node target to name a single step, or a path target to name the range
between two steps.
<type=node>A reference to a single step of the journey.
type [required]The discriminator identifying a target that references a single step.
nodevalue [required]Alias of the targeted node.
<type=path>A reference to the range of steps between two nodes of the journey.
end [required]Alias of the node the path ends at.
start [required]Alias of the node the path starts at.
type [required]The discriminator identifying a target that references a range of steps.
pathvalue_filtersRestricts the results to these facet values.
query_idCaller-defined identifier echoed back in the results.
search [required]Defines the steps of the journey and the filters applied to it.
expression [required]Expression combining the node aliases in order, for example A -> B -> C.
filtersFilters applied on top of the journey step expression.
audience_filtersRestricts the journey to an audience built from named sub-queries.
Sub-query names must be unique across users, segments, and accounts.
accountsNamed account sub-queries.
name [required]Unique name for this sub-query, referenced from formula.
querySearch query selecting the accounts.
formulaBoolean expression combining the sub-query names with AND, OR, and NOT.
When empty, all sub-queries are combined with AND.
segmentsNamed segment sub-queries.
name [required]Unique name for this sub-query, referenced from formula.
segment_id [required]Identifier of the saved segment.
usersNamed user sub-queries.
name [required]Unique name for this sub-query, referenced from formula.
querySearch query selecting the users.
graph_filtersFilters on journey-level metrics such as time to convert.
name [required]The journey-level metric the graph filter applies to.
__dd.time_to_convert, __dd.session, __dd.dropoff_rateoperator [required]Comparison operator applied to the graph filter value.
=, <, >, <=, >=targetA reference to a step, or a range of steps, in the journey.
Use a node target to name a single step, or a path target to name the range
between two steps.
<type=node>A reference to a single step of the journey.
type [required]The discriminator identifying a target that references a single step.
nodevalue [required]Alias of the targeted node.
<type=path>A reference to the range of steps between two nodes of the journey.
end [required]Alias of the node the path ends at.
start [required]Alias of the node the path starts at.
type [required]The discriminator identifying a target that references a range of steps.
pathvalue [required]Value compared against the metric. Durations are expressed in milliseconds.
string_filterFree-text search query applied to the whole journey.
join_keysIdentity join keys used to stitch events belonging to the same user or session.
primaryPrimary identity join key. Defaults to @session.id.
secondaryAdditional identity join keys.
node_objects [required]Map of node alias to the query matching that step of the journey.
Every alias used in expression must have an entry here.
<any-key>A query definition discriminated by the data_source field.
Use product_analytics for standard event queries, or
product_analytics_occurrence for occurrence-filtered queries.
<data_source=product_analytics>A standard Product Analytics event query.
data_source [required]The data source identifier.
product_analyticssearch [required]Search parameters for an event query.
queryThe search query using Datadog search syntax.
<data_source=product_analytics_occurrence>A Product Analytics occurrence-filtered query.
data_source [required]The data source identifier for occurrence queries.
product_analytics_occurrencesearch [required]Search parameters for an occurrence query.
occurrencesFilter for occurrence-based queries.
metaAdditional metadata.
<any-key>operator [required]Comparison operator (=, >=, <=, >, <).
value [required]The occurrence count threshold as a string.
queryThe search query using Datadog search syntax.
to [required]End of the query window, in epoch milliseconds.
type [required]The resource type identifier for a journey timeseries or scalar request.
formula_journey_request{
"data": {
"attributes": {
"from": 1756425600000,
"interval": "integer",
"query": {
"compute": {
"aggregation": "count",
"interval": "integer",
"metric": "string",
"target": {
"type": "node",
"value": "A"
}
},
"group_by": [
{
"facet": "@geo.country",
"limit": "integer",
"should_exclude_missing": false,
"sort": {
"aggregation": "count",
"metric": "string",
"order": "string"
},
"source": "product_analytics_audience_filters.users",
"target": {
"type": "node",
"value": "A"
},
"value_filters": []
}
],
"query_id": "string",
"search": {
"expression": "A -> B",
"filters": {
"audience_filters": {
"accounts": [
{
"name": "enterprise_accounts",
"query": "string"
}
],
"formula": "power_users AND NOT trial_segment",
"segments": [
{
"name": "trial_segment",
"segment_id": "00000000-0000-0000-0000-000000000000"
}
],
"users": [
{
"name": "power_users",
"query": "string"
}
]
},
"graph_filters": [
{
"name": "__dd.time_to_convert",
"operator": "<=",
"target": {
"type": "node",
"value": "A"
},
"value": 60000
}
],
"string_filter": "string"
},
"join_keys": {
"primary": "@session.id",
"secondary": []
},
"node_objects": {
"<any-key>": "undefined"
}
}
},
"to": 1756857600000
},
"type": "formula_journey_request"
}
}응답
OK
Response for a journey timeseries query.
data [required]The single JSON:API resource holding journey timeseries results. Its attributes contain one series per group along with the timestamps the points fall on.
attributes [required]Attributes of a timeseries analytics response, containing series data, timestamps, and interval definitions.
intervalsInterval definitions describing the time buckets used in the response.
millisecondsThe duration of each time bucket in milliseconds.
start_timeThe start of this interval as an epoch timestamp in milliseconds.
timesEpoch timestamps (in milliseconds) for each bucket in this interval.
typeThe interval type (e.g., fixed or auto-computed bucket size).
seriesThe list of series, each corresponding to a query or group-by combination.
group_tagsThe group-by tag values that identify this series.
query_indexThe index of the query that produced this series.
unitUnit definitions for the series values.
familyThe unit family (e.g., time, bytes).
idNumeric identifier for the unit.
nameThe full name of the unit (e.g., nanosecond).
pluralPlural form of the unit name (e.g., nanoseconds).
scale_factorConversion factor relative to the base unit of the family.
short_nameAbbreviated unit name (e.g., ns).
timesTimestamps for each data point (epoch milliseconds).
valuesValues for each series at each time point.
id [required]Identifier of this result.
type [required]The resource type identifier for a journey timeseries response.
journey_timeseries_response{
"data": {
"attributes": {
"intervals": [
{
"milliseconds": "integer",
"start_time": "integer",
"times": [],
"type": "string"
}
],
"series": [
{
"group_tags": [],
"query_index": "integer",
"unit": [
{
"family": "time",
"id": "integer",
"name": "nanosecond",
"plural": "string",
"scale_factor": "number",
"short_name": "string"
}
]
}
],
"times": [],
"values": []
},
"id": "00000000-0000-0000-0000-000000000000",
"type": "journey_timeseries_response"
}
}Bad Request
API error response.
errors [required]A list of errors.
{
"errors": [
"Bad Request"
]
}Not Authorized
API error response.
errors [required]A list of errors.
{
"errors": [
"Bad Request"
]
}Too many requests
API error response.
errors [required]A list of errors.
{
"errors": [
"Bad Request"
]
}코드 예시
# Set your Datadog site and credentials
export DD_SITE="datadoghq.com"
# Use a Personal Access Token or Service Access Token
export DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>"
curl -X POST "https://api.${DD_SITE}/api/v2/product-analytics/journey/timeseries" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${DD_BEARER_TOKEN}" \
-d @- << EOF
{
"data": {
"attributes": {
"from": 1756425600000,
"interval": 3600000,
"query": {
"compute": {
"aggregation": "count"
},
"search": {
"expression": "A -> B",
"node_objects": {
"A": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Login"
}
},
"B": {
"data_source": "product_analytics",
"search": {
"query": "@type:action @action.target.name:Submit"
}
}
}
}
},
"to": 1756857600000
},
"type": "formula_journey_request"
}
}
EOF# Set your Datadog site and credentials
export DD_SITE="us3.datadoghq.com"
# Use a Personal Access Token or Service Access Token
export DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>"
curl -X POST "https://api.${DD_SITE}/api/v2/product-analytics/journey/timeseries" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${DD_BEARER_TOKEN}" \
-d @- << EOF
{
"data": {
"attributes": {
"from": 1756425600000,
"interval": 3600000,
"query": {
"compute": {
"aggregation": "count"
},
"search": {
"expression": "A -> B",
"node_objects": {
"A": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Login"
}
},
"B": {
"data_source": "product_analytics",
"search": {
"query": "@type:action @action.target.name:Submit"
}
}
}
}
},
"to": 1756857600000
},
"type": "formula_journey_request"
}
}
EOF# Set your Datadog site and credentials
export DD_SITE="us5.datadoghq.com"
# Use a Personal Access Token or Service Access Token
export DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>"
curl -X POST "https://api.${DD_SITE}/api/v2/product-analytics/journey/timeseries" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${DD_BEARER_TOKEN}" \
-d @- << EOF
{
"data": {
"attributes": {
"from": 1756425600000,
"interval": 3600000,
"query": {
"compute": {
"aggregation": "count"
},
"search": {
"expression": "A -> B",
"node_objects": {
"A": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Login"
}
},
"B": {
"data_source": "product_analytics",
"search": {
"query": "@type:action @action.target.name:Submit"
}
}
}
}
},
"to": 1756857600000
},
"type": "formula_journey_request"
}
}
EOF# Set your Datadog site and credentials
export DD_SITE="datadoghq.eu"
# Use a Personal Access Token or Service Access Token
export DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>"
curl -X POST "https://api.${DD_SITE}/api/v2/product-analytics/journey/timeseries" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${DD_BEARER_TOKEN}" \
-d @- << EOF
{
"data": {
"attributes": {
"from": 1756425600000,
"interval": 3600000,
"query": {
"compute": {
"aggregation": "count"
},
"search": {
"expression": "A -> B",
"node_objects": {
"A": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Login"
}
},
"B": {
"data_source": "product_analytics",
"search": {
"query": "@type:action @action.target.name:Submit"
}
}
}
}
},
"to": 1756857600000
},
"type": "formula_journey_request"
}
}
EOF# Set your Datadog site and credentials
export DD_SITE="ap1.datadoghq.com"
# Use a Personal Access Token or Service Access Token
export DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>"
curl -X POST "https://api.${DD_SITE}/api/v2/product-analytics/journey/timeseries" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${DD_BEARER_TOKEN}" \
-d @- << EOF
{
"data": {
"attributes": {
"from": 1756425600000,
"interval": 3600000,
"query": {
"compute": {
"aggregation": "count"
},
"search": {
"expression": "A -> B",
"node_objects": {
"A": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Login"
}
},
"B": {
"data_source": "product_analytics",
"search": {
"query": "@type:action @action.target.name:Submit"
}
}
}
}
},
"to": 1756857600000
},
"type": "formula_journey_request"
}
}
EOF# Set your Datadog site and credentials
export DD_SITE="ap2.datadoghq.com"
# Use a Personal Access Token or Service Access Token
export DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>"
curl -X POST "https://api.${DD_SITE}/api/v2/product-analytics/journey/timeseries" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${DD_BEARER_TOKEN}" \
-d @- << EOF
{
"data": {
"attributes": {
"from": 1756425600000,
"interval": 3600000,
"query": {
"compute": {
"aggregation": "count"
},
"search": {
"expression": "A -> B",
"node_objects": {
"A": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Login"
}
},
"B": {
"data_source": "product_analytics",
"search": {
"query": "@type:action @action.target.name:Submit"
}
}
}
}
},
"to": 1756857600000
},
"type": "formula_journey_request"
}
}
EOF# Set your Datadog site and credentials
export DD_SITE="uk1.datadoghq.com"
# Use a Personal Access Token or Service Access Token
export DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>"
curl -X POST "https://api.${DD_SITE}/api/v2/product-analytics/journey/timeseries" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${DD_BEARER_TOKEN}" \
-d @- << EOF
{
"data": {
"attributes": {
"from": 1756425600000,
"interval": 3600000,
"query": {
"compute": {
"aggregation": "count"
},
"search": {
"expression": "A -> B",
"node_objects": {
"A": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Login"
}
},
"B": {
"data_source": "product_analytics",
"search": {
"query": "@type:action @action.target.name:Submit"
}
}
}
}
},
"to": 1756857600000
},
"type": "formula_journey_request"
}
}
EOF# Set your Datadog site and credentials
export DD_SITE="ddog-gov.com"
# Use a Personal Access Token or Service Access Token
export DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>"
curl -X POST "https://api.${DD_SITE}/api/v2/product-analytics/journey/timeseries" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${DD_BEARER_TOKEN}" \
-d @- << EOF
{
"data": {
"attributes": {
"from": 1756425600000,
"interval": 3600000,
"query": {
"compute": {
"aggregation": "count"
},
"search": {
"expression": "A -> B",
"node_objects": {
"A": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Login"
}
},
"B": {
"data_source": "product_analytics",
"search": {
"query": "@type:action @action.target.name:Submit"
}
}
}
}
},
"to": 1756857600000
},
"type": "formula_journey_request"
}
}
EOF# Set your Datadog site and credentials
export DD_SITE="us2.ddog-gov.com"
# Use a Personal Access Token or Service Access Token
export DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>"
curl -X POST "https://api.${DD_SITE}/api/v2/product-analytics/journey/timeseries" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${DD_BEARER_TOKEN}" \
-d @- << EOF
{
"data": {
"attributes": {
"from": 1756425600000,
"interval": 3600000,
"query": {
"compute": {
"aggregation": "count"
},
"search": {
"expression": "A -> B",
"node_objects": {
"A": {
"data_source": "product_analytics",
"search": {
"query": "@type:view @view.name:Login"
}
},
"B": {
"data_source": "product_analytics",
"search": {
"query": "@type:action @action.target.name:Submit"
}
}
}
}
},
"to": 1756857600000
},
"type": "formula_journey_request"
}
}
EOF// Compute journey timeseries analytics returns "OK" response
package main
import (
"context"
"encoding/json"
"fmt"
"os"
"github.com/DataDog/datadog-api-client-go/v2/api/datadog"
"github.com/DataDog/datadog-api-client-go/v2/api/datadogV2"
)
func main() {
body := datadogV2.ProductAnalyticsFormulaJourneyRequest{
Data: datadogV2.ProductAnalyticsFormulaJourneyRequestData{
Attributes: datadogV2.ProductAnalyticsFormulaJourneyRequestAttributes{
From: 1756425600000,
Query: datadogV2.ProductAnalyticsFormulaJourneyQuery{
Compute: datadogV2.ProductAnalyticsGraphQueryCompute{
Aggregation: "count",
Target: &datadogV2.ProductAnalyticsJourneyTarget{
ProductAnalyticsJourneyNodeTarget: &datadogV2.ProductAnalyticsJourneyNodeTarget{
Type: datadogV2.PRODUCTANALYTICSJOURNEYNODETARGETTYPE_NODE,
Value: "A",
}},
},
GroupBy: []datadogV2.ProductAnalyticsGraphQueryGroupBy{
{
Facet: "@geo.country",
ShouldExcludeMissing: datadog.PtrBool(false),
Sort: &datadogV2.ProductAnalyticsGroupBySort{
Aggregation: datadog.PtrString("count"),
Order: datadogV2.QUERYSORTORDER_DESC.Ptr(),
},
Source: datadogV2.PRODUCTANALYTICSGRAPHQUERYGROUPBYSOURCE_USERS.Ptr(),
Target: &datadogV2.ProductAnalyticsJourneyTarget{
ProductAnalyticsJourneyNodeTarget: &datadogV2.ProductAnalyticsJourneyNodeTarget{
Type: datadogV2.PRODUCTANALYTICSJOURNEYNODETARGETTYPE_NODE,
Value: "A",
}},
ValueFilters: []string{},
},
},
Search: datadogV2.ProductAnalyticsJourneySearch{
Expression: "A -> B",
Filters: &datadogV2.ProductAnalyticsJourneySearchFilters{
AudienceFilters: &datadogV2.ProductAnalyticsJourneyAudienceFilters{
Accounts: []datadogV2.ProductAnalyticsJourneyAudienceAccountQuery{
{
Name: "enterprise_accounts",
},
},
Formula: datadog.PtrString("power_users AND NOT trial_segment"),
Segments: []datadogV2.ProductAnalyticsJourneyAudienceSegmentQuery{
{
Name: "trial_segment",
SegmentId: "00000000-0000-0000-0000-000000000000",
},
},
Users: []datadogV2.ProductAnalyticsJourneyAudienceUserQuery{
{
Name: "power_users",
},
},
},
GraphFilters: []datadogV2.ProductAnalyticsJourneySearchGraphFilter{
{
Name: datadogV2.PRODUCTANALYTICSJOURNEYSEARCHGRAPHFILTERNAME_TIME_TO_CONVERT,
Operator: datadogV2.PRODUCTANALYTICSJOURNEYSEARCHGRAPHFILTEROPERATOR_LESS_THAN_OR_EQUAL,
Target: &datadogV2.ProductAnalyticsJourneyTarget{
ProductAnalyticsJourneyNodeTarget: &datadogV2.ProductAnalyticsJourneyNodeTarget{
Type: datadogV2.PRODUCTANALYTICSJOURNEYNODETARGETTYPE_NODE,
Value: "A",
}},
Value: 60000,
},
},
},
JoinKeys: &datadogV2.ProductAnalyticsJoinKeys{
Primary: datadog.PtrString("@session.id"),
Secondary: []string{},
},
NodeObjects: map[string]datadogV2.ProductAnalyticsBaseQuery{
"A": datadogV2.ProductAnalyticsBaseQuery{
ProductAnalyticsEventQuery: &datadogV2.ProductAnalyticsEventQuery{
DataSource: datadogV2.PRODUCTANALYTICSEVENTQUERYDATASOURCE_PRODUCT_ANALYTICS,
Search: datadogV2.ProductAnalyticsEventSearch{
Query: datadog.PtrString("@type:view @view.name:Login"),
},
}},
"B": datadogV2.ProductAnalyticsBaseQuery{
ProductAnalyticsEventQuery: &datadogV2.ProductAnalyticsEventQuery{
DataSource: datadogV2.PRODUCTANALYTICSEVENTQUERYDATASOURCE_PRODUCT_ANALYTICS,
Search: datadogV2.ProductAnalyticsEventSearch{
Query: datadog.PtrString("@type:action @action.target.name:Submit"),
},
}},
},
},
},
To: 1756857600000,
},
Type: datadogV2.PRODUCTANALYTICSFORMULAJOURNEYREQUESTTYPE_FORMULA_JOURNEY_REQUEST,
},
}
ctx := datadog.NewDefaultContext(context.Background())
ctx = context.WithValue(ctx, datadog.ContextAccessToken, os.Getenv("DD_BEARER_TOKEN"))
configuration := datadog.NewConfiguration()
configuration.SetUnstableOperationEnabled("v2.QueryProductAnalyticsJourneyTimeseries", true)
apiClient := datadog.NewAPIClient(configuration)
api := datadogV2.NewProductAnalyticsApi(apiClient)
resp, r, err := api.QueryProductAnalyticsJourneyTimeseries(ctx, body)
if err != nil {
fmt.Fprintf(os.Stderr, "Error when calling `ProductAnalyticsApi.QueryProductAnalyticsJourneyTimeseries`: %v\n", err)
fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
}
responseContent, _ := json.MarshalIndent(resp, "", " ")
fmt.Fprintf(os.Stdout, "Response from `ProductAnalyticsApi.QueryProductAnalyticsJourneyTimeseries`:\n%s\n", responseContent)
}
Instructions
First install the library and its dependencies and then save the example to main.go and run following commands:
DD_SITE="datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" go run "main.go"DD_SITE="us3.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" go run "main.go"DD_SITE="us5.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" go run "main.go"DD_SITE="datadoghq.eu" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" go run "main.go"DD_SITE="ap1.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" go run "main.go"DD_SITE="ap2.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" go run "main.go"DD_SITE="uk1.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" go run "main.go"DD_SITE="ddog-gov.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" go run "main.go"DD_SITE="us2.ddog-gov.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" go run "main.go"// Compute journey timeseries analytics returns "OK" response
import com.datadog.api.client.ApiClient;
import com.datadog.api.client.ApiException;
import com.datadog.api.client.v2.api.ProductAnalyticsApi;
import com.datadog.api.client.v2.model.ProductAnalyticsBaseQuery;
import com.datadog.api.client.v2.model.ProductAnalyticsEventQuery;
import com.datadog.api.client.v2.model.ProductAnalyticsEventQueryDataSource;
import com.datadog.api.client.v2.model.ProductAnalyticsEventSearch;
import com.datadog.api.client.v2.model.ProductAnalyticsFormulaJourneyQuery;
import com.datadog.api.client.v2.model.ProductAnalyticsFormulaJourneyRequest;
import com.datadog.api.client.v2.model.ProductAnalyticsFormulaJourneyRequestAttributes;
import com.datadog.api.client.v2.model.ProductAnalyticsFormulaJourneyRequestData;
import com.datadog.api.client.v2.model.ProductAnalyticsFormulaJourneyRequestType;
import com.datadog.api.client.v2.model.ProductAnalyticsGraphQueryCompute;
import com.datadog.api.client.v2.model.ProductAnalyticsGraphQueryGroupBy;
import com.datadog.api.client.v2.model.ProductAnalyticsGraphQueryGroupBySource;
import com.datadog.api.client.v2.model.ProductAnalyticsGroupBySort;
import com.datadog.api.client.v2.model.ProductAnalyticsJoinKeys;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyAudienceAccountQuery;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyAudienceFilters;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyAudienceSegmentQuery;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyAudienceUserQuery;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyNodeTarget;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyNodeTargetType;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneySearch;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneySearchFilters;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneySearchGraphFilter;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneySearchGraphFilterName;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneySearchGraphFilterOperator;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyTarget;
import com.datadog.api.client.v2.model.ProductAnalyticsJourneyTimeseriesResponse;
import com.datadog.api.client.v2.model.QuerySortOrder;
import java.util.Collections;
import java.util.Map;
public class Example {
public static void main(String[] args) {
ApiClient defaultClient = ApiClient.getDefaultApiClient();
defaultClient.setAccessToken(System.getenv("DD_BEARER_TOKEN"));
defaultClient.setUnstableOperationEnabled("v2.queryProductAnalyticsJourneyTimeseries", true);
ProductAnalyticsApi apiInstance = new ProductAnalyticsApi(defaultClient);
ProductAnalyticsFormulaJourneyRequest body =
new ProductAnalyticsFormulaJourneyRequest()
.data(
new ProductAnalyticsFormulaJourneyRequestData()
.attributes(
new ProductAnalyticsFormulaJourneyRequestAttributes()
.from(1756425600000L)
.query(
new ProductAnalyticsFormulaJourneyQuery()
.compute(
new ProductAnalyticsGraphQueryCompute()
.aggregation("count")
.target(
new ProductAnalyticsJourneyTarget(
new ProductAnalyticsJourneyNodeTarget()
.type(
ProductAnalyticsJourneyNodeTargetType
.NODE)
.value("A"))))
.groupBy(
Collections.singletonList(
new ProductAnalyticsGraphQueryGroupBy()
.facet("@geo.country")
.shouldExcludeMissing(false)
.sort(
new ProductAnalyticsGroupBySort()
.aggregation("count")
.order(QuerySortOrder.DESC))
.source(
ProductAnalyticsGraphQueryGroupBySource.USERS)
.target(
new ProductAnalyticsJourneyTarget(
new ProductAnalyticsJourneyNodeTarget()
.type(
ProductAnalyticsJourneyNodeTargetType
.NODE)
.value("A")))))
.search(
new ProductAnalyticsJourneySearch()
.expression("A -> B")
.filters(
new ProductAnalyticsJourneySearchFilters()
.audienceFilters(
new ProductAnalyticsJourneyAudienceFilters()
.accounts(
Collections.singletonList(
new ProductAnalyticsJourneyAudienceAccountQuery()
.name(
"enterprise_accounts")))
.formula(
"power_users AND NOT trial_segment")
.segments(
Collections.singletonList(
new ProductAnalyticsJourneyAudienceSegmentQuery()
.name("trial_segment")
.segmentId(
"00000000-0000-0000-0000-000000000000")))
.users(
Collections.singletonList(
new ProductAnalyticsJourneyAudienceUserQuery()
.name("power_users"))))
.graphFilters(
Collections.singletonList(
new ProductAnalyticsJourneySearchGraphFilter()
.name(
ProductAnalyticsJourneySearchGraphFilterName
.TIME_TO_CONVERT)
.operator(
ProductAnalyticsJourneySearchGraphFilterOperator
.LESS_THAN_OR_EQUAL)
.target(
new ProductAnalyticsJourneyTarget(
new ProductAnalyticsJourneyNodeTarget()
.type(
ProductAnalyticsJourneyNodeTargetType
.NODE)
.value("A")))
.value(60000L))))
.joinKeys(
new ProductAnalyticsJoinKeys()
.primary("@session.id"))
.nodeObjects(
Map.ofEntries(
Map.entry(
"A",
new ProductAnalyticsBaseQuery(
new ProductAnalyticsEventQuery()
.dataSource(
ProductAnalyticsEventQueryDataSource
.PRODUCT_ANALYTICS)
.search(
new ProductAnalyticsEventSearch()
.query(
"@type:view"
+ " @view.name:Login")))),
Map.entry(
"B",
new ProductAnalyticsBaseQuery(
new ProductAnalyticsEventQuery()
.dataSource(
ProductAnalyticsEventQueryDataSource
.PRODUCT_ANALYTICS)
.search(
new ProductAnalyticsEventSearch()
.query(
"@type:action"
+ " @action.target.name:Submit"))))))))
.to(1756857600000L))
.type(ProductAnalyticsFormulaJourneyRequestType.FORMULA_JOURNEY_REQUEST));
try {
ProductAnalyticsJourneyTimeseriesResponse result =
apiInstance.queryProductAnalyticsJourneyTimeseries(body);
System.out.println(result);
} catch (ApiException e) {
System.err.println(
"Exception when calling ProductAnalyticsApi#queryProductAnalyticsJourneyTimeseries");
System.err.println("Status code: " + e.getCode());
System.err.println("Reason: " + e.getResponseBody());
System.err.println("Response headers: " + e.getResponseHeaders());
e.printStackTrace();
}
}
}
Instructions
First install the library and its dependencies and then save the example to Example.java and run following commands:
DD_SITE="datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" java "Example.java"DD_SITE="us3.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" java "Example.java"DD_SITE="us5.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" java "Example.java"DD_SITE="datadoghq.eu" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" java "Example.java"DD_SITE="ap1.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" java "Example.java"DD_SITE="ap2.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" java "Example.java"DD_SITE="uk1.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" java "Example.java"DD_SITE="ddog-gov.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" java "Example.java"DD_SITE="us2.ddog-gov.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" java "Example.java""""
Compute journey timeseries analytics returns "OK" response
"""
from os import environ
from datadog_api_client import ApiClient, Configuration
from datadog_api_client.v2.api.product_analytics_api import ProductAnalyticsApi
from datadog_api_client.v2.model.product_analytics_event_query import ProductAnalyticsEventQuery
from datadog_api_client.v2.model.product_analytics_event_query_data_source import ProductAnalyticsEventQueryDataSource
from datadog_api_client.v2.model.product_analytics_event_search import ProductAnalyticsEventSearch
from datadog_api_client.v2.model.product_analytics_formula_journey_query import ProductAnalyticsFormulaJourneyQuery
from datadog_api_client.v2.model.product_analytics_formula_journey_request import ProductAnalyticsFormulaJourneyRequest
from datadog_api_client.v2.model.product_analytics_formula_journey_request_attributes import (
ProductAnalyticsFormulaJourneyRequestAttributes,
)
from datadog_api_client.v2.model.product_analytics_formula_journey_request_data import (
ProductAnalyticsFormulaJourneyRequestData,
)
from datadog_api_client.v2.model.product_analytics_formula_journey_request_type import (
ProductAnalyticsFormulaJourneyRequestType,
)
from datadog_api_client.v2.model.product_analytics_graph_query_compute import ProductAnalyticsGraphQueryCompute
from datadog_api_client.v2.model.product_analytics_graph_query_group_by import ProductAnalyticsGraphQueryGroupBy
from datadog_api_client.v2.model.product_analytics_graph_query_group_by_source import (
ProductAnalyticsGraphQueryGroupBySource,
)
from datadog_api_client.v2.model.product_analytics_group_by_sort import ProductAnalyticsGroupBySort
from datadog_api_client.v2.model.product_analytics_join_keys import ProductAnalyticsJoinKeys
from datadog_api_client.v2.model.product_analytics_journey_audience_account_query import (
ProductAnalyticsJourneyAudienceAccountQuery,
)
from datadog_api_client.v2.model.product_analytics_journey_audience_filters import (
ProductAnalyticsJourneyAudienceFilters,
)
from datadog_api_client.v2.model.product_analytics_journey_audience_segment_query import (
ProductAnalyticsJourneyAudienceSegmentQuery,
)
from datadog_api_client.v2.model.product_analytics_journey_audience_user_query import (
ProductAnalyticsJourneyAudienceUserQuery,
)
from datadog_api_client.v2.model.product_analytics_journey_node_target import ProductAnalyticsJourneyNodeTarget
from datadog_api_client.v2.model.product_analytics_journey_node_target_type import ProductAnalyticsJourneyNodeTargetType
from datadog_api_client.v2.model.product_analytics_journey_search import ProductAnalyticsJourneySearch
from datadog_api_client.v2.model.product_analytics_journey_search_filters import ProductAnalyticsJourneySearchFilters
from datadog_api_client.v2.model.product_analytics_journey_search_graph_filter import (
ProductAnalyticsJourneySearchGraphFilter,
)
from datadog_api_client.v2.model.product_analytics_journey_search_graph_filter_name import (
ProductAnalyticsJourneySearchGraphFilterName,
)
from datadog_api_client.v2.model.product_analytics_journey_search_graph_filter_operator import (
ProductAnalyticsJourneySearchGraphFilterOperator,
)
from datadog_api_client.v2.model.query_sort_order import QuerySortOrder
body = ProductAnalyticsFormulaJourneyRequest(
data=ProductAnalyticsFormulaJourneyRequestData(
attributes=ProductAnalyticsFormulaJourneyRequestAttributes(
_from=1756425600000,
query=ProductAnalyticsFormulaJourneyQuery(
compute=ProductAnalyticsGraphQueryCompute(
aggregation="count",
target=ProductAnalyticsJourneyNodeTarget(
type=ProductAnalyticsJourneyNodeTargetType.NODE,
value="A",
),
),
group_by=[
ProductAnalyticsGraphQueryGroupBy(
facet="@geo.country",
should_exclude_missing=False,
sort=ProductAnalyticsGroupBySort(
aggregation="count",
order=QuerySortOrder.DESC,
),
source=ProductAnalyticsGraphQueryGroupBySource.USERS,
target=ProductAnalyticsJourneyNodeTarget(
type=ProductAnalyticsJourneyNodeTargetType.NODE,
value="A",
),
value_filters=[],
),
],
search=ProductAnalyticsJourneySearch(
expression="A -> B",
filters=ProductAnalyticsJourneySearchFilters(
audience_filters=ProductAnalyticsJourneyAudienceFilters(
accounts=[
ProductAnalyticsJourneyAudienceAccountQuery(
name="enterprise_accounts",
),
],
formula="power_users AND NOT trial_segment",
segments=[
ProductAnalyticsJourneyAudienceSegmentQuery(
name="trial_segment",
segment_id="00000000-0000-0000-0000-000000000000",
),
],
users=[
ProductAnalyticsJourneyAudienceUserQuery(
name="power_users",
),
],
),
graph_filters=[
ProductAnalyticsJourneySearchGraphFilter(
name=ProductAnalyticsJourneySearchGraphFilterName.TIME_TO_CONVERT,
operator=ProductAnalyticsJourneySearchGraphFilterOperator.LESS_THAN_OR_EQUAL,
target=ProductAnalyticsJourneyNodeTarget(
type=ProductAnalyticsJourneyNodeTargetType.NODE,
value="A",
),
value=60000,
),
],
),
join_keys=ProductAnalyticsJoinKeys(
primary="@session.id",
secondary=[],
),
node_objects=dict(
A=ProductAnalyticsEventQuery(
data_source=ProductAnalyticsEventQueryDataSource.PRODUCT_ANALYTICS,
search=ProductAnalyticsEventSearch(
query="@type:view @view.name:Login",
),
),
B=ProductAnalyticsEventQuery(
data_source=ProductAnalyticsEventQueryDataSource.PRODUCT_ANALYTICS,
search=ProductAnalyticsEventSearch(
query="@type:action @action.target.name:Submit",
),
),
),
),
),
to=1756857600000,
),
type=ProductAnalyticsFormulaJourneyRequestType.FORMULA_JOURNEY_REQUEST,
),
)
configuration = Configuration()
configuration.access_token = environ["DD_BEARER_TOKEN"]
configuration.unstable_operations["query_product_analytics_journey_timeseries"] = True
with ApiClient(configuration) as api_client:
api_instance = ProductAnalyticsApi(api_client)
response = api_instance.query_product_analytics_journey_timeseries(body=body)
print(response)
Instructions
First install the library and its dependencies and then save the example to example.py and run following commands:
DD_SITE="datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" python3 "example.py"DD_SITE="us3.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" python3 "example.py"DD_SITE="us5.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" python3 "example.py"DD_SITE="datadoghq.eu" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" python3 "example.py"DD_SITE="ap1.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" python3 "example.py"DD_SITE="ap2.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" python3 "example.py"DD_SITE="uk1.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" python3 "example.py"DD_SITE="ddog-gov.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" python3 "example.py"DD_SITE="us2.ddog-gov.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" python3 "example.py"# Compute journey timeseries analytics returns "OK" response
require "datadog_api_client"
DatadogAPIClient.configure do |config|
config.access_token = ENV["DD_BEARER_TOKEN"]
config.unstable_operations["v2.query_product_analytics_journey_timeseries".to_sym] = true
end
api_instance = DatadogAPIClient::V2::ProductAnalyticsAPI.new
body = DatadogAPIClient::V2::ProductAnalyticsFormulaJourneyRequest.new({
data: DatadogAPIClient::V2::ProductAnalyticsFormulaJourneyRequestData.new({
attributes: DatadogAPIClient::V2::ProductAnalyticsFormulaJourneyRequestAttributes.new({
from: 1756425600000,
query: DatadogAPIClient::V2::ProductAnalyticsFormulaJourneyQuery.new({
compute: DatadogAPIClient::V2::ProductAnalyticsGraphQueryCompute.new({
aggregation: "count",
target: DatadogAPIClient::V2::ProductAnalyticsJourneyNodeTarget.new({
type: DatadogAPIClient::V2::ProductAnalyticsJourneyNodeTargetType::NODE,
value: "A",
}),
}),
group_by: [
DatadogAPIClient::V2::ProductAnalyticsGraphQueryGroupBy.new({
facet: "@geo.country",
should_exclude_missing: false,
sort: DatadogAPIClient::V2::ProductAnalyticsGroupBySort.new({
aggregation: "count",
order: DatadogAPIClient::V2::QuerySortOrder::DESC,
}),
source: DatadogAPIClient::V2::ProductAnalyticsGraphQueryGroupBySource::USERS,
target: DatadogAPIClient::V2::ProductAnalyticsJourneyNodeTarget.new({
type: DatadogAPIClient::V2::ProductAnalyticsJourneyNodeTargetType::NODE,
value: "A",
}),
value_filters: [],
}),
],
search: DatadogAPIClient::V2::ProductAnalyticsJourneySearch.new({
expression: "A -> B",
filters: DatadogAPIClient::V2::ProductAnalyticsJourneySearchFilters.new({
audience_filters: DatadogAPIClient::V2::ProductAnalyticsJourneyAudienceFilters.new({
accounts: [
DatadogAPIClient::V2::ProductAnalyticsJourneyAudienceAccountQuery.new({
name: "enterprise_accounts",
}),
],
formula: "power_users AND NOT trial_segment",
segments: [
DatadogAPIClient::V2::ProductAnalyticsJourneyAudienceSegmentQuery.new({
name: "trial_segment",
segment_id: "00000000-0000-0000-0000-000000000000",
}),
],
users: [
DatadogAPIClient::V2::ProductAnalyticsJourneyAudienceUserQuery.new({
name: "power_users",
}),
],
}),
graph_filters: [
DatadogAPIClient::V2::ProductAnalyticsJourneySearchGraphFilter.new({
name: DatadogAPIClient::V2::ProductAnalyticsJourneySearchGraphFilterName::TIME_TO_CONVERT,
operator: DatadogAPIClient::V2::ProductAnalyticsJourneySearchGraphFilterOperator::LESS_THAN_OR_EQUAL,
target: DatadogAPIClient::V2::ProductAnalyticsJourneyNodeTarget.new({
type: DatadogAPIClient::V2::ProductAnalyticsJourneyNodeTargetType::NODE,
value: "A",
}),
value: 60000,
}),
],
}),
join_keys: DatadogAPIClient::V2::ProductAnalyticsJoinKeys.new({
primary: "@session.id",
secondary: [],
}),
node_objects: {
A: DatadogAPIClient::V2::ProductAnalyticsEventQuery.new({
data_source: DatadogAPIClient::V2::ProductAnalyticsEventQueryDataSource::PRODUCT_ANALYTICS,
search: DatadogAPIClient::V2::ProductAnalyticsEventSearch.new({
query: "@type:view @view.name:Login",
}),
}), B: DatadogAPIClient::V2::ProductAnalyticsEventQuery.new({
data_source: DatadogAPIClient::V2::ProductAnalyticsEventQueryDataSource::PRODUCT_ANALYTICS,
search: DatadogAPIClient::V2::ProductAnalyticsEventSearch.new({
query: "@type:action @action.target.name:Submit",
}),
}),
},
}),
}),
to: 1756857600000,
}),
type: DatadogAPIClient::V2::ProductAnalyticsFormulaJourneyRequestType::FORMULA_JOURNEY_REQUEST,
}),
})
p api_instance.query_product_analytics_journey_timeseries(body)
Instructions
First install the library and its dependencies and then save the example to example.rb and run following commands:
DD_SITE="datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" rb "example.rb"DD_SITE="us3.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" rb "example.rb"DD_SITE="us5.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" rb "example.rb"DD_SITE="datadoghq.eu" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" rb "example.rb"DD_SITE="ap1.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" rb "example.rb"DD_SITE="ap2.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" rb "example.rb"DD_SITE="uk1.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" rb "example.rb"DD_SITE="ddog-gov.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" rb "example.rb"DD_SITE="us2.ddog-gov.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" rb "example.rb"// Compute journey timeseries analytics returns "OK" response
use datadog_api_client::datadog;
use datadog_api_client::datadogV2::api_product_analytics::ProductAnalyticsAPI;
use datadog_api_client::datadogV2::model::ProductAnalyticsBaseQuery;
use datadog_api_client::datadogV2::model::ProductAnalyticsEventQuery;
use datadog_api_client::datadogV2::model::ProductAnalyticsEventQueryDataSource;
use datadog_api_client::datadogV2::model::ProductAnalyticsEventSearch;
use datadog_api_client::datadogV2::model::ProductAnalyticsFormulaJourneyQuery;
use datadog_api_client::datadogV2::model::ProductAnalyticsFormulaJourneyRequest;
use datadog_api_client::datadogV2::model::ProductAnalyticsFormulaJourneyRequestAttributes;
use datadog_api_client::datadogV2::model::ProductAnalyticsFormulaJourneyRequestData;
use datadog_api_client::datadogV2::model::ProductAnalyticsFormulaJourneyRequestType;
use datadog_api_client::datadogV2::model::ProductAnalyticsGraphQueryCompute;
use datadog_api_client::datadogV2::model::ProductAnalyticsGraphQueryGroupBy;
use datadog_api_client::datadogV2::model::ProductAnalyticsGraphQueryGroupBySource;
use datadog_api_client::datadogV2::model::ProductAnalyticsGroupBySort;
use datadog_api_client::datadogV2::model::ProductAnalyticsJoinKeys;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneyAudienceAccountQuery;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneyAudienceFilters;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneyAudienceSegmentQuery;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneyAudienceUserQuery;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneyNodeTarget;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneyNodeTargetType;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneySearch;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneySearchFilters;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneySearchGraphFilter;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneySearchGraphFilterName;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneySearchGraphFilterOperator;
use datadog_api_client::datadogV2::model::ProductAnalyticsJourneyTarget;
use datadog_api_client::datadogV2::model::QuerySortOrder;
use std::collections::BTreeMap;
#[tokio::main]
async fn main() {
let body =
ProductAnalyticsFormulaJourneyRequest::new(
ProductAnalyticsFormulaJourneyRequestData::new(
ProductAnalyticsFormulaJourneyRequestAttributes::new(
1756425600000,
ProductAnalyticsFormulaJourneyQuery::new(
ProductAnalyticsGraphQueryCompute::new(
"count".to_string(),
).target(
ProductAnalyticsJourneyTarget::ProductAnalyticsJourneyNodeTarget(
Box::new(
ProductAnalyticsJourneyNodeTarget::new(
ProductAnalyticsJourneyNodeTargetType::NODE,
"A".to_string(),
),
),
),
),
ProductAnalyticsJourneySearch::new(
"A -> B".to_string(),
BTreeMap::from(
[
(
"A".to_string(),
ProductAnalyticsBaseQuery::ProductAnalyticsEventQuery(
Box::new(
ProductAnalyticsEventQuery::new(
ProductAnalyticsEventQueryDataSource::PRODUCT_ANALYTICS,
ProductAnalyticsEventSearch
::new().query("@type:view @view.name:Login".to_string()),
),
),
),
),
(
"B".to_string(),
ProductAnalyticsBaseQuery::ProductAnalyticsEventQuery(
Box::new(
ProductAnalyticsEventQuery::new(
ProductAnalyticsEventQueryDataSource::PRODUCT_ANALYTICS,
ProductAnalyticsEventSearch
::new().query(
"@type:action @action.target.name:Submit".to_string(),
),
),
),
),
),
],
),
)
.filters(
ProductAnalyticsJourneySearchFilters::new()
.audience_filters(
ProductAnalyticsJourneyAudienceFilters::new()
.accounts(
vec![
ProductAnalyticsJourneyAudienceAccountQuery::new(
"enterprise_accounts".to_string(),
)
],
)
.formula("power_users AND NOT trial_segment".to_string())
.segments(
vec![
ProductAnalyticsJourneyAudienceSegmentQuery::new(
"trial_segment".to_string(),
"00000000-0000-0000-0000-000000000000".to_string(),
)
],
)
.users(
vec![
ProductAnalyticsJourneyAudienceUserQuery::new(
"power_users".to_string(),
)
],
),
)
.graph_filters(
vec![
ProductAnalyticsJourneySearchGraphFilter::new(
ProductAnalyticsJourneySearchGraphFilterName::TIME_TO_CONVERT,
ProductAnalyticsJourneySearchGraphFilterOperator::LESS_THAN_OR_EQUAL,
60000,
).target(
ProductAnalyticsJourneyTarget::ProductAnalyticsJourneyNodeTarget(
Box::new(
ProductAnalyticsJourneyNodeTarget::new(
ProductAnalyticsJourneyNodeTargetType::NODE,
"A".to_string(),
),
),
),
)
],
),
)
.join_keys(
ProductAnalyticsJoinKeys::new().primary("@session.id".to_string()).secondary(vec![]),
),
).group_by(
vec![
ProductAnalyticsGraphQueryGroupBy::new("@geo.country".to_string())
.should_exclude_missing(false)
.sort(
ProductAnalyticsGroupBySort::new()
.aggregation("count".to_string())
.order(QuerySortOrder::DESC),
)
.source(ProductAnalyticsGraphQueryGroupBySource::USERS)
.target(
ProductAnalyticsJourneyTarget::ProductAnalyticsJourneyNodeTarget(
Box::new(
ProductAnalyticsJourneyNodeTarget::new(
ProductAnalyticsJourneyNodeTargetType::NODE,
"A".to_string(),
),
),
),
)
.value_filters(vec![])
],
),
1756857600000,
),
ProductAnalyticsFormulaJourneyRequestType::FORMULA_JOURNEY_REQUEST,
),
);
let mut configuration = datadog::Configuration::new();
configuration
.set_unstable_operation_enabled("v2.query_product_analytics_journey_timeseries", true);
let api = ProductAnalyticsAPI::with_config(configuration);
let resp = api.query_product_analytics_journey_timeseries(body).await;
if let Ok(value) = resp {
println!("{:#?}", value);
} else {
println!("{:#?}", resp.unwrap_err());
}
}
Instructions
First install the library and its dependencies and then save the example to src/main.rs and run following commands:
DD_SITE="datadoghq.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" cargo runDD_SITE="us3.datadoghq.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" cargo runDD_SITE="us5.datadoghq.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" cargo runDD_SITE="datadoghq.eu" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" cargo runDD_SITE="ap1.datadoghq.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" cargo runDD_SITE="ap2.datadoghq.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" cargo runDD_SITE="uk1.datadoghq.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" cargo runDD_SITE="ddog-gov.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" cargo runDD_SITE="us2.ddog-gov.com" DD_API_KEY="<API-KEY>" DD_APP_KEY="<APP-KEY>" cargo run/**
* Compute journey timeseries analytics returns "OK" response
*/
import { client, v2 } from "@datadog/datadog-api-client";
const configuration = client.createConfiguration({
authMethods: {
AuthZ: {
accessToken: process.env.DD_BEARER_TOKEN as string,
},
},
});
configuration.unstableOperations["v2.queryProductAnalyticsJourneyTimeseries"] =
true;
const apiInstance = new v2.ProductAnalyticsApi(configuration);
const params: v2.ProductAnalyticsApiQueryProductAnalyticsJourneyTimeseriesRequest =
{
body: {
data: {
attributes: {
from: 1756425600000,
query: {
compute: {
aggregation: "count",
target: {
type: "node",
value: "A",
},
},
groupBy: [
{
facet: "@geo.country",
shouldExcludeMissing: false,
sort: {
aggregation: "count",
order: "desc",
},
source: "product_analytics_audience_filters.users",
target: {
type: "node",
value: "A",
},
valueFilters: [],
},
],
search: {
expression: "A -> B",
filters: {
audienceFilters: {
accounts: [
{
name: "enterprise_accounts",
},
],
formula: "power_users AND NOT trial_segment",
segments: [
{
name: "trial_segment",
segmentId: "00000000-0000-0000-0000-000000000000",
},
],
users: [
{
name: "power_users",
},
],
},
graphFilters: [
{
name: "__dd.time_to_convert",
operator: "<=",
target: {
type: "node",
value: "A",
},
value: 60000,
},
],
},
joinKeys: {
primary: "@session.id",
secondary: [],
},
nodeObjects: {
A: {
dataSource: "product_analytics",
search: {
query: "@type:view @view.name:Login",
},
},
B: {
dataSource: "product_analytics",
search: {
query: "@type:action @action.target.name:Submit",
},
},
},
},
},
to: 1756857600000,
},
type: "formula_journey_request",
},
},
};
apiInstance
.queryProductAnalyticsJourneyTimeseries(params)
.then((data: v2.ProductAnalyticsJourneyTimeseriesResponse) => {
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.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" tsc "example.ts"DD_SITE="us3.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" tsc "example.ts"DD_SITE="us5.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" tsc "example.ts"DD_SITE="datadoghq.eu" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" tsc "example.ts"DD_SITE="ap1.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" tsc "example.ts"DD_SITE="ap2.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" tsc "example.ts"DD_SITE="uk1.datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" tsc "example.ts"DD_SITE="ddog-gov.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" tsc "example.ts"DD_SITE="us2.ddog-gov.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" tsc "example.ts"