From 1c25156bc8fc8726f2e22a37bb6cf56831a055de Mon Sep 17 00:00:00 2001 From: Google APIs Date: Tue, 16 Jun 2020 23:30:36 -0700 Subject: [PATCH] Add protos and configs for the Google Analytics Data API v1 alpha. PiperOrigin-RevId: 316832151 --- google/analytics/data/v1alpha/BUILD.bazel | 358 ++++++++++ .../data/v1alpha/analytics_data_api.proto | 306 +++++++++ .../analytics_data_grpc_service_config.json | 36 + .../data/v1alpha/analyticsdata_gapic.yaml | 18 + .../data/v1alpha/analyticsdata_v1alpha.yaml | 23 + google/analytics/data/v1alpha/data.proto | 614 ++++++++++++++++++ 6 files changed, 1355 insertions(+) create mode 100644 google/analytics/data/v1alpha/BUILD.bazel create mode 100644 google/analytics/data/v1alpha/analytics_data_api.proto create mode 100644 google/analytics/data/v1alpha/analytics_data_grpc_service_config.json create mode 100644 google/analytics/data/v1alpha/analyticsdata_gapic.yaml create mode 100644 google/analytics/data/v1alpha/analyticsdata_v1alpha.yaml create mode 100644 google/analytics/data/v1alpha/data.proto diff --git a/google/analytics/data/v1alpha/BUILD.bazel b/google/analytics/data/v1alpha/BUILD.bazel new file mode 100644 index 00000000..79c1176d --- /dev/null +++ b/google/analytics/data/v1alpha/BUILD.bazel @@ -0,0 +1,358 @@ +# This file was automatically generated by BuildFileGenerator + +# This is an API workspace, having public visibility by default makes perfect sense. +package(default_visibility = ["//visibility:public"]) + +############################################################################## +# Common +############################################################################## +load("@rules_proto//proto:defs.bzl", "proto_library") +load("@com_google_googleapis_imports//:imports.bzl", "proto_library_with_info") + +proto_library( + name = "data_proto", + srcs = [ + "analytics_data_api.proto", + "data.proto", + ], + deps = [ + "//google/api:annotations_proto", + "//google/api:client_proto", + ], +) + +proto_library_with_info( + name = "data_proto_with_info", + deps = [ + ":data_proto", + "//google/cloud:common_resources_proto", + ], +) + +############################################################################## +# Java +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "java_gapic_assembly_gradle_pkg", + "java_gapic_library", + "java_gapic_test", + "java_grpc_library", + "java_proto_library", +) + +java_proto_library( + name = "data_java_proto", + deps = [":data_proto"], +) + +java_grpc_library( + name = "data_java_grpc", + srcs = [":data_proto"], + deps = [":data_java_proto"], +) + +java_gapic_library( + name = "data_java_gapic", + src = ":data_proto_with_info", + gapic_yaml = "analyticsdata_gapic.yaml", + grpc_service_config = "analytics_data_grpc_service_config.json", + package = "google.analytics.data.v1alpha", + service_yaml = "analyticsdata_v1alpha.yaml", + test_deps = [ + ":data_java_grpc", + ], + deps = [ + ":data_java_proto", + ], +) + +java_gapic_test( + name = "data_java_gapic_test_suite", + test_classes = [ + "com.google.analytics.data.v1alpha.AlphaAnalyticsDataClientTest", + ], + runtime_deps = [":data_java_gapic_test"], +) + +# Open Source Packages +java_gapic_assembly_gradle_pkg( + name = "analytics-data-v1alpha-java", + deps = [ + ":data_java_gapic", + ":data_java_grpc", + ":data_java_proto", + ":data_proto", + ], +) + +############################################################################## +# Go +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "go_gapic_assembly_pkg", + "go_gapic_library", + "go_proto_library", + "go_test", +) + +go_proto_library( + name = "data_go_proto", + compilers = ["@io_bazel_rules_go//proto:go_grpc"], + importpath = "google.golang.org/genproto/googleapis/analytics/data/v1alpha", + protos = [":data_proto"], + deps = [ + "//google/api:annotations_go_proto", + ], +) + +go_gapic_library( + name = "data_go_gapic", + srcs = [":data_proto_with_info"], + grpc_service_config = "analytics_data_grpc_service_config.json", + importpath = "google.golang.org/google/analytics/data/v1alpha;data", + service_yaml = "analyticsdata_v1alpha.yaml", + deps = [ + ":data_go_proto", + ], +) + +go_test( + name = "data_go_gapic_test", + srcs = [":data_go_gapic_srcjar_test"], + embed = [":data_go_gapic"], + importpath = "google.golang.org/google/analytics/data/v1alpha", +) + +# Open Source Packages +go_gapic_assembly_pkg( + name = "gapi-cloud-analytics-data-v1alpha-go", + deps = [ + ":data_go_gapic", + ":data_go_gapic_srcjar-test.srcjar", + ":data_go_proto", + ], +) + +############################################################################## +# Python +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "moved_proto_library", + "py_gapic_assembly_pkg", + "py_gapic_library", + "py_grpc_library", + "py_proto_library", +) + +moved_proto_library( + name = "data_moved_proto", + srcs = [":data_proto"], + deps = [ + "//google/api:annotations_proto", + "//google/api:client_proto", + ], +) + +py_proto_library( + name = "data_py_proto", + plugin = "@protoc_docs_plugin//:docs_plugin", + deps = [":data_moved_proto"], +) + +py_grpc_library( + name = "data_py_grpc", + srcs = [":data_moved_proto"], + deps = [":data_py_proto"], +) + +py_gapic_library( + name = "data_py_gapic", + src = ":data_proto_with_info", + gapic_yaml = "analyticsdata_gapic.yaml", + grpc_service_config = "analytics_data_grpc_service_config.json", + package = "google.analytics.data.v1alpha", + service_yaml = "analyticsdata_v1alpha.yaml", + deps = [ + ":data_py_grpc", + ":data_py_proto", + ], +) + +# Open Source Packages +py_gapic_assembly_pkg( + name = "analytics-data-v1alpha-py", + deps = [ + ":data_py_gapic", + ":data_py_grpc", + ":data_py_proto", + ], +) + +############################################################################## +# PHP +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "php_gapic_assembly_pkg", + "php_gapic_library", + "php_grpc_library", + "php_proto_library", +) + +php_proto_library( + name = "data_php_proto", + deps = [":data_proto"], +) + +php_grpc_library( + name = "data_php_grpc", + srcs = [":data_proto"], + deps = [":data_php_proto"], +) + +php_gapic_library( + name = "data_php_gapic", + src = ":data_proto_with_info", + gapic_yaml = "analyticsdata_gapic.yaml", + grpc_service_config = "analytics_data_grpc_service_config.json", + package = "google.analytics.data.v1alpha", + service_yaml = "analyticsdata_v1alpha.yaml", + deps = [ + ":data_php_grpc", + ":data_php_proto", + ], +) + +# Open Source Packages +php_gapic_assembly_pkg( + name = "analytics-data-v1alpha-php", + deps = [ + ":data_php_gapic", + ":data_php_grpc", + ":data_php_proto", + ], +) + +############################################################################## +# Node.js +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "nodejs_gapic_assembly_pkg", + "nodejs_gapic_library", +) + +nodejs_gapic_library( + name = "data_nodejs_gapic", + src = ":data_proto_with_info", + grpc_service_config = "analytics_data_grpc_service_config.json", + package = "google.analytics.data.v1alpha", + service_yaml = "analyticsdata_v1alpha.yaml", + deps = [], +) + +nodejs_gapic_assembly_pkg( + name = "analytics-data-v1alpha-nodejs", + deps = [ + ":data_nodejs_gapic", + ":data_proto", + ], +) + +############################################################################## +# Ruby +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "ruby_gapic_assembly_pkg", + "ruby_gapic_library", + "ruby_grpc_library", + "ruby_proto_library", +) + +ruby_proto_library( + name = "data_ruby_proto", + deps = [":data_proto"], +) + +ruby_grpc_library( + name = "data_ruby_grpc", + srcs = [":data_proto"], + deps = [":data_ruby_proto"], +) + +ruby_gapic_library( + name = "data_ruby_gapic", + src = ":data_proto_with_info", + gapic_yaml = "analyticsdata_gapic.yaml", + grpc_service_config = "analytics_data_grpc_service_config.json", + package = "google.analytics.data.v1alpha", + service_yaml = "analyticsdata_v1alpha.yaml", + deps = [ + ":data_ruby_grpc", + ":data_ruby_proto", + ], +) + +# Open Source Packages +ruby_gapic_assembly_pkg( + name = "analytics-data-v1alpha-ruby", + deps = [ + ":data_ruby_gapic", + ":data_ruby_grpc", + ":data_ruby_proto", + ], +) + +############################################################################## +# C# +############################################################################## +load( + "@com_google_googleapis_imports//:imports.bzl", + "csharp_gapic_assembly_pkg", + "csharp_gapic_library", + "csharp_grpc_library", + "csharp_proto_library", +) + +csharp_proto_library( + name = "data_csharp_proto", + deps = [":data_proto"], +) + +csharp_grpc_library( + name = "data_csharp_grpc", + srcs = [":data_proto"], + deps = [":data_csharp_proto"], +) + +csharp_gapic_library( + name = "data_csharp_gapic", + src = ":data_proto_with_info", + gapic_yaml = "analyticsdata_gapic.yaml", + grpc_service_config = "analytics_data_grpc_service_config.json", + package = "google.analytics.data.v1alpha", + service_yaml = "analyticsdata_v1alpha.yaml", + deps = [ + ":data_csharp_grpc", + ":data_csharp_proto", + ], +) + +# Open Source Packages +csharp_gapic_assembly_pkg( + name = "analytics-data-v1alpha-csharp", + deps = [ + ":data_csharp_gapic", + ":data_csharp_grpc", + ":data_csharp_proto", + ], +) + +############################################################################## +# C++ +############################################################################## +# Put your C++ rules here diff --git a/google/analytics/data/v1alpha/analytics_data_api.proto b/google/analytics/data/v1alpha/analytics_data_api.proto new file mode 100644 index 00000000..b2b03120 --- /dev/null +++ b/google/analytics/data/v1alpha/analytics_data_api.proto @@ -0,0 +1,306 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.analytics.data.v1alpha; + +import "google/analytics/data/v1alpha/data.proto"; +import "google/api/annotations.proto"; +import "google/api/client.proto"; + +option go_package = "google.golang.org/genproto/googleapis/analytics/data/v1alpha;data"; +option java_multiple_files = true; +option java_outer_classname = "AnalyticsDataApiProto"; +option java_package = "com.google.analytics.data.v1alpha"; + +// Google Analytics reporting data service. +service AlphaAnalyticsData { + option (google.api.default_host) = "analyticsdata.googleapis.com"; + option (google.api.oauth_scopes) = + "https://www.googleapis.com/auth/analytics," + "https://www.googleapis.com/auth/analytics.readonly"; + + // Returns a customized report of your Google Analytics event data. Reports + // contain statistics derived from data collected by the Google Analytics + // tracking code. The data returned from the API is as a table with columns + // for the requested dimensions and metrics. Metrics are individual + // measurements of user activity on your property, such as active users or + // event count. Dimensions break down metrics across some common criteria, + // such as country or event name. + rpc RunReport(RunReportRequest) returns (RunReportResponse) { + option (google.api.http) = { + post: "/v1alpha:runReport" + body: "*" + }; + } + + // Returns a customized pivot report of your Google Analytics event data. + // Pivot reports are more advanced and expressive formats than regular + // reports. In a pivot report, dimensions are only visible if they are + // included in a pivot. Multiple pivots can be specified to further dissect + // your data. + rpc RunPivotReport(RunPivotReportRequest) returns (RunPivotReportResponse) { + option (google.api.http) = { + post: "/v1alpha:runPivotReport" + body: "*" + }; + } + + // Returns multiple reports in a batch. All reports must be for the same + // Entity. + rpc BatchRunReports(BatchRunReportsRequest) returns (BatchRunReportsResponse) { + option (google.api.http) = { + post: "/v1alpha:batchRunReports" + body: "*" + }; + } + + // Returns multiple pivot reports in a batch. All reports must be for the same + // Entity. + rpc BatchRunPivotReports(BatchRunPivotReportsRequest) returns (BatchRunPivotReportsResponse) { + option (google.api.http) = { + post: "/v1alpha:batchRunPivotReports" + body: "*" + }; + } +} + +// The request to generate a report. +message RunReportRequest { + // A property whose events are tracked. Within a batch request, this entity + // should either be unspecified or consistent with the batch-level entity. + Entity entity = 1; + + // The dimensions requested and displayed. + repeated Dimension dimensions = 2; + + // The metrics requested and displayed. + repeated Metric metrics = 3; + + // Date ranges of data to read. If multiple date ranges are requested, each + // response row will contain a zero based date range index. If two date + // ranges overlap, the event data for the overlapping days is included in the + // response rows for both date ranges. + repeated DateRange date_ranges = 4; + + // The row count of the start row. The first row is counted as row 0. + int64 offset = 5; + + // The number of rows to return. + // If zero or unspecified, all rows are returned. + int64 limit = 6; + + // Aggregation of metrics. Aggregated metric values will be shown in rows + // where the dimension_values are set to "RESERVED_(MetricAggregation)". + repeated MetricAggregation metric_aggregations = 7; + + // The filter clause of dimensions. + FilterExpression dimension_filter = 8; + + // The filter clause of metrics. Applied at post aggregation phase, similar to + // SQL having-clause. + FilterExpression metric_filter = 9; + + // Specifies how rows are ordered in the response. + repeated OrderBy order_bys = 10; + + // A currency code in ISO4217 format, such as "AED", "USD", "JPY". + // If the field is empty, the report uses the entity's default currency. + string currency_code = 11; + + // Cohort group associated with this request. If there is a cohort group + // in the request the 'cohort' dimension must be present. + CohortSpec cohort_spec = 12; + + // If false, rows with metrics being 0 will not be returned. + bool keep_empty_rows = 13; + + // Toggles whether to return the current state of this Analytics Property's + // quota. Quota is returned in [PropertyQuota](#PropertyQuota). + bool return_property_quota = 14; +} + +// The response report table corresponding to a request. +message RunReportResponse { + // Describes metric columns. + repeated MetricHeader metric_headers = 1; + + // Rows of dimension value combinations and metric values in the report. + repeated Row rows = 2; + + // If requested, the totaled values of metrics. + repeated Row totals = 8; + + // If requested, the maximum values of metrics. + repeated Row maximums = 9; + + // If requested, the minimum values of metrics. + repeated Row minimums = 10; + + // Metadata for the report. + ResponseMetaData metadata = 6; + + // This Analytics Property's quota state including this request. + PropertyQuota property_quota = 7; +} + +// The request to generate a pivot report. +message RunPivotReportRequest { + // A property whose events are tracked. Within a batch request, this entity + // should either be unspecified or consistent with the batch-level entity. + Entity entity = 1; + + // The dimensions requested. All defined dimensions must be used by one of the + // following: dimension_expression, dimension_filter, pivots, order_bys. + repeated Dimension dimensions = 2; + + // The metrics requested, at least one metric needs to be specified. All + // defined metrics must be used by one of the following: metric_expression, + // metric_filter, order_bys. + repeated Metric metrics = 3; + + // The filter clause of dimensions. Requests are validated that all + // field_names in the dimension_filter are dimensions and are defined in + // Dimensions. + FilterExpression dimension_filter = 4; + + // The filter clause of metrics. Applied at post aggregation phase, similar to + // SQL having-clause. Requests are validated that all field_names in the + // metric_filter are metrics and are defined in Metrics. + FilterExpression metric_filter = 5; + + // Describes the visual format of the report's dimensions in columns or rows. + // The union of the fieldNames (dimension names) in all pivots must be a + // subset of dimension names defined in Dimensions. No two pivots can share a + // dimension. A dimension is only visible if it appears in a pivot. + repeated Pivot pivots = 6; + + // The date range to retrieve event data for the report. If multiple date + // ranges are specified, event data from each date range is used in the + // report. A special dimension with field name "dateRange" can be included in + // a Pivot's field names; if included, the report compares between date + // ranges. This dateRanges field is not used in cohorts reports. + repeated DateRange date_ranges = 7; + + // A currency code in ISO4217 format, such as "AED", "USD", "JPY". + // If the field is empty, the report uses the entity's default currency. + string currency_code = 8; + + // Cohort group associated with this request. If there is a cohort group + // in the request the 'cohort' dimension must be present. + CohortSpec cohort_spec = 9; + + // If false, rows with metrics being 0 will not be returned. + bool keep_empty_rows = 10; + + // Toggles whether to return the current state of this Analytics Property's + // quota. Quota is returned in [PropertyQuota](#PropertyQuota). + bool return_property_quota = 11; +} + +// The response pivot report table corresponding to a pivot request. +message RunPivotReportResponse { + // Summarizes the columns and rows created by a pivot. Each pivot in the + // request produces one header in the response. If we have a request like + // this: + // + // "pivots": [{ + // "fieldNames": ["country", + // "city"] + // }, + // { + // "fieldNames": "eventName" + // }] + // + // We will have the following `pivotHeaders` in the response: + // + // "pivotHeaders" : [{ + // "dimensionHeaders": [{ + // "dimensionValues": [ + // { "value": "United Kingdom" }, + // { "value": "London" } + // ] + // }, + // { + // "dimensionValues": [ + // { "value": "Japan" }, + // { "value": "Osaka" } + // ] + // }] + // }, + // { + // "dimensionHeaders": [{ + // "dimensionValues": [{ "value": "session_start" }] + // }, + // { + // "dimensionValues": [{ "value": "scroll" }] + // }] + // }] + repeated PivotHeader pivot_headers = 1; + + // Describes metric columns. + repeated MetricHeader metric_headers = 2; + + // Rows of dimension value combinations and metric values in the report. + repeated Row rows = 3; + + // Aggregation of metric values. Can be totals, minimums, or maximums. The + // returned aggregations are controlled by the metric_aggregations in the + // pivot. The type of aggregation returned in each row is shown by the + // dimension_values which are set to "RESERVED_". + repeated Row aggregates = 4; + + // Metadata for the report. + ResponseMetaData metadata = 5; + + // This Analytics Property's quota state including this request. + PropertyQuota property_quota = 6; +} + +// The batch request containing multiple report requests. +message BatchRunReportsRequest { + // A property whose events are tracked. This entity must be specified for the + // batch. The entity within RunReportRequest may either be unspecified or + // consistent with this entity. + Entity entity = 1; + + // Individual requests. Each request has a separate report response. Each + // batch request is allowed up to 5 requests. + repeated RunReportRequest requests = 2; +} + +// The batch response containing multiple reports. +message BatchRunReportsResponse { + // Individual responses. Each response has a separate report request. + repeated RunReportResponse reports = 1; +} + +// The batch request containing multiple pivot report requests. +message BatchRunPivotReportsRequest { + // A property whose events are tracked. This entity must be specified for the + // batch. The entity within RunPivotReportRequest may either be unspecified or + // consistent with this entity. + Entity entity = 1; + + // Individual requests. Each request has a separate pivot report response. + // Each batch request is allowed up to 5 requests. + repeated RunPivotReportRequest requests = 2; +} + +// The batch response containing multiple pivot reports. +message BatchRunPivotReportsResponse { + // Individual responses. Each response has a separate pivot report request. + repeated RunPivotReportResponse pivot_reports = 1; +} diff --git a/google/analytics/data/v1alpha/analytics_data_grpc_service_config.json b/google/analytics/data/v1alpha/analytics_data_grpc_service_config.json new file mode 100644 index 00000000..940558b1 --- /dev/null +++ b/google/analytics/data/v1alpha/analytics_data_grpc_service_config.json @@ -0,0 +1,36 @@ +{ + "methodConfig": [ + { + "name": [{"service": "google.analytics.data.v1alpha.AlphaAnalyticsData"}], + "timeout": "60s", + "retryPolicy": { + "maxAttempts": 5, + "initialBackoff": "1s", + "maxBackoff": "60s", + "backoffMultiplier": 1.3, + "retryableStatusCodes": ["UNKNOWN"] + } + }, + { + "name": [ + { + "service": "google.analytics.data.v1alpha.AlphaAnalyticsData", + "method": "RunReport" + }, + { + "service": "google.analytics.data.v1alpha.AlphaAnalyticsData", + "method": "RunPivotReport" + }, + { + "service": "google.analytics.data.v1alpha.AlphaAnalyticsData", + "method": "BatchRunReports" + }, + { + "service": "google.analytics.data.v1alpha.AlphaAnalyticsData", + "method": "BatchRunPivotReports" + } + ], + "timeout": "60s" + } + ] +} diff --git a/google/analytics/data/v1alpha/analyticsdata_gapic.yaml b/google/analytics/data/v1alpha/analyticsdata_gapic.yaml new file mode 100644 index 00000000..6ab3aef1 --- /dev/null +++ b/google/analytics/data/v1alpha/analyticsdata_gapic.yaml @@ -0,0 +1,18 @@ +type: com.google.api.codegen.ConfigProto +config_schema_version: 2.0.0 +language_settings: + java: + package_name: com.google.analytics.data.v1alpha + python: + package_name: google.analytics.data.v1alpha.gapic + go: + package_name: google.golang.org/api/analyticsdata/v1alpha + csharp: + package_name: Google.Analytics.Data.V1alpha + ruby: + package_name: Google::Analytics::Data::V1alpha + php: + package_name: Google\Analytics\Data\V1alpha + nodejs: + package_name: google.analytics.data.v1alpha + domain_layer_location: analyticsdata.google.com diff --git a/google/analytics/data/v1alpha/analyticsdata_v1alpha.yaml b/google/analytics/data/v1alpha/analyticsdata_v1alpha.yaml new file mode 100644 index 00000000..0e68c867 --- /dev/null +++ b/google/analytics/data/v1alpha/analyticsdata_v1alpha.yaml @@ -0,0 +1,23 @@ +type: google.api.Service +config_version: 3 +name: analyticsdata.googleapis.com +title: Google Analytics Data API + +apis: +- name: google.analytics.data.v1alpha.AlphaAnalyticsData + +documentation: + summary: Accesses report data in Google Analytics. + +backend: + rules: + - selector: 'google.analytics.data.v1alpha.AlphaAnalyticsData.*' + deadline: 180.0 + +authentication: + rules: + - selector: 'google.analytics.data.v1alpha.AlphaAnalyticsData.*' + oauth: + canonical_scopes: |- + https://www.googleapis.com/auth/analytics, + https://www.googleapis.com/auth/analytics.readonly diff --git a/google/analytics/data/v1alpha/data.proto b/google/analytics/data/v1alpha/data.proto new file mode 100644 index 00000000..0b1dd8fd --- /dev/null +++ b/google/analytics/data/v1alpha/data.proto @@ -0,0 +1,614 @@ +// Copyright 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.analytics.data.v1alpha; + +option go_package = "google.golang.org/genproto/googleapis/analytics/data/v1alpha;data"; +option java_multiple_files = true; +option java_outer_classname = "ReportingApiProto"; +option java_package = "com.google.analytics.data.v1alpha"; + +// A contiguous set of days: startDate, startDate + 1, ..., endDate. Requests +// are allowed up to 4 date ranges, and the union of the ranges can cover up to +// 1 year. +message DateRange { + // The inclusive start date for the query in the format `YYYY-MM-DD`. Cannot + // be after `end_date`. The format `NdaysAgo`, `yesterday`, or `today` is also + // accepted, and in that case, the date is inferred based on the property's + // reporting time zone. + string start_date = 1; + + // The inclusive end date for the query in the format `YYYY-MM-DD`. Cannot + // be before `start_date`. The format `NdaysAgo`, `yesterday`, or `today` is + // also accepted, and in that case, the date is inferred based on the + // property's reporting time zone. + string end_date = 2; + + // Assigns a name to this date range. The dimension `dateRange` is valued to + // this name in a report response. If set, cannot begin with `date_range_` or + // `RESERVED_`. If not set, date ranges are named by their zero based index in + // the request: `date_range_0`, `date_range_1`, etc. + string name = 3; +} + +// The unique identifier of the property whose events are tracked. +message Entity { + // A Google Analytics App + Web property id. + string property_id = 1; +} + +// Dimensions are attributes of your data. For example, the dimension City +// indicates the city, for example, "Paris" or "New York", from which an event +// originates. Requests are allowed up to 8 dimensions. +message Dimension { + // The name of the dimension. + string name = 1; + + // One dimension can be the result of an expression of multiple dimensions. + // For example, dimension "country, city": concatenate(country, ", ", city). + DimensionExpression dimension_expression = 2; +} + +// Used to express a dimension which is the result of a formula of multiple +// dimensions. Example usages: +// 1) lower_case(dimension) +// 2) concatenate(dimension1, symbol, dimension2). +message DimensionExpression { + // Used to convert a dimension value to a single case. + message CaseExpression { + // Name of a dimension. The name must refer back to a name in dimensions + // field of the request. + string dimension_name = 1; + } + + // Used to combine dimension values to a single dimension. + message ConcatenateExpression { + // Names of dimensions. The names must refer back to names in the dimensions + // field of the request. + repeated string dimension_names = 1; + + // The delimiter placed between dimension names. + // + // Delimiters are often single characters such as "|" or "," but can be + // longer strings. If a dimension value contains the delimiter, both will be + // present in response with no distinction. For example if dimension 1 value + // = "US,FR", dimension 2 value = "JP", and delimiter = ",", then the + // response will contain "US,FR,JP". + string delimiter = 2; + } + + // Specify one type of dimension expression for `DimensionExpression`. + oneof one_expression { + // Used to convert a dimension value to lower case. + CaseExpression lower_case = 4; + + // Used to convert a dimension value to upper case. + CaseExpression upper_case = 5; + + // Used to combine dimension values to a single dimension. + // For example, dimension "country, city": concatenate(country, ", ", city). + ConcatenateExpression concatenate = 6; + } +} + +// The quantitative measurements of a report. For example, the metric eventCount +// is the total number of events. Requests are allowed up to 10 metrics. +message Metric { + // The name of the metric. + string name = 1; + + // A mathematical expression for derived metrics. For example, the metric + // Event count per user is eventCount/totalUsers. + string expression = 2; + + // Indicates if a metric is invisible. + // If a metric is invisible, the metric is not in the response, but can be + // used in filters, order_bys or being referred to in a metric expression. + bool invisible = 3; +} + +// To express dimension or metric filters. +// The fields in the same FilterExpression need to be either all dimensions or +// all metrics. +message FilterExpression { + // Specify one type of filter expression for `FilterExpression`. + oneof expr { + // The FilterExpressions in and_group have an AND relationship. + FilterExpressionList and_group = 1; + + // The FilterExpressions in or_group have an OR relationship. + FilterExpressionList or_group = 2; + + // The FilterExpression is NOT of not_expression. + FilterExpression not_expression = 3; + + // A primitive filter. + // All fields in filter in same FilterExpression needs to be either all + // dimensions or metrics. + Filter filter = 4; + } +} + +// A list of filter expressions. +message FilterExpressionList { + // A list of filter expressions. + repeated FilterExpression expressions = 1; +} + +// An expression to filter dimension or metric values. +message Filter { + // The filter for string + message StringFilter { + // The match type of a string filter + enum MatchType { + // Unspecified + MATCH_TYPE_UNSPECIFIED = 0; + + // Exact match of the string value. + EXACT = 1; + + // Begins with the string value. + BEGINS_WITH = 2; + + // Ends with the string value. + ENDS_WITH = 3; + + // Contains the string value. + CONTAINS = 4; + + // Full regular expression match with the string value. + FULL_REGEXP = 5; + + // Partial regular expression match with the string value. + PARTIAL_REGEXP = 6; + } + + // The match type for this filter. + MatchType match_type = 1; + + // The string value used for the matching. + string value = 2; + + // If true, the string value is case sensitive. + bool case_sensitive = 3; + } + + // The result needs to be in a list of string values. + message InListFilter { + // The list of string values. + // Must be non-empty. + repeated string values = 1; + + // If true, the string value is case sensitive. + bool case_sensitive = 2; + } + + // Filters for numeric or date values. + message NumericFilter { + // The operation applied to a numeric filter + enum Operation { + // Unspecified. + OPERATION_UNSPECIFIED = 0; + + // Equal + EQUAL = 1; + + // Less than + LESS_THAN = 2; + + // Less than or equal + LESS_THAN_OR_EQUAL = 3; + + // Greater than + GREATER_THAN = 4; + + // Greater than or equal + GREATER_THAN_OR_EQUAL = 5; + } + + // The operation type for this filter. + Operation operation = 1; + + // A numeric value or a date value. + NumericValue value = 2; + } + + // To express that the result needs to be between two numbers (inclusive). + message BetweenFilter { + // Begins with this number. + NumericValue from_value = 1; + + // Ends with this number. + NumericValue to_value = 2; + } + + // The dimension name or metric name. Must be a name defined in dimensions + // or metrics. + string field_name = 1; + + // Specify one type of filter for `Filter`. + oneof one_filter { + // A filter for null values. + bool null_filter = 2; + + // Strings related filter. + StringFilter string_filter = 3; + + // A filter for in list values. + InListFilter in_list_filter = 4; + + // A filter for numeric or date values. + NumericFilter numeric_filter = 5; + + // A filter for two values. + BetweenFilter between_filter = 6; + } +} + +// The sort options. +message OrderBy { + // Sorts by metric values. + message MetricOrderBy { + // A metric name in the request to order by. + string metric_name = 1; + } + + // Sorts by dimension values. + message DimensionOrderBy { + // Rule to order the string dimension values by. + enum OrderType { + // Unspecified. + ORDER_TYPE_UNSPECIFIED = 0; + + // Alphanumeric sort by Unicode code point. For example, "2" < "A" < "X" < + // "b" < "z". + ALPHANUMERIC = 1; + + // Case insensitive alphanumeric sort by lower case Unicode code point. + // For example, "2" < "A" < "b" < "X" < "z". + CASE_INSENSITIVE_ALPHANUMERIC = 2; + + // Dimension values are converted to numbers before sorting. For example + // in NUMERIC sort, "25" < "100", and in `ALPHANUMERIC` sort, "100" < + // "25". Non-numeric dimension values all have equal ordering value below + // all numeric values. + NUMERIC = 3; + } + + // A dimension name in the request to order by. + string dimension_name = 1; + + // Controls the rule for dimension value ordering. + OrderType order_type = 2; + } + + // Sorts by a pivot column group. + message PivotOrderBy { + // A pair of dimension names and values. Rows with this dimension pivot pair + // are ordered by the metric's value. + // + // For example if pivots = {{"browser", "Chrome"}} and + // metric_name = "Sessions", + // then the rows will be sorted based on Sessions in Chrome. + // + // ---------|----------|----------------|----------|---------------- + // | Chrome | Chrome | Safari | Safari + // ---------|----------|----------------|----------|---------------- + // Country | Sessions | Pages/Sessions | Sessions | Pages/Sessions + // ---------|----------|----------------|----------|---------------- + // US | 2 | 2 | 3 | 1 + // ---------|----------|----------------|----------|---------------- + // Canada | 3 | 1 | 4 | 1 + // ---------|----------|----------------|----------|---------------- + message PivotSelection { + // Must be a dimension name from the request. + string dimension_name = 1; + + // Order by only when the named dimension is this value. + string dimension_value = 2; + } + + // In the response to order by, order rows by this column. Must be a metric + // name from the request. + string metric_name = 1; + + // Used to select a dimension name and value pivot. If multiple pivot + // selections are given, the sort occurs on rows where all pivot selection + // dimension name and value pairs match the row's dimension name and value + // pair. + repeated PivotSelection pivot_selections = 2; + } + + // Specify one type of order by for `OrderBy`. + oneof one_order_by { + // Sorts results by a metric's values. + MetricOrderBy metric = 1; + + // Sorts results by a dimension's values. + DimensionOrderBy dimension = 2; + + // Sorts results by a metric's values within a pivot column group. + PivotOrderBy pivot = 3; + } + + // If true, sorts by descending order. + bool desc = 4; +} + +// Describes the visible dimension columns and rows in the report response. +message Pivot { + // Dimension names for visible columns in the report response. Including + // "dateRange" produces a date range column; for each row in the response, + // dimension values in the date range column will indicate the corresponding + // date range from the request. + repeated string field_names = 1; + + // Specifies how dimensions are ordered in the pivot. In the first Pivot, the + // OrderBys determine Row and DimensionHeader ordering; in subsequent Pivots, + // the OrderBys determine only DimensionHeader ordering. Dimensions specified + // in these OrderBys must be a subset of Pivot.field_names. + repeated OrderBy order_bys = 2; + + // The row count of the start row. The first row is counted as row 0. + int64 offset = 3; + + // The number of rows to return in this pivot. + // If zero or unspecified, all rows are returned. + int64 limit = 4; + + // Aggregate the metrics by dimensions in this pivot using the specified + // metric_aggregations. + repeated MetricAggregation metric_aggregations = 5; +} + +// Specification for a cohort report. +message CohortSpec { + // The definition for the cohorts. + repeated Cohort cohorts = 1; + + // The data ranges of cohorts. + CohortsRange cohorts_range = 2; + + // Settings of a cohort report. + CohortReportSettings cohort_report_settings = 3; +} + +// Defines a cohort. A cohort is a group of users who share a common +// characteristic. For example, all users with the same acquisition date +// belong to the same cohort. +message Cohort { + // Assigns a name to this cohort. The dimension `cohort` is valued to this + // name in a report response. If not set, a cohort is named the empty string. + string name = 1; + + // The dimension used by cohort. Only supports `firstTouchDate` for retention + // report. + string dimension = 2; + + // The cohort selects users whose first visit date is between start date + // and end date defined in the date_range. The date range should be aligned + // with the cohort's granularity. + // If CohortsRange uses daily granularity, the date range can be aligned to + // any day. + // If CohortsRange uses weekly granularity, the date range should be aligned + // to the week boundary, starting at Sunday and ending Saturday. If + // CohortsRange uses monthly granularity, the date range should be aligned to + // the month, starting at the first and ending on the last day of the month. + DateRange date_range = 3; +} + +// Settings of a cohort report. +message CohortReportSettings { + // If true, accumulates the result from first visit day to the end day. + bool accumulate = 1; + + // If true, the report is for lifetime value report and should pivot on user + // event. + bool pivot_on_user_event = 2; + + // If some values are missing while computing ratios, we want to compute the + // ratios only based on non-missing values. + // This field should be set to true only for a totals request. + bool missing_value_as_zero = 4; +} + +// Describes date range for a cohort report. +message CohortsRange { + // Reporting granularity for the cohorts. + enum Granularity { + // Unspecified. + GRANULARITY_UNSPECIFIED = 0; + + // Daily + DAILY = 1; + + // Weekly + WEEKLY = 2; + + // Monthly + MONTHLY = 3; + } + + // Reporting date range for each cohort is calculated based on these three + // fields. + Granularity granularity = 1; + + // For daily cohorts, this will be the start day offset. + // For weekly cohorts, this will be the week offset. + int32 start_offset = 2; + + // For daily cohorts, this will be the end day offset. + // For weekly cohorts, this will be the week offset. + int32 end_offset = 3; +} + +// Response's metadata carrying additional information about the report content. +message ResponseMetaData { + // If true, indicates some buckets of dimension combinations are rolled into + // "(other)" row. This can happen for high cardinality reports. + bool data_loss_from_other_row = 3; +} + +// Describes the metric column in the report. +message MetricHeader { + // Metric name. + string name = 1; + + // Metric data type. + MetricType type = 2; +} + +// Dimensions' values in a pivot. +message PivotHeader { + // The size is the same as the cardinality of the corresponding dimension + // combinations. + repeated DimensionHeader dimension_headers = 1; + + // The cardinality of the pivot as if offset = 0 and limit = -1. + int32 row_count = 2; +} + +// The header for the dimensions. +message DimensionHeader { + // Values of multiple dimensions in a pivot. + repeated DimensionValue dimension_values = 1; +} + +// Report data for each row. +// For example if RunReportRequest contains: +// +// ```none +// dimensions { +// name: "eventName" +// } +// dimensions { +// name: "countryId" +// } +// metrics { +// name: "eventCount" +// } +// ``` +// +// One row with 'in_app_purchase' as the eventName, 'us' as the countryId, and +// 15 as the eventCount, would be: +// +// ```none +// dimension_values { +// name: 'in_app_purchase' +// name: 'us' +// } +// metric_values { +// int64_value: 15 +// } +// ``` +message Row { + // List of requested dimension values. In a PivotReport, dimension_values + // are only listed for dimensions included in a pivot. + repeated DimensionValue dimension_values = 1; + + // List of requested visible metric values. + repeated MetricValue metric_values = 2; +} + +// The value of a dimension. +message DimensionValue { + // One kind of dimension value + oneof one_value { + // Value as a string if the dimension type is a string. + string value = 1; + } +} + +// The value of a metric. +message MetricValue { + // One of metric value + oneof one_value { + // Measurement value. See MetricHeader for type. + string value = 4; + } +} + +// To represent a number. +message NumericValue { + // One of a numeric value + oneof one_value { + // Integer value + int64 int64_value = 1; + + // Double value + double double_value = 2; + } +} + +// Current state of all quotas for this Analytics Property. If any quota for a +// property is exhausted, all requests to that property will return Resource +// Exhausted errors. +message PropertyQuota { + // Analytics Properties can use up to 25,000 tokens per day. Most requests + // consume fewer than 10 tokens. + QuotaStatus tokens_per_day = 1; + + // Analytics Properties can use up to 5,000 tokens per day. An API request + // consumes a single number of tokens, and that number is deducted from both + // the hourly and daily quotas. + QuotaStatus tokens_per_hour = 2; + + // Analytics Properties can send up to 10 concurrent requests. + QuotaStatus concurrent_requests = 3; + + // Analytics Properties and cloud project pairs can have up to 10 + // server errors per hour. + QuotaStatus server_errors_per_project_per_hour = 4; +} + +// Current state for a particular quota group. +message QuotaStatus { + // Quota consumed by this request. + int32 consumed = 1; + + // Quota remaining after this request. + int32 remaining = 2; +} + +// Represents aggregation of metrics. +enum MetricAggregation { + // Unspecified operator. + METRIC_AGGREGATION_UNSPECIFIED = 0; + + // SUM operator. + TOTAL = 1; + + // Minimum operator. + MINIMUM = 5; + + // Maximum operator. + MAXIMUM = 6; + + // Count operator. + COUNT = 4; +} + +// Type of a metric value. +enum MetricType { + // Unspecified type. + METRIC_TYPE_UNSPECIFIED = 0; + + // Integer type. + TYPE_INTEGER = 1; + + // Floating point type. + TYPE_FLOAT = 2; +}