Skip to content

feat(metrics): counter-aware rate and increase aggregations (P5)#63127

Open
DanielVisca wants to merge 1 commit into
posthog-code/metrics-ql4-group-byfrom
posthog-code/metrics-ql5-rate-increase
Open

feat(metrics): counter-aware rate and increase aggregations (P5)#63127
DanielVisca wants to merge 1 commit into
posthog-code/metrics-ql4-group-byfrom
posthog-code/metrics-ql5-rate-increase

Conversation

@DanielVisca

@DanielVisca DanielVisca commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Problem

Counters are the most common server metric, and raw cumulative counter values are meaningless — you need rate/increase. Doing this wrong (naive global diffing, ignoring counter resets or delta temporality) silently produces garbage, which is worse than not having it.

Changes

rate (per-second) and increase aggregations. Per-underlying-series deltas via lagInFrame partitioned by (service_name, resource_fingerprint, attributes), Prometheus-style:

  • Cumulative temporality: delta clamped for counter resets — a drop means the counter restarted, so the post-reset absolute value is the increase. The first sample of a series contributes 0 (its history is unknown).
  • Delta temporality (aggregation_temporality = 'delta'): each sample already is the increase and counts as-is.
  • Composes with filters and group-by; rate = increase / bucket_seconds.

How did you test this code?

I'm an agent. Automated tests pin exact values against real ClickHouse for: steady counters, counter resets, delta temporality, and interleaved multi-series data where naive global diffing would produce garbage (two pods at wildly different counter offsets → per-pod increases come out exact). Live check with the local pipe:

... -d '{"query": {"metricName": "metrics_ingestion_bytes_received_total", "aggregation": "rate", "interval": "minute_5", "dateFrom": "<30m ago>"}}'
# => a steady positive rate (the pipe ingests ~9KB/s of its own telemetry)

🤖 Agent context

Autonomy: Human-driven (agent-assisted) — directed by @DanielVisca

Counter-reset rule follows Prometheus (value < prev ⇒ contribution = value), implemented as a multiIf over a window function rather than runningDifference (deprecated, and not partition-safe).

DanielVisca commented Jun 11, 2026

Copy link
Copy Markdown
Contributor Author

@greptile-apps

greptile-apps Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor
Prompt To Fix All With AI
Fix the following 2 code review issues. Work through them one at a time, proposing concise fixes.

---

### Issue 1 of 2
products/metrics/backend/tests/test_metric_query_runner.py:693
The method name says `rate` but the call inside passes `"increase"` to `_run`. If this test is meant to cover `rate` + group_by, the assertion values (60.0 / 6.0) correspond to `increase` (no division by `step_seconds`), so the body and the name contradict each other. The name should match the aggregation actually exercised.

```suggestion
    def test_increase_composes_with_group_by(self):
```

### Issue 2 of 2
products/metrics/backend/tests/test_metric_query_runner.py:715-752
`test_rate_via_facade_and_api` exercises two unrelated code paths — RATE through the facade and INCREASE through the HTTP endpoint — in a single test method with a shared seed. If the test fails it is not immediately clear which path broke, and the mixed aggregation types (`RATE` in the facade half, `"increase"` in the API half) make the intent harder to read. Per the project's preference for focused, parameterised tests, splitting this into two separate methods would make failures self-documenting.

Reviews (1): Last reviewed commit: "feat(metrics): counter-aware rate and in..." | Re-trigger Greptile

@github-actions

github-actions Bot commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Size Change: 0 B

Total Size: 72.4 MB

