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)
def __get_query_agg_ts ( cls , field , time_field , interval = None , time_zone = None , start = None , end = None , agg_type = 'count' , offset = None ) : 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 : 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 )
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