<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">Stackdriver 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="#create">create(parent, body, 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, pageToken=None, x__xgafv=None, pageSize=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, 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="create">create(parent, body, x__xgafv=None)</code>
  <pre>Creates a new uptime check configuration.

Args:
  parent: string, The project in which to create the uptime check. The format  is projects/[PROJECT_ID]. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # This message configures which resources and services to monitor for availability.
    "resourceGroup": { # 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.
      "resourceType": "A String", # The resource type of the group members.
      "groupId": "A String", # The group of resources being monitored. Should be only the group_id, not projects/<project_id>/groups/<group_id>.
    },
    "displayName": "A String", # 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.
    "name": "A String", # A unique resource name for this UptimeCheckConfig. The format is:projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID].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.
    "tcpCheck": { # Information required for a TCP uptime check request. # Contains information needed to make a TCP check.
      "port": 42, # The port to the page to run the check against. Will be combined with host (specified within the MonitoredResource) to construct the full URL. Required.
    },
    "period": "A String", # 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.
    "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 to include a minimum of 3 locations must be provided, or an error message is returned. Not specifying this field will result in uptime checks running from all regions.
      "A String",
    ],
    "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 "instance_id" and "zone": # The monitored resource (https://cloud.google.com/monitoring/api/resources) associated with the configuration. The following monitored resource types are supported for uptime checks:  uptime_url  gce_instance  gae_app  aws_ec2_instance  aws_elb_load_balancer
        # { "type": "gce_instance",
        #   "labels": { "instance_id": "12345678901234",
        #               "zone": "us-central1-a" }}
      "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".
        "a_key": "A String",
      },
      "type": "A String", # 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 and Logging resource types.
    },
    "httpCheck": { # Information involved in an HTTP/HTTPS uptime check request. # Contains information needed to make an HTTP or HTTPS check.
      "useSsl": True or False, # If true, use HTTPS instead of HTTP to run the check.
      "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.
        "a_key": "A String",
      },
      "authInfo": { # A type of authentication to perform against the specified resource or URL that uses username and password. Currently, only Basic authentication is supported in Uptime Monitoring. # The authentication information. Optional when creating an HTTP check; defaults to empty.
        "username": "A String", # The username to authenticate.
        "password": "A String", # The password to authenticate.
      },
      "maskHeaders": True or False, # Boolean specifiying 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 ******.
      "path": "A String", # The path to the page to run the check against. Will be combined with the host (specified within the MonitoredResource) and port to construct the full URL. Optional (defaults to "/"). If the provided path does not begin with "/", it will be prepended automatically.
      "port": 42, # The port to the page to run the check against. Will be combined with host (specified within the MonitoredResource) and path to construct the full URL. Optional (defaults to 80 without SSL, or 443 with SSL).
    },
    "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 CheckConfig.
      { # An internal checker allows uptime checks to run on private/internal GCP resources.
        "displayName": "A String", # The checker'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.
        "name": "A String", # A unique resource name for this InternalChecker. The format is:projects/[PROJECT_ID]/internalCheckers/[INTERNAL_CHECKER_ID].PROJECT_ID is the stackdriver workspace project for the uptime check config associated with the internal checker.
        "gcpZone": "A String", # The GCP zone the uptime check should egress from. Only respected for internal uptime checks, where internal_network is specified.
        "state": "A String", # The current operational state of the internal checker.
        "peerProjectId": "A String", # The GCP project_id where the internal checker lives. Not necessary the same as the workspace project.
        "network": "A String", # The GCP VPC network (https://cloud.google.com/vpc/docs/vpc) where the internal resource lives (ex: "default").
      },
    ],
    "timeout": "A String", # The maximum amount of time to wait for the request to complete (must be between 1 and 60 seconds). Required.
    "contentMatchers": [ # The expected content on the page the check is run against. Currently, only the first entry in the list is supported, and other entries will be ignored. The server will look for an exact match of the string in the page response's content. This field is optional and should only be specified if a content match is required.
      { # Used to perform string matching. It allows substring and regular expressions, together with their negations.
        "content": "A String", # String or regex content to match (max 1024 bytes)
      },
    ],
  }

  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.
      "resourceGroup": { # 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.
        "resourceType": "A String", # The resource type of the group members.
        "groupId": "A String", # The group of resources being monitored. Should be only the group_id, not projects/<project_id>/groups/<group_id>.
      },
      "displayName": "A String", # 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.
      "name": "A String", # A unique resource name for this UptimeCheckConfig. The format is:projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID].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.
      "tcpCheck": { # Information required for a TCP uptime check request. # Contains information needed to make a TCP check.
        "port": 42, # The port to the page to run the check against. Will be combined with host (specified within the MonitoredResource) to construct the full URL. Required.
      },
      "period": "A String", # 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.
      "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 to include a minimum of 3 locations must be provided, or an error message is returned. Not specifying this field will result in uptime checks running from all regions.
        "A String",
      ],
      "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 "instance_id" and "zone": # The monitored resource (https://cloud.google.com/monitoring/api/resources) associated with the configuration. The following monitored resource types are supported for uptime checks:  uptime_url  gce_instance  gae_app  aws_ec2_instance  aws_elb_load_balancer
          # { "type": "gce_instance",
          #   "labels": { "instance_id": "12345678901234",
          #               "zone": "us-central1-a" }}
        "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".
          "a_key": "A String",
        },
        "type": "A String", # 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 and Logging resource types.
      },
      "httpCheck": { # Information involved in an HTTP/HTTPS uptime check request. # Contains information needed to make an HTTP or HTTPS check.
        "useSsl": True or False, # If true, use HTTPS instead of HTTP to run the check.
        "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.
          "a_key": "A String",
        },
        "authInfo": { # A type of authentication to perform against the specified resource or URL that uses username and password. Currently, only Basic authentication is supported in Uptime Monitoring. # The authentication information. Optional when creating an HTTP check; defaults to empty.
          "username": "A String", # The username to authenticate.
          "password": "A String", # The password to authenticate.
        },
        "maskHeaders": True or False, # Boolean specifiying 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 ******.
        "path": "A String", # The path to the page to run the check against. Will be combined with the host (specified within the MonitoredResource) and port to construct the full URL. Optional (defaults to "/"). If the provided path does not begin with "/", it will be prepended automatically.
        "port": 42, # The port to the page to run the check against. Will be combined with host (specified within the MonitoredResource) and path to construct the full URL. Optional (defaults to 80 without SSL, or 443 with SSL).
      },
      "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 CheckConfig.
        { # An internal checker allows uptime checks to run on private/internal GCP resources.
          "displayName": "A String", # The checker'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.
          "name": "A String", # A unique resource name for this InternalChecker. The format is:projects/[PROJECT_ID]/internalCheckers/[INTERNAL_CHECKER_ID].PROJECT_ID is the stackdriver workspace project for the uptime check config associated with the internal checker.
          "gcpZone": "A String", # The GCP zone the uptime check should egress from. Only respected for internal uptime checks, where internal_network is specified.
          "state": "A String", # The current operational state of the internal checker.
          "peerProjectId": "A String", # The GCP project_id where the internal checker lives. Not necessary the same as the workspace project.
          "network": "A String", # The GCP VPC network (https://cloud.google.com/vpc/docs/vpc) where the internal resource lives (ex: "default").
        },
      ],
      "timeout": "A String", # The maximum amount of time to wait for the request to complete (must be between 1 and 60 seconds). Required.
      "contentMatchers": [ # The expected content on the page the check is run against. Currently, only the first entry in the list is supported, and other entries will be ignored. The server will look for an exact match of the string in the page response's content. This field is optional and should only be specified if a content match is required.
        { # Used to perform string matching. It allows substring and regular expressions, together with their negations.
          "content": "A String", # String or regex content to match (max 1024 bytes)
        },
      ],
    }</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, The uptime check configuration to delete. The format  is projects/[PROJECT_ID]/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, The uptime check configuration to retrieve. The format  is projects/[PROJECT_ID]/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.
      "resourceGroup": { # 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.
        "resourceType": "A String", # The resource type of the group members.
        "groupId": "A String", # The group of resources being monitored. Should be only the group_id, not projects/<project_id>/groups/<group_id>.
      },
      "displayName": "A String", # 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.
      "name": "A String", # A unique resource name for this UptimeCheckConfig. The format is:projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID].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.
      "tcpCheck": { # Information required for a TCP uptime check request. # Contains information needed to make a TCP check.
        "port": 42, # The port to the page to run the check against. Will be combined with host (specified within the MonitoredResource) to construct the full URL. Required.
      },
      "period": "A String", # 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.
      "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 to include a minimum of 3 locations must be provided, or an error message is returned. Not specifying this field will result in uptime checks running from all regions.
        "A String",
      ],
      "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 "instance_id" and "zone": # The monitored resource (https://cloud.google.com/monitoring/api/resources) associated with the configuration. The following monitored resource types are supported for uptime checks:  uptime_url  gce_instance  gae_app  aws_ec2_instance  aws_elb_load_balancer
          # { "type": "gce_instance",
          #   "labels": { "instance_id": "12345678901234",
          #               "zone": "us-central1-a" }}
        "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".
          "a_key": "A String",
        },
        "type": "A String", # 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 and Logging resource types.
      },
      "httpCheck": { # Information involved in an HTTP/HTTPS uptime check request. # Contains information needed to make an HTTP or HTTPS check.
        "useSsl": True or False, # If true, use HTTPS instead of HTTP to run the check.
        "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.
          "a_key": "A String",
        },
        "authInfo": { # A type of authentication to perform against the specified resource or URL that uses username and password. Currently, only Basic authentication is supported in Uptime Monitoring. # The authentication information. Optional when creating an HTTP check; defaults to empty.
          "username": "A String", # The username to authenticate.
          "password": "A String", # The password to authenticate.
        },
        "maskHeaders": True or False, # Boolean specifiying 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 ******.
        "path": "A String", # The path to the page to run the check against. Will be combined with the host (specified within the MonitoredResource) and port to construct the full URL. Optional (defaults to "/"). If the provided path does not begin with "/", it will be prepended automatically.
        "port": 42, # The port to the page to run the check against. Will be combined with host (specified within the MonitoredResource) and path to construct the full URL. Optional (defaults to 80 without SSL, or 443 with SSL).
      },
      "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 CheckConfig.
        { # An internal checker allows uptime checks to run on private/internal GCP resources.
          "displayName": "A String", # The checker'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.
          "name": "A String", # A unique resource name for this InternalChecker. The format is:projects/[PROJECT_ID]/internalCheckers/[INTERNAL_CHECKER_ID].PROJECT_ID is the stackdriver workspace project for the uptime check config associated with the internal checker.
          "gcpZone": "A String", # The GCP zone the uptime check should egress from. Only respected for internal uptime checks, where internal_network is specified.
          "state": "A String", # The current operational state of the internal checker.
          "peerProjectId": "A String", # The GCP project_id where the internal checker lives. Not necessary the same as the workspace project.
          "network": "A String", # The GCP VPC network (https://cloud.google.com/vpc/docs/vpc) where the internal resource lives (ex: "default").
        },
      ],
      "timeout": "A String", # The maximum amount of time to wait for the request to complete (must be between 1 and 60 seconds). Required.
      "contentMatchers": [ # The expected content on the page the check is run against. Currently, only the first entry in the list is supported, and other entries will be ignored. The server will look for an exact match of the string in the page response's content. This field is optional and should only be specified if a content match is required.
        { # Used to perform string matching. It allows substring and regular expressions, together with their negations.
          "content": "A String", # String or regex content to match (max 1024 bytes)
        },
      ],
    }</pre>
