From bfa9c7bc7142f9ee5afb20ef97c97e683dd69f11 Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 30 Oct 2024 10:14:30 +0000 Subject: [PATCH 1/6] fix(sessions): Limit the teams for which we ingest sessions v1 events (#25766) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- ...create_sessions_v1_after_limiting_teams.py | 8 ++ .../test/__snapshots__/test_schema.ambr | 2 +- .../clickhouse/test/test_sessions_model.py | 53 +++++---- .../database/schema/test/test_sessions_v1.py | 78 ++++-------- ...ssion_attribution_explorer_query_runner.py | 29 ++--- .../web_analytics/test/test_web_overview.py | 38 ++---- .../test/test_web_stats_table.py | 112 +++++------------- posthog/models/sessions/sql.py | 30 ++++- 8 files changed, 143 insertions(+), 207 deletions(-) create mode 100644 posthog/clickhouse/migrations/0083_recreate_sessions_v1_after_limiting_teams.py diff --git a/posthog/clickhouse/migrations/0083_recreate_sessions_v1_after_limiting_teams.py b/posthog/clickhouse/migrations/0083_recreate_sessions_v1_after_limiting_teams.py new file mode 100644 index 0000000000000..d0da2eb158b6d --- /dev/null +++ b/posthog/clickhouse/migrations/0083_recreate_sessions_v1_after_limiting_teams.py @@ -0,0 +1,8 @@ +from posthog.clickhouse.client.migration_tools import run_sql_with_exceptions +from posthog.models.sessions.sql import DROP_SESSION_MATERIALIZED_VIEW_SQL, SESSIONS_TABLE_MV_SQL + +operations = [ + # drop the mv, and recreate it with the new part of the WHERE clause + run_sql_with_exceptions(DROP_SESSION_MATERIALIZED_VIEW_SQL()), + run_sql_with_exceptions(SESSIONS_TABLE_MV_SQL()), +] diff --git a/posthog/clickhouse/test/__snapshots__/test_schema.ambr b/posthog/clickhouse/test/__snapshots__/test_schema.ambr index bc5a623ed0cdc..1fc54f30fdc78 100644 --- a/posthog/clickhouse/test/__snapshots__/test_schema.ambr +++ b/posthog/clickhouse/test/__snapshots__/test_schema.ambr @@ -2160,7 +2160,7 @@ sumIf(1, event='$autocapture') as autocapture_count FROM posthog_test.sharded_events - WHERE `$session_id` IS NOT NULL AND `$session_id` != '' + WHERE `$session_id` IS NOT NULL AND `$session_id` != '' AND team_id IN (1, 2, 13610, 19279, 21173, 29929, 32050, 9910, 11775, 21129, 31490) GROUP BY `$session_id`, team_id diff --git a/posthog/clickhouse/test/test_sessions_model.py b/posthog/clickhouse/test/test_sessions_model.py index 0e3631e0ab3cd..0042456a03d95 100644 --- a/posthog/clickhouse/test/test_sessions_model.py +++ b/posthog/clickhouse/test/test_sessions_model.py @@ -1,8 +1,10 @@ from posthog.clickhouse.client import sync_execute, query_with_columns +from posthog.models import Team from posthog.test.base import ( _create_event, ClickhouseTestMixin, BaseTest, + ClickhouseDestroyTablesMixin, ) distinct_id_counter = 0 @@ -21,7 +23,12 @@ def create_session_id(): return f"s{session_id_counter}" -class TestSessionsModel(ClickhouseTestMixin, BaseTest): +# only certain team ids can insert events into this legacy sessions table, see sessions/sql.py for more info +TEAM_ID = 2 +TEAM = Team(id=TEAM_ID) + + +class TestSessionsModel(ClickhouseDestroyTablesMixin, ClickhouseTestMixin, BaseTest): def select_by_session_id(self, session_id): return query_with_columns( """ @@ -34,7 +41,7 @@ def select_by_session_id(self, session_id): """, { "session_id": session_id, - "team_id": self.team.id, + "team_id": TEAM_ID, }, ) @@ -42,7 +49,7 @@ def test_it_creates_session_when_creating_event(self): distinct_id = create_distinct_id() session_id = create_session_id() _create_event( - team=self.team, + team=TEAM, event="$pageview", distinct_id=distinct_id, properties={"$current_url": "/", "$session_id": session_id}, @@ -60,7 +67,7 @@ def test_it_creates_session_when_creating_event(self): """, { "distinct_id": distinct_id, - "team_id": self.team.id, + "team_id": TEAM_ID, }, ) @@ -72,14 +79,14 @@ def test_handles_different_distinct_id_across_same_session(self): session_id = create_session_id() _create_event( - team=self.team, + team=TEAM, event="$pageview", distinct_id=distinct_id1, properties={"$session_id": session_id}, timestamp="2024-03-08", ) _create_event( - team=self.team, + team=TEAM, event="$pageview", distinct_id=distinct_id2, properties={"$session_id": session_id}, @@ -96,28 +103,28 @@ def test_handles_entry_and_exit_urls(self): session_id = create_session_id() _create_event( - team=self.team, + team=TEAM, event="$pageview", distinct_id=distinct_id, properties={"$current_url": "/entry", "$session_id": session_id}, timestamp="2024-03-08:01", ) _create_event( - team=self.team, + team=TEAM, event="$pageview", distinct_id=distinct_id, properties={"$current_url": "/middle", "$session_id": session_id}, timestamp="2024-03-08:02", ) _create_event( - team=self.team, + team=TEAM, event="$pageview", distinct_id=distinct_id, properties={"$current_url": "/middle", "$session_id": session_id}, timestamp="2024-03-08:03", ) _create_event( - team=self.team, + team=TEAM, event="$pageview", distinct_id=distinct_id, properties={"$current_url": "/exit", "$session_id": session_id}, @@ -136,14 +143,14 @@ def test_handles_initial_utm_properties(self): session_id = create_session_id() _create_event( - team=self.team, + team=TEAM, event="$pageview", distinct_id=distinct_id, properties={"$session_id": session_id, "utm_source": "source"}, timestamp="2024-03-08", ) _create_event( - team=self.team, + team=TEAM, event="$pageview", distinct_id=distinct_id, properties={"$session_id": session_id, "utm_source": "other_source"}, @@ -159,35 +166,35 @@ def test_counts_pageviews_autocaptures_and_events(self): session_id = create_session_id() _create_event( - team=self.team, + team=TEAM, event="$pageview", distinct_id=distinct_id, properties={"$session_id": session_id}, timestamp="2024-03-08", ) _create_event( - team=self.team, + team=TEAM, event="$autocapture", distinct_id=distinct_id, properties={"$session_id": session_id}, timestamp="2024-03-08", ) _create_event( - team=self.team, + team=TEAM, event="$autocapture", distinct_id=distinct_id, properties={"$session_id": session_id}, timestamp="2024-03-08", ) _create_event( - team=self.team, + team=TEAM, event="other event", distinct_id=distinct_id, properties={"$session_id": session_id}, timestamp="2024-03-08", ) _create_event( - team=self.team, + team=TEAM, event="$pageleave", distinct_id=distinct_id, properties={"$session_id": session_id}, @@ -209,14 +216,14 @@ def test_separates_sessions_across_same_user(self): session_id3 = create_session_id() _create_event( - team=self.team, + team=TEAM, event="$pageview", distinct_id=distinct_id, properties={"$session_id": session_id1}, timestamp="2024-03-08", ) _create_event( - team=self.team, + team=TEAM, event="$pageview", distinct_id=distinct_id, properties={"$session_id": session_id2}, @@ -235,7 +242,7 @@ def test_select_from_sessions(self): distinct_id = create_distinct_id() session_id = create_session_id() _create_event( - team=self.team, + team=TEAM, event="$pageview", distinct_id=distinct_id, properties={"$session_id": session_id}, @@ -260,7 +267,7 @@ def test_select_from_sessions(self): """, { "session_id": session_id, - "team_id": self.team.id, + "team_id": TEAM_ID, }, ) self.assertEqual(len(responses), 1) @@ -270,7 +277,7 @@ def test_select_from_sessions_mv(self): distinct_id = create_distinct_id() session_id = create_session_id() _create_event( - team=self.team, + team=TEAM, event="$pageview", distinct_id=distinct_id, properties={"$session_id": session_id}, @@ -295,7 +302,7 @@ def test_select_from_sessions_mv(self): """, { "session_id": session_id, - "team_id": self.team.id, + "team_id": TEAM_ID, }, ) self.assertEqual(len(responses), 1) diff --git a/posthog/hogql/database/schema/test/test_sessions_v1.py b/posthog/hogql/database/schema/test/test_sessions_v1.py index eefd04197deab..77f41fd2f6bbc 100644 --- a/posthog/hogql/database/schema/test/test_sessions_v1.py +++ b/posthog/hogql/database/schema/test/test_sessions_v1.py @@ -8,6 +8,7 @@ ) from posthog.hogql.parser import parse_select from posthog.hogql.query import execute_hogql_query +from posthog.models import Team from posthog.models.property_definition import PropertyType from posthog.models.utils import uuid7 from posthog.schema import HogQLQueryModifiers, BounceRatePageViewMode, SessionTableVersion @@ -15,16 +16,20 @@ APIBaseTest, ClickhouseTestMixin, _create_event, - _create_person, + ClickhouseDestroyTablesMixin, ) +# only certain team ids can insert events into this legacy sessions table, see sessions/sql.py for more info +TEAM_ID = 2 +TEAM = Team(id=TEAM_ID, pk=TEAM_ID) -class TestSessionsV1(ClickhouseTestMixin, APIBaseTest): + +class TestSessionsV1(ClickhouseDestroyTablesMixin, ClickhouseTestMixin, APIBaseTest): def __execute(self, query): modifiers = HogQLQueryModifiers(sessionTableVersion=SessionTableVersion.V1) return execute_hogql_query( query=query, - team=self.team, + team=TEAM, modifiers=modifiers, ) @@ -33,7 +38,7 @@ def test_select_star(self): _create_event( event="$pageview", - team=self.team, + team=TEAM, distinct_id="d1", properties={"$current_url": "https://example.com", "$session_id": session_id}, ) @@ -56,7 +61,7 @@ def test_select_event_sessions_star(self): _create_event( event="$pageview", - team=self.team, + team=TEAM, distinct_id="d1", properties={"$current_url": "https://example.com", "$session_id": session_id}, ) @@ -93,7 +98,7 @@ def test_channel_type(self): _create_event( event="$pageview", - team=self.team, + team=TEAM, distinct_id="d1", properties={"gad_source": "1", "$session_id": session_id}, ) @@ -116,7 +121,7 @@ def test_event_dot_session_dot_channel_type(self): _create_event( event="$pageview", - team=self.team, + team=TEAM, distinct_id="d1", properties={"gad_source": "1", "$session_id": session_id}, ) @@ -139,7 +144,7 @@ def test_events_session_dot_channel_type(self): _create_event( event="$pageview", - team=self.team, + team=TEAM, distinct_id="d1", properties={"gad_source": "1", "$session_id": session_id}, ) @@ -157,57 +162,26 @@ def test_events_session_dot_channel_type(self): "Paid Search", ) - def test_persons_and_sessions_on_events(self): - p1 = _create_person(distinct_ids=["d1"], team=self.team) - p2 = _create_person(distinct_ids=["d2"], team=self.team) - - s1 = "session_test_persons_and_sessions_on_events_1" - s2 = "session_test_persons_and_sessions_on_events_2" - - _create_event( - event="$pageview", - team=self.team, - distinct_id="d1", - properties={"$session_id": s1, "utm_source": "source1"}, - ) - _create_event( - event="$pageview", - team=self.team, - distinct_id="d2", - properties={"$session_id": s2, "utm_source": "source2"}, - ) - - response = self.__execute( - parse_select( - "select events.person_id, session.$entry_utm_source from events where $session_id = {session_id} or $session_id = {session_id2} order by 2 asc", - placeholders={"session_id": ast.Constant(value=s1), "session_id2": ast.Constant(value=s2)}, - ), - ) - - [row1, row2] = response.results or [] - self.assertEqual(row1, (p1.uuid, "source1")) - self.assertEqual(row2, (p2.uuid, "source2")) - @parameterized.expand([(BounceRatePageViewMode.UNIQ_URLS,), (BounceRatePageViewMode.COUNT_PAGEVIEWS,)]) def test_bounce_rate(self, bounceRatePageViewMode): # person with 2 different sessions _create_event( event="$pageview", - team=self.team, + team=TEAM, distinct_id="d1", properties={"$session_id": "s1a", "$current_url": "https://example.com/1"}, timestamp="2023-12-02", ) _create_event( event="$pageview", - team=self.team, + team=TEAM, distinct_id="d1", properties={"$session_id": "s1a", "$current_url": "https://example.com/2"}, timestamp="2023-12-03", ) _create_event( event="$pageview", - team=self.team, + team=TEAM, distinct_id="d1", properties={"$session_id": "s1b", "$current_url": "https://example.com/3"}, timestamp="2023-12-12", @@ -215,7 +189,7 @@ def test_bounce_rate(self, bounceRatePageViewMode): # session with 1 pageview _create_event( event="$pageview", - team=self.team, + team=TEAM, distinct_id="d2", properties={"$session_id": "s2", "$current_url": "https://example.com/4"}, timestamp="2023-12-11", @@ -223,14 +197,14 @@ def test_bounce_rate(self, bounceRatePageViewMode): # session with 1 pageview and 1 autocapture _create_event( event="$pageview", - team=self.team, + team=TEAM, distinct_id="d3", properties={"$session_id": "s3", "$current_url": "https://example.com/5"}, timestamp="2023-12-11", ) _create_event( event="$autocapture", - team=self.team, + team=TEAM, distinct_id="d3", properties={"$session_id": "s3", "$current_url": "https://example.com/5"}, timestamp="2023-12-11", @@ -238,14 +212,14 @@ def test_bounce_rate(self, bounceRatePageViewMode): # short session with a pageleave _create_event( event="$pageview", - team=self.team, + team=TEAM, distinct_id="d4", properties={"$session_id": "s4", "$current_url": "https://example.com/6"}, timestamp="2023-12-11T12:00:00", ) _create_event( event="$pageleave", - team=self.team, + team=TEAM, distinct_id="d4", properties={"$session_id": "s4", "$current_url": "https://example.com/6"}, timestamp="2023-12-11T12:00:01", @@ -253,14 +227,14 @@ def test_bounce_rate(self, bounceRatePageViewMode): # long session with a pageleave _create_event( event="$pageview", - team=self.team, + team=TEAM, distinct_id="d5", properties={"$session_id": "s5", "$current_url": "https://example.com/7"}, timestamp="2023-12-11T12:00:00", ) _create_event( event="$pageleave", - team=self.team, + team=TEAM, distinct_id="d5", properties={"$session_id": "s5", "$current_url": "https://example.com/7"}, timestamp="2023-12-11T12:00:11", @@ -269,7 +243,7 @@ def test_bounce_rate(self, bounceRatePageViewMode): parse_select( "select $is_bounce, session_id from sessions ORDER BY session_id", ), - self.team, + TEAM, modifiers=HogQLQueryModifiers( bounceRatePageViewMode=bounceRatePageViewMode, sessionTableVersion=SessionTableVersion.V1 ), @@ -291,7 +265,7 @@ def test_can_use_v1_and_v2_fields(self): _create_event( event="$pageview", - team=self.team, + team=TEAM, distinct_id="d1", properties={ "$current_url": "https://example.com/pathname", @@ -372,4 +346,4 @@ def test_entry_utm(self): def test_can_get_values_for_all(self): results = get_lazy_session_table_properties_v1(None) for prop in results: - get_lazy_session_table_values_v1(key=prop["id"], team=self.team, search_term=None) + get_lazy_session_table_values_v1(key=prop["id"], team=TEAM, search_term=None) diff --git a/posthog/hogql_queries/web_analytics/test/test_session_attribution_explorer_query_runner.py b/posthog/hogql_queries/web_analytics/test/test_session_attribution_explorer_query_runner.py index d285ff2aa25f3..06ba1ddfeabbe 100644 --- a/posthog/hogql_queries/web_analytics/test/test_session_attribution_explorer_query_runner.py +++ b/posthog/hogql_queries/web_analytics/test/test_session_attribution_explorer_query_runner.py @@ -1,6 +1,5 @@ from typing import Optional -from parameterized import parameterized from posthog.hogql.constants import LimitContext from posthog.hogql_queries.web_analytics.session_attribution_explorer_query_runner import ( @@ -80,7 +79,7 @@ def _run_session_attribution_query( self, date_from: Optional[str] = None, date_to: Optional[str] = None, - session_table_version: SessionTableVersion = SessionTableVersion.V1, + session_table_version: SessionTableVersion = SessionTableVersion.V2, group_by: Optional[list[SessionAttributionGroupBy]] = None, limit_context: Optional[LimitContext] = None, properties: Optional[list[SessionPropertyFilter]] = None, @@ -94,20 +93,14 @@ def _run_session_attribution_query( runner = SessionAttributionExplorerQueryRunner(team=self.team, query=query, limit_context=limit_context) return runner.calculate() - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_no_crash_when_no_data(self, session_table_version: SessionTableVersion): - results = self._run_session_attribution_query( - session_table_version=session_table_version, - ).results + def test_no_crash_when_no_data(self): + results = self._run_session_attribution_query().results assert results == [(0, [], [], [], [], [], [], [])] - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_group_by_nothing(self, session_table_version: SessionTableVersion): + def test_group_by_nothing(self): self._create_data() - results = self._run_session_attribution_query( - session_table_version=session_table_version, - ).results + results = self._run_session_attribution_query().results assert results == [ ( @@ -122,12 +115,10 @@ def test_group_by_nothing(self, session_table_version: SessionTableVersion): ) ] - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_group_by_initial_url(self, session_table_version: SessionTableVersion): + def test_group_by_initial_url(self): self._create_data() results = self._run_session_attribution_query( - session_table_version=session_table_version, group_by=[SessionAttributionGroupBy.INITIAL_URL], ).results @@ -164,12 +155,10 @@ def test_group_by_initial_url(self, session_table_version: SessionTableVersion): ), ] - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_group_channel_medium_source(self, session_table_version: SessionTableVersion): + def test_group_channel_medium_source(self): self._create_data() results = self._run_session_attribution_query( - session_table_version=session_table_version, group_by=[ SessionAttributionGroupBy.CHANNEL_TYPE, SessionAttributionGroupBy.MEDIUM, @@ -191,12 +180,10 @@ def test_group_channel_medium_source(self, session_table_version: SessionTableVe (1, "Referral", ["referring_domain2"], "source2", "medium2", ["campaign2"], [], ["http://example.com/2"]), ] - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_filters(self, session_table_version: SessionTableVersion): + def test_filters(self): self._create_data() results = self._run_session_attribution_query( - session_table_version=session_table_version, group_by=[ SessionAttributionGroupBy.CHANNEL_TYPE, SessionAttributionGroupBy.MEDIUM, diff --git a/posthog/hogql_queries/web_analytics/test/test_web_overview.py b/posthog/hogql_queries/web_analytics/test/test_web_overview.py index bc41d4d0a6785..3e9b570f57b9e 100644 --- a/posthog/hogql_queries/web_analytics/test/test_web_overview.py +++ b/posthog/hogql_queries/web_analytics/test/test_web_overview.py @@ -2,7 +2,6 @@ from unittest.mock import MagicMock, patch from freezegun import freeze_time -from parameterized import parameterized from posthog.clickhouse.client.execute import sync_execute from posthog.hogql.constants import LimitContext @@ -72,7 +71,7 @@ def _run_web_overview_query( self, date_from: str, date_to: str, - session_table_version: SessionTableVersion = SessionTableVersion.V1, + session_table_version: SessionTableVersion = SessionTableVersion.V2, compare: bool = True, limit_context: Optional[LimitContext] = None, filter_test_accounts: Optional[bool] = False, @@ -97,19 +96,16 @@ def _run_web_overview_query( runner = WebOverviewQueryRunner(team=self.team, query=query, limit_context=limit_context) return runner.calculate() - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_no_crash_when_no_data(self, session_table_version: SessionTableVersion): + def test_no_crash_when_no_data(self): results = self._run_web_overview_query( "2023-12-08", "2023-12-15", - session_table_version=session_table_version, ).results assert [item.key for item in results] == ["visitors", "views", "sessions", "session duration", "bounce rate"] results = self._run_web_overview_query( "2023-12-08", "2023-12-15", - session_table_version=session_table_version, includeLCPScore=True, ).results assert [item.key for item in results] == [ @@ -132,9 +128,7 @@ def test_no_crash_when_no_data(self, session_table_version: SessionTableVersion) } ], ) - results = self._run_web_overview_query( - "2023-12-08", "2023-12-15", session_table_version=session_table_version, action=action - ).results + results = self._run_web_overview_query("2023-12-08", "2023-12-15", action=action).results assert [item.key for item in results] == [ "visitors", @@ -143,8 +137,7 @@ def test_no_crash_when_no_data(self, session_table_version: SessionTableVersion) "conversion rate", ] - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_increase_in_users(self, session_table_version: SessionTableVersion): + def test_increase_in_users(self): s1a = str(uuid7("2023-12-02")) s1b = str(uuid7("2023-12-12")) s2 = str(uuid7("2023-12-11")) @@ -159,7 +152,6 @@ def test_increase_in_users(self, session_table_version: SessionTableVersion): results = self._run_web_overview_query( "2023-12-08", "2023-12-15", - session_table_version=session_table_version, ).results visitors = results[0] @@ -192,8 +184,7 @@ def test_increase_in_users(self, session_table_version: SessionTableVersion): self.assertEqual(0, bounce.previous) self.assertEqual(None, bounce.changeFromPreviousPct) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_all_time(self, session_table_version: SessionTableVersion): + def test_all_time(self): s1a = str(uuid7("2023-12-02")) s1b = str(uuid7("2023-12-12")) s2 = str(uuid7("2023-12-11")) @@ -208,7 +199,6 @@ def test_all_time(self, session_table_version: SessionTableVersion): "all", "2023-12-15", compare=False, - session_table_version=session_table_version, ).results visitors = results[0] @@ -241,15 +231,12 @@ def test_all_time(self, session_table_version: SessionTableVersion): self.assertEqual(None, bounce.previous) self.assertEqual(None, bounce.changeFromPreviousPct) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_filter_test_accounts(self, session_table_version: SessionTableVersion): + def test_filter_test_accounts(self): s1 = str(uuid7("2023-12-02")) # Create 1 test account self._create_events([("test", [("2023-12-02", s1), ("2023-12-03", s1)])]) - results = self._run_web_overview_query( - "2023-12-01", "2023-12-03", session_table_version=session_table_version, filter_test_accounts=True - ).results + results = self._run_web_overview_query("2023-12-01", "2023-12-03", filter_test_accounts=True).results visitors = results[0] self.assertEqual(0, visitors.value) @@ -267,21 +254,17 @@ def test_filter_test_accounts(self, session_table_version: SessionTableVersion): self.assertEqual("bounce rate", bounce.key) self.assertEqual(None, bounce.value) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_dont_filter_test_accounts(self, session_table_version: SessionTableVersion): + def test_dont_filter_test_accounts(self): s1 = str(uuid7("2023-12-02")) # Create 1 test account self._create_events([("test", [("2023-12-02", s1), ("2023-12-03", s1)])]) - results = self._run_web_overview_query( - "2023-12-01", "2023-12-03", session_table_version=session_table_version, filter_test_accounts=False - ).results + results = self._run_web_overview_query("2023-12-01", "2023-12-03", filter_test_accounts=False).results visitors = results[0] self.assertEqual(1, visitors.value) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_correctly_counts_pageviews_in_long_running_session(self, session_table_version: SessionTableVersion): + def test_correctly_counts_pageviews_in_long_running_session(self): # this test is important when using the v1 sessions table as the raw sessions table will have 3 entries, one per day s1 = str(uuid7("2023-12-01")) self._create_events( @@ -293,7 +276,6 @@ def test_correctly_counts_pageviews_in_long_running_session(self, session_table_ results = self._run_web_overview_query( "2023-12-01", "2023-12-03", - session_table_version=session_table_version, ).results visitors = results[0] diff --git a/posthog/hogql_queries/web_analytics/test/test_web_stats_table.py b/posthog/hogql_queries/web_analytics/test/test_web_stats_table.py index 10ce9ab1ebcb4..865424f5bc862 100644 --- a/posthog/hogql_queries/web_analytics/test/test_web_stats_table.py +++ b/posthog/hogql_queries/web_analytics/test/test_web_stats_table.py @@ -1,7 +1,6 @@ from typing import Optional from freezegun import freeze_time -from parameterized import parameterized from posthog.hogql_queries.web_analytics.stats_table import WebStatsTableQueryRunner from posthog.models import Cohort @@ -108,7 +107,7 @@ def _run_web_stats_table_query( include_bounce_rate=False, include_scroll_depth=False, properties=None, - session_table_version: SessionTableVersion = SessionTableVersion.V1, + session_table_version: SessionTableVersion = SessionTableVersion.V2, filter_test_accounts: Optional[bool] = False, ): modifiers = HogQLQueryModifiers(sessionTableVersion=session_table_version) @@ -126,15 +125,14 @@ def _run_web_stats_table_query( runner = WebStatsTableQueryRunner(team=self.team, query=query, modifiers=modifiers) return runner.calculate() - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_no_crash_when_no_data(self, session_table_version: SessionTableVersion): + def test_no_crash_when_no_data(self): results = self._run_web_stats_table_query( - "2023-12-08", "2023-12-15", session_table_version=session_table_version + "2023-12-08", + "2023-12-15", ).results self.assertEqual([], results) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_increase_in_users(self, session_table_version: SessionTableVersion): + def test_increase_in_users(self): s1a = str(uuid7("2023-12-02")) s1b = str(uuid7("2023-12-13")) s2 = str(uuid7("2023-12-10")) @@ -145,9 +143,7 @@ def test_increase_in_users(self, session_table_version: SessionTableVersion): ] ) - results = self._run_web_stats_table_query( - "2023-12-01", "2023-12-11", session_table_version=session_table_version - ).results + results = self._run_web_stats_table_query("2023-12-01", "2023-12-11").results self.assertEqual( [ @@ -157,8 +153,7 @@ def test_increase_in_users(self, session_table_version: SessionTableVersion): results, ) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_all_time(self, session_table_version: SessionTableVersion): + def test_all_time(self): s1a = str(uuid7("2023-12-02")) s1b = str(uuid7("2023-12-13")) s2 = str(uuid7("2023-12-10")) @@ -169,9 +164,7 @@ def test_all_time(self, session_table_version: SessionTableVersion): ] ) - results = self._run_web_stats_table_query( - "all", "2023-12-15", session_table_version=session_table_version - ).results + results = self._run_web_stats_table_query("all", "2023-12-15").results self.assertEqual( [ @@ -182,38 +175,31 @@ def test_all_time(self, session_table_version: SessionTableVersion): results, ) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_filter_test_accounts(self, session_table_version: SessionTableVersion): + def test_filter_test_accounts(self): s1 = str(uuid7("2023-12-02")) # Create 1 test account self._create_events([("test", [("2023-12-02", s1, "/"), ("2023-12-03", s1, "/login")])]) - results = self._run_web_stats_table_query( - "2023-12-01", "2023-12-03", session_table_version=session_table_version, filter_test_accounts=True - ).results + results = self._run_web_stats_table_query("2023-12-01", "2023-12-03", filter_test_accounts=True).results self.assertEqual( [], results, ) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_dont_filter_test_accounts(self, session_table_version: SessionTableVersion): + def test_dont_filter_test_accounts(self): s1 = str(uuid7("2023-12-02")) # Create 1 test account self._create_events([("test", [("2023-12-02", s1, "/"), ("2023-12-03", s1, "/login")])]) - results = self._run_web_stats_table_query( - "2023-12-01", "2023-12-03", session_table_version=session_table_version, filter_test_accounts=False - ).results + results = self._run_web_stats_table_query("2023-12-01", "2023-12-03", filter_test_accounts=False).results self.assertEqual( [["/", 1, 1], ["/login", 1, 1]], results, ) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_breakdown_channel_type_doesnt_throw(self, session_table_version: SessionTableVersion): + def test_breakdown_channel_type_doesnt_throw(self): s1a = str(uuid7("2023-12-02")) s1b = str(uuid7("2023-12-13")) s2 = str(uuid7("2023-12-10")) @@ -229,7 +215,6 @@ def test_breakdown_channel_type_doesnt_throw(self, session_table_version: Sessio "2023-12-01", "2023-12-03", breakdown_by=WebStatsBreakdown.INITIAL_CHANNEL_TYPE, - session_table_version=session_table_version, ).results self.assertEqual( @@ -237,8 +222,7 @@ def test_breakdown_channel_type_doesnt_throw(self, session_table_version: Sessio len(results), ) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_limit(self, session_table_version: SessionTableVersion): + def test_limit(self): s1 = str(uuid7("2023-12-02")) s2 = str(uuid7("2023-12-10")) self._create_events( @@ -248,9 +232,7 @@ def test_limit(self, session_table_version: SessionTableVersion): ] ) - response_1 = self._run_web_stats_table_query( - "all", "2023-12-15", limit=1, session_table_version=session_table_version - ) + response_1 = self._run_web_stats_table_query("all", "2023-12-15", limit=1) self.assertEqual( [ ["/", 2, 2], @@ -269,8 +251,7 @@ def test_limit(self, session_table_version: SessionTableVersion): ) self.assertEqual(False, response_2.hasMore) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_path_filters(self, session_table_version: SessionTableVersion): + def test_path_filters(self): s1 = str(uuid7("2023-12-02")) s2 = str(uuid7("2023-12-10")) s3 = str(uuid7("2023-12-10")) @@ -295,7 +276,6 @@ def test_path_filters(self, session_table_version: SessionTableVersion): {"regex": "thing_a", "alias": "thing_b"}, {"regex": "thing_b", "alias": "thing_c"}, ], - session_table_version=session_table_version, ).results self.assertEqual( @@ -308,8 +288,7 @@ def test_path_filters(self, session_table_version: SessionTableVersion): results, ) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_scroll_depth_bounce_rate_one_user(self, session_table_version: SessionTableVersion): + def test_scroll_depth_bounce_rate_one_user(self): self._create_pageviews( "p1", [ @@ -325,7 +304,6 @@ def test_scroll_depth_bounce_rate_one_user(self, session_table_version: SessionT breakdown_by=WebStatsBreakdown.PAGE, include_scroll_depth=True, include_bounce_rate=True, - session_table_version=session_table_version, ).results self.assertEqual( @@ -337,8 +315,7 @@ def test_scroll_depth_bounce_rate_one_user(self, session_table_version: SessionT results, ) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_scroll_depth_bounce_rate(self, session_table_version: SessionTableVersion): + def test_scroll_depth_bounce_rate(self): self._create_pageviews( "p1", [ @@ -369,7 +346,6 @@ def test_scroll_depth_bounce_rate(self, session_table_version: SessionTableVersi breakdown_by=WebStatsBreakdown.PAGE, include_scroll_depth=True, include_bounce_rate=True, - session_table_version=session_table_version, ).results self.assertEqual( @@ -381,8 +357,7 @@ def test_scroll_depth_bounce_rate(self, session_table_version: SessionTableVersi results, ) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_scroll_depth_bounce_rate_with_filter(self, session_table_version: SessionTableVersion): + def test_scroll_depth_bounce_rate_with_filter(self): self._create_pageviews( "p1", [ @@ -414,7 +389,6 @@ def test_scroll_depth_bounce_rate_with_filter(self, session_table_version: Sessi include_scroll_depth=True, include_bounce_rate=True, properties=[EventPropertyFilter(key="$pathname", operator=PropertyOperator.EXACT, value="/a")], - session_table_version=session_table_version, ).results self.assertEqual( @@ -424,8 +398,7 @@ def test_scroll_depth_bounce_rate_with_filter(self, session_table_version: Sessi results, ) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_scroll_depth_bounce_rate_path_cleaning(self, session_table_version: SessionTableVersion): + def test_scroll_depth_bounce_rate_path_cleaning(self): self._create_pageviews( "p1", [ @@ -446,7 +419,6 @@ def test_scroll_depth_bounce_rate_path_cleaning(self, session_table_version: Ses {"regex": "\\/b\\/\\d+", "alias": "/b/:id"}, {"regex": "\\/c\\/\\d+", "alias": "/c/:id"}, ], - session_table_version=session_table_version, ).results self.assertEqual( @@ -458,8 +430,7 @@ def test_scroll_depth_bounce_rate_path_cleaning(self, session_table_version: Ses results, ) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_bounce_rate_one_user(self, session_table_version: SessionTableVersion): + def test_bounce_rate_one_user(self): self._create_pageviews( "p1", [ @@ -474,7 +445,6 @@ def test_bounce_rate_one_user(self, session_table_version: SessionTableVersion): "2023-12-15", breakdown_by=WebStatsBreakdown.PAGE, include_bounce_rate=True, - session_table_version=session_table_version, ).results self.assertEqual( @@ -486,8 +456,7 @@ def test_bounce_rate_one_user(self, session_table_version: SessionTableVersion): results, ) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_bounce_rate(self, session_table_version: SessionTableVersion): + def test_bounce_rate(self): self._create_pageviews( "p1", [ @@ -517,7 +486,6 @@ def test_bounce_rate(self, session_table_version: SessionTableVersion): "2023-12-15", breakdown_by=WebStatsBreakdown.PAGE, include_bounce_rate=True, - session_table_version=session_table_version, ).results self.assertEqual( @@ -529,8 +497,7 @@ def test_bounce_rate(self, session_table_version: SessionTableVersion): results, ) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_bounce_rate_with_property(self, session_table_version: SessionTableVersion): + def test_bounce_rate_with_property(self): self._create_pageviews( "p1", [ @@ -561,7 +528,6 @@ def test_bounce_rate_with_property(self, session_table_version: SessionTableVers breakdown_by=WebStatsBreakdown.PAGE, include_bounce_rate=True, properties=[EventPropertyFilter(key="$pathname", operator=PropertyOperator.EXACT, value="/a")], - session_table_version=session_table_version, ).results self.assertEqual( @@ -571,8 +537,7 @@ def test_bounce_rate_with_property(self, session_table_version: SessionTableVers results, ) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_bounce_rate_path_cleaning(self, session_table_version: SessionTableVersion): + def test_bounce_rate_path_cleaning(self): self._create_pageviews( "p1", [ @@ -592,7 +557,6 @@ def test_bounce_rate_path_cleaning(self, session_table_version: SessionTableVers {"regex": "\\/b\\/\\d+", "alias": "/b/:id"}, {"regex": "\\/c\\/\\d+", "alias": "/c/:id"}, ], - session_table_version=session_table_version, ).results self.assertEqual( @@ -604,8 +568,7 @@ def test_bounce_rate_path_cleaning(self, session_table_version: SessionTableVers results, ) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_entry_bounce_rate_one_user(self, session_table_version: SessionTableVersion): + def test_entry_bounce_rate_one_user(self): self._create_pageviews( "p1", [ @@ -620,7 +583,6 @@ def test_entry_bounce_rate_one_user(self, session_table_version: SessionTableVer "2023-12-15", breakdown_by=WebStatsBreakdown.INITIAL_PAGE, include_bounce_rate=True, - session_table_version=session_table_version, ).results self.assertEqual( @@ -630,8 +592,7 @@ def test_entry_bounce_rate_one_user(self, session_table_version: SessionTableVer results, ) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_entry_bounce_rate(self, session_table_version: SessionTableVersion): + def test_entry_bounce_rate(self): self._create_pageviews( "p1", [ @@ -661,7 +622,6 @@ def test_entry_bounce_rate(self, session_table_version: SessionTableVersion): "2023-12-15", breakdown_by=WebStatsBreakdown.INITIAL_PAGE, include_bounce_rate=True, - session_table_version=session_table_version, ).results self.assertEqual( @@ -671,8 +631,7 @@ def test_entry_bounce_rate(self, session_table_version: SessionTableVersion): results, ) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_entry_bounce_rate_with_property(self, session_table_version: SessionTableVersion): + def test_entry_bounce_rate_with_property(self): self._create_pageviews( "p1", [ @@ -703,7 +662,6 @@ def test_entry_bounce_rate_with_property(self, session_table_version: SessionTab breakdown_by=WebStatsBreakdown.INITIAL_PAGE, include_bounce_rate=True, properties=[EventPropertyFilter(key="$pathname", operator=PropertyOperator.EXACT, value="/a")], - session_table_version=session_table_version, ).results self.assertEqual( @@ -713,8 +671,7 @@ def test_entry_bounce_rate_with_property(self, session_table_version: SessionTab results, ) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_entry_bounce_rate_path_cleaning(self, session_table_version: SessionTableVersion): + def test_entry_bounce_rate_path_cleaning(self): self._create_pageviews( "p1", [ @@ -734,7 +691,6 @@ def test_entry_bounce_rate_path_cleaning(self, session_table_version: SessionTab {"regex": "\\/b\\/\\d+", "alias": "/b/:id"}, {"regex": "\\/c\\/\\d+", "alias": "/c/:id"}, ], - session_table_version=session_table_version, ).results self.assertEqual( @@ -744,8 +700,7 @@ def test_entry_bounce_rate_path_cleaning(self, session_table_version: SessionTab results, ) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_source_medium_campaign(self, session_table_version: SessionTableVersion): + def test_source_medium_campaign(self): d1 = "d1" s1 = str(uuid7("2024-06-26")) @@ -785,7 +740,6 @@ def test_source_medium_campaign(self, session_table_version: SessionTableVersion "all", "2024-06-27", breakdown_by=WebStatsBreakdown.INITIAL_UTM_SOURCE_MEDIUM_CAMPAIGN, - session_table_version=session_table_version, ).results self.assertEqual( @@ -793,8 +747,7 @@ def test_source_medium_campaign(self, session_table_version: SessionTableVersion results, ) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_null_in_utm_tags(self, session_table_version: SessionTableVersion): + def test_null_in_utm_tags(self): d1 = "d1" s1 = str(uuid7("2024-06-26")) @@ -836,7 +789,6 @@ def test_null_in_utm_tags(self, session_table_version: SessionTableVersion): "all", "2024-06-27", breakdown_by=WebStatsBreakdown.INITIAL_UTM_SOURCE, - session_table_version=session_table_version, ).results self.assertEqual( @@ -844,8 +796,7 @@ def test_null_in_utm_tags(self, session_table_version: SessionTableVersion): results, ) - @parameterized.expand([[SessionTableVersion.V1], [SessionTableVersion.V2]]) - def test_is_not_set_filter(self, session_table_version: SessionTableVersion): + def test_is_not_set_filter(self): d1 = "d1" s1 = str(uuid7("2024-06-26")) @@ -888,7 +839,6 @@ def test_is_not_set_filter(self, session_table_version: SessionTableVersion): "2024-06-27", breakdown_by=WebStatsBreakdown.INITIAL_UTM_SOURCE, properties=[EventPropertyFilter(key="utm_source", operator=PropertyOperator.IS_NOT_SET)], - session_table_version=session_table_version, ).results self.assertEqual( diff --git a/posthog/models/sessions/sql.py b/posthog/models/sessions/sql.py index 680e1f7ff6f7b..93d3083a37763 100644 --- a/posthog/models/sessions/sql.py +++ b/posthog/models/sessions/sql.py @@ -7,6 +7,7 @@ AggregatingMergeTree, ) +# V1 Sessions table TABLE_BASE_NAME = "sessions" SESSIONS_DATA_TABLE = lambda: f"sharded_{TABLE_BASE_NAME}" @@ -21,6 +22,32 @@ ) DROP_SESSION_VIEW_SQL = lambda: f"DROP VIEW IF EXISTS {TABLE_BASE_NAME}_v ON CLUSTER '{settings.CLICKHOUSE_CLUSTER}'" +# Only teams that were grandfathered into the V1 sessions table are allowed to use it. Everyone else should use V2, +# i.e. raw_sessions. These teams were those who were seen to have changed their session table version in these metabase +# queries: +# US: https://metabase.prod-us.posthog.dev/question#eyJkYXRhc2V0X3F1ZXJ5Ijp7InR5cGUiOiJuYXRpdmUiLCJuYXRpdmUiOnsicXVlcnkiOiJTRUxFQ1QgdGVhbV9pZCwgc1xuRlJPTSAoXG4gICAgU0VMRUNUIG1vZGlmaWVycy0-PidzZXNzaW9uVGFibGVWZXJzaW9uJyBBUyBzLCBpZCBhcyB0ZWFtX2lkXG4gICAgRlJPTSBwb3N0aG9nX3RlYW1cbikgc3ViXG5XSEVSRSBzICE9ICcnIiwidGVtcGxhdGUtdGFncyI6e319LCJkYXRhYmFzZSI6MzR9LCJkaXNwbGF5IjoidGFibGUiLCJwYXJhbWV0ZXJzIjpbXSwidmlzdWFsaXphdGlvbl9zZXR0aW5ncyI6e319 +# EU: https://metabase.prod-eu.posthog.dev/question#eyJkYXRhc2V0X3F1ZXJ5Ijp7InR5cGUiOiJuYXRpdmUiLCJuYXRpdmUiOnsicXVlcnkiOiJTRUxFQ1QgdGVhbV9pZCwgc1xuRlJPTSAoXG4gICAgU0VMRUNUIG1vZGlmaWVycy0-PidzZXNzaW9uVGFibGVWZXJzaW9uJyBBUyBzLCBpZCBhcyB0ZWFtX2lkXG4gICAgRlJPTSBwb3N0aG9nX3RlYW1cbikgc3ViXG5XSEVSRSBzICE9ICcnIiwidGVtcGxhdGUtdGFncyI6e319LCJkYXRhYmFzZSI6MzR9LCJkaXNwbGF5IjoidGFibGUiLCJwYXJhbWV0ZXJzIjpbXSwidmlzdWFsaXphdGlvbl9zZXR0aW5ncyI6e319 +# or had contacted support about an issue. +# This list exists because we want to reduce the number of writes happening to this table, and so we don't write to it +# for any team not in this list. Adding a team to this is possible if needed, but would require changing this MV in +# production and backfilling this table with the management command backfill_sessions_table. +ALLOWED_TEAM_IDS = [ + # posthog + 1, + 2, + # US query + 13610, # zendesk: https://posthoghelp.zendesk.com/agent/tickets/18001 + 19279, + 21173, + 29929, + 32050, + # EU query + 9910, + 11775, + 21129, + 31490, +] +ALLOWED_TEAM_IDS_SQL = ", ".join(str(team_id) for team_id in ALLOWED_TEAM_IDS) # if updating these column definitions # you'll need to update the explicit column definitions in the materialized view creation statement below @@ -144,7 +171,7 @@ def source_column(column_name: str) -> str: sumIf(1, event='$autocapture') as autocapture_count FROM {database}.sharded_events -WHERE `$session_id` IS NOT NULL AND `$session_id` != '' +WHERE `$session_id` IS NOT NULL AND `$session_id` != '' AND team_id IN ({allowed_team_ids}) GROUP BY `$session_id`, team_id """.format( database=settings.CLICKHOUSE_DATABASE, @@ -168,6 +195,7 @@ def source_column(column_name: str) -> str: mc_cid_property=source_column("mc_cid"), igshid_property=source_column("igshid"), ttclid_property=source_column("ttclid"), + allowed_team_ids=ALLOWED_TEAM_IDS_SQL, ) ) From a0843f475b20166ea1ccb0ec626683178962496c Mon Sep 17 00:00:00 2001 From: Paul D'Ambra Date: Wed, 30 Oct 2024 11:30:50 +0100 Subject: [PATCH 2/6] fix: flappity snapshots begone (#25893) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- .../api/test/__snapshots__/test_api_docs.ambr | 180 +++++++++--------- posthog/api/test/test_api_docs.py | 2 +- 2 files changed, 91 insertions(+), 91 deletions(-) diff --git a/posthog/api/test/__snapshots__/test_api_docs.ambr b/posthog/api/test/__snapshots__/test_api_docs.ambr index 9221776ff38d1..9b7667ec6484b 100644 --- a/posthog/api/test/__snapshots__/test_api_docs.ambr +++ b/posthog/api/test/__snapshots__/test_api_docs.ambr @@ -1,137 +1,137 @@ # serializer version: 1 # name: TestAPIDocsSchema.test_api_docs_generation_warnings_snapshot list([ - '/home/runner/work/posthog/posthog/posthog/api/plugin_log_entry.py: Warning [PluginLogEntryViewSet]: could not derive type of path parameter "plugin_config_id" because it is untyped and obtaining queryset from the viewset failed. Consider adding a type to the path (e.g. ) or annotating the parameter type with @extend_schema. Defaulting to "string".', + '', + '/home/runner/work/posthog/posthog/ee/api/dashboard_collaborator.py: Warning [DashboardCollaboratorViewSet]: could not derive type of path parameter "project_id" because model "ee.models.dashboard_privilege.DashboardPrivilege" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/ee/api/explicit_team_member.py: Warning [ExplicitTeamMemberViewSet]: could not derive type of path parameter "project_id" because model "ee.models.explicit_team_membership.ExplicitTeamMembership" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/ee/api/feature_flag_role_access.py: Warning [FeatureFlagRoleAccessViewSet]: could not derive type of path parameter "project_id" because model "ee.models.feature_flag_role_access.FeatureFlagRoleAccess" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/ee/api/rbac/role.py: Warning [RoleMembershipViewSet]: could not derive type of path parameter "organization_id" because model "ee.models.rbac.role.RoleMembership" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/ee/api/rbac/role.py: Warning [RoleViewSet > RoleSerializer]: unable to resolve type hint for function "get_associated_flags". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/ee/api/rbac/role.py: Warning [RoleViewSet > RoleSerializer]: unable to resolve type hint for function "get_members". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/ee/api/subscription.py: Warning [SubscriptionViewSet > SubscriptionSerializer]: unable to resolve type hint for function "summary". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/ee/api/subscription.py: Warning [SubscriptionViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.subscription.Subscription" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/ee/clickhouse/views/experiment_holdouts.py: Warning [ExperimentHoldoutViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.experiment.ExperimentHoldout" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/ee/clickhouse/views/experiments.py: Warning [EnterpriseExperimentsViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.experiment.Experiment" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/ee/clickhouse/views/groups.py: Warning [GroupsTypesViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.group_type_mapping.GroupTypeMapping" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/ee/clickhouse/views/groups.py: Warning [GroupsViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.group.group.Group" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/ee/clickhouse/views/insights.py: Warning [EnterpriseInsightsViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.insight.Insight" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/ee/clickhouse/views/person.py: Warning [EnterprisePersonViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.person.person.Person" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/ee/session_recordings/session_recording_playlist.py: Warning [SessionRecordingPlaylistViewSet]: could not derive type of path parameter "project_id" because model "posthog.session_recordings.models.session_recording_playlist.SessionRecordingPlaylist" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/ee/session_recordings/session_recording_playlist.py: Warning [SessionRecordingPlaylistViewSet]: could not derive type of path parameter "session_recording_id" because model "posthog.session_recordings.models.session_recording_playlist.SessionRecordingPlaylist" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/api/action.py: Warning [ActionViewSet > ActionSerializer]: unable to resolve type hint for function "get_creation_context". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/api/action.py: Warning [ActionViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.action.action.Action" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/api/activity_log.py: Warning [ActivityLogViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.activity_logging.activity_log.ActivityLog" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/api/annotation.py: Warning [AnnotationsViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.annotation.Annotation" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', "/home/runner/work/posthog/posthog/posthog/api/app_metrics.py: Error [AppMetricsViewSet]: exception raised while getting serializer. Hint: Is get_serializer_class() returning None or is get_queryset() not working without a request? Ignoring the view for now. (Exception: 'AppMetricsViewSet' should either include a `serializer_class` attribute, or override the `get_serializer_class()` method.)", - '/home/runner/work/posthog/posthog/posthog/api/app_metrics.py: Warning [AppMetricsViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.plugin.PluginConfig" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', '/home/runner/work/posthog/posthog/posthog/api/app_metrics.py: Error [HistoricalExportsAppMetricsViewSet]: unable to guess serializer. This is graceful fallback handling for APIViews. Consider using GenericAPIView as view base class, if view is under your control. Either way you may want to add a serializer_class (or method). Ignoring view for now.', - '/home/runner/work/posthog/posthog/posthog/api/app_metrics.py: Warning [HistoricalExportsAppMetricsViewSet]: could not derive type of path parameter "project_id" because it is untyped and obtaining queryset from the viewset failed. Consider adding a type to the path (e.g. ) or annotating the parameter type with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/app_metrics.py: Warning [HistoricalExportsAppMetricsViewSet]: could not derive type of path parameter "plugin_config_id" because it is untyped and obtaining queryset from the viewset failed. Consider adding a type to the path (e.g. ) or annotating the parameter type with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/api/app_metrics.py: Warning [AppMetricsViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.plugin.PluginConfig" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', '/home/runner/work/posthog/posthog/posthog/api/app_metrics.py: Warning [HistoricalExportsAppMetricsViewSet]: could not derive type of path parameter "id" because it is untyped and obtaining queryset from the viewset failed. Consider adding a type to the path (e.g. ) or annotating the parameter type with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/batch_exports/http.py: Warning [BatchExportViewSet]: could not derive type of path parameter "project_id" because model "posthog.batch_exports.models.BatchExport" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/batch_exports/http.py: Warning [BatchExportViewSet > BatchExportSerializer]: could not resolve serializer field "HogQLSelectQueryField(required=False)". Defaulting to "string"', - '/home/runner/work/posthog/posthog/posthog/batch_exports/http.py: Warning [BatchExportRunViewSet]: could not derive type of path parameter "project_id" because model "posthog.batch_exports.models.BatchExportRun" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/api/app_metrics.py: Warning [HistoricalExportsAppMetricsViewSet]: could not derive type of path parameter "plugin_config_id" because it is untyped and obtaining queryset from the viewset failed. Consider adding a type to the path (e.g. ) or annotating the parameter type with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/api/app_metrics.py: Warning [HistoricalExportsAppMetricsViewSet]: could not derive type of path parameter "project_id" because it is untyped and obtaining queryset from the viewset failed. Consider adding a type to the path (e.g. ) or annotating the parameter type with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/api/cohort.py: Warning [CohortViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.cohort.cohort.Cohort" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', '/home/runner/work/posthog/posthog/posthog/api/dashboards/dashboard.py: Warning [DashboardsViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.dashboard.Dashboard" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/ee/api/dashboard_collaborator.py: Warning [DashboardCollaboratorViewSet]: could not derive type of path parameter "project_id" because model "ee.models.dashboard_privilege.DashboardPrivilege" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/sharing.py: Warning [SharingConfigurationViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.sharing_configuration.SharingConfiguration" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/event.py: Warning [EventViewSet]: could not derive type of path parameter "project_id" because it is untyped and obtaining queryset from the viewset failed. Consider adding a type to the path (e.g. ) or annotating the parameter type with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/models/event/util.py: Warning [EventViewSet > ClickhouseEventSerializer]: unable to resolve type hint for function "get_id". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/posthog/models/event/util.py: Warning [EventViewSet > ClickhouseEventSerializer]: unable to resolve type hint for function "get_distinct_id". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/posthog/models/event/util.py: Warning [EventViewSet > ClickhouseEventSerializer]: unable to resolve type hint for function "get_properties". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/posthog/models/event/util.py: Warning [EventViewSet > ClickhouseEventSerializer]: unable to resolve type hint for function "get_event". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/posthog/models/event/util.py: Warning [EventViewSet > ClickhouseEventSerializer]: unable to resolve type hint for function "get_timestamp". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/posthog/models/event/util.py: Warning [EventViewSet > ClickhouseEventSerializer]: unable to resolve type hint for function "get_person". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/posthog/models/event/util.py: Warning [EventViewSet > ClickhouseEventSerializer]: unable to resolve type hint for function "get_elements". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/posthog/models/event/util.py: Warning [EventViewSet > ClickhouseEventSerializer]: unable to resolve type hint for function "get_elements_chain". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/api/dashboards/dashboard_templates.py: Warning [DashboardTemplateViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.dashboard_templates.DashboardTemplate" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/api/early_access_feature.py: Warning [EarlyAccessFeatureViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.early_access_feature.EarlyAccessFeature" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', '/home/runner/work/posthog/posthog/posthog/api/event.py: Warning [EventViewSet]: could not derive type of path parameter "id" because it is untyped and obtaining queryset from the viewset failed. Consider adding a type to the path (e.g. ) or annotating the parameter type with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/ee/api/explicit_team_member.py: Warning [ExplicitTeamMemberViewSet]: could not derive type of path parameter "project_id" because model "ee.models.explicit_team_membership.ExplicitTeamMembership" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/exports.py: Warning [ExportedAssetViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.exported_asset.ExportedAsset" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/exports.py: Warning [ExportedAssetViewSet > ExportedAssetSerializer]: unable to resolve type hint for function "has_content". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/api/event.py: Warning [EventViewSet]: could not derive type of path parameter "project_id" because it is untyped and obtaining queryset from the viewset failed. Consider adding a type to the path (e.g. ) or annotating the parameter type with @extend_schema. Defaulting to "string".', + "/home/runner/work/posthog/posthog/posthog/api/event_definition.py: Error [EventDefinitionViewSet]: exception raised while getting serializer. Hint: Is get_serializer_class() returning None or is get_queryset() not working without a request? Ignoring the view for now. (Exception: 'AnonymousUser' object has no attribute 'organization')", + '/home/runner/work/posthog/posthog/posthog/api/event_definition.py: Warning [EventDefinitionViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.event_definition.EventDefinition" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', '/home/runner/work/posthog/posthog/posthog/api/exports.py: Warning [ExportedAssetViewSet > ExportedAssetSerializer]: unable to resolve type hint for function "filename". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/ee/clickhouse/views/groups.py: Warning [GroupsViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.group.group.Group" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/ee/clickhouse/views/insights.py: Warning [EnterpriseInsightsViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.insight.Insight" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/insight.py: Warning [EnterpriseInsightsViewSet > InsightSerializer]: unable to resolve type hint for function "get_last_refresh". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/api/exports.py: Warning [ExportedAssetViewSet > ExportedAssetSerializer]: unable to resolve type hint for function "has_content". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/api/exports.py: Warning [ExportedAssetViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.exported_asset.ExportedAsset" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/api/feature_flag.py: Warning [FeatureFlagViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.feature_flag.feature_flag.FeatureFlag" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', '/home/runner/work/posthog/posthog/posthog/api/insight.py: Warning [EnterpriseInsightsViewSet > InsightSerializer]: unable to resolve type hint for function "get_cache_target_age". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/posthog/api/insight.py: Warning [EnterpriseInsightsViewSet > InsightSerializer]: unable to resolve type hint for function "get_next_allowed_client_refresh". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/posthog/api/insight.py: Warning [EnterpriseInsightsViewSet > InsightSerializer]: unable to resolve type hint for function "get_result". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/posthog/api/insight.py: Warning [EnterpriseInsightsViewSet > InsightSerializer]: unable to resolve type hint for function "get_hasMore". Consider using a type hint or @extend_schema_field. Defaulting to string.', '/home/runner/work/posthog/posthog/posthog/api/insight.py: Warning [EnterpriseInsightsViewSet > InsightSerializer]: unable to resolve type hint for function "get_columns". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/posthog/api/insight.py: Warning [EnterpriseInsightsViewSet > InsightSerializer]: unable to resolve type hint for function "get_timezone". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/api/insight.py: Warning [EnterpriseInsightsViewSet > InsightSerializer]: unable to resolve type hint for function "get_hasMore". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/api/insight.py: Warning [EnterpriseInsightsViewSet > InsightSerializer]: unable to resolve type hint for function "get_hogql". Consider using a type hint or @extend_schema_field. Defaulting to string.', '/home/runner/work/posthog/posthog/posthog/api/insight.py: Warning [EnterpriseInsightsViewSet > InsightSerializer]: unable to resolve type hint for function "get_is_cached". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/api/insight.py: Warning [EnterpriseInsightsViewSet > InsightSerializer]: unable to resolve type hint for function "get_last_refresh". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/api/insight.py: Warning [EnterpriseInsightsViewSet > InsightSerializer]: unable to resolve type hint for function "get_next_allowed_client_refresh". Consider using a type hint or @extend_schema_field. Defaulting to string.', '/home/runner/work/posthog/posthog/posthog/api/insight.py: Warning [EnterpriseInsightsViewSet > InsightSerializer]: unable to resolve type hint for function "get_query_status". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/posthog/api/insight.py: Warning [EnterpriseInsightsViewSet > InsightSerializer]: unable to resolve type hint for function "get_hogql". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/api/insight.py: Warning [EnterpriseInsightsViewSet > InsightSerializer]: unable to resolve type hint for function "get_result". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/api/insight.py: Warning [EnterpriseInsightsViewSet > InsightSerializer]: unable to resolve type hint for function "get_timezone". Consider using a type hint or @extend_schema_field. Defaulting to string.', '/home/runner/work/posthog/posthog/posthog/api/insight.py: Warning [EnterpriseInsightsViewSet > InsightSerializer]: unable to resolve type hint for function "get_types". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/ee/clickhouse/views/person.py: Warning [EnterprisePersonViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.person.person.Person" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/plugin.py: Warning [PipelineDestinationsConfigsViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.plugin.PluginConfig" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/api/notebook.py: Warning [NotebookViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.notebook.notebook.Notebook" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/api/organization.py: Warning [OrganizationViewSet > OrganizationSerializer]: unable to resolve type hint for function "get_member_count". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/api/organization.py: Warning [OrganizationViewSet > OrganizationSerializer]: unable to resolve type hint for function "get_metadata". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/api/person.py: Warning [SessionRecordingViewSet > SessionRecordingSerializer > MinimalPersonSerializer]: unable to resolve type hint for function "get_distinct_ids". Consider using a type hint or @extend_schema_field. Defaulting to string.', '/home/runner/work/posthog/posthog/posthog/api/plugin.py: Warning [PipelineDestinationsConfigsViewSet > PluginConfigSerializer]: unable to resolve type hint for function "get_config". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/api/plugin.py: Warning [PipelineDestinationsConfigsViewSet > PluginConfigSerializer]: unable to resolve type hint for function "get_delivery_rate_24h". Consider using a type hint or @extend_schema_field. Defaulting to string.', '/home/runner/work/posthog/posthog/posthog/api/plugin.py: Warning [PipelineDestinationsConfigsViewSet > PluginConfigSerializer]: unable to resolve type hint for function "get_error". Consider using a type hint or @extend_schema_field. Defaulting to string.', '/home/runner/work/posthog/posthog/posthog/api/plugin.py: Warning [PipelineDestinationsConfigsViewSet > PluginConfigSerializer]: unable to resolve type hint for function "get_plugin_info". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/posthog/api/plugin.py: Warning [PipelineDestinationsConfigsViewSet > PluginConfigSerializer]: unable to resolve type hint for function "get_delivery_rate_24h". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/api/plugin.py: Warning [PipelineDestinationsConfigsViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.plugin.PluginConfig" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/api/plugin.py: Warning [PipelineDestinationsViewSet > PluginSerializer]: unable to resolve type hint for function "get_hog_function_migration_available". Consider using a type hint or @extend_schema_field. Defaulting to string.', '/home/runner/work/posthog/posthog/posthog/api/plugin.py: Warning [PipelineFrontendAppsConfigsViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.plugin.PluginConfig" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', '/home/runner/work/posthog/posthog/posthog/api/plugin.py: Warning [PipelineImportAppsConfigsViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.plugin.PluginConfig" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', '/home/runner/work/posthog/posthog/posthog/api/plugin.py: Warning [PipelineTransformationsConfigsViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.plugin.PluginConfig" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', '/home/runner/work/posthog/posthog/posthog/api/plugin.py: Warning [PluginConfigViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.plugin.PluginConfig" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/query.py: Warning [QueryViewSet]: could not derive type of path parameter "project_id" because it is untyped and obtaining queryset from the viewset failed. Consider adding a type to the path (e.g. ) or annotating the parameter type with @extend_schema. Defaulting to "string".', - '/opt/hostedtoolcache/Python/3.11.9/x64/lib/python3.11/site-packages/pydantic/_internal/_model_construction.py: Warning [QueryViewSet > ModelMetaclass]: Encountered 2 components with identical names "Person" and different classes and . This will very likely result in an incorrect schema. Try renaming one.', - '/home/runner/work/posthog/posthog/posthog/api/query.py: Warning [QueryViewSet]: could not derive type of path parameter "id" because it is untyped and obtaining queryset from the viewset failed. Consider adding a type to the path (e.g. ) or annotating the parameter type with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/query.py: Error [QueryViewSet]: unable to guess serializer. This is graceful fallback handling for APIViews. Consider using GenericAPIView as view base class, if view is under your control. Either way you may want to add a serializer_class (or method). Ignoring view for now.', - '/home/runner/work/posthog/posthog/posthog/session_recordings/session_recording_api.py: Warning [SessionRecordingViewSet]: could not derive type of path parameter "project_id" because model "posthog.session_recordings.models.session_recording.SessionRecording" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/person.py: Warning [SessionRecordingViewSet > SessionRecordingSerializer > MinimalPersonSerializer]: unable to resolve type hint for function "get_distinct_ids". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/posthog/session_recordings/session_recording_api.py: Warning [SessionRecordingViewSet > SessionRecordingSerializer]: unable to resolve type hint for function "storage". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/posthog/api/session.py: Warning [SessionViewSet]: could not derive type of path parameter "project_id" because it is untyped and obtaining queryset from the viewset failed. Consider adding a type to the path (e.g. ) or annotating the parameter type with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/ee/api/subscription.py: Warning [SubscriptionViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.subscription.Subscription" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/ee/api/subscription.py: Warning [SubscriptionViewSet > SubscriptionSerializer]: unable to resolve type hint for function "summary". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/posthog/api/organization.py: Warning [OrganizationViewSet > OrganizationSerializer]: unable to resolve type hint for function "get_metadata". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/posthog/api/organization.py: Warning [OrganizationViewSet > OrganizationSerializer]: unable to resolve type hint for function "get_member_count". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/posthog/batch_exports/http.py: Warning [BatchExportOrganizationViewSet]: could not derive type of path parameter "organization_id" because model "posthog.batch_exports.models.BatchExport" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/plugin.py: Warning [PipelineDestinationsViewSet > PluginSerializer]: unable to resolve type hint for function "get_hog_function_migration_available". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/posthog/api/project.py: Warning [ProjectViewSet > ProjectBackwardCompatSerializer]: could not resolve field on model with path "person_on_events_querying_enabled". This is likely a custom field that does some unknown magic. Maybe consider annotating the field/property? Defaulting to "string". (Exception: Project has no field named \'person_on_events_querying_enabled\')', + '/home/runner/work/posthog/posthog/posthog/api/plugin_log_entry.py: Warning [PluginLogEntryViewSet]: could not derive type of path parameter "plugin_config_id" because it is untyped and obtaining queryset from the viewset failed. Consider adding a type to the path (e.g. ) or annotating the parameter type with @extend_schema. Defaulting to "string".', '/home/runner/work/posthog/posthog/posthog/api/project.py: Warning [ProjectViewSet > ProjectBackwardCompatSerializer]: could not resolve field on model with path "default_modifiers". This is likely a custom field that does some unknown magic. Maybe consider annotating the field/property? Defaulting to "string". (Exception: Project has no field named \'default_modifiers\')', + '/home/runner/work/posthog/posthog/posthog/api/project.py: Warning [ProjectViewSet > ProjectBackwardCompatSerializer]: could not resolve field on model with path "person_on_events_querying_enabled". This is likely a custom field that does some unknown magic. Maybe consider annotating the field/property? Defaulting to "string". (Exception: Project has no field named \'person_on_events_querying_enabled\')', '/home/runner/work/posthog/posthog/posthog/api/project.py: Warning [ProjectViewSet > ProjectBackwardCompatSerializer]: unable to resolve type hint for function "get_product_intents". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/posthog/api/proxy_record.py: Warning [ProxyRecordViewset]: could not derive type of path parameter "organization_id" because it is untyped and obtaining queryset from the viewset failed. Consider adding a type to the path (e.g. ) or annotating the parameter type with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/proxy_record.py: Warning [ProxyRecordViewset]: could not derive type of path parameter "id" because it is untyped and obtaining queryset from the viewset failed. Consider adding a type to the path (e.g. ) or annotating the parameter type with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/ee/api/rbac/role.py: Warning [RoleViewSet > RoleSerializer]: unable to resolve type hint for function "get_members". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/ee/api/rbac/role.py: Warning [RoleViewSet > RoleSerializer]: unable to resolve type hint for function "get_associated_flags". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/ee/api/rbac/role.py: Warning [RoleMembershipViewSet]: could not derive type of path parameter "organization_id" because model "ee.models.rbac.role.RoleMembership" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/action.py: Warning [ActionViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.action.action.Action" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/action.py: Warning [ActionViewSet > ActionSerializer]: unable to resolve type hint for function "get_creation_context". Consider using a type hint or @extend_schema_field. Defaulting to string.', - '/home/runner/work/posthog/posthog/posthog/api/activity_log.py: Warning [ActivityLogViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.activity_logging.activity_log.ActivityLog" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/annotation.py: Warning [AnnotationsViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.annotation.Annotation" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/cohort.py: Warning [CohortViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.cohort.cohort.Cohort" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/dashboards/dashboard_templates.py: Warning [DashboardTemplateViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.dashboard_templates.DashboardTemplate" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/early_access_feature.py: Warning [EarlyAccessFeatureViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.early_access_feature.EarlyAccessFeature" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/team.py: Warning [TeamViewSet > TeamSerializer]: unable to resolve type hint for function "get_product_intents". Consider using a type hint or @extend_schema_field. Defaulting to string.', - "/home/runner/work/posthog/posthog/posthog/api/event_definition.py: Error [EventDefinitionViewSet]: exception raised while getting serializer. Hint: Is get_serializer_class() returning None or is get_queryset() not working without a request? Ignoring the view for now. (Exception: 'AnonymousUser' object has no attribute 'organization')", - '/home/runner/work/posthog/posthog/posthog/api/event_definition.py: Warning [EventDefinitionViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.event_definition.EventDefinition" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/ee/clickhouse/views/experiment_holdouts.py: Warning [ExperimentHoldoutViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.experiment.ExperimentHoldout" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/ee/clickhouse/views/experiments.py: Warning [EnterpriseExperimentsViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.experiment.Experiment" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/feature_flag.py: Warning [FeatureFlagViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.feature_flag.feature_flag.FeatureFlag" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/ee/api/feature_flag_role_access.py: Warning [FeatureFlagRoleAccessViewSet]: could not derive type of path parameter "project_id" because model "ee.models.feature_flag_role_access.FeatureFlagRoleAccess" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/ee/clickhouse/views/groups.py: Warning [GroupsTypesViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.group_type_mapping.GroupTypeMapping" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/notebook.py: Warning [NotebookViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.notebook.notebook.Notebook" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', "/home/runner/work/posthog/posthog/posthog/api/property_definition.py: Error [PropertyDefinitionViewSet]: exception raised while getting serializer. Hint: Is get_serializer_class() returning None or is get_queryset() not working without a request? Ignoring the view for now. (Exception: 'AnonymousUser' object has no attribute 'organization')", '/home/runner/work/posthog/posthog/posthog/api/property_definition.py: Warning [PropertyDefinitionViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.property_definition.PropertyDefinition" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/ee/session_recordings/session_recording_playlist.py: Warning [SessionRecordingPlaylistViewSet]: could not derive type of path parameter "project_id" because model "posthog.session_recordings.models.session_recording_playlist.SessionRecordingPlaylist" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/ee/session_recordings/session_recording_playlist.py: Warning [SessionRecordingPlaylistViewSet]: could not derive type of path parameter "session_recording_id" because model "posthog.session_recordings.models.session_recording_playlist.SessionRecordingPlaylist" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', - '/home/runner/work/posthog/posthog/posthog/api/survey.py: Warning [SurveyViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.feedback.survey.Survey" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/api/proxy_record.py: Warning [ProxyRecordViewset]: could not derive type of path parameter "id" because it is untyped and obtaining queryset from the viewset failed. Consider adding a type to the path (e.g. ) or annotating the parameter type with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/api/proxy_record.py: Warning [ProxyRecordViewset]: could not derive type of path parameter "organization_id" because it is untyped and obtaining queryset from the viewset failed. Consider adding a type to the path (e.g. ) or annotating the parameter type with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/api/query.py: Error [QueryViewSet]: unable to guess serializer. This is graceful fallback handling for APIViews. Consider using GenericAPIView as view base class, if view is under your control. Either way you may want to add a serializer_class (or method). Ignoring view for now.', + '/home/runner/work/posthog/posthog/posthog/api/query.py: Warning [QueryViewSet]: could not derive type of path parameter "id" because it is untyped and obtaining queryset from the viewset failed. Consider adding a type to the path (e.g. ) or annotating the parameter type with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/api/query.py: Warning [QueryViewSet]: could not derive type of path parameter "project_id" because it is untyped and obtaining queryset from the viewset failed. Consider adding a type to the path (e.g. ) or annotating the parameter type with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/api/session.py: Warning [SessionViewSet]: could not derive type of path parameter "project_id" because it is untyped and obtaining queryset from the viewset failed. Consider adding a type to the path (e.g. ) or annotating the parameter type with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/api/sharing.py: Warning [SharingConfigurationViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.sharing_configuration.SharingConfiguration" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', '/home/runner/work/posthog/posthog/posthog/api/survey.py: Warning [SurveyViewSet > SurveySerializer]: unable to resolve type hint for function "get_conditions". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/api/survey.py: Warning [SurveyViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.feedback.survey.Survey" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/api/team.py: Warning [TeamViewSet > TeamSerializer]: unable to resolve type hint for function "get_product_intents". Consider using a type hint or @extend_schema_field. Defaulting to string.', '/home/runner/work/posthog/posthog/posthog/api/web_experiment.py: Warning [WebExperimentViewSet]: could not derive type of path parameter "project_id" because model "posthog.models.web_experiment.WebExperiment" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/batch_exports/http.py: Warning [BatchExportOrganizationViewSet]: could not derive type of path parameter "organization_id" because model "posthog.batch_exports.models.BatchExport" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/batch_exports/http.py: Warning [BatchExportRunViewSet]: could not derive type of path parameter "project_id" because model "posthog.batch_exports.models.BatchExportRun" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/batch_exports/http.py: Warning [BatchExportViewSet > BatchExportSerializer]: could not resolve serializer field "HogQLSelectQueryField(required=False)". Defaulting to "string"', + '/home/runner/work/posthog/posthog/posthog/batch_exports/http.py: Warning [BatchExportViewSet]: could not derive type of path parameter "project_id" because model "posthog.batch_exports.models.BatchExport" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/home/runner/work/posthog/posthog/posthog/models/event/util.py: Warning [EventViewSet > ClickhouseEventSerializer]: unable to resolve type hint for function "get_distinct_id". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/models/event/util.py: Warning [EventViewSet > ClickhouseEventSerializer]: unable to resolve type hint for function "get_elements". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/models/event/util.py: Warning [EventViewSet > ClickhouseEventSerializer]: unable to resolve type hint for function "get_elements_chain". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/models/event/util.py: Warning [EventViewSet > ClickhouseEventSerializer]: unable to resolve type hint for function "get_event". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/models/event/util.py: Warning [EventViewSet > ClickhouseEventSerializer]: unable to resolve type hint for function "get_id". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/models/event/util.py: Warning [EventViewSet > ClickhouseEventSerializer]: unable to resolve type hint for function "get_person". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/models/event/util.py: Warning [EventViewSet > ClickhouseEventSerializer]: unable to resolve type hint for function "get_properties". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/models/event/util.py: Warning [EventViewSet > ClickhouseEventSerializer]: unable to resolve type hint for function "get_timestamp". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/session_recordings/session_recording_api.py: Warning [SessionRecordingViewSet > SessionRecordingSerializer]: unable to resolve type hint for function "storage". Consider using a type hint or @extend_schema_field. Defaulting to string.', + '/home/runner/work/posthog/posthog/posthog/session_recordings/session_recording_api.py: Warning [SessionRecordingViewSet]: could not derive type of path parameter "project_id" because model "posthog.session_recordings.models.session_recording.SessionRecording" contained no such field. Consider annotating parameter with @extend_schema. Defaulting to "string".', + '/opt/hostedtoolcache/Python/3.11.9/x64/lib/python3.11/site-packages/pydantic/_internal/_model_construction.py: Warning [QueryViewSet > ModelMetaclass]: Encountered 2 components with identical names "Person" and different classes and . This will very likely result in an incorrect schema. Try renaming one.', + 'Warning: encountered multiple names for the same choice set (EffectivePrivilegeLevelEnum). This may be unwanted even though the generated schema is technically correct. Add an entry to ENUM_NAME_OVERRIDES to fix the naming.', 'Warning: encountered multiple names for the same choice set (HrefMatchingEnum). This may be unwanted even though the generated schema is technically correct. Add an entry to ENUM_NAME_OVERRIDES to fix the naming.', - 'Warning: enum naming encountered a non-optimally resolvable collision for fields named "kind". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "KindCfaEnum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.', + 'Warning: encountered multiple names for the same choice set (MembershipLevelEnum). This may be unwanted even though the generated schema is technically correct. Add an entry to ENUM_NAME_OVERRIDES to fix the naming.', 'Warning: enum naming encountered a non-optimally resolvable collision for fields named "kind". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "Kind069Enum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.', + 'Warning: enum naming encountered a non-optimally resolvable collision for fields named "kind". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "KindCfaEnum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.', 'Warning: enum naming encountered a non-optimally resolvable collision for fields named "type". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "TypeF73Enum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.', - 'Warning: encountered multiple names for the same choice set (EffectivePrivilegeLevelEnum). This may be unwanted even though the generated schema is technically correct. Add an entry to ENUM_NAME_OVERRIDES to fix the naming.', - 'Warning: encountered multiple names for the same choice set (MembershipLevelEnum). This may be unwanted even though the generated schema is technically correct. Add an entry to ENUM_NAME_OVERRIDES to fix the naming.', - 'Warning: operationId "environments_app_metrics_historical_exports_retrieve" has collisions [(\'/api/environments/{project_id}/app_metrics/{plugin_config_id}/historical_exports/\', \'get\'), (\'/api/environments/{project_id}/app_metrics/{plugin_config_id}/historical_exports/{id}/\', \'get\')]. resolving with numeral suffixes.', - 'Warning: operationId "environments_insights_activity_retrieve" has collisions [(\'/api/environments/{project_id}/insights/{id}/activity/\', \'get\'), (\'/api/environments/{project_id}/insights/activity/\', \'get\')]. resolving with numeral suffixes.', 'Warning: operationId "Funnels" has collisions [(\'/api/environments/{project_id}/insights/funnel/\', \'post\'), (\'/api/projects/{project_id}/insights/funnel/\', \'post\')]. resolving with numeral suffixes.', 'Warning: operationId "Trends" has collisions [(\'/api/environments/{project_id}/insights/trend/\', \'post\'), (\'/api/projects/{project_id}/insights/trend/\', \'post\')]. resolving with numeral suffixes.', - 'Warning: operationId "environments_persons_activity_retrieve" has collisions [(\'/api/environments/{project_id}/persons/{id}/activity/\', \'get\'), (\'/api/environments/{project_id}/persons/activity/\', \'get\')]. resolving with numeral suffixes.', - 'Warning: operationId "list" has collisions [(\'/api/organizations/\', \'get\'), (\'/api/organizations/{organization_id}/projects/\', \'get\')]. resolving with numeral suffixes.', - 'Warning: operationId "create" has collisions [(\'/api/organizations/\', \'post\'), (\'/api/organizations/{organization_id}/projects/\', \'post\')]. resolving with numeral suffixes.', - 'Warning: operationId "retrieve" has collisions [(\'/api/organizations/{id}/\', \'get\'), (\'/api/organizations/{organization_id}/projects/{id}/\', \'get\')]. resolving with numeral suffixes.', - 'Warning: operationId "update" has collisions [(\'/api/organizations/{id}/\', \'put\'), (\'/api/organizations/{organization_id}/projects/{id}/\', \'put\')]. resolving with numeral suffixes.', - 'Warning: operationId "partial_update" has collisions [(\'/api/organizations/{id}/\', \'patch\'), (\'/api/organizations/{organization_id}/projects/{id}/\', \'patch\')]. resolving with numeral suffixes.', - 'Warning: operationId "destroy" has collisions [(\'/api/organizations/{id}/\', \'delete\'), (\'/api/organizations/{organization_id}/projects/{id}/\', \'delete\')]. resolving with numeral suffixes.', - 'Warning: operationId "batch_exports_list" has collisions [(\'/api/organizations/{organization_id}/batch_exports/\', \'get\'), (\'/api/projects/{project_id}/batch_exports/\', \'get\')]. resolving with numeral suffixes.', + 'Warning: operationId "app_metrics_historical_exports_retrieve" has collisions [(\'/api/projects/{project_id}/app_metrics/{plugin_config_id}/historical_exports/\', \'get\'), (\'/api/projects/{project_id}/app_metrics/{plugin_config_id}/historical_exports/{id}/\', \'get\')]. resolving with numeral suffixes.', + 'Warning: operationId "batch_exports_backfill_create" has collisions [(\'/api/organizations/{organization_id}/batch_exports/{id}/backfill/\', \'post\'), (\'/api/projects/{project_id}/batch_exports/{id}/backfill/\', \'post\')]. resolving with numeral suffixes.', 'Warning: operationId "batch_exports_create" has collisions [(\'/api/organizations/{organization_id}/batch_exports/\', \'post\'), (\'/api/projects/{project_id}/batch_exports/\', \'post\')]. resolving with numeral suffixes.', - 'Warning: operationId "batch_exports_retrieve" has collisions [(\'/api/organizations/{organization_id}/batch_exports/{id}/\', \'get\'), (\'/api/projects/{project_id}/batch_exports/{id}/\', \'get\')]. resolving with numeral suffixes.', - 'Warning: operationId "batch_exports_update" has collisions [(\'/api/organizations/{organization_id}/batch_exports/{id}/\', \'put\'), (\'/api/projects/{project_id}/batch_exports/{id}/\', \'put\')]. resolving with numeral suffixes.', - 'Warning: operationId "batch_exports_partial_update" has collisions [(\'/api/organizations/{organization_id}/batch_exports/{id}/\', \'patch\'), (\'/api/projects/{project_id}/batch_exports/{id}/\', \'patch\')]. resolving with numeral suffixes.', 'Warning: operationId "batch_exports_destroy" has collisions [(\'/api/organizations/{organization_id}/batch_exports/{id}/\', \'delete\'), (\'/api/projects/{project_id}/batch_exports/{id}/\', \'delete\')]. resolving with numeral suffixes.', - 'Warning: operationId "batch_exports_backfill_create" has collisions [(\'/api/organizations/{organization_id}/batch_exports/{id}/backfill/\', \'post\'), (\'/api/projects/{project_id}/batch_exports/{id}/backfill/\', \'post\')]. resolving with numeral suffixes.', + 'Warning: operationId "batch_exports_list" has collisions [(\'/api/organizations/{organization_id}/batch_exports/\', \'get\'), (\'/api/projects/{project_id}/batch_exports/\', \'get\')]. resolving with numeral suffixes.', 'Warning: operationId "batch_exports_logs_retrieve" has collisions [(\'/api/organizations/{organization_id}/batch_exports/{id}/logs/\', \'get\'), (\'/api/projects/{project_id}/batch_exports/{id}/logs/\', \'get\')]. resolving with numeral suffixes.', + 'Warning: operationId "batch_exports_partial_update" has collisions [(\'/api/organizations/{organization_id}/batch_exports/{id}/\', \'patch\'), (\'/api/projects/{project_id}/batch_exports/{id}/\', \'patch\')]. resolving with numeral suffixes.', 'Warning: operationId "batch_exports_pause_create" has collisions [(\'/api/organizations/{organization_id}/batch_exports/{id}/pause/\', \'post\'), (\'/api/projects/{project_id}/batch_exports/{id}/pause/\', \'post\')]. resolving with numeral suffixes.', + 'Warning: operationId "batch_exports_retrieve" has collisions [(\'/api/organizations/{organization_id}/batch_exports/{id}/\', \'get\'), (\'/api/projects/{project_id}/batch_exports/{id}/\', \'get\')]. resolving with numeral suffixes.', 'Warning: operationId "batch_exports_unpause_create" has collisions [(\'/api/organizations/{organization_id}/batch_exports/{id}/unpause/\', \'post\'), (\'/api/projects/{project_id}/batch_exports/{id}/unpause/\', \'post\')]. resolving with numeral suffixes.', - 'Warning: operationId "app_metrics_historical_exports_retrieve" has collisions [(\'/api/projects/{project_id}/app_metrics/{plugin_config_id}/historical_exports/\', \'get\'), (\'/api/projects/{project_id}/app_metrics/{plugin_config_id}/historical_exports/{id}/\', \'get\')]. resolving with numeral suffixes.', + 'Warning: operationId "batch_exports_update" has collisions [(\'/api/organizations/{organization_id}/batch_exports/{id}/\', \'put\'), (\'/api/projects/{project_id}/batch_exports/{id}/\', \'put\')]. resolving with numeral suffixes.', 'Warning: operationId "cohorts_activity_retrieve" has collisions [(\'/api/projects/{project_id}/cohorts/{id}/activity/\', \'get\'), (\'/api/projects/{project_id}/cohorts/activity/\', \'get\')]. resolving with numeral suffixes.', + 'Warning: operationId "create" has collisions [(\'/api/organizations/\', \'post\'), (\'/api/organizations/{organization_id}/projects/\', \'post\')]. resolving with numeral suffixes.', + 'Warning: operationId "destroy" has collisions [(\'/api/organizations/{id}/\', \'delete\'), (\'/api/organizations/{organization_id}/projects/{id}/\', \'delete\')]. resolving with numeral suffixes.', + 'Warning: operationId "environments_app_metrics_historical_exports_retrieve" has collisions [(\'/api/environments/{project_id}/app_metrics/{plugin_config_id}/historical_exports/\', \'get\'), (\'/api/environments/{project_id}/app_metrics/{plugin_config_id}/historical_exports/{id}/\', \'get\')]. resolving with numeral suffixes.', + 'Warning: operationId "environments_insights_activity_retrieve" has collisions [(\'/api/environments/{project_id}/insights/{id}/activity/\', \'get\'), (\'/api/environments/{project_id}/insights/activity/\', \'get\')]. resolving with numeral suffixes.', + 'Warning: operationId "environments_persons_activity_retrieve" has collisions [(\'/api/environments/{project_id}/persons/{id}/activity/\', \'get\'), (\'/api/environments/{project_id}/persons/activity/\', \'get\')]. resolving with numeral suffixes.', 'Warning: operationId "event_definitions_retrieve" has collisions [(\'/api/projects/{project_id}/event_definitions/\', \'get\'), (\'/api/projects/{project_id}/event_definitions/{id}/\', \'get\')]. resolving with numeral suffixes.', 'Warning: operationId "feature_flags_activity_retrieve" has collisions [(\'/api/projects/{project_id}/feature_flags/{id}/activity/\', \'get\'), (\'/api/projects/{project_id}/feature_flags/activity/\', \'get\')]. resolving with numeral suffixes.', 'Warning: operationId "insights_activity_retrieve" has collisions [(\'/api/projects/{project_id}/insights/{id}/activity/\', \'get\'), (\'/api/projects/{project_id}/insights/activity/\', \'get\')]. resolving with numeral suffixes.', + 'Warning: operationId "list" has collisions [(\'/api/organizations/\', \'get\'), (\'/api/organizations/{organization_id}/projects/\', \'get\')]. resolving with numeral suffixes.', 'Warning: operationId "notebooks_activity_retrieve" has collisions [(\'/api/projects/{project_id}/notebooks/{short_id}/activity/\', \'get\'), (\'/api/projects/{project_id}/notebooks/activity/\', \'get\')]. resolving with numeral suffixes.', + 'Warning: operationId "partial_update" has collisions [(\'/api/organizations/{id}/\', \'patch\'), (\'/api/organizations/{organization_id}/projects/{id}/\', \'patch\')]. resolving with numeral suffixes.', 'Warning: operationId "persons_activity_retrieve" has collisions [(\'/api/projects/{project_id}/persons/{id}/activity/\', \'get\'), (\'/api/projects/{project_id}/persons/activity/\', \'get\')]. resolving with numeral suffixes.', 'Warning: operationId "property_definitions_retrieve" has collisions [(\'/api/projects/{project_id}/property_definitions/\', \'get\'), (\'/api/projects/{project_id}/property_definitions/{id}/\', \'get\')]. resolving with numeral suffixes.', + 'Warning: operationId "retrieve" has collisions [(\'/api/organizations/{id}/\', \'get\'), (\'/api/organizations/{organization_id}/projects/{id}/\', \'get\')]. resolving with numeral suffixes.', 'Warning: operationId "surveys_activity_retrieve" has collisions [(\'/api/projects/{project_id}/surveys/{id}/activity/\', \'get\'), (\'/api/projects/{project_id}/surveys/activity/\', \'get\')]. resolving with numeral suffixes.', - '', + 'Warning: operationId "update" has collisions [(\'/api/organizations/{id}/\', \'put\'), (\'/api/organizations/{organization_id}/projects/{id}/\', \'put\')]. resolving with numeral suffixes.', ]) # --- diff --git a/posthog/api/test/test_api_docs.py b/posthog/api/test/test_api_docs.py index f7f7ab1d418b0..d5e1fc9b3bbf6 100644 --- a/posthog/api/test/test_api_docs.py +++ b/posthog/api/test/test_api_docs.py @@ -30,4 +30,4 @@ def test_api_docs_generation_warnings_snapshot(self) -> None: # we log lots of warnings when generating the schema warnings = self._capsys.readouterr().err.split("\n") - assert warnings == self._snapshot + assert sorted(warnings) == self._snapshot From 78ea7fb6274cb150241e5f3dd6ab6d90b07b1985 Mon Sep 17 00:00:00 2001 From: Marcus Hof <13001502+MarconLP@users.noreply.github.com> Date: Wed, 30 Oct 2024 11:37:04 +0100 Subject: [PATCH 3/6] feat(cdp): add option to run a hog function per person per event (#25874) --- .../filters/HogFunctionFilters.tsx | 4 ++ plugin-server/tests/cdp/examples.ts | 12 +++++- plugin-server/tests/cdp/hog-masker.test.ts | 37 +++++++++++++++---- 3 files changed, 43 insertions(+), 10 deletions(-) diff --git a/frontend/src/scenes/pipeline/hogfunctions/filters/HogFunctionFilters.tsx b/frontend/src/scenes/pipeline/hogfunctions/filters/HogFunctionFilters.tsx index 9dee4c767cc5e..ed98f0f3de14b 100644 --- a/frontend/src/scenes/pipeline/hogfunctions/filters/HogFunctionFilters.tsx +++ b/frontend/src/scenes/pipeline/hogfunctions/filters/HogFunctionFilters.tsx @@ -161,6 +161,10 @@ export function HogFunctionFilters(): JSX.Element { value: '{person.id}', label: 'Run once per person per interval', }, + { + value: '{concat(person.id, event.event)}', + label: 'Run once per person per event per interval', + }, ]} value={value?.hash ?? null} onChange={(val) => diff --git a/plugin-server/tests/cdp/examples.ts b/plugin-server/tests/cdp/examples.ts index fafafce472e3d..f92dd9ed4f97a 100644 --- a/plugin-server/tests/cdp/examples.ts +++ b/plugin-server/tests/cdp/examples.ts @@ -708,8 +708,16 @@ export const HOG_MASK_EXAMPLES: Record> person: { masking: { ttl: 30, - hash: '{person.uuid}', - bytecode: ['_h', 32, 'uuid', 32, 'person', 1, 2], + hash: '{person.id}', + bytecode: ['_h', 32, 'id', 32, 'person', 1, 2], + threshold: null, + }, + }, + personAndEvent: { + masking: { + ttl: 30, + hash: '{concat(person.id, event.event)}', + bytecode: ['_H', 1, 32, 'id', 32, 'person', 1, 2, 32, 'event', 32, 'event', 1, 2, 2, 'concat', 2], threshold: null, }, }, diff --git a/plugin-server/tests/cdp/hog-masker.test.ts b/plugin-server/tests/cdp/hog-masker.test.ts index df05043290e63..a3c7a955574db 100644 --- a/plugin-server/tests/cdp/hog-masker.test.ts +++ b/plugin-server/tests/cdp/hog-masker.test.ts @@ -118,6 +118,7 @@ describe('HogMasker', () => { describe('ttl', () => { let hogFunctionPerson: HogFunctionType let hogFunctionAll: HogFunctionType + let hogFunctionPersonAndEvent: HogFunctionType beforeEach(() => { hogFunctionPerson = createHogFunction({ @@ -127,6 +128,13 @@ describe('HogMasker', () => { }, }) + hogFunctionPersonAndEvent = createHogFunction({ + masking: { + ...HOG_MASK_EXAMPLES.personAndEvent.masking!, + ttl: 1, + }, + }) + hogFunctionAll = createHogFunction({ masking: { ...HOG_MASK_EXAMPLES.all.masking!, @@ -145,20 +153,33 @@ describe('HogMasker', () => { }) it('should mask with custom hog hash', async () => { - const globalsPerson1 = createHogExecutionGlobals({ person: { uuid: '1' } as any }) - const globalsPerson2 = createHogExecutionGlobals({ person: { uuid: '2' } as any }) + const globals1 = createHogExecutionGlobals({ + person: { id: '1' } as any, + event: { event: '$pageview' } as any, + }) + const globals2 = createHogExecutionGlobals({ + person: { id: '2' } as any, + event: { event: '$autocapture' } as any, + }) + const globals3 = createHogExecutionGlobals({ + person: { id: '2' } as any, + event: { event: '$pageview' } as any, + }) const invocations = [ - createInvocation(hogFunctionPerson, globalsPerson1), - createInvocation(hogFunctionAll, globalsPerson1), - createInvocation(hogFunctionPerson, globalsPerson2), - createInvocation(hogFunctionAll, globalsPerson2), + createInvocation(hogFunctionPerson, globals1), + createInvocation(hogFunctionAll, globals1), + createInvocation(hogFunctionPersonAndEvent, globals1), + createInvocation(hogFunctionPerson, globals2), + createInvocation(hogFunctionAll, globals2), + createInvocation(hogFunctionPersonAndEvent, globals2), + createInvocation(hogFunctionPersonAndEvent, globals3), ] const res = await masker.filterByMasking(invocations) expect(res.masked.length).toEqual(1) - expect(res.notMasked.length).toEqual(3) + expect(res.notMasked.length).toEqual(6) const res2 = await masker.filterByMasking(invocations) - expect(res2.masked.length).toEqual(4) + expect(res2.masked.length).toEqual(7) expect(res2.notMasked.length).toEqual(0) }) From 3946758c98b82f01435186a523bcd593771f636b Mon Sep 17 00:00:00 2001 From: Marcus Hof <13001502+MarconLP@users.noreply.github.com> Date: Wed, 30 Oct 2024 12:14:32 +0100 Subject: [PATCH 4/6] rename per event trigger option label (#25896) --- .../scenes/pipeline/hogfunctions/filters/HogFunctionFilters.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/scenes/pipeline/hogfunctions/filters/HogFunctionFilters.tsx b/frontend/src/scenes/pipeline/hogfunctions/filters/HogFunctionFilters.tsx index ed98f0f3de14b..681e63a6239b2 100644 --- a/frontend/src/scenes/pipeline/hogfunctions/filters/HogFunctionFilters.tsx +++ b/frontend/src/scenes/pipeline/hogfunctions/filters/HogFunctionFilters.tsx @@ -163,7 +163,7 @@ export function HogFunctionFilters(): JSX.Element { }, { value: '{concat(person.id, event.event)}', - label: 'Run once per person per event per interval', + label: 'Run once per person per event name per interval', }, ]} value={value?.hash ?? null} From a9a77ace552df5492c1adc7b0f00728325d8d097 Mon Sep 17 00:00:00 2001 From: Paul D'Ambra Date: Wed, 30 Oct 2024 12:39:10 +0100 Subject: [PATCH 5/6] fix: session when impersonated (#25897) --- frontend/src/loadPostHogJS.tsx | 52 ++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/frontend/src/loadPostHogJS.tsx b/frontend/src/loadPostHogJS.tsx index 2c5a3285ef509..badabf1105246 100644 --- a/frontend/src/loadPostHogJS.tsx +++ b/frontend/src/loadPostHogJS.tsx @@ -29,16 +29,38 @@ export function loadPostHogJS(): void { bootstrap: window.POSTHOG_USER_IDENTITY_WITH_FLAGS ? window.POSTHOG_USER_IDENTITY_WITH_FLAGS : {}, opt_in_site_apps: true, api_transport: 'fetch', - loaded: (posthog) => { - if (posthog.sessionRecording) { - posthog.sessionRecording._forceAllowLocalhostNetworkCapture = true + loaded: (loadedInstance) => { + if (loadedInstance.sessionRecording) { + loadedInstance.sessionRecording._forceAllowLocalhostNetworkCapture = true } if (window.IMPERSONATED_SESSION) { - posthog.opt_out_capturing() + loadedInstance.sessionManager?.resetSessionId() + loadedInstance.opt_out_capturing() } else { - posthog.opt_in_capturing() + loadedInstance.opt_in_capturing() } + + const Cypress = (window as any).Cypress + + if (Cypress) { + Object.entries(Cypress.env()).forEach(([key, value]) => { + if (key.startsWith('POSTHOG_PROPERTY_')) { + loadedInstance.register_for_session({ + [key.replace('POSTHOG_PROPERTY_', 'E2E_TESTING_').toLowerCase()]: value, + }) + } + }) + } + + // This is a helpful flag to set to automatically reset the recording session on load for testing multiple recordings + const shouldResetSessionOnLoad = loadedInstance.getFeatureFlag(FEATURE_FLAGS.SESSION_RESET_ON_LOAD) + if (shouldResetSessionOnLoad) { + loadedInstance.sessionManager?.resetSessionId() + } + + // Make sure we have access to the object in window for debugging + window.posthog = loadedInstance }, scroll_root_selector: ['main', 'html'], autocapture: { @@ -52,26 +74,6 @@ export function loadPostHogJS(): void { : undefined, }) ) - - const Cypress = (window as any).Cypress - - if (Cypress) { - Object.entries(Cypress.env()).forEach(([key, value]) => { - if (key.startsWith('POSTHOG_PROPERTY_')) { - posthog.register_for_session({ - [key.replace('POSTHOG_PROPERTY_', 'E2E_TESTING_').toLowerCase()]: value, - }) - } - }) - } - - // This is a helpful flag to set to automatically reset the recording session on load for testing multiple recordings - const shouldResetSessionOnLoad = posthog.getFeatureFlag(FEATURE_FLAGS.SESSION_RESET_ON_LOAD) - if (shouldResetSessionOnLoad) { - posthog.sessionManager?.resetSessionId() - } - // Make sure we have access to the object in window for debugging - window.posthog = posthog } else { posthog.init('fake token', { autocapture: false, From 019d4dc71a29b8151e2c35e23c17ab8491cda5a1 Mon Sep 17 00:00:00 2001 From: Juraj Majerik Date: Wed, 30 Oct 2024 12:55:15 +0100 Subject: [PATCH 6/6] chore(experiments HogQL): render main goal from HogQL (#25852) --- ee/clickhouse/views/experiments.py | 1 + ...r-onboarding--onboarding-billing--dark.png | Bin 173264 -> 173185 bytes frontend/src/lib/constants.tsx | 1 + frontend/src/queries/schema.json | 160 +++++++- frontend/src/queries/schema.ts | 9 +- .../scenes/experiments/Experiment.stories.tsx | 3 + .../experiments/ExperimentView/Goal.tsx | 19 +- .../ExperimentView/SecondaryMetricsTable.tsx | 3 +- .../ExperimentView/SummaryTable.tsx | 4 +- .../experiments/ExperimentView/components.tsx | 122 ++++-- .../scenes/experiments/experimentLogic.tsx | 203 +++++++--- frontend/src/types.ts | 12 +- .../api/test/__snapshots__/test_api_docs.ambr | 2 + .../test/__snapshots__/test_in_cohort.ambr | 8 +- .../experiment_funnels_query_runner.py | 16 +- .../experiment_trends_query_runner.py | 9 +- .../test/__snapshots__/test_trends.ambr | 204 ++++++++-- posthog/schema.py | 355 ++++++++++-------- 18 files changed, 810 insertions(+), 321 deletions(-) diff --git a/ee/clickhouse/views/experiments.py b/ee/clickhouse/views/experiments.py index 6df24dc012cea..44fe8b72b5045 100644 --- a/ee/clickhouse/views/experiments.py +++ b/ee/clickhouse/views/experiments.py @@ -184,6 +184,7 @@ class Meta: "created_by", "created_at", "updated_at", + "metrics", ] read_only_fields = [ "id", diff --git a/frontend/__snapshots__/scenes-other-onboarding--onboarding-billing--dark.png b/frontend/__snapshots__/scenes-other-onboarding--onboarding-billing--dark.png index a11674466fae07c459640c0e6051b397481dd887..032e85e82d703a6f323726b67351abba84d04bcc 100644 GIT binary patch delta 155395 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 *BkX(X&bWuoD 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 z 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

$JPP;p#>RSlD5C} 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 X+VY%6h5iz}Nq1LS^LDY)Ur+xJexC+l diff --git a/frontend/src/lib/constants.tsx b/frontend/src/lib/constants.tsx index 1ba86ab79c36b..a13f3277ec41f 100644 --- a/frontend/src/lib/constants.tsx +++ b/frontend/src/lib/constants.tsx @@ -220,6 +220,7 @@ export const FEATURE_FLAGS = { LEGACY_ACTION_WEBHOOKS: 'legacy-action-webhooks', // owner: @mariusandra #team-cdp SESSION_REPLAY_URL_TRIGGER: 'session-replay-url-trigger', // owner: @richard-better #team-replay REPLAY_TEMPLATES: 'replay-templates', // owner: @raquelmsmith #team-replay + EXPERIMENTS_HOGQL: 'experiments-hogql', // owner: @jurajmajerik #team-experiments ROLE_BASED_ACCESS_CONTROL: 'role-based-access-control', // owner: @zach EXPERIMENTS_HOLDOUTS: 'experiments-holdouts', // owner: @jurajmajerik #team-experiments MESSAGING: 'messaging', // owner @mariusandra #team-cdp diff --git a/frontend/src/queries/schema.json b/frontend/src/queries/schema.json index 75b26c88bc4de..757097fa12025 100644 --- a/frontend/src/queries/schema.json +++ b/frontend/src/queries/schema.json @@ -1315,12 +1315,25 @@ "expected_loss": { "type": "number" }, + "funnels_query": { + "$ref": "#/definitions/FunnelsQuery" + }, "insight": { - "$ref": "#/definitions/FunnelsQueryResponse" + "items": { + "items": { + "type": "object" + }, + "type": "array" + }, + "type": "array" }, "is_cached": { "type": "boolean" }, + "kind": { + "const": "ExperimentFunnelsQuery", + "type": "string" + }, "last_refresh": { "format": "date-time", "type": "string" @@ -1361,6 +1374,7 @@ "expected_loss", "insight", "is_cached", + "kind", "last_refresh", "next_allowed_client_refresh", "probability", @@ -1385,6 +1399,9 @@ "description": "What triggered the calculation of the query, leave empty if user/immediate", "type": "string" }, + "count_query": { + "$ref": "#/definitions/TrendsQuery" + }, "credible_intervals": { "additionalProperties": { "items": { @@ -1396,12 +1413,22 @@ }, "type": "object" }, + "exposure_query": { + "$ref": "#/definitions/TrendsQuery" + }, "insight": { - "$ref": "#/definitions/TrendsQueryResponse" + "items": { + "type": "object" + }, + "type": "array" }, "is_cached": { "type": "boolean" }, + "kind": { + "const": "ExperimentTrendsQuery", + "type": "string" + }, "last_refresh": { "format": "date-time", "type": "string" @@ -1444,6 +1471,7 @@ "credible_intervals", "insight", "is_cached", + "kind", "last_refresh", "next_allowed_client_refresh", "p_value", @@ -3732,8 +3760,21 @@ "expected_loss": { "type": "number" }, + "funnels_query": { + "$ref": "#/definitions/FunnelsQuery" + }, "insight": { - "$ref": "#/definitions/FunnelsQueryResponse" + "items": { + "items": { + "type": "object" + }, + "type": "array" + }, + "type": "array" + }, + "kind": { + "const": "ExperimentFunnelsQuery", + "type": "string" }, "probability": { "additionalProperties": { @@ -3758,6 +3799,7 @@ "credible_intervals", "expected_loss", "insight", + "kind", "probability", "significance_code", "significant", @@ -3768,6 +3810,9 @@ { "additionalProperties": false, "properties": { + "count_query": { + "$ref": "#/definitions/TrendsQuery" + }, "credible_intervals": { "additionalProperties": { "items": { @@ -3779,8 +3824,18 @@ }, "type": "object" }, + "exposure_query": { + "$ref": "#/definitions/TrendsQuery" + }, "insight": { - "$ref": "#/definitions/TrendsQueryResponse" + "items": { + "type": "object" + }, + "type": "array" + }, + "kind": { + "const": "ExperimentTrendsQuery", + "type": "string" }, "p_value": { "type": "number" @@ -3807,6 +3862,7 @@ "required": [ "credible_intervals", "insight", + "kind", "p_value", "probability", "significance_code", @@ -5215,8 +5271,21 @@ "expected_loss": { "type": "number" }, + "funnels_query": { + "$ref": "#/definitions/FunnelsQuery" + }, "insight": { - "$ref": "#/definitions/FunnelsQueryResponse" + "items": { + "items": { + "type": "object" + }, + "type": "array" + }, + "type": "array" + }, + "kind": { + "const": "ExperimentFunnelsQuery", + "type": "string" }, "probability": { "additionalProperties": { @@ -5238,6 +5307,7 @@ } }, "required": [ + "kind", "insight", "variants", "probability", @@ -5282,6 +5352,9 @@ "ExperimentTrendsQueryResponse": { "additionalProperties": false, "properties": { + "count_query": { + "$ref": "#/definitions/TrendsQuery" + }, "credible_intervals": { "additionalProperties": { "items": { @@ -5293,8 +5366,18 @@ }, "type": "object" }, + "exposure_query": { + "$ref": "#/definitions/TrendsQuery" + }, "insight": { - "$ref": "#/definitions/TrendsQueryResponse" + "items": { + "type": "object" + }, + "type": "array" + }, + "kind": { + "const": "ExperimentTrendsQuery", + "type": "string" }, "p_value": { "type": "number" @@ -5319,6 +5402,7 @@ } }, "required": [ + "kind", "insight", "variants", "probability", @@ -8962,8 +9046,21 @@ "expected_loss": { "type": "number" }, + "funnels_query": { + "$ref": "#/definitions/FunnelsQuery" + }, "insight": { - "$ref": "#/definitions/FunnelsQueryResponse" + "items": { + "items": { + "type": "object" + }, + "type": "array" + }, + "type": "array" + }, + "kind": { + "const": "ExperimentFunnelsQuery", + "type": "string" }, "probability": { "additionalProperties": { @@ -8985,6 +9082,7 @@ } }, "required": [ + "kind", "insight", "variants", "probability", @@ -8998,6 +9096,9 @@ { "additionalProperties": false, "properties": { + "count_query": { + "$ref": "#/definitions/TrendsQuery" + }, "credible_intervals": { "additionalProperties": { "items": { @@ -9009,8 +9110,18 @@ }, "type": "object" }, + "exposure_query": { + "$ref": "#/definitions/TrendsQuery" + }, "insight": { - "$ref": "#/definitions/TrendsQueryResponse" + "items": { + "type": "object" + }, + "type": "array" + }, + "kind": { + "const": "ExperimentTrendsQuery", + "type": "string" }, "p_value": { "type": "number" @@ -9035,6 +9146,7 @@ } }, "required": [ + "kind", "insight", "variants", "probability", @@ -9607,8 +9719,21 @@ "expected_loss": { "type": "number" }, + "funnels_query": { + "$ref": "#/definitions/FunnelsQuery" + }, "insight": { - "$ref": "#/definitions/FunnelsQueryResponse" + "items": { + "items": { + "type": "object" + }, + "type": "array" + }, + "type": "array" + }, + "kind": { + "const": "ExperimentFunnelsQuery", + "type": "string" }, "probability": { "additionalProperties": { @@ -9633,6 +9758,7 @@ "credible_intervals", "expected_loss", "insight", + "kind", "probability", "significance_code", "significant", @@ -9643,6 +9769,9 @@ { "additionalProperties": false, "properties": { + "count_query": { + "$ref": "#/definitions/TrendsQuery" + }, "credible_intervals": { "additionalProperties": { "items": { @@ -9654,8 +9783,18 @@ }, "type": "object" }, + "exposure_query": { + "$ref": "#/definitions/TrendsQuery" + }, "insight": { - "$ref": "#/definitions/TrendsQueryResponse" + "items": { + "type": "object" + }, + "type": "array" + }, + "kind": { + "const": "ExperimentTrendsQuery", + "type": "string" }, "p_value": { "type": "number" @@ -9682,6 +9821,7 @@ "required": [ "credible_intervals", "insight", + "kind", "p_value", "probability", "significance_code", diff --git a/frontend/src/queries/schema.ts b/frontend/src/queries/schema.ts index 273605a42f6d7..8fb58464d3ce4 100644 --- a/frontend/src/queries/schema.ts +++ b/frontend/src/queries/schema.ts @@ -1621,7 +1621,10 @@ export enum ExperimentSignificanceCode { } export interface ExperimentTrendsQueryResponse { - insight: TrendsQueryResponse + kind: NodeKind.ExperimentTrendsQuery + insight: Record[] + count_query?: TrendsQuery + exposure_query?: TrendsQuery variants: ExperimentVariantTrendsBaseStats[] probability: Record significant: boolean @@ -1633,7 +1636,9 @@ export interface ExperimentTrendsQueryResponse { export type CachedExperimentTrendsQueryResponse = CachedQueryResponse export interface ExperimentFunnelsQueryResponse { - insight: FunnelsQueryResponse + kind: NodeKind.ExperimentFunnelsQuery + insight: Record[][] + funnels_query?: FunnelsQuery variants: ExperimentVariantFunnelsBaseStats[] probability: Record significant: boolean diff --git a/frontend/src/scenes/experiments/Experiment.stories.tsx b/frontend/src/scenes/experiments/Experiment.stories.tsx index daab995ff3aa1..8d2aecd75ab1e 100644 --- a/frontend/src/scenes/experiments/Experiment.stories.tsx +++ b/frontend/src/scenes/experiments/Experiment.stories.tsx @@ -116,6 +116,7 @@ const MOCK_FUNNEL_EXPERIMENT: Experiment = { interval: 'day', filter_test_accounts: true, }, + metrics: [], archived: false, created_by: { id: 1, @@ -172,6 +173,7 @@ const MOCK_TREND_EXPERIMENT: Experiment = { }, }, }, + metrics: [], parameters: { feature_flag_variants: [ { @@ -277,6 +279,7 @@ const MOCK_TREND_EXPERIMENT_MANY_VARIANTS: Experiment = { }, }, }, + metrics: [], parameters: { feature_flag_variants: [ { diff --git a/frontend/src/scenes/experiments/ExperimentView/Goal.tsx b/frontend/src/scenes/experiments/ExperimentView/Goal.tsx index b0ef5701ec5c7..c68acb47f9df4 100644 --- a/frontend/src/scenes/experiments/ExperimentView/Goal.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/Goal.tsx @@ -238,17 +238,16 @@ export function Goal(): JSX.Element { Change goal - {experimentInsightType === InsightType.TRENDS && - !experimentMathAggregationForTrends(experiment.filters) && ( - <> - -

-
- -
+ {experimentInsightType === InsightType.TRENDS && !experimentMathAggregationForTrends() && ( + <> + +
+
+
- - )} +
+ + )}
) diff --git a/frontend/src/scenes/experiments/ExperimentView/SecondaryMetricsTable.tsx b/frontend/src/scenes/experiments/ExperimentView/SecondaryMetricsTable.tsx index aadaebee40729..e9c19a72eb589 100644 --- a/frontend/src/scenes/experiments/ExperimentView/SecondaryMetricsTable.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/SecondaryMetricsTable.tsx @@ -157,7 +157,6 @@ export function SecondaryMetricsTable({ experiment.secondary_metrics?.forEach((metric, idx) => { const targetResults = secondaryMetricResults?.[idx] - const targetResultFilters = targetResults?.filters const winningVariant = getHighestProbabilityVariant(targetResults || null) const Header = (): JSX.Element => ( @@ -206,7 +205,7 @@ export function SecondaryMetricsTable({ )} ] - {experimentMathAggregationForTrends(targetResultFilters) ? 'metric' : 'count'} + {experimentMathAggregationForTrends() ? 'metric' : 'count'} ), diff --git a/frontend/src/scenes/experiments/ExperimentView/SummaryTable.tsx b/frontend/src/scenes/experiments/ExperimentView/SummaryTable.tsx index e046d0f3a52fe..1814cb8717795 100644 --- a/frontend/src/scenes/experiments/ExperimentView/SummaryTable.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/SummaryTable.tsx @@ -59,9 +59,7 @@ export function SummaryTable(): JSX.Element { {experimentResults.insight?.[0] && 'action' in experimentResults.insight[0] && ( )} - - {experimentMathAggregationForTrends(experimentResults?.filters) ? 'metric' : 'count'} - + {experimentMathAggregationForTrends() ? 'metric' : 'count'} ), render: function Key(_, variant): JSX.Element { diff --git a/frontend/src/scenes/experiments/ExperimentView/components.tsx b/frontend/src/scenes/experiments/ExperimentView/components.tsx index e61c32505c857..43a7b46e58f74 100644 --- a/frontend/src/scenes/experiments/ExperimentView/components.tsx +++ b/frontend/src/scenes/experiments/ExperimentView/components.tsx @@ -22,6 +22,7 @@ import { FEATURE_FLAGS } from 'lib/constants' import { dayjs } from 'lib/dayjs' import { IconAreaChart } from 'lib/lemon-ui/icons' import { More } from 'lib/lemon-ui/LemonButton/More' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { useEffect, useState } from 'react' import { urls } from 'scenes/urls' @@ -29,7 +30,15 @@ import { groupsModel } from '~/models/groupsModel' import { filtersToQueryNode } from '~/queries/nodes/InsightQuery/utils/filtersToQueryNode' import { queryFromFilters } from '~/queries/nodes/InsightViz/utils' import { Query } from '~/queries/Query/Query' -import { InsightVizNode, NodeKind } from '~/queries/schema' +import { + CachedExperimentFunnelsQueryResponse, + CachedExperimentTrendsQueryResponse, + ExperimentFunnelsQueryResponse, + ExperimentTrendsQueryResponse, + InsightQueryNode, + InsightVizNode, + NodeKind, +} from '~/queries/schema' import { Experiment, Experiment as ExperimentType, @@ -108,10 +117,54 @@ export function ResultsQuery({ targetResults, showTable, }: { - targetResults: ExperimentResults['result'] | null + targetResults: ExperimentResults['result'] | ExperimentTrendsQueryResponse | ExperimentFunnelsQueryResponse | null showTable: boolean }): JSX.Element { - if (!targetResults?.filters) { + const { featureFlags } = useValues(featureFlagLogic) + if (featureFlags[FEATURE_FLAGS.EXPERIMENTS_HOGQL]) { + const newQueryResults = targetResults as unknown as + | CachedExperimentTrendsQueryResponse + | CachedExperimentFunnelsQueryResponse + + const query = + newQueryResults.kind === NodeKind.ExperimentTrendsQuery + ? newQueryResults.count_query + : newQueryResults.funnels_query + const fakeInsightId = Math.random().toString(36).substring(2, 15) + + return ( + + ) + } + + const oldQueryResults = targetResults as ExperimentResults['result'] + + if (!oldQueryResults?.filters) { return <> } @@ -119,22 +172,22 @@ export function ResultsQuery({ }: { icon?: JSX.Element }): JSX.Element { - const { experimentResults, experiment } = useValues(experimentLogic) + const { experimentResults, experiment, featureFlags } = useValues(experimentLogic) // keep in sync with https://github.com/PostHog/posthog/blob/master/ee/clickhouse/queries/experiments/funnel_experiment_result.py#L71 // :TRICKY: In the case of no results, we still want users to explore the query, so they can debug further. @@ -160,18 +213,41 @@ export function ExploreButton({ icon = }: { icon?: JSX.Element properties: [], } - const query: InsightVizNode = { - kind: NodeKind.InsightVizNode, - source: filtersToQueryNode( - transformResultFilters( - experimentResults?.filters - ? { ...experimentResults.filters, explicit_date: true } - : filtersFromExperiment - ) - ), - showTable: true, - showLastComputation: true, - showLastComputationRefresh: false, + let query: InsightVizNode + if (featureFlags[FEATURE_FLAGS.EXPERIMENTS_HOGQL]) { + const newQueryResults = experimentResults as unknown as + | CachedExperimentTrendsQueryResponse + | CachedExperimentFunnelsQueryResponse + + const source = + newQueryResults.kind === NodeKind.ExperimentTrendsQuery + ? newQueryResults.count_query + : newQueryResults.funnels_query + + query = { + kind: NodeKind.InsightVizNode, + source: source as InsightQueryNode, + } + } else { + const oldQueryResults = experimentResults as ExperimentResults['result'] + + if (!oldQueryResults?.filters) { + return <> + } + + query = { + kind: NodeKind.InsightVizNode, + source: filtersToQueryNode( + transformResultFilters( + oldQueryResults?.filters + ? { ...oldQueryResults.filters, explicit_date: true } + : filtersFromExperiment + ) + ), + showTable: true, + showLastComputation: true, + showLastComputationRefresh: false, + } } return ( diff --git a/frontend/src/scenes/experiments/experimentLogic.tsx b/frontend/src/scenes/experiments/experimentLogic.tsx index 19e33aca83831..4db270269a634 100644 --- a/frontend/src/scenes/experiments/experimentLogic.tsx +++ b/frontend/src/scenes/experiments/experimentLogic.tsx @@ -5,6 +5,7 @@ import { loaders } from 'kea-loaders' import { router, urlToAction } from 'kea-router' import api from 'lib/api' import { EXPERIMENT_DEFAULT_DURATION, FunnelLayout } from 'lib/constants' +import { FEATURE_FLAGS } from 'lib/constants' import { dayjs } from 'lib/dayjs' import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { Tooltip } from 'lib/lemon-ui/Tooltip' @@ -27,7 +28,15 @@ import { cohortsModel } from '~/models/cohortsModel' import { groupsModel } from '~/models/groupsModel' import { filtersToQueryNode } from '~/queries/nodes/InsightQuery/utils/filtersToQueryNode' import { queryNodeToFilter } from '~/queries/nodes/InsightQuery/utils/queryNodeToFilter' -import { FunnelsQuery, InsightVizNode, TrendsQuery } from '~/queries/schema' +import { + CachedExperimentFunnelsQueryResponse, + CachedExperimentTrendsQueryResponse, + ExperimentTrendsQuery, + FunnelsQuery, + InsightVizNode, + NodeKind, + TrendsQuery, +} from '~/queries/schema' import { isFunnelsQuery } from '~/queries/utils' import { ActionFilter as ActionFilterType, @@ -62,6 +71,7 @@ const NEW_EXPERIMENT: Experiment = { name: '', feature_flag_key: '', filters: {}, + metrics: [], parameters: { feature_flag_variants: [ { key: 'control', rollout_percentage: 50 }, @@ -767,10 +777,36 @@ export const experimentLogic = kea([ }, }, experimentResults: [ - null as ExperimentResults['result'] | null, + null as + | ExperimentResults['result'] + | CachedExperimentTrendsQueryResponse + | CachedExperimentFunnelsQueryResponse + | null, { - loadExperimentResults: async (refresh?: boolean) => { + loadExperimentResults: async ( + refresh?: boolean + ): Promise< + | ExperimentResults['result'] + | CachedExperimentTrendsQueryResponse + | CachedExperimentFunnelsQueryResponse + | null + > => { try { + if (values.featureFlags[FEATURE_FLAGS.EXPERIMENTS_HOGQL]) { + const query = values.experiment.metrics[0].query + + const response: ExperimentResults = await api.create( + `api/projects/${values.currentTeamId}/query`, + { query } + ) + + return { + ...response, + fakeInsightId: Math.random().toString(36).substring(2, 15), + last_refresh: response.last_refresh || '', + } as unknown as CachedExperimentTrendsQueryResponse | CachedExperimentFunnelsQueryResponse + } + const refreshParam = refresh ? '?refresh=true' : '' const response: ExperimentResults = await api.get( `api/projects/${values.currentTeamId}/experiments/${values.experimentId}/results${refreshParam}` @@ -862,8 +898,13 @@ export const experimentLogic = kea([ (experimentId): Experiment['id'] => experimentId, ], experimentInsightType: [ - (s) => [s.experiment], - (experiment): InsightType => { + (s) => [s.experiment, s.featureFlags], + (experiment, featureFlags): InsightType => { + if (featureFlags[FEATURE_FLAGS.EXPERIMENTS_HOGQL]) { + const query = experiment?.metrics?.[0]?.query + return query?.kind === NodeKind.ExperimentTrendsQuery ? InsightType.TRENDS : InsightType.FUNNELS + } + return experiment?.filters?.insight || InsightType.FUNNELS }, ], @@ -909,31 +950,40 @@ export const experimentLogic = kea([ }, ], experimentMathAggregationForTrends: [ - () => [], - () => - (filters?: FilterType): PropertyMathType | CountPerActorMathType | undefined => { - // Find out if we're using count per actor math aggregates averages per user - const userMathValue = ( - [...(filters?.events || []), ...(filters?.actions || [])] as ActionFilterType[] - ).filter((entity) => - Object.values(CountPerActorMathType).includes(entity?.math as CountPerActorMathType) - )[0]?.math - - // alternatively, if we're using property math - // remove 'sum' property math from the list of math types - // since we can handle that as a regular case - const targetValues = Object.values(PropertyMathType).filter( - (value) => value !== PropertyMathType.Sum - ) - // sync with the backend at https://github.com/PostHog/posthog/blob/master/ee/clickhouse/queries/experiments/trend_experiment_result.py#L44 - // the function uses_math_aggregation_by_user_or_property_value + (s) => [s.experiment, s.featureFlags], + (experiment, featureFlags) => (): PropertyMathType | CountPerActorMathType | undefined => { + let entities: { math?: string }[] = [] + + if (featureFlags[FEATURE_FLAGS.EXPERIMENTS_HOGQL]) { + const query = experiment?.metrics?.[0]?.query as ExperimentTrendsQuery + if (!query) { + return undefined + } + entities = query.count_query?.series || [] + } else { + const filters = experiment?.filters + if (!filters) { + return undefined + } + entities = [...(filters?.events || []), ...(filters?.actions || [])] as ActionFilterType[] + } - const propertyMathValue = ( - [...(filters?.events || []), ...(filters?.actions || [])] as ActionFilterType[] - ).filter((entity) => targetValues.includes(entity?.math as PropertyMathType))[0]?.math + // Find out if we're using count per actor math aggregates averages per user + const userMathValue = entities.filter((entity) => + Object.values(CountPerActorMathType).includes(entity?.math as CountPerActorMathType) + )[0]?.math - return (userMathValue ?? propertyMathValue) as PropertyMathType | CountPerActorMathType | undefined - }, + // alternatively, if we're using property math + // remove 'sum' property math from the list of math types + // since we can handle that as a regular case + const targetValues = Object.values(PropertyMathType).filter((value) => value !== PropertyMathType.Sum) + + const propertyMathValue = entities.filter((entity) => + targetValues.includes(entity?.math as PropertyMathType) + )[0]?.math + + return (userMathValue ?? propertyMathValue) as PropertyMathType | CountPerActorMathType | undefined + }, ], minimumDetectableEffect: [ (s) => [s.experiment, s.experimentInsightType, s.conversionMetrics, s.trendResults], @@ -1126,7 +1176,14 @@ export const experimentLogic = kea([ conversionRateForVariant: [ () => [], () => - (experimentResults: Partial | null, variantKey: string): number | null => { + ( + experimentResults: + | Partial + | CachedExperimentFunnelsQueryResponse + | CachedExperimentTrendsQueryResponse + | null, + variantKey: string + ): number | null => { if (!experimentResults || !experimentResults.insight) { return null } @@ -1144,34 +1201,47 @@ export const experimentLogic = kea([ }, ], getIndexForVariant: [ - () => [], - () => - (experimentResults: Partial | null, variant: string): number | null => { - // TODO: Would be nice for every secondary metric to have the same colour for variants - const insightType = experimentResults?.filters?.insight - let result: number | null = null + (s) => [s.experimentInsightType], + (experimentInsightType) => + ( + experimentResults: + | Partial + | CachedExperimentTrendsQueryResponse + | CachedExperimentFunnelsQueryResponse + | null, + variant: string + ): number | null => { // Ensures we get the right index from results, so the UI can // display the right colour for the variant if (!experimentResults || !experimentResults.insight) { return null } + let index = -1 - if (insightType === InsightType.FUNNELS) { + if (experimentInsightType === InsightType.FUNNELS) { // Funnel Insight is displayed in order of decreasing count - index = ([...experimentResults.insight] as FunnelStep[][]) - .sort((a, b) => b[0]?.count - a[0]?.count) - .findIndex( - (variantFunnel: FunnelStep[]) => variantFunnel[0]?.breakdown_value?.[0] === variant - ) + index = (Array.isArray(experimentResults.insight) ? [...experimentResults.insight] : []) + .sort((a, b) => { + const aCount = (a && Array.isArray(a) && a[0]?.count) || 0 + const bCount = (b && Array.isArray(b) && b[0]?.count) || 0 + return bCount - aCount + }) + .findIndex((variantFunnel) => { + if (!Array.isArray(variantFunnel) || !variantFunnel[0]?.breakdown_value) { + return false + } + const breakdownValue = variantFunnel[0].breakdown_value + return Array.isArray(breakdownValue) && breakdownValue[0] === variant + }) } else { index = (experimentResults.insight as TrendResult[]).findIndex( (variantTrend: TrendResult) => variantTrend.breakdown_value === variant ) } - result = index === -1 ? null : index + const result = index === -1 ? null : index - if (result !== null && insightType === InsightType.FUNNELS) { - result++ + if (result !== null && experimentInsightType === InsightType.FUNNELS) { + return result + 1 } return result }, @@ -1179,10 +1249,15 @@ export const experimentLogic = kea([ countDataForVariant: [ (s) => [s.experimentMathAggregationForTrends], (experimentMathAggregationForTrends) => - (experimentResults: Partial | null, variant: string): number | null => { - const usingMathAggregationType = experimentMathAggregationForTrends( - experimentResults?.filters || {} - ) + ( + experimentResults: + | Partial + | CachedExperimentTrendsQueryResponse + | CachedExperimentFunnelsQueryResponse + | null, + variant: string + ): number | null => { + const usingMathAggregationType = experimentMathAggregationForTrends() if (!experimentResults || !experimentResults.insight) { return null } @@ -1223,7 +1298,14 @@ export const experimentLogic = kea([ exposureCountDataForVariant: [ () => [], () => - (experimentResults: Partial | null, variant: string): number | null => { + ( + experimentResults: + | Partial + | CachedExperimentTrendsQueryResponse + | CachedExperimentFunnelsQueryResponse + | null, + variant: string + ): number | null => { if (!experimentResults || !experimentResults.variants) { return null } @@ -1241,14 +1323,21 @@ export const experimentLogic = kea([ ], getHighestProbabilityVariant: [ () => [], - () => (results: ExperimentResults['result'] | null) => { - if (results && results.probability) { - const maxValue = Math.max(...Object.values(results.probability)) - return Object.keys(results.probability).find( - (key) => Math.abs(results.probability[key] - maxValue) < Number.EPSILON - ) - } - }, + () => + ( + results: + | ExperimentResults['result'] + | CachedExperimentTrendsQueryResponse + | CachedExperimentFunnelsQueryResponse + | null + ) => { + if (results && results.probability) { + const maxValue = Math.max(...Object.values(results.probability)) + return Object.keys(results.probability).find( + (key) => Math.abs(results.probability[key] - maxValue) < Number.EPSILON + ) + } + }, ], sortedExperimentResultVariants: [ (s) => [s.experimentResults, s.experiment], diff --git a/frontend/src/types.ts b/frontend/src/types.ts index eb839f5252bcd..4a17a89a811cd 100644 --- a/frontend/src/types.ts +++ b/frontend/src/types.ts @@ -35,6 +35,8 @@ import { QueryContext } from '~/queries/types' import type { DashboardFilter, DatabaseSchemaField, + ExperimentFunnelsQuery, + ExperimentTrendsQuery, HogQLQuery, HogQLQueryModifiers, HogQLVariable, @@ -3242,6 +3244,11 @@ export interface Group { group_properties: Record } +export interface ExperimentMetric { + type: string + query: ExperimentTrendsQuery | ExperimentFunnelsQuery +} + export interface Experiment { id: number | 'new' name: string @@ -3250,6 +3257,7 @@ export interface Experiment { feature_flag?: FeatureFlagBasicType exposure_cohort?: number filters: FilterType + metrics: ExperimentMetric[] parameters: { minimum_detectable_effect?: number recommended_running_time?: number @@ -3294,7 +3302,7 @@ interface BaseExperimentResults { } export interface _TrendsExperimentResults extends BaseExperimentResults { - insight: TrendResult[] + insight: Record[] filters: TrendsFilterType variants: TrendExperimentVariant[] last_refresh?: string | null @@ -3302,7 +3310,7 @@ export interface _TrendsExperimentResults extends BaseExperimentResults { } export interface _FunnelExperimentResults extends BaseExperimentResults { - insight: FunnelStep[][] + insight: Record[] filters: FunnelsFilterType variants: FunnelExperimentVariant[] last_refresh?: string | null diff --git a/posthog/api/test/__snapshots__/test_api_docs.ambr b/posthog/api/test/__snapshots__/test_api_docs.ambr index 9b7667ec6484b..044ee43f1983e 100644 --- a/posthog/api/test/__snapshots__/test_api_docs.ambr +++ b/posthog/api/test/__snapshots__/test_api_docs.ambr @@ -101,6 +101,8 @@ 'Warning: encountered multiple names for the same choice set (HrefMatchingEnum). This may be unwanted even though the generated schema is technically correct. Add an entry to ENUM_NAME_OVERRIDES to fix the naming.', 'Warning: encountered multiple names for the same choice set (MembershipLevelEnum). This may be unwanted even though the generated schema is technically correct. Add an entry to ENUM_NAME_OVERRIDES to fix the naming.', 'Warning: enum naming encountered a non-optimally resolvable collision for fields named "kind". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "Kind069Enum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.', + 'Warning: enum naming encountered a non-optimally resolvable collision for fields named "kind". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "Kind0ddEnum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.', + 'Warning: enum naming encountered a non-optimally resolvable collision for fields named "kind". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "Kind496Enum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.', 'Warning: enum naming encountered a non-optimally resolvable collision for fields named "kind". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "KindCfaEnum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.', 'Warning: enum naming encountered a non-optimally resolvable collision for fields named "type". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "TypeF73Enum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.', 'Warning: operationId "Funnels" has collisions [(\'/api/environments/{project_id}/insights/funnel/\', \'post\'), (\'/api/projects/{project_id}/insights/funnel/\', \'post\')]. resolving with numeral suffixes.', diff --git a/posthog/hogql/transforms/test/__snapshots__/test_in_cohort.ambr b/posthog/hogql/transforms/test/__snapshots__/test_in_cohort.ambr index f018e96ef067a..06e46e0ca30b0 100644 --- a/posthog/hogql/transforms/test/__snapshots__/test_in_cohort.ambr +++ b/posthog/hogql/transforms/test/__snapshots__/test_in_cohort.ambr @@ -31,7 +31,7 @@ FROM events LEFT JOIN ( SELECT person_static_cohort.person_id AS cohort_person_id, 1 AS matched, person_static_cohort.cohort_id AS cohort_id FROM person_static_cohort - WHERE and(equals(person_static_cohort.team_id, 420), in(person_static_cohort.cohort_id, [4]))) AS __in_cohort ON equals(__in_cohort.cohort_person_id, events.person_id) + WHERE and(equals(person_static_cohort.team_id, 420), in(person_static_cohort.cohort_id, [6]))) AS __in_cohort ON equals(__in_cohort.cohort_person_id, events.person_id) WHERE and(equals(events.team_id, 420), 1, ifNull(equals(__in_cohort.matched, 1), 0)) LIMIT 100 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, format_csv_allow_double_quotes=0, max_ast_elements=4000000, max_expanded_ast_elements=4000000, max_bytes_before_external_group_by=0 @@ -42,7 +42,7 @@ FROM events LEFT JOIN ( SELECT person_id AS cohort_person_id, 1 AS matched, cohort_id FROM static_cohort_people - WHERE in(cohort_id, [4])) AS __in_cohort ON equals(__in_cohort.cohort_person_id, person_id) + WHERE in(cohort_id, [6])) AS __in_cohort ON equals(__in_cohort.cohort_person_id, person_id) WHERE and(1, equals(__in_cohort.matched, 1)) LIMIT 100 ''' @@ -55,7 +55,7 @@ FROM events LEFT JOIN ( SELECT person_static_cohort.person_id AS cohort_person_id, 1 AS matched, person_static_cohort.cohort_id AS cohort_id FROM person_static_cohort - WHERE and(equals(person_static_cohort.team_id, 420), in(person_static_cohort.cohort_id, [5]))) AS __in_cohort ON equals(__in_cohort.cohort_person_id, events.person_id) + WHERE and(equals(person_static_cohort.team_id, 420), in(person_static_cohort.cohort_id, [7]))) AS __in_cohort ON equals(__in_cohort.cohort_person_id, events.person_id) WHERE and(equals(events.team_id, 420), 1, ifNull(equals(__in_cohort.matched, 1), 0)) LIMIT 100 SETTINGS readonly=2, max_execution_time=60, allow_experimental_object_type=1, format_csv_allow_double_quotes=0, max_ast_elements=4000000, max_expanded_ast_elements=4000000, max_bytes_before_external_group_by=0 @@ -66,7 +66,7 @@ FROM events LEFT JOIN ( SELECT person_id AS cohort_person_id, 1 AS matched, cohort_id FROM static_cohort_people - WHERE in(cohort_id, [5])) AS __in_cohort ON equals(__in_cohort.cohort_person_id, person_id) + WHERE in(cohort_id, [7])) AS __in_cohort ON equals(__in_cohort.cohort_person_id, person_id) WHERE and(1, equals(__in_cohort.matched, 1)) LIMIT 100 ''' diff --git a/posthog/hogql_queries/experiments/experiment_funnels_query_runner.py b/posthog/hogql_queries/experiments/experiment_funnels_query_runner.py index c6783daa489e0..23ba38cd742a3 100644 --- a/posthog/hogql_queries/experiments/experiment_funnels_query_runner.py +++ b/posthog/hogql_queries/experiments/experiment_funnels_query_runner.py @@ -36,9 +36,9 @@ def __init__(self, *args, **kwargs): self.experiment = Experiment.objects.get(id=self.query.experiment_id) self.feature_flag = self.experiment.feature_flag self.variants = [variant["key"] for variant in self.feature_flag.variants] - self.prepared_funnel_query = self._prepare_funnel_query() + self.prepared_funnels_query = self._prepare_funnel_query() self.funnels_query_runner = FunnelsQueryRunner( - query=self.prepared_funnel_query, team=self.team, timings=self.timings, limit_context=self.limit_context + query=self.prepared_funnels_query, team=self.team, timings=self.timings, limit_context=self.limit_context ) def calculate(self) -> ExperimentFunnelsQueryResponse: @@ -53,7 +53,9 @@ def calculate(self) -> ExperimentFunnelsQueryResponse: credible_intervals = calculate_credible_intervals([control_variant, *test_variants]) return ExperimentFunnelsQueryResponse( - insight=funnels_result, + kind="ExperimentFunnelsQuery", + funnels_query=self.prepared_funnels_query, + insight=funnels_result.results, variants=[variant.model_dump() for variant in [control_variant, *test_variants]], probability={ variant.key: probability @@ -75,7 +77,7 @@ def _prepare_funnel_query(self) -> FunnelsQuery: to separate results for different experiment variants. """ # Clone the source query - prepared_funnel_query = FunnelsQuery(**self.query.source.model_dump()) + prepared_funnels_query = FunnelsQuery(**self.query.source.model_dump()) # Set the date range to match the experiment's duration, using the project's timezone if self.team.timezone: @@ -86,19 +88,19 @@ def _prepare_funnel_query(self) -> FunnelsQuery: start_date = self.experiment.start_date end_date = self.experiment.end_date - prepared_funnel_query.dateRange = InsightDateRange( + prepared_funnels_query.dateRange = InsightDateRange( date_from=start_date.isoformat() if start_date else None, date_to=end_date.isoformat() if end_date else None, explicitDate=True, ) # Configure the breakdown to use the feature flag key - prepared_funnel_query.breakdownFilter = BreakdownFilter( + prepared_funnels_query.breakdownFilter = BreakdownFilter( breakdown=f"$feature/{self.feature_flag.key}", breakdown_type="event", ) - return prepared_funnel_query + return prepared_funnels_query def _get_variants_with_base_stats( self, funnels_result: FunnelsQueryResponse diff --git a/posthog/hogql_queries/experiments/experiment_trends_query_runner.py b/posthog/hogql_queries/experiments/experiment_trends_query_runner.py index 7389b65a29bf6..2a74202b45f11 100644 --- a/posthog/hogql_queries/experiments/experiment_trends_query_runner.py +++ b/posthog/hogql_queries/experiments/experiment_trends_query_runner.py @@ -106,12 +106,11 @@ def _prepare_count_query(self) -> TrendsQuery: # :TRICKY: for `avg` aggregation, use `sum` data as an approximation if prepared_count_query.series[0].math == PropertyMathType.AVG: prepared_count_query.series[0].math = PropertyMathType.SUM - prepared_count_query.trendsFilter = TrendsFilter(display=ChartDisplayType.ACTIONS_LINE_GRAPH_CUMULATIVE) # TODO: revisit this; using the count data for the remaining aggregation types is likely wrong elif uses_math_aggregation: prepared_count_query.series[0].math = None - prepared_count_query.trendsFilter = TrendsFilter(display=ChartDisplayType.ACTIONS_LINE_GRAPH_CUMULATIVE) + prepared_count_query.trendsFilter = TrendsFilter(display=ChartDisplayType.ACTIONS_LINE_GRAPH_CUMULATIVE) prepared_count_query.dateRange = self._get_insight_date_range() prepared_count_query.breakdownFilter = self._get_breakdown_filter() prepared_count_query.properties = [ @@ -242,7 +241,6 @@ def run(query_runner: TrendsQueryRunner, result_key: str, is_parallel: bool): count_result = shared_results["count_result"] exposure_result = shared_results["exposure_result"] - if count_result is None or exposure_result is None: raise ValueError("One or both query runners failed to produce a response") @@ -255,7 +253,10 @@ def run(query_runner: TrendsQueryRunner, result_key: str, is_parallel: bool): credible_intervals = calculate_credible_intervals([control_variant, *test_variants]) return ExperimentTrendsQueryResponse( - insight=count_result, + kind="ExperimentTrendsQuery", + insight=count_result.results, + count_query=self.prepared_count_query, + exposure_query=self.prepared_exposure_query, variants=[variant.model_dump() for variant in [control_variant, *test_variants]], probability={ variant.key: probability diff --git a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr index 6027f7ca7bb42..4ae57feb8cb96 100644 --- a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr +++ b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr @@ -851,14 +851,49 @@ # --- # name: TestTrends.test_dau_with_breakdown_filtering_with_sampling.1 ''' - /* celery:posthog.tasks.tasks.sync_insight_caching_state */ - SELECT team_id, - date_diff('second', max(timestamp), now()) AS age - FROM events - WHERE timestamp > date_sub(DAY, 3, now()) - AND timestamp < now() - GROUP BY team_id - ORDER BY age; + SELECT groupArray(1)(date)[1] AS date, + arrayFold((acc, x) -> arrayMap(i -> plus(acc[i], x[i]), range(1, plus(length(date), 1))), groupArray(ifNull(total, 0)), arrayWithConstant(length(date), reinterpretAsFloat64(0))) AS total, + if(ifNull(ifNull(greaterOrEquals(row_number, 25), 0), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(ifNull(count, 0)), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + breakdown_value AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(DISTINCT if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id)) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1.0 + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, + person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) + GROUP BY day_start, + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_other_$$'), 0), 2, if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_null_$$'), 0), 1, 0)) ASC, arraySum(total) DESC, breakdown_value ASC) + WHERE isNotNull(breakdown_value) + GROUP BY breakdown_value + ORDER BY if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_other_$$'), 0), 2, if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_null_$$'), 0), 1, 0)) ASC, arraySum(total) DESC, breakdown_value ASC + LIMIT 50000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 ''' # --- # name: TestTrends.test_dau_with_breakdown_filtering_with_sampling.10 @@ -1075,38 +1110,143 @@ # --- # name: TestTrends.test_dau_with_breakdown_filtering_with_sampling.2 ''' - /* celery:posthog.tasks.tasks.sync_insight_caching_state */ - SELECT team_id, - date_diff('second', max(timestamp), now()) AS age - FROM events - WHERE timestamp > date_sub(DAY, 3, now()) - AND timestamp < now() - GROUP BY team_id - ORDER BY age; + SELECT groupArray(1)(date)[1] AS date, + arrayFold((acc, x) -> arrayMap(i -> plus(acc[i], x[i]), range(1, plus(length(date), 1))), groupArray(ifNull(total, 0)), arrayWithConstant(length(date), reinterpretAsFloat64(0))) AS total, + if(ifNull(ifNull(greaterOrEquals(row_number, 25), 0), 0), '$$_posthog_breakdown_other_$$', breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(ifNull(count, 0)), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + breakdown_value AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + breakdown_value AS breakdown_value + FROM + (SELECT count(DISTINCT if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id)) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM events AS e SAMPLE 1.0 + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, + person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) + GROUP BY day_start, + breakdown_value) + GROUP BY day_start, + breakdown_value + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_other_$$'), 0), 2, if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_null_$$'), 0), 1, 0)) ASC, arraySum(total) DESC, breakdown_value ASC) + WHERE isNotNull(breakdown_value) + GROUP BY breakdown_value + ORDER BY if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_other_$$'), 0), 2, if(ifNull(equals(breakdown_value, '$$_posthog_breakdown_null_$$'), 0), 1, 0)) ASC, arraySum(total) DESC, breakdown_value ASC + LIMIT 50000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 ''' # --- # name: TestTrends.test_dau_with_breakdown_filtering_with_sampling.3 ''' - /* celery:posthog.tasks.tasks.sync_insight_caching_state */ - SELECT team_id, - date_diff('second', max(timestamp), now()) AS age - FROM events - WHERE timestamp > date_sub(DAY, 3, now()) - AND timestamp < now() - GROUP BY team_id - ORDER BY age; + SELECT groupArray(1)(date)[1] AS date, + arrayFold((acc, x) -> arrayMap(i -> plus(acc[i], x[i]), range(1, plus(length(date), 1))), groupArray(ifNull(total, 0)), arrayWithConstant(length(date), reinterpretAsFloat64(0))) AS total, + arrayMap(i -> if(ifNull(ifNull(greaterOrEquals(row_number, 25), 0), 0), '$$_posthog_breakdown_other_$$', i), breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(ifNull(count, 0)), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + breakdown_value AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + [ifNull(toString(breakdown_value_1), '$$_posthog_breakdown_null_$$')] AS breakdown_value + FROM + (SELECT count(DISTINCT if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id)) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value_1 + FROM events AS e SAMPLE 1.0 + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, + person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) + GROUP BY day_start, + breakdown_value_1) + GROUP BY day_start, + breakdown_value_1 + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY if(has(breakdown_value, '$$_posthog_breakdown_other_$$'), 2, if(has(breakdown_value, '$$_posthog_breakdown_null_$$'), 1, 0)) ASC, arraySum(total) DESC, breakdown_value ASC) + WHERE arrayExists(x -> isNotNull(x), breakdown_value) + GROUP BY breakdown_value + ORDER BY if(has(breakdown_value, '$$_posthog_breakdown_other_$$'), 2, if(has(breakdown_value, '$$_posthog_breakdown_null_$$'), 1, 0)) ASC, arraySum(total) DESC, breakdown_value ASC + LIMIT 50000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 ''' # --- # name: TestTrends.test_dau_with_breakdown_filtering_with_sampling.4 ''' - /* celery:posthog.tasks.tasks.sync_insight_caching_state */ - SELECT team_id, - date_diff('second', max(timestamp), now()) AS age - FROM events - WHERE timestamp > date_sub(DAY, 3, now()) - AND timestamp < now() - GROUP BY team_id - ORDER BY age; + SELECT groupArray(1)(date)[1] AS date, + arrayFold((acc, x) -> arrayMap(i -> plus(acc[i], x[i]), range(1, plus(length(date), 1))), groupArray(ifNull(total, 0)), arrayWithConstant(length(date), reinterpretAsFloat64(0))) AS total, + arrayMap(i -> if(ifNull(ifNull(greaterOrEquals(row_number, 25), 0), 0), '$$_posthog_breakdown_other_$$', i), breakdown_value) AS breakdown_value + FROM + (SELECT arrayMap(number -> plus(toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC'))), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(ifNull(count, 0)), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> ifNull(equals(x, _match_date), isNull(x) + and isNull(_match_date)), _days_for_count), _index), 1))), date) AS total, + breakdown_value AS breakdown_value, + rowNumberInAllBlocks() AS row_number + FROM + (SELECT sum(total) AS count, + day_start AS day_start, + [ifNull(toString(breakdown_value_1), '$$_posthog_breakdown_null_$$')] AS breakdown_value + FROM + (SELECT count(DISTINCT if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id)) AS total, + toStartOfDay(toTimeZone(e.timestamp, 'UTC')) AS day_start, + ifNull(nullIf(toString(replaceRegexpAll(nullIf(nullIf(JSONExtractRaw(e.properties, '$some_property'), ''), 'null'), '^"|"$', '')), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value_1 + FROM events AS e SAMPLE 1.0 + LEFT OUTER JOIN + (SELECT argMax(person_distinct_id_overrides.person_id, person_distinct_id_overrides.version) AS person_id, + person_distinct_id_overrides.distinct_id AS distinct_id + FROM person_distinct_id_overrides + WHERE equals(person_distinct_id_overrides.team_id, 2) + GROUP BY person_distinct_id_overrides.distinct_id + HAVING ifNull(equals(argMax(person_distinct_id_overrides.is_deleted, person_distinct_id_overrides.version), 0), 0) SETTINGS optimize_aggregation_in_order=1) AS e__override ON equals(e.distinct_id, e__override.distinct_id) + WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) + GROUP BY day_start, + breakdown_value_1) + GROUP BY day_start, + breakdown_value_1 + ORDER BY day_start ASC, breakdown_value ASC) + GROUP BY breakdown_value + ORDER BY if(has(breakdown_value, '$$_posthog_breakdown_other_$$'), 2, if(has(breakdown_value, '$$_posthog_breakdown_null_$$'), 1, 0)) ASC, arraySum(total) DESC, breakdown_value ASC) + WHERE arrayExists(x -> isNotNull(x), breakdown_value) + GROUP BY breakdown_value + ORDER BY if(has(breakdown_value, '$$_posthog_breakdown_other_$$'), 2, if(has(breakdown_value, '$$_posthog_breakdown_null_$$'), 1, 0)) ASC, arraySum(total) DESC, breakdown_value ASC + LIMIT 50000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1, + format_csv_allow_double_quotes=0, + max_ast_elements=4000000, + max_expanded_ast_elements=4000000, + max_bytes_before_external_group_by=0 ''' # --- # name: TestTrends.test_dau_with_breakdown_filtering_with_sampling.5 diff --git a/posthog/schema.py b/posthog/schema.py index b386d5d6c8e97..199a19f1fdfe3 100644 --- a/posthog/schema.py +++ b/posthog/schema.py @@ -1951,31 +1951,6 @@ class CachedEventsQueryResponse(BaseModel): types: list[str] -class CachedExperimentTrendsQueryResponse(BaseModel): - model_config = ConfigDict( - extra="forbid", - ) - cache_key: str - cache_target_age: Optional[AwareDatetime] = None - calculation_trigger: Optional[str] = Field( - default=None, description="What triggered the calculation of the query, leave empty if user/immediate" - ) - credible_intervals: dict[str, list[float]] - insight: TrendsQueryResponse - is_cached: bool - last_refresh: AwareDatetime - next_allowed_client_refresh: AwareDatetime - p_value: float - probability: dict[str, float] - query_status: Optional[QueryStatus] = Field( - default=None, description="Query status indicates whether next to the provided data, a query is still running." - ) - significance_code: ExperimentSignificanceCode - significant: bool - timezone: str - variants: list[ExperimentVariantTrendsBaseStats] - - class CachedFunnelCorrelationResponse(BaseModel): model_config = ConfigDict( extra="forbid", @@ -2700,19 +2675,6 @@ class Response9(BaseModel): ) -class Response11(BaseModel): - model_config = ConfigDict( - extra="forbid", - ) - credible_intervals: dict[str, list[float]] - insight: TrendsQueryResponse - p_value: float - probability: dict[str, float] - significance_code: ExperimentSignificanceCode - significant: bool - variants: list[ExperimentVariantTrendsBaseStats] - - class DataWarehousePersonPropertyFilter(BaseModel): model_config = ConfigDict( extra="forbid", @@ -2863,19 +2825,6 @@ class EventsQueryResponse(BaseModel): types: list[str] -class ExperimentTrendsQueryResponse(BaseModel): - model_config = ConfigDict( - extra="forbid", - ) - credible_intervals: dict[str, list[float]] - insight: TrendsQueryResponse - p_value: float - probability: dict[str, float] - significance_code: ExperimentSignificanceCode - significant: bool - variants: list[ExperimentVariantTrendsBaseStats] - - class BreakdownFilter1(BaseModel): model_config = ConfigDict( extra="forbid", @@ -3466,32 +3415,6 @@ class QueryResponseAlternative15(BaseModel): ) -class QueryResponseAlternative16(BaseModel): - model_config = ConfigDict( - extra="forbid", - ) - credible_intervals: dict[str, list[float]] - expected_loss: float - insight: FunnelsQueryResponse - probability: dict[str, float] - significance_code: ExperimentSignificanceCode - significant: bool - variants: list[ExperimentVariantFunnelsBaseStats] - - -class QueryResponseAlternative17(BaseModel): - model_config = ConfigDict( - extra="forbid", - ) - credible_intervals: dict[str, list[float]] - insight: TrendsQueryResponse - p_value: float - probability: dict[str, float] - significance_code: ExperimentSignificanceCode - significant: bool - variants: list[ExperimentVariantTrendsBaseStats] - - class QueryResponseAlternative18(BaseModel): model_config = ConfigDict( extra="forbid", @@ -3728,32 +3651,6 @@ class QueryResponseAlternative27(BaseModel): ) -class QueryResponseAlternative28(BaseModel): - model_config = ConfigDict( - extra="forbid", - ) - credible_intervals: dict[str, list[float]] - expected_loss: float - insight: FunnelsQueryResponse - probability: dict[str, float] - significance_code: ExperimentSignificanceCode - significant: bool - variants: list[ExperimentVariantFunnelsBaseStats] - - -class QueryResponseAlternative29(BaseModel): - model_config = ConfigDict( - extra="forbid", - ) - credible_intervals: dict[str, list[float]] - insight: TrendsQueryResponse - p_value: float - probability: dict[str, float] - significance_code: ExperimentSignificanceCode - significant: bool - variants: list[ExperimentVariantTrendsBaseStats] - - class QueryResponseAlternative30(BaseModel): model_config = ConfigDict( extra="forbid", @@ -4256,31 +4153,6 @@ class AnyResponseType( ] -class CachedExperimentFunnelsQueryResponse(BaseModel): - model_config = ConfigDict( - extra="forbid", - ) - cache_key: str - cache_target_age: Optional[AwareDatetime] = None - calculation_trigger: Optional[str] = Field( - default=None, description="What triggered the calculation of the query, leave empty if user/immediate" - ) - credible_intervals: dict[str, list[float]] - expected_loss: float - insight: FunnelsQueryResponse - is_cached: bool - last_refresh: AwareDatetime - next_allowed_client_refresh: AwareDatetime - probability: dict[str, float] - query_status: Optional[QueryStatus] = Field( - default=None, description="Query status indicates whether next to the provided data, a query is still running." - ) - significance_code: ExperimentSignificanceCode - significant: bool - timezone: str - variants: list[ExperimentVariantFunnelsBaseStats] - - class CachedHogQLQueryResponse(BaseModel): model_config = ConfigDict( extra="forbid", @@ -4432,19 +4304,6 @@ class Response2(BaseModel): types: Optional[list] = Field(default=None, description="Types of returned columns") -class Response10(BaseModel): - model_config = ConfigDict( - extra="forbid", - ) - credible_intervals: dict[str, list[float]] - expected_loss: float - insight: FunnelsQueryResponse - probability: dict[str, float] - significance_code: ExperimentSignificanceCode - significant: bool - variants: list[ExperimentVariantFunnelsBaseStats] - - class DataWarehouseNode(BaseModel): model_config = ConfigDict( extra="forbid", @@ -4684,19 +4543,6 @@ class EventsNode(BaseModel): response: Optional[dict[str, Any]] = None -class ExperimentFunnelsQueryResponse(BaseModel): - model_config = ConfigDict( - extra="forbid", - ) - credible_intervals: dict[str, list[float]] - expected_loss: float - insight: FunnelsQueryResponse - probability: dict[str, float] - significance_code: ExperimentSignificanceCode - significant: bool - variants: list[ExperimentVariantFunnelsBaseStats] - - class FunnelExclusionActionsNode(BaseModel): model_config = ConfigDict( extra="forbid", @@ -5530,6 +5376,50 @@ class VisualizationMessage(BaseModel): type: Literal["ai/viz"] = "ai/viz" +class CachedExperimentTrendsQueryResponse(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + cache_key: str + cache_target_age: Optional[AwareDatetime] = None + calculation_trigger: Optional[str] = Field( + default=None, description="What triggered the calculation of the query, leave empty if user/immediate" + ) + count_query: Optional[TrendsQuery] = None + credible_intervals: dict[str, list[float]] + exposure_query: Optional[TrendsQuery] = None + insight: list[dict[str, Any]] + is_cached: bool + kind: Literal["ExperimentTrendsQuery"] = "ExperimentTrendsQuery" + last_refresh: AwareDatetime + next_allowed_client_refresh: AwareDatetime + p_value: float + probability: dict[str, float] + query_status: Optional[QueryStatus] = Field( + default=None, description="Query status indicates whether next to the provided data, a query is still running." + ) + significance_code: ExperimentSignificanceCode + significant: bool + timezone: str + variants: list[ExperimentVariantTrendsBaseStats] + + +class Response11(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + count_query: Optional[TrendsQuery] = None + credible_intervals: dict[str, list[float]] + exposure_query: Optional[TrendsQuery] = None + insight: list[dict[str, Any]] + kind: Literal["ExperimentTrendsQuery"] = "ExperimentTrendsQuery" + p_value: float + probability: dict[str, float] + significance_code: ExperimentSignificanceCode + significant: bool + variants: list[ExperimentVariantTrendsBaseStats] + + class ErrorTrackingQuery(BaseModel): model_config = ConfigDict( extra="forbid", @@ -5617,18 +5507,20 @@ class EventsQuery(BaseModel): where: Optional[list[str]] = Field(default=None, description="HogQL filters to apply on returned data") -class ExperimentTrendsQuery(BaseModel): +class ExperimentTrendsQueryResponse(BaseModel): model_config = ConfigDict( extra="forbid", ) - count_query: TrendsQuery - experiment_id: int + count_query: Optional[TrendsQuery] = None + credible_intervals: dict[str, list[float]] exposure_query: Optional[TrendsQuery] = None + insight: list[dict[str, Any]] kind: Literal["ExperimentTrendsQuery"] = "ExperimentTrendsQuery" - modifiers: Optional[HogQLQueryModifiers] = Field( - default=None, description="Modifiers used when performing the query" - ) - response: Optional[ExperimentTrendsQueryResponse] = None + p_value: float + probability: dict[str, float] + significance_code: ExperimentSignificanceCode + significant: bool + variants: list[ExperimentVariantTrendsBaseStats] class FunnelsQuery(BaseModel): @@ -5928,6 +5820,68 @@ class LifecycleQuery(BaseModel): ) +class QueryResponseAlternative16(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + credible_intervals: dict[str, list[float]] + expected_loss: float + funnels_query: Optional[FunnelsQuery] = None + insight: list[list[dict[str, Any]]] + kind: Literal["ExperimentFunnelsQuery"] = "ExperimentFunnelsQuery" + probability: dict[str, float] + significance_code: ExperimentSignificanceCode + significant: bool + variants: list[ExperimentVariantFunnelsBaseStats] + + +class QueryResponseAlternative17(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + count_query: Optional[TrendsQuery] = None + credible_intervals: dict[str, list[float]] + exposure_query: Optional[TrendsQuery] = None + insight: list[dict[str, Any]] + kind: Literal["ExperimentTrendsQuery"] = "ExperimentTrendsQuery" + p_value: float + probability: dict[str, float] + significance_code: ExperimentSignificanceCode + significant: bool + variants: list[ExperimentVariantTrendsBaseStats] + + +class QueryResponseAlternative28(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + credible_intervals: dict[str, list[float]] + expected_loss: float + funnels_query: Optional[FunnelsQuery] = None + insight: list[list[dict[str, Any]]] + kind: Literal["ExperimentFunnelsQuery"] = "ExperimentFunnelsQuery" + probability: dict[str, float] + significance_code: ExperimentSignificanceCode + significant: bool + variants: list[ExperimentVariantFunnelsBaseStats] + + +class QueryResponseAlternative29(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + count_query: Optional[TrendsQuery] = None + credible_intervals: dict[str, list[float]] + exposure_query: Optional[TrendsQuery] = None + insight: list[dict[str, Any]] + kind: Literal["ExperimentTrendsQuery"] = "ExperimentTrendsQuery" + p_value: float + probability: dict[str, float] + significance_code: ExperimentSignificanceCode + significant: bool + variants: list[ExperimentVariantTrendsBaseStats] + + class QueryResponseAlternative37(BaseModel): model_config = ConfigDict( extra="forbid", @@ -6036,6 +5990,48 @@ class RootAssistantMessage(RootModel[Union[VisualizationMessage, AssistantMessag root: Union[VisualizationMessage, AssistantMessage, HumanMessage] +class CachedExperimentFunnelsQueryResponse(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + cache_key: str + cache_target_age: Optional[AwareDatetime] = None + calculation_trigger: Optional[str] = Field( + default=None, description="What triggered the calculation of the query, leave empty if user/immediate" + ) + credible_intervals: dict[str, list[float]] + expected_loss: float + funnels_query: Optional[FunnelsQuery] = None + insight: list[list[dict[str, Any]]] + is_cached: bool + kind: Literal["ExperimentFunnelsQuery"] = "ExperimentFunnelsQuery" + last_refresh: AwareDatetime + next_allowed_client_refresh: AwareDatetime + probability: dict[str, float] + query_status: Optional[QueryStatus] = Field( + default=None, description="Query status indicates whether next to the provided data, a query is still running." + ) + significance_code: ExperimentSignificanceCode + significant: bool + timezone: str + variants: list[ExperimentVariantFunnelsBaseStats] + + +class Response10(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + credible_intervals: dict[str, list[float]] + expected_loss: float + funnels_query: Optional[FunnelsQuery] = None + insight: list[list[dict[str, Any]]] + kind: Literal["ExperimentFunnelsQuery"] = "ExperimentFunnelsQuery" + probability: dict[str, float] + significance_code: ExperimentSignificanceCode + significant: bool + variants: list[ExperimentVariantFunnelsBaseStats] + + class DatabaseSchemaQueryResponse(BaseModel): model_config = ConfigDict( extra="forbid", @@ -6052,17 +6048,33 @@ class DatabaseSchemaQueryResponse(BaseModel): ] -class ExperimentFunnelsQuery(BaseModel): +class ExperimentFunnelsQueryResponse(BaseModel): model_config = ConfigDict( extra="forbid", ) - experiment_id: int + credible_intervals: dict[str, list[float]] + expected_loss: float + funnels_query: Optional[FunnelsQuery] = None + insight: list[list[dict[str, Any]]] kind: Literal["ExperimentFunnelsQuery"] = "ExperimentFunnelsQuery" + probability: dict[str, float] + significance_code: ExperimentSignificanceCode + significant: bool + variants: list[ExperimentVariantFunnelsBaseStats] + + +class ExperimentTrendsQuery(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + count_query: TrendsQuery + experiment_id: int + exposure_query: Optional[TrendsQuery] = None + kind: Literal["ExperimentTrendsQuery"] = "ExperimentTrendsQuery" modifiers: Optional[HogQLQueryModifiers] = Field( default=None, description="Modifiers used when performing the query" ) - response: Optional[ExperimentFunnelsQueryResponse] = None - source: FunnelsQuery + response: Optional[ExperimentTrendsQueryResponse] = None class FunnelPathsFilter(BaseModel): @@ -6166,6 +6178,19 @@ class DatabaseSchemaQuery(BaseModel): response: Optional[DatabaseSchemaQueryResponse] = None +class ExperimentFunnelsQuery(BaseModel): + model_config = ConfigDict( + extra="forbid", + ) + experiment_id: int + kind: Literal["ExperimentFunnelsQuery"] = "ExperimentFunnelsQuery" + modifiers: Optional[HogQLQueryModifiers] = Field( + default=None, description="Modifiers used when performing the query" + ) + response: Optional[ExperimentFunnelsQueryResponse] = None + source: FunnelsQuery + + class FunnelCorrelationQuery(BaseModel): model_config = ConfigDict( extra="forbid",