Example #1
0
    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)
Example #2
0
    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
Example #3
0
    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)
Example #4
0
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
Example #5
0
    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})