ℹ️ View Unchanged
Filename Size
frontend/dist-report/decompression-worker/src/scenes/session-recordings/player/snapshot-processing/decompressionWorker 2.85 kB
frontend/dist-report/exporter/_chunks/chunk 6.7 MB
frontend/dist-report/exporter/_parent/products/actions/frontend/pages/Action 24.1 kB
frontend/dist-report/exporter/_parent/products/actions/frontend/pages/Actions 1.92 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilityScene 117 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilitySessionScene 19.7 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilityTraceScene 129 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilityUsers 1.54 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/clusters/AIObservabilityClusterScene 21.6 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/clusters/AIObservabilityClustersScene 54.3 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetScene 20.7 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetsScene 4.13 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluation 59.6 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluationsScene 28.5 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/evaluations/EvaluationTemplates 569 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/LLMASessionFeedbackDisplay 4.71 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/playground/AIObservabilityPlaygroundScene 37.7 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/prompts/LLMPromptScene 29.8 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/prompts/LLMPromptsScene 5.24 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/tags/AIObservabilityTag 28.4 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/tags/AIObservabilityTagsScene 8.11 kB
frontend/dist-report/exporter/_parent/products/business_knowledge/frontend/scenes/BusinessKnowledgeScene 21.1 kB
frontend/dist-report/exporter/_parent/products/conversations/frontend/components/Assignee/CyclotronJobInputAssignee 1.27 kB
frontend/dist-report/exporter/_parent/products/conversations/frontend/components/SlaBusinessHours/CyclotronJobInputBusinessHours 2.59 kB
frontend/dist-report/exporter/_parent/products/conversations/frontend/components/TicketTags/CyclotronJobInputTicketTags 681 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/scenes/settings/SupportSettingsScene 2.48 kB
frontend/dist-report/exporter/_parent/products/conversations/frontend/scenes/ticket/SupportTicketScene 34 kB
frontend/dist-report/exporter/_parent/products/conversations/frontend/scenes/tickets/SupportTicketsScene 1.75 kB
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/CustomerAnalyticsScene 80.4 kB
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerAnalyticsConfigurationScene/CustomerAnalyticsConfigurationScene 3.24 kB
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyBuilderScene/CustomerJourneyBuilderScene 2.69 kB
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyTemplatesScene/CustomerJourneyTemplatesScene 8.16 kB
frontend/dist-report/exporter/_parent/products/data_warehouse/DataWarehouseScene 46.1 kB
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/NewSourceScene/NewSourceScene 1.82 kB
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SchemaScene/SchemaScene 26.7 kB
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SourceScene/SourceScene 1.77 kB
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SourcesScene/SourcesScene 6.57 kB
frontend/dist-report/exporter/_parent/products/early_access_features/frontend/EarlyAccessFeature 1.7 kB
frontend/dist-report/exporter/_parent/products/early_access_features/frontend/EarlyAccessFeatures 3.75 kB
frontend/dist-report/exporter/_parent/products/endpoints/frontend/EndpointScene 43.6 kB
frontend/dist-report/exporter/_parent/products/endpoints/frontend/EndpointsScene 23.8 kB
frontend/dist-report/exporter/_parent/products/error_tracking/frontend/scenes/ErrorTrackingFingerprintsScene/ErrorTrackingIssueFingerprintsScene 7.64 kB
frontend/dist-report/exporter/_parent/products/error_tracking/frontend/scenes/ErrorTrackingIssueScene/ErrorTrackingIssueScene 96.7 kB
frontend/dist-report/exporter/_parent/products/error_tracking/frontend/scenes/ErrorTrackingScene/ErrorTrackingScene 35.2 kB
frontend/dist-report/exporter/_parent/products/feature_flags/frontend/FeatureFlagTemplatesScene 6.8 kB
frontend/dist-report/exporter/_parent/products/games/368Hedgehogs/368Hedgehogs 5.13 kB
frontend/dist-report/exporter/_parent/products/games/FlappyHog/FlappyHog 5.6 kB
frontend/dist-report/exporter/_parent/products/legal_documents/frontend/scenes/LegalDocumentNewScene 60.6 kB
frontend/dist-report/exporter/_parent/products/legal_documents/frontend/scenes/LegalDocumentsScene 6.78 kB
frontend/dist-report/exporter/_parent/products/links/frontend/LinkScene 25.5 kB
frontend/dist-report/exporter/_parent/products/links/frontend/LinksScene 4.86 kB
frontend/dist-report/exporter/_parent/products/live_debugger/frontend/LiveDebugger 19.6 kB
frontend/dist-report/exporter/_parent/products/logs/frontend/LogsScene 18.7 kB
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsAlertDetailScene/LogsAlertDetailScene 17.9 kB
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsAlertNotificationDetailScene/LogsAlertNotificationDetailScene 8.91 kB
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsSamplingDetailScene/LogsSamplingDetailScene 5.72 kB
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsSamplingNewScene/LogsSamplingNewScene 2.78 kB
frontend/dist-report/exporter/_parent/products/managed_migrations/frontend/ManagedMigration 15.3 kB
frontend/dist-report/exporter/_parent/products/mcp_analytics/frontend/MCPAnalyticsScene 78.4 kB
frontend/dist-report/exporter/_parent/products/mcp_analytics/frontend/MCPAnalyticsToolDetail 19 kB
frontend/dist-report/exporter/_parent/products/metrics/frontend/MetricsScene 16.1 kB
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/stickiness/StickinessBarChart/StickinessBarChart 3.74 kB
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/stickiness/StickinessLineChart/StickinessLineChart 3.62 kB
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsBarChart/TrendsBarChart 9.26 kB
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsLifecycleChart/TrendsLifecycleChart 5.44 kB
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsLineChart/TrendsLineChart 5.08 kB
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsPieChart/TrendsPieChart 4.83 kB
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/observations/ReplayObservation 14.5 kB
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ReplayScanner 21.7 kB
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ReplayScannersScene 18.7 kB
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ScannerEditorScene 25.8 kB
frontend/dist-report/exporter/_parent/products/revenue_analytics/frontend/revenueAnalyticsLogic 1.73 kB
frontend/dist-report/exporter/_parent/products/revenue_analytics/frontend/RevenueAnalyticsScene 26 kB
frontend/dist-report/exporter/_parent/products/session_summaries/frontend/SessionGroupSummariesTable 5.46 kB
frontend/dist-report/exporter/_parent/products/session_summaries/frontend/SessionGroupSummaryScene 19.5 kB
frontend/dist-report/exporter/_parent/products/skills/frontend/LLMSkillScene 1.57 kB
frontend/dist-report/exporter/_parent/products/skills/frontend/LLMSkillsScene 1.58 kB
frontend/dist-report/exporter/_parent/products/tasks/frontend/SlackTaskContextScene 9.39 kB
frontend/dist-report/exporter/_parent/products/tasks/frontend/TaskDetailScene 25.1 kB
frontend/dist-report/exporter/_parent/products/tasks/frontend/TaskTracker 14.6 kB
frontend/dist-report/exporter/_parent/products/tracing/frontend/TracingScene 75 kB
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterview 10.7 kB
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterviewResponse 8.14 kB
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterviews 6.55 kB
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewIndexScene 3.11 kB
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewRunScene 45.9 kB
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewRunsScene 7.75 kB
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewSettingsScene 11.6 kB
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotHistoryScene 14.3 kB
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotOverviewScene 19.9 kB
frontend/dist-report/exporter/_parent/products/workflows/frontend/TemplateLibrary/MessageTemplate 16.9 kB
frontend/dist-report/exporter/_parent/products/workflows/frontend/Workflows/WorkflowScene 109 kB
frontend/dist-report/exporter/_parent/products/workflows/frontend/WorkflowsScene 58.9 kB
frontend/dist-report/exporter/src/exporter/exporter 42.7 kB
frontend/dist-report/exporter/src/exporter/scenes/ExporterDashboardScene 2.63 kB
frontend/dist-report/exporter/src/exporter/scenes/ExporterHeatmapScene 20.4 kB
frontend/dist-report/exporter/src/exporter/scenes/ExporterInsightScene 3.53 kB
frontend/dist-report/exporter/src/exporter/scenes/ExporterInterviewScene 310 kB
frontend/dist-report/exporter/src/exporter/scenes/ExporterNotebookScene 2.71 MB
frontend/dist-report/exporter/src/exporter/scenes/ExporterRecordingScene 1.79 kB
frontend/dist-report/exporter/src/exporterSharedChunkAnchors 1.23 kB
frontend/dist-report/exporter/src/lib/components/Cards/TextCard/TextCardMarkdownEditor 10.5 kB
frontend/dist-report/exporter/src/lib/components/MonacoDiffEditor 499 B
frontend/dist-report/exporter/src/lib/lemon-ui/LemonMarkdown/MermaidDiagram 1.89 kB
frontend/dist-report/exporter/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown 688 B
frontend/dist-report/exporter/src/lib/lemon-ui/Link/Link 347 B
frontend/dist-report/exporter/src/lib/monaco/CodeEditorInline 683 B
frontend/dist-report/exporter/src/lib/monaco/vimMode 211 kB
frontend/dist-report/exporter/src/lib/ui/Button/ButtonPrimitives 411 B
frontend/dist-report/exporter/src/queries/nodes/WebVitals/WebVitals 7.86 kB
frontend/dist-report/exporter/src/queries/nodes/WebVitals/WebVitalsPathBreakdown 4.69 kB
frontend/dist-report/exporter/src/queries/Query/Query 1.48 kB
frontend/dist-report/exporter/src/queries/schema 899 kB
frontend/dist-report/exporter/src/scenes/approvals/changeRequestsLogic 520 B
frontend/dist-report/exporter/src/scenes/authentication/shared/passkeyLogic 500 B
frontend/dist-report/exporter/src/scenes/data-pipelines/event-filtering/EventFilterScene 22.4 kB
frontend/dist-report/exporter/src/scenes/data-pipelines/TransformationsScene 6.76 kB
frontend/dist-report/exporter/src/scenes/insights/views/BoxPlot/BoxPlot 5.82 kB
frontend/dist-report/exporter/src/scenes/insights/views/CalendarHeatMap/CalendarHeatMap 9.12 kB
frontend/dist-report/exporter/src/scenes/insights/views/RegionMap/RegionMap 30.1 kB
frontend/dist-report/exporter/src/scenes/insights/views/WorldMap/WorldMap 1.04 MB
frontend/dist-report/exporter/src/scenes/models/ModelsScene 19.1 kB
frontend/dist-report/exporter/src/scenes/models/NodeDetailScene 17 kB
frontend/dist-report/monaco-editor-worker/src/lib/monaco/workers/monacoEditorWorker 288 kB
frontend/dist-report/monaco-json-worker/src/lib/monaco/workers/monacoJsonWorker 419 kB
frontend/dist-report/monaco-typescript-worker/src/lib/monaco/workers/monacoTsWorker 7.02 MB
frontend/dist-report/posthog-app/_chunks/chunk 6.64 MB
frontend/dist-report/posthog-app/_parent/products/actions/frontend/pages/Action 24.9 kB
frontend/dist-report/posthog-app/_parent/products/actions/frontend/pages/Actions 2.63 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilityScene 118 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilitySessionScene 20.3 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilityTraceScene 130 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilityUsers 2.22 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/clusters/AIObservabilityClusterScene 22.3 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/clusters/AIObservabilityClustersScene 55 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetScene 21.4 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetsScene 4.81 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluation 60.3 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluationsScene 29.2 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/evaluations/EvaluationTemplates 569 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/LLMASessionFeedbackDisplay 4.71 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/playground/AIObservabilityPlaygroundScene 38.4 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/prompts/LLMPromptScene 29.9 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/prompts/LLMPromptsScene 5.92 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/tags/AIObservabilityTag 29 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/tags/AIObservabilityTagsScene 8.79 kB
frontend/dist-report/posthog-app/_parent/products/business_knowledge/frontend/scenes/BusinessKnowledgeScene 21.8 kB
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/components/Assignee/CyclotronJobInputAssignee 1.27 kB
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/components/SlaBusinessHours/CyclotronJobInputBusinessHours 2.6 kB
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/components/TicketTags/CyclotronJobInputTicketTags 681 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/scenes/settings/SupportSettingsScene 3.23 kB
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/scenes/ticket/SupportTicketScene 27.1 kB
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/scenes/tickets/SupportTicketsScene 2.43 kB
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/CustomerAnalyticsScene 79.9 kB
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerAnalyticsConfigurationScene/CustomerAnalyticsConfigurationScene 3.99 kB
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyBuilderScene/CustomerJourneyBuilderScene 3.37 kB
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyTemplatesScene/CustomerJourneyTemplatesScene 8.85 kB
frontend/dist-report/posthog-app/_parent/products/data_warehouse/DataWarehouseScene 3.13 kB
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/NewSourceScene/NewSourceScene 2.57 kB
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SchemaScene/SchemaScene 27.4 kB
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SourceScene/SourceScene 2.48 kB
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SourcesScene/SourcesScene 7.25 kB
frontend/dist-report/posthog-app/_parent/products/early_access_features/frontend/EarlyAccessFeature 2.52 kB
frontend/dist-report/posthog-app/_parent/products/early_access_features/frontend/EarlyAccessFeatures 4.44 kB
frontend/dist-report/posthog-app/_parent/products/endpoints/frontend/EndpointScene 44.3 kB
frontend/dist-report/posthog-app/_parent/products/endpoints/frontend/EndpointsScene 22.5 kB
frontend/dist-report/posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingFingerprintsScene/ErrorTrackingIssueFingerprintsScene 8.32 kB
frontend/dist-report/posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingIssueScene/ErrorTrackingIssueScene 96.5 kB
frontend/dist-report/posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingScene/ErrorTrackingScene 35.9 kB
frontend/dist-report/posthog-app/_parent/products/feature_flags/frontend/FeatureFlagTemplatesScene 6.81 kB
frontend/dist-report/posthog-app/_parent/products/games/368Hedgehogs/368Hedgehogs 5.14 kB
frontend/dist-report/posthog-app/_parent/products/games/FlappyHog/FlappyHog 5.6 kB
frontend/dist-report/posthog-app/_parent/products/legal_documents/frontend/scenes/LegalDocumentNewScene 61.3 kB
frontend/dist-report/posthog-app/_parent/products/legal_documents/frontend/scenes/LegalDocumentsScene 7.46 kB
frontend/dist-report/posthog-app/_parent/products/links/frontend/LinkScene 26.2 kB
frontend/dist-report/posthog-app/_parent/products/links/frontend/LinksScene 5.54 kB
frontend/dist-report/posthog-app/_parent/products/live_debugger/frontend/LiveDebugger 20.3 kB
frontend/dist-report/posthog-app/_parent/products/logs/frontend/LogsScene 18.5 kB
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsAlertDetailScene/LogsAlertDetailScene 18.6 kB
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsAlertNotificationDetailScene/LogsAlertNotificationDetailScene 9.6 kB
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsSamplingDetailScene/LogsSamplingDetailScene 6.41 kB
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsSamplingNewScene/LogsSamplingNewScene 3.46 kB
frontend/dist-report/posthog-app/_parent/products/managed_migrations/frontend/ManagedMigration 16 kB
frontend/dist-report/posthog-app/_parent/products/mcp_analytics/frontend/MCPAnalyticsScene 79.1 kB
frontend/dist-report/posthog-app/_parent/products/mcp_analytics/frontend/MCPAnalyticsToolDetail 19.7 kB
frontend/dist-report/posthog-app/_parent/products/metrics/frontend/MetricsScene 16.8 kB
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/stickiness/StickinessBarChart/StickinessBarChart 4.42 kB
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/stickiness/StickinessLineChart/StickinessLineChart 4.3 kB
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsBarChart/TrendsBarChart 9.94 kB
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsLifecycleChart/TrendsLifecycleChart 6.12 kB
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsLineChart/TrendsLineChart 5.76 kB
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsPieChart/TrendsPieChart 5.51 kB
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/observations/ReplayObservation 15.1 kB
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ReplayScanner 22.4 kB
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ReplayScannersScene 19.3 kB
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ScannerEditorScene 26.5 kB
frontend/dist-report/posthog-app/_parent/products/revenue_analytics/frontend/revenueAnalyticsLogic 2.41 kB
frontend/dist-report/posthog-app/_parent/products/revenue_analytics/frontend/RevenueAnalyticsScene 26.7 kB
frontend/dist-report/posthog-app/_parent/products/session_summaries/frontend/SessionGroupSummariesTable 6.14 kB
frontend/dist-report/posthog-app/_parent/products/session_summaries/frontend/SessionGroupSummaryScene 20.1 kB
frontend/dist-report/posthog-app/_parent/products/skills/frontend/LLMSkillScene 2.25 kB
frontend/dist-report/posthog-app/_parent/products/skills/frontend/LLMSkillsScene 2.26 kB
frontend/dist-report/posthog-app/_parent/products/tasks/frontend/SlackTaskContextScene 10.1 kB
frontend/dist-report/posthog-app/_parent/products/tasks/frontend/TaskDetailScene 25.9 kB
frontend/dist-report/posthog-app/_parent/products/tasks/frontend/TaskTracker 15.3 kB
frontend/dist-report/posthog-app/_parent/products/tracing/frontend/TracingScene 75.7 kB
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterview 10.8 kB
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterviewResponse 8.82 kB
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterviews 7.24 kB
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewIndexScene 3.79 kB
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewRunScene 46.6 kB
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewRunsScene 8.44 kB
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewSettingsScene 12.3 kB
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotHistoryScene 15 kB
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotOverviewScene 20.5 kB
frontend/dist-report/posthog-app/_parent/products/workflows/frontend/TemplateLibrary/MessageTemplate 17.6 kB
frontend/dist-report/posthog-app/_parent/products/workflows/frontend/Workflows/WorkflowScene 103 kB
frontend/dist-report/posthog-app/_parent/products/workflows/frontend/WorkflowsScene 59.7 kB
frontend/dist-report/posthog-app/src/index 61.3 kB
frontend/dist-report/posthog-app/src/layout/panel-layout/ai-first/tabs/NavTabChat 8.35 kB
frontend/dist-report/posthog-app/src/lib/components/AppShortcuts/utils/DebugCHQueriesImpl 19 kB
frontend/dist-report/posthog-app/src/lib/components/Cards/TextCard/TextCardMarkdownEditor 10.5 kB
frontend/dist-report/posthog-app/src/lib/components/MonacoDiffEditor 499 B
frontend/dist-report/posthog-app/src/lib/lemon-ui/LemonMarkdown/MermaidDiagram 1.89 kB
frontend/dist-report/posthog-app/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown 688 B
frontend/dist-report/posthog-app/src/lib/lemon-ui/Link/Link 347 B
frontend/dist-report/posthog-app/src/lib/monaco/CodeEditorInline 717 B
frontend/dist-report/posthog-app/src/lib/monaco/vimMode 211 kB
frontend/dist-report/posthog-app/src/lib/ui/Button/ButtonPrimitives 414 B
frontend/dist-report/posthog-app/src/queries/nodes/WebVitals/WebVitals 8.54 kB
frontend/dist-report/posthog-app/src/queries/nodes/WebVitals/WebVitalsPathBreakdown 5.37 kB
frontend/dist-report/posthog-app/src/queries/Query/Query 2.16 kB
frontend/dist-report/posthog-app/src/queries/schema 899 kB
frontend/dist-report/posthog-app/src/scenes/activity/explore/EventsScene 4.31 kB
frontend/dist-report/posthog-app/src/scenes/activity/explore/SessionsScene 5.65 kB
frontend/dist-report/posthog-app/src/scenes/activity/live/LiveEventsTable 6.69 kB
frontend/dist-report/posthog-app/src/scenes/agentic/AgenticAuthorize 5.41 kB
frontend/dist-report/posthog-app/src/scenes/approvals/ApprovalDetail 17.6 kB
frontend/dist-report/posthog-app/src/scenes/approvals/changeRequestsLogic 520 B
frontend/dist-report/posthog-app/src/scenes/audit-logs/AdvancedActivityLogsScene 43 kB
frontend/dist-report/posthog-app/src/scenes/AuthenticatedShell 211 kB
frontend/dist-report/posthog-app/src/scenes/authentication/account/AccountConnected 2.93 kB
frontend/dist-report/posthog-app/src/scenes/authentication/account/AgenticAccountMismatch 2.32 kB
frontend/dist-report/posthog-app/src/scenes/authentication/account/credential-review/CredentialReview 4.9 kB
frontend/dist-report/posthog-app/src/scenes/authentication/cli/CLIAuthorize 11.2 kB
frontend/dist-report/posthog-app/src/scenes/authentication/cli/CLILive 3.95 kB
frontend/dist-report/posthog-app/src/scenes/authentication/email-mfa-verify/EmailMFAVerify 2.94 kB
frontend/dist-report/posthog-app/src/scenes/authentication/invite-signup/InviteSignup 1.2 kB
frontend/dist-report/posthog-app/src/scenes/authentication/login-2fa/Login2FA 4.64 kB
frontend/dist-report/posthog-app/src/scenes/authentication/login/Login 1.21 kB
frontend/dist-report/posthog-app/src/scenes/authentication/password-reset/PasswordReset 4.36 kB
frontend/dist-report/posthog-app/src/scenes/authentication/password-reset/PasswordResetComplete 2.92 kB
frontend/dist-report/posthog-app/src/scenes/authentication/shared/passkeyLogic 500 B
frontend/dist-report/posthog-app/src/scenes/authentication/signup/SignupContainer 1.18 kB
frontend/dist-report/posthog-app/src/scenes/authentication/two-factor-reset/TwoFactorReset 3.94 kB
frontend/dist-report/posthog-app/src/scenes/authentication/vercel/VercelConnect 4.92 kB
frontend/dist-report/posthog-app/src/scenes/authentication/vercel/VercelLinkError 2.2 kB
frontend/dist-report/posthog-app/src/scenes/authentication/verify-email/VerifyEmail 4.68 kB
frontend/dist-report/posthog-app/src/scenes/billing/AuthorizationStatus 662 B
frontend/dist-report/posthog-app/src/scenes/billing/Billing 615 B
frontend/dist-report/posthog-app/src/scenes/billing/BillingSection 22 kB
frontend/dist-report/posthog-app/src/scenes/cohorts/Cohort 28.7 kB
frontend/dist-report/posthog-app/src/scenes/cohorts/CohortCalculationHistory 7.83 kB
frontend/dist-report/posthog-app/src/scenes/cohorts/Cohorts 10.7 kB
frontend/dist-report/posthog-app/src/scenes/coupons/Coupons 793 B
frontend/dist-report/posthog-app/src/scenes/dashboard/Dashboard 3.03 kB
frontend/dist-report/posthog-app/src/scenes/dashboard/dashboards/Dashboards 20.4 kB
frontend/dist-report/posthog-app/src/scenes/dashboard/dashboards/templates/DashboardTemplateCopyScene 7.29 kB
frontend/dist-report/posthog-app/src/scenes/data-management/DataManagementScene 2.33 kB
frontend/dist-report/posthog-app/src/scenes/data-management/definition/DefinitionEdit 18.9 kB
frontend/dist-report/posthog-app/src/scenes/data-management/definition/DefinitionView 27.1 kB
frontend/dist-report/posthog-app/src/scenes/data-management/MaterializedColumns/MaterializedColumns 13.1 kB
frontend/dist-report/posthog-app/src/scenes/data-management/variables/SqlVariableEditScene 8.77 kB
frontend/dist-report/posthog-app/src/scenes/data-pipelines/batch-exports/BatchExportScene 66.6 kB
frontend/dist-report/posthog-app/src/scenes/data-pipelines/DataPipelinesNewScene 3.97 kB
frontend/dist-report/posthog-app/src/scenes/data-pipelines/DestinationsScene 4.31 kB
frontend/dist-report/posthog-app/src/scenes/data-pipelines/event-filtering/EventFilterScene 23.1 kB
frontend/dist-report/posthog-app/src/scenes/data-pipelines/legacy-plugins/LegacyPluginScene 21.9 kB
frontend/dist-report/posthog-app/src/scenes/data-pipelines/TransformationsScene 3.52 kB
frontend/dist-report/posthog-app/src/scenes/data-pipelines/WebScriptsScene 4.17 kB
frontend/dist-report/posthog-app/src/scenes/data-warehouse/DataWarehouseScene 3.11 kB
frontend/dist-report/posthog-app/src/scenes/data-warehouse/editor/EditorScene 2.78 kB
frontend/dist-report/posthog-app/src/scenes/debug/DebugScene 21.1 kB
frontend/dist-report/posthog-app/src/scenes/debug/hog/HogRepl 8.98 kB
frontend/dist-report/posthog-app/src/scenes/experiments/Experiment 211 kB
frontend/dist-report/posthog-app/src/scenes/experiments/Experiments 22.3 kB
frontend/dist-report/posthog-app/src/scenes/experiments/SharedMetrics/SharedMetric 7.56 kB
frontend/dist-report/posthog-app/src/scenes/experiments/SharedMetrics/SharedMetrics 2.25 kB
frontend/dist-report/posthog-app/src/scenes/exports/ExportsScene 5.6 kB
frontend/dist-report/posthog-app/src/scenes/feature-flags/FeatureFlag 110 kB
frontend/dist-report/posthog-app/src/scenes/feature-flags/FeatureFlags 2.44 kB
frontend/dist-report/posthog-app/src/scenes/groups/Group 16.2 kB
frontend/dist-report/posthog-app/src/scenes/groups/Groups 5.29 kB
frontend/dist-report/posthog-app/src/scenes/groups/GroupsNew 8.88 kB
frontend/dist-report/posthog-app/src/scenes/health-alerts/HealthAlertsScene 5.4 kB
frontend/dist-report/posthog-app/src/scenes/health/categoryDetail/HealthCategoryDetailScene 8.83 kB
frontend/dist-report/posthog-app/src/scenes/health/HealthScene 12.7 kB
frontend/dist-report/posthog-app/src/scenes/health/pipelineStatus/PipelineStatusScene 12.6 kB
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapNewScene 6.54 kB
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapRecordingScene 5.52 kB
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapScene 8.09 kB
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmaps/HeatmapsScene 5.42 kB
frontend/dist-report/posthog-app/src/scenes/hog-functions/HogFunctionScene 55.9 kB
frontend/dist-report/posthog-app/src/scenes/inbox/InboxScene 64.1 kB
frontend/dist-report/posthog-app/src/scenes/insights/InsightQuickStart/InsightQuickStart 7.02 kB
frontend/dist-report/posthog-app/src/scenes/insights/InsightScene 35.7 kB
frontend/dist-report/posthog-app/src/scenes/insights/views/BoxPlot/BoxPlot 6.51 kB
frontend/dist-report/posthog-app/src/scenes/insights/views/CalendarHeatMap/CalendarHeatMap 9.8 kB
frontend/dist-report/posthog-app/src/scenes/insights/views/RegionMap/RegionMap 30.8 kB
frontend/dist-report/posthog-app/src/scenes/insights/views/WorldMap/WorldMap 6.18 kB
frontend/dist-report/posthog-app/src/scenes/instance/AsyncMigrations/AsyncMigrations 14.5 kB
frontend/dist-report/posthog-app/src/scenes/instance/DeadLetterQueue/DeadLetterQueue 6.94 kB
frontend/dist-report/posthog-app/src/scenes/instance/QueryPerformance/QueryPerformance 10.2 kB
frontend/dist-report/posthog-app/src/scenes/instance/SystemStatus/SystemStatus 18.3 kB
frontend/dist-report/posthog-app/src/scenes/IntegrationsRedirect/IntegrationsRedirect 752 B
frontend/dist-report/posthog-app/src/scenes/marketing-analytics/MarketingAnalyticsScene 42.4 kB
frontend/dist-report/posthog-app/src/scenes/max/Max 2.38 kB
frontend/dist-report/posthog-app/src/scenes/models/ModelsScene 19.8 kB
frontend/dist-report/posthog-app/src/scenes/models/NodeDetailScene 17.7 kB
frontend/dist-report/posthog-app/src/scenes/moveToPostHogCloud/MoveToPostHogCloud 4.4 kB
frontend/dist-report/posthog-app/src/scenes/new-tab/NewTabScene 3.17 kB
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookCanvasScene 5.08 kB
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookPanel/NotebookPanel 7.02 kB
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookScene 10.2 kB
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebooksScene 8.96 kB
frontend/dist-report/posthog-app/src/scenes/oauth/OAuthAuthorize 708 B
frontend/dist-report/posthog-app/src/scenes/onboarding/coupon/OnboardingCouponRedemption 1.23 kB
frontend/dist-report/posthog-app/src/scenes/onboarding/Onboarding 789 kB
frontend/dist-report/posthog-app/src/scenes/onboarding/sdks/SdkHealthScene 9.37 kB
frontend/dist-report/posthog-app/src/scenes/organization/ConfirmOrganization/ConfirmOrganization 4.4 kB
frontend/dist-report/posthog-app/src/scenes/organization/Create/Create 602 B
frontend/dist-report/posthog-app/src/scenes/organization/Deactivated 1.06 kB
frontend/dist-report/posthog-app/src/scenes/organization/PendingDeletion 2.1 kB
frontend/dist-report/posthog-app/src/scenes/persons/PersonScene 21 kB
frontend/dist-report/posthog-app/src/scenes/persons/PersonsScene 7.02 kB
frontend/dist-report/posthog-app/src/scenes/PreflightCheck/PreflightCheck 5.46 kB
frontend/dist-report/posthog-app/src/scenes/product-tours/ProductTour 268 kB
frontend/dist-report/posthog-app/src/scenes/product-tours/ProductTours 6.24 kB
frontend/dist-report/posthog-app/src/scenes/project-homepage/ProjectHomepage 20 kB
frontend/dist-report/posthog-app/src/scenes/project/Create/Create 795 B
frontend/dist-report/posthog-app/src/scenes/project/PendingDeletion 2.43 kB
frontend/dist-report/posthog-app/src/scenes/resource-transfer/ResourceTransfer 10.8 kB
frontend/dist-report/posthog-app/src/scenes/saved-insights/SavedInsights 2.35 kB
frontend/dist-report/posthog-app/src/scenes/session-recordings/detail/SessionRecordingDetail 3.38 kB
frontend/dist-report/posthog-app/src/scenes/session-recordings/file-playback/SessionRecordingFilePlaybackScene 5.99 kB
frontend/dist-report/posthog-app/src/scenes/session-recordings/kiosk/SessionRecordingsKiosk 11.5 kB
frontend/dist-report/posthog-app/src/scenes/session-recordings/player/snapshot-processing/DecompressionWorkerManager 323 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistScene 6.44 kB
frontend/dist-report/posthog-app/src/scenes/session-recordings/SessionRecordings 2.37 kB
frontend/dist-report/posthog-app/src/scenes/session-recordings/settings/SessionRecordingsSettingsScene 3.54 kB
frontend/dist-report/posthog-app/src/scenes/sessions/SessionProfileScene 16.5 kB
frontend/dist-report/posthog-app/src/scenes/settings/SettingsScene 5.28 kB
frontend/dist-report/posthog-app/src/scenes/sites/Site 1.47 kB
frontend/dist-report/posthog-app/src/scenes/startups/StartupProgram 21 kB
frontend/dist-report/posthog-app/src/scenes/StripeConfirmInstall/StripeConfirmInstall 3.5 kB
frontend/dist-report/posthog-app/src/scenes/subscriptions/SubscriptionScene 17.8 kB
frontend/dist-report/posthog-app/src/scenes/subscriptions/SubscriptionsScene 6.88 kB
frontend/dist-report/posthog-app/src/scenes/surveys/forms/SurveyFormBuilder 3.19 kB
frontend/dist-report/posthog-app/src/scenes/surveys/Survey 2.72 kB
frontend/dist-report/posthog-app/src/scenes/surveys/Surveys 27.4 kB
frontend/dist-report/posthog-app/src/scenes/surveys/wizard/SurveyWizard 73.1 kB
frontend/dist-report/posthog-app/src/scenes/themes/CustomCssScene 5.17 kB
frontend/dist-report/posthog-app/src/scenes/toolbar-launch/ToolbarLaunch 4.06 kB
frontend/dist-report/posthog-app/src/scenes/Unsubscribe/Unsubscribe 1.61 kB
frontend/dist-report/posthog-app/src/scenes/web-analytics/SessionAttributionExplorer/SessionAttributionExplorerScene 8.09 kB
frontend/dist-report/posthog-app/src/scenes/web-analytics/WebAnalyticsScene 16 kB
frontend/dist-report/posthog-app/src/scenes/wizard/Wizard 4.34 kB
frontend/dist-report/posthog-app/src/sharedChunkAnchors 1.29 kB
frontend/dist-report/render-query/src/render-query/render-query 27.4 MB
frontend/dist-report/toolbar/src/toolbar/toolbar 10.4 MB

