Пример #1
0
def _get_form_counts_by_date(domain, user_ids, datespan, timezone,
                             is_submission_time):
    form_query = (FormES().domain(domain).user_id(user_ids))
    for xmlns in SYSTEM_FORM_XMLNS_MAP.keys():
        form_query = form_query.filter(filters.NOT(xmlns_filter(xmlns)))

    if is_submission_time:
        form_query = (form_query.submitted(
            gte=datespan.startdate.date(),
            lte=datespan.enddate.date()).submitted_histogram(timezone.zone))

    else:
        form_query = (form_query.completed(
            gte=datespan.startdate.date(),
            lte=datespan.enddate.date()).completed_histogram(timezone.zone))

    form_query = form_query.size(0)

    results = form_query.run().aggregations.date_histogram.buckets_list

    # Convert timestamp into timezone aware datetime. Must divide timestamp by 1000 since python's
    # fromtimestamp takes a timestamp in seconds, whereas elasticsearch's timestamp is in milliseconds
    results = list(
        map(
            lambda result: (datetime.fromtimestamp(result.key // 1000).date().
                            isoformat(), result.doc_count),
            results,
        ))
    return dict(results)
Пример #2
0
def _get_form_counts_by_date(domain, user_ids, datespan, timezone,
                             is_submission_time):
    form_query = (FormES().domain(domain).user_id(user_ids))
    for xmlns in SYSTEM_FORM_XMLNS_MAP.keys():
        form_query = form_query.filter(filters.NOT(xmlns_filter(xmlns)))

    if is_submission_time:
        form_query = (form_query.submitted(
            gte=datespan.startdate.date(),
            lte=datespan.enddate.date()).submitted_histogram(timezone.zone))

    else:
        form_query = (form_query.completed(
            gte=datespan.startdate.date(),
            lte=datespan.enddate.date()).completed_histogram(timezone.zone))

    form_query = form_query.size(0)

    results = form_query.run().aggregations.date_histogram.buckets_list

    # Convert timestamp from millis -> seconds -> aware datetime
    # ES bucket key is an epoch timestamp relative to the timezone specified,
    # so pass timezone into fromtimestamp() to create an accurate datetime, otherwise will be treated as UTC
    results = list(
        map(
            lambda result:
            (datetime.fromtimestamp(result.key // 1000, timezone).date().
             isoformat(), result.doc_count),
            results,
        ))
    return dict(results)
Пример #3
0
def _get_form_counts_by_date(domain, user_ids, datespan, timezone, is_submission_time):
    form_query = (FormES()
                  .domain(domain)
                  .user_id(user_ids))
    for xmlns in SYSTEM_FORM_XMLNS_MAP.keys():
        form_query = form_query.filter(filters.NOT(xmlns_filter(xmlns)))

    if is_submission_time:
        form_query = (form_query
            .submitted(gte=datespan.startdate.date(),
                     lte=datespan.enddate.date())
            .submitted_histogram(timezone.zone))

    else:
        form_query = (form_query
            .completed(gte=datespan.startdate.date(),
                     lte=datespan.enddate.date())
            .completed_histogram(timezone.zone))

    form_query = form_query.size(0)

    results = form_query.run().aggregations.date_histogram.buckets_list

    # Convert timestamp into timezone aware datetime. Must divide timestamp by 1000 since python's
    # fromtimestamp takes a timestamp in seconds, whereas elasticsearch's timestamp is in milliseconds
    results = list(map(
        lambda result:
            (datetime.fromtimestamp(result.key // 1000).date().isoformat(), result.doc_count),
        results,
    ))
    return dict(results)
Пример #4
0
def _get_form_counts_by_user(domain, datespan, is_submission_time, user_ids=None):
    form_query = FormES().domain(domain).filter(filters.NOT(xmlns_filter(SYSTEM_FORM_XMLNS)))

    if is_submission_time:
        form_query = form_query.submitted(gte=datespan.startdate.date(), lte=datespan.enddate.date())
    else:
        form_query = form_query.completed(gte=datespan.startdate.date(), lte=datespan.enddate.date())

    if user_ids:
        form_query = form_query.user_id(user_ids)

    form_query = form_query.user_aggregation().size(0)
    return form_query.run().aggregations.user.counts_by_bucket()
Пример #5
0
def _get_form_counts_by_user(domain, datespan, is_submission_time, user_ids=None):
    form_query = FormES().domain(domain).filter(filters.NOT(xmlns_filter(SYSTEM_FORM_XMLNS)))

    if is_submission_time:
        form_query = (form_query
            .submitted(gte=datespan.startdate.date(),
                       lte=datespan.enddate.date()))
    else:
        form_query = (form_query
            .completed(gte=datespan.startdate.date(),
                       lte=datespan.enddate.date()))

    if user_ids:
        form_query = form_query.user_id(user_ids)

    form_query = (form_query
        .user_aggregation()
        .size(0))
    return form_query.run().aggregations.user.counts_by_bucket()
Пример #6
0
def _get_form_counts_by_user(domain,
                             datespan,
                             is_submission_time,
                             user_ids=None,
                             export=False):
    es_instance = ES_EXPORT_INSTANCE if export else ES_DEFAULT_INSTANCE
    form_query = FormES(es_instance_alias=es_instance).domain(domain)
    for xmlns in SYSTEM_FORM_XMLNS_MAP.keys():
        form_query = form_query.filter(filters.NOT(xmlns_filter(xmlns)))

    if is_submission_time:
        form_query = (form_query.submitted(gte=datespan.startdate.date(),
                                           lte=datespan.enddate.date()))
    else:
        form_query = (form_query.completed(gte=datespan.startdate.date(),
                                           lte=datespan.enddate.date()))

    if user_ids:
        form_query = form_query.user_id(user_ids)

    form_query = (form_query.user_aggregation().size(0))
    return form_query.run().aggregations.user.counts_by_bucket()
Пример #7
0
def _get_form_counts_by_user(domain, datespan, is_submission_time, user_ids=None, export=False):
    es_instance = ES_EXPORT_INSTANCE if export else ES_DEFAULT_INSTANCE
    form_query = FormES(es_instance_alias=es_instance).domain(domain)
    for xmlns in SYSTEM_FORM_XMLNS_MAP.keys():
        form_query = form_query.filter(filters.NOT(xmlns_filter(xmlns)))

    if is_submission_time:
        form_query = (form_query
            .submitted(gte=datespan.startdate.date(),
                       lte=datespan.enddate.date()))
    else:
        form_query = (form_query
            .completed(gte=datespan.startdate.date(),
                       lte=datespan.enddate.date()))

    if user_ids:
        form_query = form_query.user_id(user_ids)

    form_query = (form_query
        .user_aggregation()
        .size(0))
    return form_query.run().aggregations.user.counts_by_bucket()