123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- // Copyright 2021 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.api.servicecontrol.v1;
- import "google/api/distribution.proto";
- option cc_enable_arenas = true;
- option csharp_namespace = "Google.Cloud.ServiceControl.V1";
- option go_package = "google.golang.org/genproto/googleapis/api/servicecontrol/v1;servicecontrol";
- option java_multiple_files = true;
- option java_outer_classname = "DistributionProto";
- option java_package = "com.google.api.servicecontrol.v1";
- option php_namespace = "Google\\Cloud\\ServiceControl\\V1";
- option ruby_package = "Google::Cloud::ServiceControl::V1";
- // Distribution represents a frequency distribution of double-valued sample
- // points. It contains the size of the population of sample points plus
- // additional optional information:
- //
- // * the arithmetic mean of the samples
- // * the minimum and maximum of the samples
- // * the sum-squared-deviation of the samples, used to compute variance
- // * a histogram of the values of the sample points
- message Distribution {
- // Describing buckets with constant width.
- message LinearBuckets {
- // The number of finite buckets. With the underflow and overflow buckets,
- // the total number of buckets is `num_finite_buckets` + 2.
- // See comments on `bucket_options` for details.
- int32 num_finite_buckets = 1;
- // The i'th linear bucket covers the interval
- // [offset + (i-1) * width, offset + i * width)
- // where i ranges from 1 to num_finite_buckets, inclusive.
- // Must be strictly positive.
- double width = 2;
- // The i'th linear bucket covers the interval
- // [offset + (i-1) * width, offset + i * width)
- // where i ranges from 1 to num_finite_buckets, inclusive.
- double offset = 3;
- }
- // Describing buckets with exponentially growing width.
- message ExponentialBuckets {
- // The number of finite buckets. With the underflow and overflow buckets,
- // the total number of buckets is `num_finite_buckets` + 2.
- // See comments on `bucket_options` for details.
- int32 num_finite_buckets = 1;
- // The i'th exponential bucket covers the interval
- // [scale * growth_factor^(i-1), scale * growth_factor^i)
- // where i ranges from 1 to num_finite_buckets inclusive.
- // Must be larger than 1.0.
- double growth_factor = 2;
- // The i'th exponential bucket covers the interval
- // [scale * growth_factor^(i-1), scale * growth_factor^i)
- // where i ranges from 1 to num_finite_buckets inclusive.
- // Must be > 0.
- double scale = 3;
- }
- // Describing buckets with arbitrary user-provided width.
- message ExplicitBuckets {
- // 'bound' is a list of strictly increasing boundaries between
- // buckets. Note that a list of length N-1 defines N buckets because
- // of fenceposting. See comments on `bucket_options` for details.
- //
- // The i'th finite bucket covers the interval
- // [bound[i-1], bound[i])
- // where i ranges from 1 to bound_size() - 1. Note that there are no
- // finite buckets at all if 'bound' only contains a single element; in
- // that special case the single bound defines the boundary between the
- // underflow and overflow buckets.
- //
- // bucket number lower bound upper bound
- // i == 0 (underflow) -inf bound[i]
- // 0 < i < bound_size() bound[i-1] bound[i]
- // i == bound_size() (overflow) bound[i-1] +inf
- repeated double bounds = 1;
- }
- // The total number of samples in the distribution. Must be >= 0.
- int64 count = 1;
- // The arithmetic mean of the samples in the distribution. If `count` is
- // zero then this field must be zero.
- double mean = 2;
- // The minimum of the population of values. Ignored if `count` is zero.
- double minimum = 3;
- // The maximum of the population of values. Ignored if `count` is zero.
- double maximum = 4;
- // The sum of squared deviations from the mean:
- // Sum[i=1..count]((x_i - mean)^2)
- // where each x_i is a sample values. If `count` is zero then this field
- // must be zero, otherwise validation of the request fails.
- double sum_of_squared_deviation = 5;
- // The number of samples in each histogram bucket. `bucket_counts` are
- // optional. If present, they must sum to the `count` value.
- //
- // The buckets are defined below in `bucket_option`. There are N buckets.
- // `bucket_counts[0]` is the number of samples in the underflow bucket.
- // `bucket_counts[1]` to `bucket_counts[N-1]` are the numbers of samples
- // in each of the finite buckets. And `bucket_counts[N] is the number
- // of samples in the overflow bucket. See the comments of `bucket_option`
- // below for more details.
- //
- // Any suffix of trailing zeros may be omitted.
- repeated int64 bucket_counts = 6;
- // Defines the buckets in the histogram. `bucket_option` and `bucket_counts`
- // must be both set, or both unset.
- //
- // Buckets are numbered in the range of [0, N], with a total of N+1 buckets.
- // There must be at least two buckets (a single-bucket histogram gives
- // no information that isn't already provided by `count`).
- //
- // The first bucket is the underflow bucket which has a lower bound
- // of -inf. The last bucket is the overflow bucket which has an
- // upper bound of +inf. All other buckets (if any) are called "finite"
- // buckets because they have finite lower and upper bounds. As described
- // below, there are three ways to define the finite buckets.
- //
- // (1) Buckets with constant width.
- // (2) Buckets with exponentially growing widths.
- // (3) Buckets with arbitrary user-provided widths.
- //
- // In all cases, the buckets cover the entire real number line (-inf,
- // +inf). Bucket upper bounds are exclusive and lower bounds are
- // inclusive. The upper bound of the underflow bucket is equal to the
- // lower bound of the smallest finite bucket; the lower bound of the
- // overflow bucket is equal to the upper bound of the largest finite
- // bucket.
- oneof bucket_option {
- // Buckets with constant width.
- LinearBuckets linear_buckets = 7;
- // Buckets with exponentially growing width.
- ExponentialBuckets exponential_buckets = 8;
- // Buckets with arbitrary user-provided width.
- ExplicitBuckets explicit_buckets = 9;
- }
- // Example points. Must be in increasing order of `value` field.
- repeated google.api.Distribution.Exemplar exemplars = 10;
- }
|