Example #1
0
    def funnel(self, request: request.Request, *args: Any,
               **kwargs: Any) -> Response:
        team = self.team
        refresh = request.GET.get("refresh", None)
        dashboard_id = request.GET.get("from_dashboard", None)

        filter = Filter(request=request)
        cache_key = generate_cache_key("{}_{}".format(filter.toJSON(),
                                                      team.pk))
        result = {"loading": True}

        if refresh:
            cache.delete(cache_key)
        else:
            cached_result = get_safe_cache(cache_key)
            if cached_result:
                task_id = cached_result.get("task_id", None)
                if not task_id:
                    return Response(cached_result["result"])
                else:
                    return Response(result)

        payload = {"filter": filter.toJSON(), "team_id": team.pk}
        task = update_cache_item_task.delay(cache_key, CacheType.FUNNEL,
                                            payload)
        task_id = task.id
        cache.set(cache_key, {"task_id": task_id},
                  180)  # task will be live for 3 minutes

        if dashboard_id:
            DashboardItem.objects.filter(pk=dashboard_id).update(
                last_refresh=now())

        return Response(result)
Example #2
0
    def calculate_funnel(self, request: request.Request) -> Dict[str, Any]:
        team = self.team
        refresh = should_refresh(request)

        filter = Filter(request=request,
                        data={
                            **request.data, "insight": INSIGHT_FUNNELS
                        })
        cache_key = generate_cache_key("{}_{}".format(filter.toJSON(),
                                                      team.pk))
        result = {"loading": True}

        if refresh:
            cache.delete(cache_key)
        else:
            cached_result = get_safe_cache(cache_key)
            if cached_result:
                task_id = cached_result.get("task_id", None)
                if not task_id:
                    return {"result": cached_result["result"]}
                else:
                    return {"result": result}

        payload = {"filter": filter.toJSON(), "team_id": team.pk}
        task = update_cache_item_task.delay(cache_key, CacheType.FUNNEL,
                                            payload)
        if not task.ready():
            task_id = task.id
            cache.set(cache_key, {"task_id": task_id},
                      180)  # task will be live for 3 minutes

        self._refresh_dashboard(request=request)
        return {"result": result}
Example #3
0
    def calculate_funnel(self, request: request.Request) -> Dict[str, Any]:
        team = request.user.team
        refresh = request.GET.get("refresh", None)

        filter = Filter(request=request)
        cache_key = generate_cache_key("{}_{}".format(filter.toJSON(),
                                                      team.pk))
        result = {"loading": True}

        if refresh:
            cache.delete(cache_key)
        else:
            cached_result = cache.get(cache_key)
            if cached_result:
                task_id = cached_result.get("task_id", None)
                if not task_id:
                    return cached_result["result"]
                else:
                    return result

        payload = {"filter": filter.toJSON(), "team_id": team.pk}

        task = update_cache_item_task.delay(cache_key, FUNNEL_ENDPOINT,
                                            payload)
        task_id = task.id
        cache.set(cache_key, {"task_id": task_id},
                  180)  # task will be live for 3 minutes

        self._refresh_dashboard(request=request)
        return result