Esempio n. 1
0
def get_commconnect_domain_stats_data(domains, datespan, interval, datefield="date_created", additional_params_es={}):
    """
    Returns domains that have used SMS.
    Returned based on date domain is created
    """
    sms = SMSES().domain(domains).terms_facet("domain", "domains", size=DOMAIN_COUNT_UPPER_BOUND).size(0)

    if additional_params_es:
        sms = add_params_to_query(sms, additional_params_es)

    sms_domains = {x["term"] for x in sms.run().facet("domains", "terms")}

    domains_after_date = (
        DomainES()
        .in_domains(sms_domains)
        .created(gte=datespan.startdate, lte=datespan.enddate)
        .date_histogram("date", datefield, interval)
        .size(0)
    )

    histo_data = domains_after_date.run().facet("date", "entries")

    domains_before_date = DomainES().in_domains(sms_domains).created(lt=datespan.startdate).size(0)

    domains_before_date = domains_before_date.run().total
    return format_return_data(histo_data, domains_before_date, datespan)
Esempio n. 2
0
def sms_in_last(domain, days=None):
    query = SMSES().domain(domain).size(0)

    if days:
        query = query.received(date.today() - relativedelta(days=30))

    return query.run().total
Esempio n. 3
0
def get_real_sms_messages_data(
    domains, datespan, interval, datefield="date", is_commtrack=False, additional_params_es={}
):
    """
    Returns SMS sent in timespan.
    Returned based on date SMS was sent
    """
    sms_after_date = (
        SMSES()
        .domain(domains)
        .received(gte=datespan.startdate, lte=datespan.enddate)
        .date_histogram("date", datefield, interval)
        .size(0)
    )
    if additional_params_es:
        sms_after_date = add_params_to_query(sms_after_date, additional_params_es)
    if is_commtrack:
        sms_after_date = sms_after_date.to_commcare_user_or_case()

    histo_data = sms_after_date.run().facet("date", "entries")

    sms_before_date = SMSES().domain(domains).received(lt=datespan.startdate).size(0)

    if additional_params_es:
        sms_before_date = add_params_to_query(sms_before_date, additional_params_es)
    if is_commtrack:
        sms_before_date = sms_before_date.to_commcare_user_or_case()

    sms_before_date = sms_before_date.run().total

    return format_return_data(histo_data, sms_before_date, datespan)
Esempio n. 4
0
def get_sms_only_domain_stats_data(domains, datespan, interval, datefield="date_created"):
    """
    Returns domains that have only used SMS and not forms.
    Returned based on date domain is created
    """
    histo_data = []

    sms = SMSES().domain(domains).terms_facet("domain", "domains", size=DOMAIN_COUNT_UPPER_BOUND).size(0)
    forms = FormES().domain(domains).terms_facet("domain", "domains", size=DOMAIN_COUNT_UPPER_BOUND).size(0)

    sms_domains = {x["term"] for x in sms.run().facet("domains", "terms")}
    form_domains = {x["term"] for x in forms.run().facet("domains", "terms")}

    sms_only_domains = sms_domains - form_domains

    domains_after_date = (
        DomainES()
        .in_domains(sms_only_domains)
        .created(gte=datespan.startdate, lte=datespan.enddate)
        .date_histogram("date", datefield, interval)
        .size(0)
    )

    histo_data = domains_after_date.run().facet("date", "entries")

    domains_before_date = DomainES().in_domains(sms_only_domains).created(lt=datespan.startdate).size(0)

    domains_before_date = domains_before_date.run().total
    return format_return_data(histo_data, domains_before_date, datespan)
Esempio n. 5
0
def sms_in_last(domain, days=None):
    query = SMSES().domain(domain).size(0)

    if days:
        query = query.received(date.today() - relativedelta(days=30))

    return query.run().total
Esempio n. 6
0
def get_commconnect_domain_stats_data(domains, datespan, interval, datefield="date_created", additional_params_es={}):
    """
    Returns domains that have used SMS.
    Returned based on date domain is created
    """
    sms = SMSES().domain(domains).terms_aggregation("domain", "domains").size(0)

    if additional_params_es:
        sms = add_params_to_query(sms, additional_params_es)

    sms_domains = set(sms.run().aggregations.domains.keys)

    domains_after_date = (
        DomainES()
        .in_domains(sms_domains)
        .created(gte=datespan.startdate, lte=datespan.enddate)
        .date_histogram("date", datefield, interval)
        .size(0)
    )

    histo_data = domains_after_date.run().aggregations.date.as_facet_result()

    domains_before_date = DomainES().in_domains(sms_domains).created(lt=datespan.startdate).size(0)

    domains_before_date = domains_before_date.run().total
    return format_return_data(histo_data, domains_before_date, datespan)
