diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,28 @@
+# gogol-cloudmonitoring
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`0.1.0`
+
+
+## Description
+
+A client library for the Google Cloud Monitoring.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/gogol/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `gogol-gen` for more information.
+
+
+## Licence
+
+`gogol-cloudmonitoring` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import           Distribution.Simple
+main = defaultMain
diff --git a/gen/Network/Google/CloudMonitoring.hs b/gen/Network/Google/CloudMonitoring.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudMonitoring.hs
@@ -0,0 +1,229 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE TypeOperators     #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- |
+-- Module      : Network.Google.CloudMonitoring
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Accesses Google Cloud Monitoring data.
+--
+-- /See:/ <https://cloud.google.com/monitoring/v2beta2/ Cloud Monitoring API Reference>
+module Network.Google.CloudMonitoring
+    (
+    -- * Service Configuration
+      cloudMonitoringService
+
+    -- * OAuth Scopes
+    , cloudPlatformScope
+    , monitoringScope
+
+    -- * API Declaration
+    , CloudMonitoringAPI
+
+    -- * Resources
+
+    -- ** cloudmonitoring.metricDescriptors.create
+    , module Network.Google.Resource.CloudMonitoring.MetricDescriptors.Create
+
+    -- ** cloudmonitoring.metricDescriptors.delete
+    , module Network.Google.Resource.CloudMonitoring.MetricDescriptors.Delete
+
+    -- ** cloudmonitoring.metricDescriptors.list
+    , module Network.Google.Resource.CloudMonitoring.MetricDescriptors.List
+
+    -- ** cloudmonitoring.timeseries.list
+    , module Network.Google.Resource.CloudMonitoring.Timeseries.List
+
+    -- ** cloudmonitoring.timeseries.write
+    , module Network.Google.Resource.CloudMonitoring.Timeseries.Write
+
+    -- ** cloudmonitoring.timeseriesDescriptors.list
+    , module Network.Google.Resource.CloudMonitoring.TimeseriesDescriptors.List
+
+    -- * Types
+
+    -- ** MetricDescriptorTypeDescriptor
+    , MetricDescriptorTypeDescriptor
+    , metricDescriptorTypeDescriptor
+    , mdtdMetricType
+    , mdtdValueType
+
+    -- ** ListTimeseriesResponse
+    , ListTimeseriesResponse
+    , listTimeseriesResponse
+    , ltrNextPageToken
+    , ltrKind
+    , ltrOldest
+    , ltrYoungest
+    , ltrTimeseries
+
+    -- ** MetricDescriptor
+    , MetricDescriptor
+    , metricDescriptor
+    , mdProject
+    , mdTypeDescriptor
+    , mdName
+    , mdLabels
+    , mdDescription
+
+    -- ** WriteTimeseriesRequest
+    , WriteTimeseriesRequest
+    , writeTimeseriesRequest
+    , wtrCommonLabels
+    , wtrTimeseries
+
+    -- ** WriteTimeseriesRequestCommonLabels
+    , WriteTimeseriesRequestCommonLabels
+    , writeTimeseriesRequestCommonLabels
+    , wtrclAddtional
+
+    -- ** MetricDescriptorLabelDescriptor
+    , MetricDescriptorLabelDescriptor
+    , metricDescriptorLabelDescriptor
+    , mdldKey
+    , mdldDescription
+
+    -- ** PointDistributionUnderflowBucket
+    , PointDistributionUnderflowBucket
+    , pointDistributionUnderflowBucket
+    , pdubUpperBound
+    , pdubCount
+
+    -- ** TimeseriesListAggregator
+    , TimeseriesListAggregator (..)
+
+    -- ** ListMetricDescriptorsResponse
+    , ListMetricDescriptorsResponse
+    , listMetricDescriptorsResponse
+    , lmdrMetrics
+    , lmdrNextPageToken
+    , lmdrKind
+
+    -- ** ListTimeseriesDescriptorsRequest
+    , ListTimeseriesDescriptorsRequest
+    , listTimeseriesDescriptorsRequest
+    , ltdrKind
+
+    -- ** TimeseriesDescriptorLabels
+    , TimeseriesDescriptorLabels
+    , timeseriesDescriptorLabels
+    , tdlAddtional
+
+    -- ** PointDistributionBucket
+    , PointDistributionBucket
+    , pointDistributionBucket
+    , pdbUpperBound
+    , pdbCount
+    , pdbLowerBound
+
+    -- ** WriteTimeseriesResponse
+    , WriteTimeseriesResponse
+    , writeTimeseriesResponse
+    , wtrKind
+
+    -- ** TimeseriesDescriptorLabel
+    , TimeseriesDescriptorLabel
+    , timeseriesDescriptorLabel
+    , tdlValue
+    , tdlKey
+
+    -- ** PointDistribution
+    , PointDistribution
+    , pointDistribution
+    , pdOverflowBucket
+    , pdBuckets
+    , pdUnderflowBucket
+
+    -- ** Point
+    , Point
+    , point
+    , pBoolValue
+    , pStart
+    , pDoubleValue
+    , pStringValue
+    , pDistributionValue
+    , pEnd
+    , pInt64Value
+
+    -- ** PointDistributionOverflowBucket
+    , PointDistributionOverflowBucket
+    , pointDistributionOverflowBucket
+    , pdobCount
+    , pdobLowerBound
+
+    -- ** ListTimeseriesDescriptorsResponse
+    , ListTimeseriesDescriptorsResponse
+    , listTimeseriesDescriptorsResponse
+    , lNextPageToken
+    , lKind
+    , lOldest
+    , lYoungest
+    , lTimeseries
+
+    -- ** ListMetricDescriptorsRequest
+    , ListMetricDescriptorsRequest
+    , listMetricDescriptorsRequest
+    , lisKind
+
+    -- ** TimeseriesPoint
+    , TimeseriesPoint
+    , timeseriesPoint
+    , tpPoint
+    , tpTimeseriesDesc
+
+    -- ** TimeseriesDescriptorsListAggregator
+    , TimeseriesDescriptorsListAggregator (..)
+
+    -- ** DeleteMetricDescriptorResponse
+    , DeleteMetricDescriptorResponse
+    , deleteMetricDescriptorResponse
+    , dmdrKind
+
+    -- ** ListTimeseriesRequest
+    , ListTimeseriesRequest
+    , listTimeseriesRequest
+    , ltrtKind
+
+    -- ** TimeseriesDescriptor
+    , TimeseriesDescriptor
+    , timeseriesDescriptor
+    , tdProject
+    , tdMetric
+    , tdLabels
+
+    -- ** Timeseries
+    , Timeseries
+    , timeseries
+    , tPoints
+    , tTimeseriesDesc
+    ) where
+
+import           Network.Google.CloudMonitoring.Types
+import           Network.Google.Prelude
+import           Network.Google.Resource.CloudMonitoring.MetricDescriptors.Create
+import           Network.Google.Resource.CloudMonitoring.MetricDescriptors.Delete
+import           Network.Google.Resource.CloudMonitoring.MetricDescriptors.List
+import           Network.Google.Resource.CloudMonitoring.Timeseries.List
+import           Network.Google.Resource.CloudMonitoring.Timeseries.Write
+import           Network.Google.Resource.CloudMonitoring.TimeseriesDescriptors.List
+
+{- $resources
+TODO
+-}
+
+-- | Represents the entirety of the methods and resources available for the Cloud Monitoring API service.
+type CloudMonitoringAPI =
+     MetricDescriptorsListResource :<|>
+       MetricDescriptorsCreateResource
+       :<|> MetricDescriptorsDeleteResource
+       :<|> TimeseriesDescriptorsListResource
+       :<|> TimeseriesListResource
+       :<|> TimeseriesWriteResource
diff --git a/gen/Network/Google/CloudMonitoring/Types.hs b/gen/Network/Google/CloudMonitoring/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudMonitoring/Types.hs
@@ -0,0 +1,200 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.CloudMonitoring.Types
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.CloudMonitoring.Types
+    (
+    -- * Service Configuration
+      cloudMonitoringService
+
+    -- * OAuth Scopes
+    , cloudPlatformScope
+    , monitoringScope
+
+    -- * MetricDescriptorTypeDescriptor
+    , MetricDescriptorTypeDescriptor
+    , metricDescriptorTypeDescriptor
+    , mdtdMetricType
+    , mdtdValueType
+
+    -- * ListTimeseriesResponse
+    , ListTimeseriesResponse
+    , listTimeseriesResponse
+    , ltrNextPageToken
+    , ltrKind
+    , ltrOldest
+    , ltrYoungest
+    , ltrTimeseries
+
+    -- * MetricDescriptor
+    , MetricDescriptor
+    , metricDescriptor
+    , mdProject
+    , mdTypeDescriptor
+    , mdName
+    , mdLabels
+    , mdDescription
+
+    -- * WriteTimeseriesRequest
+    , WriteTimeseriesRequest
+    , writeTimeseriesRequest
+    , wtrCommonLabels
+    , wtrTimeseries
+
+    -- * WriteTimeseriesRequestCommonLabels
+    , WriteTimeseriesRequestCommonLabels
+    , writeTimeseriesRequestCommonLabels
+    , wtrclAddtional
+
+    -- * MetricDescriptorLabelDescriptor
+    , MetricDescriptorLabelDescriptor
+    , metricDescriptorLabelDescriptor
+    , mdldKey
+    , mdldDescription
+
+    -- * PointDistributionUnderflowBucket
+    , PointDistributionUnderflowBucket
+    , pointDistributionUnderflowBucket
+    , pdubUpperBound
+    , pdubCount
+
+    -- * TimeseriesListAggregator
+    , TimeseriesListAggregator (..)
+
+    -- * ListMetricDescriptorsResponse
+    , ListMetricDescriptorsResponse
+    , listMetricDescriptorsResponse
+    , lmdrMetrics
+    , lmdrNextPageToken
+    , lmdrKind
+
+    -- * ListTimeseriesDescriptorsRequest
+    , ListTimeseriesDescriptorsRequest
+    , listTimeseriesDescriptorsRequest
+    , ltdrKind
+
+    -- * TimeseriesDescriptorLabels
+    , TimeseriesDescriptorLabels
+    , timeseriesDescriptorLabels
+    , tdlAddtional
+
+    -- * PointDistributionBucket
+    , PointDistributionBucket
+    , pointDistributionBucket
+    , pdbUpperBound
+    , pdbCount
+    , pdbLowerBound
+
+    -- * WriteTimeseriesResponse
+    , WriteTimeseriesResponse
+    , writeTimeseriesResponse
+    , wtrKind
+
+    -- * TimeseriesDescriptorLabel
+    , TimeseriesDescriptorLabel
+    , timeseriesDescriptorLabel
+    , tdlValue
+    , tdlKey
+
+    -- * PointDistribution
+    , PointDistribution
+    , pointDistribution
+    , pdOverflowBucket
+    , pdBuckets
+    , pdUnderflowBucket
+
+    -- * Point
+    , Point
+    , point
+    , pBoolValue
+    , pStart
+    , pDoubleValue
+    , pStringValue
+    , pDistributionValue
+    , pEnd
+    , pInt64Value
+
+    -- * PointDistributionOverflowBucket
+    , PointDistributionOverflowBucket
+    , pointDistributionOverflowBucket
+    , pdobCount
+    , pdobLowerBound
+
+    -- * ListTimeseriesDescriptorsResponse
+    , ListTimeseriesDescriptorsResponse
+    , listTimeseriesDescriptorsResponse
+    , lNextPageToken
+    , lKind
+    , lOldest
+    , lYoungest
+    , lTimeseries
+
+    -- * ListMetricDescriptorsRequest
+    , ListMetricDescriptorsRequest
+    , listMetricDescriptorsRequest
+    , lisKind
+
+    -- * TimeseriesPoint
+    , TimeseriesPoint
+    , timeseriesPoint
+    , tpPoint
+    , tpTimeseriesDesc
+
+    -- * TimeseriesDescriptorsListAggregator
+    , TimeseriesDescriptorsListAggregator (..)
+
+    -- * DeleteMetricDescriptorResponse
+    , DeleteMetricDescriptorResponse
+    , deleteMetricDescriptorResponse
+    , dmdrKind
+
+    -- * ListTimeseriesRequest
+    , ListTimeseriesRequest
+    , listTimeseriesRequest
+    , ltrtKind
+
+    -- * TimeseriesDescriptor
+    , TimeseriesDescriptor
+    , timeseriesDescriptor
+    , tdProject
+    , tdMetric
+    , tdLabels
+
+    -- * Timeseries
+    , Timeseries
+    , timeseries
+    , tPoints
+    , tTimeseriesDesc
+    ) where
+
+import           Network.Google.CloudMonitoring.Types.Product
+import           Network.Google.CloudMonitoring.Types.Sum
+import           Network.Google.Prelude
+
+-- | Default request referring to version 'v2beta2' of the Cloud Monitoring API. This contains the host and root path used as a starting point for constructing service requests.
+cloudMonitoringService :: ServiceConfig
+cloudMonitoringService
+  = defaultService
+      (ServiceId "cloudmonitoring:v2beta2")
+      "www.googleapis.com"
+
+-- | View and manage your data across Google Cloud Platform services
+cloudPlatformScope :: Proxy '["https://www.googleapis.com/auth/cloud-platform"]
+cloudPlatformScope = Proxy;
+
+-- | View and write monitoring data for all of your Google and third-party
+-- Cloud and API projects
+monitoringScope :: Proxy '["https://www.googleapis.com/auth/monitoring"]
+monitoringScope = Proxy;
diff --git a/gen/Network/Google/CloudMonitoring/Types/Product.hs b/gen/Network/Google/CloudMonitoring/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudMonitoring/Types/Product.hs
@@ -0,0 +1,1333 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.CloudMonitoring.Types.Product
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.CloudMonitoring.Types.Product where
+
+import           Network.Google.CloudMonitoring.Types.Sum
+import           Network.Google.Prelude
+
+-- | A type in a metric contains information about how the metric is
+-- collected and what its data points look like.
+--
+-- /See:/ 'metricDescriptorTypeDescriptor' smart constructor.
+data MetricDescriptorTypeDescriptor = MetricDescriptorTypeDescriptor'
+    { _mdtdMetricType :: !(Maybe Text)
+    , _mdtdValueType  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MetricDescriptorTypeDescriptor' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mdtdMetricType'
+--
+-- * 'mdtdValueType'
+metricDescriptorTypeDescriptor
+    :: MetricDescriptorTypeDescriptor
+metricDescriptorTypeDescriptor =
+    MetricDescriptorTypeDescriptor'
+    { _mdtdMetricType = Nothing
+    , _mdtdValueType = Nothing
+    }
+
+-- | The method of collecting data for the metric. See Metric types.
+mdtdMetricType :: Lens' MetricDescriptorTypeDescriptor (Maybe Text)
+mdtdMetricType
+  = lens _mdtdMetricType
+      (\ s a -> s{_mdtdMetricType = a})
+
+-- | The data type of of individual points in the metric\'s time series. See
+-- Metric value types.
+mdtdValueType :: Lens' MetricDescriptorTypeDescriptor (Maybe Text)
+mdtdValueType
+  = lens _mdtdValueType
+      (\ s a -> s{_mdtdValueType = a})
+
+instance FromJSON MetricDescriptorTypeDescriptor
+         where
+        parseJSON
+          = withObject "MetricDescriptorTypeDescriptor"
+              (\ o ->
+                 MetricDescriptorTypeDescriptor' <$>
+                   (o .:? "metricType") <*> (o .:? "valueType"))
+
+instance ToJSON MetricDescriptorTypeDescriptor where
+        toJSON MetricDescriptorTypeDescriptor'{..}
+          = object
+              (catMaybes
+                 [("metricType" .=) <$> _mdtdMetricType,
+                  ("valueType" .=) <$> _mdtdValueType])
+
+-- | The response of cloudmonitoring.timeseries.list
+--
+-- /See:/ 'listTimeseriesResponse' smart constructor.
+data ListTimeseriesResponse = ListTimeseriesResponse'
+    { _ltrNextPageToken :: !(Maybe Text)
+    , _ltrKind          :: !Text
+    , _ltrOldest        :: !(Maybe DateTime')
+    , _ltrYoungest      :: !(Maybe DateTime')
+    , _ltrTimeseries    :: !(Maybe [Timeseries])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTimeseriesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltrNextPageToken'
+--
+-- * 'ltrKind'
+--
+-- * 'ltrOldest'
+--
+-- * 'ltrYoungest'
+--
+-- * 'ltrTimeseries'
+listTimeseriesResponse
+    :: ListTimeseriesResponse
+listTimeseriesResponse =
+    ListTimeseriesResponse'
+    { _ltrNextPageToken = Nothing
+    , _ltrKind = "cloudmonitoring#listTimeseriesResponse"
+    , _ltrOldest = Nothing
+    , _ltrYoungest = Nothing
+    , _ltrTimeseries = Nothing
+    }
+
+-- | Pagination token. If present, indicates that additional results are
+-- available for retrieval. To access the results past the pagination
+-- limit, set the pageToken query parameter to this value. All of the
+-- points of a time series will be returned before returning any point of
+-- the subsequent time series.
+ltrNextPageToken :: Lens' ListTimeseriesResponse (Maybe Text)
+ltrNextPageToken
+  = lens _ltrNextPageToken
+      (\ s a -> s{_ltrNextPageToken = a})
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"cloudmonitoring#listTimeseriesResponse\".
+ltrKind :: Lens' ListTimeseriesResponse Text
+ltrKind = lens _ltrKind (\ s a -> s{_ltrKind = a})
+
+-- | The oldest timestamp of the interval of this query as an RFC 3339
+-- string.
+ltrOldest :: Lens' ListTimeseriesResponse (Maybe UTCTime)
+ltrOldest
+  = lens _ltrOldest (\ s a -> s{_ltrOldest = a}) .
+      mapping _DateTime
+
+-- | The youngest timestamp of the interval of this query as an RFC 3339
+-- string.
+ltrYoungest :: Lens' ListTimeseriesResponse (Maybe UTCTime)
+ltrYoungest
+  = lens _ltrYoungest (\ s a -> s{_ltrYoungest = a}) .
+      mapping _DateTime
+
+-- | The returned time series.
+ltrTimeseries :: Lens' ListTimeseriesResponse [Timeseries]
+ltrTimeseries
+  = lens _ltrTimeseries
+      (\ s a -> s{_ltrTimeseries = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON ListTimeseriesResponse where
+        parseJSON
+          = withObject "ListTimeseriesResponse"
+              (\ o ->
+                 ListTimeseriesResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!=
+                        "cloudmonitoring#listTimeseriesResponse")
+                     <*> (o .:? "oldest")
+                     <*> (o .:? "youngest")
+                     <*> (o .:? "timeseries" .!= mempty))
+
+instance ToJSON ListTimeseriesResponse where
+        toJSON ListTimeseriesResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _ltrNextPageToken,
+                  Just ("kind" .= _ltrKind),
+                  ("oldest" .=) <$> _ltrOldest,
+                  ("youngest" .=) <$> _ltrYoungest,
+                  ("timeseries" .=) <$> _ltrTimeseries])
+
+-- | A metricDescriptor defines the name, label keys, and data type of a
+-- particular metric.
+--
+-- /See:/ 'metricDescriptor' smart constructor.
+data MetricDescriptor = MetricDescriptor'
+    { _mdProject        :: !(Maybe Text)
+    , _mdTypeDescriptor :: !(Maybe MetricDescriptorTypeDescriptor)
+    , _mdName           :: !(Maybe Text)
+    , _mdLabels         :: !(Maybe [MetricDescriptorLabelDescriptor])
+    , _mdDescription    :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MetricDescriptor' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mdProject'
+--
+-- * 'mdTypeDescriptor'
+--
+-- * 'mdName'
+--
+-- * 'mdLabels'
+--
+-- * 'mdDescription'
+metricDescriptor
+    :: MetricDescriptor
+metricDescriptor =
+    MetricDescriptor'
+    { _mdProject = Nothing
+    , _mdTypeDescriptor = Nothing
+    , _mdName = Nothing
+    , _mdLabels = Nothing
+    , _mdDescription = Nothing
+    }
+
+-- | The project ID to which the metric belongs.
+mdProject :: Lens' MetricDescriptor (Maybe Text)
+mdProject
+  = lens _mdProject (\ s a -> s{_mdProject = a})
+
+-- | Type description for this metric.
+mdTypeDescriptor :: Lens' MetricDescriptor (Maybe MetricDescriptorTypeDescriptor)
+mdTypeDescriptor
+  = lens _mdTypeDescriptor
+      (\ s a -> s{_mdTypeDescriptor = a})
+
+-- | The name of this metric.
+mdName :: Lens' MetricDescriptor (Maybe Text)
+mdName = lens _mdName (\ s a -> s{_mdName = a})
+
+-- | Labels defined for this metric.
+mdLabels :: Lens' MetricDescriptor [MetricDescriptorLabelDescriptor]
+mdLabels
+  = lens _mdLabels (\ s a -> s{_mdLabels = a}) .
+      _Default
+      . _Coerce
+
+-- | Description of this metric.
+mdDescription :: Lens' MetricDescriptor (Maybe Text)
+mdDescription
+  = lens _mdDescription
+      (\ s a -> s{_mdDescription = a})
+
+instance FromJSON MetricDescriptor where
+        parseJSON
+          = withObject "MetricDescriptor"
+              (\ o ->
+                 MetricDescriptor' <$>
+                   (o .:? "project") <*> (o .:? "typeDescriptor") <*>
+                     (o .:? "name")
+                     <*> (o .:? "labels" .!= mempty)
+                     <*> (o .:? "description"))
+
+instance ToJSON MetricDescriptor where
+        toJSON MetricDescriptor'{..}
+          = object
+              (catMaybes
+                 [("project" .=) <$> _mdProject,
+                  ("typeDescriptor" .=) <$> _mdTypeDescriptor,
+                  ("name" .=) <$> _mdName, ("labels" .=) <$> _mdLabels,
+                  ("description" .=) <$> _mdDescription])
+
+-- | The request of cloudmonitoring.timeseries.write
+--
+-- /See:/ 'writeTimeseriesRequest' smart constructor.
+data WriteTimeseriesRequest = WriteTimeseriesRequest'
+    { _wtrCommonLabels :: !(Maybe WriteTimeseriesRequestCommonLabels)
+    , _wtrTimeseries   :: !(Maybe [TimeseriesPoint])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'WriteTimeseriesRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wtrCommonLabels'
+--
+-- * 'wtrTimeseries'
+writeTimeseriesRequest
+    :: WriteTimeseriesRequest
+writeTimeseriesRequest =
+    WriteTimeseriesRequest'
+    { _wtrCommonLabels = Nothing
+    , _wtrTimeseries = Nothing
+    }
+
+-- | The label\'s name.
+wtrCommonLabels :: Lens' WriteTimeseriesRequest (Maybe WriteTimeseriesRequestCommonLabels)
+wtrCommonLabels
+  = lens _wtrCommonLabels
+      (\ s a -> s{_wtrCommonLabels = a})
+
+-- | Provide time series specific labels and the data points for each time
+-- series. The labels in timeseries and the common_labels should form a
+-- complete list of labels that required by the metric.
+wtrTimeseries :: Lens' WriteTimeseriesRequest [TimeseriesPoint]
+wtrTimeseries
+  = lens _wtrTimeseries
+      (\ s a -> s{_wtrTimeseries = a})
+      . _Default
+      . _Coerce
+
+instance FromJSON WriteTimeseriesRequest where
+        parseJSON
+          = withObject "WriteTimeseriesRequest"
+              (\ o ->
+                 WriteTimeseriesRequest' <$>
+                   (o .:? "commonLabels") <*>
+                     (o .:? "timeseries" .!= mempty))
+
+instance ToJSON WriteTimeseriesRequest where
+        toJSON WriteTimeseriesRequest'{..}
+          = object
+              (catMaybes
+                 [("commonLabels" .=) <$> _wtrCommonLabels,
+                  ("timeseries" .=) <$> _wtrTimeseries])
+
+-- | The label\'s name.
+--
+-- /See:/ 'writeTimeseriesRequestCommonLabels' smart constructor.
+newtype WriteTimeseriesRequestCommonLabels = WriteTimeseriesRequestCommonLabels'
+    { _wtrclAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'WriteTimeseriesRequestCommonLabels' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wtrclAddtional'
+writeTimeseriesRequestCommonLabels
+    :: HashMap Text Text -- ^ 'wtrclAddtional'
+    -> WriteTimeseriesRequestCommonLabels
+writeTimeseriesRequestCommonLabels pWtrclAddtional_ =
+    WriteTimeseriesRequestCommonLabels'
+    { _wtrclAddtional = _Coerce # pWtrclAddtional_
+    }
+
+-- | The label\'s name.
+wtrclAddtional :: Lens' WriteTimeseriesRequestCommonLabels (HashMap Text Text)
+wtrclAddtional
+  = lens _wtrclAddtional
+      (\ s a -> s{_wtrclAddtional = a})
+      . _Coerce
+
+instance FromJSON WriteTimeseriesRequestCommonLabels
+         where
+        parseJSON
+          = withObject "WriteTimeseriesRequestCommonLabels"
+              (\ o ->
+                 WriteTimeseriesRequestCommonLabels' <$>
+                   (parseJSONObject o))
+
+instance ToJSON WriteTimeseriesRequestCommonLabels
+         where
+        toJSON = toJSON . _wtrclAddtional
+
+-- | A label in a metric is a description of this metric, including the key
+-- of this description (what the description is), and the value for this
+-- description.
+--
+-- /See:/ 'metricDescriptorLabelDescriptor' smart constructor.
+data MetricDescriptorLabelDescriptor = MetricDescriptorLabelDescriptor'
+    { _mdldKey         :: !(Maybe Text)
+    , _mdldDescription :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MetricDescriptorLabelDescriptor' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mdldKey'
+--
+-- * 'mdldDescription'
+metricDescriptorLabelDescriptor
+    :: MetricDescriptorLabelDescriptor
+metricDescriptorLabelDescriptor =
+    MetricDescriptorLabelDescriptor'
+    { _mdldKey = Nothing
+    , _mdldDescription = Nothing
+    }
+
+-- | Label key.
+mdldKey :: Lens' MetricDescriptorLabelDescriptor (Maybe Text)
+mdldKey = lens _mdldKey (\ s a -> s{_mdldKey = a})
+
+-- | Label description.
+mdldDescription :: Lens' MetricDescriptorLabelDescriptor (Maybe Text)
+mdldDescription
+  = lens _mdldDescription
+      (\ s a -> s{_mdldDescription = a})
+
+instance FromJSON MetricDescriptorLabelDescriptor
+         where
+        parseJSON
+          = withObject "MetricDescriptorLabelDescriptor"
+              (\ o ->
+                 MetricDescriptorLabelDescriptor' <$>
+                   (o .:? "key") <*> (o .:? "description"))
+
+instance ToJSON MetricDescriptorLabelDescriptor where
+        toJSON MetricDescriptorLabelDescriptor'{..}
+          = object
+              (catMaybes
+                 [("key" .=) <$> _mdldKey,
+                  ("description" .=) <$> _mdldDescription])
+
+-- | The underflow bucket is a special bucket that does not have the
+-- lowerBound field; it includes all of the events that are less than its
+-- upper bound.
+--
+-- /See:/ 'pointDistributionUnderflowBucket' smart constructor.
+data PointDistributionUnderflowBucket = PointDistributionUnderflowBucket'
+    { _pdubUpperBound :: !(Maybe (Textual Double))
+    , _pdubCount      :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PointDistributionUnderflowBucket' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdubUpperBound'
+--
+-- * 'pdubCount'
+pointDistributionUnderflowBucket
+    :: PointDistributionUnderflowBucket
+pointDistributionUnderflowBucket =
+    PointDistributionUnderflowBucket'
+    { _pdubUpperBound = Nothing
+    , _pdubCount = Nothing
+    }
+
+-- | The upper bound of the value interval of this bucket (exclusive).
+pdubUpperBound :: Lens' PointDistributionUnderflowBucket (Maybe Double)
+pdubUpperBound
+  = lens _pdubUpperBound
+      (\ s a -> s{_pdubUpperBound = a})
+      . mapping _Coerce
+
+-- | The number of events whose values are in the interval defined by this
+-- bucket.
+pdubCount :: Lens' PointDistributionUnderflowBucket (Maybe Int64)
+pdubCount
+  = lens _pdubCount (\ s a -> s{_pdubCount = a}) .
+      mapping _Coerce
+
+instance FromJSON PointDistributionUnderflowBucket
+         where
+        parseJSON
+          = withObject "PointDistributionUnderflowBucket"
+              (\ o ->
+                 PointDistributionUnderflowBucket' <$>
+                   (o .:? "upperBound") <*> (o .:? "count"))
+
+instance ToJSON PointDistributionUnderflowBucket
+         where
+        toJSON PointDistributionUnderflowBucket'{..}
+          = object
+              (catMaybes
+                 [("upperBound" .=) <$> _pdubUpperBound,
+                  ("count" .=) <$> _pdubCount])
+
+-- | The response of cloudmonitoring.metricDescriptors.list.
+--
+-- /See:/ 'listMetricDescriptorsResponse' smart constructor.
+data ListMetricDescriptorsResponse = ListMetricDescriptorsResponse'
+    { _lmdrMetrics       :: !(Maybe [MetricDescriptor])
+    , _lmdrNextPageToken :: !(Maybe Text)
+    , _lmdrKind          :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListMetricDescriptorsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lmdrMetrics'
+--
+-- * 'lmdrNextPageToken'
+--
+-- * 'lmdrKind'
+listMetricDescriptorsResponse
+    :: ListMetricDescriptorsResponse
+listMetricDescriptorsResponse =
+    ListMetricDescriptorsResponse'
+    { _lmdrMetrics = Nothing
+    , _lmdrNextPageToken = Nothing
+    , _lmdrKind = "cloudmonitoring#listMetricDescriptorsResponse"
+    }
+
+-- | The returned metric descriptors.
+lmdrMetrics :: Lens' ListMetricDescriptorsResponse [MetricDescriptor]
+lmdrMetrics
+  = lens _lmdrMetrics (\ s a -> s{_lmdrMetrics = a}) .
+      _Default
+      . _Coerce
+
+-- | Pagination token. If present, indicates that additional results are
+-- available for retrieval. To access the results past the pagination
+-- limit, pass this value to the pageToken query parameter.
+lmdrNextPageToken :: Lens' ListMetricDescriptorsResponse (Maybe Text)
+lmdrNextPageToken
+  = lens _lmdrNextPageToken
+      (\ s a -> s{_lmdrNextPageToken = a})
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"cloudmonitoring#listMetricDescriptorsResponse\".
+lmdrKind :: Lens' ListMetricDescriptorsResponse Text
+lmdrKind = lens _lmdrKind (\ s a -> s{_lmdrKind = a})
+
+instance FromJSON ListMetricDescriptorsResponse where
+        parseJSON
+          = withObject "ListMetricDescriptorsResponse"
+              (\ o ->
+                 ListMetricDescriptorsResponse' <$>
+                   (o .:? "metrics" .!= mempty) <*>
+                     (o .:? "nextPageToken")
+                     <*>
+                     (o .:? "kind" .!=
+                        "cloudmonitoring#listMetricDescriptorsResponse"))
+
+instance ToJSON ListMetricDescriptorsResponse where
+        toJSON ListMetricDescriptorsResponse'{..}
+          = object
+              (catMaybes
+                 [("metrics" .=) <$> _lmdrMetrics,
+                  ("nextPageToken" .=) <$> _lmdrNextPageToken,
+                  Just ("kind" .= _lmdrKind)])
+
+-- | The request of cloudmonitoring.timeseriesDescriptors.list
+--
+-- /See:/ 'listTimeseriesDescriptorsRequest' smart constructor.
+newtype ListTimeseriesDescriptorsRequest = ListTimeseriesDescriptorsRequest'
+    { _ltdrKind :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTimeseriesDescriptorsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltdrKind'
+listTimeseriesDescriptorsRequest
+    :: ListTimeseriesDescriptorsRequest
+listTimeseriesDescriptorsRequest =
+    ListTimeseriesDescriptorsRequest'
+    { _ltdrKind = "cloudmonitoring#listTimeseriesDescriptorsRequest"
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"cloudmonitoring#listTimeseriesDescriptorsRequest\".
+ltdrKind :: Lens' ListTimeseriesDescriptorsRequest Text
+ltdrKind = lens _ltdrKind (\ s a -> s{_ltdrKind = a})
+
+instance FromJSON ListTimeseriesDescriptorsRequest
+         where
+        parseJSON
+          = withObject "ListTimeseriesDescriptorsRequest"
+              (\ o ->
+                 ListTimeseriesDescriptorsRequest' <$>
+                   (o .:? "kind" .!=
+                      "cloudmonitoring#listTimeseriesDescriptorsRequest"))
+
+instance ToJSON ListTimeseriesDescriptorsRequest
+         where
+        toJSON ListTimeseriesDescriptorsRequest'{..}
+          = object (catMaybes [Just ("kind" .= _ltdrKind)])
+
+-- | The label\'s name.
+--
+-- /See:/ 'timeseriesDescriptorLabels' smart constructor.
+newtype TimeseriesDescriptorLabels = TimeseriesDescriptorLabels'
+    { _tdlAddtional :: HashMap Text Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TimeseriesDescriptorLabels' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdlAddtional'
+timeseriesDescriptorLabels
+    :: HashMap Text Text -- ^ 'tdlAddtional'
+    -> TimeseriesDescriptorLabels
+timeseriesDescriptorLabels pTdlAddtional_ =
+    TimeseriesDescriptorLabels'
+    { _tdlAddtional = _Coerce # pTdlAddtional_
+    }
+
+-- | The label\'s name.
+tdlAddtional :: Lens' TimeseriesDescriptorLabels (HashMap Text Text)
+tdlAddtional
+  = lens _tdlAddtional (\ s a -> s{_tdlAddtional = a})
+      . _Coerce
+
+instance FromJSON TimeseriesDescriptorLabels where
+        parseJSON
+          = withObject "TimeseriesDescriptorLabels"
+              (\ o ->
+                 TimeseriesDescriptorLabels' <$> (parseJSONObject o))
+
+instance ToJSON TimeseriesDescriptorLabels where
+        toJSON = toJSON . _tdlAddtional
+
+-- | The histogram\'s bucket. Buckets that form the histogram of a
+-- distribution value. If the upper bound of a bucket, say U1, does not
+-- equal the lower bound of the next bucket, say L2, this means that there
+-- is no event in [U1, L2).
+--
+-- /See:/ 'pointDistributionBucket' smart constructor.
+data PointDistributionBucket = PointDistributionBucket'
+    { _pdbUpperBound :: !(Maybe (Textual Double))
+    , _pdbCount      :: !(Maybe (Textual Int64))
+    , _pdbLowerBound :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PointDistributionBucket' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdbUpperBound'
+--
+-- * 'pdbCount'
+--
+-- * 'pdbLowerBound'
+pointDistributionBucket
+    :: PointDistributionBucket
+pointDistributionBucket =
+    PointDistributionBucket'
+    { _pdbUpperBound = Nothing
+    , _pdbCount = Nothing
+    , _pdbLowerBound = Nothing
+    }
+
+-- | The upper bound of the value interval of this bucket (exclusive).
+pdbUpperBound :: Lens' PointDistributionBucket (Maybe Double)
+pdbUpperBound
+  = lens _pdbUpperBound
+      (\ s a -> s{_pdbUpperBound = a})
+      . mapping _Coerce
+
+-- | The number of events whose values are in the interval defined by this
+-- bucket.
+pdbCount :: Lens' PointDistributionBucket (Maybe Int64)
+pdbCount
+  = lens _pdbCount (\ s a -> s{_pdbCount = a}) .
+      mapping _Coerce
+
+-- | The lower bound of the value interval of this bucket (inclusive).
+pdbLowerBound :: Lens' PointDistributionBucket (Maybe Double)
+pdbLowerBound
+  = lens _pdbLowerBound
+      (\ s a -> s{_pdbLowerBound = a})
+      . mapping _Coerce
+
+instance FromJSON PointDistributionBucket where
+        parseJSON
+          = withObject "PointDistributionBucket"
+              (\ o ->
+                 PointDistributionBucket' <$>
+                   (o .:? "upperBound") <*> (o .:? "count") <*>
+                     (o .:? "lowerBound"))
+
+instance ToJSON PointDistributionBucket where
+        toJSON PointDistributionBucket'{..}
+          = object
+              (catMaybes
+                 [("upperBound" .=) <$> _pdbUpperBound,
+                  ("count" .=) <$> _pdbCount,
+                  ("lowerBound" .=) <$> _pdbLowerBound])
+
+-- | The response of cloudmonitoring.timeseries.write
+--
+-- /See:/ 'writeTimeseriesResponse' smart constructor.
+newtype WriteTimeseriesResponse = WriteTimeseriesResponse'
+    { _wtrKind :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'WriteTimeseriesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'wtrKind'
+writeTimeseriesResponse
+    :: WriteTimeseriesResponse
+writeTimeseriesResponse =
+    WriteTimeseriesResponse'
+    { _wtrKind = "cloudmonitoring#writeTimeseriesResponse"
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"cloudmonitoring#writeTimeseriesResponse\".
+wtrKind :: Lens' WriteTimeseriesResponse Text
+wtrKind = lens _wtrKind (\ s a -> s{_wtrKind = a})
+
+instance FromJSON WriteTimeseriesResponse where
+        parseJSON
+          = withObject "WriteTimeseriesResponse"
+              (\ o ->
+                 WriteTimeseriesResponse' <$>
+                   (o .:? "kind" .!=
+                      "cloudmonitoring#writeTimeseriesResponse"))
+
+instance ToJSON WriteTimeseriesResponse where
+        toJSON WriteTimeseriesResponse'{..}
+          = object (catMaybes [Just ("kind" .= _wtrKind)])
+
+--
+-- /See:/ 'timeseriesDescriptorLabel' smart constructor.
+data TimeseriesDescriptorLabel = TimeseriesDescriptorLabel'
+    { _tdlValue :: !(Maybe Text)
+    , _tdlKey   :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TimeseriesDescriptorLabel' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdlValue'
+--
+-- * 'tdlKey'
+timeseriesDescriptorLabel
+    :: TimeseriesDescriptorLabel
+timeseriesDescriptorLabel =
+    TimeseriesDescriptorLabel'
+    { _tdlValue = Nothing
+    , _tdlKey = Nothing
+    }
+
+-- | The label\'s value.
+tdlValue :: Lens' TimeseriesDescriptorLabel (Maybe Text)
+tdlValue = lens _tdlValue (\ s a -> s{_tdlValue = a})
+
+-- | The label\'s name.
+tdlKey :: Lens' TimeseriesDescriptorLabel (Maybe Text)
+tdlKey = lens _tdlKey (\ s a -> s{_tdlKey = a})
+
+instance FromJSON TimeseriesDescriptorLabel where
+        parseJSON
+          = withObject "TimeseriesDescriptorLabel"
+              (\ o ->
+                 TimeseriesDescriptorLabel' <$>
+                   (o .:? "value") <*> (o .:? "key"))
+
+instance ToJSON TimeseriesDescriptorLabel where
+        toJSON TimeseriesDescriptorLabel'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _tdlValue, ("key" .=) <$> _tdlKey])
+
+-- | Distribution data point value type. When writing distribution points,
+-- try to be consistent with the boundaries of your buckets. If you must
+-- modify the bucket boundaries, then do so by merging, partitioning, or
+-- appending rather than skewing them.
+--
+-- /See:/ 'pointDistribution' smart constructor.
+data PointDistribution = PointDistribution'
+    { _pdOverflowBucket  :: !(Maybe PointDistributionOverflowBucket)
+    , _pdBuckets         :: !(Maybe [PointDistributionBucket])
+    , _pdUnderflowBucket :: !(Maybe PointDistributionUnderflowBucket)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PointDistribution' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdOverflowBucket'
+--
+-- * 'pdBuckets'
+--
+-- * 'pdUnderflowBucket'
+pointDistribution
+    :: PointDistribution
+pointDistribution =
+    PointDistribution'
+    { _pdOverflowBucket = Nothing
+    , _pdBuckets = Nothing
+    , _pdUnderflowBucket = Nothing
+    }
+
+-- | The overflow bucket.
+pdOverflowBucket :: Lens' PointDistribution (Maybe PointDistributionOverflowBucket)
+pdOverflowBucket
+  = lens _pdOverflowBucket
+      (\ s a -> s{_pdOverflowBucket = a})
+
+-- | The finite buckets.
+pdBuckets :: Lens' PointDistribution [PointDistributionBucket]
+pdBuckets
+  = lens _pdBuckets (\ s a -> s{_pdBuckets = a}) .
+      _Default
+      . _Coerce
+
+-- | The underflow bucket.
+pdUnderflowBucket :: Lens' PointDistribution (Maybe PointDistributionUnderflowBucket)
+pdUnderflowBucket
+  = lens _pdUnderflowBucket
+      (\ s a -> s{_pdUnderflowBucket = a})
+
+instance FromJSON PointDistribution where
+        parseJSON
+          = withObject "PointDistribution"
+              (\ o ->
+                 PointDistribution' <$>
+                   (o .:? "overflowBucket") <*>
+                     (o .:? "buckets" .!= mempty)
+                     <*> (o .:? "underflowBucket"))
+
+instance ToJSON PointDistribution where
+        toJSON PointDistribution'{..}
+          = object
+              (catMaybes
+                 [("overflowBucket" .=) <$> _pdOverflowBucket,
+                  ("buckets" .=) <$> _pdBuckets,
+                  ("underflowBucket" .=) <$> _pdUnderflowBucket])
+
+-- | Point is a single point in a time series. It consists of a start time,
+-- an end time, and a value.
+--
+-- /See:/ 'point' smart constructor.
+data Point = Point'
+    { _pBoolValue         :: !(Maybe Bool)
+    , _pStart             :: !(Maybe DateTime')
+    , _pDoubleValue       :: !(Maybe (Textual Double))
+    , _pStringValue       :: !(Maybe Text)
+    , _pDistributionValue :: !(Maybe PointDistribution)
+    , _pEnd               :: !(Maybe DateTime')
+    , _pInt64Value        :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Point' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pBoolValue'
+--
+-- * 'pStart'
+--
+-- * 'pDoubleValue'
+--
+-- * 'pStringValue'
+--
+-- * 'pDistributionValue'
+--
+-- * 'pEnd'
+--
+-- * 'pInt64Value'
+point
+    :: Point
+point =
+    Point'
+    { _pBoolValue = Nothing
+    , _pStart = Nothing
+    , _pDoubleValue = Nothing
+    , _pStringValue = Nothing
+    , _pDistributionValue = Nothing
+    , _pEnd = Nothing
+    , _pInt64Value = Nothing
+    }
+
+-- | The value of this data point. Either \"true\" or \"false\".
+pBoolValue :: Lens' Point (Maybe Bool)
+pBoolValue
+  = lens _pBoolValue (\ s a -> s{_pBoolValue = a})
+
+-- | The interval [start, end] is the time period to which the point\'s value
+-- applies. For gauge metrics, whose values are instantaneous measurements,
+-- this interval should be empty (start should equal end). For cumulative
+-- metrics (of which deltas and rates are special cases), the interval
+-- should be non-empty. Both start and end are RFC 3339 strings.
+pStart :: Lens' Point (Maybe UTCTime)
+pStart
+  = lens _pStart (\ s a -> s{_pStart = a}) .
+      mapping _DateTime
+
+-- | The value of this data point as a double-precision floating-point
+-- number.
+pDoubleValue :: Lens' Point (Maybe Double)
+pDoubleValue
+  = lens _pDoubleValue (\ s a -> s{_pDoubleValue = a})
+      . mapping _Coerce
+
+-- | The value of this data point in string format.
+pStringValue :: Lens' Point (Maybe Text)
+pStringValue
+  = lens _pStringValue (\ s a -> s{_pStringValue = a})
+
+-- | The value of this data point as a distribution. A distribution value can
+-- contain a list of buckets and\/or an underflowBucket and an
+-- overflowBucket. The values of these points can be used to create a
+-- histogram.
+pDistributionValue :: Lens' Point (Maybe PointDistribution)
+pDistributionValue
+  = lens _pDistributionValue
+      (\ s a -> s{_pDistributionValue = a})
+
+-- | The interval [start, end] is the time period to which the point\'s value
+-- applies. For gauge metrics, whose values are instantaneous measurements,
+-- this interval should be empty (start should equal end). For cumulative
+-- metrics (of which deltas and rates are special cases), the interval
+-- should be non-empty. Both start and end are RFC 3339 strings.
+pEnd :: Lens' Point (Maybe UTCTime)
+pEnd
+  = lens _pEnd (\ s a -> s{_pEnd = a}) .
+      mapping _DateTime
+
+-- | The value of this data point as a 64-bit integer.
+pInt64Value :: Lens' Point (Maybe Int64)
+pInt64Value
+  = lens _pInt64Value (\ s a -> s{_pInt64Value = a}) .
+      mapping _Coerce
+
+instance FromJSON Point where
+        parseJSON
+          = withObject "Point"
+              (\ o ->
+                 Point' <$>
+                   (o .:? "boolValue") <*> (o .:? "start") <*>
+                     (o .:? "doubleValue")
+                     <*> (o .:? "stringValue")
+                     <*> (o .:? "distributionValue")
+                     <*> (o .:? "end")
+                     <*> (o .:? "int64Value"))
+
+instance ToJSON Point where
+        toJSON Point'{..}
+          = object
+              (catMaybes
+                 [("boolValue" .=) <$> _pBoolValue,
+                  ("start" .=) <$> _pStart,
+                  ("doubleValue" .=) <$> _pDoubleValue,
+                  ("stringValue" .=) <$> _pStringValue,
+                  ("distributionValue" .=) <$> _pDistributionValue,
+                  ("end" .=) <$> _pEnd,
+                  ("int64Value" .=) <$> _pInt64Value])
+
+-- | The overflow bucket is a special bucket that does not have the
+-- upperBound field; it includes all of the events that are no less than
+-- its lower bound.
+--
+-- /See:/ 'pointDistributionOverflowBucket' smart constructor.
+data PointDistributionOverflowBucket = PointDistributionOverflowBucket'
+    { _pdobCount      :: !(Maybe (Textual Int64))
+    , _pdobLowerBound :: !(Maybe (Textual Double))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PointDistributionOverflowBucket' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pdobCount'
+--
+-- * 'pdobLowerBound'
+pointDistributionOverflowBucket
+    :: PointDistributionOverflowBucket
+pointDistributionOverflowBucket =
+    PointDistributionOverflowBucket'
+    { _pdobCount = Nothing
+    , _pdobLowerBound = Nothing
+    }
+
+-- | The number of events whose values are in the interval defined by this
+-- bucket.
+pdobCount :: Lens' PointDistributionOverflowBucket (Maybe Int64)
+pdobCount
+  = lens _pdobCount (\ s a -> s{_pdobCount = a}) .
+      mapping _Coerce
+
+-- | The lower bound of the value interval of this bucket (inclusive).
+pdobLowerBound :: Lens' PointDistributionOverflowBucket (Maybe Double)
+pdobLowerBound
+  = lens _pdobLowerBound
+      (\ s a -> s{_pdobLowerBound = a})
+      . mapping _Coerce
+
+instance FromJSON PointDistributionOverflowBucket
+         where
+        parseJSON
+          = withObject "PointDistributionOverflowBucket"
+              (\ o ->
+                 PointDistributionOverflowBucket' <$>
+                   (o .:? "count") <*> (o .:? "lowerBound"))
+
+instance ToJSON PointDistributionOverflowBucket where
+        toJSON PointDistributionOverflowBucket'{..}
+          = object
+              (catMaybes
+                 [("count" .=) <$> _pdobCount,
+                  ("lowerBound" .=) <$> _pdobLowerBound])
+
+-- | The response of cloudmonitoring.timeseriesDescriptors.list
+--
+-- /See:/ 'listTimeseriesDescriptorsResponse' smart constructor.
+data ListTimeseriesDescriptorsResponse = ListTimeseriesDescriptorsResponse'
+    { _lNextPageToken :: !(Maybe Text)
+    , _lKind          :: !Text
+    , _lOldest        :: !(Maybe DateTime')
+    , _lYoungest      :: !(Maybe DateTime')
+    , _lTimeseries    :: !(Maybe [TimeseriesDescriptor])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTimeseriesDescriptorsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lNextPageToken'
+--
+-- * 'lKind'
+--
+-- * 'lOldest'
+--
+-- * 'lYoungest'
+--
+-- * 'lTimeseries'
+listTimeseriesDescriptorsResponse
+    :: ListTimeseriesDescriptorsResponse
+listTimeseriesDescriptorsResponse =
+    ListTimeseriesDescriptorsResponse'
+    { _lNextPageToken = Nothing
+    , _lKind = "cloudmonitoring#listTimeseriesDescriptorsResponse"
+    , _lOldest = Nothing
+    , _lYoungest = Nothing
+    , _lTimeseries = Nothing
+    }
+
+-- | Pagination token. If present, indicates that additional results are
+-- available for retrieval. To access the results past the pagination
+-- limit, set this value to the pageToken query parameter.
+lNextPageToken :: Lens' ListTimeseriesDescriptorsResponse (Maybe Text)
+lNextPageToken
+  = lens _lNextPageToken
+      (\ s a -> s{_lNextPageToken = a})
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"cloudmonitoring#listTimeseriesDescriptorsResponse\".
+lKind :: Lens' ListTimeseriesDescriptorsResponse Text
+lKind = lens _lKind (\ s a -> s{_lKind = a})
+
+-- | The oldest timestamp of the interval of this query, as an RFC 3339
+-- string.
+lOldest :: Lens' ListTimeseriesDescriptorsResponse (Maybe UTCTime)
+lOldest
+  = lens _lOldest (\ s a -> s{_lOldest = a}) .
+      mapping _DateTime
+
+-- | The youngest timestamp of the interval of this query, as an RFC 3339
+-- string.
+lYoungest :: Lens' ListTimeseriesDescriptorsResponse (Maybe UTCTime)
+lYoungest
+  = lens _lYoungest (\ s a -> s{_lYoungest = a}) .
+      mapping _DateTime
+
+-- | The returned time series descriptors.
+lTimeseries :: Lens' ListTimeseriesDescriptorsResponse [TimeseriesDescriptor]
+lTimeseries
+  = lens _lTimeseries (\ s a -> s{_lTimeseries = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON ListTimeseriesDescriptorsResponse
+         where
+        parseJSON
+          = withObject "ListTimeseriesDescriptorsResponse"
+              (\ o ->
+                 ListTimeseriesDescriptorsResponse' <$>
+                   (o .:? "nextPageToken") <*>
+                     (o .:? "kind" .!=
+                        "cloudmonitoring#listTimeseriesDescriptorsResponse")
+                     <*> (o .:? "oldest")
+                     <*> (o .:? "youngest")
+                     <*> (o .:? "timeseries" .!= mempty))
+
+instance ToJSON ListTimeseriesDescriptorsResponse
+         where
+        toJSON ListTimeseriesDescriptorsResponse'{..}
+          = object
+              (catMaybes
+                 [("nextPageToken" .=) <$> _lNextPageToken,
+                  Just ("kind" .= _lKind), ("oldest" .=) <$> _lOldest,
+                  ("youngest" .=) <$> _lYoungest,
+                  ("timeseries" .=) <$> _lTimeseries])
+
+-- | The request of cloudmonitoring.metricDescriptors.list.
+--
+-- /See:/ 'listMetricDescriptorsRequest' smart constructor.
+newtype ListMetricDescriptorsRequest = ListMetricDescriptorsRequest'
+    { _lisKind :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListMetricDescriptorsRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lisKind'
+listMetricDescriptorsRequest
+    :: ListMetricDescriptorsRequest
+listMetricDescriptorsRequest =
+    ListMetricDescriptorsRequest'
+    { _lisKind = "cloudmonitoring#listMetricDescriptorsRequest"
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"cloudmonitoring#listMetricDescriptorsRequest\".
+lisKind :: Lens' ListMetricDescriptorsRequest Text
+lisKind = lens _lisKind (\ s a -> s{_lisKind = a})
+
+instance FromJSON ListMetricDescriptorsRequest where
+        parseJSON
+          = withObject "ListMetricDescriptorsRequest"
+              (\ o ->
+                 ListMetricDescriptorsRequest' <$>
+                   (o .:? "kind" .!=
+                      "cloudmonitoring#listMetricDescriptorsRequest"))
+
+instance ToJSON ListMetricDescriptorsRequest where
+        toJSON ListMetricDescriptorsRequest'{..}
+          = object (catMaybes [Just ("kind" .= _lisKind)])
+
+-- | When writing time series, TimeseriesPoint should be used instead of
+-- Timeseries, to enforce single point for each time series in the
+-- timeseries.write request.
+--
+-- /See:/ 'timeseriesPoint' smart constructor.
+data TimeseriesPoint = TimeseriesPoint'
+    { _tpPoint          :: !(Maybe Point)
+    , _tpTimeseriesDesc :: !(Maybe TimeseriesDescriptor)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TimeseriesPoint' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tpPoint'
+--
+-- * 'tpTimeseriesDesc'
+timeseriesPoint
+    :: TimeseriesPoint
+timeseriesPoint =
+    TimeseriesPoint'
+    { _tpPoint = Nothing
+    , _tpTimeseriesDesc = Nothing
+    }
+
+-- | The data point in this time series snapshot.
+tpPoint :: Lens' TimeseriesPoint (Maybe Point)
+tpPoint = lens _tpPoint (\ s a -> s{_tpPoint = a})
+
+-- | The descriptor of this time series.
+tpTimeseriesDesc :: Lens' TimeseriesPoint (Maybe TimeseriesDescriptor)
+tpTimeseriesDesc
+  = lens _tpTimeseriesDesc
+      (\ s a -> s{_tpTimeseriesDesc = a})
+
+instance FromJSON TimeseriesPoint where
+        parseJSON
+          = withObject "TimeseriesPoint"
+              (\ o ->
+                 TimeseriesPoint' <$>
+                   (o .:? "point") <*> (o .:? "timeseriesDesc"))
+
+instance ToJSON TimeseriesPoint where
+        toJSON TimeseriesPoint'{..}
+          = object
+              (catMaybes
+                 [("point" .=) <$> _tpPoint,
+                  ("timeseriesDesc" .=) <$> _tpTimeseriesDesc])
+
+-- | The response of cloudmonitoring.metricDescriptors.delete.
+--
+-- /See:/ 'deleteMetricDescriptorResponse' smart constructor.
+newtype DeleteMetricDescriptorResponse = DeleteMetricDescriptorResponse'
+    { _dmdrKind :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteMetricDescriptorResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dmdrKind'
+deleteMetricDescriptorResponse
+    :: DeleteMetricDescriptorResponse
+deleteMetricDescriptorResponse =
+    DeleteMetricDescriptorResponse'
+    { _dmdrKind = "cloudmonitoring#deleteMetricDescriptorResponse"
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"cloudmonitoring#deleteMetricDescriptorResponse\".
+dmdrKind :: Lens' DeleteMetricDescriptorResponse Text
+dmdrKind = lens _dmdrKind (\ s a -> s{_dmdrKind = a})
+
+instance FromJSON DeleteMetricDescriptorResponse
+         where
+        parseJSON
+          = withObject "DeleteMetricDescriptorResponse"
+              (\ o ->
+                 DeleteMetricDescriptorResponse' <$>
+                   (o .:? "kind" .!=
+                      "cloudmonitoring#deleteMetricDescriptorResponse"))
+
+instance ToJSON DeleteMetricDescriptorResponse where
+        toJSON DeleteMetricDescriptorResponse'{..}
+          = object (catMaybes [Just ("kind" .= _dmdrKind)])
+
+-- | The request of cloudmonitoring.timeseries.list
+--
+-- /See:/ 'listTimeseriesRequest' smart constructor.
+newtype ListTimeseriesRequest = ListTimeseriesRequest'
+    { _ltrtKind :: Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTimeseriesRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltrtKind'
+listTimeseriesRequest
+    :: ListTimeseriesRequest
+listTimeseriesRequest =
+    ListTimeseriesRequest'
+    { _ltrtKind = "cloudmonitoring#listTimeseriesRequest"
+    }
+
+-- | Identifies what kind of resource this is. Value: the fixed string
+-- \"cloudmonitoring#listTimeseriesRequest\".
+ltrtKind :: Lens' ListTimeseriesRequest Text
+ltrtKind = lens _ltrtKind (\ s a -> s{_ltrtKind = a})
+
+instance FromJSON ListTimeseriesRequest where
+        parseJSON
+          = withObject "ListTimeseriesRequest"
+              (\ o ->
+                 ListTimeseriesRequest' <$>
+                   (o .:? "kind" .!=
+                      "cloudmonitoring#listTimeseriesRequest"))
+
+instance ToJSON ListTimeseriesRequest where
+        toJSON ListTimeseriesRequest'{..}
+          = object (catMaybes [Just ("kind" .= _ltrtKind)])
+
+-- | TimeseriesDescriptor identifies a single time series.
+--
+-- /See:/ 'timeseriesDescriptor' smart constructor.
+data TimeseriesDescriptor = TimeseriesDescriptor'
+    { _tdProject :: !(Maybe Text)
+    , _tdMetric  :: !(Maybe Text)
+    , _tdLabels  :: !(Maybe TimeseriesDescriptorLabels)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TimeseriesDescriptor' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdProject'
+--
+-- * 'tdMetric'
+--
+-- * 'tdLabels'
+timeseriesDescriptor
+    :: TimeseriesDescriptor
+timeseriesDescriptor =
+    TimeseriesDescriptor'
+    { _tdProject = Nothing
+    , _tdMetric = Nothing
+    , _tdLabels = Nothing
+    }
+
+-- | The Developers Console project number to which this time series belongs.
+tdProject :: Lens' TimeseriesDescriptor (Maybe Text)
+tdProject
+  = lens _tdProject (\ s a -> s{_tdProject = a})
+
+-- | The name of the metric.
+tdMetric :: Lens' TimeseriesDescriptor (Maybe Text)
+tdMetric = lens _tdMetric (\ s a -> s{_tdMetric = a})
+
+-- | The label\'s name.
+tdLabels :: Lens' TimeseriesDescriptor (Maybe TimeseriesDescriptorLabels)
+tdLabels = lens _tdLabels (\ s a -> s{_tdLabels = a})
+
+instance FromJSON TimeseriesDescriptor where
+        parseJSON
+          = withObject "TimeseriesDescriptor"
+              (\ o ->
+                 TimeseriesDescriptor' <$>
+                   (o .:? "project") <*> (o .:? "metric") <*>
+                     (o .:? "labels"))
+
+instance ToJSON TimeseriesDescriptor where
+        toJSON TimeseriesDescriptor'{..}
+          = object
+              (catMaybes
+                 [("project" .=) <$> _tdProject,
+                  ("metric" .=) <$> _tdMetric,
+                  ("labels" .=) <$> _tdLabels])
+
+-- | The monitoring data is organized as metrics and stored as data points
+-- that are recorded over time. Each data point represents information like
+-- the CPU utilization of your virtual machine. A historical record of
+-- these data points is called a time series.
+--
+-- /See:/ 'timeseries' smart constructor.
+data Timeseries = Timeseries'
+    { _tPoints         :: !(Maybe [Point])
+    , _tTimeseriesDesc :: !(Maybe TimeseriesDescriptor)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Timeseries' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tPoints'
+--
+-- * 'tTimeseriesDesc'
+timeseries
+    :: Timeseries
+timeseries =
+    Timeseries'
+    { _tPoints = Nothing
+    , _tTimeseriesDesc = Nothing
+    }
+
+-- | The data points of this time series. The points are listed in order of
+-- their end timestamp, from younger to older.
+tPoints :: Lens' Timeseries [Point]
+tPoints
+  = lens _tPoints (\ s a -> s{_tPoints = a}) . _Default
+      . _Coerce
+
+-- | The descriptor of this time series.
+tTimeseriesDesc :: Lens' Timeseries (Maybe TimeseriesDescriptor)
+tTimeseriesDesc
+  = lens _tTimeseriesDesc
+      (\ s a -> s{_tTimeseriesDesc = a})
+
+instance FromJSON Timeseries where
+        parseJSON
+          = withObject "Timeseries"
+              (\ o ->
+                 Timeseries' <$>
+                   (o .:? "points" .!= mempty) <*>
+                     (o .:? "timeseriesDesc"))
+
+instance ToJSON Timeseries where
+        toJSON Timeseries'{..}
+          = object
+              (catMaybes
+                 [("points" .=) <$> _tPoints,
+                  ("timeseriesDesc" .=) <$> _tTimeseriesDesc])
diff --git a/gen/Network/Google/CloudMonitoring/Types/Sum.hs b/gen/Network/Google/CloudMonitoring/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/CloudMonitoring/Types/Sum.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Network.Google.CloudMonitoring.Types.Sum
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.Google.CloudMonitoring.Types.Sum where
+
+import           Network.Google.Prelude
+
+-- | The aggregation function that will reduce the data points in each window
+-- to a single point. This parameter is only valid for non-cumulative
+-- metrics with a value type of INT64 or DOUBLE.
+data TimeseriesListAggregator
+    = Max
+      -- ^ @max@
+    | Mean
+      -- ^ @mean@
+    | Min
+      -- ^ @min@
+    | Sum
+      -- ^ @sum@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable TimeseriesListAggregator
+
+instance FromHttpApiData TimeseriesListAggregator where
+    parseQueryParam = \case
+        "max" -> Right Max
+        "mean" -> Right Mean
+        "min" -> Right Min
+        "sum" -> Right Sum
+        x -> Left ("Unable to parse TimeseriesListAggregator from: " <> x)
+
+instance ToHttpApiData TimeseriesListAggregator where
+    toQueryParam = \case
+        Max -> "max"
+        Mean -> "mean"
+        Min -> "min"
+        Sum -> "sum"
+
+instance FromJSON TimeseriesListAggregator where
+    parseJSON = parseJSONText "TimeseriesListAggregator"
+
+instance ToJSON TimeseriesListAggregator where
+    toJSON = toJSONText
+
+-- | The aggregation function that will reduce the data points in each window
+-- to a single point. This parameter is only valid for non-cumulative
+-- metrics with a value type of INT64 or DOUBLE.
+data TimeseriesDescriptorsListAggregator
+    = TDLAMax
+      -- ^ @max@
+    | TDLAMean
+      -- ^ @mean@
+    | TDLAMin
+      -- ^ @min@
+    | TDLASum
+      -- ^ @sum@
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable TimeseriesDescriptorsListAggregator
+
+instance FromHttpApiData TimeseriesDescriptorsListAggregator where
+    parseQueryParam = \case
+        "max" -> Right TDLAMax
+        "mean" -> Right TDLAMean
+        "min" -> Right TDLAMin
+        "sum" -> Right TDLASum
+        x -> Left ("Unable to parse TimeseriesDescriptorsListAggregator from: " <> x)
+
+instance ToHttpApiData TimeseriesDescriptorsListAggregator where
+    toQueryParam = \case
+        TDLAMax -> "max"
+        TDLAMean -> "mean"
+        TDLAMin -> "min"
+        TDLASum -> "sum"
+
+instance FromJSON TimeseriesDescriptorsListAggregator where
+    parseJSON = parseJSONText "TimeseriesDescriptorsListAggregator"
+
+instance ToJSON TimeseriesDescriptorsListAggregator where
+    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/CloudMonitoring/MetricDescriptors/Create.hs b/gen/Network/Google/Resource/CloudMonitoring/MetricDescriptors/Create.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudMonitoring/MetricDescriptors/Create.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.CloudMonitoring.MetricDescriptors.Create
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Create a new metric.
+--
+-- /See:/ <https://cloud.google.com/monitoring/v2beta2/ Cloud Monitoring API Reference> for @cloudmonitoring.metricDescriptors.create@.
+module Network.Google.Resource.CloudMonitoring.MetricDescriptors.Create
+    (
+    -- * REST Resource
+      MetricDescriptorsCreateResource
+
+    -- * Creating a Request
+    , metricDescriptorsCreate
+    , MetricDescriptorsCreate
+
+    -- * Request Lenses
+    , mdcProject
+    , mdcPayload
+    ) where
+
+import           Network.Google.CloudMonitoring.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudmonitoring.metricDescriptors.create@ method which the
+-- 'MetricDescriptorsCreate' request conforms to.
+type MetricDescriptorsCreateResource =
+     "cloudmonitoring" :>
+       "v2beta2" :>
+         "projects" :>
+           Capture "project" Text :>
+             "metricDescriptors" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] MetricDescriptor :>
+                   Post '[JSON] MetricDescriptor
+
+-- | Create a new metric.
+--
+-- /See:/ 'metricDescriptorsCreate' smart constructor.
+data MetricDescriptorsCreate = MetricDescriptorsCreate'
+    { _mdcProject :: !Text
+    , _mdcPayload :: !MetricDescriptor
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MetricDescriptorsCreate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mdcProject'
+--
+-- * 'mdcPayload'
+metricDescriptorsCreate
+    :: Text -- ^ 'mdcProject'
+    -> MetricDescriptor -- ^ 'mdcPayload'
+    -> MetricDescriptorsCreate
+metricDescriptorsCreate pMdcProject_ pMdcPayload_ =
+    MetricDescriptorsCreate'
+    { _mdcProject = pMdcProject_
+    , _mdcPayload = pMdcPayload_
+    }
+
+-- | The project id. The value can be the numeric project ID or string-based
+-- project name.
+mdcProject :: Lens' MetricDescriptorsCreate Text
+mdcProject
+  = lens _mdcProject (\ s a -> s{_mdcProject = a})
+
+-- | Multipart request metadata.
+mdcPayload :: Lens' MetricDescriptorsCreate MetricDescriptor
+mdcPayload
+  = lens _mdcPayload (\ s a -> s{_mdcPayload = a})
+
+instance GoogleRequest MetricDescriptorsCreate where
+        type Rs MetricDescriptorsCreate = MetricDescriptor
+        type Scopes MetricDescriptorsCreate =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/monitoring"]
+        requestClient MetricDescriptorsCreate'{..}
+          = go _mdcProject (Just AltJSON) _mdcPayload
+              cloudMonitoringService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MetricDescriptorsCreateResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudMonitoring/MetricDescriptors/Delete.hs b/gen/Network/Google/Resource/CloudMonitoring/MetricDescriptors/Delete.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudMonitoring/MetricDescriptors/Delete.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.CloudMonitoring.MetricDescriptors.Delete
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Delete an existing metric.
+--
+-- /See:/ <https://cloud.google.com/monitoring/v2beta2/ Cloud Monitoring API Reference> for @cloudmonitoring.metricDescriptors.delete@.
+module Network.Google.Resource.CloudMonitoring.MetricDescriptors.Delete
+    (
+    -- * REST Resource
+      MetricDescriptorsDeleteResource
+
+    -- * Creating a Request
+    , metricDescriptorsDelete
+    , MetricDescriptorsDelete
+
+    -- * Request Lenses
+    , mddProject
+    , mddMetric
+    ) where
+
+import           Network.Google.CloudMonitoring.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudmonitoring.metricDescriptors.delete@ method which the
+-- 'MetricDescriptorsDelete' request conforms to.
+type MetricDescriptorsDeleteResource =
+     "cloudmonitoring" :>
+       "v2beta2" :>
+         "projects" :>
+           Capture "project" Text :>
+             "metricDescriptors" :>
+               Capture "metric" Text :>
+                 QueryParam "alt" AltJSON :>
+                   Delete '[JSON] DeleteMetricDescriptorResponse
+
+-- | Delete an existing metric.
+--
+-- /See:/ 'metricDescriptorsDelete' smart constructor.
+data MetricDescriptorsDelete = MetricDescriptorsDelete'
+    { _mddProject :: !Text
+    , _mddMetric  :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MetricDescriptorsDelete' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mddProject'
+--
+-- * 'mddMetric'
+metricDescriptorsDelete
+    :: Text -- ^ 'mddProject'
+    -> Text -- ^ 'mddMetric'
+    -> MetricDescriptorsDelete
+metricDescriptorsDelete pMddProject_ pMddMetric_ =
+    MetricDescriptorsDelete'
+    { _mddProject = pMddProject_
+    , _mddMetric = pMddMetric_
+    }
+
+-- | The project ID to which the metric belongs.
+mddProject :: Lens' MetricDescriptorsDelete Text
+mddProject
+  = lens _mddProject (\ s a -> s{_mddProject = a})
+
+-- | Name of the metric.
+mddMetric :: Lens' MetricDescriptorsDelete Text
+mddMetric
+  = lens _mddMetric (\ s a -> s{_mddMetric = a})
+
+instance GoogleRequest MetricDescriptorsDelete where
+        type Rs MetricDescriptorsDelete =
+             DeleteMetricDescriptorResponse
+        type Scopes MetricDescriptorsDelete =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/monitoring"]
+        requestClient MetricDescriptorsDelete'{..}
+          = go _mddProject _mddMetric (Just AltJSON)
+              cloudMonitoringService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MetricDescriptorsDeleteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudMonitoring/MetricDescriptors/List.hs b/gen/Network/Google/Resource/CloudMonitoring/MetricDescriptors/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudMonitoring/MetricDescriptors/List.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.CloudMonitoring.MetricDescriptors.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List metric descriptors that match the query. If the query is not set,
+-- then all of the metric descriptors will be returned. Large responses
+-- will be paginated, use the nextPageToken returned in the response to
+-- request subsequent pages of results by setting the pageToken query
+-- parameter to the value of the nextPageToken.
+--
+-- /See:/ <https://cloud.google.com/monitoring/v2beta2/ Cloud Monitoring API Reference> for @cloudmonitoring.metricDescriptors.list@.
+module Network.Google.Resource.CloudMonitoring.MetricDescriptors.List
+    (
+    -- * REST Resource
+      MetricDescriptorsListResource
+
+    -- * Creating a Request
+    , metricDescriptorsList
+    , MetricDescriptorsList
+
+    -- * Request Lenses
+    , mdlProject
+    , mdlCount
+    , mdlPayload
+    , mdlQuery
+    , mdlPageToken
+    ) where
+
+import           Network.Google.CloudMonitoring.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudmonitoring.metricDescriptors.list@ method which the
+-- 'MetricDescriptorsList' request conforms to.
+type MetricDescriptorsListResource =
+     "cloudmonitoring" :>
+       "v2beta2" :>
+         "projects" :>
+           Capture "project" Text :>
+             "metricDescriptors" :>
+               QueryParam "count" (Textual Int32) :>
+                 QueryParam "query" Text :>
+                   QueryParam "pageToken" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] ListMetricDescriptorsRequest :>
+                         Get '[JSON] ListMetricDescriptorsResponse
+
+-- | List metric descriptors that match the query. If the query is not set,
+-- then all of the metric descriptors will be returned. Large responses
+-- will be paginated, use the nextPageToken returned in the response to
+-- request subsequent pages of results by setting the pageToken query
+-- parameter to the value of the nextPageToken.
+--
+-- /See:/ 'metricDescriptorsList' smart constructor.
+data MetricDescriptorsList = MetricDescriptorsList'
+    { _mdlProject   :: !Text
+    , _mdlCount     :: !(Textual Int32)
+    , _mdlPayload   :: !ListMetricDescriptorsRequest
+    , _mdlQuery     :: !(Maybe Text)
+    , _mdlPageToken :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MetricDescriptorsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mdlProject'
+--
+-- * 'mdlCount'
+--
+-- * 'mdlPayload'
+--
+-- * 'mdlQuery'
+--
+-- * 'mdlPageToken'
+metricDescriptorsList
+    :: Text -- ^ 'mdlProject'
+    -> ListMetricDescriptorsRequest -- ^ 'mdlPayload'
+    -> MetricDescriptorsList
+metricDescriptorsList pMdlProject_ pMdlPayload_ =
+    MetricDescriptorsList'
+    { _mdlProject = pMdlProject_
+    , _mdlCount = 100
+    , _mdlPayload = pMdlPayload_
+    , _mdlQuery = Nothing
+    , _mdlPageToken = Nothing
+    }
+
+-- | The project id. The value can be the numeric project ID or string-based
+-- project name.
+mdlProject :: Lens' MetricDescriptorsList Text
+mdlProject
+  = lens _mdlProject (\ s a -> s{_mdlProject = a})
+
+-- | Maximum number of metric descriptors per page. Used for pagination. If
+-- not specified, count = 100.
+mdlCount :: Lens' MetricDescriptorsList Int32
+mdlCount
+  = lens _mdlCount (\ s a -> s{_mdlCount = a}) .
+      _Coerce
+
+-- | Multipart request metadata.
+mdlPayload :: Lens' MetricDescriptorsList ListMetricDescriptorsRequest
+mdlPayload
+  = lens _mdlPayload (\ s a -> s{_mdlPayload = a})
+
+-- | The query used to search against existing metrics. Separate keywords
+-- with a space; the service joins all keywords with AND, meaning that all
+-- keywords must match for a metric to be returned. If this field is
+-- omitted, all metrics are returned. If an empty string is passed with
+-- this field, no metrics are returned.
+mdlQuery :: Lens' MetricDescriptorsList (Maybe Text)
+mdlQuery = lens _mdlQuery (\ s a -> s{_mdlQuery = a})
+
+-- | The pagination token, which is used to page through large result sets.
+-- Set this value to the value of the nextPageToken to retrieve the next
+-- page of results.
+mdlPageToken :: Lens' MetricDescriptorsList (Maybe Text)
+mdlPageToken
+  = lens _mdlPageToken (\ s a -> s{_mdlPageToken = a})
+
+instance GoogleRequest MetricDescriptorsList where
+        type Rs MetricDescriptorsList =
+             ListMetricDescriptorsResponse
+        type Scopes MetricDescriptorsList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/monitoring"]
+        requestClient MetricDescriptorsList'{..}
+          = go _mdlProject (Just _mdlCount) _mdlQuery
+              _mdlPageToken
+              (Just AltJSON)
+              _mdlPayload
+              cloudMonitoringService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy MetricDescriptorsListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudMonitoring/Timeseries/List.hs b/gen/Network/Google/Resource/CloudMonitoring/Timeseries/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudMonitoring/Timeseries/List.hs
@@ -0,0 +1,243 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.CloudMonitoring.Timeseries.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the data points of the time series that match the metric and labels
+-- values and that have data points in the interval. Large responses are
+-- paginated; use the nextPageToken returned in the response to request
+-- subsequent pages of results by setting the pageToken query parameter to
+-- the value of the nextPageToken.
+--
+-- /See:/ <https://cloud.google.com/monitoring/v2beta2/ Cloud Monitoring API Reference> for @cloudmonitoring.timeseries.list@.
+module Network.Google.Resource.CloudMonitoring.Timeseries.List
+    (
+    -- * REST Resource
+      TimeseriesListResource
+
+    -- * Creating a Request
+    , timeseriesList
+    , TimeseriesList
+
+    -- * Request Lenses
+    , tlWindow
+    , tlProject
+    , tlCount
+    , tlPayload
+    , tlAggregator
+    , tlTimespan
+    , tlMetric
+    , tlOldest
+    , tlLabels
+    , tlPageToken
+    , tlYoungest
+    ) where
+
+import           Network.Google.CloudMonitoring.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudmonitoring.timeseries.list@ method which the
+-- 'TimeseriesList' request conforms to.
+type TimeseriesListResource =
+     "cloudmonitoring" :>
+       "v2beta2" :>
+         "projects" :>
+           Capture "project" Text :>
+             "timeseries" :>
+               Capture "metric" Text :>
+                 QueryParam "youngest" Text :>
+                   QueryParam "window" Text :>
+                     QueryParam "count" (Textual Int32) :>
+                       QueryParam "aggregator" TimeseriesListAggregator :>
+                         QueryParam "timespan" Text :>
+                           QueryParam "oldest" Text :>
+                             QueryParams "labels" Text :>
+                               QueryParam "pageToken" Text :>
+                                 QueryParam "alt" AltJSON :>
+                                   ReqBody '[JSON] ListTimeseriesRequest :>
+                                     Get '[JSON] ListTimeseriesResponse
+
+-- | List the data points of the time series that match the metric and labels
+-- values and that have data points in the interval. Large responses are
+-- paginated; use the nextPageToken returned in the response to request
+-- subsequent pages of results by setting the pageToken query parameter to
+-- the value of the nextPageToken.
+--
+-- /See:/ 'timeseriesList' smart constructor.
+data TimeseriesList = TimeseriesList'
+    { _tlWindow     :: !(Maybe Text)
+    , _tlProject    :: !Text
+    , _tlCount      :: !(Textual Int32)
+    , _tlPayload    :: !ListTimeseriesRequest
+    , _tlAggregator :: !(Maybe TimeseriesListAggregator)
+    , _tlTimespan   :: !(Maybe Text)
+    , _tlMetric     :: !Text
+    , _tlOldest     :: !(Maybe Text)
+    , _tlLabels     :: !(Maybe [Text])
+    , _tlPageToken  :: !(Maybe Text)
+    , _tlYoungest   :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TimeseriesList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tlWindow'
+--
+-- * 'tlProject'
+--
+-- * 'tlCount'
+--
+-- * 'tlPayload'
+--
+-- * 'tlAggregator'
+--
+-- * 'tlTimespan'
+--
+-- * 'tlMetric'
+--
+-- * 'tlOldest'
+--
+-- * 'tlLabels'
+--
+-- * 'tlPageToken'
+--
+-- * 'tlYoungest'
+timeseriesList
+    :: Text -- ^ 'tlProject'
+    -> ListTimeseriesRequest -- ^ 'tlPayload'
+    -> Text -- ^ 'tlMetric'
+    -> Text -- ^ 'tlYoungest'
+    -> TimeseriesList
+timeseriesList pTlProject_ pTlPayload_ pTlMetric_ pTlYoungest_ =
+    TimeseriesList'
+    { _tlWindow = Nothing
+    , _tlProject = pTlProject_
+    , _tlCount = 6000
+    , _tlPayload = pTlPayload_
+    , _tlAggregator = Nothing
+    , _tlTimespan = Nothing
+    , _tlMetric = pTlMetric_
+    , _tlOldest = Nothing
+    , _tlLabels = Nothing
+    , _tlPageToken = Nothing
+    , _tlYoungest = pTlYoungest_
+    }
+
+-- | The sampling window. At most one data point will be returned for each
+-- window in the requested time interval. This parameter is only valid for
+-- non-cumulative metric types. Units: - m: minute - h: hour - d: day - w:
+-- week Examples: 3m, 4w. Only one unit is allowed, for example: 2w3d is
+-- not allowed; you should use 17d instead.
+tlWindow :: Lens' TimeseriesList (Maybe Text)
+tlWindow = lens _tlWindow (\ s a -> s{_tlWindow = a})
+
+-- | The project ID to which this time series belongs. The value can be the
+-- numeric project ID or string-based project name.
+tlProject :: Lens' TimeseriesList Text
+tlProject
+  = lens _tlProject (\ s a -> s{_tlProject = a})
+
+-- | Maximum number of data points per page, which is used for pagination of
+-- results.
+tlCount :: Lens' TimeseriesList Int32
+tlCount
+  = lens _tlCount (\ s a -> s{_tlCount = a}) . _Coerce
+
+-- | Multipart request metadata.
+tlPayload :: Lens' TimeseriesList ListTimeseriesRequest
+tlPayload
+  = lens _tlPayload (\ s a -> s{_tlPayload = a})
+
+-- | The aggregation function that will reduce the data points in each window
+-- to a single point. This parameter is only valid for non-cumulative
+-- metrics with a value type of INT64 or DOUBLE.
+tlAggregator :: Lens' TimeseriesList (Maybe TimeseriesListAggregator)
+tlAggregator
+  = lens _tlAggregator (\ s a -> s{_tlAggregator = a})
+
+-- | Length of the time interval to query, which is an alternative way to
+-- declare the interval: (youngest - timespan, youngest]. The timespan and
+-- oldest parameters should not be used together. Units: - s: second - m:
+-- minute - h: hour - d: day - w: week Examples: 2s, 3m, 4w. Only one unit
+-- is allowed, for example: 2w3d is not allowed; you should use 17d
+-- instead. If neither oldest nor timespan is specified, the default time
+-- interval will be (youngest - 4 hours, youngest].
+tlTimespan :: Lens' TimeseriesList (Maybe Text)
+tlTimespan
+  = lens _tlTimespan (\ s a -> s{_tlTimespan = a})
+
+-- | Metric names are protocol-free URLs as listed in the Supported Metrics
+-- page. For example,
+-- compute.googleapis.com\/instance\/disk\/read_ops_count.
+tlMetric :: Lens' TimeseriesList Text
+tlMetric = lens _tlMetric (\ s a -> s{_tlMetric = a})
+
+-- | Start of the time interval (exclusive), which is expressed as an RFC
+-- 3339 timestamp. If neither oldest nor timespan is specified, the default
+-- time interval will be (youngest - 4 hours, youngest]
+tlOldest :: Lens' TimeseriesList (Maybe Text)
+tlOldest = lens _tlOldest (\ s a -> s{_tlOldest = a})
+
+-- | A collection of labels for the matching time series, which are
+-- represented as: - key==value: key equals the value - key=~value: key
+-- regex matches the value - key!=value: key does not equal the value -
+-- key!~value: key regex does not match the value For example, to list all
+-- of the time series descriptors for the region us-central1, you could
+-- specify: label=cloud.googleapis.com%2Flocation=~us-central1.*
+tlLabels :: Lens' TimeseriesList [Text]
+tlLabels
+  = lens _tlLabels (\ s a -> s{_tlLabels = a}) .
+      _Default
+      . _Coerce
+
+-- | The pagination token, which is used to page through large result sets.
+-- Set this value to the value of the nextPageToken to retrieve the next
+-- page of results.
+tlPageToken :: Lens' TimeseriesList (Maybe Text)
+tlPageToken
+  = lens _tlPageToken (\ s a -> s{_tlPageToken = a})
+
+-- | End of the time interval (inclusive), which is expressed as an RFC 3339
+-- timestamp.
+tlYoungest :: Lens' TimeseriesList Text
+tlYoungest
+  = lens _tlYoungest (\ s a -> s{_tlYoungest = a})
+
+instance GoogleRequest TimeseriesList where
+        type Rs TimeseriesList = ListTimeseriesResponse
+        type Scopes TimeseriesList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/monitoring"]
+        requestClient TimeseriesList'{..}
+          = go _tlProject _tlMetric (Just _tlYoungest)
+              _tlWindow
+              (Just _tlCount)
+              _tlAggregator
+              _tlTimespan
+              _tlOldest
+              (_tlLabels ^. _Default)
+              _tlPageToken
+              (Just AltJSON)
+              _tlPayload
+              cloudMonitoringService
+          where go
+                  = buildClient (Proxy :: Proxy TimeseriesListResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudMonitoring/Timeseries/Write.hs b/gen/Network/Google/Resource/CloudMonitoring/Timeseries/Write.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudMonitoring/Timeseries/Write.hs
@@ -0,0 +1,114 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.CloudMonitoring.Timeseries.Write
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Put data points to one or more time series for one or more metrics. If a
+-- time series does not exist, a new time series will be created. It is not
+-- allowed to write a time series point that is older than the existing
+-- youngest point of that time series. Points that are older than the
+-- existing youngest point of that time series will be discarded silently.
+-- Therefore, users should make sure that points of a time series are
+-- written sequentially in the order of their end time.
+--
+-- /See:/ <https://cloud.google.com/monitoring/v2beta2/ Cloud Monitoring API Reference> for @cloudmonitoring.timeseries.write@.
+module Network.Google.Resource.CloudMonitoring.Timeseries.Write
+    (
+    -- * REST Resource
+      TimeseriesWriteResource
+
+    -- * Creating a Request
+    , timeseriesWrite
+    , TimeseriesWrite
+
+    -- * Request Lenses
+    , twProject
+    , twPayload
+    ) where
+
+import           Network.Google.CloudMonitoring.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudmonitoring.timeseries.write@ method which the
+-- 'TimeseriesWrite' request conforms to.
+type TimeseriesWriteResource =
+     "cloudmonitoring" :>
+       "v2beta2" :>
+         "projects" :>
+           Capture "project" Text :>
+             "timeseries:write" :>
+               QueryParam "alt" AltJSON :>
+                 ReqBody '[JSON] WriteTimeseriesRequest :>
+                   Post '[JSON] WriteTimeseriesResponse
+
+-- | Put data points to one or more time series for one or more metrics. If a
+-- time series does not exist, a new time series will be created. It is not
+-- allowed to write a time series point that is older than the existing
+-- youngest point of that time series. Points that are older than the
+-- existing youngest point of that time series will be discarded silently.
+-- Therefore, users should make sure that points of a time series are
+-- written sequentially in the order of their end time.
+--
+-- /See:/ 'timeseriesWrite' smart constructor.
+data TimeseriesWrite = TimeseriesWrite'
+    { _twProject :: !Text
+    , _twPayload :: !WriteTimeseriesRequest
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TimeseriesWrite' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'twProject'
+--
+-- * 'twPayload'
+timeseriesWrite
+    :: Text -- ^ 'twProject'
+    -> WriteTimeseriesRequest -- ^ 'twPayload'
+    -> TimeseriesWrite
+timeseriesWrite pTwProject_ pTwPayload_ =
+    TimeseriesWrite'
+    { _twProject = pTwProject_
+    , _twPayload = pTwPayload_
+    }
+
+-- | The project ID. The value can be the numeric project ID or string-based
+-- project name.
+twProject :: Lens' TimeseriesWrite Text
+twProject
+  = lens _twProject (\ s a -> s{_twProject = a})
+
+-- | Multipart request metadata.
+twPayload :: Lens' TimeseriesWrite WriteTimeseriesRequest
+twPayload
+  = lens _twPayload (\ s a -> s{_twPayload = a})
+
+instance GoogleRequest TimeseriesWrite where
+        type Rs TimeseriesWrite = WriteTimeseriesResponse
+        type Scopes TimeseriesWrite =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/monitoring"]
+        requestClient TimeseriesWrite'{..}
+          = go _twProject (Just AltJSON) _twPayload
+              cloudMonitoringService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy TimeseriesWriteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudMonitoring/TimeseriesDescriptors/List.hs b/gen/Network/Google/Resource/CloudMonitoring/TimeseriesDescriptors/List.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudMonitoring/TimeseriesDescriptors/List.hs
@@ -0,0 +1,256 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.CloudMonitoring.TimeseriesDescriptors.List
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- List the descriptors of the time series that match the metric and labels
+-- values and that have data points in the interval. Large responses are
+-- paginated; use the nextPageToken returned in the response to request
+-- subsequent pages of results by setting the pageToken query parameter to
+-- the value of the nextPageToken.
+--
+-- /See:/ <https://cloud.google.com/monitoring/v2beta2/ Cloud Monitoring API Reference> for @cloudmonitoring.timeseriesDescriptors.list@.
+module Network.Google.Resource.CloudMonitoring.TimeseriesDescriptors.List
+    (
+    -- * REST Resource
+      TimeseriesDescriptorsListResource
+
+    -- * Creating a Request
+    , timeseriesDescriptorsList
+    , TimeseriesDescriptorsList
+
+    -- * Request Lenses
+    , tdlWindow
+    , tdlProject
+    , tdlCount
+    , tdlPayload
+    , tdlAggregator
+    , tdlTimespan
+    , tdlMetric
+    , tdlOldest
+    , tdlLabels
+    , tdlPageToken
+    , tdlYoungest
+    ) where
+
+import           Network.Google.CloudMonitoring.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudmonitoring.timeseriesDescriptors.list@ method which the
+-- 'TimeseriesDescriptorsList' request conforms to.
+type TimeseriesDescriptorsListResource =
+     "cloudmonitoring" :>
+       "v2beta2" :>
+         "projects" :>
+           Capture "project" Text :>
+             "timeseriesDescriptors" :>
+               Capture "metric" Text :>
+                 QueryParam "youngest" Text :>
+                   QueryParam "window" Text :>
+                     QueryParam "count" (Textual Int32) :>
+                       QueryParam "aggregator"
+                         TimeseriesDescriptorsListAggregator
+                         :>
+                         QueryParam "timespan" Text :>
+                           QueryParam "oldest" Text :>
+                             QueryParams "labels" Text :>
+                               QueryParam "pageToken" Text :>
+                                 QueryParam "alt" AltJSON :>
+                                   ReqBody '[JSON]
+                                     ListTimeseriesDescriptorsRequest
+                                     :>
+                                     Get '[JSON]
+                                       ListTimeseriesDescriptorsResponse
+
+-- | List the descriptors of the time series that match the metric and labels
+-- values and that have data points in the interval. Large responses are
+-- paginated; use the nextPageToken returned in the response to request
+-- subsequent pages of results by setting the pageToken query parameter to
+-- the value of the nextPageToken.
+--
+-- /See:/ 'timeseriesDescriptorsList' smart constructor.
+data TimeseriesDescriptorsList = TimeseriesDescriptorsList'
+    { _tdlWindow     :: !(Maybe Text)
+    , _tdlProject    :: !Text
+    , _tdlCount      :: !(Textual Int32)
+    , _tdlPayload    :: !ListTimeseriesDescriptorsRequest
+    , _tdlAggregator :: !(Maybe TimeseriesDescriptorsListAggregator)
+    , _tdlTimespan   :: !(Maybe Text)
+    , _tdlMetric     :: !Text
+    , _tdlOldest     :: !(Maybe Text)
+    , _tdlLabels     :: !(Maybe [Text])
+    , _tdlPageToken  :: !(Maybe Text)
+    , _tdlYoungest   :: !Text
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TimeseriesDescriptorsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tdlWindow'
+--
+-- * 'tdlProject'
+--
+-- * 'tdlCount'
+--
+-- * 'tdlPayload'
+--
+-- * 'tdlAggregator'
+--
+-- * 'tdlTimespan'
+--
+-- * 'tdlMetric'
+--
+-- * 'tdlOldest'
+--
+-- * 'tdlLabels'
+--
+-- * 'tdlPageToken'
+--
+-- * 'tdlYoungest'
+timeseriesDescriptorsList
+    :: Text -- ^ 'tdlProject'
+    -> ListTimeseriesDescriptorsRequest -- ^ 'tdlPayload'
+    -> Text -- ^ 'tdlMetric'
+    -> Text -- ^ 'tdlYoungest'
+    -> TimeseriesDescriptorsList
+timeseriesDescriptorsList pTdlProject_ pTdlPayload_ pTdlMetric_ pTdlYoungest_ =
+    TimeseriesDescriptorsList'
+    { _tdlWindow = Nothing
+    , _tdlProject = pTdlProject_
+    , _tdlCount = 100
+    , _tdlPayload = pTdlPayload_
+    , _tdlAggregator = Nothing
+    , _tdlTimespan = Nothing
+    , _tdlMetric = pTdlMetric_
+    , _tdlOldest = Nothing
+    , _tdlLabels = Nothing
+    , _tdlPageToken = Nothing
+    , _tdlYoungest = pTdlYoungest_
+    }
+
+-- | The sampling window. At most one data point will be returned for each
+-- window in the requested time interval. This parameter is only valid for
+-- non-cumulative metric types. Units: - m: minute - h: hour - d: day - w:
+-- week Examples: 3m, 4w. Only one unit is allowed, for example: 2w3d is
+-- not allowed; you should use 17d instead.
+tdlWindow :: Lens' TimeseriesDescriptorsList (Maybe Text)
+tdlWindow
+  = lens _tdlWindow (\ s a -> s{_tdlWindow = a})
+
+-- | The project ID to which this time series belongs. The value can be the
+-- numeric project ID or string-based project name.
+tdlProject :: Lens' TimeseriesDescriptorsList Text
+tdlProject
+  = lens _tdlProject (\ s a -> s{_tdlProject = a})
+
+-- | Maximum number of time series descriptors per page. Used for pagination.
+-- If not specified, count = 100.
+tdlCount :: Lens' TimeseriesDescriptorsList Int32
+tdlCount
+  = lens _tdlCount (\ s a -> s{_tdlCount = a}) .
+      _Coerce
+
+-- | Multipart request metadata.
+tdlPayload :: Lens' TimeseriesDescriptorsList ListTimeseriesDescriptorsRequest
+tdlPayload
+  = lens _tdlPayload (\ s a -> s{_tdlPayload = a})
+
+-- | The aggregation function that will reduce the data points in each window
+-- to a single point. This parameter is only valid for non-cumulative
+-- metrics with a value type of INT64 or DOUBLE.
+tdlAggregator :: Lens' TimeseriesDescriptorsList (Maybe TimeseriesDescriptorsListAggregator)
+tdlAggregator
+  = lens _tdlAggregator
+      (\ s a -> s{_tdlAggregator = a})
+
+-- | Length of the time interval to query, which is an alternative way to
+-- declare the interval: (youngest - timespan, youngest]. The timespan and
+-- oldest parameters should not be used together. Units: - s: second - m:
+-- minute - h: hour - d: day - w: week Examples: 2s, 3m, 4w. Only one unit
+-- is allowed, for example: 2w3d is not allowed; you should use 17d
+-- instead. If neither oldest nor timespan is specified, the default time
+-- interval will be (youngest - 4 hours, youngest].
+tdlTimespan :: Lens' TimeseriesDescriptorsList (Maybe Text)
+tdlTimespan
+  = lens _tdlTimespan (\ s a -> s{_tdlTimespan = a})
+
+-- | Metric names are protocol-free URLs as listed in the Supported Metrics
+-- page. For example,
+-- compute.googleapis.com\/instance\/disk\/read_ops_count.
+tdlMetric :: Lens' TimeseriesDescriptorsList Text
+tdlMetric
+  = lens _tdlMetric (\ s a -> s{_tdlMetric = a})
+
+-- | Start of the time interval (exclusive), which is expressed as an RFC
+-- 3339 timestamp. If neither oldest nor timespan is specified, the default
+-- time interval will be (youngest - 4 hours, youngest]
+tdlOldest :: Lens' TimeseriesDescriptorsList (Maybe Text)
+tdlOldest
+  = lens _tdlOldest (\ s a -> s{_tdlOldest = a})
+
+-- | A collection of labels for the matching time series, which are
+-- represented as: - key==value: key equals the value - key=~value: key
+-- regex matches the value - key!=value: key does not equal the value -
+-- key!~value: key regex does not match the value For example, to list all
+-- of the time series descriptors for the region us-central1, you could
+-- specify: label=cloud.googleapis.com%2Flocation=~us-central1.*
+tdlLabels :: Lens' TimeseriesDescriptorsList [Text]
+tdlLabels
+  = lens _tdlLabels (\ s a -> s{_tdlLabels = a}) .
+      _Default
+      . _Coerce
+
+-- | The pagination token, which is used to page through large result sets.
+-- Set this value to the value of the nextPageToken to retrieve the next
+-- page of results.
+tdlPageToken :: Lens' TimeseriesDescriptorsList (Maybe Text)
+tdlPageToken
+  = lens _tdlPageToken (\ s a -> s{_tdlPageToken = a})
+
+-- | End of the time interval (inclusive), which is expressed as an RFC 3339
+-- timestamp.
+tdlYoungest :: Lens' TimeseriesDescriptorsList Text
+tdlYoungest
+  = lens _tdlYoungest (\ s a -> s{_tdlYoungest = a})
+
+instance GoogleRequest TimeseriesDescriptorsList
+         where
+        type Rs TimeseriesDescriptorsList =
+             ListTimeseriesDescriptorsResponse
+        type Scopes TimeseriesDescriptorsList =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/monitoring"]
+        requestClient TimeseriesDescriptorsList'{..}
+          = go _tdlProject _tdlMetric (Just _tdlYoungest)
+              _tdlWindow
+              (Just _tdlCount)
+              _tdlAggregator
+              _tdlTimespan
+              _tdlOldest
+              (_tdlLabels ^. _Default)
+              _tdlPageToken
+              (Just AltJSON)
+              _tdlPayload
+              cloudMonitoringService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy TimeseriesDescriptorsListResource)
+                      mempty
diff --git a/gogol-cloudmonitoring.cabal b/gogol-cloudmonitoring.cabal
new file mode 100644
--- /dev/null
+++ b/gogol-cloudmonitoring.cabal
@@ -0,0 +1,51 @@
+name:                  gogol-cloudmonitoring
+version:               0.1.0
+synopsis:              Google Cloud Monitoring SDK.
+homepage:              https://github.com/brendanhay/gogol
+bug-reports:           https://github.com/brendanhay/gogol/issues
+license:               OtherLicense
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
+copyright:             Copyright (c) 2015-2016 Brendan Hay
+category:              Network, Google, Cloud
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md
+
+description:
+    Accesses Google Cloud Monitoring data.
+    .
+    /Warning:/ This is an experimental prototype/preview release which is still
+    under exploratory development and not intended for public use, caveat emptor!
+    .
+    This library is compatible with version @v2beta2@
+    of the API.
+
+source-repository head
+    type:     git
+    location: git://github.com/brendanhay/gogol.git
+
+library
+    default-language:  Haskell2010
+    hs-source-dirs:    src gen
+
+    ghc-options:       -Wall
+
+    exposed-modules:
+          Network.Google.CloudMonitoring
+        , Network.Google.CloudMonitoring.Types
+        , Network.Google.Resource.CloudMonitoring.MetricDescriptors.Create
+        , Network.Google.Resource.CloudMonitoring.MetricDescriptors.Delete
+        , Network.Google.Resource.CloudMonitoring.MetricDescriptors.List
+        , Network.Google.Resource.CloudMonitoring.Timeseries.List
+        , Network.Google.Resource.CloudMonitoring.Timeseries.Write
+        , Network.Google.Resource.CloudMonitoring.TimeseriesDescriptors.List
+
+    other-modules:
+          Network.Google.CloudMonitoring.Types.Product
+        , Network.Google.CloudMonitoring.Types.Sum
+
+    build-depends:
+          gogol-core == 0.1.0.*
+        , base       >= 4.7 && < 5
