<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="dataflow_v1b3.html">Dataflow API</a> . <a href="dataflow_v1b3.projects.html">projects</a> . <a href="dataflow_v1b3.projects.jobs.html">jobs</a> . <a href="dataflow_v1b3.projects.jobs.messages.html">messages</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#list">list(projectId, jobId, startTime=None, pageSize=None, x__xgafv=None, pageToken=None, location=None, minimumImportance=None, endTime=None)</a></code></p>
<p class="firstline">Request the job status.</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>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="list">list(projectId, jobId, startTime=None, pageSize=None, x__xgafv=None, pageToken=None, location=None, minimumImportance=None, endTime=None)</code>
  <pre>Request the job status.

To request the status of a job, we recommend using
`projects.locations.jobs.messages.list` with a [regional endpoint]
(https://cloud.google.com/dataflow/docs/concepts/regional-endpoints). Using
`projects.jobs.messages.list` is not recommended, as you can only request
the status of jobs that are running in `us-central1`.

Args:
  projectId: string, A project id. (required)
  jobId: string, The job to get messages about. (required)
  startTime: string, If specified, return only messages with timestamps >= start_time.
The default is the job creation time (i.e. beginning of messages).
  pageSize: integer, If specified, determines the maximum number of messages to
return.  If unspecified, the service may choose an appropriate
default, or may return an arbitrarily large number of results.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  pageToken: string, If supplied, this should be the value of next_page_token returned
by an earlier call. This will cause the next page of results to
be returned.
  location: string, The [regional endpoint]
(https://cloud.google.com/dataflow/docs/concepts/regional-endpoints) that
contains the job specified by job_id.
  minimumImportance: string, Filter to only get messages with importance >= level
  endTime: string, Return only messages with timestamps < end_time. The default is now
(i.e. return up to the latest messages available).

Returns:
  An object of the form:

    { # Response to a request to list job messages.
    "nextPageToken": "A String", # The token to obtain the next page of results if there are more.
    "autoscalingEvents": [ # Autoscaling events in ascending timestamp order.
      { # A structured message reporting an autoscaling decision made by the Dataflow
          # service.
        "description": { # A rich message format, including a human readable string, a key for # A message describing why the system decided to adjust the current
            # number of workers, why it failed, or why the system decided to
            # not make any changes to the number of workers.
            # identifying the message, and structured data associated with the message for
            # programmatic consumption.
          "messageKey": "A String", # Identifier for this message type.  Used by external systems to
              # internationalize or personalize message.
          "messageText": "A String", # Human-readable version of message.
          "parameters": [ # The structured data associated with this message.
            { # Structured data associated with this message.
              "key": "A String", # Key or name for this parameter.
              "value": "", # Value for this parameter.
            },
          ],
        },
        "targetNumWorkers": "A String", # The target number of workers the worker pool wants to resize to use.
        "eventType": "A String", # The type of autoscaling event to report.
        "workerPool": "A String", # A short and friendly name for the worker pool this event refers to,
            # populated from the value of PoolStageRelation::user_pool_name.
        "time": "A String", # The time this event was emitted to indicate a new target or current
            # num_workers value.
        "currentNumWorkers": "A String", # The current number of workers the job has.
      },
    ],
    "jobMessages": [ # Messages in ascending timestamp order.
      { # A particular message pertaining to a Dataflow job.
        "messageImportance": "A String", # Importance level of the message.
        "messageText": "A String", # The text of the message.
        "id": "A String", # Deprecated.
        "time": "A String", # The timestamp of the message.
      },
    ],
  }</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>

</body></html>