From 5f22a3424eddb6d3e056bc849e2413377d9b567f Mon Sep 17 00:00:00 2001 From: Eric Duong Date: Tue, 12 Mar 2024 12:56:18 -0400 Subject: [PATCH 01/17] chore(data-warehouse): update database schema retrieval (#20872) change get to post --- frontend/src/lib/api.ts | 5 +---- posthog/warehouse/api/external_data_source.py | 14 +++++++------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/frontend/src/lib/api.ts b/frontend/src/lib/api.ts index 477ea62ab3826..3b49c3be4f032 100644 --- a/frontend/src/lib/api.ts +++ b/frontend/src/lib/api.ts @@ -1928,13 +1928,10 @@ const api = { password: string, schema: string ): Promise { - const queryParams = toParams({ host, port, dbname, user, password, schema }) - return await new ApiRequest() .externalDataSources() .withAction('database_schema') - .withQueryString(queryParams) - .get() + .create({ data: { host, port, dbname, user, password, schema } }) }, }, diff --git a/posthog/warehouse/api/external_data_source.py b/posthog/warehouse/api/external_data_source.py index 373e17cb1de9e..1586f1051379e 100644 --- a/posthog/warehouse/api/external_data_source.py +++ b/posthog/warehouse/api/external_data_source.py @@ -316,15 +316,15 @@ def reload(self, request: Request, *args: Any, **kwargs: Any): instance.save() return Response(status=status.HTTP_200_OK) - @action(methods=["GET"], detail=False) + @action(methods=["POST"], detail=False) def database_schema(self, request: Request, *arg: Any, **kwargs: Any): - host = request.query_params.get("host") - port = request.query_params.get("port") - database = request.query_params.get("dbname") + host = request.data.get("host", None) + port = request.data.get("port", None) + database = request.data.get("dbname", None) - user = request.query_params.get("user") - password = request.query_params.get("password") - schema = request.query_params.get("schema") + user = request.data.get("user", None) + password = request.data.get("password", None) + schema = request.data.get("schema", None) if not host or not port or not database or not user or not password or not schema: return Response( From 989c065d9f049071eb07810453461034b4b93d63 Mon Sep 17 00:00:00 2001 From: Eric Duong Date: Tue, 12 Mar 2024 12:59:42 -0400 Subject: [PATCH 02/17] fix(data-warehouse): add schema id for validation step and use snake case (#20840) * add schema id for validation step and use snake case * fix tests * more typing --- .../data_imports/external_data_job.py | 14 +-- .../data_imports/pipelines/pipeline.py | 2 +- .../external_data/test_external_data_job.py | 89 +++++++++++++++---- posthog/utils.py | 4 + .../warehouse/data_load/validate_schema.py | 27 +++--- .../warehouse/models/external_data_schema.py | 7 +- posthog/warehouse/models/table.py | 6 ++ 7 files changed, 111 insertions(+), 38 deletions(-) diff --git a/posthog/temporal/data_imports/external_data_job.py b/posthog/temporal/data_imports/external_data_job.py index ae003af973787..c4e44a36cb867 100644 --- a/posthog/temporal/data_imports/external_data_job.py +++ b/posthog/temporal/data_imports/external_data_job.py @@ -37,7 +37,7 @@ class CreateExternalDataJobInputs: @activity.defn -async def create_external_data_job_model(inputs: CreateExternalDataJobInputs) -> Tuple[str, list[str]]: +async def create_external_data_job_model(inputs: CreateExternalDataJobInputs) -> Tuple[str, list[Tuple[str, str]]]: run = await sync_to_async(create_external_data_job)( team_id=inputs.team_id, external_data_source_id=inputs.external_data_source_id, @@ -105,7 +105,7 @@ async def update_external_data_job_model(inputs: UpdateExternalDataJobStatusInpu class ValidateSchemaInputs: run_id: str team_id: int - schemas: list[str] + schemas: list[Tuple[str, str]] @activity.defn @@ -133,7 +133,7 @@ class ExternalDataJobInputs: team_id: int source_id: uuid.UUID run_id: str - schemas: list[str] + schemas: list[Tuple[str, str]] @activity.defn @@ -153,6 +153,8 @@ async def run_external_data_job(inputs: ExternalDataJobInputs) -> None: dataset_name=model.folder_path, ) + endpoints = [schema[1] for schema in inputs.schemas] + source = None if model.pipeline.source_type == ExternalDataSource.Type.STRIPE: from posthog.temporal.data_imports.pipelines.stripe.helpers import stripe_source @@ -162,7 +164,7 @@ async def run_external_data_job(inputs: ExternalDataJobInputs) -> None: raise ValueError(f"Stripe secret key not found for job {model.id}") source = stripe_source( api_key=stripe_secret_key, - endpoints=tuple(inputs.schemas), + endpoints=tuple(endpoints), team_id=inputs.team_id, job_id=inputs.run_id, ) @@ -181,7 +183,7 @@ async def run_external_data_job(inputs: ExternalDataJobInputs) -> None: source = hubspot( api_key=hubspot_access_code, refresh_token=refresh_token, - endpoints=tuple(inputs.schemas), + endpoints=tuple(endpoints), ) elif model.pipeline.source_type == ExternalDataSource.Type.POSTGRES: from posthog.temporal.data_imports.pipelines.postgres import postgres_source @@ -201,7 +203,7 @@ async def run_external_data_job(inputs: ExternalDataJobInputs) -> None: database=database, sslmode="prefer" if settings.TEST or settings.DEBUG else "require", schema=schema, - table_names=inputs.schemas, + table_names=endpoints, ) else: diff --git a/posthog/temporal/data_imports/pipelines/pipeline.py b/posthog/temporal/data_imports/pipelines/pipeline.py index ad6d53aa3a9e6..5297f2e39ac29 100644 --- a/posthog/temporal/data_imports/pipelines/pipeline.py +++ b/posthog/temporal/data_imports/pipelines/pipeline.py @@ -16,7 +16,7 @@ class PipelineInputs: source_id: UUID run_id: str - schemas: list[str] + schemas: list[tuple[str, str]] dataset_name: str job_type: str team_id: int diff --git a/posthog/temporal/tests/external_data/test_external_data_job.py b/posthog/temporal/tests/external_data/test_external_data_job.py index c92b81772a190..29555192bb90e 100644 --- a/posthog/temporal/tests/external_data/test_external_data_job.py +++ b/posthog/temporal/tests/external_data/test_external_data_job.py @@ -1,6 +1,6 @@ import uuid from unittest import mock - +from typing import Optional import pytest from asgiref.sync import sync_to_async from django.test import override_settings @@ -32,6 +32,7 @@ from posthog.temporal.data_imports.pipelines.schemas import ( PIPELINE_TYPE_SCHEMA_DEFAULT_MAPPING, ) +from posthog.models import Team from posthog.temporal.data_imports.pipelines.pipeline import DataImportPipeline from temporalio.testing import WorkflowEnvironment from temporalio.common import RetryPolicy @@ -118,6 +119,15 @@ async def postgres_connection(postgres_config, setup_postgres_test_db): await connection.close() +async def _create_schema(schema_name: str, source: ExternalDataSource, team: Team, table_id: Optional[str] = None): + return await sync_to_async(ExternalDataSchema.objects.create)( + name=schema_name, + team_id=team.id, + source_id=source.pk, + table_id=table_id, + ) + + @pytest.mark.django_db(transaction=True) @pytest.mark.asyncio async def test_create_external_job_activity(activity_environment, team, **kwargs): @@ -232,7 +242,9 @@ async def setup_job_1(): new_job = await sync_to_async(ExternalDataJob.objects.filter(id=new_job.id).prefetch_related("pipeline").get)() - schemas = ["Customer"] + customer_schema = await _create_schema("Customer", new_source, team) + schemas = [(customer_schema.id, "Customer")] + inputs = ExternalDataJobInputs( team_id=team.id, run_id=new_job.pk, @@ -262,7 +274,9 @@ async def setup_job_2(): new_job = await sync_to_async(ExternalDataJob.objects.filter(id=new_job.id).prefetch_related("pipeline").get)() - schemas = ["Customer", "Invoice"] + customer_schema = await _create_schema("Customer", new_source, team) + invoice_schema = await _create_schema("Invoice", new_source, team) + schemas = [(customer_schema.id, "Customer"), (invoice_schema.id, "Invoice")] inputs = ExternalDataJobInputs( team_id=team.id, run_id=new_job.pk, @@ -350,7 +364,8 @@ async def setup_job_1(): new_job = await sync_to_async(ExternalDataJob.objects.filter(id=new_job.id).prefetch_related("pipeline").get)() - schemas = ["Customer"] + customer_schema = await _create_schema("Customer", new_source, team) + schemas = [(customer_schema.id, "Customer")] inputs = ExternalDataJobInputs( team_id=team.id, run_id=new_job.pk, @@ -414,7 +429,8 @@ async def setup_job_1(): new_job = await sync_to_async(ExternalDataJob.objects.filter(id=new_job.id).prefetch_related("pipeline").get)() - schemas = ["Customer"] + customer_schema = await _create_schema("Customer", new_source, team) + schemas = [(customer_schema.id, "Customer")] inputs = ExternalDataJobInputs( team_id=team.id, run_id=new_job.pk, @@ -476,15 +492,26 @@ async def test_validate_schema_and_update_table_activity(activity_environment, t rows_synced=0, ) + test_1_schema = await _create_schema("test-1", new_source, team) + test_2_schema = await _create_schema("test-2", new_source, team) + test_3_schema = await _create_schema("test-3", new_source, team) + test_4_schema = await _create_schema("test-4", new_source, team) + test_5_schema = await _create_schema("test-5", new_source, team) + schemas = [ + (test_1_schema.id, "test-1"), + (test_2_schema.id, "test-2"), + (test_3_schema.id, "test-3"), + (test_4_schema.id, "test-4"), + (test_5_schema.id, "test-5"), + ] + with mock.patch( "posthog.warehouse.models.table.DataWarehouseTable.get_columns" ) as mock_get_columns, override_settings(**AWS_BUCKET_MOCK_SETTINGS): mock_get_columns.return_value = {"id": "string"} await activity_environment.run( validate_schema_activity, - ValidateSchemaInputs( - run_id=new_job.pk, team_id=team.id, schemas=["test-1", "test-2", "test-3", "test-4", "test-5"] - ), + ValidateSchemaInputs(run_id=new_job.pk, team_id=team.id, schemas=schemas), ) assert mock_get_columns.call_count == 10 @@ -504,6 +531,7 @@ async def test_validate_schema_and_update_table_activity_with_existing(activity_ status="running", source_type="Stripe", job_inputs={"stripe_secret_key": "test-key"}, + prefix="stripe_", ) old_job: ExternalDataJob = await sync_to_async(ExternalDataJob.objects.create)( @@ -521,7 +549,7 @@ async def test_validate_schema_and_update_table_activity_with_existing(activity_ url_pattern = await sync_to_async(old_job.url_pattern_by_schema)("test-1") - await sync_to_async(DataWarehouseTable.objects.create)( + existing_table = await sync_to_async(DataWarehouseTable.objects.create)( credential=old_credential, name="stripe_test-1", format="Parquet", @@ -537,15 +565,26 @@ async def test_validate_schema_and_update_table_activity_with_existing(activity_ rows_synced=0, ) + test_1_schema = await _create_schema("test-1", new_source, team, table_id=existing_table.id) + test_2_schema = await _create_schema("test-2", new_source, team) + test_3_schema = await _create_schema("test-3", new_source, team) + test_4_schema = await _create_schema("test-4", new_source, team) + test_5_schema = await _create_schema("test-5", new_source, team) + schemas = [ + (test_1_schema.id, "test-1"), + (test_2_schema.id, "test-2"), + (test_3_schema.id, "test-3"), + (test_4_schema.id, "test-4"), + (test_5_schema.id, "test-5"), + ] + with mock.patch( "posthog.warehouse.models.table.DataWarehouseTable.get_columns" ) as mock_get_columns, override_settings(**AWS_BUCKET_MOCK_SETTINGS): mock_get_columns.return_value = {"id": "string"} await activity_environment.run( validate_schema_activity, - ValidateSchemaInputs( - run_id=new_job.pk, team_id=team.id, schemas=["test-1", "test-2", "test-3", "test-4", "test-5"] - ), + ValidateSchemaInputs(run_id=new_job.pk, team_id=team.id, schemas=schemas), ) assert mock_get_columns.call_count == 10 @@ -595,9 +634,13 @@ async def test_validate_schema_and_update_table_activity_half_run(activity_envir }, ] + broken_schema = await _create_schema("broken_schema", new_source, team) + test_schema = await _create_schema("test_schema", new_source, team) + schemas = [(broken_schema.id, "broken_schema"), (test_schema.id, "test_schema")] + await activity_environment.run( validate_schema_activity, - ValidateSchemaInputs(run_id=new_job.pk, team_id=team.id, schemas=["broken_schema", "test_schema"]), + ValidateSchemaInputs(run_id=new_job.pk, team_id=team.id, schemas=schemas), ) assert mock_get_columns.call_count == 1 @@ -626,15 +669,26 @@ async def test_create_schema_activity(activity_environment, team, **kwargs): rows_synced=0, ) + test_1_schema = await _create_schema("test-1", new_source, team) + test_2_schema = await _create_schema("test-2", new_source, team) + test_3_schema = await _create_schema("test-3", new_source, team) + test_4_schema = await _create_schema("test-4", new_source, team) + test_5_schema = await _create_schema("test-5", new_source, team) + schemas = [ + (test_1_schema.id, "test-1"), + (test_2_schema.id, "test-2"), + (test_3_schema.id, "test-3"), + (test_4_schema.id, "test-4"), + (test_5_schema.id, "test-5"), + ] + with mock.patch( "posthog.warehouse.models.table.DataWarehouseTable.get_columns" ) as mock_get_columns, override_settings(**AWS_BUCKET_MOCK_SETTINGS): mock_get_columns.return_value = {"id": "string"} await activity_environment.run( validate_schema_activity, - ValidateSchemaInputs( - run_id=new_job.pk, team_id=team.id, schemas=["test-1", "test-2", "test-3", "test-4", "test-5"] - ), + ValidateSchemaInputs(run_id=new_job.pk, team_id=team.id, schemas=schemas), ) assert mock_get_columns.call_count == 10 @@ -802,7 +856,8 @@ async def setup_job_1(): new_job = await sync_to_async(ExternalDataJob.objects.filter(id=new_job.id).prefetch_related("pipeline").get)() - schemas = ["posthog_test"] + posthog_test_schema = await _create_schema("posthog_test", new_source, team) + schemas = [(posthog_test_schema.id, "posthog_test")] inputs = ExternalDataJobInputs( team_id=team.id, run_id=new_job.pk, diff --git a/posthog/utils.py b/posthog/utils.py index 769d289c93854..111ed0237cbcd 100644 --- a/posthog/utils.py +++ b/posthog/utils.py @@ -1329,3 +1329,7 @@ def label_for_team_id_to_track(team_id: int) -> str: pass return "unknown" + + +def camel_to_snake_case(name: str) -> str: + return re.sub(r"(? None: +async def validate_schema_and_update_table(run_id: str, team_id: int, schemas: list[Tuple[str, str]]) -> None: """ Validates the schemas of data that has been synced by external data job. @@ -65,9 +66,12 @@ async def validate_schema_and_update_table(run_id: str, team_id: int, schemas: l access_secret=settings.AIRBYTE_BUCKET_SECRET, ) - for _schema_name in schemas: + for _schema in schemas: + _schema_id = _schema[0] + _schema_name = _schema[1] + table_name = f"{job.pipeline.prefix or ''}{job.pipeline.source_type}_{_schema_name}".lower() - new_url_pattern = job.url_pattern_by_schema(_schema_name) + new_url_pattern = job.url_pattern_by_schema(camel_to_snake_case(_schema_name)) # Check try: @@ -92,11 +96,10 @@ async def validate_schema_and_update_table(run_id: str, team_id: int, schemas: l # create or update table_created = None if last_successful_job: - old_url_pattern = last_successful_job.url_pattern_by_schema(_schema_name) try: - table_created = await get_table_by_url_pattern_and_source( - team_id=job.team_id, source_id=job.pipeline.id, url_pattern=old_url_pattern - ) + table_created = await get_table_by_schema_id(_schema_id, team_id) + if not table_created: + raise DataWarehouseTable.DoesNotExist except Exception: table_created = None else: @@ -111,9 +114,7 @@ async def validate_schema_and_update_table(run_id: str, team_id: int, schemas: l await asave_datawarehousetable(table_created) # schema could have been deleted by this point - schema_model = await aget_schema_if_exists( - schema_name=_schema_name, team_id=job.team_id, source_id=job.pipeline.id - ) + schema_model = await aget_schema_by_id(schema_id=_schema_id, team_id=job.team_id) if schema_model: schema_model.table = table_created diff --git a/posthog/warehouse/models/external_data_schema.py b/posthog/warehouse/models/external_data_schema.py index 3d4423b24778e..ad668abc8589a 100644 --- a/posthog/warehouse/models/external_data_schema.py +++ b/posthog/warehouse/models/external_data_schema.py @@ -41,9 +41,14 @@ def aget_schema_if_exists(schema_name: str, team_id: int, source_id: uuid.UUID) return get_schema_if_exists(schema_name=schema_name, team_id=team_id, source_id=source_id) +@database_sync_to_async +def aget_schema_by_id(schema_id: str, team_id: int) -> ExternalDataSchema | None: + return ExternalDataSchema.objects.get(id=schema_id, team_id=team_id) + + def get_active_schemas_for_source_id(source_id: uuid.UUID, team_id: int): schemas = ExternalDataSchema.objects.filter(team_id=team_id, source_id=source_id, should_sync=True).values().all() - return [val["name"] for val in schemas] + return [(val["id"], val["name"]) for val in schemas] def get_all_schemas_for_source_id(source_id: uuid.UUID, team_id: int): diff --git a/posthog/warehouse/models/table.py b/posthog/warehouse/models/table.py index f8cd3cf73e127..c2c87e67f3e41 100644 --- a/posthog/warehouse/models/table.py +++ b/posthog/warehouse/models/table.py @@ -20,6 +20,7 @@ sane_repr, ) from posthog.warehouse.models.util import remove_named_tuples +from posthog.warehouse.models.external_data_schema import ExternalDataSchema from django.db.models import Q from .credential import DataWarehouseCredential from uuid import UUID @@ -154,6 +155,11 @@ def get_table_by_url_pattern_and_source(url_pattern: str, source_id: UUID, team_ ) +@database_sync_to_async +def get_table_by_schema_id(schema_id: str, team_id: int): + return ExternalDataSchema.objects.get(id=schema_id, team_id=team_id).table + + @database_sync_to_async def acreate_datawarehousetable(**kwargs): return DataWarehouseTable.objects.create(**kwargs) From 248beecfdbeedd5ebe3e4ea7700b21d52a4a1d72 Mon Sep 17 00:00:00 2001 From: Robbie Date: Tue, 12 Mar 2024 17:28:42 +0000 Subject: [PATCH 03/17] feat: add hogql sessions and rewrite a web analytics query using it (#20832) * Add test (currently fails due to missing setup code) * Wire up sessions table to hogql * Hide aggregate states when selecting * from raw_sessions * Working version of the overview query using sessions table * Add additional test * Remove start date from sessions_mv * Update query snapshots * Update query snapshots * Fix typing problems * Fix bad merge where redundant test was added * Ensure that we can select from sessions * Fix typing * Update UI snapshots for `chromium` (2) * Update UI snapshots for `chromium` (2) * Update UI snapshots for `chromium` (2) * Update query snapshots * Update UI snapshots for `chromium` (2) * Update query snapshots --------- Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- frontend/src/queries/schema.json | 12 ++ frontend/src/queries/schema.ts | 1 + .../test/__snapshots__/test_schema.ambr | 2 +- posthog/hogql/database/database.py | 4 + posthog/hogql/database/schema/sessions.py | 146 ++++++++++++++++++ .../database/schema/test/test_sessions.py | 29 ++++ .../test/__snapshots__/test_database.ambr | 128 +++++++++++++++ posthog/hogql/functions/mapping.py | 2 + .../web_analytics/test/test_web_overview.py | 54 +++++-- .../web_analytics_query_runner.py | 16 ++ .../web_analytics/web_overview.py | 110 +++++++++++++ posthog/models/sessions/sql.py | 3 +- posthog/schema.py | 4 + 13 files changed, 500 insertions(+), 11 deletions(-) create mode 100644 posthog/hogql/database/schema/sessions.py create mode 100644 posthog/hogql/database/schema/test/test_sessions.py diff --git a/frontend/src/queries/schema.json b/frontend/src/queries/schema.json index 250b62893c602..b14394a66b79c 100644 --- a/frontend/src/queries/schema.json +++ b/frontend/src/queries/schema.json @@ -5443,6 +5443,9 @@ } }, "type": "object" + }, + "useSessionsTable": { + "type": "boolean" } }, "required": ["properties"], @@ -5504,6 +5507,9 @@ } }, "type": "object" + }, + "useSessionsTable": { + "type": "boolean" } }, "required": ["kind", "properties"], @@ -5605,6 +5611,9 @@ } }, "type": "object" + }, + "useSessionsTable": { + "type": "boolean" } }, "required": ["breakdownBy", "kind", "properties"], @@ -5686,6 +5695,9 @@ } }, "type": "object" + }, + "useSessionsTable": { + "type": "boolean" } }, "required": ["kind", "properties"], diff --git a/frontend/src/queries/schema.ts b/frontend/src/queries/schema.ts index 831bb80589d78..9ea72e098c8bb 100644 --- a/frontend/src/queries/schema.ts +++ b/frontend/src/queries/schema.ts @@ -969,6 +969,7 @@ export interface WebAnalyticsQueryBase { enabled?: boolean forceSamplingRate?: SamplingRate } + useSessionsTable?: boolean } export interface WebOverviewQuery extends WebAnalyticsQueryBase { diff --git a/posthog/clickhouse/test/__snapshots__/test_schema.ambr b/posthog/clickhouse/test/__snapshots__/test_schema.ambr index b40f78c801e09..74540ceca8b78 100644 --- a/posthog/clickhouse/test/__snapshots__/test_schema.ambr +++ b/posthog/clickhouse/test/__snapshots__/test_schema.ambr @@ -1713,7 +1713,7 @@ sumIf(1, event='$autocapture') as autocapture_count FROM posthog_test.sharded_events - WHERE `$session_id` IS NOT NULL AND `$session_id` != '' AND toStartOfDay(timestamp) >= '2024-03-08' + WHERE `$session_id` IS NOT NULL AND `$session_id` != '' GROUP BY `$session_id`, team_id ''' diff --git a/posthog/hogql/database/database.py b/posthog/hogql/database/database.py index 72fef04af9dd8..e78df97c56823 100644 --- a/posthog/hogql/database/database.py +++ b/posthog/hogql/database/database.py @@ -44,6 +44,7 @@ RawSessionReplayEventsTable, SessionReplayEventsTable, ) +from posthog.hogql.database.schema.sessions import RawSessionsTable, SessionsTable from posthog.hogql.database.schema.static_cohort_people import StaticCohortPeople from posthog.hogql.errors import HogQLException from posthog.hogql.parser import parse_expr @@ -72,6 +73,7 @@ class Database(BaseModel): log_entries: LogEntriesTable = LogEntriesTable() console_logs_log_entries: ReplayConsoleLogsLogEntriesTable = ReplayConsoleLogsLogEntriesTable() batch_export_log_entries: BatchExportLogEntriesTable = BatchExportLogEntriesTable() + sessions: SessionsTable = SessionsTable() raw_session_replay_events: RawSessionReplayEventsTable = RawSessionReplayEventsTable() raw_person_distinct_ids: RawPersonDistinctIdsTable = RawPersonDistinctIdsTable() @@ -79,6 +81,7 @@ class Database(BaseModel): raw_groups: RawGroupsTable = RawGroupsTable() raw_cohort_people: RawCohortPeople = RawCohortPeople() raw_person_overrides: RawPersonOverridesTable = RawPersonOverridesTable() + raw_sessions: RawSessionsTable = RawSessionsTable() # system tables numbers: NumbersTable = NumbersTable() @@ -94,6 +97,7 @@ class Database(BaseModel): "cohortpeople", "person_static_cohort", "log_entries", + "sessions", ] _warehouse_table_names: List[str] = [] diff --git a/posthog/hogql/database/schema/sessions.py b/posthog/hogql/database/schema/sessions.py new file mode 100644 index 0000000000000..37b44c0e402c5 --- /dev/null +++ b/posthog/hogql/database/schema/sessions.py @@ -0,0 +1,146 @@ +from typing import Dict, List, cast + +from posthog.hogql.database.models import ( + StringDatabaseField, + DateTimeDatabaseField, + IntegerDatabaseField, + Table, + FieldOrTable, + StringArrayDatabaseField, + DatabaseField, + LazyTable, +) +from posthog.schema import HogQLQueryModifiers + + +SESSIONS_COMMON_FIELDS: Dict[str, FieldOrTable] = { + "session_id": StringDatabaseField(name="session_id"), + "team_id": IntegerDatabaseField(name="team_id"), + "distinct_id": StringDatabaseField(name="distinct_id"), + "min_timestamp": DateTimeDatabaseField(name="min_timestamp"), + "max_timestamp": DateTimeDatabaseField(name="max_timestamp"), + "urls": StringArrayDatabaseField(name="urls"), + "entry_url": DatabaseField(name="entry_url"), + "exit_url": DatabaseField(name="exit_url"), + "initial_utm_source": DatabaseField(name="initial_utm_source"), + "initial_utm_campaign": DatabaseField(name="initial_utm_campaign"), + "initial_utm_medium": DatabaseField(name="initial_utm_medium"), + "initial_utm_term": DatabaseField(name="initial_utm_term"), + "initial_utm_content": DatabaseField(name="initial_utm_content"), + "initial_referring_domain": DatabaseField(name="initial_referring_domain"), + "initial_gclid": DatabaseField(name="initial_gclid"), + "initial_gad_source": DatabaseField(name="initial_gad_source"), + "event_count_map": DatabaseField(name="event_count_map"), + "pageview_count": IntegerDatabaseField(name="pageview_count"), + "autocapture_count": IntegerDatabaseField(name="autocapture_count"), +} + + +class RawSessionsTable(Table): + fields: Dict[str, FieldOrTable] = SESSIONS_COMMON_FIELDS + + def to_printed_clickhouse(self, context): + return "sessions" + + def to_printed_hogql(self): + return "raw_sessions" + + def avoid_asterisk_fields(self) -> List[str]: + # our clickhouse driver can't return aggregate states + return [ + "entry_url", + "exit_url", + "initial_utm_source", + "initial_utm_campaign", + "initial_utm_medium", + "initial_utm_term", + "initial_utm_content", + "initial_referring_domain", + "initial_gclid", + "initial_gad_source", + ] + + +def select_from_sessions_table(requested_fields: Dict[str, List[str | int]]): + from posthog.hogql import ast + + table_name = "raw_sessions" + + aggregate_fields = { + "distinct_id": ast.Call(name="any", args=[ast.Field(chain=[table_name, "distinct_id"])]), + "min_timestamp": ast.Call(name="min", args=[ast.Field(chain=[table_name, "min_timestamp"])]), + "max_timestamp": ast.Call(name="max", args=[ast.Field(chain=[table_name, "max_timestamp"])]), + "urls": ast.Call( + name="arrayDistinct", + args=[ + ast.Call( + name="arrayFlatten", + args=[ast.Call(name="groupArray", args=[ast.Field(chain=[table_name, "urls"])])], + ) + ], + ), + "entry_url": ast.Call(name="argMinMerge", args=[ast.Field(chain=[table_name, "entry_url"])]), + "exit_url": ast.Call(name="argMaxMerge", args=[ast.Field(chain=[table_name, "exit_url"])]), + "initial_utm_source": ast.Call(name="argMinMerge", args=[ast.Field(chain=[table_name, "initial_utm_source"])]), + "initial_utm_campaign": ast.Call( + name="argMinMerge", args=[ast.Field(chain=[table_name, "initial_utm_campaign"])] + ), + "initial_utm_medium": ast.Call(name="argMinMerge", args=[ast.Field(chain=[table_name, "initial_utm_medium"])]), + "initial_utm_term": ast.Call(name="argMinMerge", args=[ast.Field(chain=[table_name, "initial_utm_term"])]), + "initial_utm_content": ast.Call( + name="argMinMerge", args=[ast.Field(chain=[table_name, "initial_utm_content"])] + ), + "initial_referring_domain": ast.Call( + name="argMinMerge", args=[ast.Field(chain=[table_name, "initial_referring_domain"])] + ), + "initial_gclid": ast.Call(name="argMinMerge", args=[ast.Field(chain=[table_name, "initial_gclid"])]), + "initial_gad_source": ast.Call(name="argMinMerge", args=[ast.Field(chain=[table_name, "initial_gad_source"])]), + "event_count_map": ast.Call( + name="sumMap", + args=[ast.Field(chain=[table_name, "event_count_map"])], + ), + "pageview_count": ast.Call(name="sum", args=[ast.Field(chain=[table_name, "pageview_count"])]), + "autocapture_count": ast.Call(name="sum", args=[ast.Field(chain=[table_name, "autocapture_count"])]), + "duration": ast.Call( + name="dateDiff", + args=[ + ast.Constant(value="second"), + ast.Call(name="min", args=[ast.Field(chain=[table_name, "min_timestamp"])]), + ast.Call(name="max", args=[ast.Field(chain=[table_name, "max_timestamp"])]), + ], + ), + } + + select_fields: List[ast.Expr] = [] + group_by_fields: List[ast.Expr] = [ast.Field(chain=[table_name, "session_id"])] + + for name, chain in requested_fields.items(): + if name in aggregate_fields: + select_fields.append(ast.Alias(alias=name, expr=aggregate_fields[name])) + else: + select_fields.append( + ast.Alias(alias=name, expr=ast.Field(chain=cast(list[str | int], [table_name]) + chain)) + ) + group_by_fields.append(ast.Field(chain=cast(list[str | int], [table_name]) + chain)) + + return ast.SelectQuery( + select=select_fields, + select_from=ast.JoinExpr(table=ast.Field(chain=[table_name])), + group_by=group_by_fields, + ) + + +class SessionsTable(LazyTable): + fields: Dict[str, FieldOrTable] = { + **SESSIONS_COMMON_FIELDS, + "duration": IntegerDatabaseField(name="duration"), + } + + def lazy_select(self, requested_fields: Dict[str, List[str | int]], modifiers: HogQLQueryModifiers): + return select_from_sessions_table(requested_fields) + + def to_printed_clickhouse(self, context): + return "sessions" + + def to_printed_hogql(self): + return "sessions" diff --git a/posthog/hogql/database/schema/test/test_sessions.py b/posthog/hogql/database/schema/test/test_sessions.py new file mode 100644 index 0000000000000..24b6b43347f87 --- /dev/null +++ b/posthog/hogql/database/schema/test/test_sessions.py @@ -0,0 +1,29 @@ +from posthog.hogql.parser import parse_select +from posthog.hogql.query import execute_hogql_query +from posthog.test.base import ( + APIBaseTest, + ClickhouseTestMixin, + _create_event, +) + + +class TestReferringDomainType(ClickhouseTestMixin, APIBaseTest): + def test_select_star(self): + _create_event( + event="$pageview", + team=self.team, + distinct_id="d1", + properties={"$current_url": "https://example.com", "$session_id": "s1"}, + ) + + response = execute_hogql_query( + parse_select( + "select * from sessions", + ), + self.team, + ) + + self.assertEqual( + len(response.results or []), + 1, + ) diff --git a/posthog/hogql/database/test/__snapshots__/test_database.ambr b/posthog/hogql/database/test/__snapshots__/test_database.ambr index 7823b80094700..eb24ef4e3e0e1 100644 --- a/posthog/hogql/database/test/__snapshots__/test_database.ambr +++ b/posthog/hogql/database/test/__snapshots__/test_database.ambr @@ -535,6 +535,40 @@ "type": "string" } ], + "sessions": [ + { + "key": "session_id", + "type": "string" + }, + { + "key": "distinct_id", + "type": "string" + }, + { + "key": "min_timestamp", + "type": "datetime" + }, + { + "key": "max_timestamp", + "type": "datetime" + }, + { + "key": "urls", + "type": "array" + }, + { + "key": "pageview_count", + "type": "integer" + }, + { + "key": "autocapture_count", + "type": "integer" + }, + { + "key": "duration", + "type": "integer" + } + ], "raw_session_replay_events": [ { "key": "session_id", @@ -770,6 +804,36 @@ "type": "integer" } ], + "raw_sessions": [ + { + "key": "session_id", + "type": "string" + }, + { + "key": "distinct_id", + "type": "string" + }, + { + "key": "min_timestamp", + "type": "datetime" + }, + { + "key": "max_timestamp", + "type": "datetime" + }, + { + "key": "urls", + "type": "array" + }, + { + "key": "pageview_count", + "type": "integer" + }, + { + "key": "autocapture_count", + "type": "integer" + } + ], "numbers": [ { "key": "number", @@ -1310,6 +1374,40 @@ "type": "string" } ], + "sessions": [ + { + "key": "session_id", + "type": "string" + }, + { + "key": "distinct_id", + "type": "string" + }, + { + "key": "min_timestamp", + "type": "datetime" + }, + { + "key": "max_timestamp", + "type": "datetime" + }, + { + "key": "urls", + "type": "array" + }, + { + "key": "pageview_count", + "type": "integer" + }, + { + "key": "autocapture_count", + "type": "integer" + }, + { + "key": "duration", + "type": "integer" + } + ], "raw_session_replay_events": [ { "key": "session_id", @@ -1545,6 +1643,36 @@ "type": "integer" } ], + "raw_sessions": [ + { + "key": "session_id", + "type": "string" + }, + { + "key": "distinct_id", + "type": "string" + }, + { + "key": "min_timestamp", + "type": "datetime" + }, + { + "key": "max_timestamp", + "type": "datetime" + }, + { + "key": "urls", + "type": "array" + }, + { + "key": "pageview_count", + "type": "integer" + }, + { + "key": "autocapture_count", + "type": "integer" + } + ], "numbers": [ { "key": "number", diff --git a/posthog/hogql/functions/mapping.py b/posthog/hogql/functions/mapping.py index a70bd37605253..5edf1a68a826a 100644 --- a/posthog/hogql/functions/mapping.py +++ b/posthog/hogql/functions/mapping.py @@ -612,6 +612,7 @@ class HogQLFunctionMeta: "argMax": HogQLFunctionMeta("argMax", 2, 2, aggregate=True), "argMaxIf": HogQLFunctionMeta("argMaxIf", 3, 3, aggregate=True), "argMinMerge": HogQLFunctionMeta("argMinMerge", 1, 1, aggregate=True), + "argMaxMerge": HogQLFunctionMeta("argMaxMerge", 1, 1, aggregate=True), "avgWeighted": HogQLFunctionMeta("avgWeighted", 2, 2, aggregate=True), "avgWeightedIf": HogQLFunctionMeta("avgWeightedIf", 3, 3, aggregate=True), # "topK": HogQLFunctionMeta("topK", 1, 1, aggregate=True), @@ -652,6 +653,7 @@ class HogQLFunctionMeta: "deltaSumTimestampIf": HogQLFunctionMeta("deltaSumTimestampIf", 3, 3, aggregate=True), "sumMap": HogQLFunctionMeta("sumMap", 1, 2, aggregate=True), "sumMapIf": HogQLFunctionMeta("sumMapIf", 2, 3, aggregate=True), + "sumMapMerge": HogQLFunctionMeta("sumMapMerge", 1, 1, aggregate=True), "minMap": HogQLFunctionMeta("minMap", 1, 2, aggregate=True), "minMapIf": HogQLFunctionMeta("minMapIf", 2, 3, aggregate=True), "maxMap": HogQLFunctionMeta("maxMap", 1, 2, aggregate=True), 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 e4fc03121ab1b..63a26ffea9233 100644 --- a/posthog/hogql_queries/web_analytics/test/test_web_overview.py +++ b/posthog/hogql_queries/web_analytics/test/test_web_overview.py @@ -1,4 +1,5 @@ from freezegun import freeze_time +from parameterized import parameterized from posthog.hogql_queries.web_analytics.web_overview import WebOverviewQueryRunner from posthog.schema import WebOverviewQuery, DateRange @@ -35,20 +36,25 @@ def _create_events(self, data, event="$pageview"): ) return person_result - def _run_web_overview_query(self, date_from, date_to, compare=True): + def _run_web_overview_query(self, date_from, date_to, use_sessions_table=False, compare=True): query = WebOverviewQuery( dateRange=DateRange(date_from=date_from, date_to=date_to), properties=[], compare=compare, + useSessionsTable=use_sessions_table, ) runner = WebOverviewQueryRunner(team=self.team, query=query) return runner.calculate() - def test_no_crash_when_no_data(self): - results = self._run_web_overview_query("2023-12-08", "2023-12-15").results + @parameterized.expand([(True,), (False,)]) + def test_no_crash_when_no_data(self, use_sessions_table): + results = self._run_web_overview_query( + "2023-12-08", "2023-12-15", use_sessions_table=use_sessions_table + ).results self.assertEqual(5, len(results)) - def test_increase_in_users(self): + @parameterized.expand([(True,), (False,)]) + def test_increase_in_users(self, use_sessions_table): self._create_events( [ ("p1", [("2023-12-02", "s1a"), ("2023-12-03", "s1a"), ("2023-12-12", "s1b")]), @@ -56,7 +62,9 @@ def test_increase_in_users(self): ] ) - results = self._run_web_overview_query("2023-12-08", "2023-12-15").results + results = self._run_web_overview_query( + "2023-12-08", "2023-12-15", use_sessions_table=use_sessions_table + ).results visitors = results[0] self.assertEqual("visitors", visitors.key) @@ -88,7 +96,8 @@ def test_increase_in_users(self): self.assertEqual(0, bounce.previous) self.assertEqual(None, bounce.changeFromPreviousPct) - def test_all_time(self): + @parameterized.expand([(True,), (False,)]) + def test_all_time(self, use_sessions_table): self._create_events( [ ("p1", [("2023-12-02", "s1a"), ("2023-12-03", "s1a"), ("2023-12-12", "s1b")]), @@ -96,7 +105,9 @@ def test_all_time(self): ] ) - results = self._run_web_overview_query("all", "2023-12-15", compare=False).results + results = self._run_web_overview_query( + "all", "2023-12-15", compare=False, use_sessions_table=use_sessions_table + ).results visitors = results[0] self.assertEqual("visitors", visitors.key) @@ -128,11 +139,14 @@ def test_all_time(self): self.assertEqual(None, bounce.previous) self.assertEqual(None, bounce.changeFromPreviousPct) - def test_filter_test_accounts(self): + @parameterized.expand([(True,), (False,)]) + def test_filter_test_accounts(self, use_sessions_table): # 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").results + results = self._run_web_overview_query( + "2023-12-01", "2023-12-03", use_sessions_table=use_sessions_table + ).results visitors = results[0] self.assertEqual(0, visitors.value) @@ -149,3 +163,25 @@ def test_filter_test_accounts(self): bounce = results[4] self.assertEqual("bounce rate", bounce.key) self.assertEqual(None, bounce.value) + + @parameterized.expand([(True,), (False,)]) + def test_correctly_counts_pageviews_in_long_running_session(self, use_sessions_table): + # this test is important when using the sessions table as the raw sessions table will have 3 entries, one per day + self._create_events( + [ + ("p1", [("2023-12-01", "s1"), ("2023-12-02", "s1"), ("2023-12-03", "s1")]), + ] + ) + + results = self._run_web_overview_query( + "2023-12-01", "2023-12-03", use_sessions_table=use_sessions_table + ).results + + visitors = results[0] + self.assertEqual(1, visitors.value) + + views = results[1] + self.assertEqual(3, views.value) + + sessions = results[2] + self.assertEqual(1, sessions.value) diff --git a/posthog/hogql_queries/web_analytics/web_analytics_query_runner.py b/posthog/hogql_queries/web_analytics/web_analytics_query_runner.py index e20a2810274a9..da4f98edcbf32 100644 --- a/posthog/hogql_queries/web_analytics/web_analytics_query_runner.py +++ b/posthog/hogql_queries/web_analytics/web_analytics_query_runner.py @@ -101,6 +101,22 @@ def session_having(self, include_previous_period: Optional[bool] = None): self.team, ) + def sessions_table_properties(self, include_previous_period: Optional[bool] = None): + properties = [ + parse_expr( + "sessions.min_timestamp >= {date_from}", + placeholders={ + "date_from": self.query_date_range.previous_period_date_from_as_hogql() + if include_previous_period + else self.query_date_range.date_from_as_hogql(), + }, + ) + ] + return property_to_expr( + properties, + self.team, + ) + def events_where(self): properties = [self.events_where_data_range(), self.query.properties, self._test_account_filters] diff --git a/posthog/hogql_queries/web_analytics/web_overview.py b/posthog/hogql_queries/web_analytics/web_overview.py index 2019803faf78a..38388315c8f0b 100644 --- a/posthog/hogql_queries/web_analytics/web_overview.py +++ b/posthog/hogql_queries/web_analytics/web_overview.py @@ -19,6 +19,9 @@ class WebOverviewQueryRunner(WebAnalyticsQueryRunner): query_type = WebOverviewQuery def to_query(self) -> ast.SelectQuery | ast.SelectUnionQuery: + if self.query.useSessionsTable: + return self.to_query_with_session_table() + with self.timings.measure("date_expr"): start = self.query_date_range.previous_period_date_from_as_hogql() mid = self.query_date_range.date_from_as_hogql() @@ -168,6 +171,113 @@ def to_query(self) -> ast.SelectQuery | ast.SelectUnionQuery: }, ) + def to_query_with_session_table(self) -> ast.SelectQuery | ast.SelectUnionQuery: + with self.timings.measure("date_expr"): + start = self.query_date_range.previous_period_date_from_as_hogql() + mid = self.query_date_range.date_from_as_hogql() + end = self.query_date_range.date_to_as_hogql() + + if self.query.compare: + return parse_select( + """ +SELECT + uniq(if(min_timestamp >= {mid} AND min_timestamp < {end}, person_id, NULL)) AS unique_users, + uniq(if(min_timestamp >= {start} AND min_timestamp < {mid}, person_id, NULL)) AS previous_unique_users, + sumIf(filtered_pageview_count, min_timestamp >= {mid} AND min_timestamp < {end}) AS current_pageviews, + sumIf(filtered_pageview_count, min_timestamp >= {start} AND min_timestamp < {mid}) AS previous_pageviews, + uniq(if(min_timestamp >= {mid} AND min_timestamp < {end}, session_id, NULL)) AS unique_sessions, + uniq(if(min_timestamp >= {start} AND min_timestamp < {mid}, session_id, NULL)) AS previous_unique_sessions, + avg(if(min_timestamp >= {mid}, duration, NULL)) AS avg_duration_s, + avg(if(min_timestamp < {mid}, duration, NULL)) AS prev_avg_duration_s, + avg(if(min_timestamp >= {mid}, is_bounce, NULL)) AS bounce_rate, + avg(if(min_timestamp < {mid}, is_bounce, NULL)) AS prev_bounce_rate +FROM ( + SELECT + any(events.person_id) as person_id, + events.`$session_id` as session_id, + min(sessions.min_timestamp) as min_timestamp, + any(sessions.duration) as duration, + any(sessions.pageview_count) as session_pageview_count, + any(sessions.autocapture_count) as session_autocapture_count, + count() as filtered_pageview_count, + and( + duration < 30, + session_pageview_count = 1, + session_autocapture_count = 0 + ) as is_bounce + FROM events + JOIN sessions + ON events.`$session_id` = sessions.session_id + WHERE and( + `$session_id` IS NOT NULL, + event = '$pageview', + timestamp >= {start}, + timestamp < {end}, + {event_properties} + ) + GROUP BY `$session_id` + HAVING and( + min_timestamp >= {start}, + min_timestamp < {end} + ) +) + + """, + placeholders={ + "start": start, + "mid": mid, + "end": end, + "event_properties": self.event_properties(), + }, + ) + else: + return parse_select( + """ + SELECT + uniq(person_id) AS unique_users, + NULL as previous_unique_users, + sum(filtered_pageview_count) AS current_pageviews, + NULL as previous_pageviews, + uniq(session_id) AS unique_sessions, + NULL as previous_unique_sessions, + avg(duration) AS avg_duration_s, + NULL as prev_avg_duration_s, + avg(is_bounce) AS bounce_rate, + NULL as prev_bounce_rate +FROM ( + SELECT + any(events.person_id) as person_id, + events.`$session_id` as session_id, + min(sessions.min_timestamp) as min_timestamp, + any(sessions.duration) as duration, + any(sessions.pageview_count) as session_pageview_count, + any(sessions.autocapture_count) as session_autocapture_count, + count() as filtered_pageview_count, + and( + duration < 30, + session_pageview_count = 1, + session_autocapture_count = 0 + ) as is_bounce + FROM events + JOIN sessions + ON events.`$session_id` = sessions.session_id + WHERE and( + `$session_id` IS NOT NULL, + event = '$pageview', + timestamp >= {mid}, + timestamp < {end}, + {event_properties} + ) + GROUP BY `$session_id` + HAVING and( + min_timestamp >= {mid}, + min_timestamp < {end} + ) +) + """, + placeholders={"mid": mid, "end": end, "event_properties": self.event_properties()}, + ) + def calculate(self): response = execute_hogql_query( query_type="overview_stats_pages_query", diff --git a/posthog/models/sessions/sql.py b/posthog/models/sessions/sql.py index 1850827acd75c..ea9ef27034c72 100644 --- a/posthog/models/sessions/sql.py +++ b/posthog/models/sessions/sql.py @@ -158,7 +158,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` != '' AND toStartOfDay(timestamp) >= '2024-03-08' +WHERE `$session_id` IS NOT NULL AND `$session_id` != '' GROUP BY `$session_id`, team_id """.format( table_name=f"{TABLE_BASE_NAME}_mv", @@ -188,6 +188,7 @@ def source_column(column_name: str) -> str: ) ) + # Distributed engine tables are only created if CLICKHOUSE_REPLICATED # This table is responsible for writing to sharded_sessions based on a sharding key. diff --git a/posthog/schema.py b/posthog/schema.py index d82c6c21b48ff..f97c682232543 100644 --- a/posthog/schema.py +++ b/posthog/schema.py @@ -1643,6 +1643,7 @@ class WebAnalyticsQueryBase(BaseModel): dateRange: Optional[DateRange] = None properties: List[Union[EventPropertyFilter, PersonPropertyFilter]] sampling: Optional[Sampling] = None + useSessionsTable: Optional[bool] = None class WebOverviewQuery(BaseModel): @@ -1655,6 +1656,7 @@ class WebOverviewQuery(BaseModel): properties: List[Union[EventPropertyFilter, PersonPropertyFilter]] response: Optional[WebOverviewQueryResponse] = None sampling: Optional[Sampling] = None + useSessionsTable: Optional[bool] = None class WebStatsTableQuery(BaseModel): @@ -1671,6 +1673,7 @@ class WebStatsTableQuery(BaseModel): properties: List[Union[EventPropertyFilter, PersonPropertyFilter]] response: Optional[WebStatsTableQueryResponse] = None sampling: Optional[Sampling] = None + useSessionsTable: Optional[bool] = None class WebTopClicksQuery(BaseModel): @@ -1682,6 +1685,7 @@ class WebTopClicksQuery(BaseModel): properties: List[Union[EventPropertyFilter, PersonPropertyFilter]] response: Optional[WebTopClicksQueryResponse] = None sampling: Optional[Sampling] = None + useSessionsTable: Optional[bool] = None class AnyResponseType( From ce10c14ccd71363d46d4fa632e1fa8f93fb25ab9 Mon Sep 17 00:00:00 2001 From: Raquel Smith Date: Tue, 12 Mar 2024 10:53:33 -0700 Subject: [PATCH 04/17] chore: add read scope to seen_together action (#20845) add read scope to seen_together action --- posthog/api/property_definition.py | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/posthog/api/property_definition.py b/posthog/api/property_definition.py index 6b37519ac1960..9ffa473189243 100644 --- a/posthog/api/property_definition.py +++ b/posthog/api/property_definition.py @@ -4,14 +4,8 @@ from django.db import connection from django.db.models import Prefetch -from rest_framework import ( - mixins, - serializers, - viewsets, - status, - request, - response, -) +from loginas.utils import is_impersonated_session +from rest_framework import mixins, request, response, serializers, status, viewsets from rest_framework.decorators import action from rest_framework.exceptions import ValidationError from rest_framework.pagination import LimitOffsetPagination @@ -23,10 +17,9 @@ from posthog.event_usage import report_user_action from posthog.exceptions import EnterpriseFeatureException from posthog.filters import TermSearchFilterBackend, term_search_filter_sql -from posthog.models import PropertyDefinition, TaggedItem, User, EventProperty -from posthog.models.activity_logging.activity_log import log_activity, Detail +from posthog.models import EventProperty, PropertyDefinition, TaggedItem, User +from posthog.models.activity_logging.activity_log import Detail, log_activity from posthog.models.utils import UUIDT -from loginas.utils import is_impersonated_session class SeenTogetherQuerySerializer(serializers.Serializer): @@ -245,9 +238,11 @@ def with_excluded_properties(self, excluded_properties: Optional[str], type: str ) return dataclasses.replace( self, - excluded_properties_filter=f"AND {self.property_definition_table}.name NOT IN %(excluded_properties)s" - if len(excluded_list) > 0 - else "", + excluded_properties_filter=( + f"AND {self.property_definition_table}.name NOT IN %(excluded_properties)s" + if len(excluded_list) > 0 + else "" + ), params={ **self.params, "excluded_properties": excluded_list, @@ -580,7 +575,7 @@ def get_object(self): def list(self, request, *args, **kwargs): return super().list(request, *args, **kwargs) - @action(methods=["GET"], detail=False) + @action(methods=["GET"], detail=False, required_scopes=["property_definition:read"]) def seen_together(self, request: request.Request, *args: Any, **kwargs: Any) -> response.Response: """ Allows a caller to provide a list of event names and a single property name From 40786e615ac2fd375e0f8e9142de84420031d56f Mon Sep 17 00:00:00 2001 From: Tom Owers Date: Tue, 12 Mar 2024 20:29:57 +0000 Subject: [PATCH 05/17] fix(data-warehouse): Use the correct source table for join hogql expressions (#20820) Use the correct source tabel for join hogql expressions --- frontend/src/scenes/data-warehouse/ViewLinkModal.tsx | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/frontend/src/scenes/data-warehouse/ViewLinkModal.tsx b/frontend/src/scenes/data-warehouse/ViewLinkModal.tsx index 548c9c5695ef1..2116d2da6e74d 100644 --- a/frontend/src/scenes/data-warehouse/ViewLinkModal.tsx +++ b/frontend/src/scenes/data-warehouse/ViewLinkModal.tsx @@ -18,7 +18,7 @@ import { IconSwapHoriz } from 'lib/lemon-ui/icons' import { useState } from 'react' import { viewLinkLogic } from 'scenes/data-warehouse/viewLinkLogic' -import { DatabaseSchemaQueryResponseField } from '~/queries/schema' +import { DatabaseSchemaQueryResponseField, NodeKind } from '~/queries/schema' export function ViewLinkModal(): JSX.Element { const { isJoinTableModalOpen } = useValues(viewLinkLogic) @@ -45,7 +45,6 @@ export function ViewLinkModal(): JSX.Element { export function ViewLinkForm(): JSX.Element { const { tableOptions, - selectedJoiningTable, selectedJoiningTableName, selectedSourceTableName, sourceTableKeys, @@ -116,6 +115,7 @@ export function ViewLinkForm(): JSX.Element { )} @@ -132,7 +132,7 @@ export function ViewLinkForm(): JSX.Element { fullWidth onSelect={selectJoiningKey} value={joiningIsUsingHogQLExpression ? '' : selectedJoiningKey ?? undefined} - disabledReason={selectedJoiningTable ? '' : 'Select a table to choose join key'} + disabledReason={selectedJoiningTableName ? '' : 'Select a table to choose join key'} options={[...joiningTableKeys, { value: '', label: HogQL Expression }]} placeholder="Select a key" /> @@ -140,6 +140,7 @@ export function ViewLinkForm(): JSX.Element { )} @@ -195,14 +196,16 @@ export function ViewLinkForm(): JSX.Element { const HogQLDropdown = ({ hogQLValue, onHogQLValueChange, + tableName, }: { hogQLValue: string + tableName: string onHogQLValueChange: (hogQLValue: string) => void }): JSX.Element => { const [isHogQLDropdownVisible, setIsHogQLDropdownVisible] = useState(false) return ( -
+
{ onHogQLValueChange(currentValue) setIsHogQLDropdownVisible(false) From 8a7b119246ef538615074a89875f739276550b8d Mon Sep 17 00:00:00 2001 From: Eric Duong Date: Tue, 12 Mar 2024 19:08:46 -0400 Subject: [PATCH 06/17] chore(data-warehouse): fix data warehouse schema tests (#20884) fix tests --- .../warehouse/api/test/test_external_data_source.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/posthog/warehouse/api/test/test_external_data_source.py b/posthog/warehouse/api/test/test_external_data_source.py index ba97dc6b4562e..23a4823e47754 100644 --- a/posthog/warehouse/api/test/test_external_data_source.py +++ b/posthog/warehouse/api/test/test_external_data_source.py @@ -161,7 +161,7 @@ def test_database_schema(self): postgres_connection.commit() - response = self.client.get( + response = self.client.post( f"/api/projects/{self.team.id}/external_data_sources/database_schema/", data={ "host": settings.PG_HOST, @@ -195,7 +195,7 @@ def test_internal_postgres(self, patch_get_postgres_schemas): with override_settings(CLOUD_DEPLOYMENT="US"): team_2, _ = Team.objects.get_or_create(id=2, organization=self.team.organization) - response = self.client.get( + response = self.client.post( f"/api/projects/{team_2.id}/external_data_sources/database_schema/", data={ "host": "172.16.0.0", @@ -211,7 +211,7 @@ def test_internal_postgres(self, patch_get_postgres_schemas): new_team = Team.objects.create(name="new_team", organization=self.team.organization) - response = self.client.get( + response = self.client.post( f"/api/projects/{new_team.id}/external_data_sources/database_schema/", data={ "host": "172.16.0.0", @@ -227,7 +227,7 @@ def test_internal_postgres(self, patch_get_postgres_schemas): with override_settings(CLOUD_DEPLOYMENT="EU"): team_1, _ = Team.objects.get_or_create(id=1, organization=self.team.organization) - response = self.client.get( + response = self.client.post( f"/api/projects/{team_1.id}/external_data_sources/database_schema/", data={ "host": "172.16.0.0", @@ -243,7 +243,7 @@ def test_internal_postgres(self, patch_get_postgres_schemas): new_team = Team.objects.create(name="new_team", organization=self.team.organization) - response = self.client.get( + response = self.client.post( f"/api/projects/{new_team.id}/external_data_sources/database_schema/", data={ "host": "172.16.0.0", From 5146227905da4d0e4d291ec2d0f4f03ebaafc185 Mon Sep 17 00:00:00 2001 From: Juraj Majerik Date: Wed, 13 Mar 2024 07:37:19 +0100 Subject: [PATCH 07/17] feat(experiments): add step 2 (Goal) (#20815) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Neil Kakkar --- cypress/e2e/experiments.cy.ts | 8 +- ...cards-insight-card--insight-card--dark.png | Bin 498941 -> 496555 bytes .../src/scenes/experiments/ExperimentNext.tsx | 179 +++++++++++++++--- .../scenes/experiments/experimentLogic.tsx | 25 +-- 4 files changed, 169 insertions(+), 43 deletions(-) diff --git a/cypress/e2e/experiments.cy.ts b/cypress/e2e/experiments.cy.ts index 77f42c50ccba7..fffd8120d8206 100644 --- a/cypress/e2e/experiments.cy.ts +++ b/cypress/e2e/experiments.cy.ts @@ -54,8 +54,8 @@ describe('Experiments', () => { // Select goal type cy.get('[data-attr="experiment-goal-type-select"]').click() - cy.contains('Trend').should('be.visible') - cy.contains('Conversion funnel').should('be.visible') + cy.get('.Popover__content').contains('Trend').should('be.visible') + cy.get('.Popover__content').contains('Conversion funnel').should('be.visible') // Add secondary metric const secondaryMetricName = `Secondary metric ${Math.floor(Math.random() * 10000000)}` @@ -65,8 +65,8 @@ describe('Experiments', () => { .type(secondaryMetricName) .should('have.value', secondaryMetricName) cy.get('[data-attr="metrics-selector"]').click() - cy.contains('Trends').should('be.visible') - cy.contains('Funnels').should('be.visible') + cy.get('.Popover__content').contains('Funnels').should('be.visible') + cy.get('.Popover__content').contains('Trends').should('be.visible') cy.get('[data-attr="create-annotation-submit"]').click() cy.contains(secondaryMetricName).should('exist') diff --git a/frontend/__snapshots__/components-cards-insight-card--insight-card--dark.png b/frontend/__snapshots__/components-cards-insight-card--insight-card--dark.png index 39e6f1913dd58d55bbcbfa83958a0b4670230c0b..cde356c5dc702259e3b17404a7238d0f2c6bf183 100644 GIT binary patch delta 188839 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

KbT=_YXU?V*Ek}`@ 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ß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

fOVySk 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 BLDT>M diff --git a/frontend/src/scenes/experiments/ExperimentNext.tsx b/frontend/src/scenes/experiments/ExperimentNext.tsx index f782ce044f10e..e1891241ac816 100644 --- a/frontend/src/scenes/experiments/ExperimentNext.tsx +++ b/frontend/src/scenes/experiments/ExperimentNext.tsx @@ -2,21 +2,30 @@ import './Experiment.scss' import { IconPlusSmall, IconTrash } from '@posthog/icons' import { LemonDivider, LemonInput, LemonTextArea, Tooltip } from '@posthog/lemon-ui' -import { useActions, useValues } from 'kea' +import { BindLogic, useActions, useValues } from 'kea' import { Form, Group } from 'kea-forms' import { ExperimentVariantNumber } from 'lib/components/SeriesGlyph' import { MAX_EXPERIMENT_VARIANTS } from 'lib/constants' import { IconChevronRight } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { LemonField } from 'lib/lemon-ui/LemonField' -import React, { useEffect } from 'react' +import { LemonRadio } from 'lib/lemon-ui/LemonRadio' +import { capitalizeFirstLetter } from 'lib/utils' +import React from 'react' +import { insightDataLogic } from 'scenes/insights/insightDataLogic' +import { insightLogic } from 'scenes/insights/insightLogic' +import { Query } from '~/queries/Query/Query' +import { InsightType } from '~/types' + +import { EXPERIMENT_INSIGHT_ID } from './constants' import { experimentLogic } from './experimentLogic' +import { ExperimentInsightCreator } from './MetricSelector' const Header = (): JSX.Element => { const { currentFormStep } = useValues(experimentLogic) - const steps = ['Info', 'Goal', 'Code'] + const steps = ['Info', 'Goal'] return (

@@ -165,41 +174,157 @@ const StepInfo = (): JSX.Element => { } const StepGoal = (): JSX.Element => { - return
Goal
-} + const { experiment, exposureAndSampleSize, experimentInsightType, groupTypes, aggregationLabel } = + useValues(experimentLogic) + const { setExperiment, setNewExperimentInsight, createExperiment } = useActions(experimentLogic) + + // insightLogic + const logic = insightLogic({ dashboardItemId: EXPERIMENT_INSIGHT_ID }) + const { insightProps } = useValues(logic) + + // insightDataLogic + const { query } = useValues(insightDataLogic(insightProps)) -const StepCode = (): JSX.Element => { - return
Code
+ return ( +
+
+
+

Participant type

+
+ This sets default aggregation type for all metrics and feature flags. You can change this at any + time by updating the metric or feature flag. +
+ + { + const groupTypeIndex = rawGroupTypeIndex !== -1 ? rawGroupTypeIndex : undefined + + setExperiment({ + parameters: { + ...experiment.parameters, + aggregation_group_type_index: groupTypeIndex ?? undefined, + }, + }) + setNewExperimentInsight() + }} + options={[ + { value: -1, label: 'Persons' }, + ...Array.from(groupTypes.values()).map((groupType) => ({ + value: groupType.group_type_index, + label: capitalizeFirstLetter(aggregationLabel(groupType.group_type_index).plural), + })), + ]} + /> +
+
+

Goal type

+ + { + val && + setNewExperimentInsight({ + insight: val, + properties: experiment?.filters?.properties, + }) + }} + options={[ + { + value: InsightType.FUNNELS, + label: ( +
+
Conversion funnel
+
+ Track how many people complete a sequence of actions and/or events +
+
+ ), + }, + { + value: InsightType.TRENDS, + label: ( +
+
Trend
+
+ Track a cumulative total count of a specific event or action +
+
+ ), + }, + ]} + /> +
+
+

Goal criteria

+
+ {experimentInsightType === InsightType.FUNNELS + ? "Create the funnel where you'd like to see an increased conversion rate." + : 'Create a trend goal to track change in a single metric.'} +
+ +
+ +
+
+
+

Goal preview

+
+ + + +
+
+
+
+ { + const { exposure, sampleSize } = exposureAndSampleSize + createExperiment(true, exposure, sampleSize) + }} + > + Create experiment + +
+
+ ) } export function ExperimentNext(): JSX.Element { - const { currentFormStep, props } = useValues(experimentLogic) - const { setCurrentFormStep } = useActions(experimentLogic) - - useEffect(() => { - setCurrentFormStep(0) - }, []) + const { experimentId, editingExistingExperiment, currentFormStep, props } = useValues(experimentLogic) const stepComponents = { 0: , 1: , - 2: , } const CurrentStepComponent = (currentFormStep && stepComponents[currentFormStep]) || return ( -
-
-
- {CurrentStepComponent} -
-
+ <> + {experimentId === 'new' || editingExistingExperiment ? ( +
+
+
+ {CurrentStepComponent} +
+
+ ) : ( +

{`Experiment ${experimentId} draft/results`}

+ )} + ) } diff --git a/frontend/src/scenes/experiments/experimentLogic.tsx b/frontend/src/scenes/experiments/experimentLogic.tsx index 35e617d41470e..cfac9849aad1a 100644 --- a/frontend/src/scenes/experiments/experimentLogic.tsx +++ b/frontend/src/scenes/experiments/experimentLogic.tsx @@ -354,17 +354,7 @@ export const experimentLogic = kea([ setNewExperimentInsight: async ({ filters }) => { let newInsightFilters const aggregationGroupTypeIndex = values.experiment.parameters?.aggregation_group_type_index - if (filters?.insight === InsightType.FUNNELS) { - newInsightFilters = cleanFilters({ - insight: InsightType.FUNNELS, - funnel_viz_type: FunnelVizType.Steps, - date_from: dayjs().subtract(DEFAULT_DURATION, 'day').format('YYYY-MM-DDTHH:mm'), - date_to: dayjs().endOf('d').format('YYYY-MM-DDTHH:mm'), - layout: FunnelLayout.horizontal, - aggregation_group_type_index: aggregationGroupTypeIndex, - ...filters, - }) - } else { + if (filters?.insight === InsightType.TRENDS) { const groupAggregation = aggregationGroupTypeIndex !== undefined ? { math: 'unique_group', math_group_type_index: aggregationGroupTypeIndex } @@ -380,6 +370,17 @@ export const experimentLogic = kea([ ...eventAddition, ...filters, }) + } else { + newInsightFilters = cleanFilters({ + insight: InsightType.FUNNELS, + funnel_viz_type: FunnelVizType.Steps, + date_from: dayjs().subtract(DEFAULT_DURATION, 'day').format('YYYY-MM-DDTHH:mm'), + date_to: dayjs().endOf('d').format('YYYY-MM-DDTHH:mm'), + layout: FunnelLayout.horizontal, + ...(aggregationGroupTypeIndex !== undefined && { + aggregation_group_type_index: aggregationGroupTypeIndex, + }), + }) } actions.updateQuerySource(filtersToQueryNode(newInsightFilters)) @@ -663,7 +664,7 @@ export const experimentLogic = kea([ experimentInsightType: [ (s) => [s.experiment], (experiment): InsightType => { - return experiment?.filters?.insight || InsightType.TRENDS + return experiment?.filters?.insight || InsightType.FUNNELS }, ], isExperimentRunning: [ From 75c1e9a2e139cfa3f8f4fc90419a587be2907da6 Mon Sep 17 00:00:00 2001 From: Robbie Date: Wed, 13 Mar 2024 09:46:21 +0000 Subject: [PATCH 08/17] feat(web-analytics): remove duplicate channel type definition, and add to sessions table (#20875) * Remove duplicate channel type definition * Add channel_type to sessions table * Fix typing problems * Remove channel_type from raw_sessions table --- posthog/hogql/database/schema/channel_type.py | 46 +++++++---- posthog/hogql/database/schema/sessions.py | 12 +++ .../database/schema/test/test_sessions.py | 32 +++++++- .../test/__snapshots__/test_database.ambr | 8 ++ .../web_analytics/stats_table.py | 80 +++++-------------- 5 files changed, 100 insertions(+), 78 deletions(-) diff --git a/posthog/hogql/database/schema/channel_type.py b/posthog/hogql/database/schema/channel_type.py index 702681aeeb29f..5dee575fc59a3 100644 --- a/posthog/hogql/database/schema/channel_type.py +++ b/posthog/hogql/database/schema/channel_type.py @@ -41,8 +41,29 @@ def create_initial_domain_type(name: str): def create_initial_channel_type(name: str): return ExpressionField( name=name, - expr=parse_expr( - """ + expr=create_channel_type_expr( + campaign=ast.Call(name="toString", args=[ast.Field(chain=["properties", "$initial_utm_campaign"])]), + medium=ast.Call(name="toString", args=[ast.Field(chain=["properties", "$initial_utm_medium"])]), + source=ast.Call(name="toString", args=[ast.Field(chain=["properties", "$initial_utm_source"])]), + referring_domain=ast.Call( + name="toString", args=[ast.Field(chain=["properties", "$initial_referring_domain"])] + ), + gclid=ast.Call(name="toString", args=[ast.Field(chain=["properties", "$initial_gclid"])]), + gad_source=ast.Call(name="toString", args=[ast.Field(chain=["properties", "$initial_gad_source"])]), + ), + ) + + +def create_channel_type_expr( + campaign: ast.Expr, + medium: ast.Expr, + source: ast.Expr, + referring_domain: ast.Expr, + gclid: ast.Expr, + gad_source: ast.Expr, +) -> ast.Expr: + return parse_expr( + """ multiIf( match({campaign}, 'cross-network'), 'Cross Network', @@ -99,16 +120,13 @@ def create_initial_channel_type(name: str): ) ) )""", - start=None, - placeholders={ - "campaign": ast.Call(name="toString", args=[ast.Field(chain=["properties", "$initial_utm_campaign"])]), - "medium": ast.Call(name="toString", args=[ast.Field(chain=["properties", "$initial_utm_medium"])]), - "source": ast.Call(name="toString", args=[ast.Field(chain=["properties", "$initial_utm_source"])]), - "referring_domain": ast.Call( - name="toString", args=[ast.Field(chain=["properties", "$initial_referring_domain"])] - ), - "gclid": ast.Call(name="toString", args=[ast.Field(chain=["properties", "$initial_gclid"])]), - "gad_source": ast.Call(name="toString", args=[ast.Field(chain=["properties", "$initial_gad_source"])]), - }, - ), + start=None, + placeholders={ + "campaign": campaign, + "medium": medium, + "source": source, + "referring_domain": referring_domain, + "gclid": gclid, + "gad_source": gad_source, + }, ) diff --git a/posthog/hogql/database/schema/sessions.py b/posthog/hogql/database/schema/sessions.py index 37b44c0e402c5..2a4865798eeb8 100644 --- a/posthog/hogql/database/schema/sessions.py +++ b/posthog/hogql/database/schema/sessions.py @@ -10,6 +10,7 @@ DatabaseField, LazyTable, ) +from posthog.hogql.database.schema.channel_type import create_channel_type_expr from posthog.schema import HogQLQueryModifiers @@ -109,6 +110,16 @@ def select_from_sessions_table(requested_fields: Dict[str, List[str | int]]): ast.Call(name="max", args=[ast.Field(chain=[table_name, "max_timestamp"])]), ], ), + "channel_type": create_channel_type_expr( + campaign=ast.Call(name="argMinMerge", args=[ast.Field(chain=[table_name, "initial_utm_campaign"])]), + medium=ast.Call(name="argMinMerge", args=[ast.Field(chain=[table_name, "initial_utm_medium"])]), + source=ast.Call(name="argMinMerge", args=[ast.Field(chain=[table_name, "initial_utm_source"])]), + referring_domain=ast.Call( + name="argMinMerge", args=[ast.Field(chain=[table_name, "initial_referring_domain"])] + ), + gclid=ast.Call(name="argMinMerge", args=[ast.Field(chain=[table_name, "initial_gclid"])]), + gad_source=ast.Call(name="argMinMerge", args=[ast.Field(chain=[table_name, "initial_gad_source"])]), + ), } select_fields: List[ast.Expr] = [] @@ -134,6 +145,7 @@ class SessionsTable(LazyTable): fields: Dict[str, FieldOrTable] = { **SESSIONS_COMMON_FIELDS, "duration": IntegerDatabaseField(name="duration"), + "channel_type": StringDatabaseField(name="channel_type"), } def lazy_select(self, requested_fields: Dict[str, List[str | int]], modifiers: HogQLQueryModifiers): diff --git a/posthog/hogql/database/schema/test/test_sessions.py b/posthog/hogql/database/schema/test/test_sessions.py index 24b6b43347f87..dc3ba50b5be60 100644 --- a/posthog/hogql/database/schema/test/test_sessions.py +++ b/posthog/hogql/database/schema/test/test_sessions.py @@ -1,3 +1,4 @@ +from posthog.hogql import ast from posthog.hogql.parser import parse_select from posthog.hogql.query import execute_hogql_query from posthog.test.base import ( @@ -9,16 +10,19 @@ class TestReferringDomainType(ClickhouseTestMixin, APIBaseTest): def test_select_star(self): + session_id = "session_test_select_star" + _create_event( event="$pageview", team=self.team, distinct_id="d1", - properties={"$current_url": "https://example.com", "$session_id": "s1"}, + properties={"$current_url": "https://example.com", "$session_id": session_id}, ) response = execute_hogql_query( parse_select( - "select * from sessions", + "select * from sessions where session_id = {session_id}", + placeholders={"session_id": ast.Constant(value=session_id)}, ), self.team, ) @@ -27,3 +31,27 @@ def test_select_star(self): len(response.results or []), 1, ) + + def test_channel_type(self): + session_id = "session_test_channel_type" + + _create_event( + event="$pageview", + team=self.team, + distinct_id="d1", + properties={"gad_source": "1", "$session_id": session_id}, + ) + + response = execute_hogql_query( + parse_select( + "select channel_type from sessions where session_id = {session_id}", + placeholders={"session_id": ast.Constant(value=session_id)}, + ), + self.team, + ) + + result = (response.results or [])[0] + self.assertEqual( + result[0], + "Paid Search", + ) diff --git a/posthog/hogql/database/test/__snapshots__/test_database.ambr b/posthog/hogql/database/test/__snapshots__/test_database.ambr index eb24ef4e3e0e1..21c60457a1fd3 100644 --- a/posthog/hogql/database/test/__snapshots__/test_database.ambr +++ b/posthog/hogql/database/test/__snapshots__/test_database.ambr @@ -567,6 +567,10 @@ { "key": "duration", "type": "integer" + }, + { + "key": "channel_type", + "type": "string" } ], "raw_session_replay_events": [ @@ -1406,6 +1410,10 @@ { "key": "duration", "type": "integer" + }, + { + "key": "channel_type", + "type": "string" } ], "raw_session_replay_events": [ diff --git a/posthog/hogql_queries/web_analytics/stats_table.py b/posthog/hogql_queries/web_analytics/stats_table.py index a7ced15c87b33..f15505365ba66 100644 --- a/posthog/hogql_queries/web_analytics/stats_table.py +++ b/posthog/hogql_queries/web_analytics/stats_table.py @@ -1,5 +1,6 @@ from posthog.hogql import ast from posthog.hogql.constants import LimitContext +from posthog.hogql.database.schema.channel_type import create_channel_type_expr from posthog.hogql.parser import parse_select, parse_expr from posthog.hogql_queries.insights.paginators import HogQLHasMorePaginator from posthog.hogql_queries.web_analytics.ctes import ( @@ -273,72 +274,17 @@ def to_channel_query(self): (SELECT - multiIf( - match(initial_utm_campaign, 'cross-network'), - 'Cross Network', - - ( - match(initial_utm_medium, '^(.*cp.*|ppc|retargeting|paid.*)$') OR - initial_gclid IS NOT NULL OR - initial_gad_source IS NOT NULL - ), - coalesce( - hogql_lookupPaidSourceType(initial_utm_source), - hogql_lookupPaidDomainType(initial_referring_domain), - if( - match(initial_utm_campaign, '^(.*(([^a-df-z]|^)shop|shopping).*)$'), - 'Paid Shopping', - NULL - ), - hogql_lookupPaidMediumType(initial_utm_medium), - multiIf ( - initial_gad_source = '1', - 'Paid Search', - - match(initial_utm_campaign, '^(.*video.*)$'), - 'Paid Video', - - 'Paid Other' - ) - ), - - ( - initial_referring_domain = '$direct' - AND (initial_utm_medium IS NULL OR initial_utm_medium = '') - AND (initial_utm_source IS NULL OR initial_utm_source IN ('', '(direct)', 'direct')) - ), - 'Direct', - - coalesce( - hogql_lookupOrganicSourceType(initial_utm_source), - hogql_lookupOrganicDomainType(initial_referring_domain), - if( - match(initial_utm_campaign, '^(.*(([^a-df-z]|^)shop|shopping).*)$'), - 'Organic Shopping', - NULL - ), - hogql_lookupOrganicMediumType(initial_utm_medium), - multiIf( - match(initial_utm_campaign, '^(.*video.*)$'), - 'Organic Video', - - match(initial_utm_medium, 'push$'), - 'Push', - - 'Other' - ) - ) - ) AS breakdown_value, + {channel_type} AS breakdown_value, count() as total_pageviews, uniq(pid) as unique_visitors FROM (SELECT - person.properties.$initial_utm_campaign AS initial_utm_campaign, - person.properties.$initial_utm_medium AS initial_utm_medium, - person.properties.$initial_utm_source AS initial_utm_source, - person.properties.$initial_referring_domain AS initial_referring_domain, - person.properties.$initial_gclid AS initial_gclid, - person.properties.$initial_gad_source AS initial_gad_source, + toString(person.properties.$initial_utm_campaign) AS initial_utm_campaign, + toString(person.properties.$initial_utm_medium) AS initial_utm_medium, + toString(person.properties.$initial_utm_source) AS initial_utm_source, + toString(person.properties.$initial_referring_domain) AS initial_referring_domain, + toString(person.properties.$initial_gclid) AS initial_gclid, + toString(person.properties.$initial_gad_source) AS initial_gad_source, person_id AS pid FROM events SAMPLE {sample_rate} @@ -361,6 +307,16 @@ def to_channel_query(self): "counts_where": self.events_where(), "where_breakdown": self.where_breakdown(), "sample_rate": self._sample_ratio, + "channel_type": create_channel_type_expr( + campaign=ast.Call(name="toString", args=[ast.Field(chain=["initial_utm_campaign"])]), + medium=ast.Call(name="toString", args=[ast.Field(chain=["initial_utm_medium"])]), + source=ast.Call(name="toString", args=[ast.Field(chain=["initial_utm_source"])]), + referring_domain=ast.Call( + name="toString", args=[ast.Field(chain=["initial_referring_domain"])] + ), + gclid=ast.Call(name="toString", args=[ast.Field(chain=["initial_gclid"])]), + gad_source=ast.Call(name="toString", args=[ast.Field(chain=["initial_gad_source"])]), + ), }, ) From a2c5efa30d11fd9df2a87112e9b33988451d1c3f Mon Sep 17 00:00:00 2001 From: Brett Hoerner Date: Wed, 13 Mar 2024 04:08:42 -0600 Subject: [PATCH 09/17] chore(batch-exports): add team migration management command (#20772) --- mypy-baseline.txt | 1 + posthog/batch_exports/http.py | 23 +- posthog/batch_exports/service.py | 24 ++ posthog/management/commands/migrate_team.py | 270 ++++++++++++++++++++ 4 files changed, 297 insertions(+), 21 deletions(-) create mode 100644 posthog/management/commands/migrate_team.py diff --git a/mypy-baseline.txt b/mypy-baseline.txt index 97ad2d3ed57bc..c095bc7fff997 100644 --- a/mypy-baseline.txt +++ b/mypy-baseline.txt @@ -673,6 +673,7 @@ posthog/queries/trends/test/test_person.py:0: error: "str" has no attribute "get posthog/queries/trends/test/test_person.py:0: error: Invalid index type "int" for "HttpResponse"; expected type "str | bytes" [index] posthog/queries/trends/test/test_person.py:0: error: "str" has no attribute "get" [attr-defined] posthog/queries/trends/test/test_person.py:0: error: Invalid index type "int" for "HttpResponse"; expected type "str | bytes" [index] +posthog/management/commands/migrate_team.py:0: error: Incompatible types in assignment (expression has type "None", variable has type "BatchExport") [assignment] posthog/hogql/test/test_query.py:0: error: Argument 1 to "len" has incompatible type "list[Any] | None"; expected "Sized" [arg-type] posthog/hogql/test/test_query.py:0: error: Value of type "list[QueryTiming] | None" is not indexable [index] posthog/hogql/test/test_query.py:0: error: Value of type "list[QueryTiming] | None" is not indexable [index] diff --git a/posthog/batch_exports/http.py b/posthog/batch_exports/http.py index 5e84d7f446b3d..dd833f521c4f3 100644 --- a/posthog/batch_exports/http.py +++ b/posthog/batch_exports/http.py @@ -28,11 +28,9 @@ BatchExportSchema, BatchExportServiceError, BatchExportServiceRPCError, - BatchExportServiceScheduleNotFound, BatchExportWithNoEndNotAllowedError, backfill_export, - batch_export_delete_schedule, - cancel_running_batch_export_backfill, + disable_and_delete_export, pause_batch_export, sync_batch_export, unpause_batch_export, @@ -43,7 +41,6 @@ from posthog.hogql.printer import prepare_ast_for_printing, print_prepared_ast from posthog.models import ( BatchExport, - BatchExportBackfill, BatchExportDestination, BatchExportRun, Team, @@ -436,23 +433,7 @@ def perform_destroy(self, instance: BatchExport): since we are deleting, we assume that we can recover from this state by finishing the delete operation by calling instance.save(). """ - temporal = sync_connect() - - instance.deleted = True - - try: - batch_export_delete_schedule(temporal, str(instance.pk)) - except BatchExportServiceScheduleNotFound as e: - logger.warning( - "The Schedule %s could not be deleted as it was not found", - e.schedule_id, - ) - - instance.save() - - for backfill in BatchExportBackfill.objects.filter(batch_export=instance): - if backfill.status == BatchExportBackfill.Status.RUNNING: - cancel_running_batch_export_backfill(temporal, backfill.workflow_id) + disable_and_delete_export(instance) class BatchExportOrganizationViewSet(BatchExportViewSet): diff --git a/posthog/batch_exports/service.py b/posthog/batch_exports/service.py index 4930665d13f6d..f3d5715220bf3 100644 --- a/posthog/batch_exports/service.py +++ b/posthog/batch_exports/service.py @@ -3,6 +3,7 @@ from dataclasses import asdict, dataclass, fields from uuid import UUID +import structlog import temporalio from asgiref.sync import async_to_sync from temporalio.client import ( @@ -32,6 +33,8 @@ update_schedule, ) +logger = structlog.get_logger(__name__) + class BatchExportField(typing.TypedDict): """A field to be queried from ClickHouse. @@ -291,6 +294,27 @@ def unpause_batch_export( backfill_export(temporal, batch_export_id, batch_export.team_id, start_at, end_at) +def disable_and_delete_export(instance: BatchExport): + """Mark a BatchExport as deleted and delete its Temporal Schedule (including backfills).""" + temporal = sync_connect() + + instance.deleted = True + + try: + batch_export_delete_schedule(temporal, str(instance.pk)) + except BatchExportServiceScheduleNotFound as e: + logger.warning( + "The Schedule %s could not be deleted as it was not found", + e.schedule_id, + ) + + instance.save() + + for backfill in BatchExportBackfill.objects.filter(batch_export=instance): + if backfill.status == BatchExportBackfill.Status.RUNNING: + cancel_running_batch_export_backfill(temporal, backfill.workflow_id) + + def batch_export_delete_schedule(temporal: Client, schedule_id: str) -> None: """Delete a Temporal Schedule.""" try: diff --git a/posthog/management/commands/migrate_team.py b/posthog/management/commands/migrate_team.py new file mode 100644 index 0000000000000..15a1f4e72b4f5 --- /dev/null +++ b/posthog/management/commands/migrate_team.py @@ -0,0 +1,270 @@ +import datetime as dt +import logging + +from django.db import transaction +from django.core.management.base import BaseCommand, CommandError + +from posthog.batch_exports.models import BATCH_EXPORT_INTERVALS +from posthog.batch_exports.service import ( + backfill_export, + sync_batch_export, + disable_and_delete_export, +) +from posthog.models import ( + BatchExport, + BatchExportBackfill, + BatchExportDestination, + BatchExportRun, + Team, +) +from posthog.temporal.common.client import sync_connect + + +logger = logging.getLogger(__name__) +logger.setLevel(logging.INFO) + +EXPORT_NAME = "PostHog HTTP Migration" +VALID_INTERVALS = {i[0] for i in BATCH_EXPORT_INTERVALS} +REGION_URLS = { + "us": "https://app.posthog.com/batch", + "eu": "https://eu.posthog.com/batch", +} + + +class Command(BaseCommand): + help = "Creates an HTTP batch export for a team to migrate data to another PostHog instance, \ + or another team within the same instance." + + def add_arguments(self, parser): + parser.add_argument("--team-id", default=None, type=int, help="Team ID to migrate from (on this instance)") + parser.add_argument("--interval", default=None, type=str, help="Interval to use for the batch export") + parser.add_argument( + "--start-at", + default=None, + type=str, + help="Timestamp to start the backfill from in UTC, 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS'", + ) + parser.add_argument( + "--delete-existing", default=False, type=bool, help="Delete existing batch export if it exists" + ) + parser.add_argument("--dest-token", default=None, type=str, help="Destination Project API Key (token)") + parser.add_argument("--dest-region", default=None, type=str, help="Destination region") + parser.add_argument( + "--end-days-from-now", + default=30, + type=int, + help="Number of days from now to automatically end the ongoing export at, the default is usually fine", + ) + + def handle(self, **options): + team_id = options["team_id"] + interval = options["interval"] + start_at = options["start_at"] + dest_token = options["dest_token"] + dest_region = options["dest_region"] + verbose = options["verbosity"] > 1 + + create_args = [ + interval, + start_at, + dest_token, + dest_region, + ] + create_requested = any(create_args) + + if not team_id: + raise CommandError("source Team ID is required") + + team = Team.objects.select_related("organization").get(id=team_id) + + display( + "Team", + name=team.name, + organization=team.organization.name, + ) + + try: + existing_export = BatchExport.objects.get( + team=team, destination__type="HTTP", name=EXPORT_NAME, deleted=False + ) + + display_existing(existing_export=existing_export, verbose=verbose) + + if options["delete_existing"]: + result = input("Enter [y] to continue deleting the existing migration (Ctrl+C to cancel) ") + if result.lower() != "y": + raise CommandError("Didn't receive 'y', exiting") + print() # noqa: T201 + + disable_and_delete_export(existing_export) + existing_export = None + display("Deleted existing batch export and backfill") + except BatchExport.DoesNotExist: + existing_export = None + display("No existing migration was found") + except BatchExport.MultipleObjectsReturned: + raise CommandError( + "More than one existing migration found! This should never happen if the management command is used, we don't know enough to proceed" + ) + + if not create_requested: + # User didn't provide any arguments to create a migration, so they must have just wanted + # to check the status and/or delete the existing migration. + return + elif existing_export: + display( + "Existing migration job already exists and it wasn't deleted, exiting without creating a new batch export" + ) + return + + end_days_from_now = options["end_days_from_now"] + + create_migration( + team_id=team_id, + interval=interval, + start_at=start_at, + dest_token=dest_token, + dest_region=dest_region, + end_days_from_now=end_days_from_now, + ) + + +def display_existing(*, existing_export: BatchExport, verbose: bool): + existing_backfill = BatchExportBackfill.objects.get(batch_export=existing_export) + most_recent_run = BatchExportRun.objects.filter(batch_export=existing_export).order_by("-created_at").first() + + if verbose: + display( + "Existing migration batch export (verbose details)", + batch_export_id=existing_export.id, + paused=existing_export.paused, + interval=existing_export.interval, + created_at=existing_export.created_at, + last_updated_at=existing_export.last_updated_at, + ) + display( + "Existing migration backfill (verbose details)", + backfill_id=existing_backfill.id, + status=existing_backfill.status, + start_at=existing_backfill.start_at, + created_at=existing_backfill.created_at, + last_updated_at=existing_backfill.last_updated_at, + ) + + if not most_recent_run: + display("No batch export runs found, is the migration brand new?") + else: + most_recent_completed_run = ( + BatchExportRun.objects.filter(batch_export=existing_export, status=BatchExportRun.Status.COMPLETED) + .order_by("-finished_at") + .first() + ) + + if most_recent_completed_run: + data_start_at = existing_backfill.start_at + data_end_at = most_recent_completed_run.data_interval_end + display( + "Found an existing migration, range of data migrated:", + start=data_start_at, + end=data_end_at, + interval=existing_export.interval, + ) + if existing_export.paused: + display("The batch export backfill is still catching up to realtime") + else: + display( + "The batch export is unpaused, meaning the primary backfill completed and this is now in realtime export mode", + ) + + if not most_recent_completed_run or verbose: + display( + "Most recent run (verbose details)", + run_id=most_recent_run.id, + status=most_recent_run.status, + error=most_recent_run.latest_error, + data_interval_start=most_recent_run.data_interval_start, + data_interval_end=most_recent_run.data_interval_end, + created_at=most_recent_run.created_at, + last_updated_at=most_recent_run.last_updated_at, + ) + + +def create_migration( + *, team_id: int, interval: str, start_at: str, dest_token: str, dest_region: str, end_days_from_now: int +): + if interval not in VALID_INTERVALS: + raise CommandError("invalid interval, choices are: %s" % VALID_INTERVALS) + + if not dest_token.startswith("phc_"): + raise CommandError("invalid destination token, must start with 'phc_'") + + dest_region = dest_region.lower() + if dest_region not in REGION_URLS: + raise CommandError("invalid destination region, choices are: 'us', 'eu'") + url = REGION_URLS[dest_region] + + try: + start_at_datetime = parse_to_utc(start_at) + except ValueError as e: + raise CommandError("couldn't parse start_at: %s" % e) + + display( + "Creating migration", + interval=interval, + start_at=start_at_datetime, + dest_token=dest_token, + dest_region=dest_region, + url=url, + ) + result = input("Enter [y] to continue creating a new migration (Ctrl+C to cancel) ") + if result.lower() != "y": + raise CommandError("Didn't receive 'y', exiting") + print() # noqa: T201 + + now = dt.datetime.now(dt.timezone.utc) + # This is a precaution so we don't accidentally leave the export running indefinitely. + end_at = now + dt.timedelta(days=end_days_from_now) + + destination = BatchExportDestination( + type=BatchExportDestination.Destination.HTTP, + config={"url": url, "token": dest_token}, + ) + batch_export = BatchExport( + team_id=team_id, + destination=destination, + name=EXPORT_NAME, + interval=interval, + paused=True, + end_at=end_at, + ) + sync_batch_export(batch_export, created=True) + + with transaction.atomic(): + destination.save() + batch_export.save() + + temporal = sync_connect() + backfill_id = backfill_export(temporal, str(batch_export.pk), team_id, start_at_datetime, end_at=None) + display("Backfill started", batch_export_id=batch_export.id, backfill_id=backfill_id) + + +def display(message, **kwargs): + print(message) # noqa: T201 + for key, value in kwargs.items(): + if isinstance(value, dt.datetime): + value = value.strftime("%Y-%m-%d %H:%M:%S") + print(f" {key} = {value}") # noqa: T201 + print() # noqa: T201 + + +def parse_to_utc(date_str: str) -> dt.datetime: + try: + parsed_datetime = dt.datetime.strptime(date_str, "%Y-%m-%d") + except ValueError: + try: + parsed_datetime = dt.datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S") + except ValueError: + raise ValueError("Invalid date format. Expected 'YYYY-MM-DD' or 'YYYY-MM-DD HH:MM:SS'.") + + utc_datetime = parsed_datetime.replace(tzinfo=dt.timezone.utc) + return utc_datetime From 3b7288f7c71cf0778f42e5c7922040a175a862a1 Mon Sep 17 00:00:00 2001 From: Paul D'Ambra Date: Wed, 13 Mar 2024 11:42:57 +0000 Subject: [PATCH 10/17] fix: replay ingestion was ignoring pageview urls (#20883) --- .../session-recording/process-event.ts | 19 +++- .../session-recording/process-event.test.ts | 87 ++++++++++++++++++- 2 files changed, 101 insertions(+), 5 deletions(-) diff --git a/plugin-server/src/main/ingestion-queues/session-recording/process-event.ts b/plugin-server/src/main/ingestion-queues/session-recording/process-event.ts index 9795bbcbeef2e..a729fb23fcff6 100644 --- a/plugin-server/src/main/ingestion-queues/session-recording/process-event.ts +++ b/plugin-server/src/main/ingestion-queues/session-recording/process-event.ts @@ -236,6 +236,18 @@ function isAnyMouseActivity(event: RRWebEvent) { ) } +/** + * meta event has type = 4 and event.data.href + * and custom events have type = 5 and _might_ have event.data.payload.href + * + * we don't really care what type of event they are just whether they have a href + */ +function hrefFrom(event: RRWebEvent): string | undefined { + const metaHref = event.data?.href?.trim() + const customHref = event.data?.payload?.href?.trim() + return metaHref || customHref || undefined +} + export const createSessionReplayEvent = ( uuid: string, team_id: number, @@ -275,9 +287,12 @@ export const createSessionReplayEvent = ( keypressCount += 1 } } - if (url === null && !!event.data?.href?.trim().length) { - url = event.data.href + + const eventUrl: string | undefined = hrefFrom(event) + if (url === null && eventUrl) { + url = eventUrl } + if (event.type === RRWebEventType.Plugin && event.data?.plugin === 'rrweb/console@1') { const level = safeLevel(event.data.payload?.level) if (level === 'info') { diff --git a/plugin-server/tests/main/ingestion-queues/session-recording/process-event.test.ts b/plugin-server/tests/main/ingestion-queues/session-recording/process-event.test.ts index 8bca6952603a1..d74d3a2de9e23 100644 --- a/plugin-server/tests/main/ingestion-queues/session-recording/process-event.test.ts +++ b/plugin-server/tests/main/ingestion-queues/session-recording/process-event.test.ts @@ -181,7 +181,44 @@ describe('session recording process event', () => { }, }, { - testDescription: 'first url detection', + testDescription: 'url can be detected in meta event', + snapshotData: { + events_summary: [ + { + timestamp: 1682449093693, + type: 3, + data: {}, + windowId: '1', + }, + { + timestamp: 1682449093469, + type: 4, + data: { + href: 'http://127.0.0.1:8000/the/url', + }, + windowId: '1', + }, + ], + }, + expected: { + click_count: 0, + keypress_count: 0, + mouse_activity_count: 0, + first_url: 'http://127.0.0.1:8000/the/url', + first_timestamp: '2023-04-25 18:58:13.469', + last_timestamp: '2023-04-25 18:58:13.693', + active_milliseconds: 0, // no data.source, so no activity + console_log_count: 0, + console_warn_count: 0, + console_error_count: 0, + size: 163, + event_count: 2, + message_count: 1, + snapshot_source: 'web', + }, + }, + { + testDescription: 'first url detection takes the first url whether meta url or payload url', snapshotData: { events_summary: [ { @@ -189,7 +226,6 @@ describe('session recording process event', () => { type: 5, data: { payload: { - // doesn't match because href is nested in payload href: 'http://127.0.0.1:8000/home', }, }, @@ -209,7 +245,7 @@ describe('session recording process event', () => { click_count: 0, keypress_count: 0, mouse_activity_count: 0, - first_url: 'http://127.0.0.1:8000/second/url', + first_url: 'http://127.0.0.1:8000/home', first_timestamp: '2023-04-25 18:58:13.469', last_timestamp: '2023-04-25 18:58:13.693', active_milliseconds: 0, // no data.source, so no activity @@ -222,6 +258,51 @@ describe('session recording process event', () => { snapshot_source: 'web', }, }, + { + testDescription: 'first url detection can use payload url', + snapshotData: { + events_summary: [ + { + timestamp: 1682449093469, + type: 5, + data: { + payload: { + // we don't read just any URL + 'the-page-url': 'http://127.0.0.1:8000/second/url', + }, + }, + windowId: '1', + }, + { + timestamp: 1682449093693, + type: 5, + data: { + payload: { + // matches href nested in payload + href: 'http://127.0.0.1:8000/my-spa', + }, + }, + windowId: '1', + }, + ], + }, + expected: { + click_count: 0, + keypress_count: 0, + mouse_activity_count: 0, + first_url: 'http://127.0.0.1:8000/my-spa', + first_timestamp: '2023-04-25 18:58:13.469', + last_timestamp: '2023-04-25 18:58:13.693', + active_milliseconds: 0, // no data.source, so no activity + console_log_count: 0, + console_warn_count: 0, + console_error_count: 0, + size: 235, + event_count: 2, + message_count: 1, + snapshot_source: 'web', + }, + }, { testDescription: 'negative timestamps are not included when picking timestamps', snapshotData: { From 7bfb0cff15fd7211e75641f126f0b797be041a8c Mon Sep 17 00:00:00 2001 From: Ben White Date: Wed, 13 Mar 2024 13:29:19 +0100 Subject: [PATCH 11/17] fix: Docker build not reporting errors (#20892) --- .../sceneDashboardChoiceModalLogic.ts | 2 +- .../insights/EmptyStates/EmptyStates.tsx | 2 +- .../filters/DurationTypeSelect.tsx | 2 +- frontend/src/toolbar/index.tsx | 2 +- frontend/src/types.ts | 2 +- frontend/utils.mjs | 28 +++++++++++++------ production.Dockerfile | 10 +++---- 7 files changed, 29 insertions(+), 19 deletions(-) diff --git a/frontend/src/lib/components/SceneDashboardChoice/sceneDashboardChoiceModalLogic.ts b/frontend/src/lib/components/SceneDashboardChoice/sceneDashboardChoiceModalLogic.ts index 171a80749d209..944e4ef450f25 100644 --- a/frontend/src/lib/components/SceneDashboardChoice/sceneDashboardChoiceModalLogic.ts +++ b/frontend/src/lib/components/SceneDashboardChoice/sceneDashboardChoiceModalLogic.ts @@ -1,7 +1,7 @@ import Fuse from 'fuse.js' import { actions, connect, kea, key, listeners, path, props, reducers, selectors } from 'kea' import { eventUsageLogic } from 'lib/utils/eventUsageLogic' -import { posthog } from 'posthog-js' +import posthog from 'posthog-js' import { Scene } from 'scenes/sceneTypes' import { teamLogic } from 'scenes/teamLogic' import { userLogic } from 'scenes/userLogic' diff --git a/frontend/src/scenes/insights/EmptyStates/EmptyStates.tsx b/frontend/src/scenes/insights/EmptyStates/EmptyStates.tsx index 71150131d7b66..6693835f6564c 100644 --- a/frontend/src/scenes/insights/EmptyStates/EmptyStates.tsx +++ b/frontend/src/scenes/insights/EmptyStates/EmptyStates.tsx @@ -11,7 +11,7 @@ import { supportLogic } from 'lib/components/Support/supportLogic' import { IconErrorOutline, IconOpenInNew } from 'lib/lemon-ui/icons' import { Link } from 'lib/lemon-ui/Link' import { Tooltip } from 'lib/lemon-ui/Tooltip' -import { posthog } from 'posthog-js' +import posthog from 'posthog-js' import { funnelDataLogic } from 'scenes/funnels/funnelDataLogic' import { entityFilterLogic } from 'scenes/insights/filters/ActionFilter/entityFilterLogic' import { insightLogic } from 'scenes/insights/insightLogic' diff --git a/frontend/src/scenes/session-recordings/filters/DurationTypeSelect.tsx b/frontend/src/scenes/session-recordings/filters/DurationTypeSelect.tsx index e6585bf4306d4..09c4517b1c4d4 100644 --- a/frontend/src/scenes/session-recordings/filters/DurationTypeSelect.tsx +++ b/frontend/src/scenes/session-recordings/filters/DurationTypeSelect.tsx @@ -1,5 +1,5 @@ import { LemonSelect } from '@posthog/lemon-ui' -import { posthog } from 'posthog-js' +import posthog from 'posthog-js' import { DurationType } from '~/types' diff --git a/frontend/src/toolbar/index.tsx b/frontend/src/toolbar/index.tsx index 66f36bd4f45ad..a5bdb7923fa1c 100644 --- a/frontend/src/toolbar/index.tsx +++ b/frontend/src/toolbar/index.tsx @@ -1,7 +1,7 @@ import '~/styles' import './styles.scss' -import { PostHog } from 'posthog-js' +import type { PostHog } from 'posthog-js' import { createRoot } from 'react-dom/client' import { initKea } from '~/initKea' diff --git a/frontend/src/types.ts b/frontend/src/types.ts index 662f83942c1b6..511595e56a896 100644 --- a/frontend/src/types.ts +++ b/frontend/src/types.ts @@ -20,7 +20,7 @@ import { } from 'lib/constants' import { Dayjs, dayjs } from 'lib/dayjs' import { PopoverProps } from 'lib/lemon-ui/Popover/Popover' -import { PostHog } from 'posthog-js' +import type { PostHog } from 'posthog-js' import { Layout } from 'react-grid-layout' import { LogLevel } from 'rrweb' import { BehavioralFilterKey, BehavioralFilterType } from 'scenes/cohorts/CohortFilters/types' diff --git a/frontend/utils.mjs b/frontend/utils.mjs index 16ad8b984c51e..e4e9bbd5d9c70 100644 --- a/frontend/utils.mjs +++ b/frontend/utils.mjs @@ -194,15 +194,21 @@ function getChunks(result) { } export async function buildInParallel(configs, { onBuildStart, onBuildComplete } = {}) { - await Promise.all( - configs.map((config) => - buildOrWatch({ - ...config, - onBuildStart, - onBuildComplete, - }) + try { + await Promise.all( + configs.map((config) => + buildOrWatch({ + ...config, + onBuildStart, + onBuildComplete, + }) + ) ) - ) + } catch (e) { + if (!isDev) { + process.exit(1) + } + } if (!isDev) { process.exit(0) @@ -338,7 +344,11 @@ export async function buildOrWatch(config) { ...buildResult.metafile, } } catch (e) { - log({ success: false, name, time }) + if (isDev) { + log({ success: false, name, time }) + } else { + throw e + } } } diff --git a/production.Dockerfile b/production.Dockerfile index 9b71e97f34b69..6cac69754aea4 100644 --- a/production.Dockerfile +++ b/production.Dockerfile @@ -23,7 +23,7 @@ # FROM node:18.12.1-bullseye-slim AS frontend-build WORKDIR /code -SHELL ["/bin/bash", "-o", "pipefail", "-c"] +SHELL ["/bin/bash", "-e", "-o", "pipefail", "-c"] COPY package.json pnpm-lock.yaml ./ COPY patches/ patches/ @@ -44,7 +44,7 @@ RUN pnpm build # FROM node:18.12.1-bullseye-slim AS plugin-server-build WORKDIR /code/plugin-server -SHELL ["/bin/bash", "-o", "pipefail", "-c"] +SHELL ["/bin/bash", "-e", "-o", "pipefail", "-c"] # Compile and install Node.js dependencies. COPY ./plugin-server/package.json ./plugin-server/pnpm-lock.yaml ./plugin-server/tsconfig.json ./ @@ -85,7 +85,7 @@ RUN corepack enable && \ # FROM python:3.10.10-slim-bullseye AS posthog-build WORKDIR /code -SHELL ["/bin/bash", "-o", "pipefail", "-c"] +SHELL ["/bin/bash", "-e", "-o", "pipefail", "-c"] # Compile and install Python dependencies. # We install those dependencies on a custom folder that we will @@ -120,7 +120,7 @@ RUN SKIP_SERVICE_VERSION_REQUIREMENTS=1 SECRET_KEY='unsafe secret key for collec # FROM debian:bullseye-slim AS fetch-geoip-db WORKDIR /code -SHELL ["/bin/bash", "-o", "pipefail", "-c"] +SHELL ["/bin/bash", "-e", "-o", "pipefail", "-c"] # Fetch the GeoLite2-City database that will be used for IP geolocation within Django. RUN apt-get update && \ @@ -237,7 +237,7 @@ CMD ["unitd", "--no-daemon", "--control", "unix:/var/run/control.unit.sock"] # FROM unit-131-python-310 WORKDIR /code -SHELL ["/bin/bash", "-o", "pipefail", "-c"] +SHELL ["/bin/bash", "-e", "-o", "pipefail", "-c"] ENV PYTHONUNBUFFERED 1 # Install OS runtime dependencies. From f0f230ea4db228dfbb01cb441616b5d7719b23e6 Mon Sep 17 00:00:00 2001 From: danielxnj <115043334+danielxnj@users.noreply.github.com> Date: Wed, 13 Mar 2024 05:29:29 -0700 Subject: [PATCH 12/17] chore: bump base image to fix vulns (#20885) Co-authored-by: xneyder --- production.Dockerfile | 46 +++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/production.Dockerfile b/production.Dockerfile index 6cac69754aea4..6d43498a5350b 100644 --- a/production.Dockerfile +++ b/production.Dockerfile @@ -21,7 +21,7 @@ # # --------------------------------------------------------- # -FROM node:18.12.1-bullseye-slim AS frontend-build +FROM node:18.19.1-bullseye-slim AS frontend-build WORKDIR /code SHELL ["/bin/bash", "-e", "-o", "pipefail", "-c"] @@ -42,7 +42,7 @@ RUN pnpm build # # --------------------------------------------------------- # -FROM node:18.12.1-bullseye-slim AS plugin-server-build +FROM node:18.19.1-bullseye-slim AS plugin-server-build WORKDIR /code/plugin-server SHELL ["/bin/bash", "-e", "-o", "pipefail", "-c"] @@ -166,19 +166,19 @@ RUN set -ex \ && CC_OPT="$(DEB_BUILD_MAINT_OPTIONS="hardening=+all,-pie" DEB_CFLAGS_MAINT_APPEND="-Wp,-D_FORTIFY_SOURCE=2 -fPIC" dpkg-buildflags --get CFLAGS)" \ && LD_OPT="$(DEB_BUILD_MAINT_OPTIONS="hardening=+all,-pie" DEB_LDFLAGS_MAINT_APPEND="-Wl,--as-needed -pie" dpkg-buildflags --get LDFLAGS)" \ && CONFIGURE_ARGS_MODULES="--prefix=/usr \ - --statedir=/var/lib/unit \ - --control=unix:/var/run/control.unit.sock \ - --runstatedir=/var/run \ - --pid=/var/run/unit.pid \ - --logdir=/var/log \ - --log=/var/log/unit.log \ - --tmpdir=/var/tmp \ - --user=unit \ - --group=unit \ - --openssl \ - --libdir=/usr/lib/$DEB_HOST_MULTIARCH" \ + --statedir=/var/lib/unit \ + --control=unix:/var/run/control.unit.sock \ + --runstatedir=/var/run \ + --pid=/var/run/unit.pid \ + --logdir=/var/log \ + --log=/var/log/unit.log \ + --tmpdir=/var/tmp \ + --user=unit \ + --group=unit \ + --openssl \ + --libdir=/usr/lib/$DEB_HOST_MULTIARCH" \ && CONFIGURE_ARGS="$CONFIGURE_ARGS_MODULES \ - --njs" \ + --njs" \ && make -j $NCPU -C pkg/contrib .njs \ && export PKG_CONFIG_PATH=$(pwd)/pkg/contrib/njs/build \ && ./configure $CONFIGURE_ARGS --cc-opt="$CC_OPT" --ld-opt="$LD_OPT" --modulesdir=/usr/lib/unit/debug-modules --debug \ @@ -200,8 +200,8 @@ RUN set -ex \ && cd \ && rm -rf /usr/src/unit \ && for f in /usr/sbin/unitd /usr/lib/unit/modules/*.unit.so; do \ - ldd $f | awk '/=>/{print $(NF-1)}' | while read n; do dpkg-query -S $n; done | sed 's/^\([^:]\+\):.*$/\1/' | sort | uniq >> /requirements.apt; \ - done \ + ldd $f | awk '/=>/{print $(NF-1)}' | while read n; do dpkg-query -S $n; done | sed 's/^\([^:]\+\):.*$/\1/' | sort | uniq >> /requirements.apt; \ + done \ && apt-mark showmanual | xargs apt-mark auto > /dev/null \ && { [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; } \ && /bin/true \ @@ -209,13 +209,13 @@ RUN set -ex \ && mkdir -p /docker-entrypoint.d/ \ && groupadd --gid 998 unit \ && useradd \ - --uid 998 \ - --gid unit \ - --no-create-home \ - --home /nonexistent \ - --comment "unit user" \ - --shell /bin/false \ - unit \ + --uid 998 \ + --gid unit \ + --no-create-home \ + --home /nonexistent \ + --comment "unit user" \ + --shell /bin/false \ + unit \ && apt-get update \ && apt-get --no-install-recommends --no-install-suggests -y install curl $(cat /requirements.apt) \ && apt-get purge -y --auto-remove build-essential \ From ae6122da0cadf0ffbe636f6710ac3b21032e5add Mon Sep 17 00:00:00 2001 From: Zach Waterfield Date: Wed, 13 Mar 2024 09:10:00 -0400 Subject: [PATCH 13/17] feat: add geo ip plugin to onboarding config step (#20870) * Add geo ip plugin to onboarding config step * Fix tag spacing for plugin drawer * Update UI snapshots for `chromium` (1) * Update UI snapshots for `chromium` (2) * Update UI snapshots for `chromium` (1) * Update UI snapshots for `chromium` (2) * Pull together plugins and configs * Update pluginsLogic.ts * Improve the plugin content * Update UI snapshots for `chromium` (2) * Update UI snapshots for `chromium` (2) * Update UI snapshots for `chromium` (2) * Update UI snapshots for `chromium` (2) * Update UI snapshots for `chromium` (2) * Update UI snapshots for `chromium` (2) * Add types for the plugin content map --------- Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- .../OnboardingProductConfiguration.tsx | 147 +++++++++++++----- .../src/scenes/plugins/edit/PluginDrawer.tsx | 2 +- frontend/src/scenes/plugins/pluginsLogic.ts | 9 ++ 3 files changed, 117 insertions(+), 41 deletions(-) diff --git a/frontend/src/scenes/onboarding/OnboardingProductConfiguration.tsx b/frontend/src/scenes/onboarding/OnboardingProductConfiguration.tsx index 7899d14ee5c0b..b247cc7d4476a 100644 --- a/frontend/src/scenes/onboarding/OnboardingProductConfiguration.tsx +++ b/frontend/src/scenes/onboarding/OnboardingProductConfiguration.tsx @@ -1,11 +1,45 @@ import { LemonDivider, LemonSelect, LemonSwitch } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import React, { useEffect } from 'react' +import { pluginsLogic } from 'scenes/plugins/pluginsLogic' import { OnboardingStepKey } from './onboardingLogic' import { onboardingProductConfigurationLogic, ProductConfigOption } from './onboardingProductConfigurationLogic' import { OnboardingStep } from './OnboardingStep' +type ConfigType = 'toggle' | 'select' +type PluginType = 'plugin' +type ConfigOption = + | { + title: string + description?: string + type: ConfigType + selectOptions?: { label: string; value: string | number }[] + value: boolean | string | number + onChange: (newValue: boolean | string | number) => void + } + | { + title: string + description?: string + type: PluginType + value: boolean + onChange: (newValue: boolean) => void + } + +interface PluginContent { + title: string + description: string +} +type PluginContentMapping = Record +const pluginContentMapping: PluginContentMapping = { + // 1 is the id of the GEO IP plugin + 1: { + title: 'Capture location information', + description: + 'Enrich PostHog events and persons with IP location data. This is useful for understanding where your users are coming from. This setting can be found under the data pipelines apps.', + }, +} + export const OnboardingProductConfiguration = ({ stepKey = OnboardingStepKey.PRODUCT_CONFIGURATION, options, @@ -14,53 +48,86 @@ export const OnboardingProductConfiguration = ({ options: ProductConfigOption[] }): JSX.Element | null => { const { configOptions } = useValues(onboardingProductConfigurationLogic) + const { defaultEnabledPlugins } = useValues(pluginsLogic) const { setConfigOptions, saveConfiguration } = useActions(onboardingProductConfigurationLogic) + const { toggleEnabled } = useActions(pluginsLogic) + useEffect(() => { setConfigOptions(options) }, []) - return configOptions ? ( + const combinedList: ConfigOption[] = [ + ...configOptions.map((option) => ({ + title: option.title, + description: option.description, + type: option.type as ConfigType, + selectOptions: option.selectOptions, + value: option.value, + onChange: (newValue: boolean | string | number) => { + setConfigOptions( + configOptions.map((o) => (o.teamProperty === option.teamProperty ? { ...o, value: newValue } : o)) + ) + }, + })), + ...defaultEnabledPlugins.map((plugin) => { + const pluginContent = pluginContentMapping[plugin.id] + return { + title: pluginContent?.title || plugin.name, + description: pluginContent?.description || plugin.description, + type: 'plugin' as PluginType, + value: plugin.pluginConfig?.enabled || false, + onChange: (newValue: boolean) => { + toggleEnabled({ + id: plugin.pluginConfig?.id, + enabled: newValue, + }) + }, + } + }), + ] + + return combinedList.length > 0 ? ( -

Options

- {configOptions?.map((option: ProductConfigOption, idx) => ( - - -
- - {option.type == 'toggle' ? ( - { - setConfigOptions( - configOptions.map((o) => - o.teamProperty === option.teamProperty ? { ...o, value: checked } : o - ) - ) - }} - className="self-center" - fullWidth={true} - checked={option.value || false} - /> - ) : ( -
- { - setConfigOptions( - configOptions.map((o) => - o.teamProperty === option.teamProperty ? { ...o, value: v } : o - ) - ) - }} - options={option.selectOptions || []} - value={option.value} - /> +
+

Options

+ {combinedList.map((item, idx) => ( + + +
+
+ +

{item.description}

+
+
+ {item.type === 'toggle' ? ( + + ) : item.type === 'plugin' ? ( + + ) : ( +
+ +
+ )}
- )} -

{option.description}

-
-
- ))} +
+ + ))} +
) : null } diff --git a/frontend/src/scenes/plugins/edit/PluginDrawer.tsx b/frontend/src/scenes/plugins/edit/PluginDrawer.tsx index 2543867ce3c28..6313663808f93 100644 --- a/frontend/src/scenes/plugins/edit/PluginDrawer.tsx +++ b/frontend/src/scenes/plugins/edit/PluginDrawer.tsx @@ -118,7 +118,7 @@ export function PluginDrawer(): JSX.Element {
{endWithPunctation(editingPlugin.description)} -
+
{editingPlugin.url && ( diff --git a/frontend/src/scenes/plugins/pluginsLogic.ts b/frontend/src/scenes/plugins/pluginsLogic.ts index e4ce68b032669..0c3ecd7912790 100644 --- a/frontend/src/scenes/plugins/pluginsLogic.ts +++ b/frontend/src/scenes/plugins/pluginsLogic.ts @@ -574,6 +574,15 @@ export const pluginsLogic = kea([ ) }, ], + defaultEnabledPlugins: [ + (s) => [s.filteredEnabledPlugins, s.filteredDisabledPlugins], + (filteredEnabledPlugins, filteredDisabledPlugins) => { + const defaultEnabledPluginIds = [1] // GEO IP plugin + return filteredEnabledPlugins + .concat(filteredDisabledPlugins) + .filter((plugin) => defaultEnabledPluginIds.includes(plugin.id)) + }, + ], pluginUrlToMaintainer: [ (s) => [s.repository], (repository) => { From 36f951fecfcb21d45e3f7bfdf591b9a6645ed313 Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Wed, 13 Mar 2024 14:19:21 +0100 Subject: [PATCH 14/17] fix(insights): worldlier world map (bump trends limit) (#20795) --- .../test/__snapshots__/test_trends.ambr | 636 +++++++++--------- .../trends/test/test_trends_query_runner.py | 11 +- .../insights/trends/trends_query_runner.py | 9 +- 3 files changed, 333 insertions(+), 323 deletions(-) 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 8962eb4593b78..f6eb3748afb2b 100644 --- a/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr +++ b/posthog/hogql_queries/insights/trends/test/__snapshots__/test_trends.ambr @@ -93,9 +93,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_action_filtering_with_cohort_poe_v2 @@ -180,9 +180,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_breakdown_by_group_props_person_on_events @@ -249,9 +249,9 @@ ORDER BY day_start ASC, breakdown_value ASC) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_breakdown_by_group_props_person_on_events.2 @@ -349,9 +349,9 @@ ORDER BY day_start ASC, breakdown_value ASC) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_breakdown_filtering_with_properties_in_new_format @@ -402,9 +402,9 @@ ORDER BY day_start ASC, breakdown_value ASC) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_breakdown_filtering_with_properties_in_new_format.2 @@ -441,9 +441,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_breakdown_weekly_active_users_aggregated @@ -499,9 +499,9 @@ ORDER BY d.timestamp ASC) WHERE and(ifNull(greaterOrEquals(timestamp, toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 23:59:59', 6, 'UTC'))), 0)) GROUP BY breakdown_value - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_breakdown_weekly_active_users_aggregated_materialized @@ -557,9 +557,9 @@ ORDER BY d.timestamp ASC) WHERE and(ifNull(greaterOrEquals(timestamp, toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 23:59:59', 6, 'UTC'))), 0)) GROUP BY breakdown_value - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_breakdown_weekly_active_users_daily_based_on_action @@ -692,9 +692,9 @@ ORDER BY day_start ASC, breakdown_value ASC) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_breakdown_with_filter_groups_person_on_events @@ -761,9 +761,9 @@ ORDER BY day_start ASC, breakdown_value ASC) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_breakdown_with_filter_groups_person_on_events_v2 @@ -850,9 +850,9 @@ ORDER BY day_start ASC, breakdown_value ASC) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_dau_with_breakdown_filtering_with_sampling @@ -910,9 +910,9 @@ ORDER BY day_start ASC, breakdown_value ASC) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_dau_with_breakdown_filtering_with_sampling.2 @@ -970,9 +970,9 @@ ORDER BY day_start ASC, breakdown_value ASC) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_filter_events_by_precalculated_cohort @@ -1054,9 +1054,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_filter_events_by_precalculated_cohort_poe_v2 @@ -1120,9 +1120,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_filtering_by_multiple_groups_person_on_events @@ -1162,9 +1162,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_filtering_by_multiple_groups_person_on_events.1 @@ -1235,9 +1235,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_mau_with_breakdown_filtering_and_prop_filter @@ -1342,9 +1342,9 @@ ORDER BY day_start ASC, breakdown_value ASC) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_mau_with_breakdown_filtering_and_prop_filter_poe_v2 @@ -1423,9 +1423,9 @@ ORDER BY day_start ASC, breakdown_value ASC) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_non_deterministic_timezones @@ -1449,9 +1449,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_person_filtering_in_cohort_in_action @@ -1546,9 +1546,9 @@ ORDER BY day_start ASC, breakdown_value ASC) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_person_filtering_in_cohort_in_action_poe_v2 @@ -1641,9 +1641,9 @@ ORDER BY day_start ASC, breakdown_value ASC) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_person_property_filtering @@ -1685,9 +1685,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_person_property_filtering_clashing_with_event_property @@ -1729,9 +1729,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_person_property_filtering_clashing_with_event_property.1 @@ -1755,9 +1755,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_person_property_filtering_clashing_with_event_property_materialized @@ -1799,9 +1799,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_person_property_filtering_clashing_with_event_property_materialized.1 @@ -1825,9 +1825,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_person_property_filtering_materialized @@ -1869,9 +1869,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_same_day_with_person_on_events_v2 @@ -1909,9 +1909,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_same_day_with_person_on_events_v2.2 @@ -1941,9 +1941,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_same_day_with_person_on_events_v2_latest_override @@ -1987,9 +1987,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_same_day_with_person_on_events_v2_latest_override.2 @@ -2033,9 +2033,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_same_day_with_person_on_events_v2_latest_override.4 @@ -2079,9 +2079,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_daily @@ -2105,9 +2105,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_daily.1 @@ -2138,9 +2138,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_daily.2 @@ -2184,9 +2184,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_daily.3 @@ -2210,9 +2210,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_daily.4 @@ -2270,9 +2270,9 @@ ORDER BY day_start ASC, breakdown_value ASC) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_daily_minus_utc @@ -2296,9 +2296,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_daily_minus_utc.1 @@ -2329,9 +2329,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_daily_minus_utc.2 @@ -2375,9 +2375,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_daily_minus_utc.3 @@ -2401,9 +2401,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_daily_minus_utc.4 @@ -2461,9 +2461,9 @@ ORDER BY day_start ASC, breakdown_value ASC) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_daily_plus_utc @@ -2487,9 +2487,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_daily_plus_utc.1 @@ -2520,9 +2520,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_daily_plus_utc.2 @@ -2566,9 +2566,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_daily_plus_utc.3 @@ -2592,9 +2592,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_daily_plus_utc.4 @@ -2652,9 +2652,9 @@ ORDER BY day_start ASC, breakdown_value ASC) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_hourly_relative_from @@ -2685,9 +2685,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_hourly_relative_from.1 @@ -2711,9 +2711,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_hourly_relative_from_minus_utc @@ -2744,9 +2744,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_hourly_relative_from_minus_utc.1 @@ -2770,9 +2770,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_hourly_relative_from_plus_utc @@ -2803,9 +2803,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_hourly_relative_from_plus_utc.1 @@ -2829,9 +2829,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_weekly @@ -2855,9 +2855,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_weekly.1 @@ -2881,9 +2881,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_weekly_minus_utc @@ -2907,9 +2907,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_weekly_minus_utc.1 @@ -2933,9 +2933,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_weekly_plus_utc @@ -2959,9 +2959,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_timezones_weekly_plus_utc.1 @@ -2985,9 +2985,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trend_breakdown_user_props_with_filter_with_partial_property_pushdowns @@ -3078,9 +3078,9 @@ ORDER BY day_start ASC, breakdown_value ASC) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trend_breakdown_user_props_with_filter_with_partial_property_pushdowns.2 @@ -3171,9 +3171,9 @@ ORDER BY day_start ASC, breakdown_value ASC) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_aggregate_by_distinct_id @@ -3197,9 +3197,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_aggregate_by_distinct_id.1 @@ -3241,9 +3241,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_aggregate_by_distinct_id.2 @@ -3330,9 +3330,9 @@ ORDER BY day_start ASC, breakdown_value ASC) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_aggregate_by_distinct_id.4 @@ -3369,9 +3369,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_aggregate_by_distinct_id.5 @@ -3408,9 +3408,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_aggregate_by_distinct_id.6 @@ -3461,9 +3461,9 @@ ORDER BY day_start ASC, breakdown_value ASC) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_any_event_total_count @@ -3487,9 +3487,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_any_event_total_count.1 @@ -3513,9 +3513,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_breakdown_cumulative @@ -3578,9 +3578,9 @@ ORDER BY day_start ASC, breakdown_value ASC)) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_breakdown_cumulative_poe_v2 @@ -3642,9 +3642,9 @@ ORDER BY day_start ASC, breakdown_value ASC)) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_breakdown_with_session_property_single_aggregate_math_and_breakdown @@ -3684,9 +3684,9 @@ GROUP BY e__session.id, breakdown_value) GROUP BY breakdown_value - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_breakdown_with_session_property_single_aggregate_math_and_breakdown.2 @@ -3726,9 +3726,9 @@ GROUP BY e__session.id, breakdown_value) GROUP BY breakdown_value - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_compare_day_interval_relative_range @@ -3752,9 +3752,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_compare_day_interval_relative_range.1 @@ -3778,9 +3778,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_compare_day_interval_relative_range.2 @@ -3804,9 +3804,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_count_per_user_average_aggregated @@ -3826,9 +3826,9 @@ HAVING ifNull(equals(argMax(person_distinct_id2.is_deleted, person_distinct_id2.version), 0), 0)) AS e__pdi ON equals(e.distinct_id, e__pdi.distinct_id) WHERE and(equals(e.team_id, 2), equals(e.event, 'viewed video'), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')), toIntervalDay(0))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-07 23:59:59', 6, 'UTC')))) GROUP BY e__pdi.person_id)) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_count_per_user_average_aggregated_poe_v2 @@ -3847,9 +3847,9 @@ GROUP BY person_overrides.old_person_id) AS e__override ON equals(e.person_id, e__override.old_person_id) WHERE and(equals(e.team_id, 2), equals(e.event, 'viewed video'), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), minus(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')), toIntervalDay(0))), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-07 23:59:59', 6, 'UTC')))) GROUP BY ifNull(nullIf(e__override.override_person_id, '00000000-0000-0000-0000-000000000000'), e.person_id))) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_count_per_user_average_aggregated_with_event_property_breakdown_with_sampling @@ -3887,9 +3887,9 @@ GROUP BY e__pdi.person_id, breakdown_value) GROUP BY breakdown_value) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_count_per_user_average_daily @@ -3928,9 +3928,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_count_per_user_average_daily_poe_v2 @@ -3968,9 +3968,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_groups_per_day @@ -3994,9 +3994,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_groups_per_day_cumulative @@ -4024,9 +4024,9 @@ GROUP BY day_start ORDER BY day_start ASC)) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_per_day_cumulative @@ -4054,9 +4054,9 @@ GROUP BY day_start ORDER BY day_start ASC)) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_per_day_dau_cumulative @@ -4091,9 +4091,9 @@ GROUP BY day_start ORDER BY day_start ASC)) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_person_breakdown_with_session_property_single_aggregate_math_and_breakdown @@ -4169,9 +4169,9 @@ GROUP BY e__session.id, breakdown_value) GROUP BY breakdown_value - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_with_hogql_math @@ -4195,9 +4195,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_with_session_property_single_aggregate_math @@ -4214,9 +4214,9 @@ GROUP BY id) AS e__session ON equals(e.`$session_id`, e__session.id) WHERE and(equals(e.team_id, 2), greaterOrEquals(toTimeZone(e.timestamp, 'UTC'), toStartOfWeek(assumeNotNull(parseDateTime64BestEffortOrNull('2019-12-28 00:00:00', 6, 'UTC')), 0)), lessOrEquals(toTimeZone(e.timestamp, 'UTC'), assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-04 23:59:59', 6, 'UTC'))), equals(e.event, 'sign up')) GROUP BY e__session.id) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_with_session_property_single_aggregate_math.1 @@ -4233,9 +4233,9 @@ GROUP BY id) AS e__session ON equals(e.`$session_id`, e__session.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 e__session.id) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_with_session_property_total_volume_math @@ -4271,9 +4271,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_with_session_property_total_volume_math.1 @@ -4309,9 +4309,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_with_session_property_total_volume_math_with_breakdowns @@ -4382,9 +4382,9 @@ ORDER BY day_start ASC, breakdown_value ASC) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_trends_with_session_property_total_volume_math_with_breakdowns.2 @@ -4455,9 +4455,9 @@ ORDER BY day_start ASC, breakdown_value ASC) GROUP BY breakdown_value ORDER BY sum(count) DESC, breakdown_value ASC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_weekly_active_users_aggregated_range_narrower_than_week @@ -4487,9 +4487,9 @@ e.actor_id ORDER BY d.timestamp ASC) WHERE and(ifNull(greaterOrEquals(timestamp, toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-11 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-12 23:59:59', 6, 'UTC'))), 0)) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_weekly_active_users_aggregated_range_wider_than_week @@ -4519,9 +4519,9 @@ e.actor_id ORDER BY d.timestamp ASC) WHERE and(ifNull(greaterOrEquals(timestamp, toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-08 23:59:59', 6, 'UTC'))), 0)) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_weekly_active_users_aggregated_range_wider_than_week_with_sampling @@ -4551,9 +4551,9 @@ e.actor_id ORDER BY d.timestamp ASC) WHERE and(ifNull(greaterOrEquals(timestamp, toStartOfDay(assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-01 00:00:00', 6, 'UTC')))), 0), ifNull(lessOrEquals(timestamp, assumeNotNull(parseDateTime64BestEffortOrNull('2020-01-08 23:59:59', 6, 'UTC'))), 0)) - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_weekly_active_users_daily @@ -4597,9 +4597,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_weekly_active_users_daily_minus_utc @@ -4643,9 +4643,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_weekly_active_users_daily_plus_utc @@ -4689,9 +4689,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_weekly_active_users_filtering @@ -4746,9 +4746,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_weekly_active_users_filtering_materialized @@ -4803,9 +4803,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_weekly_active_users_hourly @@ -4849,9 +4849,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_weekly_active_users_weekly @@ -4895,9 +4895,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_weekly_active_users_weekly_minus_utc @@ -4941,9 +4941,9 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- # name: TestTrends.test_weekly_active_users_weekly_plus_utc @@ -4987,8 +4987,8 @@ GROUP BY day_start ORDER BY day_start ASC) ORDER BY sum(count) DESC - LIMIT 100 SETTINGS readonly=2, - max_execution_time=60, - allow_experimental_object_type=1 + LIMIT 10000 SETTINGS readonly=2, + max_execution_time=60, + allow_experimental_object_type=1 ''' # --- diff --git a/posthog/hogql_queries/insights/trends/test/test_trends_query_runner.py b/posthog/hogql_queries/insights/trends/test/test_trends_query_runner.py index 240c90c98c683..104e232a01406 100644 --- a/posthog/hogql_queries/insights/trends/test/test_trends_query_runner.py +++ b/posthog/hogql_queries/insights/trends/test/test_trends_query_runner.py @@ -3,6 +3,8 @@ from unittest.mock import patch from django.test import override_settings from freezegun import freeze_time +from posthog.hogql import ast +from posthog.hogql.constants import MAX_SELECT_RETURNED_ROWS from posthog.hogql.modifiers import create_default_modifiers_for_team from posthog.hogql_queries.insights.trends.trends_query_runner import TrendsQueryRunner from posthog.models.cohort.cohort import Cohort @@ -1115,7 +1117,7 @@ def test_breakdown_values_limit(self): def test_breakdown_values_world_map_limit(self): PropertyDefinition.objects.create(team=self.team, name="breakdown_value", property_type="String") - for value in list(range(30)): + for value in list(range(250)): _create_event( team=self.team, event="$pageview", @@ -1124,7 +1126,7 @@ def test_breakdown_values_world_map_limit(self): properties={"breakdown_value": f"{value}"}, ) - response = self._run_trends_query( + query_runner = self._create_query_runner( "2020-01-09", "2020-01-20", IntervalType.day, @@ -1132,8 +1134,11 @@ def test_breakdown_values_world_map_limit(self): TrendsFilter(display=ChartDisplayType.WorldMap), BreakdownFilter(breakdown="breakdown_value", breakdown_type=BreakdownType.event), ) + query = query_runner.to_queries()[0] + assert isinstance(query, ast.SelectQuery) and query.limit == ast.Constant(value=MAX_SELECT_RETURNED_ROWS) - assert len(response.results) == 30 + response = query_runner.calculate() + assert len(response.results) == 250 def test_previous_period_with_number_display(self): self._create_test_events() diff --git a/posthog/hogql_queries/insights/trends/trends_query_runner.py b/posthog/hogql_queries/insights/trends/trends_query_runner.py index f8ef1f579eebd..ac741cc45f729 100644 --- a/posthog/hogql_queries/insights/trends/trends_query_runner.py +++ b/posthog/hogql_queries/insights/trends/trends_query_runner.py @@ -18,7 +18,7 @@ from posthog.caching.utils import is_stale from posthog.hogql import ast -from posthog.hogql.constants import LimitContext +from posthog.hogql.constants import LimitContext, MAX_SELECT_RETURNED_ROWS from posthog.hogql.printer import to_printed_hogql from posthog.hogql.query import execute_hogql_query from posthog.hogql.timings import HogQLTimings @@ -142,8 +142,13 @@ def to_queries(self) -> List[ast.SelectQuery | ast.SelectUnionQuery]: timings=self.timings, modifiers=self.modifiers, ) + query = query_builder.build_query() - queries.append(query_builder.build_query()) + # Get around the default 100 limit, bump to the max 10000. + # This is useful for the world map view and other cases with a lot of breakdowns. + if isinstance(query, ast.SelectQuery) and query.limit is None: + query.limit = ast.Constant(value=MAX_SELECT_RETURNED_ROWS) + queries.append(query) return queries From 12447e6ea3aef1e7c830d14332096a04d90f1afe Mon Sep 17 00:00:00 2001 From: Michael Matloka Date: Wed, 13 Mar 2024 14:58:21 +0100 Subject: [PATCH 15/17] chore(environments): Add `Project` model (#20783) * chore(environments): Add `Project` model * Add tests and ensure project creation * Make mypy happy * Unify default `Team` name capitalization * Update text in tests and improve code readability * Update query snapshots * Update query snapshots * Update query snapshots * Update query snapshots * Update query snapshots * Add docstring on `Project` * Add tests for transactionality * Update UI snapshots for `chromium` (2) * Update UI snapshots for `chromium` (2) --------- Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- ee/api/test/test_team.py | 10 +-- .../src/scenes/project/CreateProjectModal.tsx | 4 +- latest_migrations.manifest | 2 +- posthog/api/team.py | 31 ++++---- .../api/test/__snapshots__/test_action.ambr | 3 + .../test/__snapshots__/test_annotation.ambr | 3 + .../api/test/__snapshots__/test_decide.ambr | 4 + .../test_early_access_feature.ambr | 2 + .../api/test/__snapshots__/test_element.ambr | 1 + .../test/__snapshots__/test_feature_flag.ambr | 8 ++ .../api/test/__snapshots__/test_insight.ambr | 11 +++ .../test_organization_feature_flag.ambr | 12 +++ .../test/__snapshots__/test_preflight.ambr | 1 + .../api/test/__snapshots__/test_survey.ambr | 1 + .../__snapshots__/test_dashboard.ambr | 73 +++++++++++++++++++ .../__snapshots__/test_notebook.ambr | 4 + posthog/api/test/test_signup.py | 2 +- posthog/api/test/test_team.py | 21 +++--- .../0396_projects_and_environments.py | 59 +++++++++++++++ posthog/models/__init__.py | 2 + .../test/__snapshots__/test_filter.ambr | 5 ++ posthog/models/organization.py | 4 +- posthog/models/project.py | 43 +++++++++++ posthog/models/team/team.py | 42 +++++++++-- posthog/models/test/test_project.py | 73 +++++++++++++++++++ .../test_session_recordings.ambr | 35 +++++++++ .../test_process_scheduled_changes.ambr | 2 + .../test/__snapshots__/test_feature_flag.ambr | 3 + posthog/test/base.py | 26 ++++--- posthog/test/test_team.py | 40 +++++++++- 30 files changed, 471 insertions(+), 56 deletions(-) create mode 100644 posthog/migrations/0396_projects_and_environments.py create mode 100644 posthog/models/project.py create mode 100644 posthog/models/test/test_project.py diff --git a/ee/api/test/test_team.py b/ee/api/test/test_team.py index 22ac5c9b17f56..4df41f7d91fa0 100644 --- a/ee/api/test/test_team.py +++ b/ee/api/test/test_team.py @@ -226,7 +226,7 @@ def test_rename_private_project_as_org_member_forbidden(self): self.team.refresh_from_db() self.assertEqual(response.status_code, HTTP_403_FORBIDDEN) - self.assertEqual(self.team.name, "Default Project") + self.assertEqual(self.team.name, "Default project") def test_rename_private_project_current_as_org_outsider_forbidden(self): self.organization_membership.delete() @@ -368,7 +368,7 @@ def test_fetch_team_as_org_admin_works(self): self.assertEqual(response.status_code, HTTP_200_OK) self.assertDictContainsSubset( { - "name": "Default Project", + "name": "Default project", "access_control": False, "effective_membership_level": OrganizationMembership.Level.ADMIN, }, @@ -385,7 +385,7 @@ def test_fetch_team_as_org_member_works(self): self.assertEqual(response.status_code, HTTP_200_OK) self.assertDictContainsSubset( { - "name": "Default Project", + "name": "Default project", "access_control": False, "effective_membership_level": OrganizationMembership.Level.MEMBER, }, @@ -424,7 +424,7 @@ def test_fetch_private_team_as_org_member_and_project_member(self): self.assertEqual(response.status_code, HTTP_200_OK) self.assertDictContainsSubset( { - "name": "Default Project", + "name": "Default project", "access_control": True, "effective_membership_level": OrganizationMembership.Level.MEMBER, }, @@ -448,7 +448,7 @@ def test_fetch_private_team_as_org_member_and_project_admin(self): self.assertEqual(response.status_code, HTTP_200_OK) self.assertDictContainsSubset( { - "name": "Default Project", + "name": "Default project", "access_control": True, "effective_membership_level": OrganizationMembership.Level.ADMIN, }, diff --git a/frontend/src/scenes/project/CreateProjectModal.tsx b/frontend/src/scenes/project/CreateProjectModal.tsx index b1212bf53aeea..eeba0420612fb 100644 --- a/frontend/src/scenes/project/CreateProjectModal.tsx +++ b/frontend/src/scenes/project/CreateProjectModal.tsx @@ -57,9 +57,9 @@ export function CreateProjectModal({ Learn more in PostHog Docs.

- {currentOrganization?.teams?.some((team) => team.name === 'Default Project') && ( + {currentOrganization?.teams?.some((team) => team.name.toLowerCase() === 'default project') && (

- Bonus tip: You can always rename your "Default Project". + Bonus tip: You can always rename your "Default project".

)} diff --git a/latest_migrations.manifest b/latest_migrations.manifest index 9ade46300e425..ed1766c1754ab 100644 --- a/latest_migrations.manifest +++ b/latest_migrations.manifest @@ -5,7 +5,7 @@ contenttypes: 0002_remove_content_type_name ee: 0015_add_verified_properties otp_static: 0002_throttling otp_totp: 0002_auto_20190420_0723 -posthog: 0395_alter_batchexportbackfill_end_at +posthog: 0396_projects_and_environments sessions: 0001_initial social_django: 0010_uid_db_index two_factor: 0007_auto_20201201_1019 diff --git a/posthog/api/team.py b/posthog/api/team.py index 15ab9bae71a0d..1b615bd692643 100644 --- a/posthog/api/team.py +++ b/posthog/api/team.py @@ -63,24 +63,19 @@ def has_permission(self, request: request.Request, view) -> bool: except ValueError: return False - # if we're not requesting to make a demo project - # and if the org already has more than 1 non-demo project (need to be able to make the initial project) - # and the org isn't allowed to make multiple projects - if ( - ("is_demo" not in request.data or not request.data["is_demo"]) - and organization.teams.exclude(is_demo=True).count() >= 1 - and not organization.is_feature_available(AvailableFeature.ORGANIZATIONS_PROJECTS) - ): - return False - - # if we ARE requesting to make a demo project - # but the org already has a demo project - if ( - "is_demo" in request.data - and request.data["is_demo"] - and organization.teams.exclude(is_demo=False).count() > 0 - ): - return False + if not request.data.get("is_demo"): + # if we're not requesting to make a demo project + # and if the org already has more than 1 non-demo project (need to be able to make the initial project) + # and the org isn't allowed to make multiple projects + if organization.teams.exclude(is_demo=True).count() >= 1 and not organization.is_feature_available( + AvailableFeature.ORGANIZATIONS_PROJECTS + ): + return False + else: + # if we ARE requesting to make a demo project + # but the org already has a demo project + if organization.teams.filter(is_demo=True).count() > 0: + return False # in any other case, we're good to go return True diff --git a/posthog/api/test/__snapshots__/test_action.ambr b/posthog/api/test/__snapshots__/test_action.ambr index 74d16c63216a4..3b71cb1191f91 100644 --- a/posthog/api/test/__snapshots__/test_action.ambr +++ b/posthog/api/test/__snapshots__/test_action.ambr @@ -35,6 +35,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -196,6 +197,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -538,6 +540,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", diff --git a/posthog/api/test/__snapshots__/test_annotation.ambr b/posthog/api/test/__snapshots__/test_annotation.ambr index 62159d2f01b27..b75f8a9661f7e 100644 --- a/posthog/api/test/__snapshots__/test_annotation.ambr +++ b/posthog/api/test/__snapshots__/test_annotation.ambr @@ -35,6 +35,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -118,6 +119,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -454,6 +456,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", diff --git a/posthog/api/test/__snapshots__/test_decide.ambr b/posthog/api/test/__snapshots__/test_decide.ambr index 32ba4e38c4500..1bb6ffa074d20 100644 --- a/posthog/api/test/__snapshots__/test_decide.ambr +++ b/posthog/api/test/__snapshots__/test_decide.ambr @@ -35,6 +35,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -284,6 +285,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -445,6 +447,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -599,6 +602,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", diff --git a/posthog/api/test/__snapshots__/test_early_access_feature.ambr b/posthog/api/test/__snapshots__/test_early_access_feature.ambr index 4db55d14a92a2..7a472bdce6edc 100644 --- a/posthog/api/test/__snapshots__/test_early_access_feature.ambr +++ b/posthog/api/test/__snapshots__/test_early_access_feature.ambr @@ -4,6 +4,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -140,6 +141,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", diff --git a/posthog/api/test/__snapshots__/test_element.ambr b/posthog/api/test/__snapshots__/test_element.ambr index 0729c028fec5f..67722a01933c0 100644 --- a/posthog/api/test/__snapshots__/test_element.ambr +++ b/posthog/api/test/__snapshots__/test_element.ambr @@ -35,6 +35,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", diff --git a/posthog/api/test/__snapshots__/test_feature_flag.ambr b/posthog/api/test/__snapshots__/test_feature_flag.ambr index 615477721a72f..2d11fc4500367 100644 --- a/posthog/api/test/__snapshots__/test_feature_flag.ambr +++ b/posthog/api/test/__snapshots__/test_feature_flag.ambr @@ -444,6 +444,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -645,6 +646,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1006,6 +1008,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1143,6 +1146,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1437,6 +1441,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1527,6 +1532,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1616,6 +1622,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1675,6 +1682,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", diff --git a/posthog/api/test/__snapshots__/test_insight.ambr b/posthog/api/test/__snapshots__/test_insight.ambr index 687de0f873767..5bdf7b792790b 100644 --- a/posthog/api/test/__snapshots__/test_insight.ambr +++ b/posthog/api/test/__snapshots__/test_insight.ambr @@ -674,6 +674,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -726,6 +727,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -854,6 +856,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1092,6 +1095,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1240,6 +1244,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1373,6 +1378,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1485,6 +1491,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1614,6 +1621,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1701,6 +1709,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1787,6 +1796,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1846,6 +1856,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", diff --git a/posthog/api/test/__snapshots__/test_organization_feature_flag.ambr b/posthog/api/test/__snapshots__/test_organization_feature_flag.ambr index c16bf238a6045..38996ee675b74 100644 --- a/posthog/api/test/__snapshots__/test_organization_feature_flag.ambr +++ b/posthog/api/test/__snapshots__/test_organization_feature_flag.ambr @@ -84,6 +84,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -191,6 +192,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -278,6 +280,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -489,6 +492,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -617,6 +621,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -765,6 +770,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -852,6 +858,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1069,6 +1076,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1197,6 +1205,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1249,6 +1258,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1397,6 +1407,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1671,6 +1682,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", diff --git a/posthog/api/test/__snapshots__/test_preflight.ambr b/posthog/api/test/__snapshots__/test_preflight.ambr index b5686cfb79935..b4c8a06aad816 100644 --- a/posthog/api/test/__snapshots__/test_preflight.ambr +++ b/posthog/api/test/__snapshots__/test_preflight.ambr @@ -46,6 +46,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", diff --git a/posthog/api/test/__snapshots__/test_survey.ambr b/posthog/api/test/__snapshots__/test_survey.ambr index 41c085776554e..97493427f7527 100644 --- a/posthog/api/test/__snapshots__/test_survey.ambr +++ b/posthog/api/test/__snapshots__/test_survey.ambr @@ -114,6 +114,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", diff --git a/posthog/api/test/dashboards/__snapshots__/test_dashboard.ambr b/posthog/api/test/dashboards/__snapshots__/test_dashboard.ambr index da4204fc6df38..642602f396f8d 100644 --- a/posthog/api/test/dashboards/__snapshots__/test_dashboard.ambr +++ b/posthog/api/test/dashboards/__snapshots__/test_dashboard.ambr @@ -35,6 +35,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -164,6 +165,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -290,6 +292,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -509,6 +512,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -681,6 +685,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -863,6 +868,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1036,6 +1042,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1306,6 +1313,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1365,6 +1373,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1526,6 +1535,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1638,6 +1648,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1697,6 +1708,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1854,6 +1866,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1982,6 +1995,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -2246,6 +2260,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -2490,6 +2505,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -2624,6 +2640,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -2750,6 +2767,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -2873,6 +2891,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -2974,6 +2993,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -3126,6 +3146,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -3224,6 +3245,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -3353,6 +3375,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -3478,6 +3501,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -3614,6 +3638,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -3940,6 +3965,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -4102,6 +4128,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -4242,6 +4269,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -4329,6 +4357,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -4492,6 +4521,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -4551,6 +4581,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -4676,6 +4707,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -4830,6 +4862,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -5261,6 +5294,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -5408,6 +5442,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -5495,6 +5530,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -5620,6 +5656,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -5706,6 +5743,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -5765,6 +5803,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -5890,6 +5929,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -6032,6 +6072,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -6196,6 +6237,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -6613,6 +6655,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -6770,6 +6813,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -6957,6 +7001,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -7129,6 +7174,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -7272,6 +7318,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -7363,6 +7410,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -7536,6 +7584,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -8182,6 +8231,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -8445,6 +8495,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -8608,6 +8659,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -8667,6 +8719,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -8792,6 +8845,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -8946,6 +9000,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -9071,6 +9126,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -9208,6 +9264,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -9350,6 +9407,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -9663,6 +9721,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -9821,6 +9880,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -9929,6 +9989,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -10062,6 +10123,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -10371,6 +10433,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -10508,6 +10571,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -10695,6 +10759,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -10860,6 +10925,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -10965,6 +11031,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -11133,6 +11200,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -11319,6 +11387,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -11431,6 +11500,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -11599,6 +11669,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -11744,6 +11815,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -11962,6 +12034,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", diff --git a/posthog/api/test/notebooks/__snapshots__/test_notebook.ambr b/posthog/api/test/notebooks/__snapshots__/test_notebook.ambr index 7677f829e61c5..eaa59d4e760a8 100644 --- a/posthog/api/test/notebooks/__snapshots__/test_notebook.ambr +++ b/posthog/api/test/notebooks/__snapshots__/test_notebook.ambr @@ -35,6 +35,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -171,6 +172,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -394,6 +396,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -501,6 +504,7 @@ "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", diff --git a/posthog/api/test/test_signup.py b/posthog/api/test/test_signup.py index d4e71415b4569..e62be1ffd4893 100644 --- a/posthog/api/test/test_signup.py +++ b/posthog/api/test/test_signup.py @@ -78,7 +78,7 @@ def test_api_sign_up(self, mock_capture): self.assertFalse(user.is_email_verified) # Assert that the team was properly created - self.assertEqual(team.name, "Default Project") + self.assertEqual(team.name, "Default project") # Assert that the org was properly created self.assertEqual(organization.name, "Hedgehogs United, LLC") diff --git a/posthog/api/test/test_team.py b/posthog/api/test/test_team.py index 6b336ee1f15c7..d23efe81cf7d8 100644 --- a/posthog/api/test/test_team.py +++ b/posthog/api/test/test_team.py @@ -87,7 +87,7 @@ def test_retrieve_project(self): def test_cant_retrieve_project_from_another_org(self): org = Organization.objects.create(name="New Org") - team = Team.objects.create(organization=org, name="Default Project") + team = Team.objects.create(organization=org, name="Default project") response = self.client.get(f"/api/projects/{team.pk}/") self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) @@ -131,9 +131,9 @@ def test_cant_create_team_without_license_on_selfhosted(self): def test_cant_create_a_second_project_without_license(self): self.organization_membership.level = OrganizationMembership.Level.ADMIN self.organization_membership.save() - response = self.client.post("/api/projects/", {"name": "Hedgebox", "is_demo": False}) - self.assertEqual(Team.objects.count(), 1) + + response = self.client.post("/api/projects/", {"name": "Hedgebox", "is_demo": False}) self.assertEqual(response.status_code, 403) response_data = response.json() self.assertDictContainsSubset( @@ -144,10 +144,10 @@ def test_cant_create_a_second_project_without_license(self): }, response_data, ) + self.assertEqual(Team.objects.count(), 1) # another request without the is_demo parameter response = self.client.post("/api/projects/", {"name": "Hedgebox"}) - self.assertEqual(Team.objects.count(), 1) self.assertEqual(response.status_code, 403) response_data = response.json() self.assertDictContainsSubset( @@ -158,6 +158,7 @@ def test_cant_create_a_second_project_without_license(self): }, response_data, ) + self.assertEqual(Team.objects.count(), 1) @freeze_time("2022-02-08") def test_update_project_timezone(self): @@ -188,7 +189,7 @@ def test_update_project_timezone(self): "type": "Team", }, ], - "name": "Default Project", + "name": "Default project", "short_id": None, "trigger": None, "type": None, @@ -231,7 +232,7 @@ def test_cannot_set_invalid_timezone_for_project(self): def test_cant_update_project_from_another_org(self): org = Organization.objects.create(name="New Org") - team = Team.objects.create(organization=org, name="Default Project") + team = Team.objects.create(organization=org, name="Default project") response = self.client.patch(f"/api/projects/{team.pk}/", {"timezone": "Africa/Accra"}) self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) @@ -282,7 +283,7 @@ def test_delete_team_activity_log(self, mock_capture: MagicMock, mock_delete_bul "created_at": ANY, "detail": { "changes": None, - "name": "Default Project", + "name": "Default project", "short_id": None, "trigger": None, "type": None, @@ -458,7 +459,7 @@ def test_reset_token(self): "type": "Team", }, ], - "name": "Default Project", + "name": "Default project", "short_id": None, "trigger": None, "type": None, @@ -492,7 +493,7 @@ def test_update_primary_dashboard(self): self.assertEqual(response_data["primary_dashboard"], d.id) def test_cant_set_primary_dashboard_to_another_teams_dashboard(self): - team_2 = Team.objects.create(organization=self.organization, name="Default Project") + team_2 = Team.objects.create(organization=self.organization, name="Default project") d = Dashboard.objects.create(name="Test", team=team_2) response = self.client.patch("/api/projects/@current/", {"primary_dashboard": d.id}) @@ -565,7 +566,7 @@ def test_team_float_config_can_be_serialized_to_activity_log(self): "type": "Team", }, ], - "name": "Default Project", + "name": "Default project", "short_id": None, "trigger": None, "type": None, diff --git a/posthog/migrations/0396_projects_and_environments.py b/posthog/migrations/0396_projects_and_environments.py new file mode 100644 index 0000000000000..c571200b4ec51 --- /dev/null +++ b/posthog/migrations/0396_projects_and_environments.py @@ -0,0 +1,59 @@ +# Generated by Django 4.1.13 on 2024-03-08 22:47 + +import django.core.validators +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + dependencies = [ + ("posthog", "0395_alter_batchexportbackfill_end_at"), + ] + + operations = [ + migrations.AlterField( + model_name="team", + name="name", + field=models.CharField( + default="Default project", + max_length=200, + validators=[django.core.validators.MinLengthValidator(1, "Project must have a name!")], + ), + ), + migrations.CreateModel( + name="Project", + fields=[ + ("id", models.BigIntegerField(primary_key=True, serialize=False, verbose_name="ID")), + ( + "name", + models.CharField( + default="Default project", + max_length=200, + validators=[django.core.validators.MinLengthValidator(1, "Project must have a name!")], + ), + ), + ("created_at", models.DateTimeField(auto_now_add=True)), + ( + "organization", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="projects", + related_query_name="project", + to="posthog.organization", + ), + ), + ], + ), + migrations.AddField( + model_name="team", + name="project", + field=models.ForeignKey( + null=True, + blank=False, + on_delete=django.db.models.deletion.CASCADE, + related_name="teams", + related_query_name="team", + to="posthog.project", + ), + ), + ] diff --git a/posthog/models/__init__.py b/posthog/models/__init__.py index d9634fbbdd4c1..9bbaa713e53bf 100644 --- a/posthog/models/__init__.py +++ b/posthog/models/__init__.py @@ -56,6 +56,7 @@ PluginLogEntry, PluginSourceFile, ) +from .project import Project from .property import Property from .property_definition import PropertyDefinition from .sharing_configuration import SharingConfiguration @@ -122,6 +123,7 @@ "PluginConfig", "PluginLogEntry", "PluginSourceFile", + "Project", "Property", "PropertyDefinition", "RetentionFilter", diff --git a/posthog/models/filters/test/__snapshots__/test_filter.ambr b/posthog/models/filters/test/__snapshots__/test_filter.ambr index 534870c348300..1bd4315507dde 100644 --- a/posthog/models/filters/test/__snapshots__/test_filter.ambr +++ b/posthog/models/filters/test/__snapshots__/test_filter.ambr @@ -4,6 +4,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -63,6 +64,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -122,6 +124,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -181,6 +184,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -240,6 +244,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", diff --git a/posthog/models/organization.py b/posthog/models/organization.py index 254ba7ae64d9b..8740a0f34c453 100644 --- a/posthog/models/organization.py +++ b/posthog/models/organization.py @@ -60,11 +60,11 @@ def bootstrap( **kwargs, ) -> Tuple["Organization", Optional["OrganizationMembership"], "Team"]: """Instead of doing the legwork of creating an organization yourself, delegate the details with bootstrap.""" - from .team import Team # Avoiding circular import + from .project import Project # Avoiding circular import with transaction.atomic(): organization = Organization.objects.create(**kwargs) - team = Team.objects.create(organization=organization, **(team_fields or {})) + _, team = Project.objects.create_with_team(organization=organization, team_fields=team_fields) organization_membership: Optional[OrganizationMembership] = None if user is not None: organization_membership = OrganizationMembership.objects.create( diff --git a/posthog/models/project.py b/posthog/models/project.py new file mode 100644 index 0000000000000..c4ead260fb780 --- /dev/null +++ b/posthog/models/project.py @@ -0,0 +1,43 @@ +from typing import TYPE_CHECKING, Optional, Tuple +from django.db import models +from django.db import transaction +from django.core.validators import MinLengthValidator + +if TYPE_CHECKING: + from .team import Team + + +class ProjectManager(models.Manager): + def create_with_team(self, team_fields: Optional[dict] = None, **kwargs) -> Tuple["Project", "Team"]: + from .team import Team + + with transaction.atomic(): + common_id = Team.objects.increment_id_sequence() + project = self.create(id=common_id, **kwargs) + team = Team.objects.create( + id=common_id, organization=project.organization, project=project, **(team_fields or {}) + ) + return project, team + + +class Project(models.Model): + """DO NOT USE YET - you probably mean the `Team` model instead. + + `Project` is part of the environemnts feature, which is a work in progress. + """ + + id: models.BigIntegerField = models.BigIntegerField(primary_key=True, verbose_name="ID") + organization: models.ForeignKey = models.ForeignKey( + "posthog.Organization", + on_delete=models.CASCADE, + related_name="projects", + related_query_name="project", + ) + name: models.CharField = models.CharField( + max_length=200, + default="Default project", + validators=[MinLengthValidator(1, "Project must have a name!")], + ) + created_at: models.DateTimeField = models.DateTimeField(auto_now_add=True) + + objects: ProjectManager = ProjectManager() diff --git a/posthog/models/team/team.py b/posthog/models/team/team.py index c815e75811456..93a486cdc98fc 100644 --- a/posthog/models/team/team.py +++ b/posthog/models/team/team.py @@ -13,8 +13,9 @@ MaxValueValidator, MinValueValidator, ) -from django.db import models +from django.db import models, connection from django.db.models.signals import post_delete, post_save +from django.db import transaction from zoneinfo import ZoneInfo from posthog.clickhouse.query_tagging import tag_queries from posthog.cloud_utils import is_cloud @@ -98,9 +99,23 @@ def create_with_data(self, user: Any = None, default_dashboards: bool = True, ** return team def create(self, *args, **kwargs) -> "Team": - if kwargs.get("organization") is None and kwargs.get("organization_id") is None: - raise ValueError("Creating organization-less projects is prohibited") - return super().create(*args, **kwargs) + from ..project import Project + + with transaction.atomic(): + if "id" not in kwargs: + kwargs["id"] = self.increment_id_sequence() + if kwargs.get("project") is None and kwargs.get("project_id") is None: + # If a parent project is not provided for this team, ensure there is one + # This should be removed once environments are fully rolled out + project_kwargs = {} + if organization := kwargs.get("organization"): + project_kwargs["organization"] = organization + elif organization_id := kwargs.get("organization_id"): + project_kwargs["organization_id"] = organization_id + if name := kwargs.get("name"): + project_kwargs["name"] = name + kwargs["project"] = Project.objects.create(id=kwargs["id"], **project_kwargs) + return super().create(*args, **kwargs) def get_team_from_token(self, token: Optional[str]) -> Optional["Team"]: if not token: @@ -125,6 +140,15 @@ def get_team_from_cache_or_token(self, token: Optional[str]) -> Optional["Team"] except Team.DoesNotExist: return None + def increment_id_sequence(self) -> int: + """Increment the `Team.id` field's sequence and return the latest value. + + Use only when actually neeeded to avoid wasting sequence values.""" + cursor = connection.cursor() + cursor.execute("SELECT nextval('posthog_team_id_seq')") + result = cursor.fetchone() + return result[0] + def get_default_data_attributes() -> List[str]: return ["data-attr"] @@ -146,6 +170,14 @@ class Team(UUIDClassicModel): related_name="teams", related_query_name="team", ) + project: models.ForeignKey = models.ForeignKey( + "posthog.Project", + on_delete=models.CASCADE, + related_name="teams", + related_query_name="team", + null=True, + blank=False, + ) api_token: models.CharField = models.CharField( max_length=200, unique=True, @@ -155,7 +187,7 @@ class Team(UUIDClassicModel): app_urls: ArrayField = ArrayField(models.CharField(max_length=200, null=True), default=list, blank=True) name: models.CharField = models.CharField( max_length=200, - default="Default Project", + default="Default project", validators=[MinLengthValidator(1, "Project must have a name!")], ) slack_incoming_webhook: models.CharField = models.CharField(max_length=500, null=True, blank=True) diff --git a/posthog/models/test/test_project.py b/posthog/models/test/test_project.py new file mode 100644 index 0000000000000..d6bfe0ed3a36a --- /dev/null +++ b/posthog/models/test/test_project.py @@ -0,0 +1,73 @@ +from unittest import mock +from posthog.models.project import Project +from posthog.models.team.team import Team +from posthog.test.base import BaseTest + + +class TestProject(BaseTest): + def test_create_project_with_team_no_team_fields(self): + project, team = Project.objects.create_with_team( + organization=self.organization, + name="Test project", + ) + + self.assertEqual(project.id, team.id) + self.assertEqual(project.name, "Test project") + self.assertEqual(project.organization, self.organization) + + self.assertEqual( + team.name, + "Default project", # TODO: When Environments are rolled out, ensure this says "Default environment" + ) + self.assertEqual(team.organization, self.organization) + self.assertEqual(team.project, project) + + def test_create_project_with_team_with_team_fields(self): + project, team = Project.objects.create_with_team( + organization=self.organization, + name="Test project", + team_fields={"name": "Test team", "access_control": True}, + ) + + self.assertEqual(project.id, team.id) + self.assertEqual(project.name, "Test project") + self.assertEqual(project.organization, self.organization) + + self.assertEqual(team.name, "Test team") + self.assertEqual(team.organization, self.organization) + self.assertEqual(team.project, project) + self.assertEqual(team.access_control, True) + + def test_create_project_with_team_uses_team_id_sequence(self): + expected_common_id = Team.objects.increment_id_sequence() + 1 + + project, team = Project.objects.create_with_team( + organization=self.organization, + name="Test project", + team_fields={"name": "Test team", "access_control": True}, + ) + + self.assertEqual(project.id, expected_common_id) + self.assertEqual(project.name, "Test project") + self.assertEqual(project.organization, self.organization) + + self.assertEqual(team.id, expected_common_id) + self.assertEqual(team.name, "Test team") + self.assertEqual(team.organization, self.organization) + self.assertEqual(team.project, project) + self.assertEqual(team.access_control, True) + + @mock.patch("posthog.models.team.team.Team.objects.create", side_effect=Exception) + def test_create_project_with_team_does_not_create_if_team_fails(self, mock_create): + initial_team_count = Team.objects.count() + initial_project_count = Project.objects.count() + + with self.assertRaises(Exception): + Project.objects.create_with_team( + organization=self.organization, + name="Test project", + team_fields={"name": "Test team", "access_control": True}, + ) + + self.assertEqual(Team.objects.count(), initial_team_count) + self.assertEqual(Project.objects.count(), initial_project_count) diff --git a/posthog/session_recordings/test/__snapshots__/test_session_recordings.ambr b/posthog/session_recordings/test/__snapshots__/test_session_recordings.ambr index e681525e1bf50..fad3c08168d0b 100644 --- a/posthog/session_recordings/test/__snapshots__/test_session_recordings.ambr +++ b/posthog/session_recordings/test/__snapshots__/test_session_recordings.ambr @@ -4,6 +4,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -63,6 +64,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -122,6 +124,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -181,6 +184,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -240,6 +244,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -330,6 +335,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -458,6 +464,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -627,6 +634,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -779,6 +787,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -838,6 +847,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -897,6 +907,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -956,6 +967,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1015,6 +1027,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1074,6 +1087,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1164,6 +1178,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1412,6 +1427,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1502,6 +1518,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1850,6 +1867,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -1940,6 +1958,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -2290,6 +2309,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -2391,6 +2411,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -2743,6 +2764,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -2833,6 +2855,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -3216,6 +3239,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -3306,6 +3330,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -3401,6 +3426,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -3730,6 +3756,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -3820,6 +3847,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -3872,6 +3900,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -4496,6 +4525,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -4586,6 +4616,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -4928,6 +4959,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -5018,6 +5050,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -5373,6 +5406,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -5463,6 +5497,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", diff --git a/posthog/tasks/test/__snapshots__/test_process_scheduled_changes.ambr b/posthog/tasks/test/__snapshots__/test_process_scheduled_changes.ambr index bf055e2fda0ee..d4ed303a0dda1 100644 --- a/posthog/tasks/test/__snapshots__/test_process_scheduled_changes.ambr +++ b/posthog/tasks/test/__snapshots__/test_process_scheduled_changes.ambr @@ -75,6 +75,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -331,6 +332,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", diff --git a/posthog/test/__snapshots__/test_feature_flag.ambr b/posthog/test/__snapshots__/test_feature_flag.ambr index 7e048cf5536d2..2c2169fe4c5f2 100644 --- a/posthog/test/__snapshots__/test_feature_flag.ambr +++ b/posthog/test/__snapshots__/test_feature_flag.ambr @@ -95,6 +95,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -260,6 +261,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", @@ -589,6 +591,7 @@ SELECT "posthog_team"."id", "posthog_team"."uuid", "posthog_team"."organization_id", + "posthog_team"."project_id", "posthog_team"."api_token", "posthog_team"."app_urls", "posthog_team"."name", diff --git a/posthog/test/base.py b/posthog/test/base.py index 20ad2848c607d..8e914dd2b59d5 100644 --- a/posthog/test/base.py +++ b/posthog/test/base.py @@ -59,6 +59,7 @@ TRUNCATE_PERSON_STATIC_COHORT_TABLE_SQL, ) from posthog.models.person.util import bulk_create_persons, create_person +from posthog.models.project import Project from posthog.models.sessions.sql import ( DROP_SESSION_TABLE_SQL, DROP_SESSION_MATERIALIZED_VIEW_SQL, @@ -92,18 +93,20 @@ def _setup_test_data(klass): klass.organization = Organization.objects.create(name=klass.CONFIG_ORGANIZATION_NAME) - klass.team = Team.objects.create( + klass.project, klass.team = Project.objects.create_with_team( organization=klass.organization, - api_token=klass.CONFIG_API_TOKEN, - test_account_filters=[ - { - "key": "email", - "value": "@posthog.com", - "operator": "not_icontains", - "type": "person", - } - ], - has_completed_onboarding_for={"product_analytics": True}, + team_fields=dict( + api_token=klass.CONFIG_API_TOKEN, + test_account_filters=[ + { + "key": "email", + "value": "@posthog.com", + "operator": "not_icontains", + "type": "person", + } + ], + has_completed_onboarding_for={"product_analytics": True}, + ), ) if klass.CONFIG_EMAIL: klass.user = User.objects.create_and_join(klass.organization, klass.CONFIG_EMAIL, klass.CONFIG_PASSWORD) @@ -206,6 +209,7 @@ class PostHogTestCase(SimpleTestCase): # Test data definition stubs organization: Organization = None # type: ignore + project: Project = None # type: ignore team: Team = None # type: ignore user: User = None # type: ignore organization_membership: OrganizationMembership = None # type: ignore diff --git a/posthog/test/test_team.py b/posthog/test/test_team.py index ac95e5c8cc7e7..25f73dcfa87a9 100644 --- a/posthog/test/test_team.py +++ b/posthog/test/test_team.py @@ -12,6 +12,7 @@ User, ) from posthog.models.instance_setting import override_instance_config +from posthog.models.project import Project from posthog.models.team import get_team_in_cache, util from posthog.plugins.test.mock import mocked_plugin_requests_get from posthog.utils import PersonOnEventsMode @@ -45,7 +46,7 @@ def test_save_updates_cache(self): self.assertEqual(cached_team.api_token, api_token) self.assertEqual(cached_team.uuid, str(team.uuid)) self.assertEqual(cached_team.id, team.id) - self.assertEqual(cached_team.name, "Default Project") + self.assertEqual(cached_team.name, "Default project") team.name = "New name" team.session_recording_opt_in = True @@ -165,3 +166,40 @@ def test_team_on_self_hosted_uses_instance_setting_to_determine_person_on_events team = Team.objects.create_with_data(organization=self.organization) self.assertEqual(team.person_on_events_mode, PersonOnEventsMode.DISABLED) mock_feature_enabled.assert_not_called() + + def test_each_team_gets_project_with_default_name_and_same_id(self): + # Can be removed once environments are fully rolled out + team = Team.objects.create_with_data(organization=self.organization) + + project = Project.objects.filter(id=team.id).first() + + assert project is not None + self.assertEqual(project.name, "Default project") + + def test_each_team_gets_project_with_custom_name_and_same_id(self): + # Can be removed once environments are fully rolled out + team = Team.objects.create_with_data(organization=self.organization, name="Hogflix") + + project = Project.objects.filter(id=team.id).first() + + assert project is not None + self.assertEqual(project.organization, team.organization) + self.assertEqual(project.name, "Hogflix") + + @mock.patch("posthog.models.project.Project.objects.create", side_effect=Exception) + def test_team_not_created_if_project_creation_fails(self, mock_create): + # Can be removed once environments are fully rolled out + initial_team_count = Team.objects.count() + initial_project_count = Project.objects.count() + + with self.assertRaises(Exception): + Team.objects.create_with_data(organization=self.organization, name="Hogflix") + + self.assertEqual(Team.objects.count(), initial_team_count) + self.assertEqual(Project.objects.count(), initial_project_count) + + def test_increment_id_sequence(self): + initial = Team.objects.increment_id_sequence() + subsequent = Team.objects.increment_id_sequence() + + self.assertEqual(subsequent, initial + 1) From e5f54e2c48fd28ac16046999962b0a8985e1ef17 Mon Sep 17 00:00:00 2001 From: David Newell Date: Wed, 13 Mar 2024 14:12:54 +0000 Subject: [PATCH 16/17] chore: remove antd from correlation table (#20852) --- .eslintrc.js | 1 + ...-funnelcorrelationtable--default--dark.png | Bin 0 -> 17473 bytes ...funnelcorrelationtable--default--light.png | Bin 0 -> 17487 bytes ...ropertycorrelationtable--default--dark.png | Bin 0 -> 20726 bytes ...opertycorrelationtable--default--light.png | Bin 0 -> 20800 bytes ...pp-insights--user-paths--light--webkit.png | Bin 92239 -> 92283 bytes .../team_id/insights/funnelCorrelation.json | 48 +++ .../views/Funnels/CorrelationActionsCell.tsx | 12 +- .../views/Funnels/FunnelCorrelationTable.scss | 86 +---- .../FunnelCorrelationTable.stories.tsx | 60 ++++ .../views/Funnels/FunnelCorrelationTable.tsx | 316 ++++++++---------- ...FunnelPropertyCorrelationTable.stories.tsx | 62 ++++ .../FunnelPropertyCorrelationTable.tsx | 224 ++++++------- frontend/src/styles/global.scss | 44 --- 14 files changed, 433 insertions(+), 420 deletions(-) create mode 100644 frontend/__snapshots__/insights-funnelcorrelationtable--default--dark.png create mode 100644 frontend/__snapshots__/insights-funnelcorrelationtable--default--light.png create mode 100644 frontend/__snapshots__/insights-funnelpropertycorrelationtable--default--dark.png create mode 100644 frontend/__snapshots__/insights-funnelpropertycorrelationtable--default--light.png create mode 100644 frontend/src/mocks/fixtures/api/projects/team_id/insights/funnelCorrelation.json create mode 100644 frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.stories.tsx create mode 100644 frontend/src/scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.stories.tsx diff --git a/.eslintrc.js b/.eslintrc.js index fb43d7405b68f..7aa24b651e2d9 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -130,6 +130,7 @@ module.exports = { 'Radio', 'Divider', 'Popconfirm', + 'Table', ], message: 'please use the Lemon equivalent instead', }, diff --git a/frontend/__snapshots__/insights-funnelcorrelationtable--default--dark.png b/frontend/__snapshots__/insights-funnelcorrelationtable--default--dark.png new file mode 100644 index 0000000000000000000000000000000000000000..84a18b7fb79c398117164e07747b3469d167038f GIT binary patch literal 17473 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 Gp#KFbGG=f9 literal 0 HcmV?d00001 diff --git a/frontend/__snapshots__/insights-funnelcorrelationtable--default--light.png b/frontend/__snapshots__/insights-funnelcorrelationtable--default--light.png new file mode 100644 index 0000000000000000000000000000000000000000..e4be6621b8608af00088cedb5db6f216393e57e0 GIT binary patch literal 17487 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 literal 0 HcmV?d00001 diff --git a/frontend/__snapshots__/insights-funnelpropertycorrelationtable--default--dark.png b/frontend/__snapshots__/insights-funnelpropertycorrelationtable--default--dark.png new file mode 100644 index 0000000000000000000000000000000000000000..9985decbb9d509e236c17895cb4342392e855480 GIT binary patch literal 20726 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 literal 0 HcmV?d00001 diff --git a/frontend/__snapshots__/insights-funnelpropertycorrelationtable--default--light.png b/frontend/__snapshots__/insights-funnelpropertycorrelationtable--default--light.png new file mode 100644 index 0000000000000000000000000000000000000000..130a1b2035d9f993cf4c046e967050542ec4026f GIT binary patch literal 20800 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

BwM}{NT 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 YBpc*4US4sM00000NkvWtM6N<$f^Zl`umAu6 delta 73303 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 $QaK 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%0Dyo(0cAv@zpPz!NI!mbM_F>( z$HkW+6Y3QX(2be8qWf61#97NZFO=T@YSl=N05%H=bu0@g%nN^Qhzwe2{;Qjd+Tf}| zxmHEO!Td-x)X=kt5ugK2493hZyCUml;klyKVG<#FfC^C60Z4Rh2xv^{MG=Yh(W8q&vKUP|U$<9tMd2HCL0*u6{W{1sgzq#irS3 z8~S-CA|bGAr-wRYfdL|aTSXEMr`08&TbPvgbfBygr)vTlPA6GwF)0PR-_??Kq#*+p zIV|**Y@Y2R`1e*+4qmS_3~=nP8YJr2*ujG|b<9<(L8g91gM+F6xDW7u@AZ~OZ=BtK zk6?wTOcRB&?pwHtFqS=x^CJPBt6K=mr(c7tj9CRNVE_~0(3JT$T7xKr*2oHCrvtz4 zIA^#|Lw9+B%TnWwx!2c(^WIQ?E=upDZeLXpf3R9@yc>+8DcF&F2oQQZ8J5z>(2$ecA z`u-w2UmH8TfVJ~u)IY(kUdNt8}s802z1m7GpO1KIaNe&hMOQO1KvO{LOd^!ZBFjH;+I3rRzU2e0ebm09fJ3;RRy^pZwcAvmV%$nw9X*Uj-2|V~(TumXTY263*7^ zBzoeZvGb^ZnYP5gJAY9~|6X%YB=e<2F6#IogeWUJmJPnR3YaHi>wOAK?#oJ10Rgha zKYw|nStcp?9+t`~DkuDrMC!oRU%X#|u zl3|gUQny{b%DBpTz+jz6)SPweRO;JDyB}6E8%DP56)!(fxpFjv2{&?~#{&(tEYasQmDI~Sz{d~h4{8pVJuVli(fEaP{$fN#~LXiaQi7WUrzS13$mKc|T4 z(q75EJExWgB;ZgRPNLDnML)T=Bn`TQQ3lgQi3Q^}aCOKEThLxn*5dZ9SD04GLPH)) zG!<4?!LGrApFV}-Ib<%p zbi$i2fAI~c9Xq_u)OM?aW!OB;vgHJt8C$FcABjtOYw=X?;Gro>(y}A*iy8VK_QA_?^SV!$~9*kog;?ZRf(P~BLijv~yyzgct znd1nJO!yj&K1s@~TVh<&g`UHsz>bHM0W6aO6r_VlMhy8aP#FxhU zQBX5)NeFZytbT}XTe;#b#eTG3bd;PFdq}&);@SMsUb5VCf!_mbiFqjJ=NIB9sQeo` z0daQqFc9yonD}=VEz6L%PC?J%0(|kyZ{EteuB3C@_a`2x&L8(K?h;Qi^+t6mTa zRZqCgzWikezdx0}9(r+Vj~j)mN)P0aU7Sr z-355=U~~PMIrXIekH6qmy7f|cQqL^G8O332E*^EAV*{YVF;og@6d{fzC_JgURoZI1 zz_(mLwM>&U7vJ@AgCcQRHz`JzdHOG!UZlj;VK+nwF>WOE9|B@Vt&Cb3f5p>i==|4H zmP4)&$7kD9UWjdv93TD!IXG6^*{gd{kFVsL7g)j!4F@V?FYn7Nk-)ONM0Yc44)>&9uocC5Ny}v_W>|S ze{h$xn+Q*Kx~2UBU(Re&fAV^}-xRa^ST^<%Bg^cpa5T2w+ zf}#nE#Nka`#$FSbjyS!}+YimoBb4(^FW`8HFH-Evh`$#XdrtH(f8_zFg%3$9bQ|() zx4;(wXSUi!PQ1ShZMDo22r(i!zt1n8s87C-auY&`_d!Dc%ZH32>6@oO@w%yL7%vf0yM_Vv%CW5fAzSaIJ)T_iestVhRAt1#&}b`E!%qQMc}PdGg+K z04i~ap=c3=-EW=Fy5;{*1ivu-hVp7*Cfz5EL!Q1gIRN za*PX?BWr!yC1@lLo%IlWazYsGQjuJI72NwWSo=MZ{~?7UyuaP0 zB0;reUhNS;a~Ed&EM5GA3OTNo)%0SojTd5In9Y-KX!a&e%?-OLLWr^TUygLIg@;+h RTmS$707*qo1w^hwV1oTJ^CtiR diff --git a/frontend/src/mocks/fixtures/api/projects/team_id/insights/funnelCorrelation.json b/frontend/src/mocks/fixtures/api/projects/team_id/insights/funnelCorrelation.json new file mode 100644 index 0000000000000..8cec658c64f97 --- /dev/null +++ b/frontend/src/mocks/fixtures/api/projects/team_id/insights/funnelCorrelation.json @@ -0,0 +1,48 @@ +{ + "result": { + "events": [ + { + "success_count": 472, + "success_people_url": "http://localhost:8000/api/person/funnel/correlation/?breakdown_attribution_type=first_touch&breakdown_normalize_url=False&date_from=-7d&display=FunnelViz", + "failure_count": 9, + "failure_people_url": "http://localhost:8000/api/person/funnel/correlation/?breakdown_attribution_type=first_touch&breakdown_normalize_url=False&date_from=-7d&display=FunnelViz", + "odds_ratio": 3006.964172813488, + "correlation_type": "success", + "event": { + "event": "score updated", + "properties": {}, + "elements": [] + } + }, + { + "success_count": 60, + "success_people_url": "http://localhost:8000/api/person/funnel/correlation/?breakdown_attribution_type=first_touch&breakdown_normalize_url=False&date_from=-7d&display=FunnelViz", + "failure_count": 0, + "failure_people_url": "http://localhost:8000/api/person/funnel/correlation/?breakdown_attribution_type=first_touch&breakdown_normalize_url=False&date_from=-7d&display=FunnelViz", + "odds_ratio": 2750.7485294117646, + "correlation_type": "success", + "event": { + "event": "onboard teammate clicked", + "properties": {}, + "elements": [] + } + }, + { + "success_count": 65, + "success_people_url": "http://localhost:8000/api/person/funnel/correlation/?breakdown_attribution_type=first_touch&breakdown_normalize_url=False&date_from=-7d&display=FunnelViz", + "failure_count": 75, + "failure_people_url": "http://localhost:8000/api/person/funnel/correlation/?breakdown_attribution_type=first_touch&breakdown_normalize_url=False&date_from=-7d&display=FunnelViz", + "odds_ratio": 35.41070956534874, + "correlation_type": "failure", + "event": { + "event": "cancellation prompt shown", + "properties": {}, + "elements": [] + } + } + ], + "skewed": true + }, + "last_refresh": "2024-03-11T18:44:25.153943Z", + "is_cached": false +} diff --git a/frontend/src/scenes/insights/views/Funnels/CorrelationActionsCell.tsx b/frontend/src/scenes/insights/views/Funnels/CorrelationActionsCell.tsx index be2c03904366c..5f221e1f4ec1b 100644 --- a/frontend/src/scenes/insights/views/Funnels/CorrelationActionsCell.tsx +++ b/frontend/src/scenes/insights/views/Funnels/CorrelationActionsCell.tsx @@ -82,8 +82,16 @@ const CorrelationActionsCellComponent = ({ buttons }: CorrelationActionsCellComp visible={popoverOpen} actionable onClickOutside={() => setPopoverOpen(false)} - overlay={buttons.map((props, index) => ( - + overlay={buttons.map(({ onClick, ...props }, index) => ( + { + setPopoverOpen(false) + onClick && onClick(e) + }} + {...props} + /> ))} > } onClick={() => setPopoverOpen(!popoverOpen)} /> diff --git a/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.scss b/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.scss index 54f874cc774d1..2a6aa3cbaeba6 100644 --- a/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.scss +++ b/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.scss @@ -1,84 +1,12 @@ -.funnel-correlation-table { - margin-top: 1rem; - overflow: hidden; - border: 1px solid var(--border); - border-radius: var(--radius); - - .ant-table { - thead th { - border-bottom: 1px solid var(--border); - } - } - - .funnel-correlation-header { - display: flex; - flex-wrap: wrap; - place-content: space-between space-between; - align-items: center; - align-self: stretch; - padding: 0.25rem 0.5rem; - background: var(--mid); - border-top-left-radius: var(--radius); - border-top-right-radius: var(--radius); - - .table-header { - display: flex; - align-items: center; - font-size: 11px; - font-style: normal; - font-weight: bold; - line-height: 16px; - color: var(--default); - text-transform: uppercase; - letter-spacing: 0.02em; +.FunnelCorrelationTable { + .table-options { + .LemonCheckbox:not(:last-child) label { + border-right: none; + border-radius: var(--radius) 0 0 var(--radius); } - .table-options { - display: flex; - flex-grow: 1; - align-items: center; - justify-content: flex-end; - - .title { - /* identical to box height, or 145% */ - - display: flex; - align-items: center; - margin: 5px; - font-family: var(--font-sans); - font-size: 11px; - font-style: normal; - font-weight: 600; - line-height: 16px; - color: var(--muted); - text-transform: uppercase; - letter-spacing: 0.02em; - } - - .LemonCheckbox:not(:last-child) label { - border-right: none; - border-radius: var(--radius) 0 0 var(--radius); - } - - .LemonCheckbox:last-child label { - border-radius: 0 var(--radius) var(--radius) 0; - } - } - } - - .column-info { - padding-left: 4px; - color: var(--muted-alt); - cursor: pointer; - } - - .nested-properties-table { - margin: 1rem; - border: 1px solid var(--border); - border-radius: var(--radius); - - thead th { - border-bottom: 1px solid var(--border); + .LemonCheckbox:last-child label { + border-radius: 0 var(--radius) var(--radius) 0; } } } diff --git a/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.stories.tsx b/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.stories.tsx new file mode 100644 index 0000000000000..5e3c0b5b1eb5a --- /dev/null +++ b/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.stories.tsx @@ -0,0 +1,60 @@ +import { Meta, StoryFn, StoryObj } from '@storybook/react' +import { BindLogic } from 'kea' +import { useState } from 'react' +import { insightLogic } from 'scenes/insights/insightLogic' + +import { mswDecorator } from '~/mocks/browser' +import funnelCorrelation from '~/mocks/fixtures/api/projects/team_id/insights/funnelCorrelation.json' +import { dataNodeLogic, DataNodeLogicProps } from '~/queries/nodes/DataNode/dataNodeLogic' +import { filtersToQueryNode } from '~/queries/nodes/InsightQuery/utils/filtersToQueryNode' +import { insightVizDataNodeKey } from '~/queries/nodes/InsightViz/InsightViz' +import { getCachedResults } from '~/queries/nodes/InsightViz/utils' +import { InsightLogicProps } from '~/types' + +import { FunnelCorrelationTable } from './FunnelCorrelationTable' + +type Story = StoryObj +const meta: Meta = { + title: 'Insights/FunnelCorrelationTable', + component: FunnelCorrelationTable, + decorators: [ + mswDecorator({ + post: { + 'api/projects/:team_id/insights/funnel/correlation/': funnelCorrelation, + }, + }), + ], +} +export default meta + +let uniqueNode = 0 + +const Template: StoryFn = () => { + const [dashboardItemId] = useState(() => `FunnelCorrelationTableStory.${uniqueNode++}`) + + // eslint-disable-next-line @typescript-eslint/no-var-requires + const insight = require('../../../../mocks/fixtures/api/projects/team_id/insights/funnelLeftToRight.json') + const filters = insight.filters + const cachedInsight = { ...insight, short_id: dashboardItemId, filters } + + const insightProps = { dashboardItemId, doNotLoad: true, cachedInsight } as InsightLogicProps + const querySource = filtersToQueryNode(filters) + + const dataNodeLogicProps: DataNodeLogicProps = { + query: querySource, + key: insightVizDataNodeKey(insightProps), + cachedResults: getCachedResults(insightProps.cachedInsight, querySource), + doNotLoad: insightProps.doNotLoad, + } + + return ( + + + + + + ) +} + +export const Default: Story = Template.bind({}) +Default.args = {} diff --git a/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.tsx b/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.tsx index 64c09c60ba08f..6d8d366250397 100644 --- a/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.tsx +++ b/frontend/src/scenes/insights/views/Funnels/FunnelCorrelationTable.tsx @@ -1,9 +1,8 @@ import './FunnelCorrelationTable.scss' -import { IconCollapse, IconExpand, IconInfo, IconTrending } from '@posthog/icons' -import { LemonCheckbox } from '@posthog/lemon-ui' -import { ConfigProvider, Empty, Table } from 'antd' -import Column from 'antd/lib/table/Column' +import { IconTrending } from '@posthog/icons' +import { LemonCheckbox, LemonTable } from '@posthog/lemon-ui' +import { Empty } from 'antd' import { useActions, useValues } from 'kea' import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' import { VisibilitySensor } from 'lib/components/VisibilitySensor/VisibilitySensor' @@ -11,7 +10,6 @@ import { IconSelectEvents, IconTrendingDown } from 'lib/lemon-ui/icons' import { LemonButton } from 'lib/lemon-ui/LemonButton' import { Link } from 'lib/lemon-ui/Link' import { Spinner } from 'lib/lemon-ui/Spinner/Spinner' -import { Tooltip } from 'lib/lemon-ui/Tooltip' import { capitalizeFirstLetter } from 'lib/utils' import { useEffect } from 'react' import { funnelCorrelationLogic } from 'scenes/funnels/funnelCorrelationLogic' @@ -86,7 +84,7 @@ export function FunnelCorrelationTable(): JSX.Element | null { return ( <> -

+
{is_success ? ( ) : ( @@ -99,7 +97,7 @@ export function FunnelCorrelationTable(): JSX.Element | null { )} -

+

{capitalizeFirstLetter(aggregationTargetLabel.plural)}{' '} {querySource?.aggregation_group_type_index != undefined ? 'that' : 'who'} converted were{' '} @@ -153,67 +151,70 @@ export function FunnelCorrelationTable(): JSX.Element | null { } return ( -
+

Correlated properties

- record.event.event} - className="nested-properties-table" - scroll={{ x: 'max-content' }} + rowKey={(record: FunnelCorrelation) => 'nested' + record.event.event} pagination={{ pageSize: 5, hideOnSinglePage: true, - onChange: (page, page_size) => + onBackward: () => + reportCorrelationInteraction( + FunnelCorrelationResultsType.EventWithProperties, + 'pagination change', + { direction: 'backward', page_size: 5 } + ), + onForward: () => reportCorrelationInteraction( FunnelCorrelationResultsType.EventWithProperties, 'pagination change', - { page, page_size } + { direction: 'forward', page_size: 5 } ), }} - > - renderOddsRatioTextRecord(record)} - align="left" - /> - renderSuccessCount(record)} - width={90} - align="center" - /> - renderFailureCount(record)} - width={120} - align="center" - /> - - } - align="center" - width={30} - /> -
+ columns={[ + { + title: 'Property', + key: 'eventName', + render: (_, record) => renderOddsRatioTextRecord(record), + }, + { + title: 'Completed', + key: 'success_count', + render: (_, record) => renderSuccessCount(record), + width: 90, + align: 'center', + }, + { + title: 'Dropped off', + key: 'failure_count', + render: (_, record) => renderFailureCount(record), + width: 120, + align: 'center', + }, + { + key: 'actions', + width: 30, + align: 'center', + render: (_, record) => , + }, + ]} + />
) } return steps.length > 1 ? ( -
- - +
+ + CORRELATED EVENTS - -

CORRELATION

+ +

CORRELATION

- - loadedEventCorrelationsTableOnce ? ( - - ) : ( - <> - {/* eslint-disable-next-line react/forbid-dom-props */} -

- Highlight events which are likely to have affected the conversion rate within the - funnel.{' '} - - Learn more about correlation analysis. - -

- loadEventCorrelations({})} - type="secondary" - className="mx-auto mt-2" - > - Load results - - - ) - } - > - record.event.event} - pagination={{ - pageSize: 5, - hideOnSinglePage: true, - onChange: () => - reportCorrelationInteraction(FunnelCorrelationResultsType.Events, 'load more'), - }} - expandable={{ - expandedRowRender: (record) => renderNestedTable(record.event.event), - expandedRowKeys: nestedTableExpandedKeys, - rowExpandable: () => querySource?.aggregation_group_type_index === undefined, - expandIcon: ({ expanded, onExpand, record, expandable }) => { - if (!expandable) { - return null - } - return expanded ? ( - - } - active - noPadding - onClick={(e) => { - removeNestedTableExpandedKey(record.event.event) - onExpand(record, e) - }} - /> - + + renderOddsRatioTextRecord(record), + }, + { + title: 'Completed', + tooltip: `${capitalizeFirstLetter(aggregationTargetLabel.plural)} ${ + querySource?.aggregation_group_type_index != undefined ? 'that' : 'who' + } performed the event and completed the entire funnel.`, + dataIndex: 'success_count', + render: (_, record) => renderSuccessCount(record), + align: 'center', + width: 90, + }, + { + title: 'Dropped off', + dataIndex: 'failure_count', + tooltip: `${capitalizeFirstLetter(aggregationTargetLabel.plural)} ${ + querySource?.aggregation_group_type_index != undefined ? 'that' : 'who' + } performed the event and did not complete the entire funnel.`, + render: (_, record) => renderFailureCount(record), + align: 'center', + width: 120, + }, + { + key: 'actions', + width: 30, + render: (_, record: FunnelCorrelation) => , + }, + ]} + dataSource={correlationValues} + emptyState={ +
+
+ {loadedEventCorrelationsTableOnce ? ( + ) : ( - + <> +

+ Highlight events which are likely to have affected the conversion rate + within the funnel.{' '} + + Learn more about correlation analysis. + +

} - noPadding - onClick={(e) => { - !eventHasPropertyCorrelations(record.event.event) && - loadEventWithPropertyCorrelations(record.event.event) - addNestedTableExpandedKey(record.event.event) - onExpand(record, e) - }} - /> -
- ) - }, - }} - > - renderOddsRatioTextRecord(record)} - align="left" - ellipsis - /> - - Completed - - - -
- } - key="success_count" - render={(_, record: FunnelCorrelation) => renderSuccessCount(record)} - width={90} - align="center" - /> - - Dropped off - - {capitalizeFirstLetter(aggregationTargetLabel.plural)}{' '} - {querySource?.aggregation_group_type_index != undefined - ? 'that' - : 'who'}{' '} - performed the event and did not complete the entire funnel. - - } - > - - -
- } - key="failure_count" - render={(_, record: FunnelCorrelation) => renderFailureCount(record)} - width={120} - align="center" - /> - } - width={30} - /> -
-
+ onClick={() => loadEventCorrelations({})} + type="secondary" + className="mx-auto mt-2" + > + Load results + + + )} +
+
+ } + loading={correlationsLoading} + size="small" + rowKey={(record) => record.event.event} + pagination={{ + pageSize: 5, + hideOnSinglePage: true, + onBackward: () => + reportCorrelationInteraction(FunnelCorrelationResultsType.Events, 'load more'), + onForward: () => reportCorrelationInteraction(FunnelCorrelationResultsType.Events, 'load more'), + }} + expandable={{ + expandedRowRender: (record) => renderNestedTable(record.event.event), + isRowExpanded: (record) => nestedTableExpandedKeys.includes(record.event.event), + rowExpandable: () => querySource?.aggregation_group_type_index === undefined, + onRowExpand: (record) => { + !eventHasPropertyCorrelations(record.event.event) && + loadEventWithPropertyCorrelations(record.event.event) + addNestedTableExpandedKey(record.event.event) + }, + onRowCollapse: (record) => { + removeNestedTableExpandedKey(record.event.event) + }, + }} + />
) : null diff --git a/frontend/src/scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.stories.tsx b/frontend/src/scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.stories.tsx new file mode 100644 index 0000000000000..a6f3ffab3a668 --- /dev/null +++ b/frontend/src/scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.stories.tsx @@ -0,0 +1,62 @@ +import { Meta, StoryFn, StoryObj } from '@storybook/react' +import { BindLogic } from 'kea' +import { taxonomicFilterMocksDecorator } from 'lib/components/TaxonomicFilter/__mocks__/taxonomicFilterMocksDecorator' +import { useState } from 'react' +import { insightLogic } from 'scenes/insights/insightLogic' + +import { mswDecorator } from '~/mocks/browser' +import funnelCorrelation from '~/mocks/fixtures/api/projects/team_id/insights/funnelCorrelation.json' +import { dataNodeLogic, DataNodeLogicProps } from '~/queries/nodes/DataNode/dataNodeLogic' +import { filtersToQueryNode } from '~/queries/nodes/InsightQuery/utils/filtersToQueryNode' +import { insightVizDataNodeKey } from '~/queries/nodes/InsightViz/InsightViz' +import { getCachedResults } from '~/queries/nodes/InsightViz/utils' +import { InsightLogicProps } from '~/types' + +import { FunnelPropertyCorrelationTable } from './FunnelPropertyCorrelationTable' + +type Story = StoryObj +const meta: Meta = { + title: 'Insights/FunnelPropertyCorrelationTable', + component: FunnelPropertyCorrelationTable, + decorators: [ + mswDecorator({ + post: { + 'api/projects/:team_id/insights/funnel/correlation/': funnelCorrelation, + }, + }), + taxonomicFilterMocksDecorator, + ], +} +export default meta + +let uniqueNode = 0 + +const Template: StoryFn = () => { + const [dashboardItemId] = useState(() => `FunnelPropertyCorrelationTableStory.${uniqueNode++}`) + + // eslint-disable-next-line @typescript-eslint/no-var-requires + const insight = require('../../../../mocks/fixtures/api/projects/team_id/insights/funnelLeftToRight.json') + const filters = insight.filters + const cachedInsight = { ...insight, short_id: dashboardItemId, filters } + + const insightProps = { dashboardItemId, doNotLoad: true, cachedInsight } as InsightLogicProps + const querySource = filtersToQueryNode(filters) + + const dataNodeLogicProps: DataNodeLogicProps = { + query: querySource, + key: insightVizDataNodeKey(insightProps), + cachedResults: getCachedResults(insightProps.cachedInsight, querySource), + doNotLoad: insightProps.doNotLoad, + } + + return ( + + + + + + ) +} + +export const Default: Story = Template.bind({}) +Default.args = {} diff --git a/frontend/src/scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.tsx b/frontend/src/scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.tsx index 1099c1f56c483..70093d8891962 100644 --- a/frontend/src/scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.tsx +++ b/frontend/src/scenes/insights/views/Funnels/FunnelPropertyCorrelationTable.tsx @@ -1,9 +1,8 @@ import './FunnelCorrelationTable.scss' -import { IconInfo, IconTrending } from '@posthog/icons' -import { LemonButton, LemonCheckbox } from '@posthog/lemon-ui' -import { ConfigProvider, Empty, Table } from 'antd' -import Column from 'antd/lib/table/Column' +import { IconTrending } from '@posthog/icons' +import { LemonButton, LemonCheckbox, LemonTable } from '@posthog/lemon-ui' +import { Empty } from 'antd' import { useActions, useValues } from 'kea' import { PropertyKeyInfo } from 'lib/components/PropertyKeyInfo' import { PropertySelect } from 'lib/components/PropertySelect/PropertySelect' @@ -12,7 +11,6 @@ import { VisibilitySensor } from 'lib/components/VisibilitySensor/VisibilitySens import { IconSelectProperties, IconTrendingDown } from 'lib/lemon-ui/icons' import { Link } from 'lib/lemon-ui/Link' import { Popover } from 'lib/lemon-ui/Popover' -import { Tooltip } from 'lib/lemon-ui/Tooltip' import { capitalizeFirstLetter } from 'lib/utils' import { useEffect } from 'react' import { useState } from 'react' @@ -105,7 +103,7 @@ export function FunnelPropertyCorrelationTable(): JSX.Element | null { return ( <> -

+
{is_success ? ( ) : ( @@ -118,7 +116,7 @@ export function FunnelPropertyCorrelationTable(): JSX.Element | null { )} -

+
{capitalizeFirstLetter(aggregationTargetLabel.plural)}{' '} {querySource?.aggregation_group_type_index != undefined ? 'that' : 'who'} converted were{' '} @@ -135,15 +133,17 @@ export function FunnelPropertyCorrelationTable(): JSX.Element | null { return steps.length > 1 ? ( -
-
-
+
+
+
CORRELATED PROPERTIES
-
+
-

PROPERTIES

+

+ PROPERTIES +

setIsPropertiesOpen(false)} @@ -163,7 +163,14 @@ export function FunnelPropertyCorrelationTable(): JSX.Element | null { {propertyNames.length === 1 && propertyNames[0] === '$all' ? ( <>All properties selected ) : ( - setAllProperties()}> + { + setAllProperties() + setIsPropertiesOpen(false) + }} + > Select all properties )} @@ -183,7 +190,9 @@ export function FunnelPropertyCorrelationTable(): JSX.Element | null {
-

CORRELATION

+

+ CORRELATION +

- - loadedPropertyCorrelationsTableOnce ? ( - - ) : ( - <> - {/* eslint-disable-next-line react/forbid-dom-props */} -

- Highlight properties which are likely to have affected the conversion rate within - the funnel.{' '} - - Learn more about correlation analysis. - -

- setIsPropertiesOpen(true)} - className="mx-auto mt-2" - > - Select properties - - - ) + + renderOddsRatioTextRecord(record), + }, + { + title: 'Completed', + tooltip: `${capitalizeFirstLetter(aggregationTargetLabel.plural)} ${ + querySource?.aggregation_group_type_index != undefined ? 'that' : 'who' + } have this property and completed the entire funnel.`, + key: 'success_count', + render: (_, record) => renderSuccessCount(record), + width: 90, + align: 'center', + }, + { + title: 'Dropped off', + tooltip: `${capitalizeFirstLetter(aggregationTargetLabel.plural)} ${ + querySource?.aggregation_group_type_index != undefined ? 'that' : 'who' + } have this property and did not complete the entire funnel.`, + key: 'failure_count', + render: (_, record) => renderFailureCount(record), + width: 120, + align: 'center', + }, + { + key: 'actions', + width: 30, + align: 'center', + render: (_, record) => , + }, + ]} + dataSource={propertyCorrelationValues} + loading={propertyCorrelationsLoading} + rowKey={(record) => record.event.event} + size="small" + emptyState={ +
+
+ {loadedPropertyCorrelationsTableOnce ? ( + + ) : ( + <> +

+ Highlight properties which are likely to have affected the conversion rate + within the funnel.{' '} + + Learn more about correlation analysis. + +

+ setIsPropertiesOpen(true)} + className="mx-auto mt-2" + > + Select properties + + + )} +
+
} - > - record.event.event} - pagination={{ - pageSize: 5, - hideOnSinglePage: true, - onChange: (page, page_size) => - reportCorrelationInteraction( - FunnelCorrelationResultsType.Properties, - 'pagination change', - { - page, - page_size, - } - ), - }} - > - renderOddsRatioTextRecord(record)} - align="left" - /> - - Completed - - - - - } - key="success_count" - render={(_, record: FunnelCorrelation) => renderSuccessCount(record)} - width={90} - align="center" - /> - - Dropped off - - {capitalizeFirstLetter(aggregationTargetLabel.plural)}{' '} - {querySource?.aggregation_group_type_index != undefined - ? 'that' - : 'who'}{' '} - have this property and did not complete the entire funnel. - - } - > - - - - } - key="failure_count" - render={(_, record: FunnelCorrelation) => renderFailureCount(record)} - width={120} - align="center" - /> - ( - - )} - align="center" - width={30} - /> -
-
+ pagination={{ + pageSize: 5, + hideOnSinglePage: true, + onBackward: () => + reportCorrelationInteraction(FunnelCorrelationResultsType.Properties, 'pagination change', { + direction: 'backward', + page_size: 5, + }), + onForward: () => + reportCorrelationInteraction(FunnelCorrelationResultsType.Properties, 'pagination change', { + direction: 'forward', + page_size: 5, + }), + }} + />
) : null diff --git a/frontend/src/styles/global.scss b/frontend/src/styles/global.scss index 5fcef01ceee1e..37ea604986d6a 100644 --- a/frontend/src/styles/global.scss +++ b/frontend/src/styles/global.scss @@ -506,11 +506,6 @@ body { fill: var(--border-3000); } - .ant-table-tbody > tr.ant-table-row:hover > td, - .ant-table-tbody > tr > td.ant-table-cell-row-hover { - background-color: var(--mid); - } - @include dark-mode-3000-variables; } @@ -685,45 +680,6 @@ body { max-width: 350px; } - .ant-table-thead > tr > th, - .ant-table-small .ant-table-thead > tr > th { - background: var(--mid); - } - - .ant-table-tbody > tr > td { - border-bottom-color: var(--border); - } - - .ant-table-tbody > tr.ant-table-placeholder:hover > td { - background: inherit; - } - - .ant-table { - color: var(--text-3000); - } - - .ant-pagination-item-active { - border-color: var(--link); - - & a { - color: var(--link); - } - - & a:hover { - color: var(--link); - } - } - - .ant-pagination-item:hover { - border-color: var(--link); - } - - .ant-pagination-item:hover a, - .ant-pagination-prev:hover .ant-pagination-item-link, - .ant-pagination-next:hover .ant-pagination-item-link { - color: var(--link); - } - @include common-variables; } From 4fd93da4d9e11c3daa85f813951c273f8f270d88 Mon Sep 17 00:00:00 2001 From: Michael Matloka Date: Wed, 13 Mar 2024 15:15:53 +0100 Subject: [PATCH 17/17] fix(insights): Allow zero decimal places (#20725) --- frontend/src/scenes/insights/aggregationAxisFormat.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/scenes/insights/aggregationAxisFormat.ts b/frontend/src/scenes/insights/aggregationAxisFormat.ts index 68d4d9ed245e8..965a1ff3834d6 100644 --- a/frontend/src/scenes/insights/aggregationAxisFormat.ts +++ b/frontend/src/scenes/insights/aggregationAxisFormat.ts @@ -23,15 +23,15 @@ export const formatAggregationAxisValue = ( ): string => { value = Number(value) const decimalPlaces = - (trendsFilter as TrendsFilter)?.decimalPlaces || (trendsFilter as Partial)?.decimal_places + (trendsFilter as TrendsFilter)?.decimalPlaces ?? (trendsFilter as Partial)?.decimal_places const aggregationAxisFormat = - (trendsFilter as TrendsFilter)?.aggregationAxisFormat || + (trendsFilter as TrendsFilter)?.aggregationAxisFormat ?? (trendsFilter as Partial)?.aggregation_axis_format const aggregationAxisPrefix = - (trendsFilter as TrendsFilter)?.aggregationAxisPrefix || + (trendsFilter as TrendsFilter)?.aggregationAxisPrefix ?? (trendsFilter as Partial)?.aggregation_axis_prefix const aggregationAxisPostfix = - (trendsFilter as TrendsFilter)?.aggregationAxisPostfix || + (trendsFilter as TrendsFilter)?.aggregationAxisPostfix ?? (trendsFilter as Partial)?.aggregation_axis_postfix let formattedValue = humanFriendlyNumber(value, decimalPlaces) if (aggregationAxisFormat) {

3&#M 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�rK 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 *4Z9&9+91lZ6^5aA*|1W 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