<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="toolresults_v1beta3.html">Cloud Tool Results API</a> . <a href="toolresults_v1beta3.projects.html">projects</a> . <a href="toolresults_v1beta3.projects.histories.html">histories</a> . <a href="toolresults_v1beta3.projects.histories.executions.html">executions</a> . <a href="toolresults_v1beta3.projects.histories.executions.steps.html">steps</a> . <a href="toolresults_v1beta3.projects.histories.executions.steps.perfSampleSeries.html">perfSampleSeries</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="toolresults_v1beta3.projects.histories.executions.steps.perfSampleSeries.samples.html">samples()</a></code>
</p>
<p class="firstline">Returns the samples Resource.</p>

<p class="toc_element">
  <code><a href="#create">create(projectId, historyId, executionId, stepId, body)</a></code></p>
<p class="firstline">Creates a PerfSampleSeries.</p>
<p class="toc_element">
  <code><a href="#get">get(projectId, historyId, executionId, stepId, sampleSeriesId)</a></code></p>
<p class="firstline">Gets a PerfSampleSeries.</p>
<p class="toc_element">
  <code><a href="#list">list(projectId, historyId, executionId, stepId, filter=None)</a></code></p>
<p class="firstline">Lists PerfSampleSeries for a given Step.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(projectId, historyId, executionId, stepId, body)</code>
  <pre>Creates a PerfSampleSeries.

May return any of the following error code(s): - ALREADY_EXISTS - PerfMetricSummary already exists for the given Step - NOT_FOUND - The containing Step does not exist

Args:
  projectId: string, The cloud project (required)
  historyId: string, A tool results history ID. (required)
  executionId: string, A tool results execution ID. (required)
  stepId: string, A tool results step ID. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Resource representing a collection of performance samples (or data points)
    "stepId": "A String", # A tool results step ID.
    "projectId": "A String", # The cloud project
    "sampleSeriesId": "A String", # A sample series id
    "historyId": "A String", # A tool results history ID.
    "executionId": "A String", # A tool results execution ID.
    "basicPerfSampleSeries": { # Encapsulates the metadata for basic sample series represented by a line chart # Basic series represented by a line chart
      "sampleSeriesLabel": "A String",
      "perfUnit": "A String",
      "perfMetricType": "A String",
    },
  }


Returns:
  An object of the form:

    { # Resource representing a collection of performance samples (or data points)
      "stepId": "A String", # A tool results step ID.
      "projectId": "A String", # The cloud project
      "sampleSeriesId": "A String", # A sample series id
      "historyId": "A String", # A tool results history ID.
      "executionId": "A String", # A tool results execution ID.
      "basicPerfSampleSeries": { # Encapsulates the metadata for basic sample series represented by a line chart # Basic series represented by a line chart
        "sampleSeriesLabel": "A String",
        "perfUnit": "A String",
        "perfMetricType": "A String",
      },
    }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(projectId, historyId, executionId, stepId, sampleSeriesId)</code>
  <pre>Gets a PerfSampleSeries.

May return any of the following error code(s): - NOT_FOUND - The specified PerfSampleSeries does not exist

Args:
  projectId: string, The cloud project (required)
  historyId: string, A tool results history ID. (required)
  executionId: string, A tool results execution ID. (required)
  stepId: string, A tool results step ID. (required)
  sampleSeriesId: string, A sample series id (required)

Returns:
  An object of the form:

    { # Resource representing a collection of performance samples (or data points)
      "stepId": "A String", # A tool results step ID.
      "projectId": "A String", # The cloud project
      "sampleSeriesId": "A String", # A sample series id
      "historyId": "A String", # A tool results history ID.
      "executionId": "A String", # A tool results execution ID.
      "basicPerfSampleSeries": { # Encapsulates the metadata for basic sample series represented by a line chart # Basic series represented by a line chart
        "sampleSeriesLabel": "A String",
        "perfUnit": "A String",
        "perfMetricType": "A String",
      },
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(projectId, historyId, executionId, stepId, filter=None)</code>
  <pre>Lists PerfSampleSeries for a given Step.

The request provides an optional filter which specifies one or more PerfMetricsType to include in the result; if none returns all. The resulting PerfSampleSeries are sorted by ids.

May return any of the following canonical error codes: - NOT_FOUND - The containing Step does not exist

Args:
  projectId: string, The cloud project (required)
  historyId: string, A tool results history ID. (required)
  executionId: string, A tool results execution ID. (required)
  stepId: string, A tool results step ID. (required)
  filter: string, Specify one or more PerfMetricType values such as CPU to filter the result (repeated)
    Allowed values
      cpu - 
      graphics - 
      memory - 
      network - 
      perfMetricTypeUnspecified - 

Returns:
  An object of the form:

    {
    "perfSampleSeries": [ # The resulting PerfSampleSeries sorted by id
      { # Resource representing a collection of performance samples (or data points)
          "stepId": "A String", # A tool results step ID.
          "projectId": "A String", # The cloud project
          "sampleSeriesId": "A String", # A sample series id
          "historyId": "A String", # A tool results history ID.
          "executionId": "A String", # A tool results execution ID.
          "basicPerfSampleSeries": { # Encapsulates the metadata for basic sample series represented by a line chart # Basic series represented by a line chart
            "sampleSeriesLabel": "A String",
            "perfUnit": "A String",
            "perfMetricType": "A String",
          },
        },
    ],
  }</pre>
</div>

</body></html>