</div>

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

Args:
  parent: string, The project whose uptime check configurations are listed. The format  is projects/[PROJECT_ID]. (required)
  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
  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 <=0, the server will decide the number of results to be returned.

Returns:
  An object of the form:

    { # The protocol for the ListUptimeCheckConfigs response.
    "nextPageToken": "A String", # 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).
    "totalSize": 42, # The total number of uptime check configurations for the project, irrespective of any pagination.
    "uptimeCheckConfigs": [ # The returned uptime check configurations.
      { # This message configures which resources and services to monitor for availability.
          "resourceGroup": { # 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.
            "resourceType": "A String", # The resource type of the group members.
            "groupId": "A String", # The group of resources being monitored. Should be only the group_id, not projects/<project_id>/groups/<group_id>.
          },
          "displayName": "A String", # 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.
          "name": "A String", # A unique resource name for this UptimeCheckConfig. The format is:projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID].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.
          "tcpCheck": { # Information required for a TCP uptime check request. # Contains information needed to make a TCP check.
            "port": 42, # The port to the page to run the check against. Will be combined with host (specified within the MonitoredResource) to construct the full URL. Required.
          },
          "period": "A String", # 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.
          "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 to include a minimum of 3 locations must be provided, or an error message is returned. Not specifying this field will result in uptime checks running from all regions.
            "A String",
          ],
          "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 "instance_id" and "zone": # The monitored resource (https://cloud.google.com/monitoring/api/resources) associated with the configuration. The following monitored resource types are supported for uptime checks:  uptime_url  gce_instance  gae_app  aws_ec2_instance  aws_elb_load_balancer
              # { "type": "gce_instance",
              #   "labels": { "instance_id": "12345678901234",
              #               "zone": "us-central1-a" }}
            "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".
              "a_key": "A String",
            },
            "type": "A String", # 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 and Logging resource types.
          },
          "httpCheck": { # Information involved in an HTTP/HTTPS uptime check request. # Contains information needed to make an HTTP or HTTPS check.
            "useSsl": True or False, # If true, use HTTPS instead of HTTP to run the check.
            "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.
              "a_key": "A String",
            },
            "authInfo": { # A type of authentication to perform against the specified resource or URL that uses username and password. Currently, only Basic authentication is supported in Uptime Monitoring. # The authentication information. Optional when creating an HTTP check; defaults to empty.
              "username": "A String", # The username to authenticate.
              "password": "A String", # The password to authenticate.
            },
            "maskHeaders": True or False, # Boolean specifiying 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 ******.
            "path": "A String", # The path to the page to run the check against. Will be combined with the host (specified within the MonitoredResource) and port to construct the full URL. Optional (defaults to "/"). If the provided path does not begin with "/", it will be prepended automatically.
            "port": 42, # The port to the page to run the check against. Will be combined with host (specified within the MonitoredResource) and path to construct the full URL. Optional (defaults to 80 without SSL, or 443 with SSL).
          },
          "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 CheckConfig.
            { # An internal checker allows uptime checks to run on private/internal GCP resources.
              "displayName": "A String", # The checker'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.
              "name": "A String", # A unique resource name for this InternalChecker. The format is:projects/[PROJECT_ID]/internalCheckers/[INTERNAL_CHECKER_ID].PROJECT_ID is the stackdriver workspace project for the uptime check config associated with the internal checker.
              "gcpZone": "A String", # The GCP zone the uptime check should egress from. Only respected for internal uptime checks, where internal_network is specified.
              "state": "A String", # The current operational state of the internal checker.
              "peerProjectId": "A String", # The GCP project_id where the internal checker lives. Not necessary the same as the workspace project.
              "network": "A String", # The GCP VPC network (https://cloud.google.com/vpc/docs/vpc) where the internal resource lives (ex: "default").
            },
          ],
          "timeout": "A String", # The maximum amount of time to wait for the request to complete (must be between 1 and 60 seconds). Required.
          "contentMatchers": [ # The expected content on the page the check is run against. Currently, only the first entry in the list is supported, and other entries will be ignored. The server will look for an exact match of the string in the page response's content. This field is optional and should only be specified if a content match is required.
            { # Used to perform string matching. It allows substring and regular expressions, together with their negations.
              "content": "A String", # String or regex content to match (max 1024 bytes)
            },
          ],
        },
    ],
  }</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 'execute()' 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, 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 UptimeCheckConfig. The format is:projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID].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. (required)
    The object takes the form of:

{ # This message configures which resources and services to monitor for availability.
    "resourceGroup": { # 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.
      "resourceType": "A String", # The resource type of the group members.
      "groupId": "A String", # The group of resources being monitored. Should be only the group_id, not projects/<project_id>/groups/<group_id>.
    },
    "displayName": "A String", # 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.
    "name": "A String", # A unique resource name for this UptimeCheckConfig. The format is:projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID].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.
    "tcpCheck": { # Information required for a TCP uptime check request. # Contains information needed to make a TCP check.
      "port": 42, # The port to the page to run the check against. Will be combined with host (specified within the MonitoredResource) to construct the full URL. Required.
    },
    "period": "A String", # 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.
    "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 to include a minimum of 3 locations must be provided, or an error message is returned. Not specifying this field will result in uptime checks running from all regions.
      "A String",
    ],
    "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 "instance_id" and "zone": # The monitored resource (https://cloud.google.com/monitoring/api/resources) associated with the configuration. The following monitored resource types are supported for uptime checks:  uptime_url  gce_instance  gae_app  aws_ec2_instance  aws_elb_load_balancer
        # { "type": "gce_instance",
        #   "labels": { "instance_id": "12345678901234",
        #               "zone": "us-central1-a" }}
      "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".
        "a_key": "A String",
      },
      "type": "A String", # 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 and Logging resource types.
    },
    "httpCheck": { # Information involved in an HTTP/HTTPS uptime check request. # Contains information needed to make an HTTP or HTTPS check.
      "useSsl": True or False, # If true, use HTTPS instead of HTTP to run the check.
      "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.
        "a_key": "A String",
      },
      "authInfo": { # A type of authentication to perform against the specified resource or URL that uses username and password. Currently, only Basic authentication is supported in Uptime Monitoring. # The authentication information. Optional when creating an HTTP check; defaults to empty.
        "username": "A String", # The username to authenticate.
        "password": "A String", # The password to authenticate.
      },
      "maskHeaders": True or False, # Boolean specifiying 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 ******.
      "path": "A String", # The path to the page to run the check against. Will be combined with the host (specified within the MonitoredResource) and port to construct the full URL. Optional (defaults to "/"). If the provided path does not begin with "/", it will be prepended automatically.
      "port": 42, # The port to the page to run the check against. Will be combined with host (specified within the MonitoredResource) and path to construct the full URL. Optional (defaults to 80 without SSL, or 443 with SSL).
    },
    "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 CheckConfig.
      { # An internal checker allows uptime checks to run on private/internal GCP resources.
        "displayName": "A String", # The checker'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.
        "name": "A String", # A unique resource name for this InternalChecker. The format is:projects/[PROJECT_ID]/internalCheckers/[INTERNAL_CHECKER_ID].PROJECT_ID is the stackdriver workspace project for the uptime check config associated with the internal checker.
        "gcpZone": "A String", # The GCP zone the uptime check should egress from. Only respected for internal uptime checks, where internal_network is specified.
        "state": "A String", # The current operational state of the internal checker.
        "peerProjectId": "A String", # The GCP project_id where the internal checker lives. Not necessary the same as the workspace project.
        "network": "A String", # The GCP VPC network (https://cloud.google.com/vpc/docs/vpc) where the internal resource lives (ex: "default").
      },
    ],
    "timeout": "A String", # The maximum amount of time to wait for the request to complete (must be between 1 and 60 seconds). Required.
    "contentMatchers": [ # The expected content on the page the check is run against. Currently, only the first entry in the list is supported, and other entries will be ignored. The server will look for an exact match of the string in the page response's content. This field is optional and should only be specified if a content match is required.
      { # Used to perform string matching. It allows substring and regular expressions, together with their negations.
        "content": "A String", # String or regex content to match (max 1024 bytes)
      },
    ],
  }

  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.
      "resourceGroup": { # 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.
        "resourceType": "A String", # The resource type of the group members.
        "groupId": "A String", # The group of resources being monitored. Should be only the group_id, not projects/<project_id>/groups/<group_id>.
      },
      "displayName": "A String", # 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.
      "name": "A String", # A unique resource name for this UptimeCheckConfig. The format is:projects/[PROJECT_ID]/uptimeCheckConfigs/[UPTIME_CHECK_ID].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.
      "tcpCheck": { # Information required for a TCP uptime check request. # Contains information needed to make a TCP check.
        "port": 42, # The port to the page to run the check against. Will be combined with host (specified within the MonitoredResource) to construct the full URL. Required.
      },
      "period": "A String", # 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.
      "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 to include a minimum of 3 locations must be provided, or an error message is returned. Not specifying this field will result in uptime checks running from all regions.
        "A String",
      ],
      "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 "instance_id" and "zone": # The monitored resource (https://cloud.google.com/monitoring/api/resources) associated with the configuration. The following monitored resource types are supported for uptime checks:  uptime_url  gce_instance  gae_app  aws_ec2_instance  aws_elb_load_balancer
          # { "type": "gce_instance",
          #   "labels": { "instance_id": "12345678901234",
          #               "zone": "us-central1-a" }}
        "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".
          "a_key": "A String",
        },
        "type": "A String", # 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 and Logging resource types.
      },
      "httpCheck": { # Information involved in an HTTP/HTTPS uptime check request. # Contains information needed to make an HTTP or HTTPS check.
        "useSsl": True or False, # If true, use HTTPS instead of HTTP to run the check.
        "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.
          "a_key": "A String",
        },
        "authInfo": { # A type of authentication to perform against the specified resource or URL that uses username and password. Currently, only Basic authentication is supported in Uptime Monitoring. # The authentication information. Optional when creating an HTTP check; defaults to empty.
          "username": "A String", # The username to authenticate.
          "password": "A String", # The password to authenticate.
        },
        "maskHeaders": True or False, # Boolean specifiying 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 ******.
        "path": "A String", # The path to the page to run the check against. Will be combined with the host (specified within the MonitoredResource) and port to construct the full URL. Optional (defaults to "/"). If the provided path does not begin with "/", it will be prepended automatically.
        "port": 42, # The port to the page to run the check against. Will be combined with host (specified within the MonitoredResource) and path to construct the full URL. Optional (defaults to 80 without SSL, or 443 with SSL).
      },
      "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 CheckConfig.
        { # An internal checker allows uptime checks to run on private/internal GCP resources.
          "displayName": "A String", # The checker'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.
          "name": "A String", # A unique resource name for this InternalChecker. The format is:projects/[PROJECT_ID]/internalCheckers/[INTERNAL_CHECKER_ID].PROJECT_ID is the stackdriver workspace project for the uptime check config associated with the internal checker.
          "gcpZone": "A String", # The GCP zone the uptime check should egress from. Only respected for internal uptime checks, where internal_network is specified.
          "state": "A String", # The current operational state of the internal checker.
          "peerProjectId": "A String", # The GCP project_id where the internal checker lives. Not necessary the same as the workspace project.
          "network": "A String", # The GCP VPC network (https://cloud.google.com/vpc/docs/vpc) where the internal resource lives (ex: "default").
        },
      ],
      "timeout": "A String", # The maximum amount of time to wait for the request to complete (must be between 1 and 60 seconds). Required.
      "contentMatchers": [ # The expected content on the page the check is run against. Currently, only the first entry in the list is supported, and other entries will be ignored. The server will look for an exact match of the string in the page response's content. This field is optional and should only be specified if a content match is required.
        { # Used to perform string matching. It allows substring and regular expressions, together with their negations.
          "content": "A String", # String or regex content to match (max 1024 bytes)
        },
      ],
    }</pre>
</div>

</body></html>