docs: def get_metric_data_points(self, metric, start, end, points=None,
              resolution=None, stats=None):
          """
          Returns the data points for a given metric for the given period. The
          'start' and 'end' times must be specified; they can be be either Python
          date/datetime values, or a Unix timestamp.
  
          The 'points' parameter represents the number of points to return. The
          'resolution' parameter represents the granularity of the data. You must
          specify either 'points' or 'resolution'. The allowed values for
          resolution are:
              FULL
              MIN5
              MIN20
              MIN60
              MIN240
              MIN1440
  
          Finally, the 'stats' parameter specifies the stats you want returned.
          By default only the 'average' is returned. You omit this parameter,
          pass in a single value, or pass in a list of values. The allowed values
          are:
              average
              variance
              min
              max
          """
          allowed_resolutions = ("FULL", "MIN5", "MIN20", "MIN60", "MIN240",
                  "MIN1440")
          if not (points or resolution):
              raise exc.MissingMonitoringCheckGranularity("You must specify "
                      "either the 'points' or 'resolution' parameter when "
                      "fetching metrics.")
          if resolution:
              if resolution.upper() not in allowed_resolutions:
                  raise exc.InvalidMonitoringMetricsResolution("The specified "
                          "resolution '%s' is not valid. The valid values are: "
                          "%s." % (resolution, str(allowed_resolutions)))
          start_tm = utils.to_timestamp(start)
          end_tm = utils.to_timestamp(end)
          # NOTE: For some odd reason, the timestamps required for this must be
          # in milliseconds, instead of the UNIX standard for timestamps, which
          # is in seconds. So the values here are multiplied by 1000 to make it
          # work. If the API is ever corrected, the next two lines should be
          # removed. GitHub #176.
          start_tm *= 1000
          end_tm *= 1000
          qparms = []
          # Timestamps with fractional seconds currently cause a 408 (timeout)
          qparms.append("from=%s" % int(start_tm))
          qparms.append("to=%s" % int(end_tm))
          if points:
              qparms.append("points=%s" % points)
          if resolution:
              qparms.append("resolution=%s" % resolution.upper())
          if stats:
              stats = utils.coerce_to_list(stats)
              for stat in stats:
                  qparms.append("select=%s" % stat)
          qparm = "&".join(qparms)
          uri = "/%s/%s/plot?%s" % (self.uri_base, metric, qparm)
          try:
              resp, resp_body = self.api.method_get(uri)
          except exc.BadRequest as e:
              msg = e.message
              dtls = e.details
              if msg.startswith("Validation error"):
                  raise exc.InvalidMonitoringMetricsRequest("Your request was "
                          "invalid: '%s'" % dtls)
              else:
                  raise
          return resp_body["values"]