// Copyright 2025 Google LLC.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Code generated file. DO NOT EDIT.

// Package monitoring provides access to the Cloud Monitoring API.
//
// This package is DEPRECATED. Use package cloud.google.com/go/monitoring/apiv3 instead.
//
// For product documentation, see: https://cloud.google.com/monitoring/api/
//
// # Library status
//
// These client libraries are officially supported by Google. However, this
// library is considered complete and is in maintenance mode. This means
// that we will address critical bugs and security issues but will not add
// any new features.
//
// When possible, we recommend using our newer
// [Cloud Client Libraries for Go](https://pkg.go.dev/cloud.google.com/go)
// that are still actively being worked and iterated on.
//
// # Creating a client
//
// Usage example:
//
//	import "google.golang.org/api/monitoring/v3"
//	...
//	ctx := context.Background()
//	monitoringService, err := monitoring.NewService(ctx)
//
// In this example, Google Application Default Credentials are used for
// authentication. For information on how to create and obtain Application
// Default Credentials, see https://developers.google.com/identity/protocols/application-default-credentials.
//
// # Other authentication options
//
// By default, all available scopes (see "Constants") are used to authenticate.
// To restrict scopes, use [google.golang.org/api/option.WithScopes]:
//
//	monitoringService, err := monitoring.NewService(ctx, option.WithScopes(monitoring.MonitoringWriteScope))
//
// To use an API key for authentication (note: some APIs do not support API
// keys), use [google.golang.org/api/option.WithAPIKey]:
//
//	monitoringService, err := monitoring.NewService(ctx, option.WithAPIKey("AIza..."))
//
// To use an OAuth token (e.g., a user token obtained via a three-legged OAuth
// flow, use [google.golang.org/api/option.WithTokenSource]:
//
//	config := &oauth2.Config{...}
//	// ...
//	token, err := config.Exchange(ctx, ...)
//	monitoringService, err := monitoring.NewService(ctx, option.WithTokenSource(config.TokenSource(ctx, token)))
//
// See [google.golang.org/api/option.ClientOption] for details on options.
package monitoring // import "google.golang.org/api/monitoring/v3"

import (
	"bytes"
	"context"
	"encoding/json"
	"errors"
	"fmt"
	"io"
	"log/slog"
	"net/http"
	"net/url"
	"strconv"
	"strings"

	"github.com/googleapis/gax-go/v2/internallog"
	googleapi "google.golang.org/api/googleapi"
	internal "google.golang.org/api/internal"
	gensupport "google.golang.org/api/internal/gensupport"
	option "google.golang.org/api/option"
	internaloption "google.golang.org/api/option/internaloption"
	htransport "google.golang.org/api/transport/http"
)

// Always reference these packages, just in case the auto-generated code
// below doesn't.
var _ = bytes.NewBuffer
var _ = strconv.Itoa
var _ = fmt.Sprintf
var _ = json.NewDecoder
var _ = io.Copy
var _ = url.Parse
var _ = gensupport.MarshalJSON
var _ = googleapi.Version
var _ = errors.New
var _ = strings.Replace
var _ = context.Canceled
var _ = internaloption.WithDefaultEndpoint
var _ = internal.Version
var _ = internallog.New

const apiId = "monitoring:v3"
const apiName = "monitoring"
const apiVersion = "v3"
const basePath = "https://monitoring.googleapis.com/"
const basePathTemplate = "https://monitoring.UNIVERSE_DOMAIN/"
const mtlsBasePath = "https://monitoring.mtls.googleapis.com/"

// OAuth2 scopes used by this API.
const (
	// See, edit, configure, and delete your Google Cloud data and see the email
	// address for your Google Account.
	CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform"

	// View and write monitoring data for all of your Google and third-party Cloud
	// and API projects
	MonitoringScope = "https://www.googleapis.com/auth/monitoring"

	// View monitoring data for all of your Google Cloud and third-party projects
	MonitoringReadScope = "https://www.googleapis.com/auth/monitoring.read"

	// Publish metric data to your Google Cloud projects
	MonitoringWriteScope = "https://www.googleapis.com/auth/monitoring.write"
)

// NewService creates a new Service.
func NewService(ctx context.Context, opts ...option.ClientOption) (*Service, error) {
	scopesOption := internaloption.WithDefaultScopes(
		"https://www.googleapis.com/auth/cloud-platform",
		"https://www.googleapis.com/auth/monitoring",
		"https://www.googleapis.com/auth/monitoring.read",
		"https://www.googleapis.com/auth/monitoring.write",
	)
	// NOTE: prepend, so we don't override user-specified scopes.
	opts = append([]option.ClientOption{scopesOption}, opts...)
	opts = append(opts, internaloption.WithDefaultEndpoint(basePath))
	opts = append(opts, internaloption.WithDefaultEndpointTemplate(basePathTemplate))
	opts = append(opts, internaloption.WithDefaultMTLSEndpoint(mtlsBasePath))
	opts = append(opts, internaloption.EnableNewAuthLibrary())
	client, endpoint, err := htransport.NewClient(ctx, opts...)
	if err != nil {
		return nil, err
	}
	s := &Service{client: client, BasePath: basePath, logger: internaloption.GetLogger(opts)}
	s.Folders = NewFoldersService(s)
	s.Organizations = NewOrganizationsService(s)
	s.Projects = NewProjectsService(s)
	s.Services = NewServicesService(s)
	s.UptimeCheckIps = NewUptimeCheckIpsService(s)
	if err != nil {
		return nil, err
	}
	if endpoint != "" {
		s.BasePath = endpoint
	}
	return s, nil
}

// New creates a new Service. It uses the provided http.Client for requests.
//
// Deprecated: please use NewService instead.
// To provide a custom HTTP client, use option.WithHTTPClient.
// If you are using google.golang.org/api/googleapis/transport.APIKey, use option.WithAPIKey with NewService instead.
func New(client *http.Client) (*Service, error) {
	if client == nil {
		return nil, errors.New("client is nil")
	}
	return NewService(context.Background(), option.WithHTTPClient(client))
}

type Service struct {
	client    *http.Client
	logger    *slog.Logger
	BasePath  string // API endpoint base URL
	UserAgent string // optional additional User-Agent fragment

	Folders *FoldersService

	Organizations *OrganizationsService

	Projects *ProjectsService

	Services *ServicesService

	UptimeCheckIps *UptimeCheckIpsService
}

func (s *Service) userAgent() string {
	if s.UserAgent == "" {
		return googleapi.UserAgent
	}
	return googleapi.UserAgent + " " + s.UserAgent
}

func NewFoldersService(s *Service) *FoldersService {
	rs := &FoldersService{s: s}
	rs.TimeSeries = NewFoldersTimeSeriesService(s)
	return rs
}

type FoldersService struct {
	s *Service

	TimeSeries *FoldersTimeSeriesService
}

func NewFoldersTimeSeriesService(s *Service) *FoldersTimeSeriesService {
	rs := &FoldersTimeSeriesService{s: s}
	return rs
}

type FoldersTimeSeriesService struct {
	s *Service
}

func NewOrganizationsService(s *Service) *OrganizationsService {
	rs := &OrganizationsService{s: s}
	rs.TimeSeries = NewOrganizationsTimeSeriesService(s)
	return rs
}

type OrganizationsService struct {
	s *Service

	TimeSeries *OrganizationsTimeSeriesService
}

func NewOrganizationsTimeSeriesService(s *Service) *OrganizationsTimeSeriesService {
	rs := &OrganizationsTimeSeriesService{s: s}
	return rs
}

type OrganizationsTimeSeriesService struct {
	s *Service
}

func NewProjectsService(s *Service) *ProjectsService {
	rs := &ProjectsService{s: s}
	rs.AlertPolicies = NewProjectsAlertPoliciesService(s)
	rs.CollectdTimeSeries = NewProjectsCollectdTimeSeriesService(s)
	rs.Groups = NewProjectsGroupsService(s)
	rs.MetricDescriptors = NewProjectsMetricDescriptorsService(s)
	rs.MonitoredResourceDescriptors = NewProjectsMonitoredResourceDescriptorsService(s)
	rs.NotificationChannelDescriptors = NewProjectsNotificationChannelDescriptorsService(s)
	rs.NotificationChannels = NewProjectsNotificationChannelsService(s)
	rs.Snoozes = NewProjectsSnoozesService(s)
	rs.TimeSeries = NewProjectsTimeSeriesService(s)
	rs.UptimeCheckConfigs = NewProjectsUptimeCheckConfigsService(s)
	return rs
}

type ProjectsService struct {
	s *Service

	AlertPolicies *ProjectsAlertPoliciesService

	CollectdTimeSeries *ProjectsCollectdTimeSeriesService

	Groups *ProjectsGroupsService

	MetricDescriptors *ProjectsMetricDescriptorsService

	MonitoredResourceDescriptors *ProjectsMonitoredResourceDescriptorsService

	NotificationChannelDescriptors *ProjectsNotificationChannelDescriptorsService

	NotificationChannels *ProjectsNotificationChannelsService

	Snoozes *ProjectsSnoozesService

	TimeSeries *ProjectsTimeSeriesService

	UptimeCheckConfigs *ProjectsUptimeCheckConfigsService
}

func NewProjectsAlertPoliciesService(s *Service) *ProjectsAlertPoliciesService {
	rs := &ProjectsAlertPoliciesService{s: s}
	return rs
}

type ProjectsAlertPoliciesService struct {
	s *Service
}

func NewProjectsCollectdTimeSeriesService(s *Service) *ProjectsCollectdTimeSeriesService {
	rs := &ProjectsCollectdTimeSeriesService{s: s}
	return rs
}

type ProjectsCollectdTimeSeriesService struct {
	s *Service
}

func NewProjectsGroupsService(s *Service) *ProjectsGroupsService {
	rs := &ProjectsGroupsService{s: s}
	rs.Members = NewProjectsGroupsMembersService(s)
	return rs
}

type ProjectsGroupsService struct {
	s *Service

	Members *ProjectsGroupsMembersService
}

func NewProjectsGroupsMembersService(s *Service) *ProjectsGroupsMembersService {
	rs := &ProjectsGroupsMembersService{s: s}
	return rs
}

type ProjectsGroupsMembersService struct {
	s *Service
}

func NewProjectsMetricDescriptorsService(s *Service) *ProjectsMetricDescriptorsService {
	rs := &ProjectsMetricDescriptorsService{s: s}
	return rs
}

type ProjectsMetricDescriptorsService struct {
	s *Service
}

func NewProjectsMonitoredResourceDescriptorsService(s *Service) *ProjectsMonitoredResourceDescriptorsService {
	rs := &ProjectsMonitoredResourceDescriptorsService{s: s}
	return rs
}

type ProjectsMonitoredResourceDescriptorsService struct {
	s *Service
}

func NewProjectsNotificationChannelDescriptorsService(s *Service) *ProjectsNotificationChannelDescriptorsService {
	rs := &ProjectsNotificationChannelDescriptorsService{s: s}
	return rs
}

type ProjectsNotificationChannelDescriptorsService struct {
	s *Service
}

func NewProjectsNotificationChannelsService(s *Service) *ProjectsNotificationChannelsService {
	rs := &ProjectsNotificationChannelsService{s: s}
	return rs
}

type ProjectsNotificationChannelsService struct {
	s *Service
}

func NewProjectsSnoozesService(s *Service) *ProjectsSnoozesService {
	rs := &ProjectsSnoozesService{s: s}
	return rs
}

type ProjectsSnoozesService struct {
	s *Service
}

func NewProjectsTimeSeriesService(s *Service) *ProjectsTimeSeriesService {
	rs := &ProjectsTimeSeriesService{s: s}
	return rs
}

type ProjectsTimeSeriesService struct {
	s *Service
}

func NewProjectsUptimeCheckConfigsService(s *Service) *ProjectsUptimeCheckConfigsService {
	rs := &ProjectsUptimeCheckConfigsService{s: s}
	return rs
}

type ProjectsUptimeCheckConfigsService struct {
	s *Service
}

func NewServicesService(s *Service) *ServicesService {
	rs := &ServicesService{s: s}
	rs.ServiceLevelObjectives = NewServicesServiceLevelObjectivesService(s)
	return rs
}

type ServicesService struct {
	s *Service

	ServiceLevelObjectives *ServicesServiceLevelObjectivesService
}

func NewServicesServiceLevelObjectivesService(s *Service) *ServicesServiceLevelObjectivesService {
	rs := &ServicesServiceLevelObjectivesService{s: s}
	return rs
}

type ServicesServiceLevelObjectivesService struct {
	s *Service
}

func NewUptimeCheckIpsService(s *Service) *UptimeCheckIpsService {
	rs := &UptimeCheckIpsService{s: s}
	return rs
}

type UptimeCheckIpsService struct {
	s *Service
}

// Aggregation: Describes how to combine multiple time series to provide a
// different view of the data. Aggregation of time series is done in two steps.
// First, each time series in the set is aligned to the same time interval
// boundaries, then the set of time series is optionally reduced in
// number.Alignment consists of applying the per_series_aligner operation to
// each time series after its data has been divided into regular
// alignment_period time intervals. This process takes all of the data points
// in an alignment period, applies a mathematical transformation such as
// averaging, minimum, maximum, delta, etc., and converts them into a single
// data point per period.Reduction is when the aligned and transformed time
// series can optionally be combined, reducing the number of time series
// through similar mathematical transformations. Reduction involves applying a
// cross_series_reducer to all the time series, optionally sorting the time
// series into subsets with group_by_fields, and applying the reducer to each
// subset.The raw time series data can contain a huge amount of information
// from multiple sources. Alignment and reduction transforms this mass of data
// into a more manageable and representative collection of data, for example
// "the 95% latency across the average of all tasks in a cluster". This
// representative data can be more easily graphed and comprehended, and the
// individual time series data is still available for later drilldown. For more
// details, see Filtering and aggregation
// (https://cloud.google.com/monitoring/api/v3/aggregation).
type Aggregation struct {
	// AlignmentPeriod: The alignment_period specifies a time interval, in seconds,
	// that is used to divide the data in all the time series into consistent
	// blocks of time. This will be done before the per-series aligner can be
	// applied to the data.The value must be at least 60 seconds. If a per-series
	// aligner other than ALIGN_NONE is specified, this field is required or an
	// error is returned. If no per-series aligner is specified, or the aligner
	// ALIGN_NONE is specified, then this field is ignored.The maximum value of the
	// alignment_period is 104 weeks (2 years) for charts, and 90,000 seconds (25
	// hours) for alerting policies.
	AlignmentPeriod string `json:"alignmentPeriod,omitempty"`
	// CrossSeriesReducer: The reduction operation to be used to combine time
	// series into a single time series, where the value of each data point in the
	// resulting series is a function of all the already aligned values in the
	// input time series.Not all reducer operations can be applied to all time
	// series. The valid choices depend on the metric_kind and the value_type of
	// the original time series. Reduction can yield a time series with a different
	// metric_kind or value_type than the input time series.Time series data must
	// first be aligned (see per_series_aligner) in order to perform cross-time
	// series reduction. If cross_series_reducer is specified, then
	// per_series_aligner must be specified, and must not be ALIGN_NONE. An
	// alignment_period must also be specified; otherwise, an error is returned.
	//
	// Possible values:
	//   "REDUCE_NONE" - No cross-time series reduction. The output of the Aligner
	// is returned.
	//   "REDUCE_MEAN" - Reduce by computing the mean value across time series for
	// each alignment period. This reducer is valid for DELTA and GAUGE metrics
	// with numeric or distribution values. The value_type of the output is DOUBLE.
	//   "REDUCE_MIN" - Reduce by computing the minimum value across time series
	// for each alignment period. This reducer is valid for DELTA and GAUGE metrics
	// with numeric values. The value_type of the output is the same as the
	// value_type of the input.
	//   "REDUCE_MAX" - Reduce by computing the maximum value across time series
	// for each alignment period. This reducer is valid for DELTA and GAUGE metrics
	// with numeric values. The value_type of the output is the same as the
	// value_type of the input.
	//   "REDUCE_SUM" - Reduce by computing the sum across time series for each
	// alignment period. This reducer is valid for DELTA and GAUGE metrics with
	// numeric and distribution values. The value_type of the output is the same as
	// the value_type of the input.
	//   "REDUCE_STDDEV" - Reduce by computing the standard deviation across time
	// series for each alignment period. This reducer is valid for DELTA and GAUGE
	// metrics with numeric or distribution values. The value_type of the output is
	// DOUBLE.
	//   "REDUCE_COUNT" - Reduce by computing the number of data points across time
	// series for each alignment period. This reducer is valid for DELTA and GAUGE
	// metrics of numeric, Boolean, distribution, and string value_type. The
	// value_type of the output is INT64.
	//   "REDUCE_COUNT_TRUE" - Reduce by computing the number of True-valued data
	// points across time series for each alignment period. This reducer is valid
	// for DELTA and GAUGE metrics of Boolean value_type. The value_type of the
	// output is INT64.
	//   "REDUCE_COUNT_FALSE" - Reduce by computing the number of False-valued data
	// points across time series for each alignment period. This reducer is valid
	// for DELTA and GAUGE metrics of Boolean value_type. The value_type of the
	// output is INT64.
	//   "REDUCE_FRACTION_TRUE" - Reduce by computing the ratio of the number of
	// True-valued data points to the total number of data points for each
	// alignment period. This reducer is valid for DELTA and GAUGE metrics of
	// Boolean value_type. The output value is in the range 0.0, 1.0 and has
	// value_type DOUBLE.
	//   "REDUCE_PERCENTILE_99" - Reduce by computing the 99th percentile
	// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
	// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
	// of numeric and distribution type. The value of the output is DOUBLE.
	//   "REDUCE_PERCENTILE_95" - Reduce by computing the 95th percentile
	// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
	// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
	// of numeric and distribution type. The value of the output is DOUBLE.
	//   "REDUCE_PERCENTILE_50" - Reduce by computing the 50th percentile
	// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
	// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
	// of numeric and distribution type. The value of the output is DOUBLE.
	//   "REDUCE_PERCENTILE_05" - Reduce by computing the 5th percentile
	// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
	// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
	// of numeric and distribution type. The value of the output is DOUBLE.
	CrossSeriesReducer string `json:"crossSeriesReducer,omitempty"`
	// GroupByFields: The set of fields to preserve when cross_series_reducer is
	// specified. The group_by_fields determine how the time series are partitioned
	// into subsets prior to applying the aggregation operation. Each subset
	// contains time series that have the same value for each of the grouping
	// fields. Each individual time series is a member of exactly one subset. The
	// cross_series_reducer is applied to each subset of time series. It is not
	// possible to reduce across different resource types, so this field implicitly
	// contains resource.type. Fields not specified in group_by_fields are
	// aggregated away. If group_by_fields is not specified and all the time series
	// have the same resource type, then the time series are aggregated into a
	// single output time series. If cross_series_reducer is not defined, this
	// field is ignored.
	GroupByFields []string `json:"groupByFields,omitempty"`
	// PerSeriesAligner: An Aligner describes how to bring the data points in a
	// single time series into temporal alignment. Except for ALIGN_NONE, all
	// alignments cause all the data points in an alignment_period to be
	// mathematically grouped together, resulting in a single data point for each
	// alignment_period with end timestamp at the end of the period.Not all
	// alignment operations may be applied to all time series. The valid choices
	// depend on the metric_kind and value_type of the original time series.
	// Alignment can change the metric_kind or the value_type of the time
	// series.Time series data must be aligned in order to perform cross-time
	// series reduction. If cross_series_reducer is specified, then
	// per_series_aligner must be specified and not equal to ALIGN_NONE and
	// alignment_period must be specified; otherwise, an error is returned.
	//
	// Possible values:
	//   "ALIGN_NONE" - No alignment. Raw data is returned. Not valid if
	// cross-series reduction is requested. The value_type of the result is the
	// same as the value_type of the input.
	//   "ALIGN_DELTA" - Align and convert to DELTA. The output is delta = y1 -
	// y0.This alignment is valid for CUMULATIVE and DELTA metrics. If the selected
	// alignment period results in periods with no data, then the aligned value for
	// such a period is created by interpolation. The value_type of the aligned
	// result is the same as the value_type of the input.
	//   "ALIGN_RATE" - Align and convert to a rate. The result is computed as rate
	// = (y1 - y0)/(t1 - t0), or "delta over time". Think of this aligner as
	// providing the slope of the line that passes through the value at the start
	// and at the end of the alignment_period.This aligner is valid for CUMULATIVE
	// and DELTA metrics with numeric values. If the selected alignment period
	// results in periods with no data, then the aligned value for such a period is
	// created by interpolation. The output is a GAUGE metric with value_type
	// DOUBLE.If, by "rate", you mean "percentage change", see the
	// ALIGN_PERCENT_CHANGE aligner instead.
	//   "ALIGN_INTERPOLATE" - Align by interpolating between adjacent points
	// around the alignment period boundary. This aligner is valid for GAUGE
	// metrics with numeric values. The value_type of the aligned result is the
	// same as the value_type of the input.
	//   "ALIGN_NEXT_OLDER" - Align by moving the most recent data point before the
	// end of the alignment period to the boundary at the end of the alignment
	// period. This aligner is valid for GAUGE metrics. The value_type of the
	// aligned result is the same as the value_type of the input.
	//   "ALIGN_MIN" - Align the time series by returning the minimum value in each
	// alignment period. This aligner is valid for GAUGE and DELTA metrics with
	// numeric values. The value_type of the aligned result is the same as the
	// value_type of the input.
	//   "ALIGN_MAX" - Align the time series by returning the maximum value in each
	// alignment period. This aligner is valid for GAUGE and DELTA metrics with
	// numeric values. The value_type of the aligned result is the same as the
	// value_type of the input.
	//   "ALIGN_MEAN" - Align the time series by returning the mean value in each
	// alignment period. This aligner is valid for GAUGE and DELTA metrics with
	// numeric values. The value_type of the aligned result is DOUBLE.
	//   "ALIGN_COUNT" - Align the time series by returning the number of values in
	// each alignment period. This aligner is valid for GAUGE and DELTA metrics
	// with numeric or Boolean values. The value_type of the aligned result is
	// INT64.
	//   "ALIGN_SUM" - Align the time series by returning the sum of the values in
	// each alignment period. This aligner is valid for GAUGE and DELTA metrics
	// with numeric and distribution values. The value_type of the aligned result
	// is the same as the value_type of the input.
	//   "ALIGN_STDDEV" - Align the time series by returning the standard deviation
	// of the values in each alignment period. This aligner is valid for GAUGE and
	// DELTA metrics with numeric values. The value_type of the output is DOUBLE.
	//   "ALIGN_COUNT_TRUE" - Align the time series by returning the number of True
	// values in each alignment period. This aligner is valid for GAUGE metrics
	// with Boolean values. The value_type of the output is INT64.
	//   "ALIGN_COUNT_FALSE" - Align the time series by returning the number of
	// False values in each alignment period. This aligner is valid for GAUGE
	// metrics with Boolean values. The value_type of the output is INT64.
	//   "ALIGN_FRACTION_TRUE" - Align the time series by returning the ratio of
	// the number of True values to the total number of values in each alignment
	// period. This aligner is valid for GAUGE metrics with Boolean values. The
	// output value is in the range 0.0, 1.0 and has value_type DOUBLE.
	//   "ALIGN_PERCENTILE_99" - Align the time series by using percentile
	// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
	// point in each alignment period is the 99th percentile of all data points in
	// the period. This aligner is valid for GAUGE and DELTA metrics with
	// distribution values. The output is a GAUGE metric with value_type DOUBLE.
	//   "ALIGN_PERCENTILE_95" - Align the time series by using percentile
	// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
	// point in each alignment period is the 95th percentile of all data points in
	// the period. This aligner is valid for GAUGE and DELTA metrics with
	// distribution values. The output is a GAUGE metric with value_type DOUBLE.
	//   "ALIGN_PERCENTILE_50" - Align the time series by using percentile
	// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
	// point in each alignment period is the 50th percentile of all data points in
	// the period. This aligner is valid for GAUGE and DELTA metrics with
	// distribution values. The output is a GAUGE metric with value_type DOUBLE.
	//   "ALIGN_PERCENTILE_05" - Align the time series by using percentile
	// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
	// point in each alignment period is the 5th percentile of all data points in
	// the period. This aligner is valid for GAUGE and DELTA metrics with
	// distribution values. The output is a GAUGE metric with value_type DOUBLE.
	//   "ALIGN_PERCENT_CHANGE" - Align and convert to a percentage change. This
	// aligner is valid for GAUGE and DELTA metrics with numeric values. This
	// alignment returns ((current - previous)/previous) * 100, where the value of
	// previous is determined based on the alignment_period.If the values of
	// current and previous are both 0, then the returned value is 0. If only
	// previous is 0, the returned value is infinity.A 10-minute moving mean is
	// computed at each point of the alignment period prior to the above
	// calculation to smooth the metric and prevent false positives from very
	// short-lived spikes. The moving mean is only applicable for data whose values
	// are >= 0. Any values < 0 are treated as a missing datapoint, and are
	// ignored. While DELTA metrics are accepted by this alignment, special care
	// should be taken that the values for the metric will always be positive. The
	// output is a GAUGE metric with value_type DOUBLE.
	PerSeriesAligner string `json:"perSeriesAligner,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AlignmentPeriod") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AlignmentPeriod") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Aggregation) MarshalJSON() ([]byte, error) {
	type NoMethod Aggregation
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// AlertPolicy: A description of the conditions under which some aspect of your
// system is considered to be "unhealthy" and the ways to notify people or
// services about this state. For an overview of alerting policies, see
// Introduction to Alerting (https://cloud.google.com/monitoring/alerts/).
type AlertPolicy struct {
	// AlertStrategy: Control over how this alerting policy's notification channels
	// are notified.
	AlertStrategy *AlertStrategy `json:"alertStrategy,omitempty"`
	// Combiner: How to combine the results of multiple conditions to determine if
	// an incident should be opened. If condition_time_series_query_language is
	// present, this must be COMBINE_UNSPECIFIED.
	//
	// Possible values:
	//   "COMBINE_UNSPECIFIED" - An unspecified combiner.
	//   "AND" - Combine conditions using the logical AND operator. An incident is
	// created only if all the conditions are met simultaneously. This combiner is
	// satisfied if all conditions are met, even if they are met on completely
	// different resources.
	//   "OR" - Combine conditions using the logical OR operator. An incident is
	// created if any of the listed conditions is met.
	//   "AND_WITH_MATCHING_RESOURCE" - Combine conditions using logical AND
	// operator, but unlike the regular AND option, an incident is created only if
	// all conditions are met simultaneously on at least one resource.
	Combiner string `json:"combiner,omitempty"`
	// Conditions: A list of conditions for the policy. The conditions are combined
	// by AND or OR according to the combiner field. If the combined conditions
	// evaluate to true, then an incident is created. A policy can have from one to
	// six conditions. If condition_time_series_query_language is present, it must
	// be the only condition. If condition_monitoring_query_language is present, it
	// must be the only condition.
	Conditions []*Condition `json:"conditions,omitempty"`
	// CreationRecord: A read-only record of the creation of the alerting policy.
	// If provided in a call to create or update, this field will be ignored.
	CreationRecord *MutationRecord `json:"creationRecord,omitempty"`
	// DisplayName: A short name or phrase used to identify the policy in
	// dashboards, notifications, and incidents. To avoid confusion, don't use the
	// same display name for multiple policies in the same project. The name is
	// limited to 512 Unicode characters.The convention for the display_name of a
	// PrometheusQueryLanguageCondition is "{rule group name}/{alert name}", where
	// the {rule group name} and {alert name} should be taken from the
	// corresponding Prometheus configuration file. This convention is not
	// enforced. In any case the display_name is not a unique key of the
	// AlertPolicy.
	DisplayName string `json:"displayName,omitempty"`
	// Documentation: Documentation that is included with notifications and
	// incidents related to this policy. Best practice is for the documentation to
	// include information to help responders understand, mitigate, escalate, and
	// correct the underlying problems detected by the alerting policy.
	// Notification channels that have limited capacity might not show this
	// documentation.
	Documentation *Documentation `json:"documentation,omitempty"`
	// Enabled: Whether or not the policy is enabled. On write, the default
	// interpretation if unset is that the policy is enabled. On read, clients
	// should not make any assumption about the state if it has not been populated.
	// The field should always be populated on List and Get operations, unless a
	// field projection has been specified that strips it out.
	Enabled bool `json:"enabled,omitempty"`
	// MutationRecord: A read-only record of the most recent change to the alerting
	// policy. If provided in a call to create or update, this field will be
	// ignored.
	MutationRecord *MutationRecord `json:"mutationRecord,omitempty"`
	// Name: Identifier. Required if the policy exists. The resource name for this
	// policy. The format is:
	// projects/[PROJECT_ID_OR_NUMBER]/alertPolicies/[ALERT_POLICY_ID]
	// [ALERT_POLICY_ID] is assigned by Cloud Monitoring when the policy is
	// created. When calling the alertPolicies.create method, do not include the
	// name field in the alerting policy passed as part of the request.
	Name string `json:"name,omitempty"`
	// NotificationChannels: Identifies the notification channels to which
	// notifications should be sent when incidents are opened or closed or when new
	// violations occur on an already opened incident. Each element of this array
	// corresponds to the name field in each of the NotificationChannel objects
	// that are returned from the ListNotificationChannels method. The format of
	// the entries in this field is:
	// projects/[PROJECT_ID_OR_NUMBER]/notificationChannels/[CHANNEL_ID]
	NotificationChannels []string `json:"notificationChannels,omitempty"`
	// Severity: Optional. The severity of an alerting policy indicates how
	// important incidents generated by that policy are. The severity level will be
	// displayed on the Incident detail page and in notifications.
	//
	// Possible values:
	//   "SEVERITY_UNSPECIFIED" - No severity is specified. This is the default
	// value.
	//   "CRITICAL" - This is the highest severity level. Use this if the problem
	// could cause significant damage or downtime.
	//   "ERROR" - This is the medium severity level. Use this if the problem could
	// cause minor damage or downtime.
	//   "WARNING" - This is the lowest severity level. Use this if the problem is
	// not causing any damage or downtime, but could potentially lead to a problem
	// in the future.
	Severity string `json:"severity,omitempty"`
	// UserLabels: User-supplied key/value data to be used for organizing and
	// identifying the AlertPolicy objects.The field can contain up to 64 entries.
	// Each key and value is limited to 63 Unicode characters or 128 bytes,
	// whichever is smaller. Labels and values can contain only lowercase letters,
	// numerals, underscores, and dashes. Keys must begin with a letter.Note that
	// Prometheus {alert name} is a valid Prometheus label names
	// (https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels),
	// whereas Prometheus {rule group} is an unrestricted UTF-8 string. This means
	// that they cannot be stored as-is in user labels, because they may contain
	// characters that are not allowed in user-label values.
	UserLabels map[string]string `json:"userLabels,omitempty"`
	// Validity: Read-only description of how the alerting policy is invalid. This
	// field is only set when the alerting policy is invalid. An invalid alerting
	// policy will not generate incidents.
	Validity *Status `json:"validity,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "AlertStrategy") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AlertStrategy") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s AlertPolicy) MarshalJSON() ([]byte, error) {
	type NoMethod AlertPolicy
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// AlertStrategy: Control over how the notification channels in
// notification_channels are notified when this alert fires.
type AlertStrategy struct {
	// AutoClose: If an alerting policy that was active has no data for this long,
	// any open incidents will close
	AutoClose string `json:"autoClose,omitempty"`
	// NotificationChannelStrategy: Control how notifications will be sent out, on
	// a per-channel basis.
	NotificationChannelStrategy []*NotificationChannelStrategy `json:"notificationChannelStrategy,omitempty"`
	// NotificationPrompts: For log-based alert policies, the notification prompts
	// is always OPENED. For non log-based alert policies, the notification prompts
	// can be OPENED or OPENED, CLOSED.
	//
	// Possible values:
	//   "NOTIFICATION_PROMPT_UNSPECIFIED" - No strategy specified. Treated as
	// error.
	//   "OPENED" - Notify when an incident is opened.
	//   "CLOSED" - Notify when an incident is closed.
	NotificationPrompts []string `json:"notificationPrompts,omitempty"`
	// NotificationRateLimit: Required for log-based alerting policies, i.e.
	// policies with a LogMatch condition.This limit is not implemented for
	// alerting policies that do not have a LogMatch condition.
	NotificationRateLimit *NotificationRateLimit `json:"notificationRateLimit,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AutoClose") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AutoClose") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s AlertStrategy) MarshalJSON() ([]byte, error) {
	type NoMethod AlertStrategy
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// AppEngine: App Engine service. Learn more at
// https://cloud.google.com/appengine.
type AppEngine struct {
	// ModuleId: The ID of the App Engine module underlying this service.
	// Corresponds to the module_id resource label in the gae_app monitored
	// resource (https://cloud.google.com/monitoring/api/resources#tag_gae_app).
	ModuleId string `json:"moduleId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ModuleId") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ModuleId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s AppEngine) MarshalJSON() ([]byte, error) {
	type NoMethod AppEngine
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// AvailabilityCriteria: Future parameters for the availability SLI.
type AvailabilityCriteria struct {
}

// BasicAuthentication: The authentication parameters to provide to the
// specified resource or URL that requires a username and password. Currently,
// only Basic HTTP authentication (https://tools.ietf.org/html/rfc7617) is
// supported in Uptime checks.
type BasicAuthentication struct {
	// Password: The password to use when authenticating with the HTTP server.
	Password string `json:"password,omitempty"`
	// Username: The username to use when authenticating with the HTTP server.
	Username string `json:"username,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Password") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Password") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s BasicAuthentication) MarshalJSON() ([]byte, error) {
	type NoMethod BasicAuthentication
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// BasicService: A well-known service type, defined by its service type and
// service labels. Documentation and examples here
// (https://cloud.google.com/stackdriver/docs/solutions/slo-monitoring/api/api-structures#basic-svc-w-basic-sli).
type BasicService struct {
	// ServiceLabels: Labels that specify the resource that emits the monitoring
	// data which is used for SLO reporting of this Service. Documentation and
	// valid values for given service types here
	// (https://cloud.google.com/stackdriver/docs/solutions/slo-monitoring/api/api-structures#basic-svc-w-basic-sli).
	ServiceLabels map[string]string `json:"serviceLabels,omitempty"`
	// ServiceType: The type of service that this basic service defines, e.g.
	// APP_ENGINE service type. Documentation and valid values here
	// (https://cloud.google.com/stackdriver/docs/solutions/slo-monitoring/api/api-structures#basic-svc-w-basic-sli).
	ServiceType string `json:"serviceType,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ServiceLabels") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ServiceLabels") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s BasicService) MarshalJSON() ([]byte, error) {
	type NoMethod BasicService
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// BasicSli: An SLI measuring performance on a well-known service type.
// Performance will be computed on the basis of pre-defined metrics. The type
// of the service_resource determines the metrics to use and the
// service_resource.labels and metric_labels are used to construct a monitoring
// filter to filter that metric down to just the data relevant to this service.
type BasicSli struct {
	// Availability: Good service is defined to be the count of requests made to
	// this service that return successfully.
	Availability *AvailabilityCriteria `json:"availability,omitempty"`
	// Latency: Good service is defined to be the count of requests made to this
	// service that are fast enough with respect to latency.threshold.
	Latency *LatencyCriteria `json:"latency,omitempty"`
	// Location: OPTIONAL: The set of locations to which this SLI is relevant.
	// Telemetry from other locations will not be used to calculate performance for
	// this SLI. If omitted, this SLI applies to all locations in which the Service
	// has activity. For service types that don't support breaking down by
	// location, setting this field will result in an error.
	Location []string `json:"location,omitempty"`
	// Method: OPTIONAL: The set of RPCs to which this SLI is relevant. Telemetry
	// from other methods will not be used to calculate performance for this SLI.
	// If omitted, this SLI applies to all the Service's methods. For service types
	// that don't support breaking down by method, setting this field will result
	// in an error.
	Method []string `json:"method,omitempty"`
	// Version: OPTIONAL: The set of API versions to which this SLI is relevant.
	// Telemetry from other API versions will not be used to calculate performance
	// for this SLI. If omitted, this SLI applies to all API versions. For service
	// types that don't support breaking down by version, setting this field will
	// result in an error.
	Version []string `json:"version,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Availability") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Availability") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s BasicSli) MarshalJSON() ([]byte, error) {
	type NoMethod BasicSli
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// BooleanTest: A test that uses an alerting result in a boolean column
// produced by the SQL query.
type BooleanTest struct {
	// Column: Required. The name of the column containing the boolean value. If
	// the value in a row is NULL, that row is ignored.
	Column string `json:"column,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Column") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Column") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s BooleanTest) MarshalJSON() ([]byte, error) {
	type NoMethod BooleanTest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// BucketOptions: BucketOptions describes the bucket boundaries used to create
// a histogram for the distribution. The buckets can be in a linear sequence,
// an exponential sequence, or each bucket can be specified explicitly.
// BucketOptions does not include the number of values in each bucket.A bucket
// has an inclusive lower bound and exclusive upper bound for the values that
// are counted for that bucket. The upper bound of a bucket must be strictly
// greater than the lower bound. The sequence of N buckets for a distribution
// consists of an underflow bucket (number 0), zero or more finite buckets
// (number 1 through N - 2) and an overflow bucket (number N - 1). The buckets
// are contiguous: the lower bound of bucket i (i > 0) is the same as the upper
// bound of bucket i - 1. The buckets span the whole range of finite values:
// lower bound of the underflow bucket is -infinity and the upper bound of the
// overflow bucket is +infinity. The finite buckets are so-called because both
// bounds are finite.
type BucketOptions struct {
	// ExplicitBuckets: The explicit buckets.
	ExplicitBuckets *Explicit `json:"explicitBuckets,omitempty"`
	// ExponentialBuckets: The exponential buckets.
	ExponentialBuckets *Exponential `json:"exponentialBuckets,omitempty"`
	// LinearBuckets: The linear bucket.
	LinearBuckets *Linear `json:"linearBuckets,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ExplicitBuckets") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ExplicitBuckets") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s BucketOptions) MarshalJSON() ([]byte, error) {
	type NoMethod BucketOptions
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// CloudEndpoints: Cloud Endpoints service. Learn more at
// https://cloud.google.com/endpoints.
type CloudEndpoints struct {
	// Service: The name of the Cloud Endpoints service underlying this service.
	// Corresponds to the service resource label in the api monitored resource
	// (https://cloud.google.com/monitoring/api/resources#tag_api).
	Service string `json:"service,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Service") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Service") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s CloudEndpoints) MarshalJSON() ([]byte, error) {
	type NoMethod CloudEndpoints
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// CloudFunctionV2Target: A Synthetic Monitor deployed to a Cloud Functions V2
// instance.
type CloudFunctionV2Target struct {
	// CloudRunRevision: Output only. The cloud_run_revision Monitored Resource
	// associated with the GCFv2. The Synthetic Monitor execution results (metrics,
	// logs, and spans) are reported against this Monitored Resource. This field is
	// output only.
	CloudRunRevision *MonitoredResource `json:"cloudRunRevision,omitempty"`
	// Name: Required. Fully qualified GCFv2 resource name i.e.
	// projects/{project}/locations/{location}/functions/{function} Required.
	Name string `json:"name,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CloudRunRevision") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CloudRunRevision") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s CloudFunctionV2Target) MarshalJSON() ([]byte, error) {
	type NoMethod CloudFunctionV2Target
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// CloudRun: Cloud Run service. Learn more at https://cloud.google.com/run.
type CloudRun struct {
	// Location: The location the service is run. Corresponds to the location
	// resource label in the cloud_run_revision monitored resource
	// (https://cloud.google.com/monitoring/api/resources#tag_cloud_run_revision).
	Location string `json:"location,omitempty"`
	// ServiceName: The name of the Cloud Run service. Corresponds to the
	// service_name resource label in the cloud_run_revision monitored resource
	// (https://cloud.google.com/monitoring/api/resources#tag_cloud_run_revision).
	ServiceName string `json:"serviceName,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Location") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Location") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s CloudRun) MarshalJSON() ([]byte, error) {
	type NoMethod CloudRun
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ClusterIstio: Istio service scoped to a single Kubernetes cluster. Learn
// more at https://istio.io. Clusters running OSS Istio will have their
// services ingested as this type.
type ClusterIstio struct {
	// ClusterName: The name of the Kubernetes cluster in which this Istio service
	// is defined. Corresponds to the cluster_name resource label in k8s_cluster
	// resources.
	ClusterName string `json:"clusterName,omitempty"`
	// Location: The location of the Kubernetes cluster in which this Istio service
	// is defined. Corresponds to the location resource label in k8s_cluster
	// resources.
	Location string `json:"location,omitempty"`
	// ServiceName: The name of the Istio service underlying this service.
	// Corresponds to the destination_service_name metric label in Istio metrics.
	ServiceName string `json:"serviceName,omitempty"`
	// ServiceNamespace: The namespace of the Istio service underlying this
	// service. Corresponds to the destination_service_namespace metric label in
	// Istio metrics.
	ServiceNamespace string `json:"serviceNamespace,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ClusterName") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ClusterName") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ClusterIstio) MarshalJSON() ([]byte, error) {
	type NoMethod ClusterIstio
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// CollectdPayload: A collection of data points sent from a collectd-based
// plugin. See the collectd documentation for more information.
type CollectdPayload struct {
	// EndTime: The end time of the interval.
	EndTime string `json:"endTime,omitempty"`
	// Metadata: The measurement metadata. Example: "process_id" -> 12345
	Metadata map[string]TypedValue `json:"metadata,omitempty"`
	// Plugin: The name of the plugin. Example: "disk".
	Plugin string `json:"plugin,omitempty"`
	// PluginInstance: The instance name of the plugin Example: "hdcl".
	PluginInstance string `json:"pluginInstance,omitempty"`
	// StartTime: The start time of the interval.
	StartTime string `json:"startTime,omitempty"`
	// Type: The measurement type. Example: "memory".
	Type string `json:"type,omitempty"`
	// TypeInstance: The measurement type instance. Example: "used".
	TypeInstance string `json:"typeInstance,omitempty"`
	// Values: The measured values during this time interval. Each value must have
	// a different data_source_name.
	Values []*CollectdValue `json:"values,omitempty"`
	// ForceSendFields is a list of field names (e.g. "EndTime") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "EndTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s CollectdPayload) MarshalJSON() ([]byte, error) {
	type NoMethod CollectdPayload
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// CollectdPayloadError: Describes the error status for payloads that were not
// written.
type CollectdPayloadError struct {
	// Error: Records the error status for the payload. If this field is present,
	// the partial errors for nested values won't be populated.
	Error *Status `json:"error,omitempty"`
	// Index: The zero-based index in
	// CreateCollectdTimeSeriesRequest.collectd_payloads.
	Index int64 `json:"index,omitempty"`
	// ValueErrors: Records the error status for values that were not written due
	// to an error.Failed payloads for which nothing is written will not include
	// partial value errors.
	ValueErrors []*CollectdValueError `json:"valueErrors,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Error") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Error") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s CollectdPayloadError) MarshalJSON() ([]byte, error) {
	type NoMethod CollectdPayloadError
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// CollectdValue: A single data point from a collectd-based plugin.
type CollectdValue struct {
	// DataSourceName: The data source for the collectd value. For example, there
	// are two data sources for network measurements: "rx" and "tx".
	DataSourceName string `json:"dataSourceName,omitempty"`
	// DataSourceType: The type of measurement.
	//
	// Possible values:
	//   "UNSPECIFIED_DATA_SOURCE_TYPE" - An unspecified data source type. This
	// corresponds to
	// google.api.MetricDescriptor.MetricKind.METRIC_KIND_UNSPECIFIED.
	//   "GAUGE" - An instantaneous measurement of a varying quantity. This
	// corresponds to google.api.MetricDescriptor.MetricKind.GAUGE.
	//   "COUNTER" - A cumulative value over time. This corresponds to
	// google.api.MetricDescriptor.MetricKind.CUMULATIVE.
	//   "DERIVE" - A rate of change of the measurement.
	//   "ABSOLUTE" - An amount of change since the last measurement interval. This
	// corresponds to google.api.MetricDescriptor.MetricKind.DELTA.
	DataSourceType string `json:"dataSourceType,omitempty"`
	// Value: The measurement value.
	Value *TypedValue `json:"value,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DataSourceName") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DataSourceName") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s CollectdValue) MarshalJSON() ([]byte, error) {
	type NoMethod CollectdValue
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// CollectdValueError: Describes the error status for values that were not
// written.
type CollectdValueError struct {
	// Error: Records the error status for the value.
	Error *Status `json:"error,omitempty"`
	// Index: The zero-based index in CollectdPayload.values within the parent
	// CreateCollectdTimeSeriesRequest.collectd_payloads.
	Index int64 `json:"index,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Error") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Error") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s CollectdValueError) MarshalJSON() ([]byte, error) {
	type NoMethod CollectdValueError
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Condition: A condition is a true/false test that determines when an alerting
// policy should open an incident. If a condition evaluates to true, it
// signifies that something is wrong.
type Condition struct {
	// ConditionAbsent: A condition that checks that a time series continues to
	// receive new data points.
	ConditionAbsent *MetricAbsence `json:"conditionAbsent,omitempty"`
	// ConditionMatchedLog: A condition that checks for log messages matching given
	// constraints. If set, no other conditions can be present.
	ConditionMatchedLog *LogMatch `json:"conditionMatchedLog,omitempty"`
	// ConditionMonitoringQueryLanguage: A condition that uses the Monitoring Query
	// Language to define alerts.
	ConditionMonitoringQueryLanguage *MonitoringQueryLanguageCondition `json:"conditionMonitoringQueryLanguage,omitempty"`
	// ConditionPrometheusQueryLanguage: A condition that uses the Prometheus query
	// language to define alerts.
	ConditionPrometheusQueryLanguage *PrometheusQueryLanguageCondition `json:"conditionPrometheusQueryLanguage,omitempty"`
	// ConditionSql: A condition that periodically evaluates a SQL query result.
	ConditionSql *SqlCondition `json:"conditionSql,omitempty"`
	// ConditionThreshold: A condition that compares a time series against a
	// threshold.
	ConditionThreshold *MetricThreshold `json:"conditionThreshold,omitempty"`
	// DisplayName: A short name or phrase used to identify the condition in
	// dashboards, notifications, and incidents. To avoid confusion, don't use the
	// same display name for multiple conditions in the same policy.
	DisplayName string `json:"displayName,omitempty"`
	// Name: Required if the condition exists. The unique resource name for this
	// condition. Its format is:
	// projects/[PROJECT_ID_OR_NUMBER]/alertPolicies/[POLICY_ID]/conditions/[CONDITI
	// ON_ID] [CONDITION_ID] is assigned by Cloud Monitoring when the condition is
	// created as part of a new or updated alerting policy.When calling the
	// alertPolicies.create method, do not include the name field in the conditions
	// of the requested alerting policy. Cloud Monitoring creates the condition
	// identifiers and includes them in the new policy.When calling the
	// alertPolicies.update method to update a policy, including a condition name
	// causes the existing condition to be updated. Conditions without names are
	// added to the updated policy. Existing conditions are deleted if they are not
	// updated.Best practice is to preserve [CONDITION_ID] if you make only small
	// changes, such as those to condition thresholds, durations, or trigger
	// values. Otherwise, treat the change as a new condition and let the existing
	// condition be deleted.
	Name string `json:"name,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ConditionAbsent") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ConditionAbsent") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Condition) MarshalJSON() ([]byte, error) {
	type NoMethod Condition
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ContentMatcher: Optional. Used to perform content matching. This allows
// matching based on substrings and regular expressions, together with their
// negations. Only the first 4 MB of an HTTP or HTTPS check's response (and the
// first 1 MB of a TCP check's response) are examined for purposes of content
// matching.
type ContentMatcher struct {
	// Content: String, regex or JSON content to match. Maximum 1024 bytes. An
	// empty content string indicates no content matching is to be performed.
	Content string `json:"content,omitempty"`
	// JsonPathMatcher: Matcher information for MATCHES_JSON_PATH and
	// NOT_MATCHES_JSON_PATH
	JsonPathMatcher *JsonPathMatcher `json:"jsonPathMatcher,omitempty"`
	// Matcher: The type of content matcher that will be applied to the server
	// output, compared to the content string when the check is run.
	//
	// Possible values:
	//   "CONTENT_MATCHER_OPTION_UNSPECIFIED" - No content matcher type specified
	// (maintained for backward compatibility, but deprecated for future use).
	// Treated as CONTAINS_STRING.
	//   "CONTAINS_STRING" - Selects substring matching. The match succeeds if the
	// output contains the content string. This is the default value for checks
	// without a matcher option, or where the value of matcher is
	// CONTENT_MATCHER_OPTION_UNSPECIFIED.
	//   "NOT_CONTAINS_STRING" - Selects negation of substring matching. The match
	// succeeds if the output does NOT contain the content string.
	//   "MATCHES_REGEX" - Selects regular-expression matching. The match succeeds
	// if the output matches the regular expression specified in the content
	// string. Regex matching is only supported for HTTP/HTTPS checks.
	//   "NOT_MATCHES_REGEX" - Selects negation of regular-expression matching. The
	// match succeeds if the output does NOT match the regular expression specified
	// in the content string. Regex matching is only supported for HTTP/HTTPS
	// checks.
	//   "MATCHES_JSON_PATH" - Selects JSONPath matching. See JsonPathMatcher for
	// details on when the match succeeds. JSONPath matching is only supported for
	// HTTP/HTTPS checks.
	//   "NOT_MATCHES_JSON_PATH" - Selects JSONPath matching. See JsonPathMatcher
	// for details on when the match succeeds. Succeeds when output does NOT match
	// as specified. JSONPath is only supported for HTTP/HTTPS checks.
	Matcher string `json:"matcher,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Content") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Content") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ContentMatcher) MarshalJSON() ([]byte, error) {
	type NoMethod ContentMatcher
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// CreateCollectdTimeSeriesRequest: The CreateCollectdTimeSeries request.
type CreateCollectdTimeSeriesRequest struct {
	// CollectdPayloads: The collectd payloads representing the time series data.
	// You must not include more than a single point for each time series, so no
	// two payloads can have the same values for all of the fields plugin,
	// plugin_instance, type, and type_instance.
	CollectdPayloads []*CollectdPayload `json:"collectdPayloads,omitempty"`
	// CollectdVersion: The version of collectd that collected the data. Example:
	// "5.3.0-192.el6".
	CollectdVersion string `json:"collectdVersion,omitempty"`
	// Resource: The monitored resource associated with the time series.
	Resource *MonitoredResource `json:"resource,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CollectdPayloads") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CollectdPayloads") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s CreateCollectdTimeSeriesRequest) MarshalJSON() ([]byte, error) {
	type NoMethod CreateCollectdTimeSeriesRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// CreateCollectdTimeSeriesResponse: The CreateCollectdTimeSeries response.
type CreateCollectdTimeSeriesResponse struct {
	// PayloadErrors: Records the error status for points that were not written due
	// to an error in the request.Failed requests for which nothing is written will
	// return an error response instead. Requests where data points were rejected
	// by the backend will set summary instead.
	PayloadErrors []*CollectdPayloadError `json:"payloadErrors,omitempty"`
	// Summary: Aggregate statistics from writing the payloads. This field is
	// omitted if all points were successfully written, so that the response is
	// empty. This is for backwards compatibility with clients that log errors on
	// any non-empty response.
	Summary *CreateTimeSeriesSummary `json:"summary,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "PayloadErrors") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "PayloadErrors") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s CreateCollectdTimeSeriesResponse) MarshalJSON() ([]byte, error) {
	type NoMethod CreateCollectdTimeSeriesResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// CreateTimeSeriesRequest: The CreateTimeSeries request.
type CreateTimeSeriesRequest struct {
	// TimeSeries: Required. The new data to be added to a list of time series.
	// Adds at most one data point to each of several time series. The new data
	// point must be more recent than any other point in its time series. Each
	// TimeSeries value must fully specify a unique time series by supplying all
	// label values for the metric and the monitored resource.The maximum number of
	// TimeSeries objects per Create request is 200.
	TimeSeries []*TimeSeries `json:"timeSeries,omitempty"`
	// ForceSendFields is a list of field names (e.g. "TimeSeries") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "TimeSeries") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s CreateTimeSeriesRequest) MarshalJSON() ([]byte, error) {
	type NoMethod CreateTimeSeriesRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// CreateTimeSeriesSummary: Summary of the result of a failed request to write
// data to a time series.
type CreateTimeSeriesSummary struct {
	// Errors: The number of points that failed to be written. Order is not
	// guaranteed.
	Errors []*Error `json:"errors,omitempty"`
	// SuccessPointCount: The number of points that were successfully written.
	SuccessPointCount int64 `json:"successPointCount,omitempty"`
	// TotalPointCount: The number of points in the request.
	TotalPointCount int64 `json:"totalPointCount,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Errors") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Errors") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s CreateTimeSeriesSummary) MarshalJSON() ([]byte, error) {
	type NoMethod CreateTimeSeriesSummary
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Criteria: Criteria specific to the AlertPolicys that this Snooze applies to.
// The Snooze will suppress alerts that come from one of the AlertPolicys whose
// names are supplied.
type Criteria struct {
	// Policies: The specific AlertPolicy names for the alert that should be
	// snoozed. The format is:
	// projects/[PROJECT_ID_OR_NUMBER]/alertPolicies/[POLICY_ID] There is a limit
	// of 16 policies per snooze. This limit is checked during snooze creation.
	Policies []string `json:"policies,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Policies") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Policies") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Criteria) MarshalJSON() ([]byte, error) {
	type NoMethod Criteria
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Custom: Use a custom service to designate a service that you want to monitor
// when none of the other service types (like App Engine, Cloud Run, or a GKE
// type) matches your intended service.
type Custom struct {
}

// Daily: Used to schedule the query to run every so many days.
type Daily struct {
	// ExecutionTime: Optional. The time of day (in UTC) at which the query should
	// run. If left unspecified, the server picks an arbitrary time of day and runs
	// the query at the same time each day.
	ExecutionTime *TimeOfDay `json:"executionTime,omitempty"`
	// Periodicity: Required. The number of days between runs. Must be greater than
	// or equal to 1 day and less than or equal to 31 days.
	Periodicity int64 `json:"periodicity,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ExecutionTime") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ExecutionTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Daily) MarshalJSON() ([]byte, error) {
	type NoMethod Daily
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Distribution: Distribution contains summary statistics for a population of
// values. It optionally contains a histogram representing the distribution of
// those values across a set of buckets.The summary statistics are the count,
// mean, sum of the squared deviation from the mean, the minimum, and the
// maximum of the set of population of values. The histogram is based on a
// sequence of buckets and gives a count of values that fall into each bucket.
// The boundaries of the buckets are given either explicitly or by formulas for
// buckets of fixed or exponentially increasing widths.Although it is not
// forbidden, it is generally a bad idea to include non-finite values
// (infinities or NaNs) in the population of values, as this will render the
// mean and sum_of_squared_deviation fields meaningless.
type Distribution struct {
	// BucketCounts: Required in the Cloud Monitoring API v3. The values for each
	// bucket specified in bucket_options. The sum of the values in bucketCounts
	// must equal the value in the count field of the Distribution object. The
	// order of the bucket counts follows the numbering schemes described for the
	// three bucket types. The underflow bucket has number 0; the finite buckets,
	// if any, have numbers 1 through N-2; and the overflow bucket has number N-1.
	// The size of bucket_counts must not be greater than N. If the size is less
	// than N, then the remaining buckets are assigned values of zero.
	BucketCounts googleapi.Int64s `json:"bucketCounts,omitempty"`
	// BucketOptions: Required in the Cloud Monitoring API v3. Defines the
	// histogram bucket boundaries.
	BucketOptions *BucketOptions `json:"bucketOptions,omitempty"`
	// Count: The number of values in the population. Must be non-negative. This
	// value must equal the sum of the values in bucket_counts if a histogram is
	// provided.
	Count int64 `json:"count,omitempty,string"`
	// Exemplars: Must be in increasing order of value field.
	Exemplars []*Exemplar `json:"exemplars,omitempty"`
	// Mean: The arithmetic mean of the values in the population. If count is zero
	// then this field must be zero.
	Mean float64 `json:"mean,omitempty"`
	// Range: If specified, contains the range of the population values. The field
	// must not be present if the count is zero. This field is presently ignored by
	// the Cloud Monitoring API v3.
	Range *Range `json:"range,omitempty"`
	// SumOfSquaredDeviation: The sum of squared deviations from the mean of the
	// values in the population. For values x_i this is: Sumi=1..n ((x_i - mean)^2)
	// Knuth, "The Art of Computer Programming", Vol. 2, page 232, 3rd edition
	// describes Welford's method for accumulating this sum in one pass.If count is
	// zero then this field must be zero.
	SumOfSquaredDeviation float64 `json:"sumOfSquaredDeviation,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BucketCounts") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BucketCounts") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Distribution) MarshalJSON() ([]byte, error) {
	type NoMethod Distribution
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *Distribution) UnmarshalJSON(data []byte) error {
	type NoMethod Distribution
	var s1 struct {
		Mean                  gensupport.JSONFloat64 `json:"mean"`
		SumOfSquaredDeviation gensupport.JSONFloat64 `json:"sumOfSquaredDeviation"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.Mean = float64(s1.Mean)
	s.SumOfSquaredDeviation = float64(s1.SumOfSquaredDeviation)
	return nil
}

// DistributionCut: A DistributionCut defines a TimeSeries and thresholds used
// for measuring good service and total service. The TimeSeries must have
// ValueType = DISTRIBUTION and MetricKind = DELTA or MetricKind = CUMULATIVE.
// The computed good_service will be the estimated count of values in the
// Distribution that fall within the specified min and max.
type DistributionCut struct {
	// DistributionFilter: A monitoring filter
	// (https://cloud.google.com/monitoring/api/v3/filters) specifying a TimeSeries
	// aggregating values. Must have ValueType = DISTRIBUTION and MetricKind =
	// DELTA or MetricKind = CUMULATIVE.
	DistributionFilter string `json:"distributionFilter,omitempty"`
	// Range: Range of values considered "good." For a one-sided range, set one
	// bound to an infinite value.
	Range *GoogleMonitoringV3Range `json:"range,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DistributionFilter") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DistributionFilter") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s DistributionCut) MarshalJSON() ([]byte, error) {
	type NoMethod DistributionCut
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Documentation: Documentation that is included in the notifications and
// incidents pertaining to this policy.
type Documentation struct {
	// Content: The body of the documentation, interpreted according to mime_type.
	// The content may not exceed 8,192 Unicode characters and may not exceed more
	// than 10,240 bytes when encoded in UTF-8 format, whichever is smaller. This
	// text can be templatized by using variables
	// (https://cloud.google.com/monitoring/alerts/doc-variables#doc-vars).
	Content string `json:"content,omitempty"`
	// Links: Optional. Links to content such as playbooks, repositories, and other
	// resources. This field can contain up to 3 entries.
	Links []*Link `json:"links,omitempty"`
	// MimeType: The format of the content field. Presently, only the value
	// "text/markdown" is supported. See Markdown
	// (https://en.wikipedia.org/wiki/Markdown) for more information.
	MimeType string `json:"mimeType,omitempty"`
	// Subject: Optional. The subject line of the notification. The subject line
	// may not exceed 10,240 bytes. In notifications generated by this policy, the
	// contents of the subject line after variable expansion will be truncated to
	// 255 bytes or shorter at the latest UTF-8 character boundary. The 255-byte
	// limit is recommended by this thread
	// (https://stackoverflow.com/questions/1592291/what-is-the-email-subject-length-limit).
	// It is both the limit imposed by some third-party ticketing products and it
	// is common to define textual fields in databases as VARCHAR(255).The contents
	// of the subject line can be templatized by using variables
	// (https://cloud.google.com/monitoring/alerts/doc-variables#doc-vars). If this
	// field is missing or empty, a default subject line will be generated.
	Subject string `json:"subject,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Content") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Content") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Documentation) MarshalJSON() ([]byte, error) {
	type NoMethod Documentation
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// DroppedLabels: A set of (label, value) pairs that were removed from a
// Distribution time series during aggregation and then added as an attachment
// to a Distribution.Exemplar.The full label set for the exemplars is
// constructed by using the dropped pairs in combination with the label values
// that remain on the aggregated Distribution time series. The constructed full
// label set can be used to identify the specific entity, such as the instance
// or job, which might be contributing to a long-tail. However, with dropped
// labels, the storage requirements are reduced because only the aggregated
// distribution values for a large group of time series are stored.Note that
// there are no guarantees on ordering of the labels from exemplar-to-exemplar
// and from distribution-to-distribution in the same stream, and there may be
// duplicates. It is up to clients to resolve any ambiguities.
type DroppedLabels struct {
	// Label: Map from label to its value, for all labels dropped in any
	// aggregation.
	Label map[string]string `json:"label,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Label") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Label") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s DroppedLabels) MarshalJSON() ([]byte, error) {
	type NoMethod DroppedLabels
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Empty: A generic empty message that you can re-use to avoid defining
// duplicated empty messages in your APIs. A typical example is to use it as
// the request or the response type of an API method. For instance: service Foo
// { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }
type Empty struct {
	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
}

// Error: Detailed information about an error category.
type Error struct {
	// PointCount: The number of points that couldn't be written because of status.
	PointCount int64 `json:"pointCount,omitempty"`
	// Status: The status of the requested write operation.
	Status *Status `json:"status,omitempty"`
	// ForceSendFields is a list of field names (e.g. "PointCount") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "PointCount") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Error) MarshalJSON() ([]byte, error) {
	type NoMethod Error
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Exemplar: Exemplars are example points that may be used to annotate
// aggregated distribution values. They are metadata that gives information
// about a particular value added to a Distribution bucket, such as a trace ID
// that was active when a value was added. They may contain further
// information, such as a example values and timestamps, origin, etc.
type Exemplar struct {
	// Attachments: Contextual information about the example value. Examples
	// are:Trace: type.googleapis.com/google.monitoring.v3.SpanContextLiteral
	// string: type.googleapis.com/google.protobuf.StringValueLabels dropped during
	// aggregation: type.googleapis.com/google.monitoring.v3.DroppedLabelsThere may
	// be only a single attachment of any given message type in a single exemplar,
	// and this is enforced by the system.
	Attachments []googleapi.RawMessage `json:"attachments,omitempty"`
	// Timestamp: The observation (sampling) time of the above value.
	Timestamp string `json:"timestamp,omitempty"`
	// Value: Value of the exemplar point. This value determines to which bucket
	// the exemplar belongs.
	Value float64 `json:"value,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Attachments") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Attachments") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Exemplar) MarshalJSON() ([]byte, error) {
	type NoMethod Exemplar
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *Exemplar) UnmarshalJSON(data []byte) error {
	type NoMethod Exemplar
	var s1 struct {
		Value gensupport.JSONFloat64 `json:"value"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.Value = float64(s1.Value)
	return nil
}

// Explicit: Specifies a set of buckets with arbitrary widths.There are
// size(bounds) + 1 (= N) buckets. Bucket i has the following boundaries:Upper
// bound (0 <= i < N-1): boundsi Lower bound (1 <= i < N); boundsi - 1The
// bounds field must contain at least one element. If bounds has only one
// element, then there are no finite buckets, and that single element is the
// common boundary of the overflow and underflow buckets.
type Explicit struct {
	// Bounds: The values must be monotonically increasing.
	Bounds []float64 `json:"bounds,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Bounds") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Bounds") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Explicit) MarshalJSON() ([]byte, error) {
	type NoMethod Explicit
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *Explicit) UnmarshalJSON(data []byte) error {
	type NoMethod Explicit
	var s1 struct {
		Bounds []gensupport.JSONFloat64 `json:"bounds"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.Bounds = make([]float64, len(s1.Bounds))
	for i := range s1.Bounds {
		s.Bounds[i] = float64(s1.Bounds[i])
	}
	return nil
}

// Exponential: Specifies an exponential sequence of buckets that have a width
// that is proportional to the value of the lower bound. Each bucket represents
// a constant relative uncertainty on a specific value in the bucket.There are
// num_finite_buckets + 2 (= N) buckets. Bucket i has the following
// boundaries:Upper bound (0 <= i < N-1): scale * (growth_factor ^ i).Lower
// bound (1 <= i < N): scale * (growth_factor ^ (i - 1)).
type Exponential struct {
	// GrowthFactor: Must be greater than 1.
	GrowthFactor float64 `json:"growthFactor,omitempty"`
	// NumFiniteBuckets: Must be greater than 0.
	NumFiniteBuckets int64 `json:"numFiniteBuckets,omitempty"`
	// Scale: Must be greater than 0.
	Scale float64 `json:"scale,omitempty"`
	// ForceSendFields is a list of field names (e.g. "GrowthFactor") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "GrowthFactor") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Exponential) MarshalJSON() ([]byte, error) {
	type NoMethod Exponential
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *Exponential) UnmarshalJSON(data []byte) error {
	type NoMethod Exponential
	var s1 struct {
		GrowthFactor gensupport.JSONFloat64 `json:"growthFactor"`
		Scale        gensupport.JSONFloat64 `json:"scale"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.GrowthFactor = float64(s1.GrowthFactor)
	s.Scale = float64(s1.Scale)
	return nil
}

// Field: A single field of a message type.
type Field struct {
	// Cardinality: The field cardinality.
	//
	// Possible values:
	//   "CARDINALITY_UNKNOWN" - For fields with unknown cardinality.
	//   "CARDINALITY_OPTIONAL" - For optional fields.
	//   "CARDINALITY_REQUIRED" - For required fields. Proto2 syntax only.
	//   "CARDINALITY_REPEATED" - For repeated fields.
	Cardinality string `json:"cardinality,omitempty"`
	// DefaultValue: The string value of the default value of this field. Proto2
	// syntax only.
	DefaultValue string `json:"defaultValue,omitempty"`
	// JsonName: The field JSON name.
	JsonName string `json:"jsonName,omitempty"`
	// Kind: The field type.
	//
	// Possible values:
	//   "TYPE_UNKNOWN" - Field type unknown.
	//   "TYPE_DOUBLE" - Field type double.
	//   "TYPE_FLOAT" - Field type float.
	//   "TYPE_INT64" - Field type int64.
	//   "TYPE_UINT64" - Field type uint64.
	//   "TYPE_INT32" - Field type int32.
	//   "TYPE_FIXED64" - Field type fixed64.
	//   "TYPE_FIXED32" - Field type fixed32.
	//   "TYPE_BOOL" - Field type bool.
	//   "TYPE_STRING" - Field type string.
	//   "TYPE_GROUP" - Field type group. Proto2 syntax only, and deprecated.
	//   "TYPE_MESSAGE" - Field type message.
	//   "TYPE_BYTES" - Field type bytes.
	//   "TYPE_UINT32" - Field type uint32.
	//   "TYPE_ENUM" - Field type enum.
	//   "TYPE_SFIXED32" - Field type sfixed32.
	//   "TYPE_SFIXED64" - Field type sfixed64.
	//   "TYPE_SINT32" - Field type sint32.
	//   "TYPE_SINT64" - Field type sint64.
	Kind string `json:"kind,omitempty"`
	// Name: The field name.
	Name string `json:"name,omitempty"`
	// Number: The field number.
	Number int64 `json:"number,omitempty"`
	// OneofIndex: The index of the field type in Type.oneofs, for message or
	// enumeration types. The first type has index 1; zero means the type is not in
	// the list.
	OneofIndex int64 `json:"oneofIndex,omitempty"`
	// Options: The protocol buffer options.
	Options []*Option `json:"options,omitempty"`
	// Packed: Whether to use alternative packed wire representation.
	Packed bool `json:"packed,omitempty"`
	// TypeUrl: The field type URL, without the scheme, for message or enumeration
	// types. Example: "type.googleapis.com/google.protobuf.Timestamp".
	TypeUrl string `json:"typeUrl,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Cardinality") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Cardinality") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Field) MarshalJSON() ([]byte, error) {
	type NoMethod Field
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ForecastOptions: Options used when forecasting the time series and testing
// the predicted value against the threshold.
type ForecastOptions struct {
	// ForecastHorizon: Required. The length of time into the future to forecast
	// whether a time series will violate the threshold. If the predicted value is
	// found to violate the threshold, and the violation is observed in all
	// forecasts made for the configured duration, then the time series is
	// considered to be failing. The forecast horizon can range from 1 hour to 60
	// hours.
	ForecastHorizon string `json:"forecastHorizon,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ForecastHorizon") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ForecastHorizon") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ForecastOptions) MarshalJSON() ([]byte, error) {
	type NoMethod ForecastOptions
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GetNotificationChannelVerificationCodeRequest: The
// GetNotificationChannelVerificationCode request.
type GetNotificationChannelVerificationCodeRequest struct {
	// ExpireTime: The desired expiration time. If specified, the API will
	// guarantee that the returned code will not be valid after the specified
	// timestamp; however, the API cannot guarantee that the returned code will be
	// valid for at least as long as the requested time (the API puts an upper
	// bound on the amount of time for which a code may be valid). If omitted, a
	// default expiration will be used, which may be less than the max permissible
	// expiration (so specifying an expiration may extend the code's lifetime over
	// omitting an expiration, even though the API does impose an upper limit on
	// the maximum expiration that is permitted).
	ExpireTime string `json:"expireTime,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ExpireTime") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ExpireTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GetNotificationChannelVerificationCodeRequest) MarshalJSON() ([]byte, error) {
	type NoMethod GetNotificationChannelVerificationCodeRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GetNotificationChannelVerificationCodeResponse: The
// GetNotificationChannelVerificationCode request.
type GetNotificationChannelVerificationCodeResponse struct {
	// Code: The verification code, which may be used to verify other channels that
	// have an equivalent identity (i.e. other channels of the same type with the
	// same fingerprint such as other email channels with the same email address or
	// other sms channels with the same number).
	Code string `json:"code,omitempty"`
	// ExpireTime: The expiration time associated with the code that was returned.
	// If an expiration was provided in the request, this is the minimum of the
	// requested expiration in the request and the max permitted expiration.
	ExpireTime string `json:"expireTime,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "Code") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Code") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GetNotificationChannelVerificationCodeResponse) MarshalJSON() ([]byte, error) {
	type NoMethod GetNotificationChannelVerificationCodeResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GkeNamespace: GKE Namespace. The field names correspond to the resource
// metadata labels on monitored resources that fall under a namespace (for
// example, k8s_container or k8s_pod).
type GkeNamespace struct {
	// ClusterName: The name of the parent cluster.
	ClusterName string `json:"clusterName,omitempty"`
	// Location: The location of the parent cluster. This may be a zone or region.
	Location string `json:"location,omitempty"`
	// NamespaceName: The name of this namespace.
	NamespaceName string `json:"namespaceName,omitempty"`
	// ProjectId: Output only. The project this resource lives in. For legacy
	// services migrated from the Custom type, this may be a distinct project from
	// the one parenting the service itself.
	ProjectId string `json:"projectId,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ClusterName") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ClusterName") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GkeNamespace) MarshalJSON() ([]byte, error) {
	type NoMethod GkeNamespace
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GkeService: GKE Service. The "service" here represents a Kubernetes service
// object (https://kubernetes.io/docs/concepts/services-networking/service).
// The field names correspond to the resource labels on k8s_service monitored
// resources
// (https://cloud.google.com/monitoring/api/resources#tag_k8s_service).
type GkeService struct {
	// ClusterName: The name of the parent cluster.
	ClusterName string `json:"clusterName,omitempty"`
	// Location: The location of the parent cluster. This may be a zone or region.
	Location string `json:"location,omitempty"`
	// NamespaceName: The name of the parent namespace.
	NamespaceName string `json:"namespaceName,omitempty"`
	// ProjectId: Output only. The project this resource lives in. For legacy
	// services migrated from the Custom type, this may be a distinct project from
	// the one parenting the service itself.
	ProjectId string `json:"projectId,omitempty"`
	// ServiceName: The name of this service.
	ServiceName string `json:"serviceName,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ClusterName") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ClusterName") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GkeService) MarshalJSON() ([]byte, error) {
	type NoMethod GkeService
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GkeWorkload: A GKE Workload (Deployment, StatefulSet, etc). The field names
// correspond to the metadata labels on monitored resources that fall under a
// workload (for example, k8s_container or k8s_pod).
type GkeWorkload struct {
	// ClusterName: The name of the parent cluster.
	ClusterName string `json:"clusterName,omitempty"`
	// Location: The location of the parent cluster. This may be a zone or region.
	Location string `json:"location,omitempty"`
	// NamespaceName: The name of the parent namespace.
	NamespaceName string `json:"namespaceName,omitempty"`
	// ProjectId: Output only. The project this resource lives in. For legacy
	// services migrated from the Custom type, this may be a distinct project from
	// the one parenting the service itself.
	ProjectId string `json:"projectId,omitempty"`
	// TopLevelControllerName: The name of this workload.
	TopLevelControllerName string `json:"topLevelControllerName,omitempty"`
	// TopLevelControllerType: The type of this workload (for example, "Deployment"
	// or "DaemonSet")
	TopLevelControllerType string `json:"topLevelControllerType,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ClusterName") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ClusterName") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GkeWorkload) MarshalJSON() ([]byte, error) {
	type NoMethod GkeWorkload
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// GoogleMonitoringV3Range: Range of numerical values within min and max.
type GoogleMonitoringV3Range struct {
	// Max: Range maximum.
	Max float64 `json:"max,omitempty"`
	// Min: Range minimum.
	Min float64 `json:"min,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Max") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Max") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s GoogleMonitoringV3Range) MarshalJSON() ([]byte, error) {
	type NoMethod GoogleMonitoringV3Range
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *GoogleMonitoringV3Range) UnmarshalJSON(data []byte) error {
	type NoMethod GoogleMonitoringV3Range
	var s1 struct {
		Max gensupport.JSONFloat64 `json:"max"`
		Min gensupport.JSONFloat64 `json:"min"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.Max = float64(s1.Max)
	s.Min = float64(s1.Min)
	return nil
}

// Group: The description of a dynamic collection of monitored resources. Each
// group has a filter that is matched against monitored resources and their
// associated metadata. If a group's filter matches an available monitored
// resource, then that resource is a member of that group. Groups can contain
// any number of monitored resources, and each monitored resource can be a
// member of any number of groups.Groups can be nested in parent-child
// hierarchies. The parentName field identifies an optional parent for each
// group. If a group has a parent, then the only monitored resources available
// to be matched by the group's filter are the resources contained in the
// parent group. In other words, a group contains the monitored resources that
// match its filter and the filters of all the group's ancestors. A group
// without a parent can contain any monitored resource.For example, consider an
// infrastructure running a set of instances with two user-defined tags:
// "environment" and "role". A parent group has a filter,
// environment="production". A child of that parent group has a filter,
// role="transcoder". The parent group contains all instances in the production
// environment, regardless of their roles. The child group contains instances
// that have the transcoder role and are in the production environment.The
// monitored resources contained in a group can change at any moment, depending
// on what resources exist and what filters are associated with the group and
// its ancestors.
type Group struct {
	// DisplayName: A user-assigned name for this group, used only for display
	// purposes.
	DisplayName string `json:"displayName,omitempty"`
	// Filter: The filter used to determine which monitored resources belong to
	// this group.
	Filter string `json:"filter,omitempty"`
	// IsCluster: If true, the members of this group are considered to be a
	// cluster. The system can perform additional analysis on groups that are
	// clusters.
	IsCluster bool `json:"isCluster,omitempty"`
	// Name: Output only. The name of this group. The format is:
	// projects/[PROJECT_ID_OR_NUMBER]/groups/[GROUP_ID] When creating a group,
	// this field is ignored and a new name is created consisting of the project
	// specified in the call to CreateGroup and a unique [GROUP_ID] that is
	// generated automatically.
	Name string `json:"name,omitempty"`
	// ParentName: The name of the group's parent, if it has one. The format is:
	// projects/[PROJECT_ID_OR_NUMBER]/groups/[GROUP_ID] For groups with no parent,
	// parent_name is the empty string, "".
	ParentName string `json:"parentName,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "DisplayName") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DisplayName") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Group) MarshalJSON() ([]byte, error) {
	type NoMethod Group
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Hourly: Used to schedule the query to run every so many hours.
type Hourly struct {
	// MinuteOffset: Optional. The number of minutes after the hour (in UTC) to run
	// the query. Must be greater than or equal to 0 minutes and less than or equal
	// to 59 minutes. If left unspecified, then an arbitrary offset is used.
	MinuteOffset int64 `json:"minuteOffset,omitempty"`
	// Periodicity: Required. The number of hours between runs. Must be greater
	// than or equal to 1 hour and less than or equal to 48 hours.
	Periodicity int64 `json:"periodicity,omitempty"`
	// ForceSendFields is a list of field names (e.g. "MinuteOffset") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "MinuteOffset") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Hourly) MarshalJSON() ([]byte, error) {
	type NoMethod Hourly
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// HttpCheck: Information involved in an HTTP/HTTPS Uptime check request.
type HttpCheck struct {
	// AcceptedResponseStatusCodes: If present, the check will only pass if the
	// HTTP response status code is in this set of status codes. If empty, the HTTP
	// status code will only pass if the HTTP status code is 200-299.
	AcceptedResponseStatusCodes []*ResponseStatusCode `json:"acceptedResponseStatusCodes,omitempty"`
	// AuthInfo: The authentication information. Optional when creating an HTTP
	// check; defaults to empty. Do not set both auth_method and auth_info.
	AuthInfo *BasicAuthentication `json:"authInfo,omitempty"`
	// Body: The request body associated with the HTTP POST request. If
	// content_type is URL_ENCODED, the body passed in must be URL-encoded. Users
	// can provide a Content-Length header via the headers field or the API will do
	// so. If the request_method is GET and body is not empty, the API will return
	// an error. The maximum byte size is 1 megabyte.Note: If client libraries
	// aren't used (which performs the conversion automatically) base64 encode your
	// body data since the field is of bytes type.
	Body string `json:"body,omitempty"`
	// ContentType: The content type header to use for the check. The following
	// configurations result in errors: 1. Content type is specified in both the
	// headers field and the content_type field. 2. Request method is GET and
	// content_type is not TYPE_UNSPECIFIED 3. Request method is POST and
	// content_type is TYPE_UNSPECIFIED. 4. Request method is POST and a
	// "Content-Type" header is provided via headers field. The content_type field
	// should be used instead.
	//
	// Possible values:
	//   "TYPE_UNSPECIFIED" - No content type specified.
	//   "URL_ENCODED" - body is in URL-encoded form. Equivalent to setting the
	// Content-Type to application/x-www-form-urlencoded in the HTTP request.
	//   "USER_PROVIDED" - body is in custom_content_type form. Equivalent to
	// setting the Content-Type to the contents of custom_content_type in the HTTP
	// request.
	ContentType string `json:"contentType,omitempty"`
	// CustomContentType: A user provided content type header to use for the check.
	// The invalid configurations outlined in the content_type field apply to
	// custom_content_type, as well as the following: 1. content_type is
	// URL_ENCODED and custom_content_type is set. 2. content_type is USER_PROVIDED
	// and custom_content_type is not set.
	CustomContentType string `json:"customContentType,omitempty"`
	// Headers: The list of headers to send as part of the Uptime check request. If
	// two headers have the same key and different values, they should be entered
	// as a single header, with the value being a comma-separated list of all the
	// desired values as described at
	// https://www.w3.org/Protocols/rfc2616/rfc2616.txt (page 31). Entering two
	// separate headers with the same key in a Create call will cause the first to
	// be overwritten by the second. The maximum number of headers allowed is 100.
	Headers map[string]string `json:"headers,omitempty"`
	// MaskHeaders: Boolean specifying whether to encrypt the header information.
	// Encryption should be specified for any headers related to authentication
	// that you do not wish to be seen when retrieving the configuration. The
	// server will be responsible for encrypting the headers. On Get/List calls, if
	// mask_headers is set to true then the headers will be obscured with ******.
	MaskHeaders bool `json:"maskHeaders,omitempty"`
	// Path: Optional (defaults to "/"). The path to the page against which to run
	// the check. Will be combined with the host (specified within the
	// monitored_resource) and port to construct the full URL. If the provided path
	// does not begin with "/", a "/" will be prepended automatically.
	Path string `json:"path,omitempty"`
	// PingConfig: Contains information needed to add pings to an HTTP check.
	PingConfig *PingConfig `json:"pingConfig,omitempty"`
	// Port: Optional (defaults to 80 when use_ssl is false, and 443 when use_ssl
	// is true). The TCP port on the HTTP server against which to run the check.
	// Will be combined with host (specified within the monitored_resource) and
	// path to construct the full URL.
	Port int64 `json:"port,omitempty"`
	// RequestMethod: The HTTP request method to use for the check. If set to
	// METHOD_UNSPECIFIED then request_method defaults to GET.
	//
	// Possible values:
	//   "METHOD_UNSPECIFIED" - No request method specified.
	//   "GET" - GET request.
	//   "POST" - POST request.
	RequestMethod string `json:"requestMethod,omitempty"`
	// ServiceAgentAuthentication: If specified, Uptime will generate and attach an
	// OIDC JWT token for the Monitoring service agent service account as an
	// Authorization header in the HTTP request when probing.
	ServiceAgentAuthentication *ServiceAgentAuthentication `json:"serviceAgentAuthentication,omitempty"`
	// UseSsl: If true, use HTTPS instead of HTTP to run the check.
	UseSsl bool `json:"useSsl,omitempty"`
	// ValidateSsl: Boolean specifying whether to include SSL certificate
	// validation as a part of the Uptime check. Only applies to checks where
	// monitored_resource is set to uptime_url. If use_ssl is false, setting
	// validate_ssl to true has no effect.
	ValidateSsl bool `json:"validateSsl,omitempty"`
	// ForceSendFields is a list of field names (e.g.
	// "AcceptedResponseStatusCodes") to unconditionally include in API requests.
	// By default, fields with empty or default values are omitted from API
	// requests. See https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields
	// for more details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AcceptedResponseStatusCodes") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s HttpCheck) MarshalJSON() ([]byte, error) {
	type NoMethod HttpCheck
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// InternalChecker: An internal checker allows Uptime checks to run on
// private/internal GCP resources.
type InternalChecker struct {
	// DisplayName: The checker's human-readable name. The display name should be
	// unique within a Cloud Monitoring Metrics Scope in order to make it easier to
	// identify; however, uniqueness is not enforced.
	DisplayName string `json:"displayName,omitempty"`
	// GcpZone: The GCP zone the Uptime check should egress from. Only respected
	// for internal Uptime checks, where internal_network is specified.
	GcpZone string `json:"gcpZone,omitempty"`
	// Name: A unique resource name for this InternalChecker. The format is:
	// projects/[PROJECT_ID_OR_NUMBER]/internalCheckers/[INTERNAL_CHECKER_ID]
	// [PROJECT_ID_OR_NUMBER] is the Cloud Monitoring Metrics Scope project for the
	// Uptime check config associated with the internal checker.
	Name string `json:"name,omitempty"`
	// Network: The GCP VPC network (https://cloud.google.com/vpc/docs/vpc) where
	// the internal resource lives (ex: "default").
	Network string `json:"network,omitempty"`
	// PeerProjectId: The GCP project ID where the internal checker lives. Not
	// necessary the same as the Metrics Scope project.
	PeerProjectId string `json:"peerProjectId,omitempty"`
	// State: The current operational state of the internal checker.
	//
	// Possible values:
	//   "UNSPECIFIED" - An internal checker should never be in the unspecified
	// state.
	//   "CREATING" - The checker is being created, provisioned, and configured. A
	// checker in this state can be returned by ListInternalCheckers or
	// GetInternalChecker, as well as by examining the long running Operation
	// (https://cloud.google.com/apis/design/design_patterns#long_running_operations)
	// that created it.
	//   "RUNNING" - The checker is running and available for use. A checker in
	// this state can be returned by ListInternalCheckers or GetInternalChecker as
	// well as by examining the long running Operation
	// (https://cloud.google.com/apis/design/design_patterns#long_running_operations)
	// that created it. If a checker is being torn down, it is neither visible nor
	// usable, so there is no "deleting" or "down" state.
	State string `json:"state,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DisplayName") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DisplayName") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s InternalChecker) MarshalJSON() ([]byte, error) {
	type NoMethod InternalChecker
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// IstioCanonicalService: Canonical service scoped to an Istio mesh. Anthos
// clusters running ASM >= 1.6.8 will have their services ingested as this
// type.
type IstioCanonicalService struct {
	// CanonicalService: The name of the canonical service underlying this service.
	// Corresponds to the destination_canonical_service_name metric label in label
	// in Istio metrics (https://cloud.google.com/monitoring/api/metrics_istio).
	CanonicalService string `json:"canonicalService,omitempty"`
	// CanonicalServiceNamespace: The namespace of the canonical service underlying
	// this service. Corresponds to the destination_canonical_service_namespace
	// metric label in Istio metrics
	// (https://cloud.google.com/monitoring/api/metrics_istio).
	CanonicalServiceNamespace string `json:"canonicalServiceNamespace,omitempty"`
	// MeshUid: Identifier for the Istio mesh in which this canonical service is
	// defined. Corresponds to the mesh_uid metric label in Istio metrics
	// (https://cloud.google.com/monitoring/api/metrics_istio).
	MeshUid string `json:"meshUid,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CanonicalService") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CanonicalService") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s IstioCanonicalService) MarshalJSON() ([]byte, error) {
	type NoMethod IstioCanonicalService
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// JsonPathMatcher: Information needed to perform a JSONPath content match.
// Used for ContentMatcherOption::MATCHES_JSON_PATH and
// ContentMatcherOption::NOT_MATCHES_JSON_PATH.
type JsonPathMatcher struct {
	// JsonMatcher: The type of JSONPath match that will be applied to the JSON
	// output (ContentMatcher.content)
	//
	// Possible values:
	//   "JSON_PATH_MATCHER_OPTION_UNSPECIFIED" - No JSONPath matcher type
	// specified (not valid).
	//   "EXACT_MATCH" - Selects 'exact string' matching. The match succeeds if the
	// content at the json_path within the output is exactly the same as the
	// content string.
	//   "REGEX_MATCH" - Selects regular-expression matching. The match succeeds if
	// the content at the json_path within the output matches the regular
	// expression specified in the content string.
	JsonMatcher string `json:"jsonMatcher,omitempty"`
	// JsonPath: JSONPath within the response output pointing to the expected
	// ContentMatcher::content to match against.
	JsonPath string `json:"jsonPath,omitempty"`
	// ForceSendFields is a list of field names (e.g. "JsonMatcher") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "JsonMatcher") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s JsonPathMatcher) MarshalJSON() ([]byte, error) {
	type NoMethod JsonPathMatcher
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// LabelDescriptor: A description of a label.
type LabelDescriptor struct {
	// Description: A human-readable description for the label.
	Description string `json:"description,omitempty"`
	// Key: The key for this label. The key must meet the following criteria: Does
	// not exceed 100 characters. Matches the following regular expression:
	// [a-zA-Z][a-zA-Z0-9_]* The first character must be an upper- or lower-case
	// letter. The remaining characters must be letters, digits, or underscores.
	Key string `json:"key,omitempty"`
	// ValueType: The type of data that can be assigned to the label.
	//
	// Possible values:
	//   "STRING" - A variable-length string, not to exceed 1,024 characters. This
	// is the default value type.
	//   "BOOL" - Boolean; true or false.
	//   "INT64" - A 64-bit signed integer.
	ValueType string `json:"valueType,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Description") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Description") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s LabelDescriptor) MarshalJSON() ([]byte, error) {
	type NoMethod LabelDescriptor
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// LabelValue: A label value.
type LabelValue struct {
	// BoolValue: A bool label value.
	BoolValue bool `json:"boolValue,omitempty"`
	// Int64Value: An int64 label value.
	Int64Value int64 `json:"int64Value,omitempty,string"`
	// StringValue: A string label value.
	StringValue string `json:"stringValue,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BoolValue") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BoolValue") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s LabelValue) MarshalJSON() ([]byte, error) {
	type NoMethod LabelValue
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// LatencyCriteria: Parameters for a latency threshold SLI.
type LatencyCriteria struct {
	// Threshold: Good service is defined to be the count of requests made to this
	// service that return in no more than threshold.
	Threshold string `json:"threshold,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Threshold") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Threshold") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s LatencyCriteria) MarshalJSON() ([]byte, error) {
	type NoMethod LatencyCriteria
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Linear: Specifies a linear sequence of buckets that all have the same width
// (except overflow and underflow). Each bucket represents a constant absolute
// uncertainty on the specific value in the bucket.There are num_finite_buckets
// + 2 (= N) buckets. Bucket i has the following boundaries:Upper bound (0 <= i
// < N-1): offset + (width * i).Lower bound (1 <= i < N): offset + (width * (i
// - 1)).
type Linear struct {
	// NumFiniteBuckets: Must be greater than 0.
	NumFiniteBuckets int64 `json:"numFiniteBuckets,omitempty"`
	// Offset: Lower bound of the first bucket.
	Offset float64 `json:"offset,omitempty"`
	// Width: Must be greater than 0.
	Width float64 `json:"width,omitempty"`
	// ForceSendFields is a list of field names (e.g. "NumFiniteBuckets") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "NumFiniteBuckets") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Linear) MarshalJSON() ([]byte, error) {
	type NoMethod Linear
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *Linear) UnmarshalJSON(data []byte) error {
	type NoMethod Linear
	var s1 struct {
		Offset gensupport.JSONFloat64 `json:"offset"`
		Width  gensupport.JSONFloat64 `json:"width"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.Offset = float64(s1.Offset)
	s.Width = float64(s1.Width)
	return nil
}

// Link: Links to content such as playbooks, repositories, and other resources.
type Link struct {
	// DisplayName: A short display name for the link. The display name must not be
	// empty or exceed 63 characters. Example: "playbook".
	DisplayName string `json:"displayName,omitempty"`
	// Url: The url of a webpage. A url can be templatized by using variables in
	// the path or the query parameters. The total length of a URL should not
	// exceed 2083 characters before and after variable expansion. Example:
	// "https://my_domain.com/playbook?name=${resource.name}"
	Url string `json:"url,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DisplayName") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DisplayName") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Link) MarshalJSON() ([]byte, error) {
	type NoMethod Link
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ListAlertPoliciesResponse: The protocol for the ListAlertPolicies response.
type ListAlertPoliciesResponse struct {
	// AlertPolicies: The returned alert policies.
	AlertPolicies []*AlertPolicy `json:"alertPolicies,omitempty"`
	// NextPageToken: If there might be more results than were returned, then this
	// field is set to a non-empty value. To see the additional results, use that
	// value as page_token in the next call to this method.
	NextPageToken string `json:"nextPageToken,omitempty"`
	// TotalSize: The total number of alert policies in all pages. This number is
	// only an estimate, and may change in subsequent pages. https://aip.dev/158
	TotalSize int64 `json:"totalSize,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "AlertPolicies") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AlertPolicies") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ListAlertPoliciesResponse) MarshalJSON() ([]byte, error) {
	type NoMethod ListAlertPoliciesResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ListGroupMembersResponse: The ListGroupMembers response.
type ListGroupMembersResponse struct {
	// Members: A set of monitored resources in the group.
	Members []*MonitoredResource `json:"members,omitempty"`
	// NextPageToken: If there are more results than have been returned, then this
	// field is set to a non-empty value. To see the additional results, use that
	// value as page_token in the next call to this method.
	NextPageToken string `json:"nextPageToken,omitempty"`
	// TotalSize: The total number of elements matching this request.
	TotalSize int64 `json:"totalSize,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "Members") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Members") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ListGroupMembersResponse) MarshalJSON() ([]byte, error) {
	type NoMethod ListGroupMembersResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ListGroupsResponse: The ListGroups response.
type ListGroupsResponse struct {
	// Group: The groups that match the specified filters.
	Group []*Group `json:"group,omitempty"`
	// NextPageToken: If there are more results than have been returned, then this
	// field is set to a non-empty value. To see the additional results, use that
	// value as page_token in the next call to this method.
	NextPageToken string `json:"nextPageToken,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "Group") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Group") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ListGroupsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod ListGroupsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ListMetricDescriptorsResponse: The ListMetricDescriptors response.
type ListMetricDescriptorsResponse struct {
	// MetricDescriptors: The metric descriptors that are available to the project
	// and that match the value of filter, if present.
	MetricDescriptors []*MetricDescriptor `json:"metricDescriptors,omitempty"`
	// NextPageToken: If there are more results than have been returned, then this
	// field is set to a non-empty value. To see the additional results, use that
	// value as page_token in the next call to this method.
	NextPageToken string `json:"nextPageToken,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "MetricDescriptors") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "MetricDescriptors") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ListMetricDescriptorsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod ListMetricDescriptorsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ListMonitoredResourceDescriptorsResponse: The
// ListMonitoredResourceDescriptors response.
type ListMonitoredResourceDescriptorsResponse struct {
	// NextPageToken: If there are more results than have been returned, then this
	// field is set to a non-empty value. To see the additional results, use that
	// value as page_token in the next call to this method.
	NextPageToken string `json:"nextPageToken,omitempty"`
	// ResourceDescriptors: The monitored resource descriptors that are available
	// to this project and that match filter, if present.
	ResourceDescriptors []*MonitoredResourceDescriptor `json:"resourceDescriptors,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "NextPageToken") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ListMonitoredResourceDescriptorsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod ListMonitoredResourceDescriptorsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ListNotificationChannelDescriptorsResponse: The
// ListNotificationChannelDescriptors response.
type ListNotificationChannelDescriptorsResponse struct {
	// ChannelDescriptors: The monitored resource descriptors supported for the
	// specified project, optionally filtered.
	ChannelDescriptors []*NotificationChannelDescriptor `json:"channelDescriptors,omitempty"`
	// NextPageToken: If not empty, indicates that there may be more results that
	// match the request. Use the value in the page_token field in a subsequent
	// request to fetch the next set of results. If empty, all results have been
	// returned.
	NextPageToken string `json:"nextPageToken,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "ChannelDescriptors") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ChannelDescriptors") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ListNotificationChannelDescriptorsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod ListNotificationChannelDescriptorsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ListNotificationChannelsResponse: The ListNotificationChannels response.
type ListNotificationChannelsResponse struct {
	// NextPageToken: If not empty, indicates that there may be more results that
	// match the request. Use the value in the page_token field in a subsequent
	// request to fetch the next set of results. If empty, all results have been
	// returned.
	NextPageToken string `json:"nextPageToken,omitempty"`
	// NotificationChannels: The notification channels defined for the specified
	// project.
	NotificationChannels []*NotificationChannel `json:"notificationChannels,omitempty"`
	// TotalSize: The total number of notification channels in all pages. This
	// number is only an estimate, and may change in subsequent pages.
	// https://aip.dev/158
	TotalSize int64 `json:"totalSize,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "NextPageToken") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ListNotificationChannelsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod ListNotificationChannelsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ListServiceLevelObjectivesResponse: The ListServiceLevelObjectives response.
type ListServiceLevelObjectivesResponse struct {
	// NextPageToken: If there are more results than have been returned, then this
	// field is set to a non-empty value. To see the additional results, use that
	// value as page_token in the next call to this method.
	NextPageToken string `json:"nextPageToken,omitempty"`
	// ServiceLevelObjectives: The ServiceLevelObjectives matching the specified
	// filter.
	ServiceLevelObjectives []*ServiceLevelObjective `json:"serviceLevelObjectives,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "NextPageToken") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ListServiceLevelObjectivesResponse) MarshalJSON() ([]byte, error) {
	type NoMethod ListServiceLevelObjectivesResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ListServicesResponse: The ListServices response.
type ListServicesResponse struct {
	// NextPageToken: If there are more results than have been returned, then this
	// field is set to a non-empty value. To see the additional results, use that
	// value as page_token in the next call to this method.
	NextPageToken string `json:"nextPageToken,omitempty"`
	// Services: The Services matching the specified filter.
	Services []*MService `json:"services,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "NextPageToken") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ListServicesResponse) MarshalJSON() ([]byte, error) {
	type NoMethod ListServicesResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ListSnoozesResponse: The results of a successful ListSnoozes call,
// containing the matching Snoozes.
type ListSnoozesResponse struct {
	// NextPageToken: Page token for repeated calls to ListSnoozes, to fetch
	// additional pages of results. If this is empty or missing, there are no more
	// pages.
	NextPageToken string `json:"nextPageToken,omitempty"`
	// Snoozes: Snoozes matching this list call.
	Snoozes []*Snooze `json:"snoozes,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "NextPageToken") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ListSnoozesResponse) MarshalJSON() ([]byte, error) {
	type NoMethod ListSnoozesResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ListTimeSeriesResponse: The ListTimeSeries response.
type ListTimeSeriesResponse struct {
	// ExecutionErrors: Query execution errors that may have caused the time series
	// data returned to be incomplete.
	ExecutionErrors []*Status `json:"executionErrors,omitempty"`
	// NextPageToken: If there are more results than have been returned, then this
	// field is set to a non-empty value. To see the additional results, use that
	// value as page_token in the next call to this method.
	NextPageToken string `json:"nextPageToken,omitempty"`
	// TimeSeries: One or more time series that match the filter included in the
	// request.
	TimeSeries []*TimeSeries `json:"timeSeries,omitempty"`
	// Unit: The unit in which all time_series point values are reported. unit
	// follows the UCUM format for units as seen in
	// https://unitsofmeasure.org/ucum.html. If different time_series have
	// different units (for example, because they come from different metric types,
	// or a unit is absent), then unit will be "{not_a_unit}".
	Unit string `json:"unit,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "ExecutionErrors") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ExecutionErrors") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ListTimeSeriesResponse) MarshalJSON() ([]byte, error) {
	type NoMethod ListTimeSeriesResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ListUptimeCheckConfigsResponse: The protocol for the ListUptimeCheckConfigs
// response.
type ListUptimeCheckConfigsResponse struct {
	// NextPageToken: This field represents the pagination token to retrieve the
	// next page of results. If the value is empty, it means no further results for
	// the request. To retrieve the next page of results, the value of the
	// next_page_token is passed to the subsequent List method call (in the request
	// message's page_token field).
	NextPageToken string `json:"nextPageToken,omitempty"`
	// TotalSize: The total number of Uptime check configurations for the project,
	// irrespective of any pagination.
	TotalSize int64 `json:"totalSize,omitempty"`
	// UptimeCheckConfigs: The returned Uptime check configurations.
	UptimeCheckConfigs []*UptimeCheckConfig `json:"uptimeCheckConfigs,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "NextPageToken") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ListUptimeCheckConfigsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod ListUptimeCheckConfigsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ListUptimeCheckIpsResponse: The protocol for the ListUptimeCheckIps
// response.
type ListUptimeCheckIpsResponse struct {
	// NextPageToken: This field represents the pagination token to retrieve the
	// next page of results. If the value is empty, it means no further results for
	// the request. To retrieve the next page of results, the value of the
	// next_page_token is passed to the subsequent List method call (in the request
	// message's page_token field). NOTE: this field is not yet implemented
	NextPageToken string `json:"nextPageToken,omitempty"`
	// UptimeCheckIps: The returned list of IP addresses (including region and
	// location) that the checkers run from.
	UptimeCheckIps []*UptimeCheckIp `json:"uptimeCheckIps,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "NextPageToken") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ListUptimeCheckIpsResponse) MarshalJSON() ([]byte, error) {
	type NoMethod ListUptimeCheckIpsResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// LogMatch: A condition type that checks whether a log message in the scoping
// project (https://cloud.google.com/monitoring/api/v3#project_name) satisfies
// the given filter. Logs from other projects in the metrics scope are not
// evaluated.
type LogMatch struct {
	// Filter: Required. A logs-based filter. See Advanced Logs Queries
	// (https://cloud.google.com/logging/docs/view/advanced-queries) for how this
	// filter should be constructed.
	Filter string `json:"filter,omitempty"`
	// LabelExtractors: Optional. A map from a label key to an extractor
	// expression, which is used to extract the value for this label key. Each
	// entry in this map is a specification for how data should be extracted from
	// log entries that match filter. Each combination of extracted values is
	// treated as a separate rule for the purposes of triggering notifications.
	// Label keys and corresponding values can be used in notifications generated
	// by this condition.Please see the documentation on logs-based metric
	// valueExtractors
	// (https://cloud.google.com/logging/docs/reference/v2/rest/v2/projects.metrics#LogMetric.FIELDS.value_extractor)
	// for syntax and examples.
	LabelExtractors map[string]string `json:"labelExtractors,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Filter") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Filter") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s LogMatch) MarshalJSON() ([]byte, error) {
	type NoMethod LogMatch
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// MeshIstio: Istio service scoped to an Istio mesh. Anthos clusters running
// ASM < 1.6.8 will have their services ingested as this type.
type MeshIstio struct {
	// MeshUid: Identifier for the mesh in which this Istio service is defined.
	// Corresponds to the mesh_uid metric label in Istio metrics.
	MeshUid string `json:"meshUid,omitempty"`
	// ServiceName: The name of the Istio service underlying this service.
	// Corresponds to the destination_service_name metric label in Istio metrics.
	ServiceName string `json:"serviceName,omitempty"`
	// ServiceNamespace: The namespace of the Istio service underlying this
	// service. Corresponds to the destination_service_namespace metric label in
	// Istio metrics.
	ServiceNamespace string `json:"serviceNamespace,omitempty"`
	// ForceSendFields is a list of field names (e.g. "MeshUid") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "MeshUid") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s MeshIstio) MarshalJSON() ([]byte, error) {
	type NoMethod MeshIstio
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Metric: A specific metric, identified by specifying values for all of the
// labels of a MetricDescriptor.
type Metric struct {
	// Labels: The set of label values that uniquely identify this metric. All
	// labels listed in the MetricDescriptor must be assigned values.
	Labels map[string]string `json:"labels,omitempty"`
	// Type: An existing metric type, see google.api.MetricDescriptor. For example,
	// custom.googleapis.com/invoice/paid/amount.
	Type string `json:"type,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Labels") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Labels") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Metric) MarshalJSON() ([]byte, error) {
	type NoMethod Metric
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// MetricAbsence: A condition type that checks that monitored resources are
// reporting data. The configuration defines a metric and a set of monitored
// resources. The predicate is considered in violation when a time series for
// the specified metric of a monitored resource does not include any data in
// the specified duration.
type MetricAbsence struct {
	// Aggregations: Specifies the alignment of data points in individual time
	// series as well as how to combine the retrieved time series together (such as
	// when aggregating multiple streams on each resource to a single stream for
	// each resource or when aggregating streams across all members of a group of
	// resources). Multiple aggregations are applied in the order specified.This
	// field is similar to the one in the ListTimeSeries request
	// (https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeSeries/list).
	// It is advisable to use the ListTimeSeries method when debugging this field.
	Aggregations []*Aggregation `json:"aggregations,omitempty"`
	// Duration: The amount of time that a time series must fail to report new data
	// to be considered failing. The minimum value of this field is 120 seconds.
	// Larger values that are a multiple of a minute--for example, 240 or 300
	// seconds--are supported. If an invalid value is given, an error will be
	// returned. The Duration.nanos field is ignored.
	Duration string `json:"duration,omitempty"`
	// Filter: Required. A filter
	// (https://cloud.google.com/monitoring/api/v3/filters) that identifies which
	// time series should be compared with the threshold.The filter is similar to
	// the one that is specified in the ListTimeSeries request
	// (https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeSeries/list)
	// (that call is useful to verify the time series that will be retrieved /
	// processed). The filter must specify the metric type and the resource type.
	// Optionally, it can specify resource labels and metric labels. This field
	// must not exceed 2048 Unicode characters in length.
	Filter string `json:"filter,omitempty"`
	// Trigger: The number/percent of time series for which the comparison must
	// hold in order for the condition to trigger. If unspecified, then the
	// condition will trigger if the comparison is true for any of the time series
	// that have been identified by filter and aggregations.
	Trigger *Trigger `json:"trigger,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Aggregations") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Aggregations") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s MetricAbsence) MarshalJSON() ([]byte, error) {
	type NoMethod MetricAbsence
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// MetricDescriptor: Defines a metric type and its schema. Once a metric
// descriptor is created, deleting or altering it stops data collection and
// makes the metric type's existing data unusable.
type MetricDescriptor struct {
	// Description: A detailed description of the metric, which can be used in
	// documentation.
	Description string `json:"description,omitempty"`
	// DisplayName: A concise name for the metric, which can be displayed in user
	// interfaces. Use sentence case without an ending period, for example "Request
	// count". This field is optional but it is recommended to be set for any
	// metrics associated with user-visible concepts, such as Quota.
	DisplayName string `json:"displayName,omitempty"`
	// Labels: The set of labels that can be used to describe a specific instance
	// of this metric type. For example, the
	// appengine.googleapis.com/http/server/response_latencies metric type has a
	// label for the HTTP response code, response_code, so you can look at
	// latencies for successful responses or just for responses that failed.
	Labels []*LabelDescriptor `json:"labels,omitempty"`
	// LaunchStage: Optional. The launch stage of the metric definition.
	//
	// Possible values:
	//   "LAUNCH_STAGE_UNSPECIFIED" - Do not use this default value.
	//   "UNIMPLEMENTED" - The feature is not yet implemented. Users can not use
	// it.
	//   "PRELAUNCH" - Prelaunch features are hidden from users and are only
	// visible internally.
	//   "EARLY_ACCESS" - Early Access features are limited to a closed group of
	// testers. To use these features, you must sign up in advance and sign a
	// Trusted Tester agreement (which includes confidentiality provisions). These
	// features may be unstable, changed in backward-incompatible ways, and are not
	// guaranteed to be released.
	//   "ALPHA" - Alpha is a limited availability test for releases before they
	// are cleared for widespread use. By Alpha, all significant design issues are
	// resolved and we are in the process of verifying functionality. Alpha
	// customers need to apply for access, agree to applicable terms, and have
	// their projects allowlisted. Alpha releases don't have to be feature
	// complete, no SLAs are provided, and there are no technical support
	// obligations, but they will be far enough along that customers can actually
	// use them in test environments or for limited-use tests -- just like they
	// would in normal production cases.
	//   "BETA" - Beta is the point at which we are ready to open a release for any
	// customer to use. There are no SLA or technical support obligations in a Beta
	// release. Products will be complete from a feature perspective, but may have
	// some open outstanding issues. Beta releases are suitable for limited
	// production use cases.
	//   "GA" - GA features are open to all developers and are considered stable
	// and fully qualified for production use.
	//   "DEPRECATED" - Deprecated features are scheduled to be shut down and
	// removed. For more information, see the "Deprecation Policy" section of our
	// Terms of Service (https://cloud.google.com/terms/) and the Google Cloud
	// Platform Subject to the Deprecation Policy
	// (https://cloud.google.com/terms/deprecation) documentation.
	LaunchStage string `json:"launchStage,omitempty"`
	// Metadata: Optional. Metadata which can be used to guide usage of the metric.
	Metadata *MetricDescriptorMetadata `json:"metadata,omitempty"`
	// MetricKind: Whether the metric records instantaneous values, changes to a
	// value, etc. Some combinations of metric_kind and value_type might not be
	// supported.
	//
	// Possible values:
	//   "METRIC_KIND_UNSPECIFIED" - Do not use this default value.
	//   "GAUGE" - An instantaneous measurement of a value.
	//   "DELTA" - The change in a value during a time interval.
	//   "CUMULATIVE" - A value accumulated over a time interval. Cumulative
	// measurements in a time series should have the same start time and increasing
	// end times, until an event resets the cumulative value to zero and sets a new
	// start time for the following points.
	MetricKind string `json:"metricKind,omitempty"`
	// MonitoredResourceTypes: Read-only. If present, then a time series, which is
	// identified partially by a metric type and a MonitoredResourceDescriptor,
	// that is associated with this metric type can only be associated with one of
	// the monitored resource types listed here.
	MonitoredResourceTypes []string `json:"monitoredResourceTypes,omitempty"`
	// Name: The resource name of the metric descriptor.
	Name string `json:"name,omitempty"`
	// Type: The metric type, including its DNS name prefix. The type is not
	// URL-encoded. All user-defined metric types have the DNS name
	// custom.googleapis.com or external.googleapis.com. Metric types should use a
	// natural hierarchical grouping. For example:
	// "custom.googleapis.com/invoice/paid/amount"
	// "external.googleapis.com/prometheus/up"
	// "appengine.googleapis.com/http/server/response_latencies"
	Type string `json:"type,omitempty"`
	// Unit: The units in which the metric value is reported. It is only applicable
	// if the value_type is INT64, DOUBLE, or DISTRIBUTION. The unit defines the
	// representation of the stored metric values.Different systems might scale the
	// values to be more easily displayed (so a value of 0.02kBy might be displayed
	// as 20By, and a value of 3523kBy might be displayed as 3.5MBy). However, if
	// the unit is kBy, then the value of the metric is always in thousands of
	// bytes, no matter how it might be displayed.If you want a custom metric to
	// record the exact number of CPU-seconds used by a job, you can create an
	// INT64 CUMULATIVE metric whose unit is s{CPU} (or equivalently 1s{CPU} or
	// just s). If the job uses 12,005 CPU-seconds, then the value is written as
	// 12005.Alternatively, if you want a custom metric to record data in a more
	// granular way, you can create a DOUBLE CUMULATIVE metric whose unit is
	// ks{CPU}, and then write the value 12.005 (which is 12005/1000), or use
	// Kis{CPU} and write 11.723 (which is 12005/1024).The supported units are a
	// subset of The Unified Code for Units of Measure
	// (https://unitsofmeasure.org/ucum.html) standard:Basic units (UNIT) bit bit
	// By byte s second min minute h hour d day 1 dimensionlessPrefixes (PREFIX) k
	// kilo (10^3) M mega (10^6) G giga (10^9) T tera (10^12) P peta (10^15) E exa
	// (10^18) Z zetta (10^21) Y yotta (10^24) m milli (10^-3) u micro (10^-6) n
	// nano (10^-9) p pico (10^-12) f femto (10^-15) a atto (10^-18) z zepto
	// (10^-21) y yocto (10^-24) Ki kibi (2^10) Mi mebi (2^20) Gi gibi (2^30) Ti
	// tebi (2^40) Pi pebi (2^50)GrammarThe grammar also includes these connectors:
	// / division or ratio (as an infix operator). For examples, kBy/{email} or
	// MiBy/10ms (although you should almost never have /s in a metric unit; rates
	// should always be computed at query time from the underlying cumulative or
	// delta value). . multiplication or composition (as an infix operator). For
	// examples, GBy.d or k{watt}.h.The grammar for a unit is as follows:
	// Expression = Component { "." Component } { "/" Component } ; Component = ( [
	// PREFIX ] UNIT | "%" ) [ Annotation ] | Annotation | "1" ; Annotation = "{"
	// NAME "}" ; Notes: Annotation is just a comment if it follows a UNIT. If the
	// annotation is used alone, then the unit is equivalent to 1. For examples,
	// {request}/s == 1/s, By{transmitted}/s == By/s. NAME is a sequence of
	// non-blank printable ASCII characters not containing { or }. 1 represents a
	// unitary dimensionless unit
	// (https://en.wikipedia.org/wiki/Dimensionless_quantity) of 1, such as in 1/s.
	// It is typically used when none of the basic units are appropriate. For
	// example, "new users per day" can be represented as 1/d or {new-users}/d (and
	// a metric value 5 would mean "5 new users). Alternatively, "thousands of page
	// views per day" would be represented as 1000/d or k1/d or k{page_views}/d
	// (and a metric value of 5.3 would mean "5300 page views per day"). %
	// represents dimensionless value of 1/100, and annotates values giving a
	// percentage (so the metric values are typically in the range of 0..100, and a
	// metric value 3 means "3 percent"). 10^2.% indicates a metric contains a
	// ratio, typically in the range 0..1, that will be multiplied by 100 and
	// displayed as a percentage (so a metric value 0.03 means "3 percent").
	Unit string `json:"unit,omitempty"`
	// ValueType: Whether the measurement is an integer, a floating-point number,
	// etc. Some combinations of metric_kind and value_type might not be supported.
	//
	// Possible values:
	//   "VALUE_TYPE_UNSPECIFIED" - Do not use this default value.
	//   "BOOL" - The value is a boolean. This value type can be used only if the
	// metric kind is GAUGE.
	//   "INT64" - The value is a signed 64-bit integer.
	//   "DOUBLE" - The value is a double precision floating point number.
	//   "STRING" - The value is a text string. This value type can be used only if
	// the metric kind is GAUGE.
	//   "DISTRIBUTION" - The value is a Distribution.
	//   "MONEY" - The value is money.
	ValueType string `json:"valueType,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "Description") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Description") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s MetricDescriptor) MarshalJSON() ([]byte, error) {
	type NoMethod MetricDescriptor
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// MetricDescriptorMetadata: Additional annotations that can be used to guide
// the usage of a metric.
type MetricDescriptorMetadata struct {
	// IngestDelay: The delay of data points caused by ingestion. Data points older
	// than this age are guaranteed to be ingested and available to be read,
	// excluding data loss due to errors.
	IngestDelay string `json:"ingestDelay,omitempty"`
	// LaunchStage: Deprecated. Must use the MetricDescriptor.launch_stage instead.
	//
	// Possible values:
	//   "LAUNCH_STAGE_UNSPECIFIED" - Do not use this default value.
	//   "UNIMPLEMENTED" - The feature is not yet implemented. Users can not use
	// it.
	//   "PRELAUNCH" - Prelaunch features are hidden from users and are only
	// visible internally.
	//   "EARLY_ACCESS" - Early Access features are limited to a closed group of
	// testers. To use these features, you must sign up in advance and sign a
	// Trusted Tester agreement (which includes confidentiality provisions). These
	// features may be unstable, changed in backward-incompatible ways, and are not
	// guaranteed to be released.
	//   "ALPHA" - Alpha is a limited availability test for releases before they
	// are cleared for widespread use. By Alpha, all significant design issues are
	// resolved and we are in the process of verifying functionality. Alpha
	// customers need to apply for access, agree to applicable terms, and have
	// their projects allowlisted. Alpha releases don't have to be feature
	// complete, no SLAs are provided, and there are no technical support
	// obligations, but they will be far enough along that customers can actually
	// use them in test environments or for limited-use tests -- just like they
	// would in normal production cases.
	//   "BETA" - Beta is the point at which we are ready to open a release for any
	// customer to use. There are no SLA or technical support obligations in a Beta
	// release. Products will be complete from a feature perspective, but may have
	// some open outstanding issues. Beta releases are suitable for limited
	// production use cases.
	//   "GA" - GA features are open to all developers and are considered stable
	// and fully qualified for production use.
	//   "DEPRECATED" - Deprecated features are scheduled to be shut down and
	// removed. For more information, see the "Deprecation Policy" section of our
	// Terms of Service (https://cloud.google.com/terms/) and the Google Cloud
	// Platform Subject to the Deprecation Policy
	// (https://cloud.google.com/terms/deprecation) documentation.
	LaunchStage string `json:"launchStage,omitempty"`
	// SamplePeriod: The sampling period of metric data points. For metrics which
	// are written periodically, consecutive data points are stored at this time
	// interval, excluding data loss due to errors. Metrics with a higher
	// granularity have a smaller sampling period.
	SamplePeriod string `json:"samplePeriod,omitempty"`
	// TimeSeriesResourceHierarchyLevel: The scope of the timeseries data of the
	// metric.
	//
	// Possible values:
	//   "TIME_SERIES_RESOURCE_HIERARCHY_LEVEL_UNSPECIFIED" - Do not use this
	// default value.
	//   "PROJECT" - Scopes a metric to a project.
	//   "ORGANIZATION" - Scopes a metric to an organization.
	//   "FOLDER" - Scopes a metric to a folder.
	TimeSeriesResourceHierarchyLevel []string `json:"timeSeriesResourceHierarchyLevel,omitempty"`
	// ForceSendFields is a list of field names (e.g. "IngestDelay") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "IngestDelay") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s MetricDescriptorMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod MetricDescriptorMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// MetricRange: A MetricRange is used when each window is good when the value x
// of a single TimeSeries satisfies range.min <= x <= range.max. The provided
// TimeSeries must have ValueType = INT64 or ValueType = DOUBLE and MetricKind
// = GAUGE.
type MetricRange struct {
	// Range: Range of values considered "good." For a one-sided range, set one
	// bound to an infinite value.
	Range *GoogleMonitoringV3Range `json:"range,omitempty"`
	// TimeSeries: A monitoring filter
	// (https://cloud.google.com/monitoring/api/v3/filters) specifying the
	// TimeSeries to use for evaluating window quality.
	TimeSeries string `json:"timeSeries,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Range") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Range") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s MetricRange) MarshalJSON() ([]byte, error) {
	type NoMethod MetricRange
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// MetricThreshold: A condition type that compares a collection of time series
// against a threshold.
type MetricThreshold struct {
	// Aggregations: Specifies the alignment of data points in individual time
	// series as well as how to combine the retrieved time series together (such as
	// when aggregating multiple streams on each resource to a single stream for
	// each resource or when aggregating streams across all members of a group of
	// resources). Multiple aggregations are applied in the order specified.This
	// field is similar to the one in the ListTimeSeries request
	// (https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeSeries/list).
	// It is advisable to use the ListTimeSeries method when debugging this field.
	Aggregations []*Aggregation `json:"aggregations,omitempty"`
	// Comparison: The comparison to apply between the time series (indicated by
	// filter and aggregation) and the threshold (indicated by threshold_value).
	// The comparison is applied on each time series, with the time series on the
	// left-hand side and the threshold on the right-hand side.Only COMPARISON_LT
	// and COMPARISON_GT are supported currently.
	//
	// Possible values:
	//   "COMPARISON_UNSPECIFIED" - No ordering relationship is specified.
	//   "COMPARISON_GT" - True if the left argument is greater than the right
	// argument.
	//   "COMPARISON_GE" - True if the left argument is greater than or equal to
	// the right argument.
	//   "COMPARISON_LT" - True if the left argument is less than the right
	// argument.
	//   "COMPARISON_LE" - True if the left argument is less than or equal to the
	// right argument.
	//   "COMPARISON_EQ" - True if the left argument is equal to the right
	// argument.
	//   "COMPARISON_NE" - True if the left argument is not equal to the right
	// argument.
	Comparison string `json:"comparison,omitempty"`
	// DenominatorAggregations: Specifies the alignment of data points in
	// individual time series selected by denominatorFilter as well as how to
	// combine the retrieved time series together (such as when aggregating
	// multiple streams on each resource to a single stream for each resource or
	// when aggregating streams across all members of a group of resources).When
	// computing ratios, the aggregations and denominator_aggregations fields must
	// use the same alignment period and produce time series that have the same
	// periodicity and labels.
	DenominatorAggregations []*Aggregation `json:"denominatorAggregations,omitempty"`
	// DenominatorFilter: A filter
	// (https://cloud.google.com/monitoring/api/v3/filters) that identifies a time
	// series that should be used as the denominator of a ratio that will be
	// compared with the threshold. If a denominator_filter is specified, the time
	// series specified by the filter field will be used as the numerator.The
	// filter must specify the metric type and optionally may contain restrictions
	// on resource type, resource labels, and metric labels. This field may not
	// exceed 2048 Unicode characters in length.
	DenominatorFilter string `json:"denominatorFilter,omitempty"`
	// Duration: The amount of time that a time series must violate the threshold
	// to be considered failing. Currently, only values that are a multiple of a
	// minute--e.g., 0, 60, 120, or 300 seconds--are supported. If an invalid value
	// is given, an error will be returned. When choosing a duration, it is useful
	// to keep in mind the frequency of the underlying time series data (which may
	// also be affected by any alignments specified in the aggregations field); a
	// good duration is long enough so that a single outlier does not generate
	// spurious alerts, but short enough that unhealthy states are detected and
	// alerted on quickly.
	Duration string `json:"duration,omitempty"`
	// EvaluationMissingData: A condition control that determines how
	// metric-threshold conditions are evaluated when data stops arriving. To use
	// this control, the value of the duration field must be greater than or equal
	// to 60 seconds.
	//
	// Possible values:
	//   "EVALUATION_MISSING_DATA_UNSPECIFIED" - An unspecified evaluation missing
	// data option. Equivalent to EVALUATION_MISSING_DATA_NO_OP.
	//   "EVALUATION_MISSING_DATA_INACTIVE" - If there is no data to evaluate the
	// condition, then evaluate the condition as false.
	//   "EVALUATION_MISSING_DATA_ACTIVE" - If there is no data to evaluate the
	// condition, then evaluate the condition as true.
	//   "EVALUATION_MISSING_DATA_NO_OP" - Do not evaluate the condition to any
	// value if there is no data.
	EvaluationMissingData string `json:"evaluationMissingData,omitempty"`
	// Filter: Required. A filter
	// (https://cloud.google.com/monitoring/api/v3/filters) that identifies which
	// time series should be compared with the threshold.The filter is similar to
	// the one that is specified in the ListTimeSeries request
	// (https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeSeries/list)
	// (that call is useful to verify the time series that will be retrieved /
	// processed). The filter must specify the metric type and the resource type.
	// Optionally, it can specify resource labels and metric labels. This field
	// must not exceed 2048 Unicode characters in length.
	Filter string `json:"filter,omitempty"`
	// ForecastOptions: When this field is present, the MetricThreshold condition
	// forecasts whether the time series is predicted to violate the threshold
	// within the forecast_horizon. When this field is not set, the MetricThreshold
	// tests the current value of the timeseries against the threshold.
	ForecastOptions *ForecastOptions `json:"forecastOptions,omitempty"`
	// ThresholdValue: A value against which to compare the time series.
	ThresholdValue float64 `json:"thresholdValue,omitempty"`
	// Trigger: The number/percent of time series for which the comparison must
	// hold in order for the condition to trigger. If unspecified, then the
	// condition will trigger if the comparison is true for any of the time series
	// that have been identified by filter and aggregations, or by the ratio, if
	// denominator_filter and denominator_aggregations are specified.
	Trigger *Trigger `json:"trigger,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Aggregations") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Aggregations") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s MetricThreshold) MarshalJSON() ([]byte, error) {
	type NoMethod MetricThreshold
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *MetricThreshold) UnmarshalJSON(data []byte) error {
	type NoMethod MetricThreshold
	var s1 struct {
		ThresholdValue gensupport.JSONFloat64 `json:"thresholdValue"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.ThresholdValue = float64(s1.ThresholdValue)
	return nil
}

// Minutes: Used to schedule the query to run every so many minutes.
type Minutes struct {
	// Periodicity: Required. Number of minutes between runs. The interval must be
	// greater than or equal to 5 minutes and less than or equal to 1440 minutes.
	Periodicity int64 `json:"periodicity,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Periodicity") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Periodicity") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Minutes) MarshalJSON() ([]byte, error) {
	type NoMethod Minutes
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// MonitoredResource: An object representing a resource that can be used for
// monitoring, logging, billing, or other purposes. Examples include virtual
// machine instances, databases, and storage devices such as disks. The type
// field identifies a MonitoredResourceDescriptor object that describes the
// resource's schema. Information in the labels field identifies the actual
// resource and its attributes according to the schema. For example, a
// particular Compute Engine VM instance could be represented by the following
// object, because the MonitoredResourceDescriptor for "gce_instance" has
// labels "project_id", "instance_id" and "zone": { "type": "gce_instance",
// "labels": { "project_id": "my-project", "instance_id": "12345678901234",
// "zone": "us-central1-a" }}
type MonitoredResource struct {
	// Labels: Required. Values for all of the labels listed in the associated
	// monitored resource descriptor. For example, Compute Engine VM instances use
	// the labels "project_id", "instance_id", and "zone".
	Labels map[string]string `json:"labels,omitempty"`
	// Type: Required. The monitored resource type. This field must match the type
	// field of a MonitoredResourceDescriptor object. For example, the type of a
	// Compute Engine VM instance is gce_instance. For a list of types, see
	// Monitoring resource types
	// (https://cloud.google.com/monitoring/api/resources) and Logging resource
	// types (https://cloud.google.com/logging/docs/api/v2/resource-list).
	Type string `json:"type,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Labels") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Labels") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s MonitoredResource) MarshalJSON() ([]byte, error) {
	type NoMethod MonitoredResource
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// MonitoredResourceDescriptor: An object that describes the schema of a
// MonitoredResource object using a type name and a set of labels. For example,
// the monitored resource descriptor for Google Compute Engine VM instances has
// a type of "gce_instance" and specifies the use of the labels "instance_id"
// and "zone" to identify particular VM instances.Different APIs can support
// different monitored resource types. APIs generally provide a list method
// that returns the monitored resource descriptors used by the API.
type MonitoredResourceDescriptor struct {
	// Description: Optional. A detailed description of the monitored resource type
	// that might be used in documentation.
	Description string `json:"description,omitempty"`
	// DisplayName: Optional. A concise name for the monitored resource type that
	// might be displayed in user interfaces. It should be a Title Cased Noun
	// Phrase, without any article or other determiners. For example, "Google Cloud
	// SQL Database".
	DisplayName string `json:"displayName,omitempty"`
	// Labels: Required. A set of labels used to describe instances of this
	// monitored resource type. For example, an individual Google Cloud SQL
	// database is identified by values for the labels "database_id" and "zone".
	Labels []*LabelDescriptor `json:"labels,omitempty"`
	// LaunchStage: Optional. The launch stage of the monitored resource
	// definition.
	//
	// Possible values:
	//   "LAUNCH_STAGE_UNSPECIFIED" - Do not use this default value.
	//   "UNIMPLEMENTED" - The feature is not yet implemented. Users can not use
	// it.
	//   "PRELAUNCH" - Prelaunch features are hidden from users and are only
	// visible internally.
	//   "EARLY_ACCESS" - Early Access features are limited to a closed group of
	// testers. To use these features, you must sign up in advance and sign a
	// Trusted Tester agreement (which includes confidentiality provisions). These
	// features may be unstable, changed in backward-incompatible ways, and are not
	// guaranteed to be released.
	//   "ALPHA" - Alpha is a limited availability test for releases before they
	// are cleared for widespread use. By Alpha, all significant design issues are
	// resolved and we are in the process of verifying functionality. Alpha
	// customers need to apply for access, agree to applicable terms, and have
	// their projects allowlisted. Alpha releases don't have to be feature
	// complete, no SLAs are provided, and there are no technical support
	// obligations, but they will be far enough along that customers can actually
	// use them in test environments or for limited-use tests -- just like they
	// would in normal production cases.
	//   "BETA" - Beta is the point at which we are ready to open a release for any
	// customer to use. There are no SLA or technical support obligations in a Beta
	// release. Products will be complete from a feature perspective, but may have
	// some open outstanding issues. Beta releases are suitable for limited
	// production use cases.
	//   "GA" - GA features are open to all developers and are considered stable
	// and fully qualified for production use.
	//   "DEPRECATED" - Deprecated features are scheduled to be shut down and
	// removed. For more information, see the "Deprecation Policy" section of our
	// Terms of Service (https://cloud.google.com/terms/) and the Google Cloud
	// Platform Subject to the Deprecation Policy
	// (https://cloud.google.com/terms/deprecation) documentation.
	LaunchStage string `json:"launchStage,omitempty"`
	// Name: Optional. The resource name of the monitored resource descriptor:
	// "projects/{project_id}/monitoredResourceDescriptors/{type}" where {type} is
	// the value of the type field in this object and {project_id} is a project ID
	// that provides API-specific context for accessing the type. APIs that do not
	// use project information can use the resource name format
	// "monitoredResourceDescriptors/{type}".
	Name string `json:"name,omitempty"`
	// Type: Required. The monitored resource type. For example, the type
	// "cloudsql_database" represents databases in Google Cloud SQL. For a list of
	// types, see Monitored resource types
	// (https://cloud.google.com/monitoring/api/resources) and Logging resource
	// types (https://cloud.google.com/logging/docs/api/v2/resource-list).
	Type string `json:"type,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "Description") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Description") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s MonitoredResourceDescriptor) MarshalJSON() ([]byte, error) {
	type NoMethod MonitoredResourceDescriptor
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// MonitoredResourceMetadata: Auxiliary metadata for a MonitoredResource
// object. MonitoredResource objects contain the minimum set of information to
// uniquely identify a monitored resource instance. There is some other useful
// auxiliary metadata. Monitoring and Logging use an ingestion pipeline to
// extract metadata for cloud resources of all types, and store the metadata in
// this message.
type MonitoredResourceMetadata struct {
	// SystemLabels: Output only. Values for predefined system metadata labels.
	// System labels are a kind of metadata extracted by Google, including
	// "machine_image", "vpc", "subnet_id", "security_group", "name", etc. System
	// label values can be only strings, Boolean values, or a list of strings. For
	// example: { "name": "my-test-instance", "security_group": ["a", "b", "c"],
	// "spot_instance": false }
	SystemLabels googleapi.RawMessage `json:"systemLabels,omitempty"`
	// UserLabels: Output only. A map of user-defined metadata labels.
	UserLabels map[string]string `json:"userLabels,omitempty"`
	// ForceSendFields is a list of field names (e.g. "SystemLabels") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "SystemLabels") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s MonitoredResourceMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod MonitoredResourceMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// MonitoringQueryLanguageCondition: A condition type that allows alerting
// policies to be defined using Monitoring Query Language
// (https://cloud.google.com/monitoring/mql).
type MonitoringQueryLanguageCondition struct {
	// Duration: The amount of time that a time series must violate the threshold
	// to be considered failing. Currently, only values that are a multiple of a
	// minute--e.g., 0, 60, 120, or 300 seconds--are supported. If an invalid value
	// is given, an error will be returned. When choosing a duration, it is useful
	// to keep in mind the frequency of the underlying time series data (which may
	// also be affected by any alignments specified in the aggregations field); a
	// good duration is long enough so that a single outlier does not generate
	// spurious alerts, but short enough that unhealthy states are detected and
	// alerted on quickly.
	Duration string `json:"duration,omitempty"`
	// EvaluationMissingData: A condition control that determines how
	// metric-threshold conditions are evaluated when data stops arriving.
	//
	// Possible values:
	//   "EVALUATION_MISSING_DATA_UNSPECIFIED" - An unspecified evaluation missing
	// data option. Equivalent to EVALUATION_MISSING_DATA_NO_OP.
	//   "EVALUATION_MISSING_DATA_INACTIVE" - If there is no data to evaluate the
	// condition, then evaluate the condition as false.
	//   "EVALUATION_MISSING_DATA_ACTIVE" - If there is no data to evaluate the
	// condition, then evaluate the condition as true.
	//   "EVALUATION_MISSING_DATA_NO_OP" - Do not evaluate the condition to any
	// value if there is no data.
	EvaluationMissingData string `json:"evaluationMissingData,omitempty"`
	// Query: Monitoring Query Language (https://cloud.google.com/monitoring/mql)
	// query that outputs a boolean stream.
	Query string `json:"query,omitempty"`
	// Trigger: The number/percent of time series for which the comparison must
	// hold in order for the condition to trigger. If unspecified, then the
	// condition will trigger if the comparison is true for any of the time series
	// that have been identified by filter and aggregations, or by the ratio, if
	// denominator_filter and denominator_aggregations are specified.
	Trigger *Trigger `json:"trigger,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Duration") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Duration") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s MonitoringQueryLanguageCondition) MarshalJSON() ([]byte, error) {
	type NoMethod MonitoringQueryLanguageCondition
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// MutationRecord: Describes a change made to a configuration.
type MutationRecord struct {
	// MutateTime: When the change occurred.
	MutateTime string `json:"mutateTime,omitempty"`
	// MutatedBy: The email address of the user making the change.
	MutatedBy string `json:"mutatedBy,omitempty"`
	// ForceSendFields is a list of field names (e.g. "MutateTime") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "MutateTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s MutationRecord) MarshalJSON() ([]byte, error) {
	type NoMethod MutationRecord
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// NotificationChannel: A NotificationChannel is a medium through which an
// alert is delivered when a policy violation is detected. Examples of channels
// include email, SMS, and third-party messaging applications. Fields
// containing sensitive information like authentication tokens or contact info
// are only partially populated on retrieval.
type NotificationChannel struct {
	// CreationRecord: Record of the creation of this channel.
	CreationRecord *MutationRecord `json:"creationRecord,omitempty"`
	// Description: An optional human-readable description of this notification
	// channel. This description may provide additional details, beyond the display
	// name, for the channel. This may not exceed 1024 Unicode characters.
	Description string `json:"description,omitempty"`
	// DisplayName: An optional human-readable name for this notification channel.
	// It is recommended that you specify a non-empty and unique name in order to
	// make it easier to identify the channels in your project, though this is not
	// enforced. The display name is limited to 512 Unicode characters.
	DisplayName string `json:"displayName,omitempty"`
	// Enabled: Whether notifications are forwarded to the described channel. This
	// makes it possible to disable delivery of notifications to a particular
	// channel without removing the channel from all alerting policies that
	// reference the channel. This is a more convenient approach when the change is
	// temporary and you want to receive notifications from the same set of
	// alerting policies on the channel at some point in the future.
	Enabled bool `json:"enabled,omitempty"`
	// Labels: Configuration fields that define the channel and its behavior. The
	// permissible and required labels are specified in the
	// NotificationChannelDescriptor.labels of the NotificationChannelDescriptor
	// corresponding to the type field.
	Labels map[string]string `json:"labels,omitempty"`
	// MutationRecords: Records of the modification of this channel.
	MutationRecords []*MutationRecord `json:"mutationRecords,omitempty"`
	// Name: Identifier. The full REST resource name for this channel. The format
	// is: projects/[PROJECT_ID_OR_NUMBER]/notificationChannels/[CHANNEL_ID] The
	// [CHANNEL_ID] is automatically assigned by the server on creation.
	Name string `json:"name,omitempty"`
	// Type: The type of the notification channel. This field matches the value of
	// the NotificationChannelDescriptor.type field.
	Type string `json:"type,omitempty"`
	// UserLabels: User-supplied key/value data that does not need to conform to
	// the corresponding NotificationChannelDescriptor's schema, unlike the labels
	// field. This field is intended to be used for organizing and identifying the
	// NotificationChannel objects.The field can contain up to 64 entries. Each key
	// and value is limited to 63 Unicode characters or 128 bytes, whichever is
	// smaller. Labels and values can contain only lowercase letters, numerals,
	// underscores, and dashes. Keys must begin with a letter.
	UserLabels map[string]string `json:"userLabels,omitempty"`
	// VerificationStatus: Indicates whether this channel has been verified or not.
	// On a ListNotificationChannels or GetNotificationChannel operation, this
	// field is expected to be populated.If the value is UNVERIFIED, then it
	// indicates that the channel is non-functioning (it both requires verification
	// and lacks verification); otherwise, it is assumed that the channel works.If
	// the channel is neither VERIFIED nor UNVERIFIED, it implies that the channel
	// is of a type that does not require verification or that this specific
	// channel has been exempted from verification because it was created prior to
	// verification being required for channels of this type.This field cannot be
	// modified using a standard UpdateNotificationChannel operation. To change the
	// value of this field, you must call VerifyNotificationChannel.
	//
	// Possible values:
	//   "VERIFICATION_STATUS_UNSPECIFIED" - Sentinel value used to indicate that
	// the state is unknown, omitted, or is not applicable (as in the case of
	// channels that neither support nor require verification in order to
	// function).
	//   "UNVERIFIED" - The channel has yet to be verified and requires
	// verification to function. Note that this state also applies to the case
	// where the verification process has been initiated by sending a verification
	// code but where the verification code has not been submitted to complete the
	// process.
	//   "VERIFIED" - It has been proven that notifications can be received on this
	// notification channel and that someone on the project has access to messages
	// that are delivered to that channel.
	VerificationStatus string `json:"verificationStatus,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "CreationRecord") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CreationRecord") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s NotificationChannel) MarshalJSON() ([]byte, error) {
	type NoMethod NotificationChannel
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// NotificationChannelDescriptor: A description of a notification channel. The
// descriptor includes the properties of the channel and the set of labels or
// fields that must be specified to configure channels of a given type.
type NotificationChannelDescriptor struct {
	// Description: A human-readable description of the notification channel type.
	// The description may include a description of the properties of the channel
	// and pointers to external documentation.
	Description string `json:"description,omitempty"`
	// DisplayName: A human-readable name for the notification channel type. This
	// form of the name is suitable for a user interface.
	DisplayName string `json:"displayName,omitempty"`
	// Labels: The set of labels that must be defined to identify a particular
	// channel of the corresponding type. Each label includes a description for how
	// that field should be populated.
	Labels []*LabelDescriptor `json:"labels,omitempty"`
	// LaunchStage: The product launch stage for channels of this type.
	//
	// Possible values:
	//   "LAUNCH_STAGE_UNSPECIFIED" - Do not use this default value.
	//   "UNIMPLEMENTED" - The feature is not yet implemented. Users can not use
	// it.
	//   "PRELAUNCH" - Prelaunch features are hidden from users and are only
	// visible internally.
	//   "EARLY_ACCESS" - Early Access features are limited to a closed group of
	// testers. To use these features, you must sign up in advance and sign a
	// Trusted Tester agreement (which includes confidentiality provisions). These
	// features may be unstable, changed in backward-incompatible ways, and are not
	// guaranteed to be released.
	//   "ALPHA" - Alpha is a limited availability test for releases before they
	// are cleared for widespread use. By Alpha, all significant design issues are
	// resolved and we are in the process of verifying functionality. Alpha
	// customers need to apply for access, agree to applicable terms, and have
	// their projects allowlisted. Alpha releases don't have to be feature
	// complete, no SLAs are provided, and there are no technical support
	// obligations, but they will be far enough along that customers can actually
	// use them in test environments or for limited-use tests -- just like they
	// would in normal production cases.
	//   "BETA" - Beta is the point at which we are ready to open a release for any
	// customer to use. There are no SLA or technical support obligations in a Beta
	// release. Products will be complete from a feature perspective, but may have
	// some open outstanding issues. Beta releases are suitable for limited
	// production use cases.
	//   "GA" - GA features are open to all developers and are considered stable
	// and fully qualified for production use.
	//   "DEPRECATED" - Deprecated features are scheduled to be shut down and
	// removed. For more information, see the "Deprecation Policy" section of our
	// Terms of Service (https://cloud.google.com/terms/) and the Google Cloud
	// Platform Subject to the Deprecation Policy
	// (https://cloud.google.com/terms/deprecation) documentation.
	LaunchStage string `json:"launchStage,omitempty"`
	// Name: The full REST resource name for this descriptor. The format is:
	// projects/[PROJECT_ID_OR_NUMBER]/notificationChannelDescriptors/[TYPE] In the
	// above, [TYPE] is the value of the type field.
	Name string `json:"name,omitempty"`
	// SupportedTiers: The tiers that support this notification channel; the
	// project service tier must be one of the supported_tiers.
	//
	// Possible values:
	//   "SERVICE_TIER_UNSPECIFIED" - An invalid sentinel value, used to indicate
	// that a tier has not been provided explicitly.
	//   "SERVICE_TIER_BASIC" - The Cloud Monitoring Basic tier, a free tier of
	// service that provides basic features, a moderate allotment of logs, and
	// access to built-in metrics. A number of features are not available in this
	// tier. For more details, see the service tiers documentation
	// (https://cloud.google.com/monitoring/workspaces/tiers).
	//   "SERVICE_TIER_PREMIUM" - The Cloud Monitoring Premium tier, a higher, more
	// expensive tier of service that provides access to all Cloud Monitoring
	// features, lets you use Cloud Monitoring with AWS accounts, and has a larger
	// allotments for logs and metrics. For more details, see the service tiers
	// documentation (https://cloud.google.com/monitoring/workspaces/tiers).
	SupportedTiers []string `json:"supportedTiers,omitempty"`
	// Type: The type of notification channel, such as "email" and "sms". To view
	// the full list of channels, see Channel descriptors
	// (https://cloud.google.com/monitoring/alerts/using-channels-api#ncd).
	// Notification channel types are globally unique.
	Type string `json:"type,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "Description") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Description") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s NotificationChannelDescriptor) MarshalJSON() ([]byte, error) {
	type NoMethod NotificationChannelDescriptor
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// NotificationChannelStrategy: Control over how the notification channels in
// notification_channels are notified when this alert fires, on a per-channel
// basis.
type NotificationChannelStrategy struct {
	// NotificationChannelNames: The full REST resource name for the notification
	// channels that these settings apply to. Each of these correspond to the name
	// field in one of the NotificationChannel objects referenced in the
	// notification_channels field of this AlertPolicy. The format is:
	// projects/[PROJECT_ID_OR_NUMBER]/notificationChannels/[CHANNEL_ID]
	NotificationChannelNames []string `json:"notificationChannelNames,omitempty"`
	// RenotifyInterval: The frequency at which to send reminder notifications for
	// open incidents.
	RenotifyInterval string `json:"renotifyInterval,omitempty"`
	// ForceSendFields is a list of field names (e.g. "NotificationChannelNames")
	// to unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "NotificationChannelNames") to
	// include in API requests with the JSON null value. By default, fields with
	// empty values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s NotificationChannelStrategy) MarshalJSON() ([]byte, error) {
	type NoMethod NotificationChannelStrategy
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// NotificationRateLimit: Control over the rate of notifications sent to this
// alerting policy's notification channels.
type NotificationRateLimit struct {
	// Period: Not more than one notification per period.
	Period string `json:"period,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Period") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Period") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s NotificationRateLimit) MarshalJSON() ([]byte, error) {
	type NoMethod NotificationRateLimit
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// OperationMetadata: Contains metadata for longrunning operation for the edit
// Metrics Scope endpoints.
type OperationMetadata struct {
	// CreateTime: The time when the batch request was received.
	CreateTime string `json:"createTime,omitempty"`
	// State: Current state of the batch operation.
	//
	// Possible values:
	//   "STATE_UNSPECIFIED" - Invalid.
	//   "CREATED" - Request has been received.
	//   "RUNNING" - Request is actively being processed.
	//   "DONE" - The batch processing is done.
	//   "CANCELLED" - The batch processing was cancelled.
	State string `json:"state,omitempty"`
	// UpdateTime: The time when the operation result was last updated.
	UpdateTime string `json:"updateTime,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CreateTime") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CreateTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s OperationMetadata) MarshalJSON() ([]byte, error) {
	type NoMethod OperationMetadata
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Option: A protocol buffer option, which can be attached to a message, field,
// enumeration, etc.
type Option struct {
	// Name: The option's name. For protobuf built-in options (options defined in
	// descriptor.proto), this is the short name. For example, "map_entry". For
	// custom options, it should be the fully-qualified name. For example,
	// "google.api.http".
	Name string `json:"name,omitempty"`
	// Value: The option's value packed in an Any message. If the value is a
	// primitive, the corresponding wrapper type defined in
	// google/protobuf/wrappers.proto should be used. If the value is an enum, it
	// should be stored as an int32 value using the google.protobuf.Int32Value
	// type.
	Value googleapi.RawMessage `json:"value,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Name") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Name") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Option) MarshalJSON() ([]byte, error) {
	type NoMethod Option
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// PerformanceThreshold: A PerformanceThreshold is used when each window is
// good when that window has a sufficiently high performance.
type PerformanceThreshold struct {
	// BasicSliPerformance: BasicSli to evaluate to judge window quality.
	BasicSliPerformance *BasicSli `json:"basicSliPerformance,omitempty"`
	// Performance: RequestBasedSli to evaluate to judge window quality.
	Performance *RequestBasedSli `json:"performance,omitempty"`
	// Threshold: If window performance >= threshold, the window is counted as
	// good.
	Threshold float64 `json:"threshold,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BasicSliPerformance") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BasicSliPerformance") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s PerformanceThreshold) MarshalJSON() ([]byte, error) {
	type NoMethod PerformanceThreshold
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *PerformanceThreshold) UnmarshalJSON(data []byte) error {
	type NoMethod PerformanceThreshold
	var s1 struct {
		Threshold gensupport.JSONFloat64 `json:"threshold"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.Threshold = float64(s1.Threshold)
	return nil
}

// PingConfig: Information involved in sending ICMP pings alongside public
// HTTP/TCP checks. For HTTP, the pings are performed for each part of the
// redirect chain.
type PingConfig struct {
	// PingsCount: Number of ICMP pings. A maximum of 3 ICMP pings is currently
	// supported.
	PingsCount int64 `json:"pingsCount,omitempty"`
	// ForceSendFields is a list of field names (e.g. "PingsCount") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "PingsCount") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s PingConfig) MarshalJSON() ([]byte, error) {
	type NoMethod PingConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Point: A single data point in a time series.
type Point struct {
	// Interval: The time interval to which the data point applies. For GAUGE
	// metrics, the start time is optional, but if it is supplied, it must equal
	// the end time. For DELTA metrics, the start and end time should specify a
	// non-zero interval, with subsequent points specifying contiguous and
	// non-overlapping intervals. For CUMULATIVE metrics, the start and end time
	// should specify a non-zero interval, with subsequent points specifying the
	// same start time and increasing end times, until an event resets the
	// cumulative value to zero and sets a new start time for the following points.
	Interval *TimeInterval `json:"interval,omitempty"`
	// Value: The value of the data point.
	Value *TypedValue `json:"value,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Interval") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Interval") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Point) MarshalJSON() ([]byte, error) {
	type NoMethod Point
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// PointData: A point's value columns and time interval. Each point has one or
// more point values corresponding to the entries in point_descriptors field in
// the TimeSeriesDescriptor associated with this object.
type PointData struct {
	// TimeInterval: The time interval associated with the point.
	TimeInterval *TimeInterval `json:"timeInterval,omitempty"`
	// Values: The values that make up the point.
	Values []*TypedValue `json:"values,omitempty"`
	// ForceSendFields is a list of field names (e.g. "TimeInterval") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "TimeInterval") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s PointData) MarshalJSON() ([]byte, error) {
	type NoMethod PointData
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// PrometheusQueryLanguageCondition: A condition type that allows alerting
// policies to be defined using Prometheus Query Language (PromQL)
// (https://prometheus.io/docs/prometheus/latest/querying/basics/).The
// PrometheusQueryLanguageCondition message contains information from a
// Prometheus alerting rule and its associated rule group.A Prometheus alerting
// rule is described here
// (https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/).
// The semantics of a Prometheus alerting rule is described here
// (https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/#rule).A
// Prometheus rule group is described here
// (https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/).
// The semantics of a Prometheus rule group is described here
// (https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/#rule_group).Because
// Cloud Alerting has no representation of a Prometheus rule group resource, we
// must embed the information of the parent rule group inside each of the
// conditions that refer to it. We must also update the contents of all
// Prometheus alerts in case the information of their rule group changes.The
// PrometheusQueryLanguageCondition protocol buffer combines the information of
// the corresponding rule group and alerting rule. The structure of the
// PrometheusQueryLanguageCondition protocol buffer does NOT mimic the
// structure of the Prometheus rule group and alerting rule YAML declarations.
// The PrometheusQueryLanguageCondition protocol buffer may change in the
// future to support future rule group and/or alerting rule features. There are
// no new such features at the present time (2023-06-26).
type PrometheusQueryLanguageCondition struct {
	// AlertRule: Optional. The alerting rule name of this alert in the
	// corresponding Prometheus configuration file.Some external tools may require
	// this field to be populated correctly in order to refer to the original
	// Prometheus configuration file. The rule group name and the alert name are
	// necessary to update the relevant AlertPolicies in case the definition of the
	// rule group changes in the future.This field is optional. If this field is
	// not empty, then it must be a valid Prometheus label name
	// (https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels).
	// This field may not exceed 2048 Unicode characters in length.
	AlertRule string `json:"alertRule,omitempty"`
	// DisableMetricValidation: Optional. Whether to disable metric existence
	// validation for this condition.This allows alerting policies to be defined on
	// metrics that do not yet exist, improving advanced customer workflows such as
	// configuring alerting policies using Terraform.Users with the
	// monitoring.alertPolicyViewer role are able to see the name of the
	// non-existent metric in the alerting policy condition.
	DisableMetricValidation bool `json:"disableMetricValidation,omitempty"`
	// Duration: Optional. Alerts are considered firing once their PromQL
	// expression was evaluated to be "true" for this long. Alerts whose PromQL
	// expression was not evaluated to be "true" for long enough are considered
	// pending. Must be a non-negative duration or missing. This field is optional.
	// Its default value is zero.
	Duration string `json:"duration,omitempty"`
	// EvaluationInterval: Optional. How often this rule should be evaluated. Must
	// be a positive multiple of 30 seconds or missing. This field is optional. Its
	// default value is 30 seconds. If this PrometheusQueryLanguageCondition was
	// generated from a Prometheus alerting rule, then this value should be taken
	// from the enclosing rule group.
	EvaluationInterval string `json:"evaluationInterval,omitempty"`
	// Labels: Optional. Labels to add to or overwrite in the PromQL query result.
	// Label names must be valid
	// (https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels).
	// Label values can be templatized by using variables
	// (https://cloud.google.com/monitoring/alerts/doc-variables#doc-vars). The
	// only available variable names are the names of the labels in the PromQL
	// result, including "__name__" and "value". "labels" may be empty.
	Labels map[string]string `json:"labels,omitempty"`
	// Query: Required. The PromQL expression to evaluate. Every evaluation cycle
	// this expression is evaluated at the current time, and all resultant time
	// series become pending/firing alerts. This field must not be empty.
	Query string `json:"query,omitempty"`
	// RuleGroup: Optional. The rule group name of this alert in the corresponding
	// Prometheus configuration file.Some external tools may require this field to
	// be populated correctly in order to refer to the original Prometheus
	// configuration file. The rule group name and the alert name are necessary to
	// update the relevant AlertPolicies in case the definition of the rule group
	// changes in the future.This field is optional. If this field is not empty,
	// then it must contain a valid UTF-8 string. This field may not exceed 2048
	// Unicode characters in length.
	RuleGroup string `json:"ruleGroup,omitempty"`
	// ForceSendFields is a list of field names (e.g. "AlertRule") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AlertRule") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s PrometheusQueryLanguageCondition) MarshalJSON() ([]byte, error) {
	type NoMethod PrometheusQueryLanguageCondition
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// QueryTimeSeriesRequest: The QueryTimeSeries request. For information about
// the status of Monitoring Query Language (MQL), see the MQL deprecation
// notice (https://cloud.google.com/stackdriver/docs/deprecations/mql).
type QueryTimeSeriesRequest struct {
	// PageSize: A positive number that is the maximum number of time_series_data
	// to return.
	PageSize int64 `json:"pageSize,omitempty"`
	// PageToken: If this field is not empty then it must contain the nextPageToken
	// value returned by a previous call to this method. Using this field causes
	// the method to return additional results from the previous method call.
	PageToken string `json:"pageToken,omitempty"`
	// Query: Required. The query in the Monitoring Query Language
	// (https://cloud.google.com/monitoring/mql/reference) format. The default time
	// zone is in UTC.
	Query string `json:"query,omitempty"`
	// ForceSendFields is a list of field names (e.g. "PageSize") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "PageSize") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s QueryTimeSeriesRequest) MarshalJSON() ([]byte, error) {
	type NoMethod QueryTimeSeriesRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// QueryTimeSeriesResponse: The QueryTimeSeries response. For information about
// the status of Monitoring Query Language (MQL), see the MQL deprecation
// notice (https://cloud.google.com/stackdriver/docs/deprecations/mql).
type QueryTimeSeriesResponse struct {
	// NextPageToken: If there are more results than have been returned, then this
	// field is set to a non-empty value. To see the additional results, use that
	// value as page_token in the next call to this method.
	NextPageToken string `json:"nextPageToken,omitempty"`
	// PartialErrors: Query execution errors that may have caused the time series
	// data returned to be incomplete. The available data will be available in the
	// response.
	PartialErrors []*Status `json:"partialErrors,omitempty"`
	// TimeSeriesData: The time series data.
	TimeSeriesData []*TimeSeriesData `json:"timeSeriesData,omitempty"`
	// TimeSeriesDescriptor: The descriptor for the time series data.
	TimeSeriesDescriptor *TimeSeriesDescriptor `json:"timeSeriesDescriptor,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "NextPageToken") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s QueryTimeSeriesResponse) MarshalJSON() ([]byte, error) {
	type NoMethod QueryTimeSeriesResponse
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Range: The range of the population values.
type Range struct {
	// Max: The maximum of the population values.
	Max float64 `json:"max,omitempty"`
	// Min: The minimum of the population values.
	Min float64 `json:"min,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Max") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Max") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Range) MarshalJSON() ([]byte, error) {
	type NoMethod Range
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *Range) UnmarshalJSON(data []byte) error {
	type NoMethod Range
	var s1 struct {
		Max gensupport.JSONFloat64 `json:"max"`
		Min gensupport.JSONFloat64 `json:"min"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.Max = float64(s1.Max)
	s.Min = float64(s1.Min)
	return nil
}

// RequestBasedSli: Service Level Indicators for which atomic units of service
// are counted directly.
type RequestBasedSli struct {
	// DistributionCut: distribution_cut is used when good_service is a count of
	// values aggregated in a Distribution that fall into a good range. The
	// total_service is the total count of all values aggregated in the
	// Distribution.
	DistributionCut *DistributionCut `json:"distributionCut,omitempty"`
	// GoodTotalRatio: good_total_ratio is used when the ratio of good_service to
	// total_service is computed from two TimeSeries.
	GoodTotalRatio *TimeSeriesRatio `json:"goodTotalRatio,omitempty"`
	// ForceSendFields is a list of field names (e.g. "DistributionCut") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "DistributionCut") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s RequestBasedSli) MarshalJSON() ([]byte, error) {
	type NoMethod RequestBasedSli
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ResourceGroup: The resource submessage for group checks. It can be used
// instead of a monitored resource, when multiple resources are being
// monitored.
type ResourceGroup struct {
	// GroupId: The group of resources being monitored. Should be only the
	// [GROUP_ID], and not the full-path
	// projects/[PROJECT_ID_OR_NUMBER]/groups/[GROUP_ID].
	GroupId string `json:"groupId,omitempty"`
	// ResourceType: The resource type of the group members.
	//
	// Possible values:
	//   "RESOURCE_TYPE_UNSPECIFIED" - Default value (not valid).
	//   "INSTANCE" - A group of instances from Google Cloud Platform (GCP) or
	// Amazon Web Services (AWS).
	//   "AWS_ELB_LOAD_BALANCER" - A group of Amazon ELB load balancers.
	ResourceType string `json:"resourceType,omitempty"`
	// ForceSendFields is a list of field names (e.g. "GroupId") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "GroupId") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ResourceGroup) MarshalJSON() ([]byte, error) {
	type NoMethod ResourceGroup
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ResponseStatusCode: A status to accept. Either a status code class like
// "2xx", or an integer status code like "200".
type ResponseStatusCode struct {
	// StatusClass: A class of status codes to accept.
	//
	// Possible values:
	//   "STATUS_CLASS_UNSPECIFIED" - Default value that matches no status codes.
	//   "STATUS_CLASS_1XX" - The class of status codes between 100 and 199.
	//   "STATUS_CLASS_2XX" - The class of status codes between 200 and 299.
	//   "STATUS_CLASS_3XX" - The class of status codes between 300 and 399.
	//   "STATUS_CLASS_4XX" - The class of status codes between 400 and 499.
	//   "STATUS_CLASS_5XX" - The class of status codes between 500 and 599.
	//   "STATUS_CLASS_ANY" - The class of all status codes.
	StatusClass string `json:"statusClass,omitempty"`
	// StatusValue: A status code to accept.
	StatusValue int64 `json:"statusValue,omitempty"`
	// ForceSendFields is a list of field names (e.g. "StatusClass") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "StatusClass") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ResponseStatusCode) MarshalJSON() ([]byte, error) {
	type NoMethod ResponseStatusCode
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// RowCountTest: A test that checks if the number of rows in the result set
// violates some threshold.
type RowCountTest struct {
	// Comparison: Required. The comparison to apply between the number of rows
	// returned by the query and the threshold.
	//
	// Possible values:
	//   "COMPARISON_UNSPECIFIED" - No ordering relationship is specified.
	//   "COMPARISON_GT" - True if the left argument is greater than the right
	// argument.
	//   "COMPARISON_GE" - True if the left argument is greater than or equal to
	// the right argument.
	//   "COMPARISON_LT" - True if the left argument is less than the right
	// argument.
	//   "COMPARISON_LE" - True if the left argument is less than or equal to the
	// right argument.
	//   "COMPARISON_EQ" - True if the left argument is equal to the right
	// argument.
	//   "COMPARISON_NE" - True if the left argument is not equal to the right
	// argument.
	Comparison string `json:"comparison,omitempty"`
	// Threshold: Required. The value against which to compare the row count.
	Threshold int64 `json:"threshold,omitempty,string"`
	// ForceSendFields is a list of field names (e.g. "Comparison") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Comparison") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s RowCountTest) MarshalJSON() ([]byte, error) {
	type NoMethod RowCountTest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// SendNotificationChannelVerificationCodeRequest: The
// SendNotificationChannelVerificationCode request.
type SendNotificationChannelVerificationCodeRequest struct {
}

// MService: A Service is a discrete, autonomous, and network-accessible unit,
// designed to solve an individual concern (Wikipedia
// (https://en.wikipedia.org/wiki/Service-orientation)). In Cloud Monitoring, a
// Service acts as the root resource under which operational aspects of the
// service are accessible.
type MService struct {
	// AppEngine: Type used for App Engine services.
	AppEngine *AppEngine `json:"appEngine,omitempty"`
	// BasicService: Message that contains the service type and service labels of
	// this service if it is a basic service. Documentation and examples here
	// (https://cloud.google.com/stackdriver/docs/solutions/slo-monitoring/api/api-structures#basic-svc-w-basic-sli).
	BasicService *BasicService `json:"basicService,omitempty"`
	// CloudEndpoints: Type used for Cloud Endpoints services.
	CloudEndpoints *CloudEndpoints `json:"cloudEndpoints,omitempty"`
	// CloudRun: Type used for Cloud Run services.
	CloudRun *CloudRun `json:"cloudRun,omitempty"`
	// ClusterIstio: Type used for Istio services that live in a Kubernetes
	// cluster.
	ClusterIstio *ClusterIstio `json:"clusterIstio,omitempty"`
	// Custom: Custom service type.
	Custom *Custom `json:"custom,omitempty"`
	// DisplayName: Name used for UI elements listing this Service.
	DisplayName string `json:"displayName,omitempty"`
	// GkeNamespace: Type used for GKE Namespaces.
	GkeNamespace *GkeNamespace `json:"gkeNamespace,omitempty"`
	// GkeService: Type used for GKE Services (the Kubernetes concept of a
	// service).
	GkeService *GkeService `json:"gkeService,omitempty"`
	// GkeWorkload: Type used for GKE Workloads.
	GkeWorkload *GkeWorkload `json:"gkeWorkload,omitempty"`
	// IstioCanonicalService: Type used for canonical services scoped to an Istio
	// mesh. Metrics for Istio are documented here
	// (https://istio.io/latest/docs/reference/config/metrics/)
	IstioCanonicalService *IstioCanonicalService `json:"istioCanonicalService,omitempty"`
	// MeshIstio: Type used for Istio services scoped to an Istio mesh.
	MeshIstio *MeshIstio `json:"meshIstio,omitempty"`
	// Name: Identifier. Resource name for this Service. The format is:
	// projects/[PROJECT_ID_OR_NUMBER]/services/[SERVICE_ID]
	Name string `json:"name,omitempty"`
	// Telemetry: Configuration for how to query telemetry on a Service.
	Telemetry *Telemetry `json:"telemetry,omitempty"`
	// UserLabels: Labels which have been used to annotate the service. Label keys
	// must start with a letter. Label keys and values may contain lowercase
	// letters, numbers, underscores, and dashes. Label keys and values have a
	// maximum length of 63 characters, and must be less than 128 bytes in size. Up
	// to 64 label entries may be stored. For labels which do not have a semantic
	// value, the empty string may be supplied for the label value.
	UserLabels map[string]string `json:"userLabels,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "AppEngine") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "AppEngine") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s MService) MarshalJSON() ([]byte, error) {
	type NoMethod MService
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ServiceAgentAuthentication: Contains information needed for generating
// either an OpenID Connect token
// (https://developers.google.com/identity/protocols/OpenIDConnect) or OAuth
// token (https://developers.google.com/identity/protocols/oauth2). The token
// will be generated for the Monitoring service agent service account.
type ServiceAgentAuthentication struct {
	// Type: Type of authentication.
	//
	// Possible values:
	//   "SERVICE_AGENT_AUTHENTICATION_TYPE_UNSPECIFIED" - Default value, will
	// result in OIDC Authentication.
	//   "OIDC_TOKEN" - OIDC Authentication
	Type string `json:"type,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Type") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Type") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ServiceAgentAuthentication) MarshalJSON() ([]byte, error) {
	type NoMethod ServiceAgentAuthentication
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ServiceLevelIndicator: A Service-Level Indicator (SLI) describes the
// "performance" of a service. For some services, the SLI is well-defined. In
// such cases, the SLI can be described easily by referencing the well-known
// SLI and providing the needed parameters. Alternatively, a "custom" SLI can
// be defined with a query to the underlying metric store. An SLI is defined to
// be good_service / total_service over any queried time interval. The value of
// performance always falls into the range 0 <= performance <= 1. A custom SLI
// describes how to compute this ratio, whether this is by dividing values from
// a pair of time series, cutting a Distribution into good and bad counts, or
// counting time windows in which the service complies with a criterion. For
// separation of concerns, a single Service-Level Indicator measures
// performance for only one aspect of service quality, such as fraction of
// successful queries or fast-enough queries.
type ServiceLevelIndicator struct {
	// BasicSli: Basic SLI on a well-known service type.
	BasicSli *BasicSli `json:"basicSli,omitempty"`
	// RequestBased: Request-based SLIs
	RequestBased *RequestBasedSli `json:"requestBased,omitempty"`
	// WindowsBased: Windows-based SLIs
	WindowsBased *WindowsBasedSli `json:"windowsBased,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BasicSli") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BasicSli") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ServiceLevelIndicator) MarshalJSON() ([]byte, error) {
	type NoMethod ServiceLevelIndicator
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ServiceLevelObjective: A Service-Level Objective (SLO) describes a level of
// desired good service. It consists of a service-level indicator (SLI), a
// performance goal, and a period over which the objective is to be evaluated
// against that goal. The SLO can use SLIs defined in a number of different
// manners. Typical SLOs might include "99% of requests in each rolling week
// have latency below 200 milliseconds" or "99.5% of requests in each calendar
// month return successfully."
type ServiceLevelObjective struct {
	// CalendarPeriod: A calendar period, semantically "since the start of the
	// current ". At this time, only DAY, WEEK, FORTNIGHT, and MONTH are supported.
	//
	// Possible values:
	//   "CALENDAR_PERIOD_UNSPECIFIED" - Undefined period, raises an error.
	//   "DAY" - A day.
	//   "WEEK" - A week. Weeks begin on Monday, following ISO 8601
	// (https://en.wikipedia.org/wiki/ISO_week_date).
	//   "FORTNIGHT" - A fortnight. The first calendar fortnight of the year begins
	// at the start of week 1 according to ISO 8601
	// (https://en.wikipedia.org/wiki/ISO_week_date).
	//   "MONTH" - A month.
	//   "QUARTER" - A quarter. Quarters start on dates 1-Jan, 1-Apr, 1-Jul, and
	// 1-Oct of each year.
	//   "HALF" - A half-year. Half-years start on dates 1-Jan and 1-Jul.
	//   "YEAR" - A year.
	CalendarPeriod string `json:"calendarPeriod,omitempty"`
	// DisplayName: Name used for UI elements listing this SLO.
	DisplayName string `json:"displayName,omitempty"`
	// Goal: The fraction of service that must be good in order for this objective
	// to be met. 0 < goal <= 0.9999.
	Goal float64 `json:"goal,omitempty"`
	// Name: Identifier. Resource name for this ServiceLevelObjective. The format
	// is:
	// projects/[PROJECT_ID_OR_NUMBER]/services/[SERVICE_ID]/serviceLevelObjectives/
	// [SLO_NAME]
	Name string `json:"name,omitempty"`
	// RollingPeriod: A rolling time period, semantically "in the past ". Must be
	// an integer multiple of 1 day no larger than 30 days.
	RollingPeriod string `json:"rollingPeriod,omitempty"`
	// ServiceLevelIndicator: The definition of good service, used to measure and
	// calculate the quality of the Service's performance with respect to a single
	// aspect of service quality.
	ServiceLevelIndicator *ServiceLevelIndicator `json:"serviceLevelIndicator,omitempty"`
	// UserLabels: Labels which have been used to annotate the service-level
	// objective. Label keys must start with a letter. Label keys and values may
	// contain lowercase letters, numbers, underscores, and dashes. Label keys and
	// values have a maximum length of 63 characters, and must be less than 128
	// bytes in size. Up to 64 label entries may be stored. For labels which do not
	// have a semantic value, the empty string may be supplied for the label value.
	UserLabels map[string]string `json:"userLabels,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "CalendarPeriod") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CalendarPeriod") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ServiceLevelObjective) MarshalJSON() ([]byte, error) {
	type NoMethod ServiceLevelObjective
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *ServiceLevelObjective) UnmarshalJSON(data []byte) error {
	type NoMethod ServiceLevelObjective
	var s1 struct {
		Goal gensupport.JSONFloat64 `json:"goal"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.Goal = float64(s1.Goal)
	return nil
}

// Snooze: A Snooze will prevent any alerts from being opened, and close any
// that are already open. The Snooze will work on alerts that match the
// criteria defined in the Snooze. The Snooze will be active from
// interval.start_time through interval.end_time.
type Snooze struct {
	// Criteria: Required. This defines the criteria for applying the Snooze. See
	// Criteria for more information.
	Criteria *Criteria `json:"criteria,omitempty"`
	// DisplayName: Required. A display name for the Snooze. This can be, at most,
	// 512 unicode characters.
	DisplayName string `json:"displayName,omitempty"`
	// Interval: Required. The Snooze will be active from interval.start_time
	// through interval.end_time. interval.start_time cannot be in the past. There
	// is a 15 second clock skew to account for the time it takes for a request to
	// reach the API from the UI.
	Interval *TimeInterval `json:"interval,omitempty"`
	// Name: Required. Identifier. The name of the Snooze. The format is:
	// projects/[PROJECT_ID_OR_NUMBER]/snoozes/[SNOOZE_ID] The ID of the Snooze
	// will be generated by the system.
	Name string `json:"name,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "Criteria") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Criteria") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Snooze) MarshalJSON() ([]byte, error) {
	type NoMethod Snooze
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// SourceContext: SourceContext represents information about the source of a
// protobuf element, like the file in which it is defined.
type SourceContext struct {
	// FileName: The path-qualified name of the .proto file that contained the
	// associated protobuf element. For example:
	// "google/protobuf/source_context.proto".
	FileName string `json:"fileName,omitempty"`
	// ForceSendFields is a list of field names (e.g. "FileName") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "FileName") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s SourceContext) MarshalJSON() ([]byte, error) {
	type NoMethod SourceContext
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// SpanContext: The context of a span. This is attached to an Exemplar in
// Distribution values during aggregation.It contains the name of a span with
// format: projects/[PROJECT_ID_OR_NUMBER]/traces/[TRACE_ID]/spans/[SPAN_ID]
type SpanContext struct {
	// SpanName: The resource name of the span. The format is:
	// projects/[PROJECT_ID_OR_NUMBER]/traces/[TRACE_ID]/spans/[SPAN_ID] [TRACE_ID]
	// is a unique identifier for a trace within a project; it is a 32-character
	// hexadecimal encoding of a 16-byte array.[SPAN_ID] is a unique identifier for
	// a span within a trace; it is a 16-character hexadecimal encoding of an
	// 8-byte array.
	SpanName string `json:"spanName,omitempty"`
	// ForceSendFields is a list of field names (e.g. "SpanName") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "SpanName") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s SpanContext) MarshalJSON() ([]byte, error) {
	type NoMethod SpanContext
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// SqlCondition: A condition that allows alerting policies to be defined using
// GoogleSQL. SQL conditions examine a sliding window of logs using GoogleSQL.
// Alert policies with SQL conditions may incur additional billing.
type SqlCondition struct {
	// BooleanTest: Test the boolean value in the indicated column.
	BooleanTest *BooleanTest `json:"booleanTest,omitempty"`
	// Daily: Schedule the query to execute every so many days.
	Daily *Daily `json:"daily,omitempty"`
	// Hourly: Schedule the query to execute every so many hours.
	Hourly *Hourly `json:"hourly,omitempty"`
	// Minutes: Schedule the query to execute every so many minutes.
	Minutes *Minutes `json:"minutes,omitempty"`
	// Query: Required. The Log Analytics SQL query to run, as a string. The query
	// must conform to the required shape. Specifically, the query must not try to
	// filter the input by time. A filter will automatically be applied to filter
	// the input so that the query receives all rows received since the last time
	// the query was run.For example, the following query extracts all log entries
	// containing an HTTP request:SELECT timestamp, log_name, severity,
	// http_request, resource, labels FROM my-project.global._Default._AllLogs
	// WHERE http_request IS NOT NULL
	Query string `json:"query,omitempty"`
	// RowCountTest: Test the row count against a threshold.
	RowCountTest *RowCountTest `json:"rowCountTest,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BooleanTest") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BooleanTest") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s SqlCondition) MarshalJSON() ([]byte, error) {
	type NoMethod SqlCondition
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Status: The Status type defines a logical error model that is suitable for
// 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).
type Status struct {
	// Code: The status code, which should be an enum value of google.rpc.Code.
	Code int64 `json:"code,omitempty"`
	// Details: A list of messages that carry the error details. There is a common
	// set of message types for APIs to use.
	Details []googleapi.RawMessage `json:"details,omitempty"`
	// Message: 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.
	Message string `json:"message,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Code") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Code") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Status) MarshalJSON() ([]byte, error) {
	type NoMethod Status
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// SyntheticMonitorTarget: Describes a Synthetic Monitor to be invoked by
// Uptime.
type SyntheticMonitorTarget struct {
	// CloudFunctionV2: Target a Synthetic Monitor GCFv2 instance.
	CloudFunctionV2 *CloudFunctionV2Target `json:"cloudFunctionV2,omitempty"`
	// ForceSendFields is a list of field names (e.g. "CloudFunctionV2") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CloudFunctionV2") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s SyntheticMonitorTarget) MarshalJSON() ([]byte, error) {
	type NoMethod SyntheticMonitorTarget
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// TcpCheck: Information required for a TCP Uptime check request.
type TcpCheck struct {
	// PingConfig: Contains information needed to add pings to a TCP check.
	PingConfig *PingConfig `json:"pingConfig,omitempty"`
	// Port: The TCP port on the server against which to run the check. Will be
	// combined with host (specified within the monitored_resource) to construct
	// the full URL. Required.
	Port int64 `json:"port,omitempty"`
	// ForceSendFields is a list of field names (e.g. "PingConfig") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "PingConfig") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s TcpCheck) MarshalJSON() ([]byte, error) {
	type NoMethod TcpCheck
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Telemetry: Configuration for how to query telemetry on a Service.
type Telemetry struct {
	// ResourceName: The full name of the resource that defines this service.
	// Formatted as described in
	// https://cloud.google.com/apis/design/resource_names.
	ResourceName string `json:"resourceName,omitempty"`
	// ForceSendFields is a list of field names (e.g. "ResourceName") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "ResourceName") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Telemetry) MarshalJSON() ([]byte, error) {
	type NoMethod Telemetry
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// TimeInterval: Describes a time interval: Reads: A half-open time interval.
// It includes the end time but excludes the start time: (startTime, endTime].
// The start time must be specified, must be earlier than the end time, and
// should be no older than the data retention period for the metric. Writes: A
// closed time interval. It extends from the start time to the end time, and
// includes both: [startTime, endTime]. Valid time intervals depend on the
// MetricKind
// (https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.metricDescriptors#MetricKind)
// of the metric value. The end time must not be earlier than the start time,
// and the end time must not be more than 25 hours in the past or more than
// five minutes in the future. For GAUGE metrics, the startTime value is
// technically optional; if no value is specified, the start time defaults to
// the value of the end time, and the interval represents a single point in
// time. If both start and end times are specified, they must be identical.
// Such an interval is valid only for GAUGE metrics, which are point-in-time
// measurements. The end time of a new interval must be at least a millisecond
// after the end time of the previous interval. For DELTA metrics, the start
// time and end time must specify a non-zero interval, with subsequent points
// specifying contiguous and non-overlapping intervals. For DELTA metrics, the
// start time of the next interval must be at least a millisecond after the end
// time of the previous interval. For CUMULATIVE metrics, the start time and
// end time must specify a non-zero interval, with subsequent points specifying
// the same start time and increasing end times, until an event resets the
// cumulative value to zero and sets a new start time for the following points.
// The new start time must be at least a millisecond after the end time of the
// previous interval. The start time of a new interval must be at least a
// millisecond after the end time of the previous interval because intervals
// are closed. If the start time of a new interval is the same as the end time
// of the previous interval, then data written at the new start time could
// overwrite data written at the previous end time.
type TimeInterval struct {
	// EndTime: Required. The end of the time interval.
	EndTime string `json:"endTime,omitempty"`
	// StartTime: Optional. The beginning of the time interval. The default value
	// for the start time is the end time. The start time must not be later than
	// the end time.
	StartTime string `json:"startTime,omitempty"`
	// ForceSendFields is a list of field names (e.g. "EndTime") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "EndTime") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s TimeInterval) MarshalJSON() ([]byte, error) {
	type NoMethod TimeInterval
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// TimeOfDay: Represents a time of day. The date and time zone are either not
// significant or are specified elsewhere. An API may choose to allow leap
// seconds. Related types are google.type.Date and google.protobuf.Timestamp.
type TimeOfDay struct {
	// Hours: Hours of a day in 24 hour format. Must be greater than or equal to 0
	// and typically must be less than or equal to 23. An API may choose to allow
	// the value "24:00:00" for scenarios like business closing time.
	Hours int64 `json:"hours,omitempty"`
	// Minutes: Minutes of an hour. Must be greater than or equal to 0 and less
	// than or equal to 59.
	Minutes int64 `json:"minutes,omitempty"`
	// Nanos: Fractions of seconds, in nanoseconds. Must be greater than or equal
	// to 0 and less than or equal to 999,999,999.
	Nanos int64 `json:"nanos,omitempty"`
	// Seconds: Seconds of a minute. Must be greater than or equal to 0 and
	// typically must be less than or equal to 59. An API may allow the value 60 if
	// it allows leap-seconds.
	Seconds int64 `json:"seconds,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Hours") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Hours") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s TimeOfDay) MarshalJSON() ([]byte, error) {
	type NoMethod TimeOfDay
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// TimeSeries: A collection of data points that describes the time-varying
// values of a metric. A time series is identified by a combination of a
// fully-specified monitored resource and a fully-specified metric. This type
// is used for both listing and creating time series.
type TimeSeries struct {
	// Description: Input only. A detailed description of the time series that will
	// be associated with the google.api.MetricDescriptor for the metric. Once set,
	// this field cannot be changed through CreateTimeSeries.
	Description string `json:"description,omitempty"`
	// Metadata: Output only. The associated monitored resource metadata. When
	// reading a time series, this field will include metadata labels that are
	// explicitly named in the reduction. When creating a time series, this field
	// is ignored.
	Metadata *MonitoredResourceMetadata `json:"metadata,omitempty"`
	// Metric: The associated metric. A fully-specified metric used to identify the
	// time series.
	Metric *Metric `json:"metric,omitempty"`
	// MetricKind: The metric kind of the time series. When listing time series,
	// this metric kind might be different from the metric kind of the associated
	// metric if this time series is an alignment or reduction of other time
	// series.When creating a time series, this field is optional. If present, it
	// must be the same as the metric kind of the associated metric. If the
	// associated metric's descriptor must be auto-created, then this field
	// specifies the metric kind of the new descriptor and must be either GAUGE
	// (the default) or CUMULATIVE.
	//
	// Possible values:
	//   "METRIC_KIND_UNSPECIFIED" - Do not use this default value.
	//   "GAUGE" - An instantaneous measurement of a value.
	//   "DELTA" - The change in a value during a time interval.
	//   "CUMULATIVE" - A value accumulated over a time interval. Cumulative
	// measurements in a time series should have the same start time and increasing
	// end times, until an event resets the cumulative value to zero and sets a new
	// start time for the following points.
	MetricKind string `json:"metricKind,omitempty"`
	// Points: The data points of this time series. When listing time series,
	// points are returned in reverse time order.When creating a time series, this
	// field must contain exactly one point and the point's type must be the same
	// as the value type of the associated metric. If the associated metric's
	// descriptor must be auto-created, then the value type of the descriptor is
	// determined by the point's type, which must be BOOL, INT64, DOUBLE, or
	// DISTRIBUTION.
	Points []*Point `json:"points,omitempty"`
	// Resource: The associated monitored resource. Custom metrics can use only
	// certain monitored resource types in their time series data. For more
	// information, see Monitored resources for custom metrics
	// (https://cloud.google.com/monitoring/custom-metrics/creating-metrics#custom-metric-resources).
	Resource *MonitoredResource `json:"resource,omitempty"`
	// Unit: The units in which the metric value is reported. It is only applicable
	// if the value_type is INT64, DOUBLE, or DISTRIBUTION. The unit defines the
	// representation of the stored metric values. This field can only be changed
	// through CreateTimeSeries when it is empty.
	Unit string `json:"unit,omitempty"`
	// ValueType: The value type of the time series. When listing time series, this
	// value type might be different from the value type of the associated metric
	// if this time series is an alignment or reduction of other time series.When
	// creating a time series, this field is optional. If present, it must be the
	// same as the type of the data in the points field.
	//
	// Possible values:
	//   "VALUE_TYPE_UNSPECIFIED" - Do not use this default value.
	//   "BOOL" - The value is a boolean. This value type can be used only if the
	// metric kind is GAUGE.
	//   "INT64" - The value is a signed 64-bit integer.
	//   "DOUBLE" - The value is a double precision floating point number.
	//   "STRING" - The value is a text string. This value type can be used only if
	// the metric kind is GAUGE.
	//   "DISTRIBUTION" - The value is a Distribution.
	//   "MONEY" - The value is money.
	ValueType string `json:"valueType,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Description") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Description") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s TimeSeries) MarshalJSON() ([]byte, error) {
	type NoMethod TimeSeries
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// TimeSeriesData: Represents the values of a time series associated with a
// TimeSeriesDescriptor.
type TimeSeriesData struct {
	// LabelValues: The values of the labels in the time series identifier, given
	// in the same order as the label_descriptors field of the TimeSeriesDescriptor
	// associated with this object. Each value must have a value of the type given
	// in the corresponding entry of label_descriptors.
	LabelValues []*LabelValue `json:"labelValues,omitempty"`
	// PointData: The points in the time series.
	PointData []*PointData `json:"pointData,omitempty"`
	// ForceSendFields is a list of field names (e.g. "LabelValues") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "LabelValues") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s TimeSeriesData) MarshalJSON() ([]byte, error) {
	type NoMethod TimeSeriesData
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// TimeSeriesDescriptor: A descriptor for the labels and points in a time
// series.
type TimeSeriesDescriptor struct {
	// LabelDescriptors: Descriptors for the labels.
	LabelDescriptors []*LabelDescriptor `json:"labelDescriptors,omitempty"`
	// PointDescriptors: Descriptors for the point data value columns.
	PointDescriptors []*ValueDescriptor `json:"pointDescriptors,omitempty"`
	// ForceSendFields is a list of field names (e.g. "LabelDescriptors") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "LabelDescriptors") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s TimeSeriesDescriptor) MarshalJSON() ([]byte, error) {
	type NoMethod TimeSeriesDescriptor
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// TimeSeriesRatio: A TimeSeriesRatio specifies two TimeSeries to use for
// computing the good_service / total_service ratio. The specified TimeSeries
// must have ValueType = DOUBLE or ValueType = INT64 and must have MetricKind =
// DELTA or MetricKind = CUMULATIVE. The TimeSeriesRatio must specify exactly
// two of good, bad, and total, and the relationship good_service + bad_service
// = total_service will be assumed.
type TimeSeriesRatio struct {
	// BadServiceFilter: A monitoring filter
	// (https://cloud.google.com/monitoring/api/v3/filters) specifying a TimeSeries
	// quantifying bad service, either demanded service that was not provided or
	// demanded service that was of inadequate quality. Must have ValueType =
	// DOUBLE or ValueType = INT64 and must have MetricKind = DELTA or MetricKind =
	// CUMULATIVE.
	BadServiceFilter string `json:"badServiceFilter,omitempty"`
	// GoodServiceFilter: A monitoring filter
	// (https://cloud.google.com/monitoring/api/v3/filters) specifying a TimeSeries
	// quantifying good service provided. Must have ValueType = DOUBLE or ValueType
	// = INT64 and must have MetricKind = DELTA or MetricKind = CUMULATIVE.
	GoodServiceFilter string `json:"goodServiceFilter,omitempty"`
	// TotalServiceFilter: A monitoring filter
	// (https://cloud.google.com/monitoring/api/v3/filters) specifying a TimeSeries
	// quantifying total demanded service. Must have ValueType = DOUBLE or
	// ValueType = INT64 and must have MetricKind = DELTA or MetricKind =
	// CUMULATIVE.
	TotalServiceFilter string `json:"totalServiceFilter,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BadServiceFilter") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BadServiceFilter") to include in
	// API requests with the JSON null value. By default, fields with empty values
	// are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s TimeSeriesRatio) MarshalJSON() ([]byte, error) {
	type NoMethod TimeSeriesRatio
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// Trigger: Specifies how many time series must fail a predicate to trigger a
// condition. If not specified, then a {count: 1} trigger is used.
type Trigger struct {
	// Count: The absolute number of time series that must fail the predicate for
	// the condition to be triggered.
	Count int64 `json:"count,omitempty"`
	// Percent: The percentage of time series that must fail the predicate for the
	// condition to be triggered.
	Percent float64 `json:"percent,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Count") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Count") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Trigger) MarshalJSON() ([]byte, error) {
	type NoMethod Trigger
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *Trigger) UnmarshalJSON(data []byte) error {
	type NoMethod Trigger
	var s1 struct {
		Percent gensupport.JSONFloat64 `json:"percent"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	s.Percent = float64(s1.Percent)
	return nil
}

// Type: A protocol buffer message type.
type Type struct {
	// Edition: The source edition string, only valid when syntax is
	// SYNTAX_EDITIONS.
	Edition string `json:"edition,omitempty"`
	// Fields: The list of fields.
	Fields []*Field `json:"fields,omitempty"`
	// Name: The fully qualified message name.
	Name string `json:"name,omitempty"`
	// Oneofs: The list of types appearing in oneof definitions in this type.
	Oneofs []string `json:"oneofs,omitempty"`
	// Options: The protocol buffer options.
	Options []*Option `json:"options,omitempty"`
	// SourceContext: The source context.
	SourceContext *SourceContext `json:"sourceContext,omitempty"`
	// Syntax: The source syntax.
	//
	// Possible values:
	//   "SYNTAX_PROTO2" - Syntax proto2.
	//   "SYNTAX_PROTO3" - Syntax proto3.
	//   "SYNTAX_EDITIONS" - Syntax editions.
	Syntax string `json:"syntax,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Edition") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Edition") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s Type) MarshalJSON() ([]byte, error) {
	type NoMethod Type
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// TypedValue: A single strongly-typed value.
type TypedValue struct {
	// BoolValue: A Boolean value: true or false.
	BoolValue *bool `json:"boolValue,omitempty"`
	// DistributionValue: A distribution value.
	DistributionValue *Distribution `json:"distributionValue,omitempty"`
	// DoubleValue: A 64-bit double-precision floating-point number. Its magnitude
	// is approximately ±10±300 and it has 16 significant digits of precision.
	DoubleValue *float64 `json:"doubleValue,omitempty"`
	// Int64Value: A 64-bit integer. Its range is approximately ±9.2x1018.
	Int64Value *int64 `json:"int64Value,omitempty,string"`
	// StringValue: A variable-length string value.
	StringValue *string `json:"stringValue,omitempty"`
	// ForceSendFields is a list of field names (e.g. "BoolValue") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "BoolValue") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s TypedValue) MarshalJSON() ([]byte, error) {
	type NoMethod TypedValue
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

func (s *TypedValue) UnmarshalJSON(data []byte) error {
	type NoMethod TypedValue
	var s1 struct {
		DoubleValue *gensupport.JSONFloat64 `json:"doubleValue"`
		*NoMethod
	}
	s1.NoMethod = (*NoMethod)(s)
	if err := json.Unmarshal(data, &s1); err != nil {
		return err
	}
	if s1.DoubleValue != nil {
		s.DoubleValue = (*float64)(s1.DoubleValue)
	}
	return nil
}

// UptimeCheckConfig: This message configures which resources and services to
// monitor for availability.
type UptimeCheckConfig struct {
	// CheckerType: The type of checkers to use to execute the Uptime check.
	//
	// Possible values:
	//   "CHECKER_TYPE_UNSPECIFIED" - The default checker type. Currently converted
	// to STATIC_IP_CHECKERS on creation, the default conversion behavior may
	// change in the future.
	//   "STATIC_IP_CHECKERS" - STATIC_IP_CHECKERS are used for uptime checks that
	// perform egress across the public internet. STATIC_IP_CHECKERS use the static
	// IP addresses returned by ListUptimeCheckIps.
	//   "VPC_CHECKERS" - VPC_CHECKERS are used for uptime checks that perform
	// egress using Service Directory and private network access. When using
	// VPC_CHECKERS, the monitored resource type must be servicedirectory_service.
	CheckerType string `json:"checkerType,omitempty"`
	// ContentMatchers: The content that is expected to appear in the data returned
	// by the target server against which the check is run. Currently, only the
	// first entry in the content_matchers list is supported, and additional
	// entries will be ignored. This field is optional and should only be specified
	// if a content match is required as part of the/ Uptime check.
	ContentMatchers []*ContentMatcher `json:"contentMatchers,omitempty"`
	// DisplayName: A human-friendly name for the Uptime check configuration. The
	// display name should be unique within a Cloud Monitoring Workspace in order
	// to make it easier to identify; however, uniqueness is not enforced.
	// Required.
	DisplayName string `json:"displayName,omitempty"`
	// HttpCheck: Contains information needed to make an HTTP or HTTPS check.
	HttpCheck *HttpCheck `json:"httpCheck,omitempty"`
	// InternalCheckers: The internal checkers that this check will egress from. If
	// is_internal is true and this list is empty, the check will egress from all
	// the InternalCheckers configured for the project that owns this
	// UptimeCheckConfig.
	InternalCheckers []*InternalChecker `json:"internalCheckers,omitempty"`
	// IsInternal: If this is true, then checks are made only from the
	// 'internal_checkers'. If it is false, then checks are made only from the
	// 'selected_regions'. It is an error to provide 'selected_regions' when
	// is_internal is true, or to provide 'internal_checkers' when is_internal is
	// false.
	IsInternal bool `json:"isInternal,omitempty"`
	// MonitoredResource: The monitored resource
	// (https://cloud.google.com/monitoring/api/resources) associated with the
	// configuration. The following monitored resource types are valid for this
	// field: uptime_url, gce_instance, gae_app, aws_ec2_instance,
	// aws_elb_load_balancer k8s_service servicedirectory_service
	// cloud_run_revision
	MonitoredResource *MonitoredResource `json:"monitoredResource,omitempty"`
	// Name: Identifier. A unique resource name for this Uptime check
	// configuration. The format is:
	// projects/[PROJECT_ID_OR_NUMBER]/uptimeCheckConfigs/[UPTIME_CHECK_ID]
	// [PROJECT_ID_OR_NUMBER] is the Workspace host project associated with the
	// Uptime check.This field should be omitted when creating the Uptime check
	// configuration; on create, the resource name is assigned by the server and
	// included in the response.
	Name string `json:"name,omitempty"`
	// Period: How often, in seconds, the Uptime check is performed. Currently, the
	// only supported values are 60s (1 minute), 300s (5 minutes), 600s (10
	// minutes), and 900s (15 minutes). Optional, defaults to 60s.
	Period string `json:"period,omitempty"`
	// ResourceGroup: The group resource associated with the configuration.
	ResourceGroup *ResourceGroup `json:"resourceGroup,omitempty"`
	// SelectedRegions: The list of regions from which the check will be run. Some
	// regions contain one location, and others contain more than one. If this
	// field is specified, enough regions must be provided to include a minimum of
	// 3 locations. Not specifying this field will result in Uptime checks running
	// from all available regions.
	//
	// Possible values:
	//   "REGION_UNSPECIFIED" - Default value if no region is specified. Will
	// result in Uptime checks running from all regions.
	//   "USA" - Allows checks to run from locations within the United States of
	// America.
	//   "EUROPE" - Allows checks to run from locations within the continent of
	// Europe.
	//   "SOUTH_AMERICA" - Allows checks to run from locations within the continent
	// of South America.
	//   "ASIA_PACIFIC" - Allows checks to run from locations within the Asia
	// Pacific area (ex: Singapore).
	//   "USA_OREGON" - Allows checks to run from locations within the western
	// United States of America
	//   "USA_IOWA" - Allows checks to run from locations within the central United
	// States of America
	//   "USA_VIRGINIA" - Allows checks to run from locations within the eastern
	// United States of America
	SelectedRegions []string `json:"selectedRegions,omitempty"`
	// SyntheticMonitor: Specifies a Synthetic Monitor to invoke.
	SyntheticMonitor *SyntheticMonitorTarget `json:"syntheticMonitor,omitempty"`
	// TcpCheck: Contains information needed to make a TCP check.
	TcpCheck *TcpCheck `json:"tcpCheck,omitempty"`
	// Timeout: The maximum amount of time to wait for the request to complete
	// (must be between 1 and 60 seconds). Required.
	Timeout string `json:"timeout,omitempty"`
	// UserLabels: User-supplied key/value data to be used for organizing and
	// identifying the UptimeCheckConfig objects.The field can contain up to 64
	// entries. Each key and value is limited to 63 Unicode characters or 128
	// bytes, whichever is smaller. Labels and values can contain only lowercase
	// letters, numerals, underscores, and dashes. Keys must begin with a letter.
	UserLabels map[string]string `json:"userLabels,omitempty"`

	// ServerResponse contains the HTTP response code and headers from the server.
	googleapi.ServerResponse `json:"-"`
	// ForceSendFields is a list of field names (e.g. "CheckerType") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "CheckerType") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s UptimeCheckConfig) MarshalJSON() ([]byte, error) {
	type NoMethod UptimeCheckConfig
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// UptimeCheckIp: Contains the region, location, and list of IP addresses where
// checkers in the location run from.
type UptimeCheckIp struct {
	// IpAddress: The IP address from which the Uptime check originates. This is a
	// fully specified IP address (not an IP address range). Most IP addresses, as
	// of this publication, are in IPv4 format; however, one should not rely on the
	// IP addresses being in IPv4 format indefinitely, and should support
	// interpreting this field in either IPv4 or IPv6 format.
	IpAddress string `json:"ipAddress,omitempty"`
	// Location: A more specific location within the region that typically encodes
	// a particular city/town/metro (and its containing state/province or country)
	// within the broader umbrella region category.
	Location string `json:"location,omitempty"`
	// Region: A broad region category in which the IP address is located.
	//
	// Possible values:
	//   "REGION_UNSPECIFIED" - Default value if no region is specified. Will
	// result in Uptime checks running from all regions.
	//   "USA" - Allows checks to run from locations within the United States of
	// America.
	//   "EUROPE" - Allows checks to run from locations within the continent of
	// Europe.
	//   "SOUTH_AMERICA" - Allows checks to run from locations within the continent
	// of South America.
	//   "ASIA_PACIFIC" - Allows checks to run from locations within the Asia
	// Pacific area (ex: Singapore).
	//   "USA_OREGON" - Allows checks to run from locations within the western
	// United States of America
	//   "USA_IOWA" - Allows checks to run from locations within the central United
	// States of America
	//   "USA_VIRGINIA" - Allows checks to run from locations within the eastern
	// United States of America
	Region string `json:"region,omitempty"`
	// ForceSendFields is a list of field names (e.g. "IpAddress") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "IpAddress") to include in API
	// requests with the JSON null value. By default, fields with empty values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s UptimeCheckIp) MarshalJSON() ([]byte, error) {
	type NoMethod UptimeCheckIp
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// ValueDescriptor: A descriptor for the value columns in a data point.
type ValueDescriptor struct {
	// Key: The value key.
	Key string `json:"key,omitempty"`
	// MetricKind: The value stream kind.
	//
	// Possible values:
	//   "METRIC_KIND_UNSPECIFIED" - Do not use this default value.
	//   "GAUGE" - An instantaneous measurement of a value.
	//   "DELTA" - The change in a value during a time interval.
	//   "CUMULATIVE" - A value accumulated over a time interval. Cumulative
	// measurements in a time series should have the same start time and increasing
	// end times, until an event resets the cumulative value to zero and sets a new
	// start time for the following points.
	MetricKind string `json:"metricKind,omitempty"`
	// Unit: The unit in which time_series point values are reported. unit follows
	// the UCUM format for units as seen in https://unitsofmeasure.org/ucum.html.
	// unit is only valid if value_type is INTEGER, DOUBLE, DISTRIBUTION.
	Unit string `json:"unit,omitempty"`
	// ValueType: The value type.
	//
	// Possible values:
	//   "VALUE_TYPE_UNSPECIFIED" - Do not use this default value.
	//   "BOOL" - The value is a boolean. This value type can be used only if the
	// metric kind is GAUGE.
	//   "INT64" - The value is a signed 64-bit integer.
	//   "DOUBLE" - The value is a double precision floating point number.
	//   "STRING" - The value is a text string. This value type can be used only if
	// the metric kind is GAUGE.
	//   "DISTRIBUTION" - The value is a Distribution.
	//   "MONEY" - The value is money.
	ValueType string `json:"valueType,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Key") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Key") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s ValueDescriptor) MarshalJSON() ([]byte, error) {
	type NoMethod ValueDescriptor
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// VerifyNotificationChannelRequest: The VerifyNotificationChannel request.
type VerifyNotificationChannelRequest struct {
	// Code: Required. The verification code that was delivered to the channel as a
	// result of invoking the SendNotificationChannelVerificationCode API method or
	// that was retrieved from a verified channel via
	// GetNotificationChannelVerificationCode. For example, one might have
	// "G-123456" or "TKNZGhhd2EyN3I1MnRnMjRv" (in general, one is only guaranteed
	// that the code is valid UTF-8; one should not make any assumptions regarding
	// the structure or format of the code).
	Code string `json:"code,omitempty"`
	// ForceSendFields is a list of field names (e.g. "Code") to unconditionally
	// include in API requests. By default, fields with empty or default values are
	// omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "Code") to include in API requests
	// with the JSON null value. By default, fields with empty values are omitted
	// from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s VerifyNotificationChannelRequest) MarshalJSON() ([]byte, error) {
	type NoMethod VerifyNotificationChannelRequest
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

// WindowsBasedSli: A WindowsBasedSli defines good_service as the count of time
// windows for which the provided service was of good quality. Criteria for
// determining if service was good are embedded in the window_criterion.
type WindowsBasedSli struct {
	// GoodBadMetricFilter: A monitoring filter
	// (https://cloud.google.com/monitoring/api/v3/filters) specifying a TimeSeries
	// with ValueType = BOOL. The window is good if any true values appear in the
	// window.
	GoodBadMetricFilter string `json:"goodBadMetricFilter,omitempty"`
	// GoodTotalRatioThreshold: A window is good if its performance is high enough.
	GoodTotalRatioThreshold *PerformanceThreshold `json:"goodTotalRatioThreshold,omitempty"`
	// MetricMeanInRange: A window is good if the metric's value is in a good
	// range, averaged across returned streams.
	MetricMeanInRange *MetricRange `json:"metricMeanInRange,omitempty"`
	// MetricSumInRange: A window is good if the metric's value is in a good range,
	// summed across returned streams.
	MetricSumInRange *MetricRange `json:"metricSumInRange,omitempty"`
	// WindowPeriod: Duration over which window quality is evaluated. Must be an
	// integer fraction of a day and at least 60s.
	WindowPeriod string `json:"windowPeriod,omitempty"`
	// ForceSendFields is a list of field names (e.g. "GoodBadMetricFilter") to
	// unconditionally include in API requests. By default, fields with empty or
	// default values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-ForceSendFields for more
	// details.
	ForceSendFields []string `json:"-"`
	// NullFields is a list of field names (e.g. "GoodBadMetricFilter") to include
	// in API requests with the JSON null value. By default, fields with empty
	// values are omitted from API requests. See
	// https://pkg.go.dev/google.golang.org/api#hdr-NullFields for more details.
	NullFields []string `json:"-"`
}

func (s WindowsBasedSli) MarshalJSON() ([]byte, error) {
	type NoMethod WindowsBasedSli
	return gensupport.MarshalJSON(NoMethod(s), s.ForceSendFields, s.NullFields)
}

type FoldersTimeSeriesListCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Lists time series that match a filter.
//
//   - name: The project
//     (https://cloud.google.com/monitoring/api/v3#project_name), organization or
//     folder on which to execute the request. The format is:
//     projects/[PROJECT_ID_OR_NUMBER] organizations/[ORGANIZATION_ID]
//     folders/[FOLDER_ID].
func (r *FoldersTimeSeriesService) List(name string) *FoldersTimeSeriesListCall {
	c := &FoldersTimeSeriesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// AggregationAlignmentPeriod sets the optional parameter
// "aggregation.alignmentPeriod": The alignment_period specifies a time
// interval, in seconds, that is used to divide the data in all the time series
// into consistent blocks of time. This will be done before the per-series
// aligner can be applied to the data.The value must be at least 60 seconds. If
// a per-series aligner other than ALIGN_NONE is specified, this field is
// required or an error is returned. If no per-series aligner is specified, or
// the aligner ALIGN_NONE is specified, then this field is ignored.The maximum
// value of the alignment_period is 104 weeks (2 years) for charts, and 90,000
// seconds (25 hours) for alerting policies.
func (c *FoldersTimeSeriesListCall) AggregationAlignmentPeriod(aggregationAlignmentPeriod string) *FoldersTimeSeriesListCall {
	c.urlParams_.Set("aggregation.alignmentPeriod", aggregationAlignmentPeriod)
	return c
}

// AggregationCrossSeriesReducer sets the optional parameter
// "aggregation.crossSeriesReducer": The reduction operation to be used to
// combine time series into a single time series, where the value of each data
// point in the resulting series is a function of all the already aligned
// values in the input time series.Not all reducer operations can be applied to
// all time series. The valid choices depend on the metric_kind and the
// value_type of the original time series. Reduction can yield a time series
// with a different metric_kind or value_type than the input time series.Time
// series data must first be aligned (see per_series_aligner) in order to
// perform cross-time series reduction. If cross_series_reducer is specified,
// then per_series_aligner must be specified, and must not be ALIGN_NONE. An
// alignment_period must also be specified; otherwise, an error is returned.
//
// Possible values:
//
//	"REDUCE_NONE" - No cross-time series reduction. The output of the Aligner
//
// is returned.
//
//	"REDUCE_MEAN" - Reduce by computing the mean value across time series for
//
// each alignment period. This reducer is valid for DELTA and GAUGE metrics
// with numeric or distribution values. The value_type of the output is DOUBLE.
//
//	"REDUCE_MIN" - Reduce by computing the minimum value across time series
//
// for each alignment period. This reducer is valid for DELTA and GAUGE metrics
// with numeric values. The value_type of the output is the same as the
// value_type of the input.
//
//	"REDUCE_MAX" - Reduce by computing the maximum value across time series
//
// for each alignment period. This reducer is valid for DELTA and GAUGE metrics
// with numeric values. The value_type of the output is the same as the
// value_type of the input.
//
//	"REDUCE_SUM" - Reduce by computing the sum across time series for each
//
// alignment period. This reducer is valid for DELTA and GAUGE metrics with
// numeric and distribution values. The value_type of the output is the same as
// the value_type of the input.
//
//	"REDUCE_STDDEV" - Reduce by computing the standard deviation across time
//
// series for each alignment period. This reducer is valid for DELTA and GAUGE
// metrics with numeric or distribution values. The value_type of the output is
// DOUBLE.
//
//	"REDUCE_COUNT" - Reduce by computing the number of data points across time
//
// series for each alignment period. This reducer is valid for DELTA and GAUGE
// metrics of numeric, Boolean, distribution, and string value_type. The
// value_type of the output is INT64.
//
//	"REDUCE_COUNT_TRUE" - Reduce by computing the number of True-valued data
//
// points across time series for each alignment period. This reducer is valid
// for DELTA and GAUGE metrics of Boolean value_type. The value_type of the
// output is INT64.
//
//	"REDUCE_COUNT_FALSE" - Reduce by computing the number of False-valued data
//
// points across time series for each alignment period. This reducer is valid
// for DELTA and GAUGE metrics of Boolean value_type. The value_type of the
// output is INT64.
//
//	"REDUCE_FRACTION_TRUE" - Reduce by computing the ratio of the number of
//
// True-valued data points to the total number of data points for each
// alignment period. This reducer is valid for DELTA and GAUGE metrics of
// Boolean value_type. The output value is in the range 0.0, 1.0 and has
// value_type DOUBLE.
//
//	"REDUCE_PERCENTILE_99" - Reduce by computing the 99th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
//
//	"REDUCE_PERCENTILE_95" - Reduce by computing the 95th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
//
//	"REDUCE_PERCENTILE_50" - Reduce by computing the 50th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
//
//	"REDUCE_PERCENTILE_05" - Reduce by computing the 5th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
func (c *FoldersTimeSeriesListCall) AggregationCrossSeriesReducer(aggregationCrossSeriesReducer string) *FoldersTimeSeriesListCall {
	c.urlParams_.Set("aggregation.crossSeriesReducer", aggregationCrossSeriesReducer)
	return c
}

// AggregationGroupByFields sets the optional parameter
// "aggregation.groupByFields": The set of fields to preserve when
// cross_series_reducer is specified. The group_by_fields determine how the
// time series are partitioned into subsets prior to applying the aggregation
// operation. Each subset contains time series that have the same value for
// each of the grouping fields. Each individual time series is a member of
// exactly one subset. The cross_series_reducer is applied to each subset of
// time series. It is not possible to reduce across different resource types,
// so this field implicitly contains resource.type. Fields not specified in
// group_by_fields are aggregated away. If group_by_fields is not specified and
// all the time series have the same resource type, then the time series are
// aggregated into a single output time series. If cross_series_reducer is not
// defined, this field is ignored.
func (c *FoldersTimeSeriesListCall) AggregationGroupByFields(aggregationGroupByFields ...string) *FoldersTimeSeriesListCall {
	c.urlParams_.SetMulti("aggregation.groupByFields", append([]string{}, aggregationGroupByFields...))
	return c
}

// AggregationPerSeriesAligner sets the optional parameter
// "aggregation.perSeriesAligner": An Aligner describes how to bring the data
// points in a single time series into temporal alignment. Except for
// ALIGN_NONE, all alignments cause all the data points in an alignment_period
// to be mathematically grouped together, resulting in a single data point for
// each alignment_period with end timestamp at the end of the period.Not all
// alignment operations may be applied to all time series. The valid choices
// depend on the metric_kind and value_type of the original time series.
// Alignment can change the metric_kind or the value_type of the time
// series.Time series data must be aligned in order to perform cross-time
// series reduction. If cross_series_reducer is specified, then
// per_series_aligner must be specified and not equal to ALIGN_NONE and
// alignment_period must be specified; otherwise, an error is returned.
//
// Possible values:
//
//	"ALIGN_NONE" - No alignment. Raw data is returned. Not valid if
//
// cross-series reduction is requested. The value_type of the result is the
// same as the value_type of the input.
//
//	"ALIGN_DELTA" - Align and convert to DELTA. The output is delta = y1 -
//
// y0.This alignment is valid for CUMULATIVE and DELTA metrics. If the selected
// alignment period results in periods with no data, then the aligned value for
// such a period is created by interpolation. The value_type of the aligned
// result is the same as the value_type of the input.
//
//	"ALIGN_RATE" - Align and convert to a rate. The result is computed as rate
//
// = (y1 - y0)/(t1 - t0), or "delta over time". Think of this aligner as
// providing the slope of the line that passes through the value at the start
// and at the end of the alignment_period.This aligner is valid for CUMULATIVE
// and DELTA metrics with numeric values. If the selected alignment period
// results in periods with no data, then the aligned value for such a period is
// created by interpolation. The output is a GAUGE metric with value_type
// DOUBLE.If, by "rate", you mean "percentage change", see the
// ALIGN_PERCENT_CHANGE aligner instead.
//
//	"ALIGN_INTERPOLATE" - Align by interpolating between adjacent points
//
// around the alignment period boundary. This aligner is valid for GAUGE
// metrics with numeric values. The value_type of the aligned result is the
// same as the value_type of the input.
//
//	"ALIGN_NEXT_OLDER" - Align by moving the most recent data point before the
//
// end of the alignment period to the boundary at the end of the alignment
// period. This aligner is valid for GAUGE metrics. The value_type of the
// aligned result is the same as the value_type of the input.
//
//	"ALIGN_MIN" - Align the time series by returning the minimum value in each
//
// alignment period. This aligner is valid for GAUGE and DELTA metrics with
// numeric values. The value_type of the aligned result is the same as the
// value_type of the input.
//
//	"ALIGN_MAX" - Align the time series by returning the maximum value in each
//
// alignment period. This aligner is valid for GAUGE and DELTA metrics with
// numeric values. The value_type of the aligned result is the same as the
// value_type of the input.
//
//	"ALIGN_MEAN" - Align the time series by returning the mean value in each
//
// alignment period. This aligner is valid for GAUGE and DELTA metrics with
// numeric values. The value_type of the aligned result is DOUBLE.
//
//	"ALIGN_COUNT" - Align the time series by returning the number of values in
//
// each alignment period. This aligner is valid for GAUGE and DELTA metrics
// with numeric or Boolean values. The value_type of the aligned result is
// INT64.
//
//	"ALIGN_SUM" - Align the time series by returning the sum of the values in
//
// each alignment period. This aligner is valid for GAUGE and DELTA metrics
// with numeric and distribution values. The value_type of the aligned result
// is the same as the value_type of the input.
//
//	"ALIGN_STDDEV" - Align the time series by returning the standard deviation
//
// of the values in each alignment period. This aligner is valid for GAUGE and
// DELTA metrics with numeric values. The value_type of the output is DOUBLE.
//
//	"ALIGN_COUNT_TRUE" - Align the time series by returning the number of True
//
// values in each alignment period. This aligner is valid for GAUGE metrics
// with Boolean values. The value_type of the output is INT64.
//
//	"ALIGN_COUNT_FALSE" - Align the time series by returning the number of
//
// False values in each alignment period. This aligner is valid for GAUGE
// metrics with Boolean values. The value_type of the output is INT64.
//
//	"ALIGN_FRACTION_TRUE" - Align the time series by returning the ratio of
//
// the number of True values to the total number of values in each alignment
// period. This aligner is valid for GAUGE metrics with Boolean values. The
// output value is in the range 0.0, 1.0 and has value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_99" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 99th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_95" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 95th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_50" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 50th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_05" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 5th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENT_CHANGE" - Align and convert to a percentage change. This
//
// aligner is valid for GAUGE and DELTA metrics with numeric values. This
// alignment returns ((current - previous)/previous) * 100, where the value of
// previous is determined based on the alignment_period.If the values of
// current and previous are both 0, then the returned value is 0. If only
// previous is 0, the returned value is infinity.A 10-minute moving mean is
// computed at each point of the alignment period prior to the above
// calculation to smooth the metric and prevent false positives from very
// short-lived spikes. The moving mean is only applicable for data whose values
// are >= 0. Any values < 0 are treated as a missing datapoint, and are
// ignored. While DELTA metrics are accepted by this alignment, special care
// should be taken that the values for the metric will always be positive. The
// output is a GAUGE metric with value_type DOUBLE.
func (c *FoldersTimeSeriesListCall) AggregationPerSeriesAligner(aggregationPerSeriesAligner string) *FoldersTimeSeriesListCall {
	c.urlParams_.Set("aggregation.perSeriesAligner", aggregationPerSeriesAligner)
	return c
}

// Filter sets the optional parameter "filter": Required. A monitoring filter
// (https://cloud.google.com/monitoring/api/v3/filters) that specifies which
// time series should be returned. The filter must specify a single metric
// type, and can additionally specify metric labels and other information. For
// example: metric.type = "compute.googleapis.com/instance/cpu/usage_time" AND
// metric.labels.instance_name = "my-instance-name"
func (c *FoldersTimeSeriesListCall) Filter(filter string) *FoldersTimeSeriesListCall {
	c.urlParams_.Set("filter", filter)
	return c
}

// IntervalEndTime sets the optional parameter "interval.endTime": Required.
// The end of the time interval.
func (c *FoldersTimeSeriesListCall) IntervalEndTime(intervalEndTime string) *FoldersTimeSeriesListCall {
	c.urlParams_.Set("interval.endTime", intervalEndTime)
	return c
}

// IntervalStartTime sets the optional parameter "interval.startTime": The
// beginning of the time interval. The default value for the start time is the
// end time. The start time must not be later than the end time.
func (c *FoldersTimeSeriesListCall) IntervalStartTime(intervalStartTime string) *FoldersTimeSeriesListCall {
	c.urlParams_.Set("interval.startTime", intervalStartTime)
	return c
}

// OrderBy sets the optional parameter "orderBy": Unsupported: must be left
// blank. The points in each time series are currently returned in reverse time
// order (most recent to oldest).
func (c *FoldersTimeSeriesListCall) OrderBy(orderBy string) *FoldersTimeSeriesListCall {
	c.urlParams_.Set("orderBy", orderBy)
	return c
}

// PageSize sets the optional parameter "pageSize": A positive number that is
// the maximum number of results to return. If page_size is empty or more than
// 100,000 results, the effective page_size is 100,000 results. If view is set
// to FULL, this is the maximum number of Points returned. If view is set to
// HEADERS, this is the maximum number of TimeSeries returned.
func (c *FoldersTimeSeriesListCall) PageSize(pageSize int64) *FoldersTimeSeriesListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": If this field is not
// empty then it must contain the nextPageToken value returned by a previous
// call to this method. Using this field causes the method to return additional
// results from the previous method call.
func (c *FoldersTimeSeriesListCall) PageToken(pageToken string) *FoldersTimeSeriesListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// SecondaryAggregationAlignmentPeriod sets the optional parameter
// "secondaryAggregation.alignmentPeriod": The alignment_period specifies a
// time interval, in seconds, that is used to divide the data in all the time
// series into consistent blocks of time. This will be done before the
// per-series aligner can be applied to the data.The value must be at least 60
// seconds. If a per-series aligner other than ALIGN_NONE is specified, this
// field is required or an error is returned. If no per-series aligner is
// specified, or the aligner ALIGN_NONE is specified, then this field is
// ignored.The maximum value of the alignment_period is 104 weeks (2 years) for
// charts, and 90,000 seconds (25 hours) for alerting policies.
func (c *FoldersTimeSeriesListCall) SecondaryAggregationAlignmentPeriod(secondaryAggregationAlignmentPeriod string) *FoldersTimeSeriesListCall {
	c.urlParams_.Set("secondaryAggregation.alignmentPeriod", secondaryAggregationAlignmentPeriod)
	return c
}

// SecondaryAggregationCrossSeriesReducer sets the optional parameter
// "secondaryAggregation.crossSeriesReducer": The reduction operation to be
// used to combine time series into a single time series, where the value of
// each data point in the resulting series is a function of all the already
// aligned values in the input time series.Not all reducer operations can be
// applied to all time series. The valid choices depend on the metric_kind and
// the value_type of the original time series. Reduction can yield a time
// series with a different metric_kind or value_type than the input time
// series.Time series data must first be aligned (see per_series_aligner) in
// order to perform cross-time series reduction. If cross_series_reducer is
// specified, then per_series_aligner must be specified, and must not be
// ALIGN_NONE. An alignment_period must also be specified; otherwise, an error
// is returned.
//
// Possible values:
//
//	"REDUCE_NONE" - No cross-time series reduction. The output of the Aligner
//
// is returned.
//
//	"REDUCE_MEAN" - Reduce by computing the mean value across time series for
//
// each alignment period. This reducer is valid for DELTA and GAUGE metrics
// with numeric or distribution values. The value_type of the output is DOUBLE.
//
//	"REDUCE_MIN" - Reduce by computing the minimum value across time series
//
// for each alignment period. This reducer is valid for DELTA and GAUGE metrics
// with numeric values. The value_type of the output is the same as the
// value_type of the input.
//
//	"REDUCE_MAX" - Reduce by computing the maximum value across time series
//
// for each alignment period. This reducer is valid for DELTA and GAUGE metrics
// with numeric values. The value_type of the output is the same as the
// value_type of the input.
//
//	"REDUCE_SUM" - Reduce by computing the sum across time series for each
//
// alignment period. This reducer is valid for DELTA and GAUGE metrics with
// numeric and distribution values. The value_type of the output is the same as
// the value_type of the input.
//
//	"REDUCE_STDDEV" - Reduce by computing the standard deviation across time
//
// series for each alignment period. This reducer is valid for DELTA and GAUGE
// metrics with numeric or distribution values. The value_type of the output is
// DOUBLE.
//
//	"REDUCE_COUNT" - Reduce by computing the number of data points across time
//
// series for each alignment period. This reducer is valid for DELTA and GAUGE
// metrics of numeric, Boolean, distribution, and string value_type. The
// value_type of the output is INT64.
//
//	"REDUCE_COUNT_TRUE" - Reduce by computing the number of True-valued data
//
// points across time series for each alignment period. This reducer is valid
// for DELTA and GAUGE metrics of Boolean value_type. The value_type of the
// output is INT64.
//
//	"REDUCE_COUNT_FALSE" - Reduce by computing the number of False-valued data
//
// points across time series for each alignment period. This reducer is valid
// for DELTA and GAUGE metrics of Boolean value_type. The value_type of the
// output is INT64.
//
//	"REDUCE_FRACTION_TRUE" - Reduce by computing the ratio of the number of
//
// True-valued data points to the total number of data points for each
// alignment period. This reducer is valid for DELTA and GAUGE metrics of
// Boolean value_type. The output value is in the range 0.0, 1.0 and has
// value_type DOUBLE.
//
//	"REDUCE_PERCENTILE_99" - Reduce by computing the 99th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
//
//	"REDUCE_PERCENTILE_95" - Reduce by computing the 95th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
//
//	"REDUCE_PERCENTILE_50" - Reduce by computing the 50th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
//
//	"REDUCE_PERCENTILE_05" - Reduce by computing the 5th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
func (c *FoldersTimeSeriesListCall) SecondaryAggregationCrossSeriesReducer(secondaryAggregationCrossSeriesReducer string) *FoldersTimeSeriesListCall {
	c.urlParams_.Set("secondaryAggregation.crossSeriesReducer", secondaryAggregationCrossSeriesReducer)
	return c
}

// SecondaryAggregationGroupByFields sets the optional parameter
// "secondaryAggregation.groupByFields": The set of fields to preserve when
// cross_series_reducer is specified. The group_by_fields determine how the
// time series are partitioned into subsets prior to applying the aggregation
// operation. Each subset contains time series that have the same value for
// each of the grouping fields. Each individual time series is a member of
// exactly one subset. The cross_series_reducer is applied to each subset of
// time series. It is not possible to reduce across different resource types,
// so this field implicitly contains resource.type. Fields not specified in
// group_by_fields are aggregated away. If group_by_fields is not specified and
// all the time series have the same resource type, then the time series are
// aggregated into a single output time series. If cross_series_reducer is not
// defined, this field is ignored.
func (c *FoldersTimeSeriesListCall) SecondaryAggregationGroupByFields(secondaryAggregationGroupByFields ...string) *FoldersTimeSeriesListCall {
	c.urlParams_.SetMulti("secondaryAggregation.groupByFields", append([]string{}, secondaryAggregationGroupByFields...))
	return c
}

// SecondaryAggregationPerSeriesAligner sets the optional parameter
// "secondaryAggregation.perSeriesAligner": An Aligner describes how to bring
// the data points in a single time series into temporal alignment. Except for
// ALIGN_NONE, all alignments cause all the data points in an alignment_period
// to be mathematically grouped together, resulting in a single data point for
// each alignment_period with end timestamp at the end of the period.Not all
// alignment operations may be applied to all time series. The valid choices
// depend on the metric_kind and value_type of the original time series.
// Alignment can change the metric_kind or the value_type of the time
// series.Time series data must be aligned in order to perform cross-time
// series reduction. If cross_series_reducer is specified, then
// per_series_aligner must be specified and not equal to ALIGN_NONE and
// alignment_period must be specified; otherwise, an error is returned.
//
// Possible values:
//
//	"ALIGN_NONE" - No alignment. Raw data is returned. Not valid if
//
// cross-series reduction is requested. The value_type of the result is the
// same as the value_type of the input.
//
//	"ALIGN_DELTA" - Align and convert to DELTA. The output is delta = y1 -
//
// y0.This alignment is valid for CUMULATIVE and DELTA metrics. If the selected
// alignment period results in periods with no data, then the aligned value for
// such a period is created by interpolation. The value_type of the aligned
// result is the same as the value_type of the input.
//
//	"ALIGN_RATE" - Align and convert to a rate. The result is computed as rate
//
// = (y1 - y0)/(t1 - t0), or "delta over time". Think of this aligner as
// providing the slope of the line that passes through the value at the start
// and at the end of the alignment_period.This aligner is valid for CUMULATIVE
// and DELTA metrics with numeric values. If the selected alignment period
// results in periods with no data, then the aligned value for such a period is
// created by interpolation. The output is a GAUGE metric with value_type
// DOUBLE.If, by "rate", you mean "percentage change", see the
// ALIGN_PERCENT_CHANGE aligner instead.
//
//	"ALIGN_INTERPOLATE" - Align by interpolating between adjacent points
//
// around the alignment period boundary. This aligner is valid for GAUGE
// metrics with numeric values. The value_type of the aligned result is the
// same as the value_type of the input.
//
//	"ALIGN_NEXT_OLDER" - Align by moving the most recent data point before the
//
// end of the alignment period to the boundary at the end of the alignment
// period. This aligner is valid for GAUGE metrics. The value_type of the
// aligned result is the same as the value_type of the input.
//
//	"ALIGN_MIN" - Align the time series by returning the minimum value in each
//
// alignment period. This aligner is valid for GAUGE and DELTA metrics with
// numeric values. The value_type of the aligned result is the same as the
// value_type of the input.
//
//	"ALIGN_MAX" - Align the time series by returning the maximum value in each
//
// alignment period. This aligner is valid for GAUGE and DELTA metrics with
// numeric values. The value_type of the aligned result is the same as the
// value_type of the input.
//
//	"ALIGN_MEAN" - Align the time series by returning the mean value in each
//
// alignment period. This aligner is valid for GAUGE and DELTA metrics with
// numeric values. The value_type of the aligned result is DOUBLE.
//
//	"ALIGN_COUNT" - Align the time series by returning the number of values in
//
// each alignment period. This aligner is valid for GAUGE and DELTA metrics
// with numeric or Boolean values. The value_type of the aligned result is
// INT64.
//
//	"ALIGN_SUM" - Align the time series by returning the sum of the values in
//
// each alignment period. This aligner is valid for GAUGE and DELTA metrics
// with numeric and distribution values. The value_type of the aligned result
// is the same as the value_type of the input.
//
//	"ALIGN_STDDEV" - Align the time series by returning the standard deviation
//
// of the values in each alignment period. This aligner is valid for GAUGE and
// DELTA metrics with numeric values. The value_type of the output is DOUBLE.
//
//	"ALIGN_COUNT_TRUE" - Align the time series by returning the number of True
//
// values in each alignment period. This aligner is valid for GAUGE metrics
// with Boolean values. The value_type of the output is INT64.
//
//	"ALIGN_COUNT_FALSE" - Align the time series by returning the number of
//
// False values in each alignment period. This aligner is valid for GAUGE
// metrics with Boolean values. The value_type of the output is INT64.
//
//	"ALIGN_FRACTION_TRUE" - Align the time series by returning the ratio of
//
// the number of True values to the total number of values in each alignment
// period. This aligner is valid for GAUGE metrics with Boolean values. The
// output value is in the range 0.0, 1.0 and has value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_99" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 99th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_95" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 95th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_50" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 50th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_05" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 5th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENT_CHANGE" - Align and convert to a percentage change. This
//
// aligner is valid for GAUGE and DELTA metrics with numeric values. This
// alignment returns ((current - previous)/previous) * 100, where the value of
// previous is determined based on the alignment_period.If the values of
// current and previous are both 0, then the returned value is 0. If only
// previous is 0, the returned value is infinity.A 10-minute moving mean is
// computed at each point of the alignment period prior to the above
// calculation to smooth the metric and prevent false positives from very
// short-lived spikes. The moving mean is only applicable for data whose values
// are >= 0. Any values < 0 are treated as a missing datapoint, and are
// ignored. While DELTA metrics are accepted by this alignment, special care
// should be taken that the values for the metric will always be positive. The
// output is a GAUGE metric with value_type DOUBLE.
func (c *FoldersTimeSeriesListCall) SecondaryAggregationPerSeriesAligner(secondaryAggregationPerSeriesAligner string) *FoldersTimeSeriesListCall {
	c.urlParams_.Set("secondaryAggregation.perSeriesAligner", secondaryAggregationPerSeriesAligner)
	return c
}

// View sets the optional parameter "view": Required. Specifies which
// information is returned about the time series.
//
// Possible values:
//
//	"FULL" - Returns the identity of the metric(s), the time series, and the
//
// time series data.
//
//	"HEADERS" - Returns the identity of the metric and the time series
//
// resource, but not the time series data.
func (c *FoldersTimeSeriesListCall) View(view string) *FoldersTimeSeriesListCall {
	c.urlParams_.Set("view", view)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *FoldersTimeSeriesListCall) Fields(s ...googleapi.Field) *FoldersTimeSeriesListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *FoldersTimeSeriesListCall) IfNoneMatch(entityTag string) *FoldersTimeSeriesListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *FoldersTimeSeriesListCall) Context(ctx context.Context) *FoldersTimeSeriesListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *FoldersTimeSeriesListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *FoldersTimeSeriesListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/timeSeries")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.folders.timeSeries.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.folders.timeSeries.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *ListTimeSeriesResponse.ServerResponse.Header or (if a response was returned
// at all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *FoldersTimeSeriesListCall) Do(opts ...googleapi.CallOption) (*ListTimeSeriesResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &ListTimeSeriesResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.folders.timeSeries.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *FoldersTimeSeriesListCall) Pages(ctx context.Context, f func(*ListTimeSeriesResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type OrganizationsTimeSeriesListCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Lists time series that match a filter.
//
//   - name: The project
//     (https://cloud.google.com/monitoring/api/v3#project_name), organization or
//     folder on which to execute the request. The format is:
//     projects/[PROJECT_ID_OR_NUMBER] organizations/[ORGANIZATION_ID]
//     folders/[FOLDER_ID].
func (r *OrganizationsTimeSeriesService) List(name string) *OrganizationsTimeSeriesListCall {
	c := &OrganizationsTimeSeriesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// AggregationAlignmentPeriod sets the optional parameter
// "aggregation.alignmentPeriod": The alignment_period specifies a time
// interval, in seconds, that is used to divide the data in all the time series
// into consistent blocks of time. This will be done before the per-series
// aligner can be applied to the data.The value must be at least 60 seconds. If
// a per-series aligner other than ALIGN_NONE is specified, this field is
// required or an error is returned. If no per-series aligner is specified, or
// the aligner ALIGN_NONE is specified, then this field is ignored.The maximum
// value of the alignment_period is 104 weeks (2 years) for charts, and 90,000
// seconds (25 hours) for alerting policies.
func (c *OrganizationsTimeSeriesListCall) AggregationAlignmentPeriod(aggregationAlignmentPeriod string) *OrganizationsTimeSeriesListCall {
	c.urlParams_.Set("aggregation.alignmentPeriod", aggregationAlignmentPeriod)
	return c
}

// AggregationCrossSeriesReducer sets the optional parameter
// "aggregation.crossSeriesReducer": The reduction operation to be used to
// combine time series into a single time series, where the value of each data
// point in the resulting series is a function of all the already aligned
// values in the input time series.Not all reducer operations can be applied to
// all time series. The valid choices depend on the metric_kind and the
// value_type of the original time series. Reduction can yield a time series
// with a different metric_kind or value_type than the input time series.Time
// series data must first be aligned (see per_series_aligner) in order to
// perform cross-time series reduction. If cross_series_reducer is specified,
// then per_series_aligner must be specified, and must not be ALIGN_NONE. An
// alignment_period must also be specified; otherwise, an error is returned.
//
// Possible values:
//
//	"REDUCE_NONE" - No cross-time series reduction. The output of the Aligner
//
// is returned.
//
//	"REDUCE_MEAN" - Reduce by computing the mean value across time series for
//
// each alignment period. This reducer is valid for DELTA and GAUGE metrics
// with numeric or distribution values. The value_type of the output is DOUBLE.
//
//	"REDUCE_MIN" - Reduce by computing the minimum value across time series
//
// for each alignment period. This reducer is valid for DELTA and GAUGE metrics
// with numeric values. The value_type of the output is the same as the
// value_type of the input.
//
//	"REDUCE_MAX" - Reduce by computing the maximum value across time series
//
// for each alignment period. This reducer is valid for DELTA and GAUGE metrics
// with numeric values. The value_type of the output is the same as the
// value_type of the input.
//
//	"REDUCE_SUM" - Reduce by computing the sum across time series for each
//
// alignment period. This reducer is valid for DELTA and GAUGE metrics with
// numeric and distribution values. The value_type of the output is the same as
// the value_type of the input.
//
//	"REDUCE_STDDEV" - Reduce by computing the standard deviation across time
//
// series for each alignment period. This reducer is valid for DELTA and GAUGE
// metrics with numeric or distribution values. The value_type of the output is
// DOUBLE.
//
//	"REDUCE_COUNT" - Reduce by computing the number of data points across time
//
// series for each alignment period. This reducer is valid for DELTA and GAUGE
// metrics of numeric, Boolean, distribution, and string value_type. The
// value_type of the output is INT64.
//
//	"REDUCE_COUNT_TRUE" - Reduce by computing the number of True-valued data
//
// points across time series for each alignment period. This reducer is valid
// for DELTA and GAUGE metrics of Boolean value_type. The value_type of the
// output is INT64.
//
//	"REDUCE_COUNT_FALSE" - Reduce by computing the number of False-valued data
//
// points across time series for each alignment period. This reducer is valid
// for DELTA and GAUGE metrics of Boolean value_type. The value_type of the
// output is INT64.
//
//	"REDUCE_FRACTION_TRUE" - Reduce by computing the ratio of the number of
//
// True-valued data points to the total number of data points for each
// alignment period. This reducer is valid for DELTA and GAUGE metrics of
// Boolean value_type. The output value is in the range 0.0, 1.0 and has
// value_type DOUBLE.
//
//	"REDUCE_PERCENTILE_99" - Reduce by computing the 99th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
//
//	"REDUCE_PERCENTILE_95" - Reduce by computing the 95th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
//
//	"REDUCE_PERCENTILE_50" - Reduce by computing the 50th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
//
//	"REDUCE_PERCENTILE_05" - Reduce by computing the 5th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
func (c *OrganizationsTimeSeriesListCall) AggregationCrossSeriesReducer(aggregationCrossSeriesReducer string) *OrganizationsTimeSeriesListCall {
	c.urlParams_.Set("aggregation.crossSeriesReducer", aggregationCrossSeriesReducer)
	return c
}

// AggregationGroupByFields sets the optional parameter
// "aggregation.groupByFields": The set of fields to preserve when
// cross_series_reducer is specified. The group_by_fields determine how the
// time series are partitioned into subsets prior to applying the aggregation
// operation. Each subset contains time series that have the same value for
// each of the grouping fields. Each individual time series is a member of
// exactly one subset. The cross_series_reducer is applied to each subset of
// time series. It is not possible to reduce across different resource types,
// so this field implicitly contains resource.type. Fields not specified in
// group_by_fields are aggregated away. If group_by_fields is not specified and
// all the time series have the same resource type, then the time series are
// aggregated into a single output time series. If cross_series_reducer is not
// defined, this field is ignored.
func (c *OrganizationsTimeSeriesListCall) AggregationGroupByFields(aggregationGroupByFields ...string) *OrganizationsTimeSeriesListCall {
	c.urlParams_.SetMulti("aggregation.groupByFields", append([]string{}, aggregationGroupByFields...))
	return c
}

// AggregationPerSeriesAligner sets the optional parameter
// "aggregation.perSeriesAligner": An Aligner describes how to bring the data
// points in a single time series into temporal alignment. Except for
// ALIGN_NONE, all alignments cause all the data points in an alignment_period
// to be mathematically grouped together, resulting in a single data point for
// each alignment_period with end timestamp at the end of the period.Not all
// alignment operations may be applied to all time series. The valid choices
// depend on the metric_kind and value_type of the original time series.
// Alignment can change the metric_kind or the value_type of the time
// series.Time series data must be aligned in order to perform cross-time
// series reduction. If cross_series_reducer is specified, then
// per_series_aligner must be specified and not equal to ALIGN_NONE and
// alignment_period must be specified; otherwise, an error is returned.
//
// Possible values:
//
//	"ALIGN_NONE" - No alignment. Raw data is returned. Not valid if
//
// cross-series reduction is requested. The value_type of the result is the
// same as the value_type of the input.
//
//	"ALIGN_DELTA" - Align and convert to DELTA. The output is delta = y1 -
//
// y0.This alignment is valid for CUMULATIVE and DELTA metrics. If the selected
// alignment period results in periods with no data, then the aligned value for
// such a period is created by interpolation. The value_type of the aligned
// result is the same as the value_type of the input.
//
//	"ALIGN_RATE" - Align and convert to a rate. The result is computed as rate
//
// = (y1 - y0)/(t1 - t0), or "delta over time". Think of this aligner as
// providing the slope of the line that passes through the value at the start
// and at the end of the alignment_period.This aligner is valid for CUMULATIVE
// and DELTA metrics with numeric values. If the selected alignment period
// results in periods with no data, then the aligned value for such a period is
// created by interpolation. The output is a GAUGE metric with value_type
// DOUBLE.If, by "rate", you mean "percentage change", see the
// ALIGN_PERCENT_CHANGE aligner instead.
//
//	"ALIGN_INTERPOLATE" - Align by interpolating between adjacent points
//
// around the alignment period boundary. This aligner is valid for GAUGE
// metrics with numeric values. The value_type of the aligned result is the
// same as the value_type of the input.
//
//	"ALIGN_NEXT_OLDER" - Align by moving the most recent data point before the
//
// end of the alignment period to the boundary at the end of the alignment
// period. This aligner is valid for GAUGE metrics. The value_type of the
// aligned result is the same as the value_type of the input.
//
//	"ALIGN_MIN" - Align the time series by returning the minimum value in each
//
// alignment period. This aligner is valid for GAUGE and DELTA metrics with
// numeric values. The value_type of the aligned result is the same as the
// value_type of the input.
//
//	"ALIGN_MAX" - Align the time series by returning the maximum value in each
//
// alignment period. This aligner is valid for GAUGE and DELTA metrics with
// numeric values. The value_type of the aligned result is the same as the
// value_type of the input.
//
//	"ALIGN_MEAN" - Align the time series by returning the mean value in each
//
// alignment period. This aligner is valid for GAUGE and DELTA metrics with
// numeric values. The value_type of the aligned result is DOUBLE.
//
//	"ALIGN_COUNT" - Align the time series by returning the number of values in
//
// each alignment period. This aligner is valid for GAUGE and DELTA metrics
// with numeric or Boolean values. The value_type of the aligned result is
// INT64.
//
//	"ALIGN_SUM" - Align the time series by returning the sum of the values in
//
// each alignment period. This aligner is valid for GAUGE and DELTA metrics
// with numeric and distribution values. The value_type of the aligned result
// is the same as the value_type of the input.
//
//	"ALIGN_STDDEV" - Align the time series by returning the standard deviation
//
// of the values in each alignment period. This aligner is valid for GAUGE and
// DELTA metrics with numeric values. The value_type of the output is DOUBLE.
//
//	"ALIGN_COUNT_TRUE" - Align the time series by returning the number of True
//
// values in each alignment period. This aligner is valid for GAUGE metrics
// with Boolean values. The value_type of the output is INT64.
//
//	"ALIGN_COUNT_FALSE" - Align the time series by returning the number of
//
// False values in each alignment period. This aligner is valid for GAUGE
// metrics with Boolean values. The value_type of the output is INT64.
//
//	"ALIGN_FRACTION_TRUE" - Align the time series by returning the ratio of
//
// the number of True values to the total number of values in each alignment
// period. This aligner is valid for GAUGE metrics with Boolean values. The
// output value is in the range 0.0, 1.0 and has value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_99" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 99th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_95" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 95th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_50" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 50th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_05" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 5th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENT_CHANGE" - Align and convert to a percentage change. This
//
// aligner is valid for GAUGE and DELTA metrics with numeric values. This
// alignment returns ((current - previous)/previous) * 100, where the value of
// previous is determined based on the alignment_period.If the values of
// current and previous are both 0, then the returned value is 0. If only
// previous is 0, the returned value is infinity.A 10-minute moving mean is
// computed at each point of the alignment period prior to the above
// calculation to smooth the metric and prevent false positives from very
// short-lived spikes. The moving mean is only applicable for data whose values
// are >= 0. Any values < 0 are treated as a missing datapoint, and are
// ignored. While DELTA metrics are accepted by this alignment, special care
// should be taken that the values for the metric will always be positive. The
// output is a GAUGE metric with value_type DOUBLE.
func (c *OrganizationsTimeSeriesListCall) AggregationPerSeriesAligner(aggregationPerSeriesAligner string) *OrganizationsTimeSeriesListCall {
	c.urlParams_.Set("aggregation.perSeriesAligner", aggregationPerSeriesAligner)
	return c
}

// Filter sets the optional parameter "filter": Required. A monitoring filter
// (https://cloud.google.com/monitoring/api/v3/filters) that specifies which
// time series should be returned. The filter must specify a single metric
// type, and can additionally specify metric labels and other information. For
// example: metric.type = "compute.googleapis.com/instance/cpu/usage_time" AND
// metric.labels.instance_name = "my-instance-name"
func (c *OrganizationsTimeSeriesListCall) Filter(filter string) *OrganizationsTimeSeriesListCall {
	c.urlParams_.Set("filter", filter)
	return c
}

// IntervalEndTime sets the optional parameter "interval.endTime": Required.
// The end of the time interval.
func (c *OrganizationsTimeSeriesListCall) IntervalEndTime(intervalEndTime string) *OrganizationsTimeSeriesListCall {
	c.urlParams_.Set("interval.endTime", intervalEndTime)
	return c
}

// IntervalStartTime sets the optional parameter "interval.startTime": The
// beginning of the time interval. The default value for the start time is the
// end time. The start time must not be later than the end time.
func (c *OrganizationsTimeSeriesListCall) IntervalStartTime(intervalStartTime string) *OrganizationsTimeSeriesListCall {
	c.urlParams_.Set("interval.startTime", intervalStartTime)
	return c
}

// OrderBy sets the optional parameter "orderBy": Unsupported: must be left
// blank. The points in each time series are currently returned in reverse time
// order (most recent to oldest).
func (c *OrganizationsTimeSeriesListCall) OrderBy(orderBy string) *OrganizationsTimeSeriesListCall {
	c.urlParams_.Set("orderBy", orderBy)
	return c
}

// PageSize sets the optional parameter "pageSize": A positive number that is
// the maximum number of results to return. If page_size is empty or more than
// 100,000 results, the effective page_size is 100,000 results. If view is set
// to FULL, this is the maximum number of Points returned. If view is set to
// HEADERS, this is the maximum number of TimeSeries returned.
func (c *OrganizationsTimeSeriesListCall) PageSize(pageSize int64) *OrganizationsTimeSeriesListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": If this field is not
// empty then it must contain the nextPageToken value returned by a previous
// call to this method. Using this field causes the method to return additional
// results from the previous method call.
func (c *OrganizationsTimeSeriesListCall) PageToken(pageToken string) *OrganizationsTimeSeriesListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// SecondaryAggregationAlignmentPeriod sets the optional parameter
// "secondaryAggregation.alignmentPeriod": The alignment_period specifies a
// time interval, in seconds, that is used to divide the data in all the time
// series into consistent blocks of time. This will be done before the
// per-series aligner can be applied to the data.The value must be at least 60
// seconds. If a per-series aligner other than ALIGN_NONE is specified, this
// field is required or an error is returned. If no per-series aligner is
// specified, or the aligner ALIGN_NONE is specified, then this field is
// ignored.The maximum value of the alignment_period is 104 weeks (2 years) for
// charts, and 90,000 seconds (25 hours) for alerting policies.
func (c *OrganizationsTimeSeriesListCall) SecondaryAggregationAlignmentPeriod(secondaryAggregationAlignmentPeriod string) *OrganizationsTimeSeriesListCall {
	c.urlParams_.Set("secondaryAggregation.alignmentPeriod", secondaryAggregationAlignmentPeriod)
	return c
}

// SecondaryAggregationCrossSeriesReducer sets the optional parameter
// "secondaryAggregation.crossSeriesReducer": The reduction operation to be
// used to combine time series into a single time series, where the value of
// each data point in the resulting series is a function of all the already
// aligned values in the input time series.Not all reducer operations can be
// applied to all time series. The valid choices depend on the metric_kind and
// the value_type of the original time series. Reduction can yield a time
// series with a different metric_kind or value_type than the input time
// series.Time series data must first be aligned (see per_series_aligner) in
// order to perform cross-time series reduction. If cross_series_reducer is
// specified, then per_series_aligner must be specified, and must not be
// ALIGN_NONE. An alignment_period must also be specified; otherwise, an error
// is returned.
//
// Possible values:
//
//	"REDUCE_NONE" - No cross-time series reduction. The output of the Aligner
//
// is returned.
//
//	"REDUCE_MEAN" - Reduce by computing the mean value across time series for
//
// each alignment period. This reducer is valid for DELTA and GAUGE metrics
// with numeric or distribution values. The value_type of the output is DOUBLE.
//
//	"REDUCE_MIN" - Reduce by computing the minimum value across time series
//
// for each alignment period. This reducer is valid for DELTA and GAUGE metrics
// with numeric values. The value_type of the output is the same as the
// value_type of the input.
//
//	"REDUCE_MAX" - Reduce by computing the maximum value across time series
//
// for each alignment period. This reducer is valid for DELTA and GAUGE metrics
// with numeric values. The value_type of the output is the same as the
// value_type of the input.
//
//	"REDUCE_SUM" - Reduce by computing the sum across time series for each
//
// alignment period. This reducer is valid for DELTA and GAUGE metrics with
// numeric and distribution values. The value_type of the output is the same as
// the value_type of the input.
//
//	"REDUCE_STDDEV" - Reduce by computing the standard deviation across time
//
// series for each alignment period. This reducer is valid for DELTA and GAUGE
// metrics with numeric or distribution values. The value_type of the output is
// DOUBLE.
//
//	"REDUCE_COUNT" - Reduce by computing the number of data points across time
//
// series for each alignment period. This reducer is valid for DELTA and GAUGE
// metrics of numeric, Boolean, distribution, and string value_type. The
// value_type of the output is INT64.
//
//	"REDUCE_COUNT_TRUE" - Reduce by computing the number of True-valued data
//
// points across time series for each alignment period. This reducer is valid
// for DELTA and GAUGE metrics of Boolean value_type. The value_type of the
// output is INT64.
//
//	"REDUCE_COUNT_FALSE" - Reduce by computing the number of False-valued data
//
// points across time series for each alignment period. This reducer is valid
// for DELTA and GAUGE metrics of Boolean value_type. The value_type of the
// output is INT64.
//
//	"REDUCE_FRACTION_TRUE" - Reduce by computing the ratio of the number of
//
// True-valued data points to the total number of data points for each
// alignment period. This reducer is valid for DELTA and GAUGE metrics of
// Boolean value_type. The output value is in the range 0.0, 1.0 and has
// value_type DOUBLE.
//
//	"REDUCE_PERCENTILE_99" - Reduce by computing the 99th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
//
//	"REDUCE_PERCENTILE_95" - Reduce by computing the 95th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
//
//	"REDUCE_PERCENTILE_50" - Reduce by computing the 50th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
//
//	"REDUCE_PERCENTILE_05" - Reduce by computing the 5th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
func (c *OrganizationsTimeSeriesListCall) SecondaryAggregationCrossSeriesReducer(secondaryAggregationCrossSeriesReducer string) *OrganizationsTimeSeriesListCall {
	c.urlParams_.Set("secondaryAggregation.crossSeriesReducer", secondaryAggregationCrossSeriesReducer)
	return c
}

// SecondaryAggregationGroupByFields sets the optional parameter
// "secondaryAggregation.groupByFields": The set of fields to preserve when
// cross_series_reducer is specified. The group_by_fields determine how the
// time series are partitioned into subsets prior to applying the aggregation
// operation. Each subset contains time series that have the same value for
// each of the grouping fields. Each individual time series is a member of
// exactly one subset. The cross_series_reducer is applied to each subset of
// time series. It is not possible to reduce across different resource types,
// so this field implicitly contains resource.type. Fields not specified in
// group_by_fields are aggregated away. If group_by_fields is not specified and
// all the time series have the same resource type, then the time series are
// aggregated into a single output time series. If cross_series_reducer is not
// defined, this field is ignored.
func (c *OrganizationsTimeSeriesListCall) SecondaryAggregationGroupByFields(secondaryAggregationGroupByFields ...string) *OrganizationsTimeSeriesListCall {
	c.urlParams_.SetMulti("secondaryAggregation.groupByFields", append([]string{}, secondaryAggregationGroupByFields...))
	return c
}

// SecondaryAggregationPerSeriesAligner sets the optional parameter
// "secondaryAggregation.perSeriesAligner": An Aligner describes how to bring
// the data points in a single time series into temporal alignment. Except for
// ALIGN_NONE, all alignments cause all the data points in an alignment_period
// to be mathematically grouped together, resulting in a single data point for
// each alignment_period with end timestamp at the end of the period.Not all
// alignment operations may be applied to all time series. The valid choices
// depend on the metric_kind and value_type of the original time series.
// Alignment can change the metric_kind or the value_type of the time
// series.Time series data must be aligned in order to perform cross-time
// series reduction. If cross_series_reducer is specified, then
// per_series_aligner must be specified and not equal to ALIGN_NONE and
// alignment_period must be specified; otherwise, an error is returned.
//
// Possible values:
//
//	"ALIGN_NONE" - No alignment. Raw data is returned. Not valid if
//
// cross-series reduction is requested. The value_type of the result is the
// same as the value_type of the input.
//
//	"ALIGN_DELTA" - Align and convert to DELTA. The output is delta = y1 -
//
// y0.This alignment is valid for CUMULATIVE and DELTA metrics. If the selected
// alignment period results in periods with no data, then the aligned value for
// such a period is created by interpolation. The value_type of the aligned
// result is the same as the value_type of the input.
//
//	"ALIGN_RATE" - Align and convert to a rate. The result is computed as rate
//
// = (y1 - y0)/(t1 - t0), or "delta over time". Think of this aligner as
// providing the slope of the line that passes through the value at the start
// and at the end of the alignment_period.This aligner is valid for CUMULATIVE
// and DELTA metrics with numeric values. If the selected alignment period
// results in periods with no data, then the aligned value for such a period is
// created by interpolation. The output is a GAUGE metric with value_type
// DOUBLE.If, by "rate", you mean "percentage change", see the
// ALIGN_PERCENT_CHANGE aligner instead.
//
//	"ALIGN_INTERPOLATE" - Align by interpolating between adjacent points
//
// around the alignment period boundary. This aligner is valid for GAUGE
// metrics with numeric values. The value_type of the aligned result is the
// same as the value_type of the input.
//
//	"ALIGN_NEXT_OLDER" - Align by moving the most recent data point before the
//
// end of the alignment period to the boundary at the end of the alignment
// period. This aligner is valid for GAUGE metrics. The value_type of the
// aligned result is the same as the value_type of the input.
//
//	"ALIGN_MIN" - Align the time series by returning the minimum value in each
//
// alignment period. This aligner is valid for GAUGE and DELTA metrics with
// numeric values. The value_type of the aligned result is the same as the
// value_type of the input.
//
//	"ALIGN_MAX" - Align the time series by returning the maximum value in each
//
// alignment period. This aligner is valid for GAUGE and DELTA metrics with
// numeric values. The value_type of the aligned result is the same as the
// value_type of the input.
//
//	"ALIGN_MEAN" - Align the time series by returning the mean value in each
//
// alignment period. This aligner is valid for GAUGE and DELTA metrics with
// numeric values. The value_type of the aligned result is DOUBLE.
//
//	"ALIGN_COUNT" - Align the time series by returning the number of values in
//
// each alignment period. This aligner is valid for GAUGE and DELTA metrics
// with numeric or Boolean values. The value_type of the aligned result is
// INT64.
//
//	"ALIGN_SUM" - Align the time series by returning the sum of the values in
//
// each alignment period. This aligner is valid for GAUGE and DELTA metrics
// with numeric and distribution values. The value_type of the aligned result
// is the same as the value_type of the input.
//
//	"ALIGN_STDDEV" - Align the time series by returning the standard deviation
//
// of the values in each alignment period. This aligner is valid for GAUGE and
// DELTA metrics with numeric values. The value_type of the output is DOUBLE.
//
//	"ALIGN_COUNT_TRUE" - Align the time series by returning the number of True
//
// values in each alignment period. This aligner is valid for GAUGE metrics
// with Boolean values. The value_type of the output is INT64.
//
//	"ALIGN_COUNT_FALSE" - Align the time series by returning the number of
//
// False values in each alignment period. This aligner is valid for GAUGE
// metrics with Boolean values. The value_type of the output is INT64.
//
//	"ALIGN_FRACTION_TRUE" - Align the time series by returning the ratio of
//
// the number of True values to the total number of values in each alignment
// period. This aligner is valid for GAUGE metrics with Boolean values. The
// output value is in the range 0.0, 1.0 and has value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_99" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 99th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_95" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 95th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_50" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 50th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_05" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 5th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENT_CHANGE" - Align and convert to a percentage change. This
//
// aligner is valid for GAUGE and DELTA metrics with numeric values. This
// alignment returns ((current - previous)/previous) * 100, where the value of
// previous is determined based on the alignment_period.If the values of
// current and previous are both 0, then the returned value is 0. If only
// previous is 0, the returned value is infinity.A 10-minute moving mean is
// computed at each point of the alignment period prior to the above
// calculation to smooth the metric and prevent false positives from very
// short-lived spikes. The moving mean is only applicable for data whose values
// are >= 0. Any values < 0 are treated as a missing datapoint, and are
// ignored. While DELTA metrics are accepted by this alignment, special care
// should be taken that the values for the metric will always be positive. The
// output is a GAUGE metric with value_type DOUBLE.
func (c *OrganizationsTimeSeriesListCall) SecondaryAggregationPerSeriesAligner(secondaryAggregationPerSeriesAligner string) *OrganizationsTimeSeriesListCall {
	c.urlParams_.Set("secondaryAggregation.perSeriesAligner", secondaryAggregationPerSeriesAligner)
	return c
}

// View sets the optional parameter "view": Required. Specifies which
// information is returned about the time series.
//
// Possible values:
//
//	"FULL" - Returns the identity of the metric(s), the time series, and the
//
// time series data.
//
//	"HEADERS" - Returns the identity of the metric and the time series
//
// resource, but not the time series data.
func (c *OrganizationsTimeSeriesListCall) View(view string) *OrganizationsTimeSeriesListCall {
	c.urlParams_.Set("view", view)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *OrganizationsTimeSeriesListCall) Fields(s ...googleapi.Field) *OrganizationsTimeSeriesListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *OrganizationsTimeSeriesListCall) IfNoneMatch(entityTag string) *OrganizationsTimeSeriesListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *OrganizationsTimeSeriesListCall) Context(ctx context.Context) *OrganizationsTimeSeriesListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *OrganizationsTimeSeriesListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *OrganizationsTimeSeriesListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/timeSeries")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.organizations.timeSeries.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.organizations.timeSeries.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *ListTimeSeriesResponse.ServerResponse.Header or (if a response was returned
// at all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *OrganizationsTimeSeriesListCall) Do(opts ...googleapi.CallOption) (*ListTimeSeriesResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &ListTimeSeriesResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.organizations.timeSeries.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *OrganizationsTimeSeriesListCall) Pages(ctx context.Context, f func(*ListTimeSeriesResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type ProjectsAlertPoliciesCreateCall struct {
	s           *Service
	name        string
	alertpolicy *AlertPolicy
	urlParams_  gensupport.URLParams
	ctx_        context.Context
	header_     http.Header
}

// Create: Creates a new alerting policy.Design your application to
// single-thread API calls that modify the state of alerting policies in a
// single project. This includes calls to CreateAlertPolicy, DeleteAlertPolicy
// and UpdateAlertPolicy.
//
//   - name: The project
//     (https://cloud.google.com/monitoring/api/v3#project_name) in which to
//     create the alerting policy. The format is: projects/[PROJECT_ID_OR_NUMBER]
//     Note that this field names the parent container in which the alerting
//     policy will be written, not the name of the created policy. |name| must be
//     a host project of a Metrics Scope, otherwise INVALID_ARGUMENT error will
//     return. The alerting policy that is returned will have a name that
//     contains a normalized representation of this name as a prefix but adds a
//     suffix of the form /alertPolicies/[ALERT_POLICY_ID], identifying the
//     policy in the container.
func (r *ProjectsAlertPoliciesService) Create(name string, alertpolicy *AlertPolicy) *ProjectsAlertPoliciesCreateCall {
	c := &ProjectsAlertPoliciesCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.alertpolicy = alertpolicy
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsAlertPoliciesCreateCall) Fields(s ...googleapi.Field) *ProjectsAlertPoliciesCreateCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsAlertPoliciesCreateCall) Context(ctx context.Context) *ProjectsAlertPoliciesCreateCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsAlertPoliciesCreateCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsAlertPoliciesCreateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.alertpolicy)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/alertPolicies")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.alertPolicies.create", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.alertPolicies.create" call.
// Any non-2xx status code is an error. Response headers are in either
// *AlertPolicy.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsAlertPoliciesCreateCall) Do(opts ...googleapi.CallOption) (*AlertPolicy, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &AlertPolicy{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.alertPolicies.create", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsAlertPoliciesDeleteCall struct {
	s          *Service
	name       string
	urlParams_ gensupport.URLParams
	ctx_       context.Context
	header_    http.Header
}

// Delete: Deletes an alerting policy.Design your application to single-thread
// API calls that modify the state of alerting policies in a single project.
// This includes calls to CreateAlertPolicy, DeleteAlertPolicy and
// UpdateAlertPolicy.
//
//   - name: The alerting policy to delete. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/alertPolicies/[ALERT_POLICY_ID] For more
//     information, see AlertPolicy.
func (r *ProjectsAlertPoliciesService) Delete(name string) *ProjectsAlertPoliciesDeleteCall {
	c := &ProjectsAlertPoliciesDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsAlertPoliciesDeleteCall) Fields(s ...googleapi.Field) *ProjectsAlertPoliciesDeleteCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsAlertPoliciesDeleteCall) Context(ctx context.Context) *ProjectsAlertPoliciesDeleteCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsAlertPoliciesDeleteCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsAlertPoliciesDeleteCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("DELETE", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.alertPolicies.delete", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.alertPolicies.delete" call.
// Any non-2xx status code is an error. Response headers are in either
// *Empty.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsAlertPoliciesDeleteCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &Empty{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.alertPolicies.delete", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsAlertPoliciesGetCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Gets a single alerting policy.
//
//   - name: The alerting policy to retrieve. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/alertPolicies/[ALERT_POLICY_ID].
func (r *ProjectsAlertPoliciesService) Get(name string) *ProjectsAlertPoliciesGetCall {
	c := &ProjectsAlertPoliciesGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsAlertPoliciesGetCall) Fields(s ...googleapi.Field) *ProjectsAlertPoliciesGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsAlertPoliciesGetCall) IfNoneMatch(entityTag string) *ProjectsAlertPoliciesGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsAlertPoliciesGetCall) Context(ctx context.Context) *ProjectsAlertPoliciesGetCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsAlertPoliciesGetCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsAlertPoliciesGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.alertPolicies.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.alertPolicies.get" call.
// Any non-2xx status code is an error. Response headers are in either
// *AlertPolicy.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsAlertPoliciesGetCall) Do(opts ...googleapi.CallOption) (*AlertPolicy, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &AlertPolicy{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.alertPolicies.get", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsAlertPoliciesListCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Lists the existing alerting policies for the workspace.
//
//   - name: The project
//     (https://cloud.google.com/monitoring/api/v3#project_name) whose alert
//     policies are to be listed. The format is: projects/[PROJECT_ID_OR_NUMBER]
//     Note that this field names the parent container in which the alerting
//     policies to be listed are stored. To retrieve a single alerting policy by
//     name, use the GetAlertPolicy operation, instead.
func (r *ProjectsAlertPoliciesService) List(name string) *ProjectsAlertPoliciesListCall {
	c := &ProjectsAlertPoliciesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Filter sets the optional parameter "filter": If provided, this field
// specifies the criteria that must be met by alert policies to be included in
// the response.For more details, see sorting and filtering
// (https://cloud.google.com/monitoring/api/v3/sorting-and-filtering).
func (c *ProjectsAlertPoliciesListCall) Filter(filter string) *ProjectsAlertPoliciesListCall {
	c.urlParams_.Set("filter", filter)
	return c
}

// OrderBy sets the optional parameter "orderBy": A comma-separated list of
// fields by which to sort the result. Supports the same set of field
// references as the filter field. Entries can be prefixed with a minus sign to
// sort by the field in descending order.For more details, see sorting and
// filtering
// (https://cloud.google.com/monitoring/api/v3/sorting-and-filtering).
func (c *ProjectsAlertPoliciesListCall) OrderBy(orderBy string) *ProjectsAlertPoliciesListCall {
	c.urlParams_.Set("orderBy", orderBy)
	return c
}

// PageSize sets the optional parameter "pageSize": The maximum number of
// results to return in a single response.
func (c *ProjectsAlertPoliciesListCall) PageSize(pageSize int64) *ProjectsAlertPoliciesListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": If this field is not
// empty then it must contain the nextPageToken value returned by a previous
// call to this method. Using this field causes the method to return more
// results from the previous method call.
func (c *ProjectsAlertPoliciesListCall) PageToken(pageToken string) *ProjectsAlertPoliciesListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsAlertPoliciesListCall) Fields(s ...googleapi.Field) *ProjectsAlertPoliciesListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsAlertPoliciesListCall) IfNoneMatch(entityTag string) *ProjectsAlertPoliciesListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsAlertPoliciesListCall) Context(ctx context.Context) *ProjectsAlertPoliciesListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsAlertPoliciesListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsAlertPoliciesListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/alertPolicies")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.alertPolicies.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.alertPolicies.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *ListAlertPoliciesResponse.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsAlertPoliciesListCall) Do(opts ...googleapi.CallOption) (*ListAlertPoliciesResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &ListAlertPoliciesResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.alertPolicies.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsAlertPoliciesListCall) Pages(ctx context.Context, f func(*ListAlertPoliciesResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type ProjectsAlertPoliciesPatchCall struct {
	s           *Service
	name        string
	alertpolicy *AlertPolicy
	urlParams_  gensupport.URLParams
	ctx_        context.Context
	header_     http.Header
}

// Patch: Updates an alerting policy. You can either replace the entire policy
// with a new one or replace only certain fields in the current alerting policy
// by specifying the fields to be updated via updateMask. Returns the updated
// alerting policy.Design your application to single-thread API calls that
// modify the state of alerting policies in a single project. This includes
// calls to CreateAlertPolicy, DeleteAlertPolicy and UpdateAlertPolicy.
//
//   - name: Identifier. Required if the policy exists. The resource name for
//     this policy. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/alertPolicies/[ALERT_POLICY_ID]
//     [ALERT_POLICY_ID] is assigned by Cloud Monitoring when the policy is
//     created. When calling the alertPolicies.create method, do not include the
//     name field in the alerting policy passed as part of the request.
func (r *ProjectsAlertPoliciesService) Patch(name string, alertpolicy *AlertPolicy) *ProjectsAlertPoliciesPatchCall {
	c := &ProjectsAlertPoliciesPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.alertpolicy = alertpolicy
	return c
}

// UpdateMask sets the optional parameter "updateMask": A list of alerting
// policy field names. If this field is not empty, each listed field in the
// existing alerting policy is set to the value of the corresponding field in
// the supplied policy (alert_policy), or to the field's default value if the
// field is not in the supplied alerting policy. Fields not listed retain their
// previous value.Examples of valid field masks include display_name,
// documentation, documentation.content, documentation.mime_type, user_labels,
// user_label.nameofkey, enabled, conditions, combiner, etc.If this field is
// empty, then the supplied alerting policy replaces the existing policy. It is
// the same as deleting the existing policy and adding the supplied policy,
// except for the following: The new policy will have the same
// [ALERT_POLICY_ID] as the former policy. This gives you continuity with the
// former policy in your notifications and incidents. Conditions in the new
// policy will keep their former [CONDITION_ID] if the supplied condition
// includes the name field with that [CONDITION_ID]. If the supplied condition
// omits the name field, then a new [CONDITION_ID] is created.
func (c *ProjectsAlertPoliciesPatchCall) UpdateMask(updateMask string) *ProjectsAlertPoliciesPatchCall {
	c.urlParams_.Set("updateMask", updateMask)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsAlertPoliciesPatchCall) Fields(s ...googleapi.Field) *ProjectsAlertPoliciesPatchCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsAlertPoliciesPatchCall) Context(ctx context.Context) *ProjectsAlertPoliciesPatchCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsAlertPoliciesPatchCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsAlertPoliciesPatchCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.alertpolicy)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("PATCH", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.alertPolicies.patch", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.alertPolicies.patch" call.
// Any non-2xx status code is an error. Response headers are in either
// *AlertPolicy.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsAlertPoliciesPatchCall) Do(opts ...googleapi.CallOption) (*AlertPolicy, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &AlertPolicy{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.alertPolicies.patch", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsCollectdTimeSeriesCreateCall struct {
	s                               *Service
	name                            string
	createcollectdtimeseriesrequest *CreateCollectdTimeSeriesRequest
	urlParams_                      gensupport.URLParams
	ctx_                            context.Context
	header_                         http.Header
}

// Create: Cloud Monitoring Agent only: Creates a new time series.This method
// is only for use by the Cloud Monitoring Agent. Use
// projects.timeSeries.create instead.
//
//   - name: The project
//     (https://cloud.google.com/monitoring/api/v3#project_name) in which to
//     create the time series. The format is: projects/[PROJECT_ID_OR_NUMBER].
func (r *ProjectsCollectdTimeSeriesService) Create(name string, createcollectdtimeseriesrequest *CreateCollectdTimeSeriesRequest) *ProjectsCollectdTimeSeriesCreateCall {
	c := &ProjectsCollectdTimeSeriesCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.createcollectdtimeseriesrequest = createcollectdtimeseriesrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsCollectdTimeSeriesCreateCall) Fields(s ...googleapi.Field) *ProjectsCollectdTimeSeriesCreateCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsCollectdTimeSeriesCreateCall) Context(ctx context.Context) *ProjectsCollectdTimeSeriesCreateCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsCollectdTimeSeriesCreateCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsCollectdTimeSeriesCreateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.createcollectdtimeseriesrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/collectdTimeSeries")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.collectdTimeSeries.create", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.collectdTimeSeries.create" call.
// Any non-2xx status code is an error. Response headers are in either
// *CreateCollectdTimeSeriesResponse.ServerResponse.Header or (if a response
// was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsCollectdTimeSeriesCreateCall) Do(opts ...googleapi.CallOption) (*CreateCollectdTimeSeriesResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &CreateCollectdTimeSeriesResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.collectdTimeSeries.create", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsGroupsCreateCall struct {
	s          *Service
	name       string
	group      *Group
	urlParams_ gensupport.URLParams
	ctx_       context.Context
	header_    http.Header
}

// Create: Creates a new group.
//
//   - name: The project
//     (https://cloud.google.com/monitoring/api/v3#project_name) in which to
//     create the group. The format is: projects/[PROJECT_ID_OR_NUMBER].
func (r *ProjectsGroupsService) Create(name string, group *Group) *ProjectsGroupsCreateCall {
	c := &ProjectsGroupsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.group = group
	return c
}

// ValidateOnly sets the optional parameter "validateOnly": If true, validate
// this request but do not create the group.
func (c *ProjectsGroupsCreateCall) ValidateOnly(validateOnly bool) *ProjectsGroupsCreateCall {
	c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly))
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsGroupsCreateCall) Fields(s ...googleapi.Field) *ProjectsGroupsCreateCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsGroupsCreateCall) Context(ctx context.Context) *ProjectsGroupsCreateCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsGroupsCreateCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsGroupsCreateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.group)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/groups")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.groups.create", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.groups.create" call.
// Any non-2xx status code is an error. Response headers are in either
// *Group.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsGroupsCreateCall) Do(opts ...googleapi.CallOption) (*Group, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &Group{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.groups.create", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsGroupsDeleteCall struct {
	s          *Service
	name       string
	urlParams_ gensupport.URLParams
	ctx_       context.Context
	header_    http.Header
}

// Delete: Deletes an existing group.
//
//   - name: The group to delete. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/groups/[GROUP_ID].
func (r *ProjectsGroupsService) Delete(name string) *ProjectsGroupsDeleteCall {
	c := &ProjectsGroupsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Recursive sets the optional parameter "recursive": If this field is true,
// then the request means to delete a group with all its descendants.
// Otherwise, the request means to delete a group only when it has no
// descendants. The default value is false.
func (c *ProjectsGroupsDeleteCall) Recursive(recursive bool) *ProjectsGroupsDeleteCall {
	c.urlParams_.Set("recursive", fmt.Sprint(recursive))
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsGroupsDeleteCall) Fields(s ...googleapi.Field) *ProjectsGroupsDeleteCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsGroupsDeleteCall) Context(ctx context.Context) *ProjectsGroupsDeleteCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsGroupsDeleteCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsGroupsDeleteCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("DELETE", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.groups.delete", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.groups.delete" call.
// Any non-2xx status code is an error. Response headers are in either
// *Empty.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsGroupsDeleteCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &Empty{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.groups.delete", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsGroupsGetCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Gets a single group.
//
//   - name: The group to retrieve. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/groups/[GROUP_ID].
func (r *ProjectsGroupsService) Get(name string) *ProjectsGroupsGetCall {
	c := &ProjectsGroupsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsGroupsGetCall) Fields(s ...googleapi.Field) *ProjectsGroupsGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsGroupsGetCall) IfNoneMatch(entityTag string) *ProjectsGroupsGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsGroupsGetCall) Context(ctx context.Context) *ProjectsGroupsGetCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsGroupsGetCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsGroupsGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.groups.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.groups.get" call.
// Any non-2xx status code is an error. Response headers are in either
// *Group.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsGroupsGetCall) Do(opts ...googleapi.CallOption) (*Group, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &Group{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.groups.get", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsGroupsListCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Lists the existing groups.
//
//   - name: The project
//     (https://cloud.google.com/monitoring/api/v3#project_name) whose groups are
//     to be listed. The format is: projects/[PROJECT_ID_OR_NUMBER].
func (r *ProjectsGroupsService) List(name string) *ProjectsGroupsListCall {
	c := &ProjectsGroupsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// AncestorsOfGroup sets the optional parameter "ancestorsOfGroup": A group
// name. The format is: projects/[PROJECT_ID_OR_NUMBER]/groups/[GROUP_ID]
// Returns groups that are ancestors of the specified group. The groups are
// returned in order, starting with the immediate parent and ending with the
// most distant ancestor. If the specified group has no immediate parent, the
// results are empty.
func (c *ProjectsGroupsListCall) AncestorsOfGroup(ancestorsOfGroup string) *ProjectsGroupsListCall {
	c.urlParams_.Set("ancestorsOfGroup", ancestorsOfGroup)
	return c
}

// ChildrenOfGroup sets the optional parameter "childrenOfGroup": A group name.
// The format is: projects/[PROJECT_ID_OR_NUMBER]/groups/[GROUP_ID] Returns
// groups whose parent_name field contains the group name. If no groups have
// this parent, the results are empty.
func (c *ProjectsGroupsListCall) ChildrenOfGroup(childrenOfGroup string) *ProjectsGroupsListCall {
	c.urlParams_.Set("childrenOfGroup", childrenOfGroup)
	return c
}

// DescendantsOfGroup sets the optional parameter "descendantsOfGroup": A group
// name. The format is: projects/[PROJECT_ID_OR_NUMBER]/groups/[GROUP_ID]
// Returns the descendants of the specified group. This is a superset of the
// results returned by the children_of_group filter, and includes
// children-of-children, and so forth.
func (c *ProjectsGroupsListCall) DescendantsOfGroup(descendantsOfGroup string) *ProjectsGroupsListCall {
	c.urlParams_.Set("descendantsOfGroup", descendantsOfGroup)
	return c
}

// PageSize sets the optional parameter "pageSize": A positive number that is
// the maximum number of results to return.
func (c *ProjectsGroupsListCall) PageSize(pageSize int64) *ProjectsGroupsListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": If this field is not
// empty then it must contain the next_page_token value returned by a previous
// call to this method. Using this field causes the method to return additional
// results from the previous method call.
func (c *ProjectsGroupsListCall) PageToken(pageToken string) *ProjectsGroupsListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsGroupsListCall) Fields(s ...googleapi.Field) *ProjectsGroupsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsGroupsListCall) IfNoneMatch(entityTag string) *ProjectsGroupsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsGroupsListCall) Context(ctx context.Context) *ProjectsGroupsListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsGroupsListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsGroupsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/groups")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.groups.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.groups.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *ListGroupsResponse.ServerResponse.Header or (if a response was returned at
// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ProjectsGroupsListCall) Do(opts ...googleapi.CallOption) (*ListGroupsResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &ListGroupsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.groups.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsGroupsListCall) Pages(ctx context.Context, f func(*ListGroupsResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type ProjectsGroupsUpdateCall struct {
	s          *Service
	name       string
	group      *Group
	urlParams_ gensupport.URLParams
	ctx_       context.Context
	header_    http.Header
}

// Update: Updates an existing group. You can change any group attributes
// except name.
//
//   - name: Output only. The name of this group. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/groups/[GROUP_ID] When creating a group,
//     this field is ignored and a new name is created consisting of the project
//     specified in the call to CreateGroup and a unique [GROUP_ID] that is
//     generated automatically.
func (r *ProjectsGroupsService) Update(name string, group *Group) *ProjectsGroupsUpdateCall {
	c := &ProjectsGroupsUpdateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.group = group
	return c
}

// ValidateOnly sets the optional parameter "validateOnly": If true, validate
// this request but do not update the existing group.
func (c *ProjectsGroupsUpdateCall) ValidateOnly(validateOnly bool) *ProjectsGroupsUpdateCall {
	c.urlParams_.Set("validateOnly", fmt.Sprint(validateOnly))
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsGroupsUpdateCall) Fields(s ...googleapi.Field) *ProjectsGroupsUpdateCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsGroupsUpdateCall) Context(ctx context.Context) *ProjectsGroupsUpdateCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsGroupsUpdateCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsGroupsUpdateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.group)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("PUT", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.groups.update", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.groups.update" call.
// Any non-2xx status code is an error. Response headers are in either
// *Group.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsGroupsUpdateCall) Do(opts ...googleapi.CallOption) (*Group, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &Group{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.groups.update", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsGroupsMembersListCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Lists the monitored resources that are members of a group.
//
//   - name: The group whose members are listed. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/groups/[GROUP_ID].
func (r *ProjectsGroupsMembersService) List(name string) *ProjectsGroupsMembersListCall {
	c := &ProjectsGroupsMembersListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Filter sets the optional parameter "filter": An optional list filter
// (https://cloud.google.com/monitoring/api/learn_more#filtering) describing
// the members to be returned. The filter may reference the type, labels, and
// metadata of monitored resources that comprise the group. For example, to
// return only resources representing Compute Engine VM instances, use this
// filter: `resource.type = "gce_instance"
func (c *ProjectsGroupsMembersListCall) Filter(filter string) *ProjectsGroupsMembersListCall {
	c.urlParams_.Set("filter", filter)
	return c
}

// IntervalEndTime sets the optional parameter "interval.endTime": Required.
// The end of the time interval.
func (c *ProjectsGroupsMembersListCall) IntervalEndTime(intervalEndTime string) *ProjectsGroupsMembersListCall {
	c.urlParams_.Set("interval.endTime", intervalEndTime)
	return c
}

// IntervalStartTime sets the optional parameter "interval.startTime": The
// beginning of the time interval. The default value for the start time is the
// end time. The start time must not be later than the end time.
func (c *ProjectsGroupsMembersListCall) IntervalStartTime(intervalStartTime string) *ProjectsGroupsMembersListCall {
	c.urlParams_.Set("interval.startTime", intervalStartTime)
	return c
}

// PageSize sets the optional parameter "pageSize": A positive number that is
// the maximum number of results to return.
func (c *ProjectsGroupsMembersListCall) PageSize(pageSize int64) *ProjectsGroupsMembersListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": If this field is not
// empty then it must contain the next_page_token value returned by a previous
// call to this method. Using this field causes the method to return additional
// results from the previous method call.
func (c *ProjectsGroupsMembersListCall) PageToken(pageToken string) *ProjectsGroupsMembersListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsGroupsMembersListCall) Fields(s ...googleapi.Field) *ProjectsGroupsMembersListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsGroupsMembersListCall) IfNoneMatch(entityTag string) *ProjectsGroupsMembersListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsGroupsMembersListCall) Context(ctx context.Context) *ProjectsGroupsMembersListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsGroupsMembersListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsGroupsMembersListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/members")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.groups.members.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.groups.members.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *ListGroupMembersResponse.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsGroupsMembersListCall) Do(opts ...googleapi.CallOption) (*ListGroupMembersResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &ListGroupMembersResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.groups.members.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsGroupsMembersListCall) Pages(ctx context.Context, f func(*ListGroupMembersResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type ProjectsMetricDescriptorsCreateCall struct {
	s                *Service
	name             string
	metricdescriptor *MetricDescriptor
	urlParams_       gensupport.URLParams
	ctx_             context.Context
	header_          http.Header
}

// Create: Creates a new metric descriptor. The creation is executed
// asynchronously. User-created metric descriptors define custom metrics
// (https://cloud.google.com/monitoring/custom-metrics). The metric descriptor
// is updated if it already exists, except that metric labels are never
// removed.
//
//   - name: The project
//     (https://cloud.google.com/monitoring/api/v3#project_name) on which to
//     execute the request. The format is: 4 projects/PROJECT_ID_OR_NUMBER.
func (r *ProjectsMetricDescriptorsService) Create(name string, metricdescriptor *MetricDescriptor) *ProjectsMetricDescriptorsCreateCall {
	c := &ProjectsMetricDescriptorsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.metricdescriptor = metricdescriptor
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsMetricDescriptorsCreateCall) Fields(s ...googleapi.Field) *ProjectsMetricDescriptorsCreateCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsMetricDescriptorsCreateCall) Context(ctx context.Context) *ProjectsMetricDescriptorsCreateCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsMetricDescriptorsCreateCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsMetricDescriptorsCreateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.metricdescriptor)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/metricDescriptors")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.metricDescriptors.create", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.metricDescriptors.create" call.
// Any non-2xx status code is an error. Response headers are in either
// *MetricDescriptor.ServerResponse.Header or (if a response was returned at
// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ProjectsMetricDescriptorsCreateCall) Do(opts ...googleapi.CallOption) (*MetricDescriptor, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &MetricDescriptor{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.metricDescriptors.create", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsMetricDescriptorsDeleteCall struct {
	s          *Service
	name       string
	urlParams_ gensupport.URLParams
	ctx_       context.Context
	header_    http.Header
}

// Delete: Deletes a metric descriptor. Only user-created custom metrics
// (https://cloud.google.com/monitoring/custom-metrics) can be deleted.
//
//   - name: The metric descriptor on which to execute the request. The format
//     is: projects/[PROJECT_ID_OR_NUMBER]/metricDescriptors/[METRIC_ID] An
//     example of [METRIC_ID] is: "custom.googleapis.com/my_test_metric".
func (r *ProjectsMetricDescriptorsService) Delete(name string) *ProjectsMetricDescriptorsDeleteCall {
	c := &ProjectsMetricDescriptorsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsMetricDescriptorsDeleteCall) Fields(s ...googleapi.Field) *ProjectsMetricDescriptorsDeleteCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsMetricDescriptorsDeleteCall) Context(ctx context.Context) *ProjectsMetricDescriptorsDeleteCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsMetricDescriptorsDeleteCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsMetricDescriptorsDeleteCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("DELETE", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.metricDescriptors.delete", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.metricDescriptors.delete" call.
// Any non-2xx status code is an error. Response headers are in either
// *Empty.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsMetricDescriptorsDeleteCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &Empty{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.metricDescriptors.delete", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsMetricDescriptorsGetCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Gets a single metric descriptor.
//
//   - name: The metric descriptor on which to execute the request. The format
//     is: projects/[PROJECT_ID_OR_NUMBER]/metricDescriptors/[METRIC_ID] An
//     example value of [METRIC_ID] is
//     "compute.googleapis.com/instance/disk/read_bytes_count".
func (r *ProjectsMetricDescriptorsService) Get(name string) *ProjectsMetricDescriptorsGetCall {
	c := &ProjectsMetricDescriptorsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsMetricDescriptorsGetCall) Fields(s ...googleapi.Field) *ProjectsMetricDescriptorsGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsMetricDescriptorsGetCall) IfNoneMatch(entityTag string) *ProjectsMetricDescriptorsGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsMetricDescriptorsGetCall) Context(ctx context.Context) *ProjectsMetricDescriptorsGetCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsMetricDescriptorsGetCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsMetricDescriptorsGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.metricDescriptors.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.metricDescriptors.get" call.
// Any non-2xx status code is an error. Response headers are in either
// *MetricDescriptor.ServerResponse.Header or (if a response was returned at
// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ProjectsMetricDescriptorsGetCall) Do(opts ...googleapi.CallOption) (*MetricDescriptor, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &MetricDescriptor{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.metricDescriptors.get", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsMetricDescriptorsListCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Lists metric descriptors that match a filter.
//
//   - name: The project
//     (https://cloud.google.com/monitoring/api/v3#project_name) on which to
//     execute the request. The format is: projects/[PROJECT_ID_OR_NUMBER].
func (r *ProjectsMetricDescriptorsService) List(name string) *ProjectsMetricDescriptorsListCall {
	c := &ProjectsMetricDescriptorsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Filter sets the optional parameter "filter": If this field is empty, all
// custom and system-defined metric descriptors are returned. Otherwise, the
// filter (https://cloud.google.com/monitoring/api/v3/filters) specifies which
// metric descriptors are to be returned. For example, the following filter
// matches all custom metrics
// (https://cloud.google.com/monitoring/custom-metrics): metric.type =
// starts_with("custom.googleapis.com/")
func (c *ProjectsMetricDescriptorsListCall) Filter(filter string) *ProjectsMetricDescriptorsListCall {
	c.urlParams_.Set("filter", filter)
	return c
}

// PageSize sets the optional parameter "pageSize": A positive number that is
// the maximum number of results to return. The default and maximum value is
// 10,000. If a page_size <= 0 or > 10,000 is submitted, will instead return a
// maximum of 10,000 results.
func (c *ProjectsMetricDescriptorsListCall) PageSize(pageSize int64) *ProjectsMetricDescriptorsListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": If this field is not
// empty then it must contain the nextPageToken value returned by a previous
// call to this method. Using this field causes the method to return additional
// results from the previous method call.
func (c *ProjectsMetricDescriptorsListCall) PageToken(pageToken string) *ProjectsMetricDescriptorsListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsMetricDescriptorsListCall) Fields(s ...googleapi.Field) *ProjectsMetricDescriptorsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsMetricDescriptorsListCall) IfNoneMatch(entityTag string) *ProjectsMetricDescriptorsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsMetricDescriptorsListCall) Context(ctx context.Context) *ProjectsMetricDescriptorsListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsMetricDescriptorsListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsMetricDescriptorsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/metricDescriptors")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.metricDescriptors.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.metricDescriptors.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *ListMetricDescriptorsResponse.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsMetricDescriptorsListCall) Do(opts ...googleapi.CallOption) (*ListMetricDescriptorsResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &ListMetricDescriptorsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.metricDescriptors.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsMetricDescriptorsListCall) Pages(ctx context.Context, f func(*ListMetricDescriptorsResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type ProjectsMonitoredResourceDescriptorsGetCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Gets a single monitored resource descriptor.
//
//   - name: The monitored resource descriptor to get. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/monitoredResourceDescriptors/[RESOURCE_TYPE
//     ] The [RESOURCE_TYPE] is a predefined type, such as cloudsql_database.
func (r *ProjectsMonitoredResourceDescriptorsService) Get(name string) *ProjectsMonitoredResourceDescriptorsGetCall {
	c := &ProjectsMonitoredResourceDescriptorsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsMonitoredResourceDescriptorsGetCall) Fields(s ...googleapi.Field) *ProjectsMonitoredResourceDescriptorsGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsMonitoredResourceDescriptorsGetCall) IfNoneMatch(entityTag string) *ProjectsMonitoredResourceDescriptorsGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsMonitoredResourceDescriptorsGetCall) Context(ctx context.Context) *ProjectsMonitoredResourceDescriptorsGetCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsMonitoredResourceDescriptorsGetCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsMonitoredResourceDescriptorsGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.monitoredResourceDescriptors.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.monitoredResourceDescriptors.get" call.
// Any non-2xx status code is an error. Response headers are in either
// *MonitoredResourceDescriptor.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsMonitoredResourceDescriptorsGetCall) Do(opts ...googleapi.CallOption) (*MonitoredResourceDescriptor, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &MonitoredResourceDescriptor{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.monitoredResourceDescriptors.get", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsMonitoredResourceDescriptorsListCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Lists monitored resource descriptors that match a filter.
//
//   - name: The project
//     (https://cloud.google.com/monitoring/api/v3#project_name) on which to
//     execute the request. The format is: projects/[PROJECT_ID_OR_NUMBER].
func (r *ProjectsMonitoredResourceDescriptorsService) List(name string) *ProjectsMonitoredResourceDescriptorsListCall {
	c := &ProjectsMonitoredResourceDescriptorsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Filter sets the optional parameter "filter": An optional filter
// (https://cloud.google.com/monitoring/api/v3/filters) describing the
// descriptors to be returned. The filter can reference the descriptor's type
// and labels. For example, the following filter returns only Google Compute
// Engine descriptors that have an id label: resource.type =
// starts_with("gce_") AND resource.label:id
func (c *ProjectsMonitoredResourceDescriptorsListCall) Filter(filter string) *ProjectsMonitoredResourceDescriptorsListCall {
	c.urlParams_.Set("filter", filter)
	return c
}

// PageSize sets the optional parameter "pageSize": A positive number that is
// the maximum number of results to return.
func (c *ProjectsMonitoredResourceDescriptorsListCall) PageSize(pageSize int64) *ProjectsMonitoredResourceDescriptorsListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": If this field is not
// empty then it must contain the nextPageToken value returned by a previous
// call to this method. Using this field causes the method to return additional
// results from the previous method call.
func (c *ProjectsMonitoredResourceDescriptorsListCall) PageToken(pageToken string) *ProjectsMonitoredResourceDescriptorsListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsMonitoredResourceDescriptorsListCall) Fields(s ...googleapi.Field) *ProjectsMonitoredResourceDescriptorsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsMonitoredResourceDescriptorsListCall) IfNoneMatch(entityTag string) *ProjectsMonitoredResourceDescriptorsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsMonitoredResourceDescriptorsListCall) Context(ctx context.Context) *ProjectsMonitoredResourceDescriptorsListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsMonitoredResourceDescriptorsListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsMonitoredResourceDescriptorsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/monitoredResourceDescriptors")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.monitoredResourceDescriptors.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.monitoredResourceDescriptors.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *ListMonitoredResourceDescriptorsResponse.ServerResponse.Header or (if a
// response was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsMonitoredResourceDescriptorsListCall) Do(opts ...googleapi.CallOption) (*ListMonitoredResourceDescriptorsResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &ListMonitoredResourceDescriptorsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.monitoredResourceDescriptors.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsMonitoredResourceDescriptorsListCall) Pages(ctx context.Context, f func(*ListMonitoredResourceDescriptorsResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type ProjectsNotificationChannelDescriptorsGetCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Gets a single channel descriptor. The descriptor indicates which fields
// are expected / permitted for a notification channel of the given type.
//
//   - name: The channel type for which to execute the request. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/notificationChannelDescriptors/[CHANNEL_TYP
//     E].
func (r *ProjectsNotificationChannelDescriptorsService) Get(name string) *ProjectsNotificationChannelDescriptorsGetCall {
	c := &ProjectsNotificationChannelDescriptorsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsNotificationChannelDescriptorsGetCall) Fields(s ...googleapi.Field) *ProjectsNotificationChannelDescriptorsGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsNotificationChannelDescriptorsGetCall) IfNoneMatch(entityTag string) *ProjectsNotificationChannelDescriptorsGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsNotificationChannelDescriptorsGetCall) Context(ctx context.Context) *ProjectsNotificationChannelDescriptorsGetCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsNotificationChannelDescriptorsGetCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsNotificationChannelDescriptorsGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.notificationChannelDescriptors.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.notificationChannelDescriptors.get" call.
// Any non-2xx status code is an error. Response headers are in either
// *NotificationChannelDescriptor.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsNotificationChannelDescriptorsGetCall) Do(opts ...googleapi.CallOption) (*NotificationChannelDescriptor, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &NotificationChannelDescriptor{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.notificationChannelDescriptors.get", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsNotificationChannelDescriptorsListCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Lists the descriptors for supported channel types. The use of
// descriptors makes it possible for new channel types to be dynamically added.
//
//   - name: The REST resource name of the parent from which to retrieve the
//     notification channel descriptors. The expected syntax is:
//     projects/[PROJECT_ID_OR_NUMBER] Note that this names
//     (https://cloud.google.com/monitoring/api/v3#project_name) the parent
//     container in which to look for the descriptors; to retrieve a single
//     descriptor by name, use the GetNotificationChannelDescriptor operation,
//     instead.
func (r *ProjectsNotificationChannelDescriptorsService) List(name string) *ProjectsNotificationChannelDescriptorsListCall {
	c := &ProjectsNotificationChannelDescriptorsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// PageSize sets the optional parameter "pageSize": The maximum number of
// results to return in a single response. If not set to a positive number, a
// reasonable value will be chosen by the service.
func (c *ProjectsNotificationChannelDescriptorsListCall) PageSize(pageSize int64) *ProjectsNotificationChannelDescriptorsListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": If non-empty, page_token
// must contain a value returned as the next_page_token in a previous response
// to request the next set of results.
func (c *ProjectsNotificationChannelDescriptorsListCall) PageToken(pageToken string) *ProjectsNotificationChannelDescriptorsListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsNotificationChannelDescriptorsListCall) Fields(s ...googleapi.Field) *ProjectsNotificationChannelDescriptorsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsNotificationChannelDescriptorsListCall) IfNoneMatch(entityTag string) *ProjectsNotificationChannelDescriptorsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsNotificationChannelDescriptorsListCall) Context(ctx context.Context) *ProjectsNotificationChannelDescriptorsListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsNotificationChannelDescriptorsListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsNotificationChannelDescriptorsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/notificationChannelDescriptors")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.notificationChannelDescriptors.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.notificationChannelDescriptors.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *ListNotificationChannelDescriptorsResponse.ServerResponse.Header or (if a
// response was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsNotificationChannelDescriptorsListCall) Do(opts ...googleapi.CallOption) (*ListNotificationChannelDescriptorsResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &ListNotificationChannelDescriptorsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.notificationChannelDescriptors.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsNotificationChannelDescriptorsListCall) Pages(ctx context.Context, f func(*ListNotificationChannelDescriptorsResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type ProjectsNotificationChannelsCreateCall struct {
	s                   *Service
	name                string
	notificationchannel *NotificationChannel
	urlParams_          gensupport.URLParams
	ctx_                context.Context
	header_             http.Header
}

// Create: Creates a new notification channel, representing a single
// notification endpoint such as an email address, SMS number, or PagerDuty
// service.Design your application to single-thread API calls that modify the
// state of notification channels in a single project. This includes calls to
// CreateNotificationChannel, DeleteNotificationChannel and
// UpdateNotificationChannel.
//
//   - name: The project
//     (https://cloud.google.com/monitoring/api/v3#project_name) on which to
//     execute the request. The format is: projects/[PROJECT_ID_OR_NUMBER] This
//     names the container into which the channel will be written, this does not
//     name the newly created channel. The resulting channel's name will have a
//     normalized version of this field as a prefix, but will add
//     /notificationChannels/[CHANNEL_ID] to identify the channel.
func (r *ProjectsNotificationChannelsService) Create(name string, notificationchannel *NotificationChannel) *ProjectsNotificationChannelsCreateCall {
	c := &ProjectsNotificationChannelsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.notificationchannel = notificationchannel
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsNotificationChannelsCreateCall) Fields(s ...googleapi.Field) *ProjectsNotificationChannelsCreateCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsNotificationChannelsCreateCall) Context(ctx context.Context) *ProjectsNotificationChannelsCreateCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsNotificationChannelsCreateCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsNotificationChannelsCreateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.notificationchannel)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/notificationChannels")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.notificationChannels.create", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.notificationChannels.create" call.
// Any non-2xx status code is an error. Response headers are in either
// *NotificationChannel.ServerResponse.Header or (if a response was returned at
// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ProjectsNotificationChannelsCreateCall) Do(opts ...googleapi.CallOption) (*NotificationChannel, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &NotificationChannel{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.notificationChannels.create", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsNotificationChannelsDeleteCall struct {
	s          *Service
	name       string
	urlParams_ gensupport.URLParams
	ctx_       context.Context
	header_    http.Header
}

// Delete: Deletes a notification channel.Design your application to
// single-thread API calls that modify the state of notification channels in a
// single project. This includes calls to CreateNotificationChannel,
// DeleteNotificationChannel and UpdateNotificationChannel.
//
//   - name: The channel for which to execute the request. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/notificationChannels/[CHANNEL_ID].
func (r *ProjectsNotificationChannelsService) Delete(name string) *ProjectsNotificationChannelsDeleteCall {
	c := &ProjectsNotificationChannelsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Force sets the optional parameter "force": If true, the notification channel
// will be deleted regardless of its use in alert policies (the policies will
// be updated to remove the channel). If false, this operation will fail if the
// notification channel is referenced by existing alerting policies.
func (c *ProjectsNotificationChannelsDeleteCall) Force(force bool) *ProjectsNotificationChannelsDeleteCall {
	c.urlParams_.Set("force", fmt.Sprint(force))
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsNotificationChannelsDeleteCall) Fields(s ...googleapi.Field) *ProjectsNotificationChannelsDeleteCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsNotificationChannelsDeleteCall) Context(ctx context.Context) *ProjectsNotificationChannelsDeleteCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsNotificationChannelsDeleteCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsNotificationChannelsDeleteCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("DELETE", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.notificationChannels.delete", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.notificationChannels.delete" call.
// Any non-2xx status code is an error. Response headers are in either
// *Empty.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsNotificationChannelsDeleteCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &Empty{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.notificationChannels.delete", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsNotificationChannelsGetCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Gets a single notification channel. The channel includes the relevant
// configuration details with which the channel was created. However, the
// response may truncate or omit passwords, API keys, or other private key
// matter and thus the response may not be 100% identical to the information
// that was supplied in the call to the create method.
//
//   - name: The channel for which to execute the request. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/notificationChannels/[CHANNEL_ID].
func (r *ProjectsNotificationChannelsService) Get(name string) *ProjectsNotificationChannelsGetCall {
	c := &ProjectsNotificationChannelsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsNotificationChannelsGetCall) Fields(s ...googleapi.Field) *ProjectsNotificationChannelsGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsNotificationChannelsGetCall) IfNoneMatch(entityTag string) *ProjectsNotificationChannelsGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsNotificationChannelsGetCall) Context(ctx context.Context) *ProjectsNotificationChannelsGetCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsNotificationChannelsGetCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsNotificationChannelsGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.notificationChannels.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.notificationChannels.get" call.
// Any non-2xx status code is an error. Response headers are in either
// *NotificationChannel.ServerResponse.Header or (if a response was returned at
// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ProjectsNotificationChannelsGetCall) Do(opts ...googleapi.CallOption) (*NotificationChannel, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &NotificationChannel{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.notificationChannels.get", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsNotificationChannelsGetVerificationCodeCall struct {
	s                                             *Service
	name                                          string
	getnotificationchannelverificationcoderequest *GetNotificationChannelVerificationCodeRequest
	urlParams_                                    gensupport.URLParams
	ctx_                                          context.Context
	header_                                       http.Header
}

// GetVerificationCode: Requests a verification code for an already verified
// channel that can then be used in a call to VerifyNotificationChannel() on a
// different channel with an equivalent identity in the same or in a different
// project. This makes it possible to copy a channel between projects without
// requiring manual reverification of the channel. If the channel is not in the
// verified state, this method will fail (in other words, this may only be used
// if the SendNotificationChannelVerificationCode and VerifyNotificationChannel
// paths have already been used to put the given channel into the verified
// state).There is no guarantee that the verification codes returned by this
// method will be of a similar structure or form as the ones that are delivered
// to the channel via SendNotificationChannelVerificationCode; while
// VerifyNotificationChannel() will recognize both the codes delivered via
// SendNotificationChannelVerificationCode() and returned from
// GetNotificationChannelVerificationCode(), it is typically the case that the
// verification codes delivered via SendNotificationChannelVerificationCode()
// will be shorter and also have a shorter expiration (e.g. codes such as
// "G-123456") whereas GetVerificationCode() will typically return a much
// longer, websafe base 64 encoded string that has a longer expiration time.
//
//   - name: The notification channel for which a verification code is to be
//     generated and retrieved. This must name a channel that is already
//     verified; if the specified channel is not verified, the request will fail.
func (r *ProjectsNotificationChannelsService) GetVerificationCode(name string, getnotificationchannelverificationcoderequest *GetNotificationChannelVerificationCodeRequest) *ProjectsNotificationChannelsGetVerificationCodeCall {
	c := &ProjectsNotificationChannelsGetVerificationCodeCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.getnotificationchannelverificationcoderequest = getnotificationchannelverificationcoderequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsNotificationChannelsGetVerificationCodeCall) Fields(s ...googleapi.Field) *ProjectsNotificationChannelsGetVerificationCodeCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsNotificationChannelsGetVerificationCodeCall) Context(ctx context.Context) *ProjectsNotificationChannelsGetVerificationCodeCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsNotificationChannelsGetVerificationCodeCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsNotificationChannelsGetVerificationCodeCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.getnotificationchannelverificationcoderequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}:getVerificationCode")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.notificationChannels.getVerificationCode", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.notificationChannels.getVerificationCode" call.
// Any non-2xx status code is an error. Response headers are in either
// *GetNotificationChannelVerificationCodeResponse.ServerResponse.Header or (if
// a response was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsNotificationChannelsGetVerificationCodeCall) Do(opts ...googleapi.CallOption) (*GetNotificationChannelVerificationCodeResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &GetNotificationChannelVerificationCodeResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.notificationChannels.getVerificationCode", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsNotificationChannelsListCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Lists the notification channels that have been created for the
// project. To list the types of notification channels that are supported, use
// the ListNotificationChannelDescriptors method.
//
//   - name: The project
//     (https://cloud.google.com/monitoring/api/v3#project_name) on which to
//     execute the request. The format is: projects/[PROJECT_ID_OR_NUMBER] This
//     names the container in which to look for the notification channels; it
//     does not name a specific channel. To query a specific channel by REST
//     resource name, use the GetNotificationChannel operation.
func (r *ProjectsNotificationChannelsService) List(name string) *ProjectsNotificationChannelsListCall {
	c := &ProjectsNotificationChannelsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Filter sets the optional parameter "filter": If provided, this field
// specifies the criteria that must be met by notification channels to be
// included in the response.For more details, see sorting and filtering
// (https://cloud.google.com/monitoring/api/v3/sorting-and-filtering).
func (c *ProjectsNotificationChannelsListCall) Filter(filter string) *ProjectsNotificationChannelsListCall {
	c.urlParams_.Set("filter", filter)
	return c
}

// OrderBy sets the optional parameter "orderBy": A comma-separated list of
// fields by which to sort the result. Supports the same set of fields as in
// filter. Entries can be prefixed with a minus sign to sort in descending
// rather than ascending order.For more details, see sorting and filtering
// (https://cloud.google.com/monitoring/api/v3/sorting-and-filtering).
func (c *ProjectsNotificationChannelsListCall) OrderBy(orderBy string) *ProjectsNotificationChannelsListCall {
	c.urlParams_.Set("orderBy", orderBy)
	return c
}

// PageSize sets the optional parameter "pageSize": The maximum number of
// results to return in a single response. If not set to a positive number, a
// reasonable value will be chosen by the service.
func (c *ProjectsNotificationChannelsListCall) PageSize(pageSize int64) *ProjectsNotificationChannelsListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": If non-empty, page_token
// must contain a value returned as the next_page_token in a previous response
// to request the next set of results.
func (c *ProjectsNotificationChannelsListCall) PageToken(pageToken string) *ProjectsNotificationChannelsListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsNotificationChannelsListCall) Fields(s ...googleapi.Field) *ProjectsNotificationChannelsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsNotificationChannelsListCall) IfNoneMatch(entityTag string) *ProjectsNotificationChannelsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsNotificationChannelsListCall) Context(ctx context.Context) *ProjectsNotificationChannelsListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsNotificationChannelsListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsNotificationChannelsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/notificationChannels")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.notificationChannels.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.notificationChannels.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *ListNotificationChannelsResponse.ServerResponse.Header or (if a response
// was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsNotificationChannelsListCall) Do(opts ...googleapi.CallOption) (*ListNotificationChannelsResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &ListNotificationChannelsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.notificationChannels.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsNotificationChannelsListCall) Pages(ctx context.Context, f func(*ListNotificationChannelsResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type ProjectsNotificationChannelsPatchCall struct {
	s                   *Service
	name                string
	notificationchannel *NotificationChannel
	urlParams_          gensupport.URLParams
	ctx_                context.Context
	header_             http.Header
}

// Patch: Updates a notification channel. Fields not specified in the field
// mask remain unchanged.Design your application to single-thread API calls
// that modify the state of notification channels in a single project. This
// includes calls to CreateNotificationChannel, DeleteNotificationChannel and
// UpdateNotificationChannel.
//
//   - name: Identifier. The full REST resource name for this channel. The format
//     is: projects/[PROJECT_ID_OR_NUMBER]/notificationChannels/[CHANNEL_ID] The
//     [CHANNEL_ID] is automatically assigned by the server on creation.
func (r *ProjectsNotificationChannelsService) Patch(name string, notificationchannel *NotificationChannel) *ProjectsNotificationChannelsPatchCall {
	c := &ProjectsNotificationChannelsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.notificationchannel = notificationchannel
	return c
}

// UpdateMask sets the optional parameter "updateMask": The fields to update.
func (c *ProjectsNotificationChannelsPatchCall) UpdateMask(updateMask string) *ProjectsNotificationChannelsPatchCall {
	c.urlParams_.Set("updateMask", updateMask)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsNotificationChannelsPatchCall) Fields(s ...googleapi.Field) *ProjectsNotificationChannelsPatchCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsNotificationChannelsPatchCall) Context(ctx context.Context) *ProjectsNotificationChannelsPatchCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsNotificationChannelsPatchCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsNotificationChannelsPatchCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.notificationchannel)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("PATCH", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.notificationChannels.patch", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.notificationChannels.patch" call.
// Any non-2xx status code is an error. Response headers are in either
// *NotificationChannel.ServerResponse.Header or (if a response was returned at
// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ProjectsNotificationChannelsPatchCall) Do(opts ...googleapi.CallOption) (*NotificationChannel, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &NotificationChannel{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.notificationChannels.patch", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsNotificationChannelsSendVerificationCodeCall struct {
	s                                              *Service
	name                                           string
	sendnotificationchannelverificationcoderequest *SendNotificationChannelVerificationCodeRequest
	urlParams_                                     gensupport.URLParams
	ctx_                                           context.Context
	header_                                        http.Header
}

// SendVerificationCode: Causes a verification code to be delivered to the
// channel. The code can then be supplied in VerifyNotificationChannel to
// verify the channel.
//
// - name: The notification channel to which to send a verification code.
func (r *ProjectsNotificationChannelsService) SendVerificationCode(name string, sendnotificationchannelverificationcoderequest *SendNotificationChannelVerificationCodeRequest) *ProjectsNotificationChannelsSendVerificationCodeCall {
	c := &ProjectsNotificationChannelsSendVerificationCodeCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.sendnotificationchannelverificationcoderequest = sendnotificationchannelverificationcoderequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsNotificationChannelsSendVerificationCodeCall) Fields(s ...googleapi.Field) *ProjectsNotificationChannelsSendVerificationCodeCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsNotificationChannelsSendVerificationCodeCall) Context(ctx context.Context) *ProjectsNotificationChannelsSendVerificationCodeCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsNotificationChannelsSendVerificationCodeCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsNotificationChannelsSendVerificationCodeCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.sendnotificationchannelverificationcoderequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}:sendVerificationCode")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.notificationChannels.sendVerificationCode", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.notificationChannels.sendVerificationCode" call.
// Any non-2xx status code is an error. Response headers are in either
// *Empty.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsNotificationChannelsSendVerificationCodeCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &Empty{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.notificationChannels.sendVerificationCode", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsNotificationChannelsVerifyCall struct {
	s                                *Service
	name                             string
	verifynotificationchannelrequest *VerifyNotificationChannelRequest
	urlParams_                       gensupport.URLParams
	ctx_                             context.Context
	header_                          http.Header
}

// Verify: Verifies a NotificationChannel by proving receipt of the code
// delivered to the channel as a result of calling
// SendNotificationChannelVerificationCode.
//
// - name: The notification channel to verify.
func (r *ProjectsNotificationChannelsService) Verify(name string, verifynotificationchannelrequest *VerifyNotificationChannelRequest) *ProjectsNotificationChannelsVerifyCall {
	c := &ProjectsNotificationChannelsVerifyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.verifynotificationchannelrequest = verifynotificationchannelrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsNotificationChannelsVerifyCall) Fields(s ...googleapi.Field) *ProjectsNotificationChannelsVerifyCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsNotificationChannelsVerifyCall) Context(ctx context.Context) *ProjectsNotificationChannelsVerifyCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsNotificationChannelsVerifyCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsNotificationChannelsVerifyCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.verifynotificationchannelrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}:verify")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.notificationChannels.verify", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.notificationChannels.verify" call.
// Any non-2xx status code is an error. Response headers are in either
// *NotificationChannel.ServerResponse.Header or (if a response was returned at
// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ProjectsNotificationChannelsVerifyCall) Do(opts ...googleapi.CallOption) (*NotificationChannel, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &NotificationChannel{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.notificationChannels.verify", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsSnoozesCreateCall struct {
	s          *Service
	parent     string
	snooze     *Snooze
	urlParams_ gensupport.URLParams
	ctx_       context.Context
	header_    http.Header
}

// Create: Creates a Snooze that will prevent alerts, which match the provided
// criteria, from being opened. The Snooze applies for a specific time
// interval.
//
//   - parent: The project
//     (https://cloud.google.com/monitoring/api/v3#project_name) in which a
//     Snooze should be created. The format is: projects/[PROJECT_ID_OR_NUMBER].
func (r *ProjectsSnoozesService) Create(parent string, snooze *Snooze) *ProjectsSnoozesCreateCall {
	c := &ProjectsSnoozesCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.snooze = snooze
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsSnoozesCreateCall) Fields(s ...googleapi.Field) *ProjectsSnoozesCreateCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsSnoozesCreateCall) Context(ctx context.Context) *ProjectsSnoozesCreateCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsSnoozesCreateCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsSnoozesCreateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.snooze)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+parent}/snoozes")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.snoozes.create", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.snoozes.create" call.
// Any non-2xx status code is an error. Response headers are in either
// *Snooze.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsSnoozesCreateCall) Do(opts ...googleapi.CallOption) (*Snooze, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &Snooze{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.snoozes.create", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsSnoozesGetCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Retrieves a Snooze by name.
//
//   - name: The ID of the Snooze to retrieve. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/snoozes/[SNOOZE_ID].
func (r *ProjectsSnoozesService) Get(name string) *ProjectsSnoozesGetCall {
	c := &ProjectsSnoozesGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsSnoozesGetCall) Fields(s ...googleapi.Field) *ProjectsSnoozesGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsSnoozesGetCall) IfNoneMatch(entityTag string) *ProjectsSnoozesGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsSnoozesGetCall) Context(ctx context.Context) *ProjectsSnoozesGetCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsSnoozesGetCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsSnoozesGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.snoozes.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.snoozes.get" call.
// Any non-2xx status code is an error. Response headers are in either
// *Snooze.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsSnoozesGetCall) Do(opts ...googleapi.CallOption) (*Snooze, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &Snooze{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.snoozes.get", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsSnoozesListCall struct {
	s            *Service
	parent       string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Lists the Snoozes associated with a project. Can optionally pass in
// filter, which specifies predicates to match Snoozes.
//
//   - parent: The project
//     (https://cloud.google.com/monitoring/api/v3#project_name) whose Snoozes
//     should be listed. The format is: projects/[PROJECT_ID_OR_NUMBER].
func (r *ProjectsSnoozesService) List(parent string) *ProjectsSnoozesListCall {
	c := &ProjectsSnoozesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	return c
}

// Filter sets the optional parameter "filter": Optional filter to restrict
// results to the given criteria. The following fields are supported.
// interval.start_time interval.end_timeFor example: ``` interval.start_time >
// "2022-03-11T00:00:00-08:00" AND interval.end_time <
// "2022-03-12T00:00:00-08:00" ```
func (c *ProjectsSnoozesListCall) Filter(filter string) *ProjectsSnoozesListCall {
	c.urlParams_.Set("filter", filter)
	return c
}

// PageSize sets the optional parameter "pageSize": The maximum number of
// results to return for a single query. The server may further constrain the
// maximum number of results returned in a single page. The value should be in
// the range 1, 1000. If the value given is outside this range, the server will
// decide the number of results to be returned.
func (c *ProjectsSnoozesListCall) PageSize(pageSize int64) *ProjectsSnoozesListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": The next_page_token from
// a previous call to ListSnoozesRequest to get the next page of results.
func (c *ProjectsSnoozesListCall) PageToken(pageToken string) *ProjectsSnoozesListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsSnoozesListCall) Fields(s ...googleapi.Field) *ProjectsSnoozesListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsSnoozesListCall) IfNoneMatch(entityTag string) *ProjectsSnoozesListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsSnoozesListCall) Context(ctx context.Context) *ProjectsSnoozesListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsSnoozesListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsSnoozesListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+parent}/snoozes")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.snoozes.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.snoozes.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *ListSnoozesResponse.ServerResponse.Header or (if a response was returned at
// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ProjectsSnoozesListCall) Do(opts ...googleapi.CallOption) (*ListSnoozesResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &ListSnoozesResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.snoozes.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsSnoozesListCall) Pages(ctx context.Context, f func(*ListSnoozesResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type ProjectsSnoozesPatchCall struct {
	s          *Service
	name       string
	snooze     *Snooze
	urlParams_ gensupport.URLParams
	ctx_       context.Context
	header_    http.Header
}

// Patch: Updates a Snooze, identified by its name, with the parameters in the
// given Snooze object.
//
//   - name: Identifier. The name of the Snooze. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/snoozes/[SNOOZE_ID] The ID of the Snooze
//     will be generated by the system.
func (r *ProjectsSnoozesService) Patch(name string, snooze *Snooze) *ProjectsSnoozesPatchCall {
	c := &ProjectsSnoozesPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.snooze = snooze
	return c
}

// UpdateMask sets the optional parameter "updateMask": Required. The fields to
// update.For each field listed in update_mask: If the Snooze object supplied
// in the UpdateSnoozeRequest has a value for that field, the value of the
// field in the existing Snooze will be set to the value of the field in the
// supplied Snooze. If the field does not have a value in the supplied Snooze,
// the field in the existing Snooze is set to its default value.Fields not
// listed retain their existing value.The following are the field names that
// are accepted in update_mask: display_name interval.start_time
// interval.end_timeThat said, the start time and end time of the Snooze
// determines which fields can legally be updated. Before attempting an update,
// users should consult the documentation for UpdateSnoozeRequest, which talks
// about which fields can be updated.
func (c *ProjectsSnoozesPatchCall) UpdateMask(updateMask string) *ProjectsSnoozesPatchCall {
	c.urlParams_.Set("updateMask", updateMask)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsSnoozesPatchCall) Fields(s ...googleapi.Field) *ProjectsSnoozesPatchCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsSnoozesPatchCall) Context(ctx context.Context) *ProjectsSnoozesPatchCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsSnoozesPatchCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsSnoozesPatchCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.snooze)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("PATCH", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.snoozes.patch", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.snoozes.patch" call.
// Any non-2xx status code is an error. Response headers are in either
// *Snooze.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsSnoozesPatchCall) Do(opts ...googleapi.CallOption) (*Snooze, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &Snooze{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.snoozes.patch", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsTimeSeriesCreateCall struct {
	s                       *Service
	name                    string
	createtimeseriesrequest *CreateTimeSeriesRequest
	urlParams_              gensupport.URLParams
	ctx_                    context.Context
	header_                 http.Header
}

// Create: Creates or adds data to one or more time series. The response is
// empty if all time series in the request were written. If any time series
// could not be written, a corresponding failure message is included in the
// error response. This method does not support resource locations constraint
// of an organization policy
// (https://cloud.google.com/resource-manager/docs/organization-policy/defining-locations#setting_the_organization_policy).
//
//   - name: The project
//     (https://cloud.google.com/monitoring/api/v3#project_name) on which to
//     execute the request. The format is: projects/[PROJECT_ID_OR_NUMBER].
func (r *ProjectsTimeSeriesService) Create(name string, createtimeseriesrequest *CreateTimeSeriesRequest) *ProjectsTimeSeriesCreateCall {
	c := &ProjectsTimeSeriesCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.createtimeseriesrequest = createtimeseriesrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsTimeSeriesCreateCall) Fields(s ...googleapi.Field) *ProjectsTimeSeriesCreateCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsTimeSeriesCreateCall) Context(ctx context.Context) *ProjectsTimeSeriesCreateCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsTimeSeriesCreateCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsTimeSeriesCreateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.createtimeseriesrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/timeSeries")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.timeSeries.create", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.timeSeries.create" call.
// Any non-2xx status code is an error. Response headers are in either
// *Empty.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsTimeSeriesCreateCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &Empty{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.timeSeries.create", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsTimeSeriesCreateServiceCall struct {
	s                       *Service
	name                    string
	createtimeseriesrequest *CreateTimeSeriesRequest
	urlParams_              gensupport.URLParams
	ctx_                    context.Context
	header_                 http.Header
}

// CreateService: Creates or adds data to one or more service time series. A
// service time series is a time series for a metric from a Google Cloud
// service. The response is empty if all time series in the request were
// written. If any time series could not be written, a corresponding failure
// message is included in the error response. This endpoint rejects writes to
// user-defined metrics. This method is only for use by Google Cloud services.
// Use projects.timeSeries.create instead.
//
//   - name: The project
//     (https://cloud.google.com/monitoring/api/v3#project_name) on which to
//     execute the request. The format is: projects/[PROJECT_ID_OR_NUMBER].
func (r *ProjectsTimeSeriesService) CreateService(name string, createtimeseriesrequest *CreateTimeSeriesRequest) *ProjectsTimeSeriesCreateServiceCall {
	c := &ProjectsTimeSeriesCreateServiceCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.createtimeseriesrequest = createtimeseriesrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsTimeSeriesCreateServiceCall) Fields(s ...googleapi.Field) *ProjectsTimeSeriesCreateServiceCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsTimeSeriesCreateServiceCall) Context(ctx context.Context) *ProjectsTimeSeriesCreateServiceCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsTimeSeriesCreateServiceCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsTimeSeriesCreateServiceCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.createtimeseriesrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/timeSeries:createService")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.timeSeries.createService", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.timeSeries.createService" call.
// Any non-2xx status code is an error. Response headers are in either
// *Empty.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsTimeSeriesCreateServiceCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &Empty{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.timeSeries.createService", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsTimeSeriesListCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Lists time series that match a filter.
//
//   - name: The project
//     (https://cloud.google.com/monitoring/api/v3#project_name), organization or
//     folder on which to execute the request. The format is:
//     projects/[PROJECT_ID_OR_NUMBER] organizations/[ORGANIZATION_ID]
//     folders/[FOLDER_ID].
func (r *ProjectsTimeSeriesService) List(name string) *ProjectsTimeSeriesListCall {
	c := &ProjectsTimeSeriesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// AggregationAlignmentPeriod sets the optional parameter
// "aggregation.alignmentPeriod": The alignment_period specifies a time
// interval, in seconds, that is used to divide the data in all the time series
// into consistent blocks of time. This will be done before the per-series
// aligner can be applied to the data.The value must be at least 60 seconds. If
// a per-series aligner other than ALIGN_NONE is specified, this field is
// required or an error is returned. If no per-series aligner is specified, or
// the aligner ALIGN_NONE is specified, then this field is ignored.The maximum
// value of the alignment_period is 104 weeks (2 years) for charts, and 90,000
// seconds (25 hours) for alerting policies.
func (c *ProjectsTimeSeriesListCall) AggregationAlignmentPeriod(aggregationAlignmentPeriod string) *ProjectsTimeSeriesListCall {
	c.urlParams_.Set("aggregation.alignmentPeriod", aggregationAlignmentPeriod)
	return c
}

// AggregationCrossSeriesReducer sets the optional parameter
// "aggregation.crossSeriesReducer": The reduction operation to be used to
// combine time series into a single time series, where the value of each data
// point in the resulting series is a function of all the already aligned
// values in the input time series.Not all reducer operations can be applied to
// all time series. The valid choices depend on the metric_kind and the
// value_type of the original time series. Reduction can yield a time series
// with a different metric_kind or value_type than the input time series.Time
// series data must first be aligned (see per_series_aligner) in order to
// perform cross-time series reduction. If cross_series_reducer is specified,
// then per_series_aligner must be specified, and must not be ALIGN_NONE. An
// alignment_period must also be specified; otherwise, an error is returned.
//
// Possible values:
//
//	"REDUCE_NONE" - No cross-time series reduction. The output of the Aligner
//
// is returned.
//
//	"REDUCE_MEAN" - Reduce by computing the mean value across time series for
//
// each alignment period. This reducer is valid for DELTA and GAUGE metrics
// with numeric or distribution values. The value_type of the output is DOUBLE.
//
//	"REDUCE_MIN" - Reduce by computing the minimum value across time series
//
// for each alignment period. This reducer is valid for DELTA and GAUGE metrics
// with numeric values. The value_type of the output is the same as the
// value_type of the input.
//
//	"REDUCE_MAX" - Reduce by computing the maximum value across time series
//
// for each alignment period. This reducer is valid for DELTA and GAUGE metrics
// with numeric values. The value_type of the output is the same as the
// value_type of the input.
//
//	"REDUCE_SUM" - Reduce by computing the sum across time series for each
//
// alignment period. This reducer is valid for DELTA and GAUGE metrics with
// numeric and distribution values. The value_type of the output is the same as
// the value_type of the input.
//
//	"REDUCE_STDDEV" - Reduce by computing the standard deviation across time
//
// series for each alignment period. This reducer is valid for DELTA and GAUGE
// metrics with numeric or distribution values. The value_type of the output is
// DOUBLE.
//
//	"REDUCE_COUNT" - Reduce by computing the number of data points across time
//
// series for each alignment period. This reducer is valid for DELTA and GAUGE
// metrics of numeric, Boolean, distribution, and string value_type. The
// value_type of the output is INT64.
//
//	"REDUCE_COUNT_TRUE" - Reduce by computing the number of True-valued data
//
// points across time series for each alignment period. This reducer is valid
// for DELTA and GAUGE metrics of Boolean value_type. The value_type of the
// output is INT64.
//
//	"REDUCE_COUNT_FALSE" - Reduce by computing the number of False-valued data
//
// points across time series for each alignment period. This reducer is valid
// for DELTA and GAUGE metrics of Boolean value_type. The value_type of the
// output is INT64.
//
//	"REDUCE_FRACTION_TRUE" - Reduce by computing the ratio of the number of
//
// True-valued data points to the total number of data points for each
// alignment period. This reducer is valid for DELTA and GAUGE metrics of
// Boolean value_type. The output value is in the range 0.0, 1.0 and has
// value_type DOUBLE.
//
//	"REDUCE_PERCENTILE_99" - Reduce by computing the 99th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
//
//	"REDUCE_PERCENTILE_95" - Reduce by computing the 95th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
//
//	"REDUCE_PERCENTILE_50" - Reduce by computing the 50th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
//
//	"REDUCE_PERCENTILE_05" - Reduce by computing the 5th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
func (c *ProjectsTimeSeriesListCall) AggregationCrossSeriesReducer(aggregationCrossSeriesReducer string) *ProjectsTimeSeriesListCall {
	c.urlParams_.Set("aggregation.crossSeriesReducer", aggregationCrossSeriesReducer)
	return c
}

// AggregationGroupByFields sets the optional parameter
// "aggregation.groupByFields": The set of fields to preserve when
// cross_series_reducer is specified. The group_by_fields determine how the
// time series are partitioned into subsets prior to applying the aggregation
// operation. Each subset contains time series that have the same value for
// each of the grouping fields. Each individual time series is a member of
// exactly one subset. The cross_series_reducer is applied to each subset of
// time series. It is not possible to reduce across different resource types,
// so this field implicitly contains resource.type. Fields not specified in
// group_by_fields are aggregated away. If group_by_fields is not specified and
// all the time series have the same resource type, then the time series are
// aggregated into a single output time series. If cross_series_reducer is not
// defined, this field is ignored.
func (c *ProjectsTimeSeriesListCall) AggregationGroupByFields(aggregationGroupByFields ...string) *ProjectsTimeSeriesListCall {
	c.urlParams_.SetMulti("aggregation.groupByFields", append([]string{}, aggregationGroupByFields...))
	return c
}

// AggregationPerSeriesAligner sets the optional parameter
// "aggregation.perSeriesAligner": An Aligner describes how to bring the data
// points in a single time series into temporal alignment. Except for
// ALIGN_NONE, all alignments cause all the data points in an alignment_period
// to be mathematically grouped together, resulting in a single data point for
// each alignment_period with end timestamp at the end of the period.Not all
// alignment operations may be applied to all time series. The valid choices
// depend on the metric_kind and value_type of the original time series.
// Alignment can change the metric_kind or the value_type of the time
// series.Time series data must be aligned in order to perform cross-time
// series reduction. If cross_series_reducer is specified, then
// per_series_aligner must be specified and not equal to ALIGN_NONE and
// alignment_period must be specified; otherwise, an error is returned.
//
// Possible values:
//
//	"ALIGN_NONE" - No alignment. Raw data is returned. Not valid if
//
// cross-series reduction is requested. The value_type of the result is the
// same as the value_type of the input.
//
//	"ALIGN_DELTA" - Align and convert to DELTA. The output is delta = y1 -
//
// y0.This alignment is valid for CUMULATIVE and DELTA metrics. If the selected
// alignment period results in periods with no data, then the aligned value for
// such a period is created by interpolation. The value_type of the aligned
// result is the same as the value_type of the input.
//
//	"ALIGN_RATE" - Align and convert to a rate. The result is computed as rate
//
// = (y1 - y0)/(t1 - t0), or "delta over time". Think of this aligner as
// providing the slope of the line that passes through the value at the start
// and at the end of the alignment_period.This aligner is valid for CUMULATIVE
// and DELTA metrics with numeric values. If the selected alignment period
// results in periods with no data, then the aligned value for such a period is
// created by interpolation. The output is a GAUGE metric with value_type
// DOUBLE.If, by "rate", you mean "percentage change", see the
// ALIGN_PERCENT_CHANGE aligner instead.
//
//	"ALIGN_INTERPOLATE" - Align by interpolating between adjacent points
//
// around the alignment period boundary. This aligner is valid for GAUGE
// metrics with numeric values. The value_type of the aligned result is the
// same as the value_type of the input.
//
//	"ALIGN_NEXT_OLDER" - Align by moving the most recent data point before the
//
// end of the alignment period to the boundary at the end of the alignment
// period. This aligner is valid for GAUGE metrics. The value_type of the
// aligned result is the same as the value_type of the input.
//
//	"ALIGN_MIN" - Align the time series by returning the minimum value in each
//
// alignment period. This aligner is valid for GAUGE and DELTA metrics with
// numeric values. The value_type of the aligned result is the same as the
// value_type of the input.
//
//	"ALIGN_MAX" - Align the time series by returning the maximum value in each
//
// alignment period. This aligner is valid for GAUGE and DELTA metrics with
// numeric values. The value_type of the aligned result is the same as the
// value_type of the input.
//
//	"ALIGN_MEAN" - Align the time series by returning the mean value in each
//
// alignment period. This aligner is valid for GAUGE and DELTA metrics with
// numeric values. The value_type of the aligned result is DOUBLE.
//
//	"ALIGN_COUNT" - Align the time series by returning the number of values in
//
// each alignment period. This aligner is valid for GAUGE and DELTA metrics
// with numeric or Boolean values. The value_type of the aligned result is
// INT64.
//
//	"ALIGN_SUM" - Align the time series by returning the sum of the values in
//
// each alignment period. This aligner is valid for GAUGE and DELTA metrics
// with numeric and distribution values. The value_type of the aligned result
// is the same as the value_type of the input.
//
//	"ALIGN_STDDEV" - Align the time series by returning the standard deviation
//
// of the values in each alignment period. This aligner is valid for GAUGE and
// DELTA metrics with numeric values. The value_type of the output is DOUBLE.
//
//	"ALIGN_COUNT_TRUE" - Align the time series by returning the number of True
//
// values in each alignment period. This aligner is valid for GAUGE metrics
// with Boolean values. The value_type of the output is INT64.
//
//	"ALIGN_COUNT_FALSE" - Align the time series by returning the number of
//
// False values in each alignment period. This aligner is valid for GAUGE
// metrics with Boolean values. The value_type of the output is INT64.
//
//	"ALIGN_FRACTION_TRUE" - Align the time series by returning the ratio of
//
// the number of True values to the total number of values in each alignment
// period. This aligner is valid for GAUGE metrics with Boolean values. The
// output value is in the range 0.0, 1.0 and has value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_99" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 99th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_95" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 95th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_50" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 50th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_05" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 5th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENT_CHANGE" - Align and convert to a percentage change. This
//
// aligner is valid for GAUGE and DELTA metrics with numeric values. This
// alignment returns ((current - previous)/previous) * 100, where the value of
// previous is determined based on the alignment_period.If the values of
// current and previous are both 0, then the returned value is 0. If only
// previous is 0, the returned value is infinity.A 10-minute moving mean is
// computed at each point of the alignment period prior to the above
// calculation to smooth the metric and prevent false positives from very
// short-lived spikes. The moving mean is only applicable for data whose values
// are >= 0. Any values < 0 are treated as a missing datapoint, and are
// ignored. While DELTA metrics are accepted by this alignment, special care
// should be taken that the values for the metric will always be positive. The
// output is a GAUGE metric with value_type DOUBLE.
func (c *ProjectsTimeSeriesListCall) AggregationPerSeriesAligner(aggregationPerSeriesAligner string) *ProjectsTimeSeriesListCall {
	c.urlParams_.Set("aggregation.perSeriesAligner", aggregationPerSeriesAligner)
	return c
}

// Filter sets the optional parameter "filter": Required. A monitoring filter
// (https://cloud.google.com/monitoring/api/v3/filters) that specifies which
// time series should be returned. The filter must specify a single metric
// type, and can additionally specify metric labels and other information. For
// example: metric.type = "compute.googleapis.com/instance/cpu/usage_time" AND
// metric.labels.instance_name = "my-instance-name"
func (c *ProjectsTimeSeriesListCall) Filter(filter string) *ProjectsTimeSeriesListCall {
	c.urlParams_.Set("filter", filter)
	return c
}

// IntervalEndTime sets the optional parameter "interval.endTime": Required.
// The end of the time interval.
func (c *ProjectsTimeSeriesListCall) IntervalEndTime(intervalEndTime string) *ProjectsTimeSeriesListCall {
	c.urlParams_.Set("interval.endTime", intervalEndTime)
	return c
}

// IntervalStartTime sets the optional parameter "interval.startTime": The
// beginning of the time interval. The default value for the start time is the
// end time. The start time must not be later than the end time.
func (c *ProjectsTimeSeriesListCall) IntervalStartTime(intervalStartTime string) *ProjectsTimeSeriesListCall {
	c.urlParams_.Set("interval.startTime", intervalStartTime)
	return c
}

// OrderBy sets the optional parameter "orderBy": Unsupported: must be left
// blank. The points in each time series are currently returned in reverse time
// order (most recent to oldest).
func (c *ProjectsTimeSeriesListCall) OrderBy(orderBy string) *ProjectsTimeSeriesListCall {
	c.urlParams_.Set("orderBy", orderBy)
	return c
}

// PageSize sets the optional parameter "pageSize": A positive number that is
// the maximum number of results to return. If page_size is empty or more than
// 100,000 results, the effective page_size is 100,000 results. If view is set
// to FULL, this is the maximum number of Points returned. If view is set to
// HEADERS, this is the maximum number of TimeSeries returned.
func (c *ProjectsTimeSeriesListCall) PageSize(pageSize int64) *ProjectsTimeSeriesListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": If this field is not
// empty then it must contain the nextPageToken value returned by a previous
// call to this method. Using this field causes the method to return additional
// results from the previous method call.
func (c *ProjectsTimeSeriesListCall) PageToken(pageToken string) *ProjectsTimeSeriesListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// SecondaryAggregationAlignmentPeriod sets the optional parameter
// "secondaryAggregation.alignmentPeriod": The alignment_period specifies a
// time interval, in seconds, that is used to divide the data in all the time
// series into consistent blocks of time. This will be done before the
// per-series aligner can be applied to the data.The value must be at least 60
// seconds. If a per-series aligner other than ALIGN_NONE is specified, this
// field is required or an error is returned. If no per-series aligner is
// specified, or the aligner ALIGN_NONE is specified, then this field is
// ignored.The maximum value of the alignment_period is 104 weeks (2 years) for
// charts, and 90,000 seconds (25 hours) for alerting policies.
func (c *ProjectsTimeSeriesListCall) SecondaryAggregationAlignmentPeriod(secondaryAggregationAlignmentPeriod string) *ProjectsTimeSeriesListCall {
	c.urlParams_.Set("secondaryAggregation.alignmentPeriod", secondaryAggregationAlignmentPeriod)
	return c
}

// SecondaryAggregationCrossSeriesReducer sets the optional parameter
// "secondaryAggregation.crossSeriesReducer": The reduction operation to be
// used to combine time series into a single time series, where the value of
// each data point in the resulting series is a function of all the already
// aligned values in the input time series.Not all reducer operations can be
// applied to all time series. The valid choices depend on the metric_kind and
// the value_type of the original time series. Reduction can yield a time
// series with a different metric_kind or value_type than the input time
// series.Time series data must first be aligned (see per_series_aligner) in
// order to perform cross-time series reduction. If cross_series_reducer is
// specified, then per_series_aligner must be specified, and must not be
// ALIGN_NONE. An alignment_period must also be specified; otherwise, an error
// is returned.
//
// Possible values:
//
//	"REDUCE_NONE" - No cross-time series reduction. The output of the Aligner
//
// is returned.
//
//	"REDUCE_MEAN" - Reduce by computing the mean value across time series for
//
// each alignment period. This reducer is valid for DELTA and GAUGE metrics
// with numeric or distribution values. The value_type of the output is DOUBLE.
//
//	"REDUCE_MIN" - Reduce by computing the minimum value across time series
//
// for each alignment period. This reducer is valid for DELTA and GAUGE metrics
// with numeric values. The value_type of the output is the same as the
// value_type of the input.
//
//	"REDUCE_MAX" - Reduce by computing the maximum value across time series
//
// for each alignment period. This reducer is valid for DELTA and GAUGE metrics
// with numeric values. The value_type of the output is the same as the
// value_type of the input.
//
//	"REDUCE_SUM" - Reduce by computing the sum across time series for each
//
// alignment period. This reducer is valid for DELTA and GAUGE metrics with
// numeric and distribution values. The value_type of the output is the same as
// the value_type of the input.
//
//	"REDUCE_STDDEV" - Reduce by computing the standard deviation across time
//
// series for each alignment period. This reducer is valid for DELTA and GAUGE
// metrics with numeric or distribution values. The value_type of the output is
// DOUBLE.
//
//	"REDUCE_COUNT" - Reduce by computing the number of data points across time
//
// series for each alignment period. This reducer is valid for DELTA and GAUGE
// metrics of numeric, Boolean, distribution, and string value_type. The
// value_type of the output is INT64.
//
//	"REDUCE_COUNT_TRUE" - Reduce by computing the number of True-valued data
//
// points across time series for each alignment period. This reducer is valid
// for DELTA and GAUGE metrics of Boolean value_type. The value_type of the
// output is INT64.
//
//	"REDUCE_COUNT_FALSE" - Reduce by computing the number of False-valued data
//
// points across time series for each alignment period. This reducer is valid
// for DELTA and GAUGE metrics of Boolean value_type. The value_type of the
// output is INT64.
//
//	"REDUCE_FRACTION_TRUE" - Reduce by computing the ratio of the number of
//
// True-valued data points to the total number of data points for each
// alignment period. This reducer is valid for DELTA and GAUGE metrics of
// Boolean value_type. The output value is in the range 0.0, 1.0 and has
// value_type DOUBLE.
//
//	"REDUCE_PERCENTILE_99" - Reduce by computing the 99th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
//
//	"REDUCE_PERCENTILE_95" - Reduce by computing the 95th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
//
//	"REDUCE_PERCENTILE_50" - Reduce by computing the 50th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
//
//	"REDUCE_PERCENTILE_05" - Reduce by computing the 5th percentile
//
// (https://en.wikipedia.org/wiki/Percentile) of data points across time series
// for each alignment period. This reducer is valid for GAUGE and DELTA metrics
// of numeric and distribution type. The value of the output is DOUBLE.
func (c *ProjectsTimeSeriesListCall) SecondaryAggregationCrossSeriesReducer(secondaryAggregationCrossSeriesReducer string) *ProjectsTimeSeriesListCall {
	c.urlParams_.Set("secondaryAggregation.crossSeriesReducer", secondaryAggregationCrossSeriesReducer)
	return c
}

// SecondaryAggregationGroupByFields sets the optional parameter
// "secondaryAggregation.groupByFields": The set of fields to preserve when
// cross_series_reducer is specified. The group_by_fields determine how the
// time series are partitioned into subsets prior to applying the aggregation
// operation. Each subset contains time series that have the same value for
// each of the grouping fields. Each individual time series is a member of
// exactly one subset. The cross_series_reducer is applied to each subset of
// time series. It is not possible to reduce across different resource types,
// so this field implicitly contains resource.type. Fields not specified in
// group_by_fields are aggregated away. If group_by_fields is not specified and
// all the time series have the same resource type, then the time series are
// aggregated into a single output time series. If cross_series_reducer is not
// defined, this field is ignored.
func (c *ProjectsTimeSeriesListCall) SecondaryAggregationGroupByFields(secondaryAggregationGroupByFields ...string) *ProjectsTimeSeriesListCall {
	c.urlParams_.SetMulti("secondaryAggregation.groupByFields", append([]string{}, secondaryAggregationGroupByFields...))
	return c
}

// SecondaryAggregationPerSeriesAligner sets the optional parameter
// "secondaryAggregation.perSeriesAligner": An Aligner describes how to bring
// the data points in a single time series into temporal alignment. Except for
// ALIGN_NONE, all alignments cause all the data points in an alignment_period
// to be mathematically grouped together, resulting in a single data point for
// each alignment_period with end timestamp at the end of the period.Not all
// alignment operations may be applied to all time series. The valid choices
// depend on the metric_kind and value_type of the original time series.
// Alignment can change the metric_kind or the value_type of the time
// series.Time series data must be aligned in order to perform cross-time
// series reduction. If cross_series_reducer is specified, then
// per_series_aligner must be specified and not equal to ALIGN_NONE and
// alignment_period must be specified; otherwise, an error is returned.
//
// Possible values:
//
//	"ALIGN_NONE" - No alignment. Raw data is returned. Not valid if
//
// cross-series reduction is requested. The value_type of the result is the
// same as the value_type of the input.
//
//	"ALIGN_DELTA" - Align and convert to DELTA. The output is delta = y1 -
//
// y0.This alignment is valid for CUMULATIVE and DELTA metrics. If the selected
// alignment period results in periods with no data, then the aligned value for
// such a period is created by interpolation. The value_type of the aligned
// result is the same as the value_type of the input.
//
//	"ALIGN_RATE" - Align and convert to a rate. The result is computed as rate
//
// = (y1 - y0)/(t1 - t0), or "delta over time". Think of this aligner as
// providing the slope of the line that passes through the value at the start
// and at the end of the alignment_period.This aligner is valid for CUMULATIVE
// and DELTA metrics with numeric values. If the selected alignment period
// results in periods with no data, then the aligned value for such a period is
// created by interpolation. The output is a GAUGE metric with value_type
// DOUBLE.If, by "rate", you mean "percentage change", see the
// ALIGN_PERCENT_CHANGE aligner instead.
//
//	"ALIGN_INTERPOLATE" - Align by interpolating between adjacent points
//
// around the alignment period boundary. This aligner is valid for GAUGE
// metrics with numeric values. The value_type of the aligned result is the
// same as the value_type of the input.
//
//	"ALIGN_NEXT_OLDER" - Align by moving the most recent data point before the
//
// end of the alignment period to the boundary at the end of the alignment
// period. This aligner is valid for GAUGE metrics. The value_type of the
// aligned result is the same as the value_type of the input.
//
//	"ALIGN_MIN" - Align the time series by returning the minimum value in each
//
// alignment period. This aligner is valid for GAUGE and DELTA metrics with
// numeric values. The value_type of the aligned result is the same as the
// value_type of the input.
//
//	"ALIGN_MAX" - Align the time series by returning the maximum value in each
//
// alignment period. This aligner is valid for GAUGE and DELTA metrics with
// numeric values. The value_type of the aligned result is the same as the
// value_type of the input.
//
//	"ALIGN_MEAN" - Align the time series by returning the mean value in each
//
// alignment period. This aligner is valid for GAUGE and DELTA metrics with
// numeric values. The value_type of the aligned result is DOUBLE.
//
//	"ALIGN_COUNT" - Align the time series by returning the number of values in
//
// each alignment period. This aligner is valid for GAUGE and DELTA metrics
// with numeric or Boolean values. The value_type of the aligned result is
// INT64.
//
//	"ALIGN_SUM" - Align the time series by returning the sum of the values in
//
// each alignment period. This aligner is valid for GAUGE and DELTA metrics
// with numeric and distribution values. The value_type of the aligned result
// is the same as the value_type of the input.
//
//	"ALIGN_STDDEV" - Align the time series by returning the standard deviation
//
// of the values in each alignment period. This aligner is valid for GAUGE and
// DELTA metrics with numeric values. The value_type of the output is DOUBLE.
//
//	"ALIGN_COUNT_TRUE" - Align the time series by returning the number of True
//
// values in each alignment period. This aligner is valid for GAUGE metrics
// with Boolean values. The value_type of the output is INT64.
//
//	"ALIGN_COUNT_FALSE" - Align the time series by returning the number of
//
// False values in each alignment period. This aligner is valid for GAUGE
// metrics with Boolean values. The value_type of the output is INT64.
//
//	"ALIGN_FRACTION_TRUE" - Align the time series by returning the ratio of
//
// the number of True values to the total number of values in each alignment
// period. This aligner is valid for GAUGE metrics with Boolean values. The
// output value is in the range 0.0, 1.0 and has value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_99" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 99th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_95" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 95th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_50" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 50th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENTILE_05" - Align the time series by using percentile
//
// aggregation (https://en.wikipedia.org/wiki/Percentile). The resulting data
// point in each alignment period is the 5th percentile of all data points in
// the period. This aligner is valid for GAUGE and DELTA metrics with
// distribution values. The output is a GAUGE metric with value_type DOUBLE.
//
//	"ALIGN_PERCENT_CHANGE" - Align and convert to a percentage change. This
//
// aligner is valid for GAUGE and DELTA metrics with numeric values. This
// alignment returns ((current - previous)/previous) * 100, where the value of
// previous is determined based on the alignment_period.If the values of
// current and previous are both 0, then the returned value is 0. If only
// previous is 0, the returned value is infinity.A 10-minute moving mean is
// computed at each point of the alignment period prior to the above
// calculation to smooth the metric and prevent false positives from very
// short-lived spikes. The moving mean is only applicable for data whose values
// are >= 0. Any values < 0 are treated as a missing datapoint, and are
// ignored. While DELTA metrics are accepted by this alignment, special care
// should be taken that the values for the metric will always be positive. The
// output is a GAUGE metric with value_type DOUBLE.
func (c *ProjectsTimeSeriesListCall) SecondaryAggregationPerSeriesAligner(secondaryAggregationPerSeriesAligner string) *ProjectsTimeSeriesListCall {
	c.urlParams_.Set("secondaryAggregation.perSeriesAligner", secondaryAggregationPerSeriesAligner)
	return c
}

// View sets the optional parameter "view": Required. Specifies which
// information is returned about the time series.
//
// Possible values:
//
//	"FULL" - Returns the identity of the metric(s), the time series, and the
//
// time series data.
//
//	"HEADERS" - Returns the identity of the metric and the time series
//
// resource, but not the time series data.
func (c *ProjectsTimeSeriesListCall) View(view string) *ProjectsTimeSeriesListCall {
	c.urlParams_.Set("view", view)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsTimeSeriesListCall) Fields(s ...googleapi.Field) *ProjectsTimeSeriesListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsTimeSeriesListCall) IfNoneMatch(entityTag string) *ProjectsTimeSeriesListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsTimeSeriesListCall) Context(ctx context.Context) *ProjectsTimeSeriesListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsTimeSeriesListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsTimeSeriesListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/timeSeries")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.timeSeries.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.timeSeries.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *ListTimeSeriesResponse.ServerResponse.Header or (if a response was returned
// at all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ProjectsTimeSeriesListCall) Do(opts ...googleapi.CallOption) (*ListTimeSeriesResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &ListTimeSeriesResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.timeSeries.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsTimeSeriesListCall) Pages(ctx context.Context, f func(*ListTimeSeriesResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type ProjectsTimeSeriesQueryCall struct {
	s                      *Service
	name                   string
	querytimeseriesrequest *QueryTimeSeriesRequest
	urlParams_             gensupport.URLParams
	ctx_                   context.Context
	header_                http.Header
}

// Query: Queries time series by using Monitoring Query Language (MQL). We
// recommend using PromQL instead of MQL. For more information about the status
// of MQL, see the MQL deprecation notice
// (https://cloud.google.com/stackdriver/docs/deprecations/mql).
//
//   - name: The project
//     (https://cloud.google.com/monitoring/api/v3#project_name) on which to
//     execute the request. The format is: projects/[PROJECT_ID_OR_NUMBER].
func (r *ProjectsTimeSeriesService) Query(name string, querytimeseriesrequest *QueryTimeSeriesRequest) *ProjectsTimeSeriesQueryCall {
	c := &ProjectsTimeSeriesQueryCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.querytimeseriesrequest = querytimeseriesrequest
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsTimeSeriesQueryCall) Fields(s ...googleapi.Field) *ProjectsTimeSeriesQueryCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsTimeSeriesQueryCall) Context(ctx context.Context) *ProjectsTimeSeriesQueryCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsTimeSeriesQueryCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsTimeSeriesQueryCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.querytimeseriesrequest)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}/timeSeries:query")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.timeSeries.query", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.timeSeries.query" call.
// Any non-2xx status code is an error. Response headers are in either
// *QueryTimeSeriesResponse.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsTimeSeriesQueryCall) Do(opts ...googleapi.CallOption) (*QueryTimeSeriesResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &QueryTimeSeriesResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.timeSeries.query", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsTimeSeriesQueryCall) Pages(ctx context.Context, f func(*QueryTimeSeriesResponse) error) error {
	c.ctx_ = ctx
	defer func(pt string) { c.querytimeseriesrequest.PageToken = pt }(c.querytimeseriesrequest.PageToken)
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.querytimeseriesrequest.PageToken = x.NextPageToken
	}
}

type ProjectsUptimeCheckConfigsCreateCall struct {
	s                 *Service
	parent            string
	uptimecheckconfig *UptimeCheckConfig
	urlParams_        gensupport.URLParams
	ctx_              context.Context
	header_           http.Header
}

// Create: Creates a new Uptime check configuration.
//
//   - parent: The project
//     (https://cloud.google.com/monitoring/api/v3#project_name) in which to
//     create the Uptime check. The format is: projects/[PROJECT_ID_OR_NUMBER].
func (r *ProjectsUptimeCheckConfigsService) Create(parent string, uptimecheckconfig *UptimeCheckConfig) *ProjectsUptimeCheckConfigsCreateCall {
	c := &ProjectsUptimeCheckConfigsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.uptimecheckconfig = uptimecheckconfig
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsUptimeCheckConfigsCreateCall) Fields(s ...googleapi.Field) *ProjectsUptimeCheckConfigsCreateCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsUptimeCheckConfigsCreateCall) Context(ctx context.Context) *ProjectsUptimeCheckConfigsCreateCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsUptimeCheckConfigsCreateCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsUptimeCheckConfigsCreateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.uptimecheckconfig)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+parent}/uptimeCheckConfigs")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.uptimeCheckConfigs.create", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.uptimeCheckConfigs.create" call.
// Any non-2xx status code is an error. Response headers are in either
// *UptimeCheckConfig.ServerResponse.Header or (if a response was returned at
// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ProjectsUptimeCheckConfigsCreateCall) Do(opts ...googleapi.CallOption) (*UptimeCheckConfig, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &UptimeCheckConfig{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.uptimeCheckConfigs.create", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsUptimeCheckConfigsDeleteCall struct {
	s          *Service
	name       string
	urlParams_ gensupport.URLParams
	ctx_       context.Context
	header_    http.Header
}

// Delete: Deletes an Uptime check configuration. Note that this method will
// fail if the Uptime check configuration is referenced by an alert policy or
// other dependent configs that would be rendered invalid by the deletion.
//
//   - name: The Uptime check configuration to delete. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/uptimeCheckConfigs/[UPTIME_CHECK_ID].
func (r *ProjectsUptimeCheckConfigsService) Delete(name string) *ProjectsUptimeCheckConfigsDeleteCall {
	c := &ProjectsUptimeCheckConfigsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsUptimeCheckConfigsDeleteCall) Fields(s ...googleapi.Field) *ProjectsUptimeCheckConfigsDeleteCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsUptimeCheckConfigsDeleteCall) Context(ctx context.Context) *ProjectsUptimeCheckConfigsDeleteCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsUptimeCheckConfigsDeleteCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsUptimeCheckConfigsDeleteCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("DELETE", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.uptimeCheckConfigs.delete", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.uptimeCheckConfigs.delete" call.
// Any non-2xx status code is an error. Response headers are in either
// *Empty.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ProjectsUptimeCheckConfigsDeleteCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &Empty{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.uptimeCheckConfigs.delete", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsUptimeCheckConfigsGetCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Gets a single Uptime check configuration.
//
//   - name: The Uptime check configuration to retrieve. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/uptimeCheckConfigs/[UPTIME_CHECK_ID].
func (r *ProjectsUptimeCheckConfigsService) Get(name string) *ProjectsUptimeCheckConfigsGetCall {
	c := &ProjectsUptimeCheckConfigsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsUptimeCheckConfigsGetCall) Fields(s ...googleapi.Field) *ProjectsUptimeCheckConfigsGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsUptimeCheckConfigsGetCall) IfNoneMatch(entityTag string) *ProjectsUptimeCheckConfigsGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsUptimeCheckConfigsGetCall) Context(ctx context.Context) *ProjectsUptimeCheckConfigsGetCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsUptimeCheckConfigsGetCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsUptimeCheckConfigsGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.uptimeCheckConfigs.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.uptimeCheckConfigs.get" call.
// Any non-2xx status code is an error. Response headers are in either
// *UptimeCheckConfig.ServerResponse.Header or (if a response was returned at
// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ProjectsUptimeCheckConfigsGetCall) Do(opts ...googleapi.CallOption) (*UptimeCheckConfig, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &UptimeCheckConfig{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.uptimeCheckConfigs.get", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ProjectsUptimeCheckConfigsListCall struct {
	s            *Service
	parent       string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Lists the existing valid Uptime check configurations for the project
// (leaving out any invalid configurations).
//
//   - parent: The project
//     (https://cloud.google.com/monitoring/api/v3#project_name) whose Uptime
//     check configurations are listed. The format is:
//     projects/[PROJECT_ID_OR_NUMBER].
func (r *ProjectsUptimeCheckConfigsService) List(parent string) *ProjectsUptimeCheckConfigsListCall {
	c := &ProjectsUptimeCheckConfigsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	return c
}

// Filter sets the optional parameter "filter": If provided, this field
// specifies the criteria that must be met by uptime checks to be included in
// the response.For more details, see Filtering syntax
// (https://cloud.google.com/monitoring/api/v3/sorting-and-filtering#filter_syntax).
func (c *ProjectsUptimeCheckConfigsListCall) Filter(filter string) *ProjectsUptimeCheckConfigsListCall {
	c.urlParams_.Set("filter", filter)
	return c
}

// PageSize sets the optional parameter "pageSize": The maximum number of
// results to return in a single response. The server may further constrain the
// maximum number of results returned in a single page. If the page_size is
// <=0, the server will decide the number of results to be returned.
func (c *ProjectsUptimeCheckConfigsListCall) PageSize(pageSize int64) *ProjectsUptimeCheckConfigsListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": If this field is not
// empty then it must contain the nextPageToken value returned by a previous
// call to this method. Using this field causes the method to return more
// results from the previous method call.
func (c *ProjectsUptimeCheckConfigsListCall) PageToken(pageToken string) *ProjectsUptimeCheckConfigsListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsUptimeCheckConfigsListCall) Fields(s ...googleapi.Field) *ProjectsUptimeCheckConfigsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ProjectsUptimeCheckConfigsListCall) IfNoneMatch(entityTag string) *ProjectsUptimeCheckConfigsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsUptimeCheckConfigsListCall) Context(ctx context.Context) *ProjectsUptimeCheckConfigsListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsUptimeCheckConfigsListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsUptimeCheckConfigsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+parent}/uptimeCheckConfigs")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.uptimeCheckConfigs.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.uptimeCheckConfigs.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *ListUptimeCheckConfigsResponse.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ProjectsUptimeCheckConfigsListCall) Do(opts ...googleapi.CallOption) (*ListUptimeCheckConfigsResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &ListUptimeCheckConfigsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.uptimeCheckConfigs.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ProjectsUptimeCheckConfigsListCall) Pages(ctx context.Context, f func(*ListUptimeCheckConfigsResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type ProjectsUptimeCheckConfigsPatchCall struct {
	s                 *Service
	name              string
	uptimecheckconfig *UptimeCheckConfig
	urlParams_        gensupport.URLParams
	ctx_              context.Context
	header_           http.Header
}

// Patch: Updates an Uptime check configuration. You can either replace the
// entire configuration with a new one or replace only certain fields in the
// current configuration by specifying the fields to be updated via updateMask.
// Returns the updated configuration.
//
//   - name: Identifier. A unique resource name for this Uptime check
//     configuration. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/uptimeCheckConfigs/[UPTIME_CHECK_ID]
//     [PROJECT_ID_OR_NUMBER] is the Workspace host project associated with the
//     Uptime check.This field should be omitted when creating the Uptime check
//     configuration; on create, the resource name is assigned by the server and
//     included in the response.
func (r *ProjectsUptimeCheckConfigsService) Patch(name string, uptimecheckconfig *UptimeCheckConfig) *ProjectsUptimeCheckConfigsPatchCall {
	c := &ProjectsUptimeCheckConfigsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.uptimecheckconfig = uptimecheckconfig
	return c
}

// UpdateMask sets the optional parameter "updateMask": If present, only the
// listed fields in the current Uptime check configuration are updated with
// values from the new configuration. If this field is empty, then the current
// configuration is completely replaced with the new configuration.
func (c *ProjectsUptimeCheckConfigsPatchCall) UpdateMask(updateMask string) *ProjectsUptimeCheckConfigsPatchCall {
	c.urlParams_.Set("updateMask", updateMask)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ProjectsUptimeCheckConfigsPatchCall) Fields(s ...googleapi.Field) *ProjectsUptimeCheckConfigsPatchCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ProjectsUptimeCheckConfigsPatchCall) Context(ctx context.Context) *ProjectsUptimeCheckConfigsPatchCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ProjectsUptimeCheckConfigsPatchCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ProjectsUptimeCheckConfigsPatchCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.uptimecheckconfig)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("PATCH", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.projects.uptimeCheckConfigs.patch", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.projects.uptimeCheckConfigs.patch" call.
// Any non-2xx status code is an error. Response headers are in either
// *UptimeCheckConfig.ServerResponse.Header or (if a response was returned at
// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ProjectsUptimeCheckConfigsPatchCall) Do(opts ...googleapi.CallOption) (*UptimeCheckConfig, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &UptimeCheckConfig{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.projects.uptimeCheckConfigs.patch", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ServicesCreateCall struct {
	s          *Service
	parent     string
	service    *MService
	urlParams_ gensupport.URLParams
	ctx_       context.Context
	header_    http.Header
}

// Create: Create a Service.
//
//   - parent: Resource name
//     (https://cloud.google.com/monitoring/api/v3#project_name) of the parent
//     Metrics Scope. The format is: projects/[PROJECT_ID_OR_NUMBER].
func (r *ServicesService) Create(parent string, service *MService) *ServicesCreateCall {
	c := &ServicesCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.service = service
	return c
}

// ServiceId sets the optional parameter "serviceId": The Service id to use for
// this Service. If omitted, an id will be generated instead. Must match the
// pattern [a-z0-9\-]+
func (c *ServicesCreateCall) ServiceId(serviceId string) *ServicesCreateCall {
	c.urlParams_.Set("serviceId", serviceId)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ServicesCreateCall) Fields(s ...googleapi.Field) *ServicesCreateCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ServicesCreateCall) Context(ctx context.Context) *ServicesCreateCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ServicesCreateCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ServicesCreateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.service)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+parent}/services")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.services.create", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.services.create" call.
// Any non-2xx status code is an error. Response headers are in either
// *MService.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ServicesCreateCall) Do(opts ...googleapi.CallOption) (*MService, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &MService{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.services.create", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ServicesDeleteCall struct {
	s          *Service
	name       string
	urlParams_ gensupport.URLParams
	ctx_       context.Context
	header_    http.Header
}

// Delete: Soft delete this Service.
//
//   - name: Resource name of the Service to delete. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/services/[SERVICE_ID].
func (r *ServicesService) Delete(name string) *ServicesDeleteCall {
	c := &ServicesDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ServicesDeleteCall) Fields(s ...googleapi.Field) *ServicesDeleteCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ServicesDeleteCall) Context(ctx context.Context) *ServicesDeleteCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ServicesDeleteCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ServicesDeleteCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("DELETE", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.services.delete", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.services.delete" call.
// Any non-2xx status code is an error. Response headers are in either
// *Empty.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ServicesDeleteCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &Empty{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.services.delete", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ServicesGetCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Get the named Service.
//
//   - name: Resource name of the Service. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/services/[SERVICE_ID].
func (r *ServicesService) Get(name string) *ServicesGetCall {
	c := &ServicesGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ServicesGetCall) Fields(s ...googleapi.Field) *ServicesGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ServicesGetCall) IfNoneMatch(entityTag string) *ServicesGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ServicesGetCall) Context(ctx context.Context) *ServicesGetCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ServicesGetCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ServicesGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.services.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.services.get" call.
// Any non-2xx status code is an error. Response headers are in either
// *MService.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ServicesGetCall) Do(opts ...googleapi.CallOption) (*MService, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &MService{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.services.get", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ServicesListCall struct {
	s            *Service
	parent       string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: List Services for this Metrics Scope.
//
//   - parent: Resource name of the parent containing the listed services, either
//     a project (https://cloud.google.com/monitoring/api/v3#project_name) or a
//     Monitoring Metrics Scope. The formats are: projects/[PROJECT_ID_OR_NUMBER]
//     workspaces/[HOST_PROJECT_ID_OR_NUMBER].
func (r *ServicesService) List(parent string) *ServicesListCall {
	c := &ServicesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	return c
}

// Filter sets the optional parameter "filter": A filter specifying what
// Services to return. The filter supports filtering on a particular
// service-identifier type or one of its attributes.To filter on a particular
// service-identifier type, the identifier_case refers to which option in the
// identifier field is populated. For example, the filter identifier_case =
// "CUSTOM" would match all services with a value for the custom field. Valid
// options include "CUSTOM", "APP_ENGINE", "MESH_ISTIO", and the other options
// listed at
// https://cloud.google.com/monitoring/api/ref_v3/rest/v3/services#ServiceTo
// filter on an attribute of a service-identifier type, apply the filter name
// by using the snake case of the service-identifier type and the attribute of
// that service-identifier type, and join the two with a period. For example,
// to filter by the meshUid field of the MeshIstio service-identifier type, you
// must filter on mesh_istio.mesh_uid = "123" to match all services with mesh
// UID "123". Service-identifier types and their attributes are described at
// https://cloud.google.com/monitoring/api/ref_v3/rest/v3/services#Service
func (c *ServicesListCall) Filter(filter string) *ServicesListCall {
	c.urlParams_.Set("filter", filter)
	return c
}

// PageSize sets the optional parameter "pageSize": A non-negative number that
// is the maximum number of results to return. When 0, use default page size.
func (c *ServicesListCall) PageSize(pageSize int64) *ServicesListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": If this field is not
// empty then it must contain the nextPageToken value returned by a previous
// call to this method. Using this field causes the method to return additional
// results from the previous method call.
func (c *ServicesListCall) PageToken(pageToken string) *ServicesListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ServicesListCall) Fields(s ...googleapi.Field) *ServicesListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ServicesListCall) IfNoneMatch(entityTag string) *ServicesListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ServicesListCall) Context(ctx context.Context) *ServicesListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ServicesListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ServicesListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+parent}/services")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.services.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.services.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *ListServicesResponse.ServerResponse.Header or (if a response was returned
// at all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ServicesListCall) Do(opts ...googleapi.CallOption) (*ListServicesResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &ListServicesResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.services.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ServicesListCall) Pages(ctx context.Context, f func(*ListServicesResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type ServicesPatchCall struct {
	s          *Service
	name       string
	service    *MService
	urlParams_ gensupport.URLParams
	ctx_       context.Context
	header_    http.Header
}

// Patch: Update this Service.
//
//   - name: Identifier. Resource name for this Service. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/services/[SERVICE_ID].
func (r *ServicesService) Patch(name string, service *MService) *ServicesPatchCall {
	c := &ServicesPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.service = service
	return c
}

// UpdateMask sets the optional parameter "updateMask": A set of field paths
// defining which fields to use for the update.
func (c *ServicesPatchCall) UpdateMask(updateMask string) *ServicesPatchCall {
	c.urlParams_.Set("updateMask", updateMask)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ServicesPatchCall) Fields(s ...googleapi.Field) *ServicesPatchCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ServicesPatchCall) Context(ctx context.Context) *ServicesPatchCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ServicesPatchCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ServicesPatchCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.service)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("PATCH", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.services.patch", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.services.patch" call.
// Any non-2xx status code is an error. Response headers are in either
// *MService.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ServicesPatchCall) Do(opts ...googleapi.CallOption) (*MService, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &MService{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.services.patch", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ServicesServiceLevelObjectivesCreateCall struct {
	s                     *Service
	parent                string
	servicelevelobjective *ServiceLevelObjective
	urlParams_            gensupport.URLParams
	ctx_                  context.Context
	header_               http.Header
}

// Create: Create a ServiceLevelObjective for the given Service.
//
//   - parent: Resource name of the parent Service. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/services/[SERVICE_ID].
func (r *ServicesServiceLevelObjectivesService) Create(parent string, servicelevelobjective *ServiceLevelObjective) *ServicesServiceLevelObjectivesCreateCall {
	c := &ServicesServiceLevelObjectivesCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	c.servicelevelobjective = servicelevelobjective
	return c
}

// ServiceLevelObjectiveId sets the optional parameter
// "serviceLevelObjectiveId": The ServiceLevelObjective id to use for this
// ServiceLevelObjective. If omitted, an id will be generated instead. Must
// match the pattern ^[a-zA-Z0-9-_:.]+$
func (c *ServicesServiceLevelObjectivesCreateCall) ServiceLevelObjectiveId(serviceLevelObjectiveId string) *ServicesServiceLevelObjectivesCreateCall {
	c.urlParams_.Set("serviceLevelObjectiveId", serviceLevelObjectiveId)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ServicesServiceLevelObjectivesCreateCall) Fields(s ...googleapi.Field) *ServicesServiceLevelObjectivesCreateCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ServicesServiceLevelObjectivesCreateCall) Context(ctx context.Context) *ServicesServiceLevelObjectivesCreateCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ServicesServiceLevelObjectivesCreateCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ServicesServiceLevelObjectivesCreateCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.servicelevelobjective)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+parent}/serviceLevelObjectives")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("POST", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.services.serviceLevelObjectives.create", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.services.serviceLevelObjectives.create" call.
// Any non-2xx status code is an error. Response headers are in either
// *ServiceLevelObjective.ServerResponse.Header or (if a response was returned
// at all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ServicesServiceLevelObjectivesCreateCall) Do(opts ...googleapi.CallOption) (*ServiceLevelObjective, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &ServiceLevelObjective{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.services.serviceLevelObjectives.create", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ServicesServiceLevelObjectivesDeleteCall struct {
	s          *Service
	name       string
	urlParams_ gensupport.URLParams
	ctx_       context.Context
	header_    http.Header
}

// Delete: Delete the given ServiceLevelObjective.
//
//   - name: Resource name of the ServiceLevelObjective to delete. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/services/[SERVICE_ID]/serviceLevelObjective
//     s/[SLO_NAME].
func (r *ServicesServiceLevelObjectivesService) Delete(name string) *ServicesServiceLevelObjectivesDeleteCall {
	c := &ServicesServiceLevelObjectivesDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ServicesServiceLevelObjectivesDeleteCall) Fields(s ...googleapi.Field) *ServicesServiceLevelObjectivesDeleteCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ServicesServiceLevelObjectivesDeleteCall) Context(ctx context.Context) *ServicesServiceLevelObjectivesDeleteCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ServicesServiceLevelObjectivesDeleteCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ServicesServiceLevelObjectivesDeleteCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("DELETE", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.services.serviceLevelObjectives.delete", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.services.serviceLevelObjectives.delete" call.
// Any non-2xx status code is an error. Response headers are in either
// *Empty.ServerResponse.Header or (if a response was returned at all) in
// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
// whether the returned error was because http.StatusNotModified was returned.
func (c *ServicesServiceLevelObjectivesDeleteCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &Empty{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.services.serviceLevelObjectives.delete", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ServicesServiceLevelObjectivesGetCall struct {
	s            *Service
	name         string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// Get: Get a ServiceLevelObjective by name.
//
//   - name: Resource name of the ServiceLevelObjective to get. The format is:
//     projects/[PROJECT_ID_OR_NUMBER]/services/[SERVICE_ID]/serviceLevelObjective
//     s/[SLO_NAME].
func (r *ServicesServiceLevelObjectivesService) Get(name string) *ServicesServiceLevelObjectivesGetCall {
	c := &ServicesServiceLevelObjectivesGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	return c
}

// View sets the optional parameter "view": View of the ServiceLevelObjective
// to return. If DEFAULT, return the ServiceLevelObjective as originally
// defined. If EXPLICIT and the ServiceLevelObjective is defined in terms of a
// BasicSli, replace the BasicSli with a RequestBasedSli spelling out how the
// SLI is computed.
//
// Possible values:
//
//	"VIEW_UNSPECIFIED" - Same as FULL.
//	"FULL" - Return the embedded ServiceLevelIndicator in the form in which it
//
// was defined. If it was defined using a BasicSli, return that BasicSli.
//
//	"EXPLICIT" - For ServiceLevelIndicators using BasicSli articulation,
//
// instead return the ServiceLevelIndicator with its mode of computation fully
// spelled out as a RequestBasedSli. For ServiceLevelIndicators using
// RequestBasedSli or WindowsBasedSli, return the ServiceLevelIndicator as it
// was provided.
func (c *ServicesServiceLevelObjectivesGetCall) View(view string) *ServicesServiceLevelObjectivesGetCall {
	c.urlParams_.Set("view", view)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ServicesServiceLevelObjectivesGetCall) Fields(s ...googleapi.Field) *ServicesServiceLevelObjectivesGetCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ServicesServiceLevelObjectivesGetCall) IfNoneMatch(entityTag string) *ServicesServiceLevelObjectivesGetCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ServicesServiceLevelObjectivesGetCall) Context(ctx context.Context) *ServicesServiceLevelObjectivesGetCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ServicesServiceLevelObjectivesGetCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ServicesServiceLevelObjectivesGetCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.services.serviceLevelObjectives.get", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.services.serviceLevelObjectives.get" call.
// Any non-2xx status code is an error. Response headers are in either
// *ServiceLevelObjective.ServerResponse.Header or (if a response was returned
// at all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ServicesServiceLevelObjectivesGetCall) Do(opts ...googleapi.CallOption) (*ServiceLevelObjective, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &ServiceLevelObjective{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.services.serviceLevelObjectives.get", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type ServicesServiceLevelObjectivesListCall struct {
	s            *Service
	parent       string
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: List the ServiceLevelObjectives for the given Service.
//
//   - parent: Resource name of the parent containing the listed SLOs, either a
//     project or a Monitoring Metrics Scope. The formats are:
//     projects/[PROJECT_ID_OR_NUMBER]/services/[SERVICE_ID]
//     workspaces/[HOST_PROJECT_ID_OR_NUMBER]/services/-.
func (r *ServicesServiceLevelObjectivesService) List(parent string) *ServicesServiceLevelObjectivesListCall {
	c := &ServicesServiceLevelObjectivesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.parent = parent
	return c
}

// Filter sets the optional parameter "filter": A filter specifying what
// ServiceLevelObjectives to return.
func (c *ServicesServiceLevelObjectivesListCall) Filter(filter string) *ServicesServiceLevelObjectivesListCall {
	c.urlParams_.Set("filter", filter)
	return c
}

// PageSize sets the optional parameter "pageSize": A non-negative number that
// is the maximum number of results to return. When 0, use default page size.
func (c *ServicesServiceLevelObjectivesListCall) PageSize(pageSize int64) *ServicesServiceLevelObjectivesListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": If this field is not
// empty then it must contain the nextPageToken value returned by a previous
// call to this method. Using this field causes the method to return additional
// results from the previous method call.
func (c *ServicesServiceLevelObjectivesListCall) PageToken(pageToken string) *ServicesServiceLevelObjectivesListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// View sets the optional parameter "view": View of the ServiceLevelObjectives
// to return. If DEFAULT, return each ServiceLevelObjective as originally
// defined. If EXPLICIT and the ServiceLevelObjective is defined in terms of a
// BasicSli, replace the BasicSli with a RequestBasedSli spelling out how the
// SLI is computed.
//
// Possible values:
//
//	"VIEW_UNSPECIFIED" - Same as FULL.
//	"FULL" - Return the embedded ServiceLevelIndicator in the form in which it
//
// was defined. If it was defined using a BasicSli, return that BasicSli.
//
//	"EXPLICIT" - For ServiceLevelIndicators using BasicSli articulation,
//
// instead return the ServiceLevelIndicator with its mode of computation fully
// spelled out as a RequestBasedSli. For ServiceLevelIndicators using
// RequestBasedSli or WindowsBasedSli, return the ServiceLevelIndicator as it
// was provided.
func (c *ServicesServiceLevelObjectivesListCall) View(view string) *ServicesServiceLevelObjectivesListCall {
	c.urlParams_.Set("view", view)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ServicesServiceLevelObjectivesListCall) Fields(s ...googleapi.Field) *ServicesServiceLevelObjectivesListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *ServicesServiceLevelObjectivesListCall) IfNoneMatch(entityTag string) *ServicesServiceLevelObjectivesListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ServicesServiceLevelObjectivesListCall) Context(ctx context.Context) *ServicesServiceLevelObjectivesListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ServicesServiceLevelObjectivesListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ServicesServiceLevelObjectivesListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+parent}/serviceLevelObjectives")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"parent": c.parent,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.services.serviceLevelObjectives.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.services.serviceLevelObjectives.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *ListServiceLevelObjectivesResponse.ServerResponse.Header or (if a response
// was returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *ServicesServiceLevelObjectivesListCall) Do(opts ...googleapi.CallOption) (*ListServiceLevelObjectivesResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &ListServiceLevelObjectivesResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.services.serviceLevelObjectives.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *ServicesServiceLevelObjectivesListCall) Pages(ctx context.Context, f func(*ListServiceLevelObjectivesResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}

type ServicesServiceLevelObjectivesPatchCall struct {
	s                     *Service
	name                  string
	servicelevelobjective *ServiceLevelObjective
	urlParams_            gensupport.URLParams
	ctx_                  context.Context
	header_               http.Header
}

// Patch: Update the given ServiceLevelObjective.
//
//   - name: Identifier. Resource name for this ServiceLevelObjective. The format
//     is:
//     projects/[PROJECT_ID_OR_NUMBER]/services/[SERVICE_ID]/serviceLevelObjective
//     s/[SLO_NAME].
func (r *ServicesServiceLevelObjectivesService) Patch(name string, servicelevelobjective *ServiceLevelObjective) *ServicesServiceLevelObjectivesPatchCall {
	c := &ServicesServiceLevelObjectivesPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	c.name = name
	c.servicelevelobjective = servicelevelobjective
	return c
}

// UpdateMask sets the optional parameter "updateMask": A set of field paths
// defining which fields to use for the update.
func (c *ServicesServiceLevelObjectivesPatchCall) UpdateMask(updateMask string) *ServicesServiceLevelObjectivesPatchCall {
	c.urlParams_.Set("updateMask", updateMask)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *ServicesServiceLevelObjectivesPatchCall) Fields(s ...googleapi.Field) *ServicesServiceLevelObjectivesPatchCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *ServicesServiceLevelObjectivesPatchCall) Context(ctx context.Context) *ServicesServiceLevelObjectivesPatchCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *ServicesServiceLevelObjectivesPatchCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *ServicesServiceLevelObjectivesPatchCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "application/json", c.header_)
	body, err := googleapi.WithoutDataWrapper.JSONBuffer(c.servicelevelobjective)
	if err != nil {
		return nil, err
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/{+name}")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("PATCH", urls, body)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	googleapi.Expand(req.URL, map[string]string{
		"name": c.name,
	})
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.services.serviceLevelObjectives.patch", "request", internallog.HTTPRequest(req, body.Bytes()))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.services.serviceLevelObjectives.patch" call.
// Any non-2xx status code is an error. Response headers are in either
// *ServiceLevelObjective.ServerResponse.Header or (if a response was returned
// at all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
// check whether the returned error was because http.StatusNotModified was
// returned.
func (c *ServicesServiceLevelObjectivesPatchCall) Do(opts ...googleapi.CallOption) (*ServiceLevelObjective, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &ServiceLevelObjective{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.services.serviceLevelObjectives.patch", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

type UptimeCheckIpsListCall struct {
	s            *Service
	urlParams_   gensupport.URLParams
	ifNoneMatch_ string
	ctx_         context.Context
	header_      http.Header
}

// List: Returns the list of IP addresses that checkers run from.
func (r *UptimeCheckIpsService) List() *UptimeCheckIpsListCall {
	c := &UptimeCheckIpsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
	return c
}

// PageSize sets the optional parameter "pageSize": The maximum number of
// results to return in a single response. The server may further constrain the
// maximum number of results returned in a single page. If the page_size is
// <=0, the server will decide the number of results to be returned. NOTE: this
// field is not yet implemented
func (c *UptimeCheckIpsListCall) PageSize(pageSize int64) *UptimeCheckIpsListCall {
	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
	return c
}

// PageToken sets the optional parameter "pageToken": If this field is not
// empty then it must contain the nextPageToken value returned by a previous
// call to this method. Using this field causes the method to return more
// results from the previous method call. NOTE: this field is not yet
// implemented
func (c *UptimeCheckIpsListCall) PageToken(pageToken string) *UptimeCheckIpsListCall {
	c.urlParams_.Set("pageToken", pageToken)
	return c
}

// Fields allows partial responses to be retrieved. See
// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse for more
// details.
func (c *UptimeCheckIpsListCall) Fields(s ...googleapi.Field) *UptimeCheckIpsListCall {
	c.urlParams_.Set("fields", googleapi.CombineFields(s))
	return c
}

// IfNoneMatch sets an optional parameter which makes the operation fail if the
// object's ETag matches the given value. This is useful for getting updates
// only after the object has changed since the last request.
func (c *UptimeCheckIpsListCall) IfNoneMatch(entityTag string) *UptimeCheckIpsListCall {
	c.ifNoneMatch_ = entityTag
	return c
}

// Context sets the context to be used in this call's Do method.
func (c *UptimeCheckIpsListCall) Context(ctx context.Context) *UptimeCheckIpsListCall {
	c.ctx_ = ctx
	return c
}

// Header returns a http.Header that can be modified by the caller to add
// headers to the request.
func (c *UptimeCheckIpsListCall) Header() http.Header {
	if c.header_ == nil {
		c.header_ = make(http.Header)
	}
	return c.header_
}

func (c *UptimeCheckIpsListCall) doRequest(alt string) (*http.Response, error) {
	reqHeaders := gensupport.SetHeaders(c.s.userAgent(), "", c.header_)
	if c.ifNoneMatch_ != "" {
		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
	}
	c.urlParams_.Set("alt", alt)
	c.urlParams_.Set("prettyPrint", "false")
	urls := googleapi.ResolveRelative(c.s.BasePath, "v3/uptimeCheckIps")
	urls += "?" + c.urlParams_.Encode()
	req, err := http.NewRequest("GET", urls, nil)
	if err != nil {
		return nil, err
	}
	req.Header = reqHeaders
	c.s.logger.DebugContext(c.ctx_, "api request", "serviceName", apiName, "rpcName", "monitoring.uptimeCheckIps.list", "request", internallog.HTTPRequest(req, nil))
	return gensupport.SendRequest(c.ctx_, c.s.client, req)
}

// Do executes the "monitoring.uptimeCheckIps.list" call.
// Any non-2xx status code is an error. Response headers are in either
// *ListUptimeCheckIpsResponse.ServerResponse.Header or (if a response was
// returned at all) in error.(*googleapi.Error).Header. Use
// googleapi.IsNotModified to check whether the returned error was because
// http.StatusNotModified was returned.
func (c *UptimeCheckIpsListCall) Do(opts ...googleapi.CallOption) (*ListUptimeCheckIpsResponse, error) {
	gensupport.SetOptions(c.urlParams_, opts...)
	res, err := c.doRequest("json")
	if res != nil && res.StatusCode == http.StatusNotModified {
		if res.Body != nil {
			res.Body.Close()
		}
		return nil, gensupport.WrapError(&googleapi.Error{
			Code:   res.StatusCode,
			Header: res.Header,
		})
	}
	if err != nil {
		return nil, err
	}
	defer googleapi.CloseBody(res)
	if err := googleapi.CheckResponse(res); err != nil {
		return nil, gensupport.WrapError(err)
	}
	ret := &ListUptimeCheckIpsResponse{
		ServerResponse: googleapi.ServerResponse{
			Header:         res.Header,
			HTTPStatusCode: res.StatusCode,
		},
	}
	target := &ret
	b, err := gensupport.DecodeResponseBytes(target, res)
	if err != nil {
		return nil, err
	}
	c.s.logger.DebugContext(c.ctx_, "api response", "serviceName", apiName, "rpcName", "monitoring.uptimeCheckIps.list", "response", internallog.HTTPResponse(res, b))
	return ret, nil
}

// Pages invokes f for each page of results.
// A non-nil error returned from f will halt the iteration.
// The provided context supersedes any context provided to the Context method.
func (c *UptimeCheckIpsListCall) Pages(ctx context.Context, f func(*ListUptimeCheckIpsResponse) error) error {
	c.ctx_ = ctx
	defer c.PageToken(c.urlParams_.Get("pageToken"))
	for {
		x, err := c.Do()
		if err != nil {
			return err
		}
		if err := f(x); err != nil {
			return err
		}
		if x.NextPageToken == "" {
			return nil
		}
		c.PageToken(x.NextPageToken)
	}
}