compressed-size-action

rows = self._run("increase")
self.assertEqual([row["value"] for row in rows], [15.0])

def test_rate_composes_with_group_by(self):

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 The method name says rate but the call inside passes "increase" to _run. If this test is meant to cover rate + group_by, the assertion values (60.0 / 6.0) correspond to increase (no division by step_seconds), so the body and the name contradict each other. The name should match the aggregation actually exercised.

Suggested change
def test_rate_composes_with_group_by(self):
def test_increase_composes_with_group_by(self):
Prompt To Fix With AI
This is a comment left during a code review.
Path: products/metrics/backend/tests/test_metric_query_runner.py
Line: 693

Comment:
The method name says `rate` but the call inside passes `"increase"` to `_run`. If this test is meant to cover `rate` + group_by, the assertion values (60.0 / 6.0) correspond to `increase` (no division by `step_seconds`), so the body and the name contradict each other. The name should match the aggregation actually exercised.

```suggestion
    def test_increase_composes_with_group_by(self):
```

How can I resolve this? If you propose a fix, please make it concise.

Comment on lines +715 to +752
def test_rate_via_facade_and_api(self):
self._seed_counter(
[
(self.anchor + dt.timedelta(seconds=0), 0.0),
(self.anchor + dt.timedelta(seconds=30), 30.0),
]
)
series = run_metric_query(
team=self.team,
request=MetricQueryRequest(
clauses=(
MetricQueryClause(name="a", metric_name="requests_total", aggregation=MetricAggregation.RATE),
),
date_from=self.anchor - dt.timedelta(minutes=1),
date_to=self.anchor + dt.timedelta(minutes=2),
interval="minute",
),
)
self.assertEqual([p.value for p in series[0].points], [0.5])

