Ejemplo n.º 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).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()
        ).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 dateime. Must divide timestamp by 1000 since python's
    # fromtimestamp takes a timestamp in seconds, whereas elasticsearch's timestamp is in milliseconds
    results = map(
        lambda result: (datetime.fromtimestamp(result.key / 1000).date().isoformat(), result.doc_count), results
    )
    return dict(results)