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)
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
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)
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)
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)
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)
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)
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)
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
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
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