Regen all docs. (#700)

* Stop recursing if discovery == {}

* Generate docs with 'make docs'.
diff --git a/docs/dyn/cloudtrace_v2.projects.traces.html b/docs/dyn/cloudtrace_v2.projects.traces.html
new file mode 100644
index 0000000..4238f2d
--- /dev/null
+++ b/docs/dyn/cloudtrace_v2.projects.traces.html
@@ -0,0 +1,427 @@
+<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="cloudtrace_v2.html">Stackdriver Trace API</a> . <a href="cloudtrace_v2.projects.html">projects</a> . <a href="cloudtrace_v2.projects.traces.html">traces</a></h1>
+<h2>Instance Methods</h2>
+<p class="toc_element">
+  <code><a href="cloudtrace_v2.projects.traces.spans.html">spans()</a></code>
+</p>
+<p class="firstline">Returns the spans Resource.</p>
+
+<p class="toc_element">
+  <code><a href="#batchWrite">batchWrite(name, body, x__xgafv=None)</a></code></p>
+<p class="firstline">Sends new spans to new or existing traces. You cannot update</p>
+<h3>Method Details</h3>
+<div class="method">
+    <code class="details" id="batchWrite">batchWrite(name, body, x__xgafv=None)</code>
+  <pre>Sends new spans to new or existing traces. You cannot update
+existing spans.
+
+Args:
+  name: string, Required. The name of the project where the spans belong. The format is
+`projects/[PROJECT_ID]`. (required)
+  body: object, The request body. (required)
+    The object takes the form of:
+
+{ # The request message for the `BatchWriteSpans` method.
+    "spans": [ # A list of new spans. The span names must not match existing
+        # spans, or the results are undefined.
+      { # A span represents a single operation within a trace. Spans can be
+          # nested to form a trace tree. Often, a trace contains a root span
+          # that describes the end-to-end latency, and one or more subspans for
+          # its sub-operations. A trace can also contain multiple root spans,
+          # or none at all. Spans do not need to be contiguous&mdash;there may be
+          # gaps or overlaps between spans in a trace.
+        "status": { # The `Status` type defines a logical error model that is suitable for # An optional final status for this span.
+            # different programming environments, including REST APIs and RPC APIs. It is
+            # used by [gRPC](https://github.com/grpc). Each `Status` message contains
+            # three pieces of data: error code, error message, and error details.
+            #
+            # You can find out more about this error model and how to work with it in the
+            # [API Design Guide](https://cloud.google.com/apis/design/errors).
+          "message": "A String", # A developer-facing error message, which should be in English. Any
+              # user-facing error message should be localized and sent in the
+              # google.rpc.Status.details field, or localized by the client.
+          "code": 42, # The status code, which should be an enum value of google.rpc.Code.
+          "details": [ # A list of messages that carry the error details.  There is a common set of
+              # message types for APIs to use.
+            {
+              "a_key": "", # Properties of the object. Contains field @type with type URL.
+            },
+          ],
+        },
+        "stackTrace": { # A call stack appearing in a trace. # Stack trace captured at the start of the span.
+          "stackTraceHashId": "A String", # The hash ID is used to conserve network bandwidth for duplicate
+              # stack traces within a single trace.
+              #
+              # Often multiple spans will have identical stack traces.
+              # The first occurrence of a stack trace should contain both the
+              # `stackFrame` content and a value in `stackTraceHashId`.
+              #
+              # Subsequent spans within the same request can refer
+              # to that stack trace by only setting `stackTraceHashId`.
+          "stackFrames": { # A collection of stack frames, which can be truncated. # Stack frames in this stack trace. A maximum of 128 frames are allowed.
+            "frame": [ # Stack frames in this call stack.
+              { # Represents a single stack frame in a stack trace.
+                "columnNumber": "A String", # The column number where the function call appears, if available.
+                    # This is important in JavaScript because of its anonymous functions.
+                "functionName": { # Represents a string that might be shortened to a specified length. # The fully-qualified name that uniquely identifies the function or
+                    # method that is active in this frame (up to 1024 bytes).
+                  "value": "A String", # The shortened string. For example, if the original string is 500
+                      # bytes long and the limit of the string is 128 bytes, then
+                      # `value` contains the first 128 bytes of the 500-byte string.
+                      #
+                      # Truncation always happens on a UTF8 character boundary. If there
+                      # are multi-byte characters in the string, then the length of the
+                      # shortened string might be less than the size limit.
+                  "truncatedByteCount": 42, # The number of bytes removed from the original string. If this
+                      # value is 0, then the string was not shortened.
+                },
+                "fileName": { # Represents a string that might be shortened to a specified length. # The name of the source file where the function call appears (up to 256
+                    # bytes).
+                  "value": "A String", # The shortened string. For example, if the original string is 500
+                      # bytes long and the limit of the string is 128 bytes, then
+                      # `value` contains the first 128 bytes of the 500-byte string.
+                      #
+                      # Truncation always happens on a UTF8 character boundary. If there
+                      # are multi-byte characters in the string, then the length of the
+                      # shortened string might be less than the size limit.
+                  "truncatedByteCount": 42, # The number of bytes removed from the original string. If this
+                      # value is 0, then the string was not shortened.
+                },
+                "sourceVersion": { # Represents a string that might be shortened to a specified length. # The version of the deployed source code (up to 128 bytes).
+                  "value": "A String", # The shortened string. For example, if the original string is 500
+                      # bytes long and the limit of the string is 128 bytes, then
+                      # `value` contains the first 128 bytes of the 500-byte string.
+                      #
+                      # Truncation always happens on a UTF8 character boundary. If there
+                      # are multi-byte characters in the string, then the length of the
+                      # shortened string might be less than the size limit.
+                  "truncatedByteCount": 42, # The number of bytes removed from the original string. If this
+                      # value is 0, then the string was not shortened.
+                },
+                "loadModule": { # Binary module. # The binary module from where the code was loaded.
+                  "buildId": { # Represents a string that might be shortened to a specified length. # A unique identifier for the module, usually a hash of its
+                      # contents (up to 128 bytes).
+                    "value": "A String", # The shortened string. For example, if the original string is 500
+                        # bytes long and the limit of the string is 128 bytes, then
+                        # `value` contains the first 128 bytes of the 500-byte string.
+                        #
+                        # Truncation always happens on a UTF8 character boundary. If there
+                        # are multi-byte characters in the string, then the length of the
+                        # shortened string might be less than the size limit.
+                    "truncatedByteCount": 42, # The number of bytes removed from the original string. If this
+                        # value is 0, then the string was not shortened.
+                  },
+                  "module": { # Represents a string that might be shortened to a specified length. # For example: main binary, kernel modules, and dynamic libraries
+                      # such as libc.so, sharedlib.so (up to 256 bytes).
+                    "value": "A String", # The shortened string. For example, if the original string is 500
+                        # bytes long and the limit of the string is 128 bytes, then
+                        # `value` contains the first 128 bytes of the 500-byte string.
+                        #
+                        # Truncation always happens on a UTF8 character boundary. If there
+                        # are multi-byte characters in the string, then the length of the
+                        # shortened string might be less than the size limit.
+                    "truncatedByteCount": 42, # The number of bytes removed from the original string. If this
+                        # value is 0, then the string was not shortened.
+                  },
+                },
+                "lineNumber": "A String", # The line number in `file_name` where the function call appears.
+                "originalFunctionName": { # Represents a string that might be shortened to a specified length. # An un-mangled function name, if `function_name` is
+                    # [mangled](http://www.avabodh.com/cxxin/namemangling.html). The name can
+                    # be fully-qualified (up to 1024 bytes).
+                  "value": "A String", # The shortened string. For example, if the original string is 500
+                      # bytes long and the limit of the string is 128 bytes, then
+                      # `value` contains the first 128 bytes of the 500-byte string.
+                      #
+                      # Truncation always happens on a UTF8 character boundary. If there
+                      # are multi-byte characters in the string, then the length of the
+                      # shortened string might be less than the size limit.
+                  "truncatedByteCount": 42, # The number of bytes removed from the original string. If this
+                      # value is 0, then the string was not shortened.
+                },
+              },
+            ],
+            "droppedFramesCount": 42, # The number of stack frames that were dropped because there
+                # were too many stack frames.
+                # If this value is 0, then no stack frames were dropped.
+          },
+        },
+        "displayName": { # Represents a string that might be shortened to a specified length. # A description of the span's operation (up to 128 bytes).
+            # Stackdriver Trace displays the description in the
+            # Google Cloud Platform Console.
+            # For example, the display name can be a qualified method name or a file name
+            # and a line number where the operation is called. A best practice is to use
+            # the same display name within an application and at the same call point.
+            # This makes it easier to correlate spans in different traces.
+          "value": "A String", # The shortened string. For example, if the original string is 500
+              # bytes long and the limit of the string is 128 bytes, then
+              # `value` contains the first 128 bytes of the 500-byte string.
+              #
+              # Truncation always happens on a UTF8 character boundary. If there
+              # are multi-byte characters in the string, then the length of the
+              # shortened string might be less than the size limit.
+          "truncatedByteCount": 42, # The number of bytes removed from the original string. If this
+              # value is 0, then the string was not shortened.
+        },
+        "name": "A String", # The resource name of the span in the following format:
+            #
+            #     projects/[PROJECT_ID]/traces/[TRACE_ID]/spans/SPAN_ID is a unique identifier for a trace within a project;
+            # it is a 32-character hexadecimal encoding of a 16-byte array.
+            #
+            # [SPAN_ID] is a unique identifier for a span within a trace; it
+            # is a 16-character hexadecimal encoding of an 8-byte array.
+        "links": { # A collection of links, which are references from this span to a span # Links associated with the span. You can have up to 128 links per Span.
+            # in the same or different trace.
+          "droppedLinksCount": 42, # The number of dropped links after the maximum size was enforced. If
+              # this value is 0, then no links were dropped.
+          "link": [ # A collection of links.
+            { # A pointer from the current span to another span in the same trace or in a
+                # different trace. For example, this can be used in batching operations,
+                # where a single batch handler processes multiple requests from different
+                # traces or when the handler receives a request from a different project.
+              "attributes": { # A set of attributes, each in the format `[KEY]:[VALUE]`. # A set of attributes on the link. You have have up to  32 attributes per
+                  # link.
+                "droppedAttributesCount": 42, # The number of attributes that were discarded. Attributes can be discarded
+                    # because their keys are too long or because there are too many attributes.
+                    # If this value is 0 then all attributes are valid.
+                "attributeMap": { # The set of attributes. Each attribute's key can be up to 128 bytes
+                    # long. The value can be a string up to 256 bytes, a signed 64-bit integer,
+                    # or the Boolean values `true` and `false`. For example:
+                    #
+                    #     "/instance_id": "my-instance"
+                    #     "/http/user_agent": ""
+                    #     "/http/request_bytes": 300
+                    #     "abc.com/myattribute": true
+                  "a_key": { # The allowed types for [VALUE] in a `[KEY]:[VALUE]` attribute.
+                    "stringValue": { # Represents a string that might be shortened to a specified length. # A string up to 256 bytes long.
+                      "value": "A String", # The shortened string. For example, if the original string is 500
+                          # bytes long and the limit of the string is 128 bytes, then
+                          # `value` contains the first 128 bytes of the 500-byte string.
+                          #
+                          # Truncation always happens on a UTF8 character boundary. If there
+                          # are multi-byte characters in the string, then the length of the
+                          # shortened string might be less than the size limit.
+                      "truncatedByteCount": 42, # The number of bytes removed from the original string. If this
+                          # value is 0, then the string was not shortened.
+                    },
+                    "boolValue": True or False, # A Boolean value represented by `true` or `false`.
+                    "intValue": "A String", # A 64-bit signed integer.
+                  },
+                },
+              },
+              "traceId": "A String", # The [TRACE_ID] for a trace within a project.
+              "type": "A String", # The relationship of the current span relative to the linked span.
+              "spanId": "A String", # The [SPAN_ID] for a span within a trace.
+            },
+          ],
+        },
+        "childSpanCount": 42, # An optional number of child spans that were generated while this span
+            # was active. If set, allows implementation to detect missing child spans.
+        "parentSpanId": "A String", # The [SPAN_ID] of this span's parent span. If this is a root span,
+            # then this field must be empty.
+        "startTime": "A String", # The start time of the span. On the client side, this is the time kept by
+            # the local machine where the span execution starts. On the server side, this
+            # is the time when the server's application handler starts running.
+        "attributes": { # A set of attributes, each in the format `[KEY]:[VALUE]`. # A set of attributes on the span. You can have up to 32 attributes per
+            # span.
+          "droppedAttributesCount": 42, # The number of attributes that were discarded. Attributes can be discarded
+              # because their keys are too long or because there are too many attributes.
+              # If this value is 0 then all attributes are valid.
+          "attributeMap": { # The set of attributes. Each attribute's key can be up to 128 bytes
+              # long. The value can be a string up to 256 bytes, a signed 64-bit integer,
+              # or the Boolean values `true` and `false`. For example:
+              #
+              #     "/instance_id": "my-instance"
+              #     "/http/user_agent": ""
+              #     "/http/request_bytes": 300
+              #     "abc.com/myattribute": true
+            "a_key": { # The allowed types for [VALUE] in a `[KEY]:[VALUE]` attribute.
+              "stringValue": { # Represents a string that might be shortened to a specified length. # A string up to 256 bytes long.
+                "value": "A String", # The shortened string. For example, if the original string is 500
+                    # bytes long and the limit of the string is 128 bytes, then
+                    # `value` contains the first 128 bytes of the 500-byte string.
+                    #
+                    # Truncation always happens on a UTF8 character boundary. If there
+                    # are multi-byte characters in the string, then the length of the
+                    # shortened string might be less than the size limit.
+                "truncatedByteCount": 42, # The number of bytes removed from the original string. If this
+                    # value is 0, then the string was not shortened.
+              },
+              "boolValue": True or False, # A Boolean value represented by `true` or `false`.
+              "intValue": "A String", # A 64-bit signed integer.
+            },
+          },
+        },
+        "spanId": "A String", # The [SPAN_ID] portion of the span's resource name.
+        "timeEvents": { # A collection of `TimeEvent`s. A `TimeEvent` is a time-stamped annotation # A set of time events. You can have up to 32 annotations and 128 message
+            # events per span.
+            # on the span, consisting of either user-supplied key:value pairs, or
+            # details of a message sent/received between Spans.
+          "droppedMessageEventsCount": 42, # The number of dropped message events in all the included time events.
+              # If the value is 0, then no message events were dropped.
+          "timeEvent": [ # A collection of `TimeEvent`s.
+            { # A time-stamped annotation or message event in the Span.
+              "messageEvent": { # An event describing a message sent/received between Spans. # An event describing a message sent/received between Spans.
+                "uncompressedSizeBytes": "A String", # The number of uncompressed bytes sent or received.
+                "type": "A String", # Type of MessageEvent. Indicates whether the message was sent or
+                    # received.
+                "id": "A String", # An identifier for the MessageEvent's message that can be used to match
+                    # SENT and RECEIVED MessageEvents. It is recommended to be unique within
+                    # a Span.
+                "compressedSizeBytes": "A String", # The number of compressed bytes sent or received. If missing assumed to
+                    # be the same size as uncompressed.
+              },
+              "annotation": { # Text annotation with a set of attributes. # Text annotation with a set of attributes.
+                "attributes": { # A set of attributes, each in the format `[KEY]:[VALUE]`. # A set of attributes on the annotation. You can have up to 4 attributes
+                    # per Annotation.
+                  "droppedAttributesCount": 42, # The number of attributes that were discarded. Attributes can be discarded
+                      # because their keys are too long or because there are too many attributes.
+                      # If this value is 0 then all attributes are valid.
+                  "attributeMap": { # The set of attributes. Each attribute's key can be up to 128 bytes
+                      # long. The value can be a string up to 256 bytes, a signed 64-bit integer,
+                      # or the Boolean values `true` and `false`. For example:
+                      #
+                      #     "/instance_id": "my-instance"
+                      #     "/http/user_agent": ""
+                      #     "/http/request_bytes": 300
+                      #     "abc.com/myattribute": true
+                    "a_key": { # The allowed types for [VALUE] in a `[KEY]:[VALUE]` attribute.
+                      "stringValue": { # Represents a string that might be shortened to a specified length. # A string up to 256 bytes long.
+                        "value": "A String", # The shortened string. For example, if the original string is 500
+                            # bytes long and the limit of the string is 128 bytes, then
+                            # `value` contains the first 128 bytes of the 500-byte string.
+                            #
+                            # Truncation always happens on a UTF8 character boundary. If there
+                            # are multi-byte characters in the string, then the length of the
+                            # shortened string might be less than the size limit.
+                        "truncatedByteCount": 42, # The number of bytes removed from the original string. If this
+                            # value is 0, then the string was not shortened.
+                      },
+                      "boolValue": True or False, # A Boolean value represented by `true` or `false`.
+                      "intValue": "A String", # A 64-bit signed integer.
+                    },
+                  },
+                },
+                "description": { # Represents a string that might be shortened to a specified length. # A user-supplied message describing the event. The maximum length for
+                    # the description is 256 bytes.
+                  "value": "A String", # The shortened string. For example, if the original string is 500
+                      # bytes long and the limit of the string is 128 bytes, then
+                      # `value` contains the first 128 bytes of the 500-byte string.
+                      #
+                      # Truncation always happens on a UTF8 character boundary. If there
+                      # are multi-byte characters in the string, then the length of the
+                      # shortened string might be less than the size limit.
+                  "truncatedByteCount": 42, # The number of bytes removed from the original string. If this
+                      # value is 0, then the string was not shortened.
+                },
+              },
+              "time": "A String", # The timestamp indicating the time the event occurred.
+            },
+          ],
+          "droppedAnnotationsCount": 42, # The number of dropped annotations in all the included time events.
+              # If the value is 0, then no annotations were dropped.
+        },
+        "endTime": "A String", # The end time of the span. On the client side, this is the time kept by
+            # the local machine where the span execution ends. On the server side, this
+            # is the time when the server application handler stops running.
+        "sameProcessAsParentSpan": True or False, # (Optional) Set this parameter to indicate whether this span is in
+            # the same process as its parent. If you do not set this parameter,
+            # Stackdriver Trace is unable to take advantage of this helpful
+            # information.
+      },
+    ],
+  }
+
+  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>
+
+</body></html>
\ No newline at end of file