docs: def __get_query_agg_ts(cls, field, time_field, interval=None,
                             time_zone=None, start=None, end=None,
                             agg_type='count', offset=None):
          """
          Create an es_dsl aggregation object for getting the time series values for a field.
  
          :param field: field to get the time series values
          :param time_field: field with the date
          :param interval: interval to be used to generate the time series values, such as:(year(y),
                           quarter(q), month(M), week(w), day(d), hour(h), minute(m), second(s))
          :param time_zone: time zone for the time_field
          :param start: date from for the time series, should be a datetime.datetime object
          :param end: date to for the time series, should be a datetime.datetime object
          :param agg_type: kind of aggregation for the field (cardinality, avg, percentiles)
          :param offset: offset to be added to the time_field in days
          :return: a aggregation object to calculate timeseries values of a field
          """
          """ Time series for an aggregation metric """
          if not interval:
              interval = '1M'
          if not time_zone:
              time_zone = 'UTC'
  
          if not field:
              field_agg = ''
          else:
              if agg_type == "cardinality":
                  agg_id, field_agg = cls.__get_query_agg_cardinality(field, agg_id=cls.AGGREGATION_ID + 1)
              elif agg_type == "avg":
                  agg_id, field_agg = cls.__get_query_agg_avg(field, agg_id=cls.AGGREGATION_ID + 1)
              elif agg_type == "percentiles":
                  agg_id, field_agg = cls.__get_query_agg_percentiles(field, agg_id=cls.AGGREGATION_ID + 1)
              else:
                  raise RuntimeError("Aggregation of %s in ts not supported" % agg_type)
  
          bounds = {}
          if start or end:
              if not offset:
                  # With offset and quarter interval bogus buckets are added
                  # to the start and to the end if extended_bounds is used
                  # https://github.com/elastic/elasticsearch/issues/23776
                  bounds = cls.__get_bounds(start, end)
              else:
                  bounds = {'offset': offset}
  
          query_agg = A("date_histogram", field=time_field, interval=interval,
                        time_zone=time_zone, min_doc_count=0, **bounds)
  
          agg_dict = field_agg.to_dict()[field_agg.name]
          query_agg.bucket(agg_id, field_agg.name, **agg_dict)
  
          return (cls.AGGREGATION_ID, query_agg)