Refresh counts for every project with a live segment
()
| 170 | timeout=timedelta(minutes=10), |
| 171 | ) |
| 172 | def refresh_all_segment_counts() -> None: |
| 173 | """Refresh counts for every project with a live segment""" |
| 174 | if not settings.CLICKHOUSE_ENABLED: |
| 175 | return |
| 176 | |
| 177 | projects = ( |
| 178 | Project.objects.filter( |
| 179 | Exists(Segment.live_objects.filter(project=OuterRef("pk"))) |
| 180 | ) |
| 181 | .select_related("organisation") |
| 182 | .order_by("organisation_id", "id") |
| 183 | ) |
| 184 | total = projects.count() |
| 185 | if not total: |
| 186 | return |
| 187 | |
| 188 | spacing = timedelta( |
| 189 | hours=settings.SEGMENT_MEMBERSHIP_REFRESH_PROJECT_STAGGER_WINDOW_HOURS |
| 190 | ) / (total + 1) |
| 191 | now = timezone.now() |
| 192 | for index, project in enumerate(projects.iterator()): |
| 193 | enqueue_membership_refresh(project, delay_until=now + spacing * index) |
| 194 | |
| 195 | |
| 196 | @register_task_handler( |
searching dependent graphs…