Esempio n. 7
0
def get_sms_only_domain_stats_data(domains, datespan, interval, datefield="date_created"):
    """
    Returns domains that have only used SMS and not forms.
    Returned based on date domain is created
    """
    histo_data = []

    sms = SMSES().domain(domains).terms_aggregation("domain", "domains").size(0)
    forms = FormES().domain(domains).terms_aggregation("domain", "domains").size(0)

    sms_domains = set(sms.run().aggregations.domains.keys)
    form_domains = set(forms.run().aggregations.domains.keys)

    sms_only_domains = sms_domains - form_domains

    domains_after_date = (
        DomainES()
        .in_domains(sms_only_domains)
        .created(gte=datespan.startdate, lte=datespan.enddate)
        .date_histogram("date", datefield, interval)
        .size(0)
    )

    histo_data = domains_after_date.run().aggregations.date.as_facet_result()

    domains_before_date = DomainES().in_domains(sms_only_domains).created(lt=datespan.startdate).size(0)

    domains_before_date = domains_before_date.run().total
    return format_return_data(histo_data, domains_before_date, datespan)
Esempio n. 8
0
def get_mobile_workers_data(domains, datespan, interval, datefield="created_on"):
    """
    Returns mobile workers that have used SMS.
    Returned based on date mobile worker is created
    """
    sms_users = SMSES().to_commcare_user().domain(domains).terms_aggregation("couch_recipient", "users").size(0)

    users = sms_users.run().aggregations.users.keys

    users_after_date = (
        UserES()
        .domain(domains)
        .filter({"ids": {"values": users}})
        .mobile_users()
        .show_inactive()
        .created(gte=datespan.startdate, lte=datespan.enddate)
        .date_histogram("date", datefield, interval)
        .size(0)
    )

    histo_data = users_after_date.run().aggregations.date.as_facet_result()

    users_before_date = (
        UserES()
        .domain(domains)
        .filter({"ids": {"values": users}})
        .mobile_users()
        .show_inactive()
        .created(lt=datespan.startdate)
        .count()
    )

    return format_return_data(histo_data, users_before_date, datespan)
Esempio n. 9
0
def get_total_clients_data(domains, datespan, interval, datefield="opened_on"):
    """
    Returns cases that have used SMS.
    Returned based on date case is opened
    """
    sms_cases = SMSES().to_commcare_case().domain(domains).terms_aggregation("couch_recipient", "cases").size(0)

    cases = sms_cases.run().aggregations.cases.keys

    cases_after_date = (
        CaseES()
        .domain(domains)
        .filter({"ids": {"values": cases}})
        .opened_range(gte=datespan.startdate, lte=datespan.enddate)
        .date_histogram("date", datefield, interval)
        .size(0)
    )

    histo_data = cases_after_date.run().aggregations.date.as_facet_result()

    cases_before_date = (
        CaseES().domain(domains).filter({"ids": {"values": cases}}).opened_range(lt=datespan.startdate).count()
    )

    return format_return_data(histo_data, cases_before_date, datespan)
Esempio n. 10
0
def _sms_helper(domain, direction=None, days=None):
    query = SMSES().domain(domain).size(0)

    if direction:
        query = query.direction(direction)

    if days:
        query = query.received(date.today() - relativedelta(days=30))

    return query.run().total
Esempio n. 11
0
def _sms_helper(domain, direction=None, days=None):
    query = SMSES().domain(domain).size(0)

    if direction:
        query = query.direction(direction)

    if days:
        query = query.received(date.today() - relativedelta(days=30))

    return query.run().total
Esempio n. 12
0
def _sms_helper(domain, direction=None, days=None):
    assert direction in (INCOMING, OUTGOING, None), repr(direction)
    query = SMSES().domain(domain).size(0)

    if direction == INCOMING:
        query = query.incoming_messages()
    elif direction == OUTGOING:
        query = query.outgoing_messages()

    if days:
        query = query.received(date.today() - relativedelta(days=days))

    return query.run().total
Esempio n. 13
0
def get_sms_count(domain, direction=None, days=None):
    """
    :param domain: domain name
    :param direction: can specify INCOMING or OUTGOING, or None to retrieve both
    :param days: only return count of sms docs from the past N days
    :return: number of sms docs fetched based on query parameters specified
    """
    assert direction in (INCOMING, OUTGOING, None), repr(direction)
    query = SMSES().domain(domain).size(0)

    if direction == INCOMING:
        query = query.incoming_messages()
    elif direction == OUTGOING:
        query = query.outgoing_messages()

    if days:
        days = int(days) if isinstance(days, str) else days
        query = query.received(date.today() - relativedelta(days=days))

    return query.run().total