<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="servicecontrol_v1.html">Service Control API</a> . <a href="servicecontrol_v1.services.html">services</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#allocateQuota">allocateQuota(serviceName, body, x__xgafv=None)</a></code></p>
<p class="firstline">Attempts to allocate quota for the specified consumer. It should be called</p>
<p class="toc_element">
  <code><a href="#check">check(serviceName, body, x__xgafv=None)</a></code></p>
<p class="firstline">Checks whether an operation on a service should be allowed to proceed</p>
<p class="toc_element">
  <code><a href="#report">report(serviceName, body, x__xgafv=None)</a></code></p>
<p class="firstline">Reports operation results to Google Service Control, such as logs and</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="allocateQuota">allocateQuota(serviceName, body, x__xgafv=None)</code>
  <pre>Attempts to allocate quota for the specified consumer. It should be called
before the operation is executed.

This method requires the `servicemanagement.services.quota`
permission on the specified service. For more information, see
[Cloud IAM](https://cloud.google.com/iam).

**NOTE:** The client **must** fail-open on server errors `INTERNAL`,
`UNKNOWN`, `DEADLINE_EXCEEDED`, and `UNAVAILABLE`. To ensure system
reliability, the server may inject these errors to prohibit any hard
dependency on the quota functionality.

Args:
  serviceName: string, Name of the service as specified in the service configuration. For example,
`"pubsub.googleapis.com"`.

See google.api.Service for the definition of a service name. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request message for the AllocateQuota method.
    "serviceConfigId": "A String", # Specifies which version of service configuration should be used to process
        # the request. If unspecified or no matching version can be found, the latest
        # one will be used.
    "allocateOperation": { # Represents information regarding a quota operation. # Operation that describes the quota allocation.
      "quotaMetrics": [ # Represents information about this operation. Each MetricValueSet
          # corresponds to a metric defined in the service configuration.
          # The data type used in the MetricValueSet must agree with
          # the data type specified in the metric definition.
          #
          # Within a single operation, it is not allowed to have more than one
          # MetricValue instances that have the same metric names and identical
          # label value combinations. If a request has such duplicated MetricValue
          # instances, the entire request is rejected with
          # an invalid argument error.
          #
          # This field is mutually exclusive with method_name.
        { # Represents a set of metric values in the same metric.
            # Each metric value in the set should have a unique combination of start time,
            # end time, and label values.
          "metricValues": [ # The values in this metric.
            { # Represents a single metric value.
              "moneyValue": { # Represents an amount of money with its currency type. # A money value.
                "nanos": 42, # Number of nano (10^-9) units of the amount.
                    # The value must be between -999,999,999 and +999,999,999 inclusive.
                    # If `units` is positive, `nanos` must be positive or zero.
                    # If `units` is zero, `nanos` can be positive, zero, or negative.
                    # If `units` is negative, `nanos` must be negative or zero.
                    # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                "units": "A String", # The whole units of the amount.
                    # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
              },
              "labels": { # The labels describing the metric value.
                  # See comments on google.api.servicecontrol.v1.Operation.labels for
                  # the overriding relationship.
                "a_key": "A String",
              },
              "doubleValue": 3.14, # A double precision floating point value.
              "boolValue": True or False, # A boolean value.
              "startTime": "A String", # The start of the time period over which this metric value's measurement
                  # applies. The time period has different semantics for different metric
                  # types (cumulative, delta, and gauge). See the metric definition
                  # documentation in the service configuration for details.
              "distributionValue": { # Distribution represents a frequency distribution of double-valued sample # A distribution value.
                  # 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
                "count": "A String", # The total number of samples in the distribution. Must be >= 0.
                "bucketCounts": [ # 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.
                  "A String",
                ],
                "exponentialBuckets": { # Describing buckets with exponentially growing width. # Buckets with exponentially growing width.
                  "scale": 3.14, # 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.
                  "growthFactor": 3.14, # 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.
                  "numFiniteBuckets": 42, # 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.
                },
                "minimum": 3.14, # The minimum of the population of values. Ignored if `count` is zero.
                "maximum": 3.14, # The maximum of the population of values. Ignored if `count` is zero.
                "sumOfSquaredDeviation": 3.14, # 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.
                "linearBuckets": { # Describing buckets with constant width. # Buckets with constant width.
                  "width": 3.14, # 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.
                  "numFiniteBuckets": 42, # 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.
                  "offset": 3.14, # 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.
                },
                "explicitBuckets": { # Describing buckets with arbitrary user-provided width. # Buckets with arbitrary user-provided width.
                  "bounds": [ # '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
                    3.14,
                  ],
                },
                "mean": 3.14, # The arithmetic mean of the samples in the distribution. If `count` is
                    # zero then this field must be zero.
              },
              "stringValue": "A String", # A text string value.
              "int64Value": "A String", # A signed 64-bit integer value.
              "endTime": "A String", # The end of the time period over which this metric value's measurement
                  # applies.
            },
          ],
          "metricName": "A String", # The metric name defined in the service configuration.
        },
      ],
      "methodName": "A String", # Fully qualified name of the API method for which this quota operation is
          # requested. This name is used for matching quota rules or metric rules and
          # billing status rules defined in service configuration.
          #
          # This field should not be set if any of the following is true:
          # (1) the quota operation is performed on non-API resources.
          # (2) quota_metrics is set because the caller is doing quota override.
          #
          # Example of an RPC method name:
          #     google.example.library.v1.LibraryService.CreateShelf
      "labels": { # Labels describing the operation.
        "a_key": "A String",
      },
      "quotaMode": "A String", # Quota mode for this operation.
      "consumerId": "A String", # Identity of the consumer for whom this quota operation is being performed.
          #
          # This can be in one of the following formats:
          #   project:<project_id>,
          #   project_number:<project_number>,
          #   api_key:<api_key>.
      "operationId": "A String", # Identity of the operation. This is expected to be unique within the scope
          # of the service that generated the operation, and guarantees idempotency in
          # case of retries.
          #
          # UUID version 4 is recommended, though not required. In scenarios where an
          # operation is computed from existing information and an idempotent id is
          # desirable for deduplication purpose, UUID version 5 is recommended. See
          # RFC 4122 for details.
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for the AllocateQuota method.
    "serviceConfigId": "A String", # ID of the actual config used to process the request.
    "allocateErrors": [ # Indicates the decision of the allocate.
      { # Represents error information for QuotaOperation.
        "code": "A String", # Error code.
        "description": "A String", # Free-form text that provides details on the cause of the error.
        "subject": "A String", # Subject to whom this error applies. See the specific enum for more details
            # on this field. For example, "clientip:<ip address of client>" or
            # "project:<Google developer project id>".
      },
    ],
    "quotaMetrics": [ # Quota metrics to indicate the result of allocation. Depending on the
        # request, one or more of the following metrics will be included:
        #
        # 1. Per quota group or per quota metric incremental usage will be specified
        # using the following delta metric :
        #   "serviceruntime.googleapis.com/api/consumer/quota_used_count"
        #
        # 2. The quota limit reached condition will be specified using the following
        # boolean metric :
        #   "serviceruntime.googleapis.com/quota/exceeded"
      { # Represents a set of metric values in the same metric.
          # Each metric value in the set should have a unique combination of start time,
          # end time, and label values.
        "metricValues": [ # The values in this metric.
          { # Represents a single metric value.
            "moneyValue": { # Represents an amount of money with its currency type. # A money value.
              "nanos": 42, # Number of nano (10^-9) units of the amount.
                  # The value must be between -999,999,999 and +999,999,999 inclusive.
                  # If `units` is positive, `nanos` must be positive or zero.
                  # If `units` is zero, `nanos` can be positive, zero, or negative.
                  # If `units` is negative, `nanos` must be negative or zero.
                  # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
              "units": "A String", # The whole units of the amount.
                  # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
              "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
            },
            "labels": { # The labels describing the metric value.
                # See comments on google.api.servicecontrol.v1.Operation.labels for
                # the overriding relationship.
              "a_key": "A String",
            },
            "doubleValue": 3.14, # A double precision floating point value.
            "boolValue": True or False, # A boolean value.
            "startTime": "A String", # The start of the time period over which this metric value's measurement
                # applies. The time period has different semantics for different metric
                # types (cumulative, delta, and gauge). See the metric definition
                # documentation in the service configuration for details.
            "distributionValue": { # Distribution represents a frequency distribution of double-valued sample # A distribution value.
                # 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
              "count": "A String", # The total number of samples in the distribution. Must be >= 0.
              "bucketCounts": [ # 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.
                "A String",
              ],
              "exponentialBuckets": { # Describing buckets with exponentially growing width. # Buckets with exponentially growing width.
                "scale": 3.14, # 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.
                "growthFactor": 3.14, # 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.
                "numFiniteBuckets": 42, # 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.
              },
              "minimum": 3.14, # The minimum of the population of values. Ignored if `count` is zero.
              "maximum": 3.14, # The maximum of the population of values. Ignored if `count` is zero.
              "sumOfSquaredDeviation": 3.14, # 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.
              "linearBuckets": { # Describing buckets with constant width. # Buckets with constant width.
                "width": 3.14, # 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.
                "numFiniteBuckets": 42, # 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.
                "offset": 3.14, # 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.
              },
              "explicitBuckets": { # Describing buckets with arbitrary user-provided width. # Buckets with arbitrary user-provided width.
                "bounds": [ # '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
                  3.14,
                ],
              },
              "mean": 3.14, # The arithmetic mean of the samples in the distribution. If `count` is
                  # zero then this field must be zero.
            },
            "stringValue": "A String", # A text string value.
            "int64Value": "A String", # A signed 64-bit integer value.
            "endTime": "A String", # The end of the time period over which this metric value's measurement
                # applies.
          },
        ],
        "metricName": "A String", # The metric name defined in the service configuration.
      },
    ],
    "allocateInfo": { # WARNING: DO NOT use this field until this warning message is removed.
      "unusedArguments": [ # A list of label keys that were unused by the server in processing the
          # request. Thus, for similar requests repeated in a certain future time
          # window, the caller can choose to ignore these labels in the requests
          # to achieve better client-side cache hits and quota aggregation.
        "A String",
      ],
    },
    "operationId": "A String", # The same operation_id value used in the AllocateQuotaRequest. Used for
        # logging and diagnostics purposes.
  }</pre>
</div>

<div class="method">
    <code class="details" id="check">check(serviceName, body, x__xgafv=None)</code>
  <pre>Checks whether an operation on a service should be allowed to proceed
based on the configuration of the service and related policies. It must be
called before the operation is executed.

If feasible, the client should cache the check results and reuse them for
60 seconds. In case of any server errors, the client should rely on the
cached results for much longer time to avoid outage.
WARNING: There is general 60s delay for the configuration and policy
propagation, therefore callers MUST NOT depend on the `Check` method having
the latest policy information.

NOTE: the CheckRequest has the size limit of 64KB.

This method requires the `servicemanagement.services.check` permission
on the specified service. For more information, see
[Cloud IAM](https://cloud.google.com/iam).

Args:
  serviceName: string, The service name as specified in its service configuration. For example,
`"pubsub.googleapis.com"`.

See
[google.api.Service](https://cloud.google.com/service-management/reference/rpc/google.api#google.api.Service)
for the definition of a service name. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request message for the Check method.
    "skipActivationCheck": True or False, # Indicates if service activation check should be skipped for this request.
        # Default behavior is to perform the check and apply relevant quota.
        # WARNING: Setting this flag to "true" will disable quota enforcement.
    "serviceConfigId": "A String", # Specifies which version of service configuration should be used to process
        # the request.
        # 
        # If unspecified or no matching version can be found, the
        # latest one will be used.
    "operation": { # Represents information regarding an operation. # The operation to be checked.
      "operationName": "A String", # Fully qualified name of the operation. Reserved for future use.
      "metricValueSets": [ # Represents information about this operation. Each MetricValueSet
          # corresponds to a metric defined in the service configuration.
          # The data type used in the MetricValueSet must agree with
          # the data type specified in the metric definition.
          #
          # Within a single operation, it is not allowed to have more than one
          # MetricValue instances that have the same metric names and identical
          # label value combinations. If a request has such duplicated MetricValue
          # instances, the entire request is rejected with
          # an invalid argument error.
        { # Represents a set of metric values in the same metric.
            # Each metric value in the set should have a unique combination of start time,
            # end time, and label values.
          "metricValues": [ # The values in this metric.
            { # Represents a single metric value.
              "moneyValue": { # Represents an amount of money with its currency type. # A money value.
                "nanos": 42, # Number of nano (10^-9) units of the amount.
                    # The value must be between -999,999,999 and +999,999,999 inclusive.
                    # If `units` is positive, `nanos` must be positive or zero.
                    # If `units` is zero, `nanos` can be positive, zero, or negative.
                    # If `units` is negative, `nanos` must be negative or zero.
                    # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                "units": "A String", # The whole units of the amount.
                    # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
              },
              "labels": { # The labels describing the metric value.
                  # See comments on google.api.servicecontrol.v1.Operation.labels for
                  # the overriding relationship.
                "a_key": "A String",
              },
              "doubleValue": 3.14, # A double precision floating point value.
              "boolValue": True or False, # A boolean value.
              "startTime": "A String", # The start of the time period over which this metric value's measurement
                  # applies. The time period has different semantics for different metric
                  # types (cumulative, delta, and gauge). See the metric definition
                  # documentation in the service configuration for details.
              "distributionValue": { # Distribution represents a frequency distribution of double-valued sample # A distribution value.
                  # 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
                "count": "A String", # The total number of samples in the distribution. Must be >= 0.
                "bucketCounts": [ # 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.
                  "A String",
                ],
                "exponentialBuckets": { # Describing buckets with exponentially growing width. # Buckets with exponentially growing width.
                  "scale": 3.14, # 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.
                  "growthFactor": 3.14, # 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.
                  "numFiniteBuckets": 42, # 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.
                },
                "minimum": 3.14, # The minimum of the population of values. Ignored if `count` is zero.
                "maximum": 3.14, # The maximum of the population of values. Ignored if `count` is zero.
                "sumOfSquaredDeviation": 3.14, # 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.
                "linearBuckets": { # Describing buckets with constant width. # Buckets with constant width.
                  "width": 3.14, # 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.
                  "numFiniteBuckets": 42, # 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.
                  "offset": 3.14, # 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.
                },
                "explicitBuckets": { # Describing buckets with arbitrary user-provided width. # Buckets with arbitrary user-provided width.
                  "bounds": [ # '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
                    3.14,
                  ],
                },
                "mean": 3.14, # The arithmetic mean of the samples in the distribution. If `count` is
                    # zero then this field must be zero.
              },
              "stringValue": "A String", # A text string value.
              "int64Value": "A String", # A signed 64-bit integer value.
              "endTime": "A String", # The end of the time period over which this metric value's measurement
                  # applies.
            },
          ],
          "metricName": "A String", # The metric name defined in the service configuration.
        },
      ],
      "importance": "A String", # DO NOT USE. This is an experimental field.
      "labels": { # Labels describing the operation. Only the following labels are allowed:
          #
          # - Labels describing monitored resources as defined in
          #   the service configuration.
          # - Default labels of metric values. When specified, labels defined in the
          #   metric value override these default.
          # - The following labels defined by Google Cloud Platform:
          #     - `cloud.googleapis.com/location` describing the location where the
          #        operation happened,
          #     - `servicecontrol.googleapis.com/user_agent` describing the user agent
          #        of the API request,
          #     - `servicecontrol.googleapis.com/service_agent` describing the service
          #        used to handle the API request (e.g. ESP),
          #     - `servicecontrol.googleapis.com/platform` describing the platform
          #        where the API is served, such as App Engine, Compute Engine, or
          #        Kubernetes Engine.
        "a_key": "A String",
      },
      "quotaProperties": { # Represents the properties needed for quota operations. # Represents the properties needed for quota check. Applicable only if this
          # operation is for a quota check request. If this is not specified, no quota
          # check will be performed.
        "quotaMode": "A String", # Quota mode for this operation.
      },
      "resourceContainer": "A String", # DO NOT USE. This field is deprecated, use "resources" field instead.
          # The resource name of the parent of a resource in the resource hierarchy.
          #
          # This can be in one of the following formats:
          #     - “projects/<project-id or project-number>”
          #     - “folders/<folder-id>”
          #     - “organizations/<organization-id>”
      "userLabels": { # User defined labels for the resource that this operation is associated
          # with. Only a combination of 1000 user labels per consumer project are
          # allowed.
        "a_key": "A String",
      },
      "logEntries": [ # Represents information to be logged.
        { # An individual log entry.
          "httpRequest": { # A common proto for logging HTTP requests. Only contains semantics # Optional. Information about the HTTP request associated with this
              # log entry, if applicable.
              # defined by the HTTP specification. Product-specific logging
              # information MUST be defined in a separate message.
            "status": 42, # The response code indicating the status of the response.
                # Examples: 200, 404.
            "cacheValidatedWithOriginServer": True or False, # Whether or not the response was validated with the origin server before
                # being served from cache. This field is only meaningful if `cache_hit` is
                # True.
            "protocol": "A String", # Protocol used for the request. Examples: "HTTP/1.1", "HTTP/2", "websocket"
            "cacheHit": True or False, # Whether or not an entity was served from cache
                # (with or without validation).
            "cacheFillBytes": "A String", # The number of HTTP response bytes inserted into cache. Set only when a
                # cache fill was attempted.
            "requestUrl": "A String", # The scheme (http, https), the host name, the path, and the query
                # portion of the URL that was requested.
                # Example: `"http://example.com/some/info?color=red"`.
            "serverIp": "A String", # The IP address (IPv4 or IPv6) of the origin server that the request was
                # sent to.
            "cacheLookup": True or False, # Whether or not a cache lookup was attempted.
            "latency": "A String", # The request processing latency on the server, from the time the request was
                # received until the response was sent.
            "requestMethod": "A String", # The request method. Examples: `"GET"`, `"HEAD"`, `"PUT"`, `"POST"`.
            "referer": "A String", # The referer URL of the request, as defined in
                # [HTTP/1.1 Header Field
                # Definitions](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html).
            "remoteIp": "A String", # The IP address (IPv4 or IPv6) of the client that issued the HTTP
                # request. Examples: `"192.168.1.1"`, `"FE80::0202:B3FF:FE1E:8329"`.
            "userAgent": "A String", # The user agent sent by the client. Example:
                # `"Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Q312461; .NET
                # CLR 1.0.3705)"`.
            "requestSize": "A String", # The size of the HTTP request message in bytes, including the request
                # headers and the request body.
            "responseSize": "A String", # The size of the HTTP response message sent back to the client, in bytes,
                # including the response headers and the response body.
          },
          "severity": "A String", # The severity of the log entry. The default value is
              # `LogSeverity.DEFAULT`.
          "trace": "A String", # Optional. Resource name of the trace associated with the log entry, if any.
              # If this field contains a relative resource name, you can assume the name is
              # relative to `//tracing.googleapis.com`. Example:
              # `projects/my-projectid/traces/06796866738c859f2f19b7cfb3214824`
          "textPayload": "A String", # The log entry payload, represented as a Unicode string (UTF-8).
          "timestamp": "A String", # The time the event described by the log entry occurred. If
              # omitted, defaults to operation start time.
          "labels": { # A set of user-defined (key, value) data that provides additional
              # information about the log entry.
            "a_key": "A String",
          },
          "structPayload": { # The log entry payload, represented as a structure that
              # is expressed as a JSON object.
            "a_key": "", # Properties of the object.
          },
          "protoPayload": { # The log entry payload, represented as a protocol buffer that is
              # expressed as a JSON object. The only accepted type currently is
              # AuditLog.
            "a_key": "", # Properties of the object. Contains field @type with type URL.
          },
          "insertId": "A String", # A unique ID for the log entry used for deduplication. If omitted,
              # the implementation will generate one based on operation_id.
          "operation": { # Additional information about a potentially long-running operation with which # Optional. Information about an operation associated with the log entry, if
              # applicable.
              # a log entry is associated.
            "last": True or False, # Optional. Set this to True if this is the last log entry in the operation.
            "id": "A String", # Optional. An arbitrary operation identifier. Log entries with the
                # same identifier are assumed to be part of the same operation.
            "producer": "A String", # Optional. An arbitrary producer identifier. The combination of
                # `id` and `producer` must be globally unique.  Examples for `producer`:
                # `"MyDivision.MyBigCompany.com"`, `"github.com/MyProject/MyApplication"`.
            "first": True or False, # Optional. Set this to True if this is the first log entry in the operation.
          },
          "name": "A String", # Required. The log to which this log entry belongs. Examples: `"syslog"`,
              # `"book_log"`.
        },
      ],
      "consumerId": "A String", # Identity of the consumer who is using the service.
          # This field should be filled in for the operations initiated by a
          # consumer, but not for service-initiated operations that are
          # not related to a specific consumer.
          #
          # - This can be in one of the following formats:
          #     - project:PROJECT_ID,
          #     - project`_`number:PROJECT_NUMBER,
          #     - projects/PROJECT_ID or PROJECT_NUMBER,
          #     - folders/FOLDER_NUMBER,
          #     - organizations/ORGANIZATION_NUMBER,
          #     - api`_`key:API_KEY.
      "startTime": "A String", # Required. Start time of the operation.
      "endTime": "A String", # End time of the operation.
          # Required when the operation is used in ServiceController.Report,
          # but optional when the operation is used in ServiceController.Check.
      "resources": [ # The resources that are involved in the operation.
          # The maximum supported number of entries in this field is 100.
        { # Describes a resource associated with this operation.
          "resourceContainer": "A String", # The identifier of the parent of this resource instance.
              # Must be in one of the following formats:
              #     - “projects/<project-id or project-number>”
              #     - “folders/<folder-id>”
              #     - “organizations/<organization-id>”
          "resourceName": "A String", # Name of the resource. This is used for auditing purposes.
          "resourceLocation": "A String", # The location of the resource. If not empty, the resource will be checked
              # against location policy. The value must be a valid zone, region or
              # multiregion. For example: "europe-west4" or "northamerica-northeast1-a"
        },
      ],
      "operationId": "A String", # Identity of the operation. This must be unique within the scope of the
          # service that generated the operation. If the service calls
          # Check() and Report() on the same operation, the two calls should carry
          # the same id.
          #
          # UUID version 4 is recommended, though not required.
          # In scenarios where an operation is computed from existing information
          # and an idempotent id is desirable for deduplication purpose, UUID version 5
          # is recommended. See RFC 4122 for details.
    },
    "requestProjectSettings": True or False, # Requests the project settings to be returned as part of the check response.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for the Check method.
    "checkInfo": { # Contains additional information about the check operation. # Feedback data returned from the server during processing a Check request.
      "unusedArguments": [ # A list of fields and label keys that are ignored by the server.
          # The client doesn't need to send them for following requests to improve
          # performance and allow better aggregation.
        "A String",
      ],
      "consumerInfo": { # `ConsumerInfo` provides information about the consumer. # Consumer info of this check.
        "consumerNumber": "A String", # The consumer identity number, can be Google cloud project number, folder
            # number or organization number e.g. 1234567890. A value of 0 indicates no
            # consumer number is found.
        "type": "A String", # The type of the consumer which should have been defined in
            # [Google Resource Manager](https://cloud.google.com/resource-manager/).
        "projectNumber": "A String", # The Google cloud project number, e.g. 1234567890. A value of 0 indicates
            # no project number is found.
            #
            # NOTE: This field is deprecated after Chemist support flexible consumer
            # id. New code should not depend on this field anymore.
      },
    },
    "checkErrors": [ # Indicate the decision of the check.
        #
        # If no check errors are present, the service should process the operation.
        # Otherwise the service should use the list of errors to determine the
        # appropriate action.
      { # Defines the errors to be returned in
          # google.api.servicecontrol.v1.CheckResponse.check_errors.
        "status": { # The `Status` type defines a logical error model that is suitable for # Contains public information about the check error. If available,
            # `status.code` will be non zero and client can propagate it out as public
            # error.
            # different programming environments, including REST APIs and RPC APIs. It is
            # used by [gRPC](https://github.com/grpc). Each `Status` message contains
            # three pieces of data: error code, error message, and error details.
            #
            # You can find out more about this error model and how to work with it in the
            # [API Design Guide](https://cloud.google.com/apis/design/errors).
          "message": "A String", # A developer-facing error message, which should be in English. Any
              # user-facing error message should be localized and sent in the
              # google.rpc.Status.details field, or localized by the client.
          "code": 42, # The status code, which should be an enum value of google.rpc.Code.
          "details": [ # A list of messages that carry the error details.  There is a common set of
              # message types for APIs to use.
            {
              "a_key": "", # Properties of the object. Contains field @type with type URL.
            },
          ],
        },
        "code": "A String", # The error code.
        "detail": "A String", # Free-form text providing details on the error cause of the error.
        "subject": "A String", # Subject to whom this error applies. See the specific code enum for more
            # details on this field. For example:
            #     - “project:<project-id or project-number>”
            #     - “folder:<folder-id>”
            #     - “organization:<organization-id>”
      },
    ],
    "serviceRolloutId": "A String", # Unimplemented. The current service rollout id used to process the request.
    "serviceConfigId": "A String", # The actual config id used to process the request.
    "quotaInfo": { # Contains the quota information for a quota check response. # Quota information for the check request associated with this response.
      "quotaMetrics": [ # Quota metrics to indicate the usage. Depending on the check request, one or
          # more of the following metrics will be included:
          #
          # 1. For rate quota, per quota group or per quota metric incremental usage
          # will be specified using the following delta metric:
          #   "serviceruntime.googleapis.com/api/consumer/quota_used_count"
          #
          # 2. For allocation quota, per quota metric total usage will be specified
          # using the following gauge metric:
          #   "serviceruntime.googleapis.com/allocation/consumer/quota_used_count"
          #
          # 3. For both rate quota and allocation quota, the quota limit reached
          # condition will be specified using the following boolean metric:
          #   "serviceruntime.googleapis.com/quota/exceeded"
        { # Represents a set of metric values in the same metric.
            # Each metric value in the set should have a unique combination of start time,
            # end time, and label values.
          "metricValues": [ # The values in this metric.
            { # Represents a single metric value.
              "moneyValue": { # Represents an amount of money with its currency type. # A money value.
                "nanos": 42, # Number of nano (10^-9) units of the amount.
                    # The value must be between -999,999,999 and +999,999,999 inclusive.
                    # If `units` is positive, `nanos` must be positive or zero.
                    # If `units` is zero, `nanos` can be positive, zero, or negative.
                    # If `units` is negative, `nanos` must be negative or zero.
                    # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                "units": "A String", # The whole units of the amount.
                    # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
              },
              "labels": { # The labels describing the metric value.
                  # See comments on google.api.servicecontrol.v1.Operation.labels for
                  # the overriding relationship.
                "a_key": "A String",
              },
              "doubleValue": 3.14, # A double precision floating point value.
              "boolValue": True or False, # A boolean value.
              "startTime": "A String", # The start of the time period over which this metric value's measurement
                  # applies. The time period has different semantics for different metric
                  # types (cumulative, delta, and gauge). See the metric definition
                  # documentation in the service configuration for details.
              "distributionValue": { # Distribution represents a frequency distribution of double-valued sample # A distribution value.
                  # 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
                "count": "A String", # The total number of samples in the distribution. Must be >= 0.
                "bucketCounts": [ # 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.
                  "A String",
                ],
                "exponentialBuckets": { # Describing buckets with exponentially growing width. # Buckets with exponentially growing width.
                  "scale": 3.14, # 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.
                  "growthFactor": 3.14, # 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.
                  "numFiniteBuckets": 42, # 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.
                },
                "minimum": 3.14, # The minimum of the population of values. Ignored if `count` is zero.
                "maximum": 3.14, # The maximum of the population of values. Ignored if `count` is zero.
                "sumOfSquaredDeviation": 3.14, # 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.
                "linearBuckets": { # Describing buckets with constant width. # Buckets with constant width.
                  "width": 3.14, # 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.
                  "numFiniteBuckets": 42, # 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.
                  "offset": 3.14, # 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.
                },
                "explicitBuckets": { # Describing buckets with arbitrary user-provided width. # Buckets with arbitrary user-provided width.
                  "bounds": [ # '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
                    3.14,
                  ],
                },
                "mean": 3.14, # The arithmetic mean of the samples in the distribution. If `count` is
                    # zero then this field must be zero.
              },
              "stringValue": "A String", # A text string value.
              "int64Value": "A String", # A signed 64-bit integer value.
              "endTime": "A String", # The end of the time period over which this metric value's measurement
                  # applies.
            },
          ],
          "metricName": "A String", # The metric name defined in the service configuration.
        },
      ],
      "limitExceeded": [ # Quota Metrics that have exceeded quota limits.
          # For QuotaGroup-based quota, this is QuotaGroup.name
          # For QuotaLimit-based quota, this is QuotaLimit.name
          # See: google.api.Quota
          # Deprecated: Use quota_metrics to get per quota group limit exceeded status.
        "A String",
      ],
      "quotaConsumed": { # Map of quota group name to the actual number of tokens consumed. If the
          # quota check was not successful, then this will not be populated due to no
          # quota consumption.
          #
          # We are not merging this field with 'quota_metrics' field because of the
          # complexity of scaling in Chemist client code base. For simplicity, we will
          # keep this field for Castor (that scales quota usage) and 'quota_metrics'
          # for SuperQuota (that doesn't scale quota usage).
        "a_key": 42,
      },
    },
    "operationId": "A String", # The same operation_id value used in the CheckRequest.
        # Used for logging and diagnostics purposes.
  }</pre>
</div>

<div class="method">
    <code class="details" id="report">report(serviceName, body, x__xgafv=None)</code>
  <pre>Reports operation results to Google Service Control, such as logs and
metrics. It should be called after an operation is completed.

If feasible, the client should aggregate reporting data for up to 5
seconds to reduce API traffic. Limiting aggregation to 5 seconds is to
reduce data loss during client crashes. Clients should carefully choose
the aggregation time window to avoid data loss risk more than 0.01%
for business and compliance reasons.

NOTE: the ReportRequest has the size limit of 1MB.

This method requires the `servicemanagement.services.report` permission
on the specified service. For more information, see
[Google Cloud IAM](https://cloud.google.com/iam).

Args:
  serviceName: string, The service name as specified in its service configuration. For example,
`"pubsub.googleapis.com"`.

See
[google.api.Service](https://cloud.google.com/service-management/reference/rpc/google.api#google.api.Service)
for the definition of a service name. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Request message for the Report method.
    "operations": [ # Operations to be reported.
        # 
        # Typically the service should report one operation per request.
        # Putting multiple operations into a single request is allowed, but should
        # be used only when multiple operations are natually available at the time
        # of the report.
        # 
        # If multiple operations are in a single request, the total request size
        # should be no larger than 1MB. See ReportResponse.report_errors for
        # partial failure behavior.
      { # Represents information regarding an operation.
        "operationName": "A String", # Fully qualified name of the operation. Reserved for future use.
        "metricValueSets": [ # Represents information about this operation. Each MetricValueSet
            # corresponds to a metric defined in the service configuration.
            # The data type used in the MetricValueSet must agree with
            # the data type specified in the metric definition.
            #
            # Within a single operation, it is not allowed to have more than one
            # MetricValue instances that have the same metric names and identical
            # label value combinations. If a request has such duplicated MetricValue
            # instances, the entire request is rejected with
            # an invalid argument error.
          { # Represents a set of metric values in the same metric.
              # Each metric value in the set should have a unique combination of start time,
              # end time, and label values.
            "metricValues": [ # The values in this metric.
              { # Represents a single metric value.
                "moneyValue": { # Represents an amount of money with its currency type. # A money value.
                  "nanos": 42, # Number of nano (10^-9) units of the amount.
                      # The value must be between -999,999,999 and +999,999,999 inclusive.
                      # If `units` is positive, `nanos` must be positive or zero.
                      # If `units` is zero, `nanos` can be positive, zero, or negative.
                      # If `units` is negative, `nanos` must be negative or zero.
                      # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                  "units": "A String", # The whole units of the amount.
                      # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                  "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
                },
                "labels": { # The labels describing the metric value.
                    # See comments on google.api.servicecontrol.v1.Operation.labels for
                    # the overriding relationship.
                  "a_key": "A String",
                },
                "doubleValue": 3.14, # A double precision floating point value.
                "boolValue": True or False, # A boolean value.
                "startTime": "A String", # The start of the time period over which this metric value's measurement
                    # applies. The time period has different semantics for different metric
                    # types (cumulative, delta, and gauge). See the metric definition
                    # documentation in the service configuration for details.
                "distributionValue": { # Distribution represents a frequency distribution of double-valued sample # A distribution value.
                    # 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
                  "count": "A String", # The total number of samples in the distribution. Must be >= 0.
                  "bucketCounts": [ # 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.
                    "A String",
                  ],
                  "exponentialBuckets": { # Describing buckets with exponentially growing width. # Buckets with exponentially growing width.
                    "scale": 3.14, # 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.
                    "growthFactor": 3.14, # 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.
                    "numFiniteBuckets": 42, # 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.
                  },
                  "minimum": 3.14, # The minimum of the population of values. Ignored if `count` is zero.
                  "maximum": 3.14, # The maximum of the population of values. Ignored if `count` is zero.
                  "sumOfSquaredDeviation": 3.14, # 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.
                  "linearBuckets": { # Describing buckets with constant width. # Buckets with constant width.
                    "width": 3.14, # 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.
                    "numFiniteBuckets": 42, # 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.
                    "offset": 3.14, # 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.
                  },
                  "explicitBuckets": { # Describing buckets with arbitrary user-provided width. # Buckets with arbitrary user-provided width.
                    "bounds": [ # '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
                      3.14,
                    ],
                  },
                  "mean": 3.14, # The arithmetic mean of the samples in the distribution. If `count` is
                      # zero then this field must be zero.
                },
                "stringValue": "A String", # A text string value.
                "int64Value": "A String", # A signed 64-bit integer value.
                "endTime": "A String", # The end of the time period over which this metric value's measurement
                    # applies.
              },
            ],
            "metricName": "A String", # The metric name defined in the service configuration.
          },
        ],
        "importance": "A String", # DO NOT USE. This is an experimental field.
        "labels": { # Labels describing the operation. Only the following labels are allowed:
            #
            # - Labels describing monitored resources as defined in
            #   the service configuration.
            # - Default labels of metric values. When specified, labels defined in the
            #   metric value override these default.
            # - The following labels defined by Google Cloud Platform:
            #     - `cloud.googleapis.com/location` describing the location where the
            #        operation happened,
            #     - `servicecontrol.googleapis.com/user_agent` describing the user agent
            #        of the API request,
            #     - `servicecontrol.googleapis.com/service_agent` describing the service
            #        used to handle the API request (e.g. ESP),
            #     - `servicecontrol.googleapis.com/platform` describing the platform
            #        where the API is served, such as App Engine, Compute Engine, or
            #        Kubernetes Engine.
          "a_key": "A String",
        },
        "quotaProperties": { # Represents the properties needed for quota operations. # Represents the properties needed for quota check. Applicable only if this
            # operation is for a quota check request. If this is not specified, no quota
            # check will be performed.
          "quotaMode": "A String", # Quota mode for this operation.
        },
        "resourceContainer": "A String", # DO NOT USE. This field is deprecated, use "resources" field instead.
            # The resource name of the parent of a resource in the resource hierarchy.
            #
            # This can be in one of the following formats:
            #     - “projects/<project-id or project-number>”
            #     - “folders/<folder-id>”
            #     - “organizations/<organization-id>”
        "userLabels": { # User defined labels for the resource that this operation is associated
            # with. Only a combination of 1000 user labels per consumer project are
            # allowed.
          "a_key": "A String",
        },
        "logEntries": [ # Represents information to be logged.
          { # An individual log entry.
            "httpRequest": { # A common proto for logging HTTP requests. Only contains semantics # Optional. Information about the HTTP request associated with this
                # log entry, if applicable.
                # defined by the HTTP specification. Product-specific logging
                # information MUST be defined in a separate message.
              "status": 42, # The response code indicating the status of the response.
                  # Examples: 200, 404.
              "cacheValidatedWithOriginServer": True or False, # Whether or not the response was validated with the origin server before
                  # being served from cache. This field is only meaningful if `cache_hit` is
                  # True.
              "protocol": "A String", # Protocol used for the request. Examples: "HTTP/1.1", "HTTP/2", "websocket"
              "cacheHit": True or False, # Whether or not an entity was served from cache
                  # (with or without validation).
              "cacheFillBytes": "A String", # The number of HTTP response bytes inserted into cache. Set only when a
                  # cache fill was attempted.
              "requestUrl": "A String", # The scheme (http, https), the host name, the path, and the query
                  # portion of the URL that was requested.
                  # Example: `"http://example.com/some/info?color=red"`.
              "serverIp": "A String", # The IP address (IPv4 or IPv6) of the origin server that the request was
                  # sent to.
              "cacheLookup": True or False, # Whether or not a cache lookup was attempted.
              "latency": "A String", # The request processing latency on the server, from the time the request was
                  # received until the response was sent.
              "requestMethod": "A String", # The request method. Examples: `"GET"`, `"HEAD"`, `"PUT"`, `"POST"`.
              "referer": "A String", # The referer URL of the request, as defined in
                  # [HTTP/1.1 Header Field
                  # Definitions](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html).
              "remoteIp": "A String", # The IP address (IPv4 or IPv6) of the client that issued the HTTP
                  # request. Examples: `"192.168.1.1"`, `"FE80::0202:B3FF:FE1E:8329"`.
              "userAgent": "A String", # The user agent sent by the client. Example:
                  # `"Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Q312461; .NET
                  # CLR 1.0.3705)"`.
              "requestSize": "A String", # The size of the HTTP request message in bytes, including the request
                  # headers and the request body.
              "responseSize": "A String", # The size of the HTTP response message sent back to the client, in bytes,
                  # including the response headers and the response body.
            },
            "severity": "A String", # The severity of the log entry. The default value is
                # `LogSeverity.DEFAULT`.
            "trace": "A String", # Optional. Resource name of the trace associated with the log entry, if any.
                # If this field contains a relative resource name, you can assume the name is
                # relative to `//tracing.googleapis.com`. Example:
                # `projects/my-projectid/traces/06796866738c859f2f19b7cfb3214824`
            "textPayload": "A String", # The log entry payload, represented as a Unicode string (UTF-8).
            "timestamp": "A String", # The time the event described by the log entry occurred. If
                # omitted, defaults to operation start time.
            "labels": { # A set of user-defined (key, value) data that provides additional
                # information about the log entry.
              "a_key": "A String",
            },
            "structPayload": { # The log entry payload, represented as a structure that
                # is expressed as a JSON object.
              "a_key": "", # Properties of the object.
            },
            "protoPayload": { # The log entry payload, represented as a protocol buffer that is
                # expressed as a JSON object. The only accepted type currently is
                # AuditLog.
              "a_key": "", # Properties of the object. Contains field @type with type URL.
            },
            "insertId": "A String", # A unique ID for the log entry used for deduplication. If omitted,
                # the implementation will generate one based on operation_id.
            "operation": { # Additional information about a potentially long-running operation with which # Optional. Information about an operation associated with the log entry, if
                # applicable.
                # a log entry is associated.
              "last": True or False, # Optional. Set this to True if this is the last log entry in the operation.
              "id": "A String", # Optional. An arbitrary operation identifier. Log entries with the
                  # same identifier are assumed to be part of the same operation.
              "producer": "A String", # Optional. An arbitrary producer identifier. The combination of
                  # `id` and `producer` must be globally unique.  Examples for `producer`:
                  # `"MyDivision.MyBigCompany.com"`, `"github.com/MyProject/MyApplication"`.
              "first": True or False, # Optional. Set this to True if this is the first log entry in the operation.
            },
            "name": "A String", # Required. The log to which this log entry belongs. Examples: `"syslog"`,
                # `"book_log"`.
          },
        ],
        "consumerId": "A String", # Identity of the consumer who is using the service.
            # This field should be filled in for the operations initiated by a
            # consumer, but not for service-initiated operations that are
            # not related to a specific consumer.
            #
            # - This can be in one of the following formats:
            #     - project:PROJECT_ID,
            #     - project`_`number:PROJECT_NUMBER,
            #     - projects/PROJECT_ID or PROJECT_NUMBER,
            #     - folders/FOLDER_NUMBER,
            #     - organizations/ORGANIZATION_NUMBER,
            #     - api`_`key:API_KEY.
        "startTime": "A String", # Required. Start time of the operation.
        "endTime": "A String", # End time of the operation.
            # Required when the operation is used in ServiceController.Report,
            # but optional when the operation is used in ServiceController.Check.
        "resources": [ # The resources that are involved in the operation.
            # The maximum supported number of entries in this field is 100.
          { # Describes a resource associated with this operation.
            "resourceContainer": "A String", # The identifier of the parent of this resource instance.
                # Must be in one of the following formats:
                #     - “projects/<project-id or project-number>”
                #     - “folders/<folder-id>”
                #     - “organizations/<organization-id>”
            "resourceName": "A String", # Name of the resource. This is used for auditing purposes.
            "resourceLocation": "A String", # The location of the resource. If not empty, the resource will be checked
                # against location policy. The value must be a valid zone, region or
                # multiregion. For example: "europe-west4" or "northamerica-northeast1-a"
          },
        ],
        "operationId": "A String", # Identity of the operation. This must be unique within the scope of the
            # service that generated the operation. If the service calls
            # Check() and Report() on the same operation, the two calls should carry
            # the same id.
            #
            # UUID version 4 is recommended, though not required.
            # In scenarios where an operation is computed from existing information
            # and an idempotent id is desirable for deduplication purpose, UUID version 5
            # is recommended. See RFC 4122 for details.
      },
    ],
    "serviceConfigId": "A String", # Specifies which version of service config should be used to process the
        # request.
        # 
        # If unspecified or no matching version can be found, the
        # latest one will be used.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for the Report method.
    "reportErrors": [ # Partial failures, one for each `Operation` in the request that failed
        # processing. There are three possible combinations of the RPC status:
        #
        # 1. The combination of a successful RPC status and an empty `report_errors`
        #    list indicates a complete success where all `Operations` in the
        #    request are processed successfully.
        # 2. The combination of a successful RPC status and a non-empty
        #    `report_errors` list indicates a partial success where some
        #    `Operations` in the request succeeded. Each
        #    `Operation` that failed processing has a corresponding item
        #    in this list.
        # 3. A failed RPC status indicates a general non-deterministic failure.
        #    When this happens, it's impossible to know which of the
        #    'Operations' in the request succeeded or failed.
      { # Represents the processing error of one Operation in the request.
        "status": { # The `Status` type defines a logical error model that is suitable for # Details of the error when processing the Operation.
            # different programming environments, including REST APIs and RPC APIs. It is
            # used by [gRPC](https://github.com/grpc). Each `Status` message contains
            # three pieces of data: error code, error message, and error details.
            #
            # You can find out more about this error model and how to work with it in the
            # [API Design Guide](https://cloud.google.com/apis/design/errors).
          "message": "A String", # A developer-facing error message, which should be in English. Any
              # user-facing error message should be localized and sent in the
              # google.rpc.Status.details field, or localized by the client.
          "code": 42, # The status code, which should be an enum value of google.rpc.Code.
          "details": [ # A list of messages that carry the error details.  There is a common set of
              # message types for APIs to use.
            {
              "a_key": "", # Properties of the object. Contains field @type with type URL.
            },
          ],
        },
        "operationId": "A String", # The Operation.operation_id value from the request.
      },
    ],
    "reportInfos": [ # Quota usage for each quota release `Operation` request.
        #
        # Fully or partially failed quota release request may or may not be present
        # in `report_quota_info`. For example, a failed quota release request will
        # have the current quota usage info when precise quota library returns the
        # info. A deadline exceeded quota request will not have quota usage info.
        #
        # If there is no quota release request, report_quota_info will be empty.
      { # Contains additional info about the report operation.
        "quotaInfo": { # Contains the quota information for a quota check response. # Quota usage info when processing the `Operation`.
          "quotaMetrics": [ # Quota metrics to indicate the usage. Depending on the check request, one or
              # more of the following metrics will be included:
              #
              # 1. For rate quota, per quota group or per quota metric incremental usage
              # will be specified using the following delta metric:
              #   "serviceruntime.googleapis.com/api/consumer/quota_used_count"
              #
              # 2. For allocation quota, per quota metric total usage will be specified
              # using the following gauge metric:
              #   "serviceruntime.googleapis.com/allocation/consumer/quota_used_count"
              #
              # 3. For both rate quota and allocation quota, the quota limit reached
              # condition will be specified using the following boolean metric:
              #   "serviceruntime.googleapis.com/quota/exceeded"
            { # Represents a set of metric values in the same metric.
                # Each metric value in the set should have a unique combination of start time,
                # end time, and label values.
              "metricValues": [ # The values in this metric.
                { # Represents a single metric value.
                  "moneyValue": { # Represents an amount of money with its currency type. # A money value.
                    "nanos": 42, # Number of nano (10^-9) units of the amount.
                        # The value must be between -999,999,999 and +999,999,999 inclusive.
                        # If `units` is positive, `nanos` must be positive or zero.
                        # If `units` is zero, `nanos` can be positive, zero, or negative.
                        # If `units` is negative, `nanos` must be negative or zero.
                        # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                    "units": "A String", # The whole units of the amount.
                        # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                    "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
                  },
                  "labels": { # The labels describing the metric value.
                      # See comments on google.api.servicecontrol.v1.Operation.labels for
                      # the overriding relationship.
                    "a_key": "A String",
                  },
                  "doubleValue": 3.14, # A double precision floating point value.
                  "boolValue": True or False, # A boolean value.
                  "startTime": "A String", # The start of the time period over which this metric value's measurement
                      # applies. The time period has different semantics for different metric
                      # types (cumulative, delta, and gauge). See the metric definition
                      # documentation in the service configuration for details.
                  "distributionValue": { # Distribution represents a frequency distribution of double-valued sample # A distribution value.
                      # 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
                    "count": "A String", # The total number of samples in the distribution. Must be >= 0.
                    "bucketCounts": [ # 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.
                      "A String",
                    ],
                    "exponentialBuckets": { # Describing buckets with exponentially growing width. # Buckets with exponentially growing width.
                      "scale": 3.14, # 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.
                      "growthFactor": 3.14, # 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.
                      "numFiniteBuckets": 42, # 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.
                    },
                    "minimum": 3.14, # The minimum of the population of values. Ignored if `count` is zero.
                    "maximum": 3.14, # The maximum of the population of values. Ignored if `count` is zero.
                    "sumOfSquaredDeviation": 3.14, # 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.
                    "linearBuckets": { # Describing buckets with constant width. # Buckets with constant width.
                      "width": 3.14, # 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.
                      "numFiniteBuckets": 42, # 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.
                      "offset": 3.14, # 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.
                    },
                    "explicitBuckets": { # Describing buckets with arbitrary user-provided width. # Buckets with arbitrary user-provided width.
                      "bounds": [ # '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
                        3.14,
                      ],
                    },
                    "mean": 3.14, # The arithmetic mean of the samples in the distribution. If `count` is
                        # zero then this field must be zero.
                  },
                  "stringValue": "A String", # A text string value.
                  "int64Value": "A String", # A signed 64-bit integer value.
                  "endTime": "A String", # The end of the time period over which this metric value's measurement
                      # applies.
                },
              ],
              "metricName": "A String", # The metric name defined in the service configuration.
            },
          ],
          "limitExceeded": [ # Quota Metrics that have exceeded quota limits.
              # For QuotaGroup-based quota, this is QuotaGroup.name
              # For QuotaLimit-based quota, this is QuotaLimit.name
              # See: google.api.Quota
              # Deprecated: Use quota_metrics to get per quota group limit exceeded status.
            "A String",
          ],
          "quotaConsumed": { # Map of quota group name to the actual number of tokens consumed. If the
              # quota check was not successful, then this will not be populated due to no
              # quota consumption.
              #
              # We are not merging this field with 'quota_metrics' field because of the
              # complexity of scaling in Chemist client code base. For simplicity, we will
              # keep this field for Castor (that scales quota usage) and 'quota_metrics'
              # for SuperQuota (that doesn't scale quota usage).
            "a_key": 42,
          },
        },
        "operationId": "A String", # The Operation.operation_id value from the request.
      },
    ],
    "serviceConfigId": "A String", # The actual config id used to process the request.
    "serviceRolloutId": "A String", # Unimplemented. The current service rollout id used to process the request.
  }</pre>
</div>

</body></html>