def _get_persons_url(self, filter: StickinessFilter, entity: Entity) -> List[Dict[str, Any]]: persons_url = [] for interval_idx in range(1, filter.total_intervals): filter_params = filter.to_params() extra_params = { "stickiness_days": interval_idx, "entity_id": entity.id, "entity_type": entity.type, "entity_math": entity.math, } parsed_params: Dict[str, str] = encode_get_request_params({ **filter_params, **extra_params }) persons_url.append({ "filter": extra_params, "url": f"api/person/stickiness/?{urllib.parse.urlencode(parsed_params)}", }) return persons_url
def process_result(self, counts: List, filter: StickinessFilter, entity: Entity) -> Dict[str, Any]: response: Dict[int, int] = {} for result in counts: response[result[1]] = result[0] labels = [] data = [] for day in range(1, filter.total_intervals): label = "{} {}{}".format(day, filter.interval, "s" if day > 1 else "") labels.append(label) data.append(response[day] if day in response else 0) filter_params = filter.to_params() return { "labels": labels, "days": [day for day in range(1, filter.total_intervals)], "data": data, "count": sum(data), "filter": filter_params, "persons_urls": self._get_persons_url(filter, entity), }