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