def trends(self, request: request.Request, *args: Any, **kwargs: Any) -> Response: actions = self.get_queryset() actions = actions.filter(deleted=False) team = request.user.team_set.get() entities_list = [] filter = Filter(request=request) if len(filter.entities) == 0: # If no filters, automatically grab all actions and show those instead filter.entities = [ Entity({ 'id': action.id, 'name': action.name, 'type': TREND_FILTER_TYPE_ACTIONS }) for action in actions ] for entity in filter.entities: if entity.type == TREND_FILTER_TYPE_ACTIONS: try: db_action = [ action for action in actions if action.id == entity.id ][0] entity.name = db_action.name except IndexError: continue trend_entity = self._serialize_entity(entity=entity, filter=filter, request=request, team=team) entities_list.extend(trend_entity) return Response(entities_list)
def calculate_trends(self, filter: Filter, team_id: int) -> List[Dict[str, Any]]: actions = Action.objects.filter(team_id=team_id).order_by("-id") if len(filter.actions) > 0: actions = Action.objects.filter(pk__in=[entity.id for entity in filter.actions], team_id=team_id) actions = actions.prefetch_related(Prefetch("steps", queryset=ActionStep.objects.order_by("id"))) entities_list = [] if len(filter.entities) == 0: # If no filters, automatically grab all actions and show those instead filter.entities = [ Entity({"id": action.id, "name": action.name, "type": TREND_FILTER_TYPE_ACTIONS,}) for action in actions ] if not filter.date_from: filter._date_from = ( Event.objects.filter(team_id=team_id) .order_by("timestamp")[0] .timestamp.replace(hour=0, minute=0, second=0, microsecond=0) .isoformat() ) if not filter.date_to: filter._date_to = now().isoformat() for entity in filter.entities: if entity.type == TREND_FILTER_TYPE_ACTIONS: try: db_action = [action for action in actions if action.id == entity.id][0] entity.name = db_action.name except IndexError: continue entities_list.extend( handle_compare(entity=entity, filter=filter, func=self._serialize_entity, team_id=team_id) ) return entities_list
def trends(self, request: request.Request, *args: Any, **kwargs: Any) -> Response: actions = self.get_queryset() actions = actions.filter(deleted=False) team = request.user.team_set.get() entities_list = [] filter = Filter(request=request) if len(filter.entities) == 0: # If no filters, automatically grab all actions and show those instead filter.entities = [Entity({'id': action.id, 'name': action.name, 'type': TREND_FILTER_TYPE_ACTIONS}) for action in actions] if not filter.date_from: filter._date_from = Event.objects.filter(team=team)\ .order_by('timestamp')[0]\ .timestamp\ .replace(hour=0, minute=0, second=0, microsecond=0)\ .isoformat() if not filter.date_to: filter._date_to = now().isoformat() for entity in filter.entities: if entity.type == TREND_FILTER_TYPE_ACTIONS: try: db_action = [action for action in actions if action.id == entity.id][0] entity.name = db_action.name except IndexError: continue trend_entity = self._serialize_entity( entity=entity, filter=filter, request=request, team=team ) entities_list.extend(trend_entity) return Response(entities_list)
def calculate_trends(filter: Filter, params: dict, team_id: int, actions: QuerySet) -> List[Dict[str, Any]]: compare = params.get("compare") entities_list = [] actions = actions.filter(deleted=False) if len(filter.entities) == 0: # If no filters, automatically grab all actions and show those instead filter.entities = [ Entity({ "id": action.id, "name": action.name, "type": TREND_FILTER_TYPE_ACTIONS, }) for action in actions ] if not filter.date_from: filter._date_from = (Event.objects.filter( team_id=team_id).order_by("timestamp")[0].timestamp.replace( hour=0, minute=0, second=0, microsecond=0).isoformat()) if not filter.date_to: filter._date_to = now().isoformat() compared_filter = None if compare: compared_filter = determine_compared_filter(filter) for entity in filter.entities: if entity.type == TREND_FILTER_TYPE_ACTIONS: try: db_action = [ action for action in actions if action.id == entity.id ][0] entity.name = db_action.name except IndexError: continue trend_entity = serialize_entity(entity=entity, filter=filter, params=params, team_id=team_id) if compare and compared_filter: trend_entity = convert_to_comparison( trend_entity, filter, "{} - {}".format(entity.name, "current")) entities_list.extend(trend_entity) compared_trend_entity = serialize_entity(entity=entity, filter=compared_filter, params=params, team_id=team_id) compared_trend_entity = convert_to_comparison( compared_trend_entity, compared_filter, "{} - {}".format(entity.name, "previous"), ) entities_list.extend(compared_trend_entity) else: entities_list.extend(trend_entity) return entities_list
def retention(self, request: request.Request, *args: Any, **kwargs: Any) -> Response: team = request.user.team properties = request.GET.get("properties", "{}") filter = Filter(data={"properties": json.loads(properties)}) start_entity_data = request.GET.get("start_entity", None) if start_entity_data: data = json.loads(start_entity_data) filter.entities = [Entity({"id": data["id"], "type": data["type"]})] filter._date_from = "-11d" result = retention.Retention().run(filter, team) return Response({"data": result})