response = self.client.post(
f"/api/projects/{self.team.id}/metrics/query",
data={
"query": {
"metricName": "requests_total",
"aggregation": "increase",
"interval": "minute",
"dateFrom": (self.anchor - dt.timedelta(minutes=1)).isoformat(),
"dateTo": (self.anchor + dt.timedelta(minutes=2)).isoformat(),
}
},
content_type="application/json",
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(
[p["value"] for p in response.json()["results"][0]["points"]],
[30.0],
)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 test_rate_via_facade_and_api exercises two unrelated code paths — RATE through the facade and INCREASE through the HTTP endpoint — in a single test method with a shared seed. If the test fails it is not immediately clear which path broke, and the mixed aggregation types (RATE in the facade half, "increase" in the API half) make the intent harder to read. Per the project's preference for focused, parameterised tests, splitting this into two separate methods would make failures self-documenting.

Prompt To Fix With AI
This is a comment left during a code review.
Path: products/metrics/backend/tests/test_metric_query_runner.py
Line: 715-752

Comment:
`test_rate_via_facade_and_api` exercises two unrelated code paths — RATE through the facade and INCREASE through the HTTP endpoint — in a single test method with a shared seed. If the test fails it is not immediately clear which path broke, and the mixed aggregation types (`RATE` in the facade half, `"increase"` in the API half) make the intent harder to read. Per the project's preference for focused, parameterised tests, splitting this into two separate methods would make failures self-documenting.

How can I resolve this? If you propose a fix, please make it concise.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

@DanielVisca DanielVisca force-pushed the posthog-code/metrics-ql4-group-by branch from d70e0ae to 22d92bf Compare June 11, 2026 21:33
@DanielVisca DanielVisca force-pushed the posthog-code/metrics-ql5-rate-increase branch from b83d23a to 03043f0 Compare June 11, 2026 21:33
@DanielVisca DanielVisca force-pushed the posthog-code/metrics-ql4-group-by branch from 22d92bf to 7762afe Compare June 11, 2026 22:05
@DanielVisca DanielVisca force-pushed the posthog-code/metrics-ql5-rate-increase branch from 03043f0 to 82bcef4 Compare June 11, 2026 22:06
@DanielVisca DanielVisca added the stamphog Request AI review from stamphog label Jun 11, 2026 — with Graphite App
github-actions[bot]
github-actions Bot previously approved these changes Jun 11, 2026

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Additive feature from the owning team; logic is correct (Prometheus-style counter-reset handling, temporality awareness, proper SQL placeholders, group_by wiring passes through). The bot's inline notes about a misnamed test method (test_rate_composes_with_group_by calling "increase") are a naming clarity issue only — the assertion values are correct for the aggregation under test and no production behavior is affected.

@github-actions

Copy link
Copy Markdown
Contributor

🕸️ Eager graph

How much code each root forces the browser to download and decode through static imports — the regression class total bundle size can't see.

Root Eager closure Δ vs base Budget
entry (logged-out pages, app bootstrap)
src/index.tsx
14.59 MiB · 749 files no change █████████░ 90.0% of 16.21 MiB
authenticated shell (every logged-in page)
src/scenes/AuthenticatedShell.tsx
55.50 MiB · 8,325 files no change █████████░ 90.9% of 61.04 MiB

node_modules/monaco-editor/ stays out of src/index.tsx

Largest files eagerly reachable from src/index.tsx
Size File
878.2 KiB src/styles/global.scss
609.0 KiB public/hedgehog/burning-money-hog.png
541.9 KiB public/hedgehog/waving-hog.png
448.2 KiB public/hedgehog/stop-sign-hog.png
362.0 KiB public/hedgehog/phone-pair-hogs.png
354.8 KiB ../node_modules/.pnpm/@posthog+icons@0.36.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js
335.6 KiB public/hedgehog/desk-hog.png
323.2 KiB public/hedgehog/3-bears-hogs.png
297.4 KiB src/taxonomy/core-filter-definitions-by-group.json
285.8 KiB src/lib/api.ts
Largest files eagerly reachable from src/scenes/AuthenticatedShell.tsx
Size File
878.2 KiB src/styles/global.scss
760.0 KiB src/queries/validators.js
609.0 KiB public/hedgehog/burning-money-hog.png
541.9 KiB public/hedgehog/waving-hog.png
448.2 KiB public/hedgehog/stop-sign-hog.png
398.7 KiB ../node_modules/.pnpm/chart.js@4.5.1/node_modules/chart.js/dist/chart.js
362.0 KiB public/hedgehog/phone-pair-hogs.png
354.8 KiB ../node_modules/.pnpm/@posthog+icons@0.36.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js
335.6 KiB public/hedgehog/desk-hog.png
323.2 KiB public/hedgehog/3-bears-hogs.png

Posted automatically by check-eager-graph · sizes are input-source bytes from the esbuild metafile · part of #32479

rate (per-second) and increase compute per-underlying-series deltas via
lagInFrame partitioned by (service_name, resource_fingerprint,
attributes), Prometheus-style:
- cumulative temporality: delta clamped for counter resets (a drop means
  the counter restarted, so the post-reset absolute value is the
  increase); the first sample of a series contributes 0
- delta temporality: each sample already is the increase
- naive global diffing is explicitly tested against (interleaved series)

How to validate manually:
- hogli test products/metrics/backend/tests/ (81 tests)
- with the local pipe running: POST /metrics/query with
  {"metricName": "metrics_ingestion_bytes_received_total",
  "aggregation": "rate", "interval": "minute_5"} returns a steady
  positive per-second rate (the pipe ingests ~9KB/s of itself)
@DanielVisca DanielVisca force-pushed the posthog-code/metrics-ql4-group-by branch from 7762afe to b3943ad Compare June 11, 2026 22:36
@DanielVisca DanielVisca force-pushed the posthog-code/metrics-ql5-rate-increase branch from 82bcef4 to 7c8dc60 Compare June 11, 2026 22:36
@github-actions github-actions Bot dismissed their stale review June 11, 2026 22:37

New commits pushed (delta classified non_linear_history) — stamphog approval dismissed; re-review running automatically.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No showstoppers. Additive feature from the owning team — new rate/increase aggregations with correct Prometheus-style counter-reset logic, parameterized SQL (no injection risk), consistent updates across backend, generated frontend types, and MCP schema. The unresolved bot comments flag test naming mismatches only (test_rate_composes_with_group_by calls "increase", test_rate_via_facade_and_api mixes two aggregations in one test), which are naming clarity issues that don't affect production behavior or correctness.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

stamphog Request AI review from stamphog

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant