<html><body>
<style>

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

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

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

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

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

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

pre {
  margin-top: 0.5em;
}

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

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

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

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

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

</style>

<h1><a href="monitoring_v3.html">Cloud Monitoring API</a> . <a href="monitoring_v3.projects.html">projects</a> . <a href="monitoring_v3.projects.uptimeCheckConfigs.html">uptimeCheckConfigs</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new Uptime check configuration.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">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.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a single Uptime check configuration.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists the existing valid Uptime check configurations for the project (leaving out any invalid configurations).</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">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.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(parent, body=None, x__xgafv=None)</code>
  <pre>Creates a new Uptime check configuration.

Args:
  parent: string, Required. 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]  (required)
  body: object, The request body.
    The object takes the form of:

{ # This message configures which resources and services to monitor for availability.
  &quot;checkerType&quot;: &quot;A String&quot;, # The type of checkers to use to execute the Uptime check.
  &quot;contentMatchers&quot;: [ # 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.
    { # 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&#x27;s response (and the first 1 MB of a TCP check&#x27;s response) are examined for purposes of content matching.
      &quot;content&quot;: &quot;A String&quot;, # String, regex or JSON content to match. Maximum 1024 bytes. An empty content string indicates no content matching is to be performed.
      &quot;matcher&quot;: &quot;A String&quot;, # The type of content matcher that will be applied to the server output, compared to the content string when the check is run.
    },
  ],
  &quot;displayName&quot;: &quot;A String&quot;, # A human-friendly name for the Uptime check configuration. The display name should be unique within a Stackdriver Workspace in order to make it easier to identify; however, uniqueness is not enforced. Required.
  &quot;httpCheck&quot;: { # Information involved in an HTTP/HTTPS Uptime check request. # Contains information needed to make an HTTP or HTTPS check.
    &quot;authInfo&quot;: { # 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. # The authentication information. Optional when creating an HTTP check; defaults to empty.
      &quot;password&quot;: &quot;A String&quot;, # The password to use when authenticating with the HTTP server.
      &quot;username&quot;: &quot;A String&quot;, # The username to use when authenticating with the HTTP server.
    },
    &quot;body&quot;: &quot;A String&quot;, # 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&#x27;t used (which performs the conversion automatically) base64 encode your body data since the field is of bytes type.
    &quot;contentType&quot;: &quot;A String&quot;, # 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 &quot;Content-Type&quot; header is provided via headers field. The content_type field should be used instead.
    &quot;headers&quot;: { # 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.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;maskHeaders&quot;: True or False, # 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 ******.
    &quot;path&quot;: &quot;A String&quot;, # Optional (defaults to &quot;/&quot;). 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 &quot;/&quot;, a &quot;/&quot; will be prepended automatically.
    &quot;port&quot;: 42, # 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.
    &quot;requestMethod&quot;: &quot;A String&quot;, # The HTTP request method to use for the check. If set to METHOD_UNSPECIFIED then request_method defaults to GET.
    &quot;useSsl&quot;: True or False, # If true, use HTTPS instead of HTTP to run the check.
    &quot;validateSsl&quot;: True or False, # 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.
  },
  &quot;internalCheckers&quot;: [ # 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.
    { # An internal checker allows Uptime checks to run on private/internal GCP resources.
      &quot;displayName&quot;: &quot;A String&quot;, # The checker&#x27;s human-readable name. The display name should be unique within a Stackdriver Workspace in order to make it easier to identify; however, uniqueness is not enforced.
      &quot;gcpZone&quot;: &quot;A String&quot;, # The GCP zone the Uptime check should egress from. Only respected for internal Uptime checks, where internal_network is specified.
      &quot;name&quot;: &quot;A String&quot;, # 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 Stackdriver Workspace project for the Uptime check config associated with the internal checker.
      &quot;network&quot;: &quot;A String&quot;, # The GCP VPC network (https://cloud.google.com/vpc/docs/vpc) where the internal resource lives (ex: &quot;default&quot;).
      &quot;peerProjectId&quot;: &quot;A String&quot;, # The GCP project ID where the internal checker lives. Not necessary the same as the Workspace project.
      &quot;state&quot;: &quot;A String&quot;, # The current operational state of the internal checker.
    },
  ],
  &quot;isInternal&quot;: True or False, # If this is true, then checks are made only from the &#x27;internal_checkers&#x27;. If it is false, then checks are made only from the &#x27;selected_regions&#x27;. It is an error to provide &#x27;selected_regions&#x27; when is_internal is true, or to provide &#x27;internal_checkers&#x27; when is_internal is false.
  &quot;monitoredResource&quot;: { # 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&#x27;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 &quot;gce_instance&quot; has labels &quot;project_id&quot;, &quot;instance_id&quot; and &quot;zone&quot;: { &quot;type&quot;: &quot;gce_instance&quot;, &quot;labels&quot;: { &quot;project_id&quot;: &quot;my-project&quot;, &quot;instance_id&quot;: &quot;12345678901234&quot;, &quot;zone&quot;: &quot;us-central1-a&quot; }} # 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
    &quot;labels&quot;: { # Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Compute Engine VM instances use the labels &quot;project_id&quot;, &quot;instance_id&quot;, and &quot;zone&quot;.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;type&quot;: &quot;A String&quot;, # 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).
  },
  &quot;name&quot;: &quot;A String&quot;, # 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.
  &quot;period&quot;: &quot;A String&quot;, # 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.
  &quot;resourceGroup&quot;: { # The resource submessage for group checks. It can be used instead of a monitored resource, when multiple resources are being monitored. # The group resource associated with the configuration.
    &quot;groupId&quot;: &quot;A String&quot;, # 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].
    &quot;resourceType&quot;: &quot;A String&quot;, # The resource type of the group members.
  },
  &quot;selectedRegions&quot;: [ # 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.
    &quot;A String&quot;,
  ],
  &quot;tcpCheck&quot;: { # Information required for a TCP Uptime check request. # Contains information needed to make a TCP check.
    &quot;port&quot;: 42, # 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.
  },
  &quot;timeout&quot;: &quot;A String&quot;, # The maximum amount of time to wait for the request to complete (must be between 1 and 60 seconds). Required.
}

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

Returns:
  An object of the form:

    { # This message configures which resources and services to monitor for availability.
  &quot;checkerType&quot;: &quot;A String&quot;, # The type of checkers to use to execute the Uptime check.
  &quot;contentMatchers&quot;: [ # 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.
    { # 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&#x27;s response (and the first 1 MB of a TCP check&#x27;s response) are examined for purposes of content matching.
      &quot;content&quot;: &quot;A String&quot;, # String, regex or JSON content to match. Maximum 1024 bytes. An empty content string indicates no content matching is to be performed.
      &quot;matcher&quot;: &quot;A String&quot;, # The type of content matcher that will be applied to the server output, compared to the content string when the check is run.
    },
  ],
  &quot;displayName&quot;: &quot;A String&quot;, # A human-friendly name for the Uptime check configuration. The display name should be unique within a Stackdriver Workspace in order to make it easier to identify; however, uniqueness is not enforced. Required.
  &quot;httpCheck&quot;: { # Information involved in an HTTP/HTTPS Uptime check request. # Contains information needed to make an HTTP or HTTPS check.
    &quot;authInfo&quot;: { # 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. # The authentication information. Optional when creating an HTTP check; defaults to empty.
      &quot;password&quot;: &quot;A String&quot;, # The password to use when authenticating with the HTTP server.
      &quot;username&quot;: &quot;A String&quot;, # The username to use when authenticating with the HTTP server.
    },
    &quot;body&quot;: &quot;A String&quot;, # 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&#x27;t used (which performs the conversion automatically) base64 encode your body data since the field is of bytes type.
    &quot;contentType&quot;: &quot;A String&quot;, # 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 &quot;Content-Type&quot; header is provided via headers field. The content_type field should be used instead.
    &quot;headers&quot;: { # 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.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;maskHeaders&quot;: True or False, # 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 ******.
    &quot;path&quot;: &quot;A String&quot;, # Optional (defaults to &quot;/&quot;). 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 &quot;/&quot;, a &quot;/&quot; will be prepended automatically.
    &quot;port&quot;: 42, # 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.
    &quot;requestMethod&quot;: &quot;A String&quot;, # The HTTP request method to use for the check. If set to METHOD_UNSPECIFIED then request_method defaults to GET.
    &quot;useSsl&quot;: True or False, # If true, use HTTPS instead of HTTP to run the check.
    &quot;validateSsl&quot;: True or False, # 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.
  },
  &quot;internalCheckers&quot;: [ # 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.
    { # An internal checker allows Uptime checks to run on private/internal GCP resources.
      &quot;displayName&quot;: &quot;A String&quot;, # The checker&#x27;s human-readable name. The display name should be unique within a Stackdriver Workspace in order to make it easier to identify; however, uniqueness is not enforced.
      &quot;gcpZone&quot;: &quot;A String&quot;, # The GCP zone the Uptime check should egress from. Only respected for internal Uptime checks, where internal_network is specified.
      &quot;name&quot;: &quot;A String&quot;, # 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 Stackdriver Workspace project for the Uptime check config associated with the internal checker.
      &quot;network&quot;: &quot;A String&quot;, # The GCP VPC network (https://cloud.google.com/vpc/docs/vpc) where the internal resource lives (ex: &quot;default&quot;).
      &quot;peerProjectId&quot;: &quot;A String&quot;, # The GCP project ID where the internal checker lives. Not necessary the same as the Workspace project.
      &quot;state&quot;: &quot;A String&quot;, # The current operational state of the internal checker.
    },
  ],
  &quot;isInternal&quot;: True or False, # If this is true, then checks are made only from the &#x27;internal_checkers&#x27;. If it is false, then checks are made only from the &#x27;selected_regions&#x27;. It is an error to provide &#x27;selected_regions&#x27; when is_internal is true, or to provide &#x27;internal_checkers&#x27; when is_internal is false.
  &quot;monitoredResource&quot;: { # 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&#x27;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 &quot;gce_instance&quot; has labels &quot;project_id&quot;, &quot;instance_id&quot; and &quot;zone&quot;: { &quot;type&quot;: &quot;gce_instance&quot;, &quot;labels&quot;: { &quot;project_id&quot;: &quot;my-project&quot;, &quot;instance_id&quot;: &quot;12345678901234&quot;, &quot;zone&quot;: &quot;us-central1-a&quot; }} # 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
    &quot;labels&quot;: { # Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Compute Engine VM instances use the labels &quot;project_id&quot;, &quot;instance_id&quot;, and &quot;zone&quot;.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;type&quot;: &quot;A String&quot;, # 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).
  },
  &quot;name&quot;: &quot;A String&quot;, # 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.
  &quot;period&quot;: &quot;A String&quot;, # 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.
  &quot;resourceGroup&quot;: { # The resource submessage for group checks. It can be used instead of a monitored resource, when multiple resources are being monitored. # The group resource associated with the configuration.
    &quot;groupId&quot;: &quot;A String&quot;, # 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].
    &quot;resourceType&quot;: &quot;A String&quot;, # The resource type of the group members.
  },
  &quot;selectedRegions&quot;: [ # 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.
    &quot;A String&quot;,
  ],
  &quot;tcpCheck&quot;: { # Information required for a TCP Uptime check request. # Contains information needed to make a TCP check.
    &quot;port&quot;: 42, # 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.
  },
  &quot;timeout&quot;: &quot;A String&quot;, # The maximum amount of time to wait for the request to complete (must be between 1 and 60 seconds). Required.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>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.

Args:
  name: string, Required. The Uptime check configuration to delete. The format is: projects/[PROJECT_ID_OR_NUMBER]/uptimeCheckConfigs/[UPTIME_CHECK_ID]  (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # 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); } The JSON representation for Empty is empty JSON object {}.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets a single Uptime check configuration.

Args:
  name: string, Required. The Uptime check configuration to retrieve. The format is: projects/[PROJECT_ID_OR_NUMBER]/uptimeCheckConfigs/[UPTIME_CHECK_ID]  (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This message configures which resources and services to monitor for availability.
  &quot;checkerType&quot;: &quot;A String&quot;, # The type of checkers to use to execute the Uptime check.
  &quot;contentMatchers&quot;: [ # 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.
    { # 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&#x27;s response (and the first 1 MB of a TCP check&#x27;s response) are examined for purposes of content matching.
      &quot;content&quot;: &quot;A String&quot;, # String, regex or JSON content to match. Maximum 1024 bytes. An empty content string indicates no content matching is to be performed.
      &quot;matcher&quot;: &quot;A String&quot;, # The type of content matcher that will be applied to the server output, compared to the content string when the check is run.
    },
  ],
  &quot;displayName&quot;: &quot;A String&quot;, # A human-friendly name for the Uptime check configuration. The display name should be unique within a Stackdriver Workspace in order to make it easier to identify; however, uniqueness is not enforced. Required.
  &quot;httpCheck&quot;: { # Information involved in an HTTP/HTTPS Uptime check request. # Contains information needed to make an HTTP or HTTPS check.
    &quot;authInfo&quot;: { # 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. # The authentication information. Optional when creating an HTTP check; defaults to empty.
      &quot;password&quot;: &quot;A String&quot;, # The password to use when authenticating with the HTTP server.
      &quot;username&quot;: &quot;A String&quot;, # The username to use when authenticating with the HTTP server.
    },
    &quot;body&quot;: &quot;A String&quot;, # 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&#x27;t used (which performs the conversion automatically) base64 encode your body data since the field is of bytes type.
    &quot;contentType&quot;: &quot;A String&quot;, # 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 &quot;Content-Type&quot; header is provided via headers field. The content_type field should be used instead.
    &quot;headers&quot;: { # 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.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;maskHeaders&quot;: True or False, # 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 ******.
    &quot;path&quot;: &quot;A String&quot;, # Optional (defaults to &quot;/&quot;). 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 &quot;/&quot;, a &quot;/&quot; will be prepended automatically.
    &quot;port&quot;: 42, # 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.
    &quot;requestMethod&quot;: &quot;A String&quot;, # The HTTP request method to use for the check. If set to METHOD_UNSPECIFIED then request_method defaults to GET.
    &quot;useSsl&quot;: True or False, # If true, use HTTPS instead of HTTP to run the check.
    &quot;validateSsl&quot;: True or False, # 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.
  },
  &quot;internalCheckers&quot;: [ # 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.
    { # An internal checker allows Uptime checks to run on private/internal GCP resources.
      &quot;displayName&quot;: &quot;A String&quot;, # The checker&#x27;s human-readable name. The display name should be unique within a Stackdriver Workspace in order to make it easier to identify; however, uniqueness is not enforced.
      &quot;gcpZone&quot;: &quot;A String&quot;, # The GCP zone the Uptime check should egress from. Only respected for internal Uptime checks, where internal_network is specified.
      &quot;name&quot;: &quot;A String&quot;, # 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 Stackdriver Workspace project for the Uptime check config associated with the internal checker.
      &quot;network&quot;: &quot;A String&quot;, # The GCP VPC network (https://cloud.google.com/vpc/docs/vpc) where the internal resource lives (ex: &quot;default&quot;).
      &quot;peerProjectId&quot;: &quot;A String&quot;, # The GCP project ID where the internal checker lives. Not necessary the same as the Workspace project.
      &quot;state&quot;: &quot;A String&quot;, # The current operational state of the internal checker.
    },
  ],
  &quot;isInternal&quot;: True or False, # If this is true, then checks are made only from the &#x27;internal_checkers&#x27;. If it is false, then checks are made only from the &#x27;selected_regions&#x27;. It is an error to provide &#x27;selected_regions&#x27; when is_internal is true, or to provide &#x27;internal_checkers&#x27; when is_internal is false.
  &quot;monitoredResource&quot;: { # 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&#x27;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 &quot;gce_instance&quot; has labels &quot;project_id&quot;, &quot;instance_id&quot; and &quot;zone&quot;: { &quot;type&quot;: &quot;gce_instance&quot;, &quot;labels&quot;: { &quot;project_id&quot;: &quot;my-project&quot;, &quot;instance_id&quot;: &quot;12345678901234&quot;, &quot;zone&quot;: &quot;us-central1-a&quot; }} # 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
    &quot;labels&quot;: { # Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Compute Engine VM instances use the labels &quot;project_id&quot;, &quot;instance_id&quot;, and &quot;zone&quot;.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;type&quot;: &quot;A String&quot;, # 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).
  },
  &quot;name&quot;: &quot;A String&quot;, # 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.
  &quot;period&quot;: &quot;A String&quot;, # 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.
  &quot;resourceGroup&quot;: { # The resource submessage for group checks. It can be used instead of a monitored resource, when multiple resources are being monitored. # The group resource associated with the configuration.
    &quot;groupId&quot;: &quot;A String&quot;, # 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].
    &quot;resourceType&quot;: &quot;A String&quot;, # The resource type of the group members.
  },
  &quot;selectedRegions&quot;: [ # 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.
    &quot;A String&quot;,
  ],
  &quot;tcpCheck&quot;: { # Information required for a TCP Uptime check request. # Contains information needed to make a TCP check.
    &quot;port&quot;: 42, # 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.
  },
  &quot;timeout&quot;: &quot;A String&quot;, # The maximum amount of time to wait for the request to complete (must be between 1 and 60 seconds). Required.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists the existing valid Uptime check configurations for the project (leaving out any invalid configurations).

Args:
  parent: string, Required. 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]  (required)
  pageSize: integer, 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 &lt;=0, the server will decide the number of results to be returned.
  pageToken: string, 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.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The protocol for the ListUptimeCheckConfigs response.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # 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&#x27;s page_token field).
  &quot;totalSize&quot;: 42, # The total number of Uptime check configurations for the project, irrespective of any pagination.
  &quot;uptimeCheckConfigs&quot;: [ # The returned Uptime check configurations.
    { # This message configures which resources and services to monitor for availability.
      &quot;checkerType&quot;: &quot;A String&quot;, # The type of checkers to use to execute the Uptime check.
      &quot;contentMatchers&quot;: [ # 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.
        { # 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&#x27;s response (and the first 1 MB of a TCP check&#x27;s response) are examined for purposes of content matching.
          &quot;content&quot;: &quot;A String&quot;, # String, regex or JSON content to match. Maximum 1024 bytes. An empty content string indicates no content matching is to be performed.
          &quot;matcher&quot;: &quot;A String&quot;, # The type of content matcher that will be applied to the server output, compared to the content string when the check is run.
        },
      ],
      &quot;displayName&quot;: &quot;A String&quot;, # A human-friendly name for the Uptime check configuration. The display name should be unique within a Stackdriver Workspace in order to make it easier to identify; however, uniqueness is not enforced. Required.
      &quot;httpCheck&quot;: { # Information involved in an HTTP/HTTPS Uptime check request. # Contains information needed to make an HTTP or HTTPS check.
        &quot;authInfo&quot;: { # 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. # The authentication information. Optional when creating an HTTP check; defaults to empty.
          &quot;password&quot;: &quot;A String&quot;, # The password to use when authenticating with the HTTP server.
          &quot;username&quot;: &quot;A String&quot;, # The username to use when authenticating with the HTTP server.
        },
        &quot;body&quot;: &quot;A String&quot;, # 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&#x27;t used (which performs the conversion automatically) base64 encode your body data since the field is of bytes type.
        &quot;contentType&quot;: &quot;A String&quot;, # 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 &quot;Content-Type&quot; header is provided via headers field. The content_type field should be used instead.
        &quot;headers&quot;: { # 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.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;maskHeaders&quot;: True or False, # 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 ******.
        &quot;path&quot;: &quot;A String&quot;, # Optional (defaults to &quot;/&quot;). 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 &quot;/&quot;, a &quot;/&quot; will be prepended automatically.
        &quot;port&quot;: 42, # 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.
        &quot;requestMethod&quot;: &quot;A String&quot;, # The HTTP request method to use for the check. If set to METHOD_UNSPECIFIED then request_method defaults to GET.
        &quot;useSsl&quot;: True or False, # If true, use HTTPS instead of HTTP to run the check.
        &quot;validateSsl&quot;: True or False, # 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.
      },
      &quot;internalCheckers&quot;: [ # 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.
        { # An internal checker allows Uptime checks to run on private/internal GCP resources.
          &quot;displayName&quot;: &quot;A String&quot;, # The checker&#x27;s human-readable name. The display name should be unique within a Stackdriver Workspace in order to make it easier to identify; however, uniqueness is not enforced.
          &quot;gcpZone&quot;: &quot;A String&quot;, # The GCP zone the Uptime check should egress from. Only respected for internal Uptime checks, where internal_network is specified.
          &quot;name&quot;: &quot;A String&quot;, # 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 Stackdriver Workspace project for the Uptime check config associated with the internal checker.
          &quot;network&quot;: &quot;A String&quot;, # The GCP VPC network (https://cloud.google.com/vpc/docs/vpc) where the internal resource lives (ex: &quot;default&quot;).
          &quot;peerProjectId&quot;: &quot;A String&quot;, # The GCP project ID where the internal checker lives. Not necessary the same as the Workspace project.
          &quot;state&quot;: &quot;A String&quot;, # The current operational state of the internal checker.
        },
      ],
      &quot;isInternal&quot;: True or False, # If this is true, then checks are made only from the &#x27;internal_checkers&#x27;. If it is false, then checks are made only from the &#x27;selected_regions&#x27;. It is an error to provide &#x27;selected_regions&#x27; when is_internal is true, or to provide &#x27;internal_checkers&#x27; when is_internal is false.
      &quot;monitoredResource&quot;: { # 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&#x27;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 &quot;gce_instance&quot; has labels &quot;project_id&quot;, &quot;instance_id&quot; and &quot;zone&quot;: { &quot;type&quot;: &quot;gce_instance&quot;, &quot;labels&quot;: { &quot;project_id&quot;: &quot;my-project&quot;, &quot;instance_id&quot;: &quot;12345678901234&quot;, &quot;zone&quot;: &quot;us-central1-a&quot; }} # 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
        &quot;labels&quot;: { # Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Compute Engine VM instances use the labels &quot;project_id&quot;, &quot;instance_id&quot;, and &quot;zone&quot;.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;type&quot;: &quot;A String&quot;, # 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).
      },
      &quot;name&quot;: &quot;A String&quot;, # 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.
      &quot;period&quot;: &quot;A String&quot;, # 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.
      &quot;resourceGroup&quot;: { # The resource submessage for group checks. It can be used instead of a monitored resource, when multiple resources are being monitored. # The group resource associated with the configuration.
        &quot;groupId&quot;: &quot;A String&quot;, # 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].
        &quot;resourceType&quot;: &quot;A String&quot;, # The resource type of the group members.
      },
      &quot;selectedRegions&quot;: [ # 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.
        &quot;A String&quot;,
      ],
      &quot;tcpCheck&quot;: { # Information required for a TCP Uptime check request. # Contains information needed to make a TCP check.
        &quot;port&quot;: 42, # 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.
      },
      &quot;timeout&quot;: &quot;A String&quot;, # The maximum amount of time to wait for the request to complete (must be between 1 and 60 seconds). Required.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>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.

Args:
  name: string, 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. (required)
  body: object, The request body.
    The object takes the form of:

{ # This message configures which resources and services to monitor for availability.
  &quot;checkerType&quot;: &quot;A String&quot;, # The type of checkers to use to execute the Uptime check.
  &quot;contentMatchers&quot;: [ # 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.
    { # 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&#x27;s response (and the first 1 MB of a TCP check&#x27;s response) are examined for purposes of content matching.
      &quot;content&quot;: &quot;A String&quot;, # String, regex or JSON content to match. Maximum 1024 bytes. An empty content string indicates no content matching is to be performed.
      &quot;matcher&quot;: &quot;A String&quot;, # The type of content matcher that will be applied to the server output, compared to the content string when the check is run.
    },
  ],
  &quot;displayName&quot;: &quot;A String&quot;, # A human-friendly name for the Uptime check configuration. The display name should be unique within a Stackdriver Workspace in order to make it easier to identify; however, uniqueness is not enforced. Required.
  &quot;httpCheck&quot;: { # Information involved in an HTTP/HTTPS Uptime check request. # Contains information needed to make an HTTP or HTTPS check.
    &quot;authInfo&quot;: { # 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. # The authentication information. Optional when creating an HTTP check; defaults to empty.
      &quot;password&quot;: &quot;A String&quot;, # The password to use when authenticating with the HTTP server.
      &quot;username&quot;: &quot;A String&quot;, # The username to use when authenticating with the HTTP server.
    },
    &quot;body&quot;: &quot;A String&quot;, # 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&#x27;t used (which performs the conversion automatically) base64 encode your body data since the field is of bytes type.
    &quot;contentType&quot;: &quot;A String&quot;, # 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 &quot;Content-Type&quot; header is provided via headers field. The content_type field should be used instead.
    &quot;headers&quot;: { # 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.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;maskHeaders&quot;: True or False, # 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 ******.
    &quot;path&quot;: &quot;A String&quot;, # Optional (defaults to &quot;/&quot;). 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 &quot;/&quot;, a &quot;/&quot; will be prepended automatically.
    &quot;port&quot;: 42, # 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.
    &quot;requestMethod&quot;: &quot;A String&quot;, # The HTTP request method to use for the check. If set to METHOD_UNSPECIFIED then request_method defaults to GET.
    &quot;useSsl&quot;: True or False, # If true, use HTTPS instead of HTTP to run the check.
    &quot;validateSsl&quot;: True or False, # 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.
  },
  &quot;internalCheckers&quot;: [ # 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.
    { # An internal checker allows Uptime checks to run on private/internal GCP resources.
      &quot;displayName&quot;: &quot;A String&quot;, # The checker&#x27;s human-readable name. The display name should be unique within a Stackdriver Workspace in order to make it easier to identify; however, uniqueness is not enforced.
      &quot;gcpZone&quot;: &quot;A String&quot;, # The GCP zone the Uptime check should egress from. Only respected for internal Uptime checks, where internal_network is specified.
      &quot;name&quot;: &quot;A String&quot;, # 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 Stackdriver Workspace project for the Uptime check config associated with the internal checker.
      &quot;network&quot;: &quot;A String&quot;, # The GCP VPC network (https://cloud.google.com/vpc/docs/vpc) where the internal resource lives (ex: &quot;default&quot;).
      &quot;peerProjectId&quot;: &quot;A String&quot;, # The GCP project ID where the internal checker lives. Not necessary the same as the Workspace project.
      &quot;state&quot;: &quot;A String&quot;, # The current operational state of the internal checker.
    },
  ],
  &quot;isInternal&quot;: True or False, # If this is true, then checks are made only from the &#x27;internal_checkers&#x27;. If it is false, then checks are made only from the &#x27;selected_regions&#x27;. It is an error to provide &#x27;selected_regions&#x27; when is_internal is true, or to provide &#x27;internal_checkers&#x27; when is_internal is false.
  &quot;monitoredResource&quot;: { # 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&#x27;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 &quot;gce_instance&quot; has labels &quot;project_id&quot;, &quot;instance_id&quot; and &quot;zone&quot;: { &quot;type&quot;: &quot;gce_instance&quot;, &quot;labels&quot;: { &quot;project_id&quot;: &quot;my-project&quot;, &quot;instance_id&quot;: &quot;12345678901234&quot;, &quot;zone&quot;: &quot;us-central1-a&quot; }} # 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
    &quot;labels&quot;: { # Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Compute Engine VM instances use the labels &quot;project_id&quot;, &quot;instance_id&quot;, and &quot;zone&quot;.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;type&quot;: &quot;A String&quot;, # 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).
  },
  &quot;name&quot;: &quot;A String&quot;, # 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.
  &quot;period&quot;: &quot;A String&quot;, # 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.
  &quot;resourceGroup&quot;: { # The resource submessage for group checks. It can be used instead of a monitored resource, when multiple resources are being monitored. # The group resource associated with the configuration.
    &quot;groupId&quot;: &quot;A String&quot;, # 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].
    &quot;resourceType&quot;: &quot;A String&quot;, # The resource type of the group members.
  },
  &quot;selectedRegions&quot;: [ # 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.
    &quot;A String&quot;,
  ],
  &quot;tcpCheck&quot;: { # Information required for a TCP Uptime check request. # Contains information needed to make a TCP check.
    &quot;port&quot;: 42, # 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.
  },
  &quot;timeout&quot;: &quot;A String&quot;, # The maximum amount of time to wait for the request to complete (must be between 1 and 60 seconds). Required.
}

  updateMask: string, Optional. 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.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # This message configures which resources and services to monitor for availability.
  &quot;checkerType&quot;: &quot;A String&quot;, # The type of checkers to use to execute the Uptime check.
  &quot;contentMatchers&quot;: [ # 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.
    { # 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&#x27;s response (and the first 1 MB of a TCP check&#x27;s response) are examined for purposes of content matching.
      &quot;content&quot;: &quot;A String&quot;, # String, regex or JSON content to match. Maximum 1024 bytes. An empty content string indicates no content matching is to be performed.
      &quot;matcher&quot;: &quot;A String&quot;, # The type of content matcher that will be applied to the server output, compared to the content string when the check is run.
    },
  ],
  &quot;displayName&quot;: &quot;A String&quot;, # A human-friendly name for the Uptime check configuration. The display name should be unique within a Stackdriver Workspace in order to make it easier to identify; however, uniqueness is not enforced. Required.
  &quot;httpCheck&quot;: { # Information involved in an HTTP/HTTPS Uptime check request. # Contains information needed to make an HTTP or HTTPS check.
    &quot;authInfo&quot;: { # 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. # The authentication information. Optional when creating an HTTP check; defaults to empty.
      &quot;password&quot;: &quot;A String&quot;, # The password to use when authenticating with the HTTP server.
      &quot;username&quot;: &quot;A String&quot;, # The username to use when authenticating with the HTTP server.
    },
    &quot;body&quot;: &quot;A String&quot;, # 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&#x27;t used (which performs the conversion automatically) base64 encode your body data since the field is of bytes type.
    &quot;contentType&quot;: &quot;A String&quot;, # 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 &quot;Content-Type&quot; header is provided via headers field. The content_type field should be used instead.
    &quot;headers&quot;: { # 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.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;maskHeaders&quot;: True or False, # 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 ******.
    &quot;path&quot;: &quot;A String&quot;, # Optional (defaults to &quot;/&quot;). 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 &quot;/&quot;, a &quot;/&quot; will be prepended automatically.
    &quot;port&quot;: 42, # 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.
    &quot;requestMethod&quot;: &quot;A String&quot;, # The HTTP request method to use for the check. If set to METHOD_UNSPECIFIED then request_method defaults to GET.
    &quot;useSsl&quot;: True or False, # If true, use HTTPS instead of HTTP to run the check.
    &quot;validateSsl&quot;: True or False, # 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.
  },
  &quot;internalCheckers&quot;: [ # 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.
    { # An internal checker allows Uptime checks to run on private/internal GCP resources.
      &quot;displayName&quot;: &quot;A String&quot;, # The checker&#x27;s human-readable name. The display name should be unique within a Stackdriver Workspace in order to make it easier to identify; however, uniqueness is not enforced.
      &quot;gcpZone&quot;: &quot;A String&quot;, # The GCP zone the Uptime check should egress from. Only respected for internal Uptime checks, where internal_network is specified.
      &quot;name&quot;: &quot;A String&quot;, # 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 Stackdriver Workspace project for the Uptime check config associated with the internal checker.
      &quot;network&quot;: &quot;A String&quot;, # The GCP VPC network (https://cloud.google.com/vpc/docs/vpc) where the internal resource lives (ex: &quot;default&quot;).
      &quot;peerProjectId&quot;: &quot;A String&quot;, # The GCP project ID where the internal checker lives. Not necessary the same as the Workspace project.
      &quot;state&quot;: &quot;A String&quot;, # The current operational state of the internal checker.
    },
  ],
  &quot;isInternal&quot;: True or False, # If this is true, then checks are made only from the &#x27;internal_checkers&#x27;. If it is false, then checks are made only from the &#x27;selected_regions&#x27;. It is an error to provide &#x27;selected_regions&#x27; when is_internal is true, or to provide &#x27;internal_checkers&#x27; when is_internal is false.
  &quot;monitoredResource&quot;: { # 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&#x27;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 &quot;gce_instance&quot; has labels &quot;project_id&quot;, &quot;instance_id&quot; and &quot;zone&quot;: { &quot;type&quot;: &quot;gce_instance&quot;, &quot;labels&quot;: { &quot;project_id&quot;: &quot;my-project&quot;, &quot;instance_id&quot;: &quot;12345678901234&quot;, &quot;zone&quot;: &quot;us-central1-a&quot; }} # 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
    &quot;labels&quot;: { # Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Compute Engine VM instances use the labels &quot;project_id&quot;, &quot;instance_id&quot;, and &quot;zone&quot;.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;type&quot;: &quot;A String&quot;, # 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).
  },
  &quot;name&quot;: &quot;A String&quot;, # 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.
  &quot;period&quot;: &quot;A String&quot;, # 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.
  &quot;resourceGroup&quot;: { # The resource submessage for group checks. It can be used instead of a monitored resource, when multiple resources are being monitored. # The group resource associated with the configuration.
    &quot;groupId&quot;: &quot;A String&quot;, # 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].
    &quot;resourceType&quot;: &quot;A String&quot;, # The resource type of the group members.
  },
  &quot;selectedRegions&quot;: [ # 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.
    &quot;A String&quot;,
  ],
  &quot;tcpCheck&quot;: { # Information required for a TCP Uptime check request. # Contains information needed to make a TCP check.
    &quot;port&quot;: 42, # 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.
  },
  &quot;timeout&quot;: &quot;A String&quot;, # The maximum amount of time to wait for the request to complete (must be between 1 and 60 seconds). Required.
}</pre>
</div>

</body></html>