From eabb30c495004d13fc59a807f10a19fe3fb7d9d3 Mon Sep 17 00:00:00 2001 From: Tom Owers Date: Tue, 23 Jul 2024 18:25:05 +0100 Subject: [PATCH 01/33] chore(data-warehouse): Use the common temporal heartbeater (#23915) --- .../temporal/data_imports/external_data_job.py | 2 +- .../workflow_activities/import_data.py | 15 ++------------- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/posthog/temporal/data_imports/external_data_job.py b/posthog/temporal/data_imports/external_data_job.py index 4fc6e10200866..058745c2753ec 100644 --- a/posthog/temporal/data_imports/external_data_job.py +++ b/posthog/temporal/data_imports/external_data_job.py @@ -177,7 +177,7 @@ async def run(self, inputs: ExternalDataWorkflowInputs): await workflow.execute_activity( import_data_activity, job_inputs, - heartbeat_timeout=dt.timedelta(minutes=1), + heartbeat_timeout=dt.timedelta(minutes=2), **timeout_params, ) # type: ignore diff --git a/posthog/temporal/data_imports/workflow_activities/import_data.py b/posthog/temporal/data_imports/workflow_activities/import_data.py index 2cba1697ef44e..9849339e785c7 100644 --- a/posthog/temporal/data_imports/workflow_activities/import_data.py +++ b/posthog/temporal/data_imports/workflow_activities/import_data.py @@ -4,6 +4,7 @@ from temporalio import activity +from posthog.temporal.common.heartbeat import Heartbeater from posthog.temporal.data_imports.pipelines.helpers import aremove_reset_pipeline, aupdate_job_count from posthog.temporal.data_imports.pipelines.pipeline import DataImportPipeline, PipelineInputs @@ -13,7 +14,6 @@ get_external_data_job, ) from posthog.temporal.common.logger import bind_temporal_worker_logger -import asyncio from structlog.typing import FilteringBoundLogger from posthog.warehouse.models.external_data_schema import ExternalDataSchema, aget_schema_by_id from posthog.warehouse.models.ssh_tunnel import SSHTunnel @@ -250,15 +250,7 @@ async def _run( schema: ExternalDataSchema, reset_pipeline: bool, ): - # Temp background heartbeat for now - async def heartbeat() -> None: - while True: - await asyncio.sleep(10) - activity.heartbeat() - - heartbeat_task = asyncio.create_task(heartbeat()) - - try: + async with Heartbeater(): table_row_counts = await DataImportPipeline( job_inputs, source, logger, reset_pipeline, schema.is_incremental ).run() @@ -266,6 +258,3 @@ async def heartbeat() -> None: await aupdate_job_count(inputs.run_id, inputs.team_id, total_rows_synced) await aremove_reset_pipeline(inputs.source_id) - finally: - heartbeat_task.cancel() - await asyncio.wait([heartbeat_task]) From 64b0b11bfb89454ffb6e1f8365b00e763fc38666 Mon Sep 17 00:00:00 2001 From: Tom Owers Date: Tue, 23 Jul 2024 18:25:13 +0100 Subject: [PATCH 02/33] chore(data-warehouse): Upgraded sql alchemy (#23916) --- requirements.in | 4 ++-- requirements.txt | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/requirements.in b/requirements.in index 3d586910f5cd5..9d5e15a4e59a5 100644 --- a/requirements.in +++ b/requirements.in @@ -74,10 +74,10 @@ semantic_version==2.8.5 scikit-learn==1.5.0 slack_sdk==3.17.1 snowflake-connector-python==3.6.0 -snowflake-sqlalchemy==1.5.3 +snowflake-sqlalchemy==1.6.1 social-auth-app-django==5.0.0 social-auth-core==4.3.0 -sqlalchemy==1.4.52 +sqlalchemy==2.0.31 sshtunnel==0.4.0 statshog==1.0.6 structlog==23.2.0 diff --git a/requirements.txt b/requirements.txt index d5df2bf41f3e5..92b14db6600f4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -570,7 +570,7 @@ snowflake-connector-python==3.6.0 # via # -r requirements.in # snowflake-sqlalchemy -snowflake-sqlalchemy==1.5.3 +snowflake-sqlalchemy==1.6.1 # via -r requirements.in social-auth-app-django==5.0.0 # via -r requirements.in @@ -582,7 +582,7 @@ sortedcontainers==2.4.0 # via # snowflake-connector-python # trio -sqlalchemy==1.4.52 +sqlalchemy==2.0.31 # via # -r requirements.in # snowflake-sqlalchemy @@ -641,6 +641,7 @@ typing-extensions==4.7.1 # pydantic-core # qrcode # snowflake-connector-python + # sqlalchemy # stripe # temporalio tzdata==2023.3 From 96650f0033e52e6369b162e5834cfa62f71aabb4 Mon Sep 17 00:00:00 2001 From: Dylan Martin Date: Tue, 23 Jul 2024 13:55:59 -0400 Subject: [PATCH 03/33] fix(surveys): use label not enum (#23903) --- frontend/src/scenes/surveys/SurveyView.tsx | 8 ++------ .../src/scenes/surveys/surveyActivityDescriber.test.tsx | 4 +++- frontend/src/scenes/surveys/surveyActivityDescriber.tsx | 5 ++++- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/frontend/src/scenes/surveys/SurveyView.tsx b/frontend/src/scenes/surveys/SurveyView.tsx index c95426b72e236..8672ea7070b68 100644 --- a/frontend/src/scenes/surveys/SurveyView.tsx +++ b/frontend/src/scenes/surveys/SurveyView.tsx @@ -27,7 +27,7 @@ import { SurveyType, } from '~/types' -import { SURVEY_EVENT_NAME } from './constants' +import { SURVEY_EVENT_NAME, SurveyQuestionLabel } from './constants' import { SurveyDisplaySummary } from './Survey' import { SurveyAPIEditor } from './SurveyAPIEditor' import { SurveyFormAppearance } from './SurveyFormAppearance' @@ -293,11 +293,7 @@ export function SurveyView({ id }: { id: string }): JSX.Element { {survey.questions[0].question && ( <> Type - - {survey.questions.length > 1 - ? 'Multiple questions' - : capitalizeFirstLetter(survey.questions[0].type)} - + {SurveyQuestionLabel[survey.questions[0].type]} {pluralize( survey.questions.length, diff --git a/frontend/src/scenes/surveys/surveyActivityDescriber.test.tsx b/frontend/src/scenes/surveys/surveyActivityDescriber.test.tsx index cc9dca12c7a6c..5d56642390a89 100644 --- a/frontend/src/scenes/surveys/surveyActivityDescriber.test.tsx +++ b/frontend/src/scenes/surveys/surveyActivityDescriber.test.tsx @@ -255,7 +255,9 @@ describe('describeQuestionChanges', () => { ) expect(getTextContent(changes[1])).toBe('made question optional') expect(getTextContent(changes[2])).toBe('changed button text from "Next" to "Continue"') - expect(getTextContent(changes[3])).toBe('changed question type from single_choice to multiple_choice') + expect(getTextContent(changes[3])).toBe( + 'changed question type from Single choice select to Multiple choice select' + ) expect(getTextContent(changes[4])).toBe('added choices: Maybe') expect(getTextContent(changes[5])).toBe('updated branching logic') }) diff --git a/frontend/src/scenes/surveys/surveyActivityDescriber.tsx b/frontend/src/scenes/surveys/surveyActivityDescriber.tsx index 4a355ca7b2eb7..8b538b9ae35cb 100644 --- a/frontend/src/scenes/surveys/surveyActivityDescriber.tsx +++ b/frontend/src/scenes/surveys/surveyActivityDescriber.tsx @@ -25,6 +25,8 @@ import { SurveyQuestionType, } from '~/types' +import { SurveyQuestionLabel } from './constants' + const isEmptyOrUndefined = (value: any): boolean => value === undefined || value === null || value === '' const nameOrLinkToSurvey = ( @@ -440,7 +442,8 @@ export function describeQuestionChanges(before: SurveyQuestion, after: SurveyQue before.type !== after.type ? [ <> - changed question type from {before.type} to {after.type} + changed question type from {SurveyQuestionLabel[before.type]} to{' '} + {SurveyQuestionLabel[after.type]} , ] : [] From b80317beaec51982ba572a818482611313390425 Mon Sep 17 00:00:00 2001 From: Tom Owers Date: Tue, 23 Jul 2024 19:54:26 +0100 Subject: [PATCH 04/33] feat(data-warehouse): Turn off `should_sync` on jobs that have non retryable errors (#23918) --- .../data_imports/external_data_job.py | 13 +++ .../external_data/test_external_data_job.py | 93 +++++++++++++++++++ posthog/warehouse/data_load/service.py | 30 +++--- .../warehouse/models/external_data_schema.py | 26 ++++++ 4 files changed, 150 insertions(+), 12 deletions(-) diff --git a/posthog/temporal/data_imports/external_data_job.py b/posthog/temporal/data_imports/external_data_job.py index 058745c2753ec..76ca85db9be5f 100644 --- a/posthog/temporal/data_imports/external_data_job.py +++ b/posthog/temporal/data_imports/external_data_job.py @@ -32,6 +32,14 @@ ExternalDataSource, ) from posthog.temporal.common.logger import bind_temporal_worker_logger +from posthog.warehouse.models.external_data_schema import aupdate_should_sync + + +Non_Retryable_Schema_Errors = [ + "NoSuchTableError", + "401 Client Error: Unauthorized for url: https://api.stripe.com", + "403 Client Error: Forbidden for url: https://api.stripe.com", +] @dataclasses.dataclass @@ -54,6 +62,11 @@ async def update_external_data_job_model(inputs: UpdateExternalDataJobStatusInpu f"External data job failed for external data schema {inputs.schema_id} with error: {inputs.internal_error}" ) + has_non_retryable_error = any(error in inputs.internal_error for error in Non_Retryable_Schema_Errors) + if has_non_retryable_error: + logger.info("Schema has a non-retryable error - turning off syncing") + await aupdate_should_sync(schema_id=inputs.schema_id, team_id=inputs.team_id, should_sync=False) + await sync_to_async(update_external_job_status)( run_id=uuid.UUID(inputs.id), status=inputs.status, 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 4734740cb4b47..aa0a83d9941a6 100644 --- a/posthog/temporal/tests/external_data/test_external_data_job.py +++ b/posthog/temporal/tests/external_data/test_external_data_job.py @@ -262,6 +262,99 @@ async def test_update_external_job_activity(activity_environment, team, **kwargs assert schema.status == ExternalDataJob.Status.COMPLETED +@pytest.mark.django_db(transaction=True) +@pytest.mark.asyncio +async def test_update_external_job_activity_with_retryable_error(activity_environment, team, **kwargs): + new_source = await sync_to_async(ExternalDataSource.objects.create)( + source_id=uuid.uuid4(), + connection_id=uuid.uuid4(), + destination_id=uuid.uuid4(), + team=team, + status="running", + source_type="Stripe", + ) + + schema = await sync_to_async(ExternalDataSchema.objects.create)( + name=PIPELINE_TYPE_SCHEMA_DEFAULT_MAPPING[new_source.source_type][0], + team_id=team.id, + source_id=new_source.pk, + should_sync=True, + ) + + new_job = await sync_to_async(create_external_data_job)( + team_id=team.id, + external_data_source_id=new_source.pk, + workflow_id=activity_environment.info.workflow_id, + workflow_run_id=activity_environment.info.workflow_run_id, + external_data_schema_id=schema.id, + ) + + inputs = UpdateExternalDataJobStatusInputs( + id=str(new_job.id), + run_id=str(new_job.id), + status=ExternalDataJob.Status.COMPLETED, + latest_error=None, + internal_error="Some other retryable error", + schema_id=str(schema.pk), + team_id=team.id, + ) + + await activity_environment.run(update_external_data_job_model, inputs) + await sync_to_async(new_job.refresh_from_db)() + await sync_to_async(schema.refresh_from_db)() + + assert new_job.status == ExternalDataJob.Status.COMPLETED + assert schema.status == ExternalDataJob.Status.COMPLETED + assert schema.should_sync is True + + +@pytest.mark.django_db(transaction=True) +@pytest.mark.asyncio +async def test_update_external_job_activity_with_non_retryable_error(activity_environment, team, **kwargs): + new_source = await sync_to_async(ExternalDataSource.objects.create)( + source_id=uuid.uuid4(), + connection_id=uuid.uuid4(), + destination_id=uuid.uuid4(), + team=team, + status="running", + source_type="Stripe", + ) + + schema = await sync_to_async(ExternalDataSchema.objects.create)( + name=PIPELINE_TYPE_SCHEMA_DEFAULT_MAPPING[new_source.source_type][0], + team_id=team.id, + source_id=new_source.pk, + should_sync=True, + ) + + new_job = await sync_to_async(create_external_data_job)( + team_id=team.id, + external_data_source_id=new_source.pk, + workflow_id=activity_environment.info.workflow_id, + workflow_run_id=activity_environment.info.workflow_run_id, + external_data_schema_id=schema.id, + ) + + inputs = UpdateExternalDataJobStatusInputs( + id=str(new_job.id), + run_id=str(new_job.id), + status=ExternalDataJob.Status.COMPLETED, + latest_error=None, + internal_error="NoSuchTableError: TableA", + schema_id=str(schema.pk), + team_id=team.id, + ) + with mock.patch("posthog.warehouse.models.external_data_schema.external_data_workflow_exists", return_value=False): + await activity_environment.run(update_external_data_job_model, inputs) + + await sync_to_async(new_job.refresh_from_db)() + await sync_to_async(schema.refresh_from_db)() + + assert new_job.status == ExternalDataJob.Status.COMPLETED + assert schema.status == ExternalDataJob.Status.COMPLETED + assert schema.should_sync is False + + @pytest.mark.django_db(transaction=True) @pytest.mark.asyncio async def test_run_stripe_job(activity_environment, team, minio_client, **kwargs): diff --git a/posthog/warehouse/data_load/service.py b/posthog/warehouse/data_load/service.py index 2425f186b5fa7..46b3bc5b8de01 100644 --- a/posthog/warehouse/data_load/service.py +++ b/posthog/warehouse/data_load/service.py @@ -1,5 +1,6 @@ from dataclasses import asdict from datetime import timedelta +from typing import TYPE_CHECKING from temporalio.client import ( Schedule, @@ -28,7 +29,6 @@ unpause_schedule, ) from posthog.temporal.utils import ExternalDataWorkflowInputs -from posthog.warehouse.models import ExternalDataSource import temporalio from temporalio.client import Client as TemporalClient from asgiref.sync import async_to_sync @@ -36,10 +36,12 @@ from django.conf import settings import s3fs -from posthog.warehouse.models.external_data_schema import ExternalDataSchema +if TYPE_CHECKING: + from posthog.warehouse.models import ExternalDataSource + from posthog.warehouse.models.external_data_schema import ExternalDataSchema -def get_sync_schedule(external_data_schema: ExternalDataSchema): +def get_sync_schedule(external_data_schema: "ExternalDataSchema"): inputs = ExternalDataWorkflowInputs( team_id=external_data_schema.team_id, external_data_schema_id=external_data_schema.id, @@ -66,7 +68,9 @@ def get_sync_schedule(external_data_schema: ExternalDataSchema): ) -def get_sync_frequency(external_data_schema: ExternalDataSchema): +def get_sync_frequency(external_data_schema: "ExternalDataSchema"): + from posthog.warehouse.models.external_data_schema import ExternalDataSchema + if external_data_schema.sync_frequency == ExternalDataSchema.SyncFrequency.DAILY: return timedelta(days=1) elif external_data_schema.sync_frequency == ExternalDataSchema.SyncFrequency.WEEKLY: @@ -78,8 +82,8 @@ def get_sync_frequency(external_data_schema: ExternalDataSchema): def sync_external_data_job_workflow( - external_data_schema: ExternalDataSchema, create: bool = False -) -> ExternalDataSchema: + external_data_schema: "ExternalDataSchema", create: bool = False +) -> "ExternalDataSchema": temporal = sync_connect() schedule = get_sync_schedule(external_data_schema) @@ -93,8 +97,8 @@ def sync_external_data_job_workflow( async def a_sync_external_data_job_workflow( - external_data_schema: ExternalDataSchema, create: bool = False -) -> ExternalDataSchema: + external_data_schema: "ExternalDataSchema", create: bool = False +) -> "ExternalDataSchema": temporal = await async_connect() schedule = get_sync_schedule(external_data_schema) @@ -107,17 +111,17 @@ async def a_sync_external_data_job_workflow( return external_data_schema -def trigger_external_data_source_workflow(external_data_source: ExternalDataSource): +def trigger_external_data_source_workflow(external_data_source: "ExternalDataSource"): temporal = sync_connect() trigger_schedule(temporal, schedule_id=str(external_data_source.id)) -def trigger_external_data_workflow(external_data_schema: ExternalDataSchema): +def trigger_external_data_workflow(external_data_schema: "ExternalDataSchema"): temporal = sync_connect() trigger_schedule(temporal, schedule_id=str(external_data_schema.id)) -async def a_trigger_external_data_workflow(external_data_schema: ExternalDataSchema): +async def a_trigger_external_data_workflow(external_data_schema: "ExternalDataSchema"): temporal = await async_connect() await a_trigger_schedule(temporal, schedule_id=str(external_data_schema.id)) @@ -153,7 +157,7 @@ def delete_external_data_schedule(schedule_id: str): raise -async def a_delete_external_data_schedule(external_data_source: ExternalDataSource): +async def a_delete_external_data_schedule(external_data_source: "ExternalDataSource"): temporal = await async_connect() try: await a_delete_schedule(temporal, schedule_id=str(external_data_source.id)) @@ -185,4 +189,6 @@ def delete_data_import_folder(folder_path: str): def is_any_external_data_job_paused(team_id: int) -> bool: + from posthog.warehouse.models import ExternalDataSource + return ExternalDataSource.objects.filter(team_id=team_id, status=ExternalDataSource.Status.PAUSED).exists() diff --git a/posthog/warehouse/models/external_data_schema.py b/posthog/warehouse/models/external_data_schema.py index b2c68fb9e8cab..fbb65500192d7 100644 --- a/posthog/warehouse/models/external_data_schema.py +++ b/posthog/warehouse/models/external_data_schema.py @@ -6,6 +6,12 @@ from posthog.models.utils import CreatedMetaFields, UUIDModel, sane_repr import uuid import psycopg2 +from posthog.warehouse.data_load.service import ( + external_data_workflow_exists, + pause_external_data_schedule, + sync_external_data_job_workflow, + unpause_external_data_schedule, +) from posthog.warehouse.types import IncrementalFieldType from posthog.warehouse.models.ssh_tunnel import SSHTunnel from posthog.warehouse.util import database_sync_to_async @@ -78,6 +84,26 @@ def aget_schema_by_id(schema_id: str, team_id: int) -> ExternalDataSchema | None return ExternalDataSchema.objects.prefetch_related("source").get(id=schema_id, team_id=team_id) +@database_sync_to_async +def aupdate_should_sync(schema_id: str, team_id: int, should_sync: bool) -> ExternalDataSchema | None: + schema = ExternalDataSchema.objects.get(id=schema_id, team_id=team_id) + schema.should_sync = should_sync + schema.save() + + schedule_exists = external_data_workflow_exists(schema_id) + + if schedule_exists: + if should_sync is False: + pause_external_data_schedule(schema_id) + elif should_sync is True: + unpause_external_data_schedule(schema_id) + else: + if should_sync is True: + sync_external_data_job_workflow(schema, create=True) + + return schema + + @database_sync_to_async def get_active_schemas_for_source_id(source_id: uuid.UUID, team_id: int): return list(ExternalDataSchema.objects.filter(team_id=team_id, source_id=source_id, should_sync=True).all()) From 0f55636b3af8cf3e598c7c3ad802be026189715e Mon Sep 17 00:00:00 2001 From: Eric Duong Date: Tue, 23 Jul 2024 15:10:36 -0400 Subject: [PATCH 05/33] chore(data-warehouse): don't specify typing immediately (#23926) --- mypy-baseline.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mypy-baseline.txt b/mypy-baseline.txt index 7ba31e2481702..179789b0b0eb4 100644 --- a/mypy-baseline.txt +++ b/mypy-baseline.txt @@ -3,6 +3,10 @@ posthog/temporal/common/utils.py:0: note: This is likely because "from_activity" posthog/temporal/common/utils.py:0: error: Argument 2 to "__get__" of "classmethod" has incompatible type "type[HeartbeatType]"; expected "type[Never]" [arg-type] posthog/warehouse/models/ssh_tunnel.py:0: error: Incompatible types in assignment (expression has type "NoEncryption", variable has type "BestAvailableEncryption") [assignment] posthog/temporal/data_imports/pipelines/sql_database/helpers.py:0: error: Unused "type: ignore" comment [unused-ignore] +posthog/temporal/data_imports/pipelines/sql_database/__init__.py:0: error: No overload variant of "execute" of "Connection" matches argument types "str", "dict[str, str]" [call-overload] +posthog/temporal/data_imports/pipelines/sql_database/__init__.py:0: note: Possible overload variants: +posthog/temporal/data_imports/pipelines/sql_database/__init__.py:0: note: def [_T] execute(self, statement: TypedReturnsRows[_T], parameters: Sequence[Mapping[str, Any]] | Mapping[str, Any] | None = ..., *, execution_options: _CoreKnownExecutionOptions | Mapping[str, Any] | None = ...) -> CursorResult[_T] +posthog/temporal/data_imports/pipelines/sql_database/__init__.py:0: note: def execute(self, statement: Executable, parameters: Sequence[Mapping[str, Any]] | Mapping[str, Any] | None = ..., *, execution_options: _CoreKnownExecutionOptions | Mapping[str, Any] | None = ...) -> CursorResult[Any] posthog/temporal/data_imports/pipelines/rest_source/config_setup.py:0: error: Dict entry 2 has incompatible type "Literal['auto']": "None"; expected "Literal['json_response', 'header_link', 'auto', 'single_page', 'cursor', 'offset', 'page_number']": "type[BasePaginator]" [dict-item] posthog/temporal/data_imports/pipelines/rest_source/config_setup.py:0: error: Incompatible types in assignment (expression has type "None", variable has type "AuthConfigBase") [assignment] posthog/temporal/data_imports/pipelines/rest_source/config_setup.py:0: error: Argument 1 to "get_auth_class" has incompatible type "Literal['bearer', 'api_key', 'http_basic'] | None"; expected "Literal['bearer', 'api_key', 'http_basic']" [arg-type] From 59f9b7a1b566ed321cc083acb8e9bdd0aff9ad6a Mon Sep 17 00:00:00 2001 From: Eric Duong Date: Tue, 23 Jul 2024 15:24:33 -0400 Subject: [PATCH 06/33] chore(data-warehouse): use sql alchemy format for executing queries (#23927) --- .../data_imports/pipelines/sql_database/__init__.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/posthog/temporal/data_imports/pipelines/sql_database/__init__.py b/posthog/temporal/data_imports/pipelines/sql_database/__init__.py index 700e3af65b99e..04fb8885701da 100644 --- a/posthog/temporal/data_imports/pipelines/sql_database/__init__.py +++ b/posthog/temporal/data_imports/pipelines/sql_database/__init__.py @@ -16,6 +16,7 @@ from urllib.parse import quote from posthog.warehouse.types import IncrementalFieldType +from sqlalchemy.sql import text from .helpers import ( table_rows, @@ -150,14 +151,13 @@ def sql_database( def get_column_hints(engine: Engine, schema_name: str, table_name: str) -> dict[str, TColumnSchema]: with engine.connect() as conn: - execute_result: CursorResult | None = conn.execute( - "SELECT column_name, data_type, numeric_precision, numeric_scale FROM information_schema.columns WHERE table_schema = %(schema_name)s AND table_name = %(table_name)s", + execute_result: CursorResult = conn.execute( + text( + "SELECT column_name, data_type, numeric_precision, numeric_scale FROM information_schema.columns WHERE table_schema = :schema_name AND table_name = :table_name" + ), {"schema_name": schema_name, "table_name": table_name}, ) - if execute_result is None: - return {} - cursor_result = cast(CursorResult, execute_result) results = cursor_result.fetchall() From 2fbb589a67e940981011301743f14e9c21843e2e Mon Sep 17 00:00:00 2001 From: Anirudh Pillai Date: Tue, 23 Jul 2024 21:36:57 +0100 Subject: [PATCH 07/33] fix: reload dashboard when insight updated (#23920) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- ...s-app-dashboards--insight-legend--dark.png | Bin 115292 -> 35301 bytes ...ights--funnel-top-to-bottom-edit--dark.png | Bin 162597 -> 165326 bytes .../src/scenes/insights/insightLogic.test.ts | 29 ++++++++++++++++-- frontend/src/scenes/insights/insightLogic.ts | 11 +++++++ mypy-baseline.txt | 4 --- 5 files changed, 38 insertions(+), 6 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-dashboards--insight-legend--dark.png b/frontend/__snapshots__/scenes-app-dashboards--insight-legend--dark.png index d7d9398cd00ccc97d920dea9e00c7dc1e801d9cc..9d811913930caae25596af83fb0fef13e26c9d5d 100644 GIT binary patch delta 16555 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 z zD$O1@GKj?HBmHKjv6}h&nq-BZ{kO5(2=lH)obZ=`4DONq1IzoCgt1y5;0TuG2jfw; zDGuB*9D}W#;sG29?OYh$=_TD$wWE*qt&xO${X=={xOeZwo_<~f0dwqI$KJZSYs|M6nq4Hqu5MV}d!|XY zz8$i2p5Z(sCAW0880_>uM`Iu9%1Crk(ql~KR;%24`>m#dM9>j0xC2{$8$S^rrrIaU zKX;W<^pUdiV|#P99m74i?;pZtW^~Xh0d#ln-pznmyUO-ZnWj*X4Z>VGsm+|Pd# zCksHkORp(b0)% zN9xxgNX$r9g@dJfz4rH4;e66x@rI80Gi;8tbP9s!j@jooA!2vH3KQl<{raV5u10R| zbf@+)Gol4{|DoWp91zFl&OK205C7Qz@SFYXC5rIp?agzEF4-Ck#(9uU)7==n*{(bz zoxOTEdUNS_7p3z=_q=0TM)X8ZReq;cjr5W#1U%N2Kc7g!kiOQ~u}Zl5+c7=fUovix zQN{GHL>7+Dz8X1>GV4*1S-En&%eMNbD0xI#X=#2eZDd1B%leli{jhvrvAf4>`DJsP ztv}8NEX<%G;qf;jPt8O$Uxk8oml9(Cy&S7{N?O{tqZ0=1&V=cfW7p>_;~deYQ1lkf zN#WK<5>T!o5L50$E$MBV+l#~Z*=>5#x^ZzrQ0*4NP7c{RoZydFN<6Z2*&Qyh^*s{u z9@@C2RmaWM9zZ2%t%KgTTG-=nK5>49LEOrp${31m%0rBrr3RoWoNvrU_uMQ7OSb}? zjM4=?%$xd9xnf*o#v4``TOPa`_ow2F74VJD7 z3JT(5OH~6XNR(U}aBy&RJSRq{=b}Z{|BS@mTT@nlbkDQx{LU*}9>1b~zSbyB<_D(8X=+U*VQw7&oDQIFtGU-6cvTMeC6Qm{MkYPZd2LL7SdspbFPzAbRe;- zeib+{>%F=R_h)|G?Q=xdJcL6^NF>eeZzUXcdO?^8R7#<6vBRlL6Fvt}%~O~}41F8l znFW2QC&oIrI~vR+Nnn1lDLJ6UaA*am-<8yGyQs8)k3?!UdXnbo=nRoAvW+({ zr=;K*zz!coma7wyNlCo^d_qDXU3o`k47m*eAQ7gTw~iP@AG%x1bzhLTN$Iz`|0-aA z-#x}s;3ISM)#Zw4=c|8n0ako`s>Q^{0PWHoKY3s9*xg1waiT{_%Q{45d{P7Q^r#UFnGBKAh0;v`WR0mTjMRZ{Dh5oe!{@opQ;R(c7|DR zd~u?ZRKa$wOqic!XU~=lEHiIEi+!rX-qHbq63ass=CdJ|ey0#o;c-q}0(tX+>4Ikf zXcBS`lu3=*`S=3Drg&dnnVmB5J^E8A=c{V6j>8T&6k+$f@3!;g3F>G()wfqgf423J zhG~3FgmreY-}*U7FZqOSUz8NE_%a2tQ@ZxG`M&`23?O&G^+ zg=0!-Ub3;E}iA4hVW4hlfg*;{Svi3g_t+V9vrCJ`xFX%hhJa z!%yCRbq`%i>?0mN0HbSgvBu~yOTkl;KoV`I%~0fLOEh}!=E%}wwM+$|Tad4OY5RDz z>LE+`cJh9k;lPiVaY8`FA{xstBor&)PzSIJL_J;*b%jsjXy5ImoXOINX*Jc|U7&%{ zD?!}ECHd|nxVdc?OJX$o`LEaOKqdKGK=y6QD~(D$qt*Gs8&pk#a{21f$*sYv<9lTs zOTTM`dadk-I@mwV%bEB)>+y;y!vzhR$!9r@uSn*}|DCyIf9<}Rs`}me6;{7Mg!%WF!_-|s|4ws$3M4eq^_st&}PMCWiZs4I}Zk%7;i_^!A7 z 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 diff --git a/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-edit--dark.png b/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-edit--dark.png index 1912f55d0ffa8e59bfa7124b66725ca0cff09a4d..d83ed27fe8dcae1f7e4403922a0f4ea195f40b4a 100644 GIT binary patch delta 127766 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%0Ax4xMAd2TECnd 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

K(V{ylS)2XWnUSpKM&|x`-UiT(AtKz_ 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 delta 125270 zcmcG$byQVvyYD>-0YM4r7Nn#lr4m-}!4cA2e^Rx}QQW2x z9^Ef832}^fff>%`S*jWNM=#1Jn1jC^sS&>%QO}3!eUF6T?o`&hT z^Yg`ZqZ!sHX$jgrPqE9o6rtlphyFOyoh8v@ORam*DrQVc$FFeFQ~kqWRhF3aj0_IV zz01PJi=O1!df24#z3frn--RNNJ7HfnU_zWF4|=G(kbGJ*607Kptx!u1nN3FQ_CrMzvBJNc!qIPVp?98N zPFn)qxuj(MZ^4fQx>k@RR~R^5IID!3dU;NMbNr5@K*8}-^dI?%k^1cp+Jlr1;@w*s zNfj`y!dntw9~*>s>OIzTlFy$b&m5OlE7>?S%dm?mc7%4vK7?tGFWM0IR#K_qdDGHf zNJ!)m|1vMnpL8yphREB-Y{tvHTNt`uPU2S$vh+#1Di$Vd^7^4~wr*EgU0`BjcK7yN zVZ{d0SL|HT-+KgQn{R1Iil-{lMhknyyxD{=!V)SG@0)y%wk{_nQ$(X;bqBusuJ~MC zVpEGG$HZVmT9F&eYo{x^unWc=5mfP{nB5!`fq+m_x> zQ!6Xg8%6ay!rDLo%6iNDdvEb`BMzmT#mOhOMyoV4{PVZB&|QLqKX&%@**V#5Qxd^4 zky;g2{p3XW2?+@+%WH$B9#T1Do~61rk#yk{SYvCB+V6x8w?~FcIB|*%bT$vDsm~p7uYlw7|zBl^b?^ZQ4IDu>Im=Ovymv*3EeP99@AWG5Dxh zK%iPjC%N9^xP+j1?>WKZ`Z|~E01QEo?U!6b+jm`Xl`X&f4M$n6-^N{+2(Kif#Py})*Z{f5V@3CsB680R6A$p z?cMxQ+oP+u2Mx`@P5>qBY6E_josWl{(vRX(B8iWOibpbj<=8`dWOtY(gc+wYTKw$3 zhhf*eEjxpja?YiH{aF zsxw{5VjTO~k!;piY({y>^i0vW0hE%@I~+GAmfL$LEn8^Q{Wb1f6$L9=4dC07soj+E(ysvfH;XOEN@D?f7p5&vz4rrNob#rfRZ^M5A zH6a{`|LkKya~ExXz9?tWheTcGMM?RXcPyzL82AKEA3=2V(^1m&NrFzS$01CaVES;y z5kO}LYpUC_L6Yn}@aJs_S6T={>iMN;aO7Qef&m4Fiod?V*?%Kupo_d}Myt^I`UB%g z>>~>7;)U!uuU(t8ud*1(!H?aB6SHVzD2=ZY+|i-k{f7&7*ih4%sqx|C%_mPVR3*0p zan;y$H38ISk-Mc1f?cpt9m^u#F>?dm^*$nxcBVWJ>E@%K75C5BQgu`PI* z{?OM!^E{(xZ-us|%GFu#-KFL`Ny~W!+UUH4s66W^A5j;{#g9KZ+ZNhYFDCiwed&HP z#(S=%E9|ZatORUI(e|sJ&0okBAx$4vyfDh0sov?>=)D;GeD+D4HUh){-NC`POD1Jy z<;%;-*E%Jz2phwM5nlqrE}UVawOk`mpm$x!D?WybWPIkTLOMe^;x&)a0Mu;@zq>y^ zZ8-iRBO~LDs!CTq7c@}T*^yP8l@%b%oUh&=ra3`7sF0k_XFk5WJ?$|wbN3^)7@{b( zG9W;xb2*nc{^A1Jd54%!7=pqyo++t3C%06{OTPyPNzuuc2Y*#g$t=bbuh#YBB_<|5 zYHGKyUm?bY?k}J~cK4g>=!qZ(rLEeLNI+%l4_lLd*m%E zan+sJfTEs4puJ;<-6DzQCWE`zRe(n0*QF*z>sP%`R9#cEw6uiWq##zPQ02J%qYZWP zxuYO_H|2#A0e!Sgw2W$w$Aj0lRa!YJGPn{slbnqzJaWY3yYF@QGuS;eil58Bym${9 zYSmWKM)15hxpYqTi-%s=7Li^phGq8FK5m&tzD&-aU0ahBP0g}Bi=?xI9E4VvLm;L| zLeW(;tq)WA_pOwY`tz%Fx#j-q1>8jC{zhKd6XUtk@wSMRN4)d?=$8I7^yr>_I{LS^ z2}oRVp)ZuG-Q03=6v*BA?>}6Z&Okex9G+9wd~W*~(z}eC)RF%Fy|u2c&i!x-y3b$P zVoo!k*%i|jtL9Y1zj@yOXS5)HIxYfll&@iY+A&d15 zTr>;O9DFl>;fISyY9-KMw?7IFgiR(1rq41j(9t95C@Cp_k;&y$UfpR4^b?PelE6i^ z;(8dJyM6};mwCfDLp&sr=v86zWY_YnGQr_H2OLZ+%>39{w&)}WobSc2u)4H&RcMJc zsWQftU81&~?%Z*`I0;&2IXbZ28GNu*3Fl89y4S1a?H?QzZ9W+)if}0=%(k=`_=+Ti zivf}Gn*S7i@`xmClK`V)@yB3i>aP;!XqmJ@89IaRCOUL<(%M0~gr$u|LquhBt^WH+ zbz9p{ZfpYgC&Ip985BGe{mmVCcu7A=zj4{aRk zBvZvK=p-k{(4991{>&bJhK7Uclb!vgB>s#i1@g%{EfPS>JoXKo3~hg6)J3D)`zxyX zG@$>w!BvR+Go_Hj1k+E(xDV{MhmW+p?hr@C?X>%-`uX6BbL2WpU_`fYhH9mLlFp!$ zmT5H*O|ju23FVO^H+y%#iY}H`8m0>GD6o|omaG;x>$rD#Cw56=$L_qZE2)< zI9CKg_aSMCrz#eMb#XEo%&gyEpX|w0doJgOD=g|iL!;NK`95k|S0`NSd>fXRs!AVT zgXX%TEmB3qdl+6>>okBvT+ieBL5ECAx@NAm_B+y20glG6sV*Q)Sa}ONO*sd1i`0I8 zfu4~uYfk?8K01#ETMMVCXxQ*D_Z_sBWft}GgKZ}Uc2O3Vj=@2iGLz%7vV-AA#dlh? z>fJ?n%4(ZUdwP5K|NOBWgzMgPPVkb24eD8rl(f~KYNTbRMImJob7A+Hs5+Y-_y7@w}q^W!@$ni0uMb{)@qe(W;hI- z74v!HK_h^ER%Wd1u!kTL&t@K3#_+vtxgXp8oHpXg{jXAyv@hKnjk(i?H+VF{w2z(d z(9B`|a%A%^2-2ZKO6kYtElMymUw_p&nt!2DX`uUid0D-4>OGiJnm1RG&-g$liBdCW*uqC@DTOs}9w}=dm2Rmnk2db{Hb0 zxVX6=(5AfzqtN-2PkFXt`ucT0xYXX>ocG{a})xU&_8}#2A zAk{PH_%TUZLV)WHqg1qW9o<1^&YMfRbFzloLyp;JASFxxo2qET9D~M)@kg!FJ|>~9 zOJPbvta>VK0XsV(oAUBw)aJ!~=}5Y2t-k$7ImQ!4Tx4OAX@gg_pJI9whzYv5OM?sb z0&yW%*D9editU+N_2Iiu`&CyvI!4;)xw-Si#|m3_=0ozH!?h0@l^;`lT+V8Eic;u{ zGBZ`?W+BIqN#mFMjQ*-=WKR?oi@T*rYM-FBbK=5=CoS(|MO+3 z>*{iN;?_Dkhbo{6L?@QWH+_Ig@%Env;WEF&Lx%tMw0Jg#B*uUI5$y;M4rqZQf`qCq ziz$*$8av<_F2#pO3BAS>66ANwnzPaGo7eb*t92fb(A@V^lv{|@%8`(*5(d6c?%xYy z3XWtU;GHl6ttz~gm;*+0But+qM?zdFz0)$1Wr?|bLQwc*_WM`myk-09PRnmhGPDt# zvZMlF=A^_Y}pv zh7h!y8RZ2j=pZNj+s~n|BW7l2@DG&Y*E}nE9PQ!ca<~#Z-tVKLs5K)^<44yW#eJVJ z5v(7$zhiQ6N?Ss&Wa|LyZ>Ao7!yDl$$Z!N_)F%w(>y-Bl4(@GM@87!RKcdA8o{QM; z?_;q9f2-1Bmm6k|Za)*9oo(Ez;S~eP$7fZ=e6@Y1U^;24a1)THjM;BrJP(sxTwX&I zXeY2Gj5c1+mwn;3Q$6MD!k_Sf!e4YQKehwIZ%+Mp^hbjG7m<8)3OPpMy8~$+{QT-; zDWl&jmDIAvP@t3-(VE>q+PX8ng$)M=B0P?$?qe8CTzkE~C0B@%uNE?oB#tqn{C7;t z7b59uHI$0?udh5@=04$VjM|hbjT(JJ@_89UP4oJ~YZU`3vmBhVH{Sdb5y2Qvcj3Q(Yf4|iL&m;MMU?JR)80UI;v6j7SJzYa5R+V%yS5a7qlQ2>JYT&9~=&IiBR7U)w zgdQv7-ff6gw}$Dod5f@{sMw96L4+N=ZV5OleV^3D)?k46271@T>y#8Kv)Je$+Ou^* z_t{Zrd+BX^9<@e|xCZMKLzVDm4QFfEVPHd_r;yl~1>xU=X-1Q85moPA9ntwkrYqlu zRu9pRmOnM4#BgZ;`szD&*ec=sgmZ7pZZ==5ouQsvfAhtwtiZN~&`=YWSlGfV;v*%p z^HniDXOr04j90amsP$%ce&Z!31ae~JCsI=Ue40{~1rV+`?YGzDUCiEBKjBPp-Xb zrfbHpgTOle;RY70O8&TXJ3~}8?eS@UoSZQxZcSSMj=1}@xd20%UQe|0XUQwE$f6a8=iuOWU<}aH5awB zm0MukkNfhIgl^q(!LG60Q`Yfr$O`Zn&TIgAmh(0RDm2e1PiP?-*Tz8yJs}qp!w$fI zO+Zs7hEKk;v5_`tYBN=*x_)jx)VdPVZvsI9&nSevBSlC_#=XzVav(*fSltHLGg<^8 z^nJx6Y6i&%#0U>_6j=V~Kkysaz+WR#0St$LmQ-f}~|C$-L281JeaPi2bBlUY@m zc|G(v33|szHx4#^2iMcL8>3=wj^pJY7^z&IWc+A)Aff)u96jF%H+USlFYLJ~2dOYb zp9MY-Pf7pf=%C1^$H%RO{Yh)cD0jCIUD_V0sr56p1|6fA_vee(X@fIzH7;}g@BRJl zk1pQ1mChy{$lL!}+{Mpg*R3}8>hAkMZCrXAGOane&jd-meA$@b*#C!X@eRYIAt#uf z+cerqNlDP0tLq*%j5^uYpVBzK8J77B?QXVi22S5)Z&R>8z9ykj`J%AcZXES+ z`Qee;0|Y32FmlQj9Kl)}PONOP^73sJb1#9}aw{!p!r0*M$I)Tdju`ujJZbI;G> zv==aPQ#BT`Rb6vHcqDbqmkPV(u5tqtk`F;4V(Qx+{q~k+V>;0)Xto8P>AG0Xa_yI{>DRl*lR9`@JIh4p>RzWp zdO#HMm9*ipvIlv2!PgX#g}4yZtfKHmd#+vi~<7{Yr6~?r}HDqqrJvKsg)Jtsah9m2r1+XCOKv%wD;HH)Hw739x>a93 zrRdIWP2WE{kcKeUr_%Z^d~WuWoO|$`?PsMnTvXqAB<2wLLKLk@Oa$zkX%?o&au4(E zy&&Zro*4c@A6n_4*T@iA*l&7&bcpjS+}JOckera!TMT{B<;O=2C3_@X<&gF6-MeXz zqrxjY(0*(hzX293`0rit{Qjos!c+=$xEQXU6Q(>vWf6Qs4DsN6l~w{vgdpHqQE60k zSFF(OE=#^b%|^TFvoMZwqMMkfVT@jU4i`1NpHVt;$sVyK)oaXc#YGD8k!I5hLpwY0 zl=k-i;!Fg=sN&eMEsOiEo;sbv45iX}gXT`K;8Y482xbnm&+(9v?%xYR^?X_^Rsd8^ zI%%X78$NFLdinejh&{n~oyWu^tMUVmKFP`X!2G*+KjN+X9G+4N-JuvLl*ZSETzBW@ z_wci1*v)hU@K95S*Bk{YQ~DS8QDe5k5dIfoWlDwIt9RY`Ou}w7=mCrLk1sGNu;CXB z(UEkwA<*0bw6q9gesWsr$Zt}?3rchk2{5IDm6-^ts;F}Fw6qe{^I!kKHo@7Z;BlGx zk(j7;9&)@v&S$-8%E-_xh)W{E&|#h()*H?nIlvQMy{}1Jrl-jkriVm*aaw)$#^S%SUnMLqSq! zYD5yI$V3n#K_D$C_?UpGD~@Mc}JwkY=1P@mE{Oi%-#0#LoYZM zRZTLo#bemstgejZ-n(Tp+rVwpywIh(zPVXv-gYnen{ode2V7O8Gh}9FCIttUL@<7>zeaz>fS{&vb$6GIyRbG`=#8Ge{5rA@Jz;8Ge zYYI^rC6%3-)KU|;H$AK!csX_BIA zZrTKUKZkaid0V7_E^N4h+==WvH*wes1jVwXe6TI>DUap9nFhvJan#k7)$!J8+IVL# z`PiFASvjw>&Me)DVRT_<~$Jj_7UlYzjVMTL*`*;E(z(DA3QIo_GE$$mkcbYr&=EWdVbe0pL12}qTC zJS0d>M&A&G%}73(R$JmS5Y0VI=t=(I>i~3Y?2dUS1-N8`h{QU`_9*n z@D%6?I7ZN~r$qKc5CP#73f{IJy)}0&My-pKF5Vx{CWu%V>nZYAYt7GZ!`|$o>#dzX z%~E<$eK#f&T(8RsE>)-sS~kY3IyS=`bN<_(o@_Q z;r=*OJRoBNsuFR+jfVfc-ja#$SP#Vdh8>}-F^po3ddJC^N`sG%$^z~t15GYEGG4>l z1r@5Qsd+3UgowhAhFe$mPlQEdm+S?m;;pej=F`O;C&w_6&cAv%Qe|cXTnx$Z1XBT> z636Ap3>K@Em3=qV=0_xVC$5t`iYz;S@Sh(d%1s($13Ct1P%@M|&#C20)6Ja(sZ#pW zn5e=F$2N595Hok{{_O7~7T1O|z4;6$+T}FyZKgbdD>wqrawtf9xo^2IfQX-nEzxCn zrzJuu>)Er~Mj^Yp3|A?sF}cP95qlobX%2FfiOO^5K_GcFTAlY9b|~~D2<6$Na5_gm zn-#5h6x25QwPsKrt18UCy*Y)@b;MjJ!6TincEE*zuol5~Z%Tk^ekgj3TNv`WM8_5s z5co*(2o8nDi!C_F>%xG4-P#!lJ{Wb}VD3R6+O-;=zYF+03Nc zqY`O4X=_BybUWc@qQ~x$U$L_!25YoTn>CIWd(i9e%F)%~B+OU=EfInAqusPODSv$x z1$%7A@}8?_vQmaxv=C3G%&!|C*j1PchE~hY47f2py~uVZugAW%bwhJ9;-0oE_cv7D z-9Hed4F7gQP&kD5PVqi&ke?PiBFm+)!Rv?jY(tbtqv1;OcvUIC^%SxX2%pZ6Zew9$ z);WvpO$XrvH!hyng9-xv{5hrd^1@~hQQQ^$Dk^fj|JwLb3+J9mzng270tw9TK6#V` ztkK)C1qWNh8;uw=n~t*IC0}_iN0kK6)?VKSYS~NMtiYeE?9EB{*tNF_eigs%{tYsa zioJc!(`lS&k42{zFrp8G$sQSeX*ONL1?zmgDn}zLLH%~cann62sHsoeLpqW|zFoW#k*((@;33C$zZH5LoJ7s(is~`9zD^q<6&V#0KEWT?12xgG%s#xHM~@P_(Btx; zAf(*ik3ZbB(@(9FBS$0_irW0jPSxE|gPMTS@YSu<7#-&lHhh@;#kJHaFJ{xO0~-ml zW!a0QA2CfwynpbbC6+^bb$xwdb#-oW*mdMsEZQ|P4K6Mj1tgwC0X}$z9 z;mF8Haw71*9@o;oETKILxYYtOl-xX~;D!A>-oOuuEP3dt+K$o@8o ziyO^rW!2%a>B+`JzZRt+cX3|KoW-V`GBL{yVmF7g4&8Z;OHYCPp9gEbDv628qHWOT zX#|OHpS-+G^t!C2R;Msua7SATB}hpCJW(es(wEdYP@@_$*Z0)AfPIa$-?o4ox+pWg zoKC0v;0tb`tHTCNN%QHNx77&dnx7AAi*lTHeEkDzJpl6|o|<@m_~RgyEa5y)%>pLl zEvdzsm+tDeQA+x;5?#W=4fY_x_x*Vnip1xDme60F^QEHN4k6-TVPd_rG4dc?GnPTl z%Sr;{4hm}Xc9xcB`=juV$vQjjtgjzg)Gif|=GMAiVDQ^aH`pJ#ckZ`*z@BlLyD!v~ z6EX5GJe)eqaTWIoE^6%?%}GA*m~?m}h~MWvt2!WCRMQ5FI_#@y*{>{TMfK(7KjPsH zqCI=KUtvWMF6Pl}#N{Qr9~FQT1ww`X|`#a>t?-qKcg^ed9O} zp7}Fb5qS%NGu@+dN$|;}pX-^2pB6ROr~Z|2YW@kXZlnGNl$S&tC)UeDVEux0lAPb# z=wXT7@F;H>l~Iwxq0z+Y?$g*yV9FnPsFR2uAD0{I&r=7JQ9?xVqW~SKom7X z3M5K8-XZIs?PIfV4(>eF{vFS)6V1rveh<$KoVVmBGyD`kb4{tmR;GM2PE4)1Q zpbD=9Nz2QK)nSv&{*$S(4iliWD0rG&{ASb4k1Yrf4Sqxx2DF%!K3&#w$;mcD!+zu@ z#6B?$JxLqXQK-}BitCHDdw8&3ijBj1PF19nvkO7L%z1I|6UE}w1-2PDODQ{*W8H|- z{UaYm{ernjLP65mL~QD$u|e}}y2c3!qE2bo^%95@*>BueB>lf+df@*N>gg_CoMk(= zN>xt^+x@B|QfZEXGafW;HF@%ekEGc5l9(OurRD79OF9Ecab836CJZhA7q;a8Kubz_ z?zq>#p#y4hs$%*G5gUs6A~xuM330sGZr+4mw8fVx*ZO-i=`O}zduzYhCa>xpDiP#z zFT%;}gfAq@M?S89IMwZ6*gtjn?fr^X7+5lmo@=!1(tW3A%STj2SjoRvh&RW}v!;41 z_4Hh*k^d^%ica8xesnE|Bqb&S=3`}P$@>byIQ^`Kfqptf;8holEXs=ZByB{xl{P}r zbYMfy*^;e!+15{-1~M(1U`8k+ax9pDo&=c{gh0zGpYyLasIlXnyx;F0HRe zMnz#kV(?|1Ct_f`K;I|z03HPXH0|C4 zj=J?!-P;#5;;AYih51Ccwz~Rt)KsSa&;%xtq$3EHpnZ4WG)g*0Mb*UBNAXQ}vYKhc zu)+F>gJ$)GX7D#1+wG_NPg4*7)Mk`8Z2R&$n?J3_N(OdvclxcHkX|(lg!C%dEu0|D zyh-OC;)R@gHVo=<4)Iu}-+nh2sTEA;CQMbkgeOP7jG00C@)x&Oq(yxPsW=f#CmjQf zW>3|U&72fn7UvpH$PcKKi+ehr+sy?c=d;P26{>kee1FCTj+->}Q?>Fzctp0jzHab9 zGvs$K=qi2vwjVhEBo;LkG)3o_-OKh7QXr3JicFW8H2h&{?C72(nOD3q^N|MC(>K0- zB|e(~Su}+v*N&(ghLvBX0MT!GtcLKMi-V(4<~NmuWYWh_L2bgj7t{<m4Q@r0?MmGe4QQ1g+59R|d?4I%K62tecF-emA@xoZD98a^p*0h$r z!=K!5+S%J6U!nJLBc0s3S@<{oT%7eM?^)JxUbH=Xvy)392T@41mi3L-#>pPbLKHGR zy@8LKs@7G0#*88H*BLV(*cb{>R9*7-NA`VP$hM>`PHe&`nxYWHSBX?FY6{1XZXBAI z|1kQs_gvX6wJuZh=8I?!#Q(*k`)?MV%+&nfov57RBUf(G_f3jm#)aGI4BYx$V@*GJ zSEK*Mp^Hv>HQf93rlsym|IVU=|3{C`%p+vsf5QYfj|C2@{~Nn5SE$F>L5?4|SOYIr zz`^#{tC)T|?D*f_ONB?){xR-!zOA1ob=-Jr>)2rQI7$BTdUP=BpW5({<)za8bq?f} z@<#5wpR9iXo&ZNHMSi*AaHsmYwV!oEqbGPoM=UMFWXwwJO>ZV+;7AeXBsv0 zb!;QAFofi<+VlRv{h8Ah8|W34Sa^;JcwK*+_V4}0f9LZ3TO;y6FHDbjmUVEl%SjFf z_f4H(Vf}96t0gU>+ru<(yx4&dI5!i626&b3%-|WYJo%LTXW}@m z7lan;>dBXueqUZ5&mWTWk%jR<63N0t=|P1~eO8k$K>p2LBCH8;OcLEnQ)AN{CVee7~!)G^LR7(wD&pv!)Y%_vhx*mOxIkjqqsd`z6@Y{B*Q+?6@aRjMaqho?T-@ zJxtECt5NFw-bo(FcLmK!0KZUkK8hPZnVJ&zh}7A|WQ*tD7<}NzN2ZV*Y}6vj6Zq+)D=UnIGrCIuaMaL`fM6SD#ioU%Eze1ybo#)$#sVg@pA3{ z8nB82GYJQM3(xo0#|l%vxDK}=)?nZbv7H%HB>*-H6#|(b+x2wq_17grcmJdD3Ma#W zrlW@sb4dHS&<}Q8^seQB*2L$uy~%N74z(AK)Sn+mZBN@w=PnP~G{y;?V|gfVM2_Zb zFffW$OzH5OuZnn2k;G?)yxj-9(QILVw8fb779ut#W^Z&iRXnw53Qi}k11ZH8B@r1u zzQ@K3DDelLQ*fP=P>mA&z*OVvwJCW)qo5N

x$UKypVRt~K)`r4S|rj;F^4zx?ph7(7Mbh-IVd9H$@v?v#}| zc6VpWB}k-*Ivj2K8z2Oo@6@&n=%<5lWlgX&nl(-ZloN{oAvJSESI; z@DTW(KF&J{=6nfA_qW#eJ>E{{5Ov~Mqcj0gAmMP?AD%UujLX%fQE|~GB zFv78Ml&xH2IwvqYI?r1##j`Ynh*j%PTMsF`IaP1Gg$7h=gs#^Na7p82B;Nyx7z3Fov&8n&@r6 z#a5+NP+I!RS^nd)Y){&SR?a1S+(mv{?XOhxkW;v*xrbYamRGFK$|>5@yi}7H?yE*s$$U! z04vWbEm-hE_W$g2=+qsYNMoL_diAX0Ju0>XfzR6E+2TB-mzNjv#bgdI91kM%o*q_W zlNG!NA1Fo0X0lweWf?%OQ}@O8bTDlx^02~sgp0FDmpK|x{{RL;z@7gGPah0UOEq~l zV1ZpsmIFKsWb^8U+AN26`Ap{sNArLn-sc)aibtBEX0ch=c2)Uak+9V0Ai?AOjfc0zqxW-t4q(jVF02_K_B2x-x;!|z1HEqC?)duA*WdpS zi+W+D*|7V}nC>9MFtv~~$`df@HpZ?@x#EB#0ZImr5>6eY*pDk`Lo)Av*Sgw@`b+@6 z6I2dp)Y;CwxIWI=!qULUyhVZiB7gLCUs18*BZK0=^q=C@Q?PyJ*RM~0-!Dx%SWxFA zTl0IV-X2QT%xU{aMFLpC(#O<5{UNBWl1#%3dY<9UYw3zhNckYPd$Pic+kI(Q%z2xS zZ0+CE^LmuG&I{A90`Q#8gVE5dYbZL_jhzie(&s1vWu=%>luD>EvRl?_`*@CT(SF^EFtysit zENZsbSB;`6r=8%f9lW95o-gzO4%l@S=Hun%Jp^n8FwO1_%%s$Fd!H}~9Gb<8K5d?VZJB35+U+EVrp55W;x_ST^3#j9C#AE!o3t=jD|K+axPxi1G$%g)qT z1uP4kDOikNpN^#>U7i={o*PycXm{0r^l2*S>IDHUbssKX7?+8r#Q-U^iA_c3KEaVAJGlbltlrHw>)WkDeAJ9&i4^SP_Lh_c*?+ zzHZWmY`4zB_|fkG*!D3#ISvGJD)@B%eA!SkOsjhRMZTJa_ED@Zzk~GlNpV_zeZ71~ zYtm!VV!IZyQ@B5um?Kfl@n;iv@!mc$t1-#z3deb%**XeNCl)q7tc{fi@x#_LSI5>paaE-& z$^EFN)43TLm`7~2H8sETR@y%@AVbd4LmtP}$UahZtjF(0LnR+T7^v?IsI_wtOu+!9 z-6ZvW@|B;&l2LVp5Ex#u-FG)exEUBKl+r$E*P;&dP?9=L48=92F}-|aaW6=Mi9onK z{%!LN{>u#IRK-upI&fL8s*Fr-BRn{DJ6h&0^bZU#JqciV`s$cFW^1G|i&z|XVj7@iKJ=s07hKoEp)W8u3V^b$w_f~F7f6z}(PY36A zPeUj$N;)(i3khUi?^szcO5RmS3>-f@r{26fo9;4;<}-OcqyGwoMOaXy<#^&AYm^8G zE{z77t}O5936+x^8HaSUy`}sJ(A!$+V^$7CUa_p&qFX~e_chS;`l+ThE6q=5U|`C- z*(_X%;q+a)>lfz{lEeL632~9q&N_;DBXPaP#ZpE>;);2^Wf9Jfj%8Dyg?<`gR{wBT zCe%rNr5KQyIQ1*bj9S49p1o=Wd6P$gzXnkXVUPq_p06^|=CSfblG{U>bJK1kFFE8u z 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%0Acgw<1hcJ-a#yA`IbZrL@V7 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 { }, ], }, + '/api/projects/:team/dashboards/34/': { + id: 33, + filters: {}, + tiles: [ + { + layouts: {}, + color: null, + insight: { + id: 42, + short_id: Insight43, + result: 'result!', + filters: { insight: InsightType.TRENDS, interval: 'month' }, + tags: ['bla'], + }, + }, + ], + }, }, post: { '/api/projects/:team/insights/funnel/': { result: ['result from api'] }, @@ -513,14 +533,19 @@ describe('insightLogic', () => { }) test('saveInsight updates dashboards', async () => { + const dashLogic = dashboardLogic({ id: MOCK_DASHBOARD_ID }) + dashLogic.mount() + await expectLogic(dashLogic).toDispatchActions(['loadDashboard']) + savedInsightsLogic.mount() + logic = insightLogic({ dashboardItemId: Insight43, }) logic.mount() - logic.actions.saveInsight() - await expectLogic(dashboardsModel).toDispatchActions(['updateDashboardInsight']) + + await expectLogic(dashLogic).toDispatchActions(['loadDashboard']) }) test('updateInsight updates dashboards', async () => { diff --git a/frontend/src/scenes/insights/insightLogic.ts b/frontend/src/scenes/insights/insightLogic.ts index 88480775ad8b2..036b501f42f91 100644 --- a/frontend/src/scenes/insights/insightLogic.ts +++ b/frontend/src/scenes/insights/insightLogic.ts @@ -8,6 +8,7 @@ import { lemonToast } from 'lib/lemon-ui/LemonToast/LemonToast' import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { objectsEqual } from 'lib/utils' import { eventUsageLogic, InsightEventSource } from 'lib/utils/eventUsageLogic' +import { dashboardLogic } from 'scenes/dashboard/dashboardLogic' import { insightSceneLogic } from 'scenes/insights/insightSceneLogic' import { keyForInsightLogicProps } from 'scenes/insights/sharedUtils' import { summarizeInsight } from 'scenes/insights/summarizeInsight' @@ -425,6 +426,16 @@ export const insightLogic = kea([ dashboardsModel.actions.updateDashboardInsight(savedInsight) + // reload dashboards with updated insight + // since filters on dashboard might be different from filters on insight + // we need to trigger dashboard reload to pick up results for updated insight + savedInsight.dashboard_tiles?.forEach(({ dashboard_id }) => + dashboardLogic.findMounted({ id: dashboard_id })?.actions.loadDashboard({ + action: 'update', + refresh: 'lazy_async', + }) + ) + const mountedInsightSceneLogic = insightSceneLogic.findMounted() if (redirectToViewMode) { if (!insightNumericId && dashboards?.length === 1) { diff --git a/mypy-baseline.txt b/mypy-baseline.txt index 179789b0b0eb4..7ba31e2481702 100644 --- a/mypy-baseline.txt +++ b/mypy-baseline.txt @@ -3,10 +3,6 @@ posthog/temporal/common/utils.py:0: note: This is likely because "from_activity" posthog/temporal/common/utils.py:0: error: Argument 2 to "__get__" of "classmethod" has incompatible type "type[HeartbeatType]"; expected "type[Never]" [arg-type] posthog/warehouse/models/ssh_tunnel.py:0: error: Incompatible types in assignment (expression has type "NoEncryption", variable has type "BestAvailableEncryption") [assignment] posthog/temporal/data_imports/pipelines/sql_database/helpers.py:0: error: Unused "type: ignore" comment [unused-ignore] -posthog/temporal/data_imports/pipelines/sql_database/__init__.py:0: error: No overload variant of "execute" of "Connection" matches argument types "str", "dict[str, str]" [call-overload] -posthog/temporal/data_imports/pipelines/sql_database/__init__.py:0: note: Possible overload variants: -posthog/temporal/data_imports/pipelines/sql_database/__init__.py:0: note: def [_T] execute(self, statement: TypedReturnsRows[_T], parameters: Sequence[Mapping[str, Any]] | Mapping[str, Any] | None = ..., *, execution_options: _CoreKnownExecutionOptions | Mapping[str, Any] | None = ...) -> CursorResult[_T] -posthog/temporal/data_imports/pipelines/sql_database/__init__.py:0: note: def execute(self, statement: Executable, parameters: Sequence[Mapping[str, Any]] | Mapping[str, Any] | None = ..., *, execution_options: _CoreKnownExecutionOptions | Mapping[str, Any] | None = ...) -> CursorResult[Any] posthog/temporal/data_imports/pipelines/rest_source/config_setup.py:0: error: Dict entry 2 has incompatible type "Literal['auto']": "None"; expected "Literal['json_response', 'header_link', 'auto', 'single_page', 'cursor', 'offset', 'page_number']": "type[BasePaginator]" [dict-item] posthog/temporal/data_imports/pipelines/rest_source/config_setup.py:0: error: Incompatible types in assignment (expression has type "None", variable has type "AuthConfigBase") [assignment] posthog/temporal/data_imports/pipelines/rest_source/config_setup.py:0: error: Argument 1 to "get_auth_class" has incompatible type "Literal['bearer', 'api_key', 'http_basic'] | None"; expected "Literal['bearer', 'api_key', 'http_basic']" [arg-type] From 9ce612fce5983b5cde2bc9d7befec6ee1da77ceb Mon Sep 17 00:00:00 2001 From: Eric Duong Date: Tue, 23 Jul 2024 18:24:09 -0400 Subject: [PATCH 08/33] chore(data-warehouse): submit form on enter (#23925) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- frontend/src/lib/lemon-ui/LemonDialog/LemonDialog.tsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/frontend/src/lib/lemon-ui/LemonDialog/LemonDialog.tsx b/frontend/src/lib/lemon-ui/LemonDialog/LemonDialog.tsx index ffdf4a7c7fe3a..4efcb5666664c 100644 --- a/frontend/src/lib/lemon-ui/LemonDialog/LemonDialog.tsx +++ b/frontend/src/lib/lemon-ui/LemonDialog/LemonDialog.tsx @@ -131,7 +131,15 @@ export const LemonFormDialog = ({ }, []) return ( -

+ ): void => { + if (e.key === 'Enter' && primaryButton?.htmlType === 'submit' && isFormValid) { + void onSubmit(form) + } + }} + > ) From 6e1751feb2c972be1891a9fb7d182afeac8e05bc Mon Sep 17 00:00:00 2001 From: timgl Date: Tue, 23 Jul 2024 23:25:22 +0100 Subject: [PATCH 09/33] perf: use elements chain materialization (#23574) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Paul D'Ambra Co-authored-by: Thomas Obermüller Co-authored-by: Julian Bez Co-authored-by: Marius Andra Co-authored-by: Tom Owers Co-authored-by: Eric Duong Co-authored-by: Michael Matloka Co-authored-by: Robbie Co-authored-by: Tomás Farías Santana Co-authored-by: Manoel Aranda Neto <5731772+marandaneto@users.noreply.github.com> Co-authored-by: Raquel Smith Co-authored-by: Sandy Spicer Co-authored-by: Zach Waterfield Co-authored-by: Dylan Martin Co-authored-by: Phani Raj Co-authored-by: David Newell Co-authored-by: Nikita Vorobev Co-authored-by: PostHog Bot <69588470+posthog-bot@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- ee/clickhouse/materialized_columns/columns.py | 1 + mypy-baseline.txt | 3 - posthog/api/test/test_action.py | 4 - .../test/__snapshots__/test_schema.ambr | 20 +- posthog/hogql/database/schema/events.py | 5 + .../test/__snapshots__/test_database.ambr | 84 ++- posthog/hogql/property.py | 513 ++++++++------ .../test/__snapshots__/test_resolver.ambr | 652 ++++++++++++++++++ posthog/hogql/test/test_property.py | 115 +-- .../test/__snapshots__/test_funnel.ambr | 4 +- posthog/models/event/sql.py | 12 +- posthog/test/base.py | 5 + 12 files changed, 1133 insertions(+), 285 deletions(-) diff --git a/ee/clickhouse/materialized_columns/columns.py b/ee/clickhouse/materialized_columns/columns.py index 3dc21ccde59f6..135f27b392190 100644 --- a/ee/clickhouse/materialized_columns/columns.py +++ b/ee/clickhouse/materialized_columns/columns.py @@ -44,6 +44,7 @@ def get_materialized_columns( WHERE database = %(database)s AND table = %(table)s AND comment LIKE '%%column_materializer::%%' + AND comment not LIKE '%%column_materializer::elements_chain::%%' """, {"database": CLICKHOUSE_DATABASE, "table": table}, ) diff --git a/mypy-baseline.txt b/mypy-baseline.txt index 7ba31e2481702..503f30e14b414 100644 --- a/mypy-baseline.txt +++ b/mypy-baseline.txt @@ -256,9 +256,6 @@ posthog/models/property/util.py:0: error: Argument 1 to "append" of "list" has i posthog/models/property/util.py:0: error: Argument 1 to "append" of "list" has incompatible type "str | int"; expected "str" [arg-type] posthog/models/property/util.py:0: error: Argument 1 to "append" of "list" has incompatible type "str | int"; expected "str" [arg-type] posthog/queries/trends/util.py:0: error: Argument 1 to "translate_hogql" has incompatible type "str | None"; expected "str" [arg-type] -posthog/hogql/property.py:0: error: Argument "chain" to "Field" has incompatible type "list[str]"; expected "list[str | int]" [arg-type] -posthog/hogql/property.py:0: note: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance -posthog/hogql/property.py:0: note: Consider using "Sequence" instead, which is covariant posthog/hogql/property.py:0: error: Incompatible type for lookup 'id': (got "str | int | list[str]", expected "str | int") [misc] posthog/hogql/property.py:0: error: Incompatible type for lookup 'pk': (got "str | float", expected "str | int") [misc] posthog/hogql/filters.py:0: error: Incompatible default for argument "team" (default has type "None", argument has type "Team") [assignment] diff --git a/posthog/api/test/test_action.py b/posthog/api/test/test_action.py index 2d162ff872ae1..3e4a0c4f56d87 100644 --- a/posthog/api/test/test_action.py +++ b/posthog/api/test/test_action.py @@ -136,9 +136,7 @@ def test_update_action(self, patch_capture, *args): action = Action.objects.create( name="user signed up", team=self.team, steps_json=[{"event": "$autocapture", "text": "sign me up!"}] ) - action.refresh_bytecode() action.save() - previous_bytecode = action.bytecode response = self.client.patch( f"/api/projects/{self.team.id}/actions/{action.pk}/", @@ -198,8 +196,6 @@ def test_update_action(self, patch_capture, *args): action.refresh_from_db() assert action.name == "user signed up 2" - assert previous_bytecode != action.bytecode - # Assert analytics are sent patch_capture.assert_called_with( user, diff --git a/posthog/clickhouse/test/__snapshots__/test_schema.ambr b/posthog/clickhouse/test/__snapshots__/test_schema.ambr index 344ac139affa4..69407e9000939 100644 --- a/posthog/clickhouse/test/__snapshots__/test_schema.ambr +++ b/posthog/clickhouse/test/__snapshots__/test_schema.ambr @@ -595,6 +595,10 @@ , $group_4 VARCHAR COMMENT 'column_materializer::$group_4' , $window_id VARCHAR COMMENT 'column_materializer::$window_id' , $session_id VARCHAR COMMENT 'column_materializer::$session_id' + , elements_chain_href String COMMENT 'column_materializer::elements_chain::href' + , elements_chain_texts Array(String) COMMENT 'column_materializer::elements_chain::texts' + , elements_chain_ids Array(String) COMMENT 'column_materializer::elements_chain::ids' + , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) COMMENT 'column_materializer::elements_chain::elements' , _timestamp DateTime @@ -2173,6 +2177,10 @@ , $group_4 VARCHAR MATERIALIZED replaceRegexpAll(JSONExtractRaw(properties, '$group_4'), '^"|"$', '') COMMENT 'column_materializer::$group_4' , $window_id VARCHAR MATERIALIZED replaceRegexpAll(JSONExtractRaw(properties, '$window_id'), '^"|"$', '') COMMENT 'column_materializer::$window_id' , $session_id VARCHAR MATERIALIZED replaceRegexpAll(JSONExtractRaw(properties, '$session_id'), '^"|"$', '') COMMENT 'column_materializer::$session_id' + , elements_chain_href String MATERIALIZED extract(elements_chain, '(?::|")href="(.*?)"') + , elements_chain_texts Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")text="(.*?)"')) + , elements_chain_ids Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")attr_id="(.*?)"')) + , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?:^|;)(a|button|form|input|select|textarea|label)(?:\.|$|:)')) , INDEX `minmax_$group_0` `$group_0` TYPE minmax GRANULARITY 1 , INDEX `minmax_$group_1` `$group_1` TYPE minmax GRANULARITY 1 , INDEX `minmax_$group_2` `$group_2` TYPE minmax GRANULARITY 1 @@ -2180,10 +2188,6 @@ , INDEX `minmax_$group_4` `$group_4` TYPE minmax GRANULARITY 1 , INDEX `minmax_$window_id` `$window_id` TYPE minmax GRANULARITY 1 , INDEX `minmax_$session_id` `$session_id` TYPE minmax GRANULARITY 1 - , elements_chain_href String MATERIALIZED extract(elements_chain, '(?::|")href="(.*?)"') - , elements_chain_texts Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")text="(.*?)"')) - , elements_chain_ids Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")attr_id="(.*?)"')) - , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?:^|;)(a|button|form|input|select|textarea|label)(?:\.|$|:)')) , _timestamp DateTime @@ -3267,6 +3271,10 @@ , $group_4 VARCHAR MATERIALIZED replaceRegexpAll(JSONExtractRaw(properties, '$group_4'), '^"|"$', '') COMMENT 'column_materializer::$group_4' , $window_id VARCHAR MATERIALIZED replaceRegexpAll(JSONExtractRaw(properties, '$window_id'), '^"|"$', '') COMMENT 'column_materializer::$window_id' , $session_id VARCHAR MATERIALIZED replaceRegexpAll(JSONExtractRaw(properties, '$session_id'), '^"|"$', '') COMMENT 'column_materializer::$session_id' + , elements_chain_href String MATERIALIZED extract(elements_chain, '(?::|")href="(.*?)"') + , elements_chain_texts Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")text="(.*?)"')) + , elements_chain_ids Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")attr_id="(.*?)"')) + , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?:^|;)(a|button|form|input|select|textarea|label)(?:\.|$|:)')) , INDEX `minmax_$group_0` `$group_0` TYPE minmax GRANULARITY 1 , INDEX `minmax_$group_1` `$group_1` TYPE minmax GRANULARITY 1 , INDEX `minmax_$group_2` `$group_2` TYPE minmax GRANULARITY 1 @@ -3274,10 +3282,6 @@ , INDEX `minmax_$group_4` `$group_4` TYPE minmax GRANULARITY 1 , INDEX `minmax_$window_id` `$window_id` TYPE minmax GRANULARITY 1 , INDEX `minmax_$session_id` `$session_id` TYPE minmax GRANULARITY 1 - , elements_chain_href String MATERIALIZED extract(elements_chain, '(?::|")href="(.*?)"') - , elements_chain_texts Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")text="(.*?)"')) - , elements_chain_ids Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")attr_id="(.*?)"')) - , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?:^|;)(a|button|form|input|select|textarea|label)(?:\.|$|:)')) , _timestamp DateTime diff --git a/posthog/hogql/database/schema/events.py b/posthog/hogql/database/schema/events.py index 1a489e5a9d90f..a0225bd334b2d 100644 --- a/posthog/hogql/database/schema/events.py +++ b/posthog/hogql/database/schema/events.py @@ -3,6 +3,7 @@ StringDatabaseField, DateTimeDatabaseField, StringJSONDatabaseField, + StringArrayDatabaseField, IntegerDatabaseField, Table, LazyJoin, @@ -114,6 +115,10 @@ class EventsTable(Table): join_table=SessionsTableV1(), join_function=join_events_table_to_sessions_table, ), + "elements_chain_href": StringDatabaseField(name="elements_chain_href"), + "elements_chain_texts": StringArrayDatabaseField(name="elements_chain_texts"), + "elements_chain_ids": StringArrayDatabaseField(name="elements_chain_ids"), + "elements_chain_elements": StringArrayDatabaseField(name="elements_chain_elements"), } def to_printed_clickhouse(self, context): diff --git a/posthog/hogql/database/test/__snapshots__/test_database.ambr b/posthog/hogql/database/test/__snapshots__/test_database.ambr index ce03813aa1004..77a2452922e7e 100644 --- a/posthog/hogql/database/test/__snapshots__/test_database.ambr +++ b/posthog/hogql/database/test/__snapshots__/test_database.ambr @@ -377,6 +377,42 @@ "schema_valid": true, "table": "sessions", "type": "lazy_table" + }, + "elements_chain_href": { + "chain": null, + "fields": null, + "hogql_value": "elements_chain_href", + "name": "elements_chain_href", + "schema_valid": true, + "table": null, + "type": "string" + }, + "elements_chain_texts": { + "chain": null, + "fields": null, + "hogql_value": "elements_chain_texts", + "name": "elements_chain_texts", + "schema_valid": true, + "table": null, + "type": "array" + }, + "elements_chain_ids": { + "chain": null, + "fields": null, + "hogql_value": "elements_chain_ids", + "name": "elements_chain_ids", + "schema_valid": true, + "table": null, + "type": "array" + }, + "elements_chain_elements": { + "chain": null, + "fields": null, + "hogql_value": "elements_chain_elements", + "name": "elements_chain_elements", + "schema_valid": true, + "table": null, + "type": "array" } }, "id": "events", @@ -712,7 +748,11 @@ "group_3", "$group_4", "group_4", - "session" + "session", + "elements_chain_href", + "elements_chain_texts", + "elements_chain_ids", + "elements_chain_elements" ], "hogql_value": "events", "name": "events", @@ -1694,6 +1734,42 @@ "schema_valid": true, "table": "sessions", "type": "lazy_table" + }, + "elements_chain_href": { + "chain": null, + "fields": null, + "hogql_value": "elements_chain_href", + "name": "elements_chain_href", + "schema_valid": true, + "table": null, + "type": "string" + }, + "elements_chain_texts": { + "chain": null, + "fields": null, + "hogql_value": "elements_chain_texts", + "name": "elements_chain_texts", + "schema_valid": true, + "table": null, + "type": "array" + }, + "elements_chain_ids": { + "chain": null, + "fields": null, + "hogql_value": "elements_chain_ids", + "name": "elements_chain_ids", + "schema_valid": true, + "table": null, + "type": "array" + }, + "elements_chain_elements": { + "chain": null, + "fields": null, + "hogql_value": "elements_chain_elements", + "name": "elements_chain_elements", + "schema_valid": true, + "table": null, + "type": "array" } }, "id": "events", @@ -2029,7 +2105,11 @@ "group_3", "$group_4", "group_4", - "session" + "session", + "elements_chain_href", + "elements_chain_texts", + "elements_chain_ids", + "elements_chain_elements" ], "hogql_value": "events", "name": "events", diff --git a/posthog/hogql/property.py b/posthog/hogql/property.py index 52236b64fb6dd..560a694fbf564 100644 --- a/posthog/hogql/property.py +++ b/posthog/hogql/property.py @@ -1,5 +1,4 @@ -import re -from typing import Literal, Optional, Union, cast +from typing import Literal, Optional, cast from pydantic import BaseModel @@ -22,16 +21,28 @@ Team, ) from posthog.models.event import Selector -from posthog.models.property import PropertyGroup +from posthog.models.element import Element +from posthog.models.property import PropertyGroup, ValueT from posthog.models.property.util import build_selector_regex from posthog.models.property_definition import PropertyType from posthog.schema import ( - EmptyPropertyFilter, FilterLogicalOperator, PropertyGroupFilter, PropertyGroupFilterValue, PropertyOperator, RetentionEntity, + EventPropertyFilter, + PersonPropertyFilter, + ElementPropertyFilter, + SessionPropertyFilter, + CohortPropertyFilter, + RecordingPropertyFilter, + GroupPropertyFilter, + FeaturePropertyFilter, + HogQLPropertyFilter, + EmptyPropertyFilter, + DataWarehousePropertyFilter, + DataWarehousePersonPropertyFilter, ) from posthog.warehouse.models import DataWarehouseJoin, DataWarehouseSavedQuery, DataWarehouseTable from posthog.utils import get_from_dict_or_attr @@ -67,8 +78,194 @@ def visit_call(self, node: ast.Call): self.visit(arg) +def _handle_bool_values(value: ValueT, field: ast.Field, property: Property, team: Team) -> ValueT | bool: + if value != "true" and value != "false": + return value + if property.type == "person": + property_types = PropertyDefinition.objects.filter( + team=team, + name=property.key, + type=PropertyDefinition.Type.PERSON, + ) + elif property.type == "group": + property_types = PropertyDefinition.objects.filter( + team=team, + name=property.key, + type=PropertyDefinition.Type.GROUP, + group_type_index=property.group_type_index, + ) + elif property.type == "data_warehouse_person_property": + key = field.chain[-2] + + # TODO: pass id of table item being filtered on instead of searching through joins + current_join: DataWarehouseJoin | None = ( + DataWarehouseJoin.objects.filter(Q(deleted__isnull=True) | Q(deleted=False)) + .filter(team=team, source_table_name="persons", field_name=key) + .first() + ) + + if not current_join: + raise Exception(f"Could not find join for key {key}") + + prop_type = None + + maybe_view = ( + DataWarehouseSavedQuery.objects.filter(Q(deleted__isnull=True) | Q(deleted=False)) + .filter(team=team, name=current_join.joining_table_name) + .first() + ) + + if maybe_view: + prop_type_dict = maybe_view.columns.get(property.key, None) + prop_type = prop_type_dict.get("hogql") + + maybe_table = ( + DataWarehouseTable.objects.filter(Q(deleted__isnull=True) | Q(deleted=False)) + .filter(team=team, name=current_join.joining_table_name) + .first() + ) + + if maybe_table: + prop_type_dict = maybe_table.columns.get(property.key, None) + prop_type = prop_type_dict.get("hogql") + + if not maybe_view and not maybe_table: + raise Exception(f"Could not find table or view for key {key}") + + if prop_type == "BooleanDatabaseField": + if value == "true": + value = True + if value == "false": + value = False + + return value + + else: + property_types = PropertyDefinition.objects.filter( + team=team, + name=property.key, + type=PropertyDefinition.Type.EVENT, + ) + property_type = property_types[0].property_type if len(property_types) > 0 else None + + if property_type == PropertyType.Boolean: + if value == "true": + return True + if value == "false": + return False + return value + + +def _field_to_compare_op( + field: ast.Field, value: ValueT, operator: PropertyOperator, property: Property, is_json_field: bool, team: Team +) -> ast.Expr: + if operator == PropertyOperator.IS_SET: + return ast.CompareOperation( + op=ast.CompareOperationOp.NotEq, + left=field, + right=ast.Constant(value=None), + ) + elif operator == PropertyOperator.IS_NOT_SET: + return ast.Or( + exprs=[ + ast.CompareOperation( + op=ast.CompareOperationOp.Eq, + left=field, + right=ast.Constant(value=None), + ) + ] + + ( + [ + ast.Not( + expr=ast.Call( + name="JSONHas", + args=[ast.Field(chain=field.chain[:-1]), ast.Constant(value=property.key)], + ) + ) + ] + if is_json_field + else [] + ) + ) + elif operator == PropertyOperator.ICONTAINS: + return ast.CompareOperation( + op=ast.CompareOperationOp.ILike, + left=field, + right=ast.Constant(value=f"%{value}%"), + ) + elif operator == PropertyOperator.NOT_ICONTAINS: + return ast.CompareOperation( + op=ast.CompareOperationOp.NotILike, + left=field, + right=ast.Constant(value=f"%{value}%"), + ) + elif operator == PropertyOperator.REGEX: + return ast.Call( + name="ifNull", + args=[ + ast.Call(name="match", args=[ast.Call(name="toString", args=[field]), ast.Constant(value=value)]), + ast.Constant(value=0), + ], + ) + elif operator == PropertyOperator.NOT_REGEX: + return ast.Call( + name="ifNull", + args=[ + ast.Call( + name="not", + args=[ + ast.Call( + name="match", args=[ast.Call(name="toString", args=[field]), ast.Constant(value=value)] + ) + ], + ), + ast.Constant(value=1), + ], + ) + elif operator == PropertyOperator.EXACT or operator == PropertyOperator.IS_DATE_EXACT: + return ast.CompareOperation( + op=ast.CompareOperationOp.Eq, + left=field, + right=ast.Constant(value=_handle_bool_values(value, field, property, team)), + ) + elif operator == PropertyOperator.IS_NOT: + return ast.CompareOperation( + op=ast.CompareOperationOp.NotEq, + left=field, + right=ast.Constant(value=_handle_bool_values(value, field, property, team)), + ) + elif operator == PropertyOperator.LT or operator == PropertyOperator.IS_DATE_BEFORE: + return ast.CompareOperation(op=ast.CompareOperationOp.Lt, left=field, right=ast.Constant(value=value)) + elif operator == PropertyOperator.GT or operator == PropertyOperator.IS_DATE_AFTER: + return ast.CompareOperation(op=ast.CompareOperationOp.Gt, left=field, right=ast.Constant(value=value)) + elif operator == PropertyOperator.LTE: + return ast.CompareOperation(op=ast.CompareOperationOp.LtEq, left=field, right=ast.Constant(value=value)) + elif operator == PropertyOperator.GTE: + return ast.CompareOperation(op=ast.CompareOperationOp.GtEq, left=field, right=ast.Constant(value=value)) + else: + raise NotImplementedError(f"PropertyOperator {operator} not implemented") + + def property_to_expr( - property: Union[BaseModel, PropertyGroup, Property, dict, list, ast.Expr], + property: list + | dict + | PropertyGroup + | PropertyGroupFilter + | PropertyGroupFilterValue + | Property + | ast.Expr + | EventPropertyFilter + | PersonPropertyFilter + | ElementPropertyFilter + | SessionPropertyFilter + | CohortPropertyFilter + | RecordingPropertyFilter + | GroupPropertyFilter + | FeaturePropertyFilter + | HogQLPropertyFilter + | EmptyPropertyFilter + | DataWarehousePropertyFilter + | DataWarehousePersonPropertyFilter, team: Team, scope: Literal["event", "person", "session", "replay", "replay_entity", "replay_pdi"] = "event", ) -> ast.Expr: @@ -170,16 +367,11 @@ def property_to_expr( else: chain = ["properties"] - if property.type == "session": - properties_field = None - else: - properties_field = ast.Field(chain=chain) - field = ast.Field(chain=[*chain, property.key]) if isinstance(value, list): if len(value) == 0: - return ast.Constant(value=True) + return ast.Constant(value=1) elif len(value) == 1: value = value[0] else: @@ -206,164 +398,14 @@ def property_to_expr( return ast.And(exprs=exprs) return ast.Or(exprs=exprs) - if operator == PropertyOperator.IS_SET: - return ast.CompareOperation( - op=ast.CompareOperationOp.NotEq, - left=field, - right=ast.Constant(value=None), - ) - elif operator == PropertyOperator.IS_NOT_SET: - return ast.Or( - exprs=[ - ast.CompareOperation( - op=ast.CompareOperationOp.Eq, - left=field, - right=ast.Constant(value=None), - ) - ] - + ( - [] - if not properties_field or properties_field == field - else [ - ast.Not( - expr=ast.Call( - name="JSONHas", - args=[properties_field, ast.Constant(value=property.key)], - ) - ) - ] - ) - ) - elif operator == PropertyOperator.ICONTAINS: - return ast.CompareOperation( - op=ast.CompareOperationOp.ILike, - left=field, - right=ast.Constant(value=f"%{value}%"), - ) - elif operator == PropertyOperator.NOT_ICONTAINS: - return ast.CompareOperation( - op=ast.CompareOperationOp.NotILike, - left=field, - right=ast.Constant(value=f"%{value}%"), - ) - elif operator == PropertyOperator.REGEX: - return ast.Call( - name="ifNull", - args=[ - ast.Call(name="match", args=[ast.Call(name="toString", args=[field]), ast.Constant(value=value)]), - ast.Constant(value=0), - ], - ) - elif operator == PropertyOperator.NOT_REGEX: - return ast.Call( - name="ifNull", - args=[ - ast.Call( - name="not", - args=[ - ast.Call( - name="match", args=[ast.Call(name="toString", args=[field]), ast.Constant(value=value)] - ) - ], - ), - ast.Constant(value=1), - ], - ) - elif operator == PropertyOperator.EXACT or operator == PropertyOperator.IS_DATE_EXACT: - op = ast.CompareOperationOp.Eq - elif operator == PropertyOperator.IS_NOT: - op = ast.CompareOperationOp.NotEq - elif operator == PropertyOperator.LT or operator == PropertyOperator.IS_DATE_BEFORE: - op = ast.CompareOperationOp.Lt - elif operator == PropertyOperator.GT or operator == PropertyOperator.IS_DATE_AFTER: - op = ast.CompareOperationOp.Gt - elif operator == PropertyOperator.LTE: - op = ast.CompareOperationOp.LtEq - elif operator == PropertyOperator.GTE: - op = ast.CompareOperationOp.GtEq - else: - raise NotImplementedError(f"PropertyOperator {operator} not implemented") - - # For Boolean and untyped properties, treat "true" and "false" as boolean values - if ( - (op == ast.CompareOperationOp.Eq or op == ast.CompareOperationOp.NotEq) - and team is not None - and (value == "true" or value == "false") - ): - if property.type == "person": - property_types = PropertyDefinition.objects.filter( - team=team, - name=property.key, - type=PropertyDefinition.Type.PERSON, - ) - elif property.type == "group": - property_types = PropertyDefinition.objects.filter( - team=team, - name=property.key, - type=PropertyDefinition.Type.GROUP, - group_type_index=property.group_type_index, - ) - elif property.type == "data_warehouse_person_property": - key = chain[-1] - - # TODO: pass id of table item being filtered on instead of searching through joins - current_join: DataWarehouseJoin | None = ( - DataWarehouseJoin.objects.filter(Q(deleted__isnull=True) | Q(deleted=False)) - .filter(team=team, source_table_name="persons", field_name=key) - .first() - ) - - if not current_join: - raise Exception(f"Could not find join for key {key}") - - prop_type = None - - maybe_view = ( - DataWarehouseSavedQuery.objects.filter(Q(deleted__isnull=True) | Q(deleted=False)) - .filter(team=team, name=current_join.joining_table_name) - .first() - ) - - if maybe_view: - prop_type_dict = maybe_view.columns.get(property.key, None) - prop_type = prop_type_dict.get("hogql") - - maybe_table = ( - DataWarehouseTable.objects.filter(Q(deleted__isnull=True) | Q(deleted=False)) - .filter(team=team, name=current_join.joining_table_name) - .first() - ) - - if maybe_table: - prop_type_dict = maybe_table.columns.get(property.key, None) - prop_type = prop_type_dict.get("hogql") - - if not maybe_view and not maybe_table: - raise Exception(f"Could not find table or view for key {key}") - - if prop_type == "BooleanDatabaseField": - if value == "true": - value = True - if value == "false": - value = False - - return ast.CompareOperation(op=op, left=field, right=ast.Constant(value=value)) - - else: - property_types = PropertyDefinition.objects.filter( - team=team, - name=property.key, - type=PropertyDefinition.Type.EVENT, - ) - property_type = property_types[0].property_type if len(property_types) > 0 else None - - if property_type == PropertyType.Boolean: - if value == "true": - value = True - if value == "false": - value = False - - return ast.CompareOperation(op=op, left=field, right=ast.Constant(value=value)) + return _field_to_compare_op( + field=field, + value=value, + operator=operator, + team=team, + property=property, + is_json_field=property.type != "session", + ) elif property.type == "element": if scope == "person": @@ -407,10 +449,34 @@ def property_to_expr( return expr if property.key == "href": - return element_chain_key_filter("href", str(value), operator) + return parse_expr( + "arrayExists(href -> {compare}, elements_chain_hrefs)", + { + "compare": _field_to_compare_op( + field=ast.Field(chain=["href"]), + value=value, + operator=operator, + team=team, + property=property, + is_json_field=False, + ) + }, + ) if property.key == "text": - return element_chain_key_filter("text", str(value), operator) + return parse_expr( + "arrayExists(text -> {compare}, elements_chain_texts)", + { + "compare": _field_to_compare_op( + field=ast.Field(chain=["text"]), + value=value, + operator=operator, + team=team, + property=property, + is_json_field=False, + ) + }, + ) raise NotImplementedError(f"property_to_expr for type element not implemented for key {property.key}") elif property.type == "cohort" or property.type == "static-cohort" or property.type == "precalculated-cohort": @@ -449,21 +515,49 @@ def action_to_expr(action: Action) -> ast.Expr: exprs.append(tag_name_to_expr(step.tag_name)) if step.href is not None: if step.href_matching == "regex": - operator = PropertyOperator.REGEX + exprs.append( + ast.CompareOperation( + op=ast.CompareOperationOp.Regex, + left=ast.Field(chain=["elements_chain_href"]), + right=ast.Constant(value=step.href), + ) + ) elif step.href_matching == "contains": - operator = PropertyOperator.ICONTAINS + exprs.append( + ast.CompareOperation( + op=ast.CompareOperationOp.ILike, + left=ast.Field(chain=["elements_chain_href"]), + right=ast.Constant(value=f"%{step.href}%"), + ) + ) else: - operator = PropertyOperator.EXACT - exprs.append(element_chain_key_filter("href", step.href, operator)) + exprs.append( + ast.CompareOperation( + op=ast.CompareOperationOp.Eq, + left=ast.Field(chain=["elements_chain_href"]), + right=ast.Constant(value=step.href), + ) + ) if step.text is not None: + value = step.text if step.text_matching == "regex": - operator = PropertyOperator.REGEX + match = ast.CompareOperationOp.Regex elif step.text_matching == "contains": - operator = PropertyOperator.ICONTAINS + match = ast.CompareOperationOp.ILike + value = f"%{value}%" else: - operator = PropertyOperator.EXACT - exprs.append(element_chain_key_filter("text", step.text, operator)) - + match = ast.CompareOperationOp.Eq + + exprs.append( + parse_expr( + "arrayExists(x -> {match}, elements_chain_texts)", + { + "match": ast.CompareOperation( + op=match, left=ast.Field(chain=["x"]), right=ast.Constant(value=value) + ) + }, + ) + ) if step.url: if step.url_matching == "exact": expr = parse_expr( @@ -512,45 +606,38 @@ def entity_to_expr(entity: RetentionEntity) -> ast.Expr: ) -def element_chain_key_filter(key: str, text: str, operator: PropertyOperator): - escaped = text.replace('"', r"\"") - if operator == PropertyOperator.IS_SET or operator == PropertyOperator.IS_NOT_SET: - value = r'[^"]+' - elif operator == PropertyOperator.ICONTAINS or operator == PropertyOperator.NOT_ICONTAINS: - value = rf'[^"]*{re.escape(escaped)}[^"]*' - elif operator == PropertyOperator.REGEX or operator == PropertyOperator.NOT_REGEX: - value = escaped - elif operator == PropertyOperator.EXACT or operator == PropertyOperator.IS_NOT: - value = re.escape(escaped) - else: - raise NotImplementedError(f"element_href_to_expr not implemented for operator {operator}") - - regex = f'({key}="{value}")' - if operator == PropertyOperator.ICONTAINS or operator == PropertyOperator.NOT_ICONTAINS: - expr = parse_expr("elements_chain =~* {regex}", {"regex": ast.Constant(value=str(regex))}) - else: - expr = parse_expr("elements_chain =~ {regex}", {"regex": ast.Constant(value=str(regex))}) - - if ( - operator == PropertyOperator.IS_NOT_SET - or operator == PropertyOperator.NOT_ICONTAINS - or operator == PropertyOperator.IS_NOT - or operator == PropertyOperator.NOT_REGEX - ): - expr = ast.Call(name="not", args=[expr]) - return expr - - def tag_name_to_expr(tag_name: str): regex = rf"(^|;){tag_name}(\.|$|;|:)" expr = parse_expr("elements_chain =~ {regex}", {"regex": ast.Constant(value=str(regex))}) return expr -def selector_to_expr(selector: str): - regex = build_selector_regex(Selector(selector, escape_slashes=False)) - expr = parse_expr("elements_chain =~ {regex}", {"regex": ast.Constant(value=regex)}) - return expr +def selector_to_expr(selector_string: str): + selector = Selector(selector_string, escape_slashes=False) + exprs = [] + regex = build_selector_regex(selector) + exprs.append(parse_expr("elements_chain =~ {regex}", {"regex": ast.Constant(value=regex)})) + + useful_elements: list[ast.Expr] = [] + for part in selector.parts: + if "tag_name" in part.data: + if part.data["tag_name"] in Element.USEFUL_ELEMENTS: + useful_elements.append(ast.Constant(value=part.data["tag_name"])) + + if "attr_id" in part.data: + exprs.append( + parse_expr( + "indexOf(elements_chain_ids, {value}) > 0", {"value": ast.Constant(value=part.data["attr_id"])} + ) + ) + if len(useful_elements) > 0: + exprs.append( + parse_expr("hasAll(elements_chain_elements, {value})", {"value": ast.Array(exprs=useful_elements)}) + ) + + if len(exprs) == 1: + return exprs[0] + return ast.And(exprs=exprs) def get_property_type(property): diff --git a/posthog/hogql/test/__snapshots__/test_resolver.ambr b/posthog/hogql/test/__snapshots__/test_resolver.ambr index d7d042252c55d..9907d46ee7f89 100644 --- a/posthog/hogql/test/__snapshots__/test_resolver.ambr +++ b/posthog/hogql/test/__snapshots__/test_resolver.ambr @@ -32,6 +32,10 @@ created_at: {}, distinct_id: {}, elements_chain: {}, + elements_chain_elements: {}, + elements_chain_href: {}, + elements_chain_ids: {}, + elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -120,6 +124,34 @@ table_type: } }, + elements_chain_elements: { + alias: "elements_chain_elements" + type: { + name: "elements_chain_elements" + table_type: + } + }, + elements_chain_href: { + alias: "elements_chain_href" + type: { + name: "elements_chain_href" + table_type: + } + }, + elements_chain_ids: { + alias: "elements_chain_ids" + type: { + name: "elements_chain_ids" + table_type: + } + }, + elements_chain_texts: { + alias: "elements_chain_texts" + type: { + name: "elements_chain_texts" + table_type: + } + }, event: { alias: "event" type: { @@ -382,6 +414,74 @@ alias: "$group_4" type: } + }, + { + alias: "elements_chain_href" + expr: { + chain: [ + "elements_chain_href" + ] + type: { + name: "elements_chain_href" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_href" + type: + } + }, + { + alias: "elements_chain_texts" + expr: { + chain: [ + "elements_chain_texts" + ] + type: { + name: "elements_chain_texts" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_texts" + type: + } + }, + { + alias: "elements_chain_ids" + expr: { + chain: [ + "elements_chain_ids" + ] + type: { + name: "elements_chain_ids" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_ids" + type: + } + }, + { + alias: "elements_chain_elements" + expr: { + chain: [ + "elements_chain_elements" + ] + type: { + name: "elements_chain_elements" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_elements" + type: + } } ] select_from: { @@ -540,6 +640,50 @@ } hidden: True type: + }, + { + alias: "elements_chain_href" + expr: { + chain: [ + "elements_chain_href" + ] + type: + } + hidden: True + type: + }, + { + alias: "elements_chain_texts" + expr: { + chain: [ + "elements_chain_texts" + ] + type: + } + hidden: True + type: + }, + { + alias: "elements_chain_ids" + expr: { + chain: [ + "elements_chain_ids" + ] + type: + } + hidden: True + type: + }, + { + alias: "elements_chain_elements" + expr: { + chain: [ + "elements_chain_elements" + ] + type: + } + hidden: True + type: } ] select_from: { @@ -571,6 +715,10 @@ created_at: , distinct_id: , elements_chain: , + elements_chain_elements: , + elements_chain_href: , + elements_chain_ids: , + elements_chain_texts: , event: , properties: , timestamp: , @@ -607,6 +755,10 @@ created_at: {}, distinct_id: {}, elements_chain: {}, + elements_chain_elements: {}, + elements_chain_href: {}, + elements_chain_ids: {}, + elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -859,6 +1011,74 @@ alias: "$group_4" type: } + }, + { + alias: "elements_chain_href" + expr: { + chain: [ + "elements_chain_href" + ] + type: { + name: "elements_chain_href" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_href" + type: + } + }, + { + alias: "elements_chain_texts" + expr: { + chain: [ + "elements_chain_texts" + ] + type: { + name: "elements_chain_texts" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_texts" + type: + } + }, + { + alias: "elements_chain_ids" + expr: { + chain: [ + "elements_chain_ids" + ] + type: { + name: "elements_chain_ids" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_ids" + type: + } + }, + { + alias: "elements_chain_elements" + expr: { + chain: [ + "elements_chain_elements" + ] + type: { + name: "elements_chain_elements" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_elements" + type: + } } ] select_from: { @@ -884,6 +1104,10 @@ created_at: , distinct_id: , elements_chain: , + elements_chain_elements: , + elements_chain_href: , + elements_chain_ids: , + elements_chain_texts: , event: , properties: , timestamp: , @@ -930,6 +1154,10 @@ created_at: {}, distinct_id: {}, elements_chain: {}, + elements_chain_elements: {}, + elements_chain_href: {}, + elements_chain_ids: {}, + elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -1018,6 +1246,34 @@ table_type: } }, + elements_chain_elements: { + alias: "elements_chain_elements" + type: { + name: "elements_chain_elements" + table_type: + } + }, + elements_chain_href: { + alias: "elements_chain_href" + type: { + name: "elements_chain_href" + table_type: + } + }, + elements_chain_ids: { + alias: "elements_chain_ids" + type: { + name: "elements_chain_ids" + table_type: + } + }, + elements_chain_texts: { + alias: "elements_chain_texts" + type: { + name: "elements_chain_texts" + table_type: + } + }, event: { alias: "event" type: { @@ -1280,6 +1536,74 @@ alias: "$group_4" type: } + }, + { + alias: "elements_chain_href" + expr: { + chain: [ + "elements_chain_href" + ] + type: { + name: "elements_chain_href" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_href" + type: + } + }, + { + alias: "elements_chain_texts" + expr: { + chain: [ + "elements_chain_texts" + ] + type: { + name: "elements_chain_texts" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_texts" + type: + } + }, + { + alias: "elements_chain_ids" + expr: { + chain: [ + "elements_chain_ids" + ] + type: { + name: "elements_chain_ids" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_ids" + type: + } + }, + { + alias: "elements_chain_elements" + expr: { + chain: [ + "elements_chain_elements" + ] + type: { + name: "elements_chain_elements" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_elements" + type: + } } ] select_from: { @@ -1440,6 +1764,50 @@ } hidden: True type: + }, + { + alias: "elements_chain_href" + expr: { + chain: [ + "elements_chain_href" + ] + type: + } + hidden: True + type: + }, + { + alias: "elements_chain_texts" + expr: { + chain: [ + "elements_chain_texts" + ] + type: + } + hidden: True + type: + }, + { + alias: "elements_chain_ids" + expr: { + chain: [ + "elements_chain_ids" + ] + type: + } + hidden: True + type: + }, + { + alias: "elements_chain_elements" + expr: { + chain: [ + "elements_chain_elements" + ] + type: + } + hidden: True + type: } ] select_from: { @@ -1476,6 +1844,10 @@ created_at: {}, distinct_id: {}, elements_chain: {}, + elements_chain_elements: {}, + elements_chain_href: {}, + elements_chain_ids: {}, + elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -1727,6 +2099,74 @@ alias: "$group_4" type: } + }, + { + alias: "elements_chain_href" + expr: { + chain: [ + "elements_chain_href" + ] + type: { + name: "elements_chain_href" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_href" + type: + } + }, + { + alias: "elements_chain_texts" + expr: { + chain: [ + "elements_chain_texts" + ] + type: { + name: "elements_chain_texts" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_texts" + type: + } + }, + { + alias: "elements_chain_ids" + expr: { + chain: [ + "elements_chain_ids" + ] + type: { + name: "elements_chain_ids" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_ids" + type: + } + }, + { + alias: "elements_chain_elements" + expr: { + chain: [ + "elements_chain_elements" + ] + type: { + name: "elements_chain_elements" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_elements" + type: + } } ] select_from: { @@ -1752,6 +2192,10 @@ created_at: , distinct_id: , elements_chain: , + elements_chain_elements: , + elements_chain_href: , + elements_chain_ids: , + elements_chain_texts: , event: , properties: , timestamp: , @@ -1789,6 +2233,10 @@ created_at: , distinct_id: , elements_chain: , + elements_chain_elements: , + elements_chain_href: , + elements_chain_ids: , + elements_chain_texts: , event: , properties: , timestamp: , @@ -2037,6 +2485,10 @@ created_at: {}, distinct_id: {}, elements_chain: {}, + elements_chain_elements: {}, + elements_chain_href: {}, + elements_chain_ids: {}, + elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -2288,6 +2740,74 @@ alias: "$group_4" type: } + }, + { + alias: "elements_chain_href" + expr: { + chain: [ + "elements_chain_href" + ] + type: { + name: "elements_chain_href" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_href" + type: + } + }, + { + alias: "elements_chain_texts" + expr: { + chain: [ + "elements_chain_texts" + ] + type: { + name: "elements_chain_texts" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_texts" + type: + } + }, + { + alias: "elements_chain_ids" + expr: { + chain: [ + "elements_chain_ids" + ] + type: { + name: "elements_chain_ids" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_ids" + type: + } + }, + { + alias: "elements_chain_elements" + expr: { + chain: [ + "elements_chain_elements" + ] + type: { + name: "elements_chain_elements" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_elements" + type: + } } ] select_from: { @@ -2313,6 +2833,10 @@ created_at: , distinct_id: , elements_chain: , + elements_chain_elements: , + elements_chain_href: , + elements_chain_ids: , + elements_chain_texts: , event: , properties: , timestamp: , @@ -2353,6 +2877,10 @@ created_at: {}, distinct_id: {}, elements_chain: {}, + elements_chain_elements: {}, + elements_chain_href: {}, + elements_chain_ids: {}, + elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -2605,6 +3133,74 @@ alias: "$group_4" type: } + }, + { + alias: "elements_chain_href" + expr: { + chain: [ + "elements_chain_href" + ] + type: { + name: "elements_chain_href" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_href" + type: + } + }, + { + alias: "elements_chain_texts" + expr: { + chain: [ + "elements_chain_texts" + ] + type: { + name: "elements_chain_texts" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_texts" + type: + } + }, + { + alias: "elements_chain_ids" + expr: { + chain: [ + "elements_chain_ids" + ] + type: { + name: "elements_chain_ids" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_ids" + type: + } + }, + { + alias: "elements_chain_elements" + expr: { + chain: [ + "elements_chain_elements" + ] + type: { + name: "elements_chain_elements" + table_type: + } + } + hidden: True + type: { + alias: "elements_chain_elements" + type: + } } ] select_from: { @@ -2631,6 +3227,10 @@ created_at: , distinct_id: , elements_chain: , + elements_chain_elements: , + elements_chain_href: , + elements_chain_ids: , + elements_chain_texts: , event: , properties: , timestamp: , @@ -2671,6 +3271,10 @@ created_at: {}, distinct_id: {}, elements_chain: {}, + elements_chain_elements: {}, + elements_chain_href: {}, + elements_chain_ids: {}, + elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -2770,6 +3374,10 @@ created_at: {}, distinct_id: {}, elements_chain: {}, + elements_chain_elements: {}, + elements_chain_href: {}, + elements_chain_ids: {}, + elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -3149,6 +3757,10 @@ created_at: {}, distinct_id: {}, elements_chain: {}, + elements_chain_elements: {}, + elements_chain_href: {}, + elements_chain_ids: {}, + elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -3282,6 +3894,10 @@ created_at: {}, distinct_id: {}, elements_chain: {}, + elements_chain_elements: {}, + elements_chain_href: {}, + elements_chain_ids: {}, + elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -3419,6 +4035,10 @@ created_at: {}, distinct_id: {}, elements_chain: {}, + elements_chain_elements: {}, + elements_chain_href: {}, + elements_chain_ids: {}, + elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -3592,6 +4212,10 @@ created_at: {}, distinct_id: {}, elements_chain: {}, + elements_chain_elements: {}, + elements_chain_href: {}, + elements_chain_ids: {}, + elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -3770,6 +4394,10 @@ created_at: {}, distinct_id: {}, elements_chain: {}, + elements_chain_elements: {}, + elements_chain_href: {}, + elements_chain_ids: {}, + elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -3901,6 +4529,10 @@ created_at: {}, distinct_id: {}, elements_chain: {}, + elements_chain_elements: {}, + elements_chain_href: {}, + elements_chain_ids: {}, + elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -4033,6 +4665,10 @@ created_at: {}, distinct_id: {}, elements_chain: {}, + elements_chain_elements: {}, + elements_chain_href: {}, + elements_chain_ids: {}, + elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -4152,6 +4788,10 @@ created_at: {}, distinct_id: {}, elements_chain: {}, + elements_chain_elements: {}, + elements_chain_href: {}, + elements_chain_ids: {}, + elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -4358,6 +4998,10 @@ created_at: {}, distinct_id: {}, elements_chain: {}, + elements_chain_elements: {}, + elements_chain_href: {}, + elements_chain_ids: {}, + elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -4452,6 +5096,10 @@ created_at: {}, distinct_id: {}, elements_chain: {}, + elements_chain_elements: {}, + elements_chain_href: {}, + elements_chain_ids: {}, + elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -4558,6 +5206,10 @@ created_at: {}, distinct_id: {}, elements_chain: {}, + elements_chain_elements: {}, + elements_chain_href: {}, + elements_chain_ids: {}, + elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, diff --git a/posthog/hogql/test/test_property.py b/posthog/hogql/test/test_property.py index 19b48e652808b..359401b52fcda 100644 --- a/posthog/hogql/test/test_property.py +++ b/posthog/hogql/test/test_property.py @@ -6,7 +6,6 @@ from posthog.hogql.parser import parse_expr from posthog.hogql.property import ( action_to_expr, - element_chain_key_filter, has_aggregation, property_to_expr, selector_to_expr, @@ -23,7 +22,7 @@ ) from posthog.models.property import PropertyGroup from posthog.models.property_definition import PropertyType -from posthog.schema import HogQLPropertyFilter, PropertyOperator, RetentionEntity, EmptyPropertyFilter +from posthog.schema import HogQLPropertyFilter, RetentionEntity, EmptyPropertyFilter from posthog.test.base import BaseTest from posthog.warehouse.models import DataWarehouseTable, DataWarehouseJoin, DataWarehouseCredential @@ -341,7 +340,7 @@ def test_property_to_expr_element(self): "operator": "exact", } ), - clear_locations(element_chain_key_filter("href", "href-text.", PropertyOperator.EXACT)), + self._parse_expr("arrayExists(href -> href = 'href-text.', elements_chain_hrefs)"), ) self.assertEqual( self._property_to_expr( @@ -352,7 +351,9 @@ def test_property_to_expr_element(self): "operator": "regex", } ), - clear_locations(element_chain_key_filter("text", "text-text.", PropertyOperator.REGEX)), + self._parse_expr( + "arrayExists(text -> ifNull(match(toString(text), 'text-text.'), false), elements_chain_texts)" + ), ) def test_property_groups(self): @@ -470,7 +471,14 @@ def test_selector_to_expr(self): self.assertEqual( self._selector_to_expr("a[href='boo']"), clear_locations( - elements_chain_match('(^|;)a.*?href="boo".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))') + parse_expr( + "{regex} and hasAll(elements_chain_elements, ['a'])", + { + "regex": elements_chain_match( + '(^|;)a.*?href="boo".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' + ) + }, + ) ), ) self.assertEqual( @@ -482,14 +490,26 @@ def test_selector_to_expr(self): self.assertEqual( self._selector_to_expr("#withid"), clear_locations( - elements_chain_match('(^|;).*?attr_id="withid".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))') + parse_expr( + """{regex} and indexOf(elements_chain_ids, 'withid') > 0""", + { + "regex": elements_chain_match( + '(^|;).*?attr_id="withid".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' + ) + }, + ) ), ) self.assertEqual( self._selector_to_expr("#with-dashed-id"), clear_locations( - elements_chain_match( - '(^|;).*?attr_id="with\\-dashed\\-id".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' + parse_expr( + """{regex} and indexOf(elements_chain_ids, 'with-dashed-id') > 0""", + { + "regex": elements_chain_match( + '(^|;).*?attr_id="with\\-dashed\\-id".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' + ) + }, ) ), ) @@ -500,46 +520,17 @@ def test_selector_to_expr(self): self.assertEqual( self._selector_to_expr("#with\\slashed\\id"), clear_locations( - elements_chain_match( - '(^|;).*?attr_id="with\\\\slashed\\\\id".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' + parse_expr( + "{regex} and indexOf(elements_chain_ids, 'with\\\\slashed\\\\id') > 0", + { + "regex": elements_chain_match( + '(^|;).*?attr_id="with\\\\slashed\\\\id".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' + ) + }, ) ), ) - def test_elements_chain_key_filter(self): - self.assertEqual( - clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.IS_SET)), - clear_locations(elements_chain_match('(href="[^"]+")')), - ) - self.assertEqual( - clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.IS_NOT_SET)), - clear_locations(not_call(elements_chain_match('(href="[^"]+")'))), - ) - self.assertEqual( - clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.ICONTAINS)), - clear_locations(elements_chain_imatch('(href="[^"]*boo\\.\\.[^"]*")')), - ) - self.assertEqual( - clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.NOT_ICONTAINS)), - clear_locations(not_call(elements_chain_imatch('(href="[^"]*boo\\.\\.[^"]*")'))), - ) - self.assertEqual( - clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.REGEX)), - clear_locations(elements_chain_match('(href="boo..")')), - ) - self.assertEqual( - clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.NOT_REGEX)), - clear_locations(not_call(elements_chain_match('(href="boo..")'))), - ) - self.assertEqual( - clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.EXACT)), - clear_locations(elements_chain_match('(href="boo\\.\\.")')), - ) - self.assertEqual( - clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.IS_NOT)), - clear_locations(not_call(elements_chain_match('(href="boo\\.\\.")'))), - ) - def test_action_to_expr(self): action1 = Action.objects.create( team=self.team, @@ -547,19 +538,27 @@ def test_action_to_expr(self): { "event": "$autocapture", "selector": "a.nav-link.active", - "tag_name": "a", } ], ) self.assertEqual( clear_locations(action_to_expr(action1)), self._parse_expr( - "event = '$autocapture' and elements_chain =~ {regex1} and elements_chain =~ {regex2}", + "event = '$autocapture' and {regex1}", { - "regex1": ast.Constant( - value='(^|;)a.*?\\.active\\..*?nav\\-link([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' + "regex1": ast.And( + exprs=[ + self._parse_expr( + "elements_chain =~ {regex}", + { + "regex": ast.Constant( + value='(^|;)a.*?\\.active\\..*?nav\\-link([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' + ) + }, + ), + self._parse_expr("hasAll(elements_chain_elements, ['a'])"), + ] ), - "regex2": ast.Constant(value="(^|;)a(\\.|$|;|:)"), }, ), ) @@ -611,6 +610,24 @@ def test_action_to_expr(self): self._parse_expr("event = '$pageview' OR true"), # All events just resolve to "true" ) + action5 = Action.objects.create( + team=self.team, + steps_json=[{"event": "$autocapture", "href": "https://example4.com", "href_matching": "regex"}], + ) + self.assertEqual( + clear_locations(action_to_expr(action5)), + self._parse_expr("event = '$autocapture' and elements_chain_href =~ 'https://example4.com'"), + ) + + action6 = Action.objects.create( + team=self.team, + steps_json=[{"event": "$autocapture", "text": "blabla", "text_matching": "regex"}], + ) + self.assertEqual( + clear_locations(action_to_expr(action6)), + self._parse_expr("event = '$autocapture' and arrayExists(x -> x =~ 'blabla', elements_chain_texts)"), + ) + def test_cohort_filter_static(self): cohort = Cohort.objects.create( team=self.team, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr index 9822999809a62..d733159ba5ee0 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr @@ -317,9 +317,9 @@ if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id) AS aggregation_target, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, - if(and(equals(e.event, '$autocapture'), match(e.elements_chain, '(^|;)button(\\.|$|;|:)'), match(e.elements_chain, '(text="Pay\\ \\$10")')), 1, 0) AS step_1, + if(and(equals(e.event, '$autocapture'), match(e.elements_chain, '(^|;)button(\\.|$|;|:)'), arrayExists(x -> ifNull(equals(x, 'Pay $10'), 0), e.elements_chain_texts)), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, - if(and(equals(e.event, '$autocapture'), match(e.elements_chain, '(^|;)a(\\.|$|;|:)'), match(e.elements_chain, '(href="/movie")')), 1, 0) AS step_2, + if(and(equals(e.event, '$autocapture'), match(e.elements_chain, '(^|;)a(\\.|$|;|:)'), equals(e.elements_chain_href, '/movie')), 1, 0) AS step_2, if(ifNull(equals(step_2, 1), 0), timestamp, NULL) AS latest_2 FROM events AS e LEFT OUTER JOIN diff --git a/posthog/models/event/sql.py b/posthog/models/event/sql.py index 33e7d2a2c3062..8219bece6572b 100644 --- a/posthog/models/event/sql.py +++ b/posthog/models/event/sql.py @@ -65,6 +65,10 @@ , $group_4 VARCHAR MATERIALIZED {trim_quotes_expr("JSONExtractRaw(properties, '$group_4')")} COMMENT 'column_materializer::$group_4' , $window_id VARCHAR MATERIALIZED {trim_quotes_expr("JSONExtractRaw(properties, '$window_id')")} COMMENT 'column_materializer::$window_id' , $session_id VARCHAR MATERIALIZED {trim_quotes_expr("JSONExtractRaw(properties, '$session_id')")} COMMENT 'column_materializer::$session_id' + , elements_chain_href String MATERIALIZED extract(elements_chain, '(?::|\")href="(.*?)"') + , elements_chain_texts Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|\")text="(.*?)"')) + , elements_chain_ids Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|\")attr_id="(.*?)"')) + , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?:^|;)(a|button|form|input|select|textarea|label)(?:\\.|$|:)')) , INDEX `minmax_$group_0` `$group_0` TYPE minmax GRANULARITY 1 , INDEX `minmax_$group_1` `$group_1` TYPE minmax GRANULARITY 1 , INDEX `minmax_$group_2` `$group_2` TYPE minmax GRANULARITY 1 @@ -72,10 +76,6 @@ , INDEX `minmax_$group_4` `$group_4` TYPE minmax GRANULARITY 1 , INDEX `minmax_$window_id` `$window_id` TYPE minmax GRANULARITY 1 , INDEX `minmax_$session_id` `$session_id` TYPE minmax GRANULARITY 1 - , elements_chain_href String MATERIALIZED extract(elements_chain, '(?::|\")href="(.*?)"') - , elements_chain_texts Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|\")text="(.*?)"')) - , elements_chain_ids Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|\")attr_id="(.*?)"')) - , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?:^|;)(a|button|form|input|select|textarea|label)(?:\\.|$|:)')) """ EVENTS_TABLE_PROXY_MATERIALIZED_COLUMNS = """ @@ -86,6 +86,10 @@ , $group_4 VARCHAR COMMENT 'column_materializer::$group_4' , $window_id VARCHAR COMMENT 'column_materializer::$window_id' , $session_id VARCHAR COMMENT 'column_materializer::$session_id' + , elements_chain_href String COMMENT 'column_materializer::elements_chain::href' + , elements_chain_texts Array(String) COMMENT 'column_materializer::elements_chain::texts' + , elements_chain_ids Array(String) COMMENT 'column_materializer::elements_chain::ids' + , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) COMMENT 'column_materializer::elements_chain::elements' """ EVENTS_DATA_TABLE_ENGINE = lambda: ReplacingMergeTree( diff --git a/posthog/test/base.py b/posthog/test/base.py index 6d1d608da930a..6f23e9d8fbc05 100644 --- a/posthog/test/base.py +++ b/posthog/test/base.py @@ -5,6 +5,7 @@ import threading import time import uuid +import unittest from collections.abc import Callable, Generator from contextlib import contextmanager from functools import wraps @@ -100,6 +101,10 @@ persons_ordering_int: int = 1 +# Expand string diffs +unittest.util._MAX_LENGTH = 2000 # type: ignore + + def _setup_test_data(klass): klass.organization = Organization.objects.create(name=klass.CONFIG_ORGANIZATION_NAME) klass.project, klass.team = Project.objects.create_with_team( From 9ee8309b9725c8b5c93bea8f0f3f636b52a7a3c6 Mon Sep 17 00:00:00 2001 From: Phani Raj Date: Tue, 23 Jul 2024 17:36:51 -0500 Subject: [PATCH 10/33] fix(Surveys): Guard for nil iteration_count when updating survey iterations (#23917) We weren't guarding for a nil iteration_count when the current_iteration was > 0. --- posthog/api/survey.py | 6 +++- posthog/api/test/test_survey.py | 59 +++++++++++++++++++++++++++++-- posthog/models/feedback/survey.py | 7 +++- 3 files changed, 68 insertions(+), 4 deletions(-) diff --git a/posthog/api/survey.py b/posthog/api/survey.py index 8c18fe6170032..cf4e965b59276 100644 --- a/posthog/api/survey.py +++ b/posthog/api/survey.py @@ -379,7 +379,11 @@ def update(self, instance: Survey, validated_data): instance.targeting_flag.save() iteration_count = validated_data.get("iteration_count") - if instance.current_iteration is not None and instance.current_iteration > iteration_count > 0: + if ( + instance.current_iteration is not None + and iteration_count is not None + and instance.current_iteration > iteration_count > 0 + ): raise serializers.ValidationError( f"Cannot change survey recurrence to {iteration_count}, should be at least {instance.current_iteration}" ) diff --git a/posthog/api/test/test_survey.py b/posthog/api/test/test_survey.py index 6fd90dfbfb26c..e90ebea3b41b1 100644 --- a/posthog/api/test/test_survey.py +++ b/posthog/api/test/test_survey.py @@ -958,7 +958,6 @@ def test_can_list_surveys(self): response_data = list.json() assert list.status_code == status.HTTP_200_OK, response_data survey = Survey.objects.get(team_id=self.team.id) - assert response_data == { "count": 1, "next": None, @@ -1019,7 +1018,7 @@ def test_can_list_surveys(self): "responses_limit": None, "iteration_count": None, "iteration_frequency_days": None, - "iteration_start_dates": None, + "iteration_start_dates": [], "current_iteration": None, "current_iteration_start_date": None, } @@ -2233,6 +2232,27 @@ def _create_recurring_survey(self) -> Survey: survey = Survey.objects.get(id=response_data["id"]) return survey + def _create_non_recurring_survey(self) -> Survey: + random_id = generate("1234567890abcdef", 10) + response = self.client.post( + f"/api/projects/{self.team.id}/surveys/", + data={ + "name": f"Recurring NPS Survey {random_id}", + "description": "Get feedback on the new notebooks feature", + "type": "popover", + "questions": [ + { + "type": "open", + "question": "What's a survey?", + } + ], + }, + ) + + response_data = response.json() + survey = Survey.objects.get(id=response_data["id"]) + return survey + def test_can_create_recurring_survey(self): survey = self._create_recurring_survey() response = self.client.patch( @@ -2346,6 +2366,41 @@ def test_cannot_reduce_iterations_lt_current_iteration(self): assert response.status_code == status.HTTP_400_BAD_REQUEST assert response.json()["detail"] == "Cannot change survey recurrence to 1, should be at least 2" + def test_can_handle_non_nil_current_iteration(self): + survey = self._create_non_recurring_survey() + survey.current_iteration = 2 + survey.save() + response = self.client.patch( + f"/api/projects/{self.team.id}/surveys/{survey.id}/", + data={ + "start_date": datetime.now() - timedelta(days=1), + }, + ) + assert response.status_code == status.HTTP_200_OK + + def test_guards_for_nil_iteration_count(self): + survey = self._create_recurring_survey() + survey.current_iteration = 2 + survey.save() + response = self.client.patch( + f"/api/projects/{self.team.id}/surveys/{survey.id}/", + data={ + "start_date": datetime.now() - timedelta(days=1), + }, + ) + assert response.status_code == status.HTTP_200_OK + survey.refresh_from_db() + self.assertIsNone(survey.current_iteration) + response = self.client.patch( + f"/api/projects/{self.team.id}/surveys/{survey.id}/", + data={ + "start_date": datetime.now() - timedelta(days=1), + "iteration_count": 3, + "iteration_frequency_days": 30, + }, + ) + assert response.status_code == status.HTTP_200_OK + def test_can_turn_off_recurring_schedule(self): survey = self._create_recurring_survey() response = self.client.patch( diff --git a/posthog/models/feedback/survey.py b/posthog/models/feedback/survey.py index 40aabf0aa96dc..d7d2008868c90 100644 --- a/posthog/models/feedback/survey.py +++ b/posthog/models/feedback/survey.py @@ -176,7 +176,12 @@ def update_survey_iterations(sender, instance, *args, **kwargs): iteration_count = 0 if instance.iteration_count is None else instance.iteration_count iteration_frequency_dates = 0 if instance.iteration_frequency_days is None else instance.iteration_frequency_days - if instance.iteration_count == 0 or instance.iteration_frequency_days == 0: + if ( + instance.iteration_count is None + or instance.iteration_frequency_days is None + or instance.iteration_count == 0 + or instance.iteration_frequency_days == 0 + ): instance.iteration_start_dates = [] instance.current_iteration = None instance.current_iteration_start_date = None From 967eb552a838648be3200e4b81ac981d6fd59422 Mon Sep 17 00:00:00 2001 From: timgl Date: Wed, 24 Jul 2024 01:29:31 +0100 Subject: [PATCH 11/33] revert: perf: use elements chain materialization (#23934) --- ee/clickhouse/materialized_columns/columns.py | 1 - mypy-baseline.txt | 3 + posthog/api/test/test_action.py | 4 + .../test/__snapshots__/test_schema.ambr | 20 +- posthog/hogql/database/schema/events.py | 5 - .../test/__snapshots__/test_database.ambr | 84 +-- posthog/hogql/property.py | 513 ++++++-------- .../test/__snapshots__/test_resolver.ambr | 652 ------------------ posthog/hogql/test/test_property.py | 115 ++- .../test/__snapshots__/test_funnel.ambr | 4 +- posthog/models/event/sql.py | 12 +- posthog/test/base.py | 5 - 12 files changed, 285 insertions(+), 1133 deletions(-) diff --git a/ee/clickhouse/materialized_columns/columns.py b/ee/clickhouse/materialized_columns/columns.py index 135f27b392190..3dc21ccde59f6 100644 --- a/ee/clickhouse/materialized_columns/columns.py +++ b/ee/clickhouse/materialized_columns/columns.py @@ -44,7 +44,6 @@ def get_materialized_columns( WHERE database = %(database)s AND table = %(table)s AND comment LIKE '%%column_materializer::%%' - AND comment not LIKE '%%column_materializer::elements_chain::%%' """, {"database": CLICKHOUSE_DATABASE, "table": table}, ) diff --git a/mypy-baseline.txt b/mypy-baseline.txt index 503f30e14b414..7ba31e2481702 100644 --- a/mypy-baseline.txt +++ b/mypy-baseline.txt @@ -256,6 +256,9 @@ posthog/models/property/util.py:0: error: Argument 1 to "append" of "list" has i posthog/models/property/util.py:0: error: Argument 1 to "append" of "list" has incompatible type "str | int"; expected "str" [arg-type] posthog/models/property/util.py:0: error: Argument 1 to "append" of "list" has incompatible type "str | int"; expected "str" [arg-type] posthog/queries/trends/util.py:0: error: Argument 1 to "translate_hogql" has incompatible type "str | None"; expected "str" [arg-type] +posthog/hogql/property.py:0: error: Argument "chain" to "Field" has incompatible type "list[str]"; expected "list[str | int]" [arg-type] +posthog/hogql/property.py:0: note: "List" is invariant -- see https://mypy.readthedocs.io/en/stable/common_issues.html#variance +posthog/hogql/property.py:0: note: Consider using "Sequence" instead, which is covariant posthog/hogql/property.py:0: error: Incompatible type for lookup 'id': (got "str | int | list[str]", expected "str | int") [misc] posthog/hogql/property.py:0: error: Incompatible type for lookup 'pk': (got "str | float", expected "str | int") [misc] posthog/hogql/filters.py:0: error: Incompatible default for argument "team" (default has type "None", argument has type "Team") [assignment] diff --git a/posthog/api/test/test_action.py b/posthog/api/test/test_action.py index 3e4a0c4f56d87..2d162ff872ae1 100644 --- a/posthog/api/test/test_action.py +++ b/posthog/api/test/test_action.py @@ -136,7 +136,9 @@ def test_update_action(self, patch_capture, *args): action = Action.objects.create( name="user signed up", team=self.team, steps_json=[{"event": "$autocapture", "text": "sign me up!"}] ) + action.refresh_bytecode() action.save() + previous_bytecode = action.bytecode response = self.client.patch( f"/api/projects/{self.team.id}/actions/{action.pk}/", @@ -196,6 +198,8 @@ def test_update_action(self, patch_capture, *args): action.refresh_from_db() assert action.name == "user signed up 2" + assert previous_bytecode != action.bytecode + # Assert analytics are sent patch_capture.assert_called_with( user, diff --git a/posthog/clickhouse/test/__snapshots__/test_schema.ambr b/posthog/clickhouse/test/__snapshots__/test_schema.ambr index 69407e9000939..344ac139affa4 100644 --- a/posthog/clickhouse/test/__snapshots__/test_schema.ambr +++ b/posthog/clickhouse/test/__snapshots__/test_schema.ambr @@ -595,10 +595,6 @@ , $group_4 VARCHAR COMMENT 'column_materializer::$group_4' , $window_id VARCHAR COMMENT 'column_materializer::$window_id' , $session_id VARCHAR COMMENT 'column_materializer::$session_id' - , elements_chain_href String COMMENT 'column_materializer::elements_chain::href' - , elements_chain_texts Array(String) COMMENT 'column_materializer::elements_chain::texts' - , elements_chain_ids Array(String) COMMENT 'column_materializer::elements_chain::ids' - , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) COMMENT 'column_materializer::elements_chain::elements' , _timestamp DateTime @@ -2177,10 +2173,6 @@ , $group_4 VARCHAR MATERIALIZED replaceRegexpAll(JSONExtractRaw(properties, '$group_4'), '^"|"$', '') COMMENT 'column_materializer::$group_4' , $window_id VARCHAR MATERIALIZED replaceRegexpAll(JSONExtractRaw(properties, '$window_id'), '^"|"$', '') COMMENT 'column_materializer::$window_id' , $session_id VARCHAR MATERIALIZED replaceRegexpAll(JSONExtractRaw(properties, '$session_id'), '^"|"$', '') COMMENT 'column_materializer::$session_id' - , elements_chain_href String MATERIALIZED extract(elements_chain, '(?::|")href="(.*?)"') - , elements_chain_texts Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")text="(.*?)"')) - , elements_chain_ids Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")attr_id="(.*?)"')) - , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?:^|;)(a|button|form|input|select|textarea|label)(?:\.|$|:)')) , INDEX `minmax_$group_0` `$group_0` TYPE minmax GRANULARITY 1 , INDEX `minmax_$group_1` `$group_1` TYPE minmax GRANULARITY 1 , INDEX `minmax_$group_2` `$group_2` TYPE minmax GRANULARITY 1 @@ -2188,6 +2180,10 @@ , INDEX `minmax_$group_4` `$group_4` TYPE minmax GRANULARITY 1 , INDEX `minmax_$window_id` `$window_id` TYPE minmax GRANULARITY 1 , INDEX `minmax_$session_id` `$session_id` TYPE minmax GRANULARITY 1 + , elements_chain_href String MATERIALIZED extract(elements_chain, '(?::|")href="(.*?)"') + , elements_chain_texts Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")text="(.*?)"')) + , elements_chain_ids Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")attr_id="(.*?)"')) + , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?:^|;)(a|button|form|input|select|textarea|label)(?:\.|$|:)')) , _timestamp DateTime @@ -3271,10 +3267,6 @@ , $group_4 VARCHAR MATERIALIZED replaceRegexpAll(JSONExtractRaw(properties, '$group_4'), '^"|"$', '') COMMENT 'column_materializer::$group_4' , $window_id VARCHAR MATERIALIZED replaceRegexpAll(JSONExtractRaw(properties, '$window_id'), '^"|"$', '') COMMENT 'column_materializer::$window_id' , $session_id VARCHAR MATERIALIZED replaceRegexpAll(JSONExtractRaw(properties, '$session_id'), '^"|"$', '') COMMENT 'column_materializer::$session_id' - , elements_chain_href String MATERIALIZED extract(elements_chain, '(?::|")href="(.*?)"') - , elements_chain_texts Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")text="(.*?)"')) - , elements_chain_ids Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")attr_id="(.*?)"')) - , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?:^|;)(a|button|form|input|select|textarea|label)(?:\.|$|:)')) , INDEX `minmax_$group_0` `$group_0` TYPE minmax GRANULARITY 1 , INDEX `minmax_$group_1` `$group_1` TYPE minmax GRANULARITY 1 , INDEX `minmax_$group_2` `$group_2` TYPE minmax GRANULARITY 1 @@ -3282,6 +3274,10 @@ , INDEX `minmax_$group_4` `$group_4` TYPE minmax GRANULARITY 1 , INDEX `minmax_$window_id` `$window_id` TYPE minmax GRANULARITY 1 , INDEX `minmax_$session_id` `$session_id` TYPE minmax GRANULARITY 1 + , elements_chain_href String MATERIALIZED extract(elements_chain, '(?::|")href="(.*?)"') + , elements_chain_texts Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")text="(.*?)"')) + , elements_chain_ids Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|")attr_id="(.*?)"')) + , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?:^|;)(a|button|form|input|select|textarea|label)(?:\.|$|:)')) , _timestamp DateTime diff --git a/posthog/hogql/database/schema/events.py b/posthog/hogql/database/schema/events.py index a0225bd334b2d..1a489e5a9d90f 100644 --- a/posthog/hogql/database/schema/events.py +++ b/posthog/hogql/database/schema/events.py @@ -3,7 +3,6 @@ StringDatabaseField, DateTimeDatabaseField, StringJSONDatabaseField, - StringArrayDatabaseField, IntegerDatabaseField, Table, LazyJoin, @@ -115,10 +114,6 @@ class EventsTable(Table): join_table=SessionsTableV1(), join_function=join_events_table_to_sessions_table, ), - "elements_chain_href": StringDatabaseField(name="elements_chain_href"), - "elements_chain_texts": StringArrayDatabaseField(name="elements_chain_texts"), - "elements_chain_ids": StringArrayDatabaseField(name="elements_chain_ids"), - "elements_chain_elements": StringArrayDatabaseField(name="elements_chain_elements"), } def to_printed_clickhouse(self, context): diff --git a/posthog/hogql/database/test/__snapshots__/test_database.ambr b/posthog/hogql/database/test/__snapshots__/test_database.ambr index 77a2452922e7e..ce03813aa1004 100644 --- a/posthog/hogql/database/test/__snapshots__/test_database.ambr +++ b/posthog/hogql/database/test/__snapshots__/test_database.ambr @@ -377,42 +377,6 @@ "schema_valid": true, "table": "sessions", "type": "lazy_table" - }, - "elements_chain_href": { - "chain": null, - "fields": null, - "hogql_value": "elements_chain_href", - "name": "elements_chain_href", - "schema_valid": true, - "table": null, - "type": "string" - }, - "elements_chain_texts": { - "chain": null, - "fields": null, - "hogql_value": "elements_chain_texts", - "name": "elements_chain_texts", - "schema_valid": true, - "table": null, - "type": "array" - }, - "elements_chain_ids": { - "chain": null, - "fields": null, - "hogql_value": "elements_chain_ids", - "name": "elements_chain_ids", - "schema_valid": true, - "table": null, - "type": "array" - }, - "elements_chain_elements": { - "chain": null, - "fields": null, - "hogql_value": "elements_chain_elements", - "name": "elements_chain_elements", - "schema_valid": true, - "table": null, - "type": "array" } }, "id": "events", @@ -748,11 +712,7 @@ "group_3", "$group_4", "group_4", - "session", - "elements_chain_href", - "elements_chain_texts", - "elements_chain_ids", - "elements_chain_elements" + "session" ], "hogql_value": "events", "name": "events", @@ -1734,42 +1694,6 @@ "schema_valid": true, "table": "sessions", "type": "lazy_table" - }, - "elements_chain_href": { - "chain": null, - "fields": null, - "hogql_value": "elements_chain_href", - "name": "elements_chain_href", - "schema_valid": true, - "table": null, - "type": "string" - }, - "elements_chain_texts": { - "chain": null, - "fields": null, - "hogql_value": "elements_chain_texts", - "name": "elements_chain_texts", - "schema_valid": true, - "table": null, - "type": "array" - }, - "elements_chain_ids": { - "chain": null, - "fields": null, - "hogql_value": "elements_chain_ids", - "name": "elements_chain_ids", - "schema_valid": true, - "table": null, - "type": "array" - }, - "elements_chain_elements": { - "chain": null, - "fields": null, - "hogql_value": "elements_chain_elements", - "name": "elements_chain_elements", - "schema_valid": true, - "table": null, - "type": "array" } }, "id": "events", @@ -2105,11 +2029,7 @@ "group_3", "$group_4", "group_4", - "session", - "elements_chain_href", - "elements_chain_texts", - "elements_chain_ids", - "elements_chain_elements" + "session" ], "hogql_value": "events", "name": "events", diff --git a/posthog/hogql/property.py b/posthog/hogql/property.py index 560a694fbf564..52236b64fb6dd 100644 --- a/posthog/hogql/property.py +++ b/posthog/hogql/property.py @@ -1,4 +1,5 @@ -from typing import Literal, Optional, cast +import re +from typing import Literal, Optional, Union, cast from pydantic import BaseModel @@ -21,28 +22,16 @@ Team, ) from posthog.models.event import Selector -from posthog.models.element import Element -from posthog.models.property import PropertyGroup, ValueT +from posthog.models.property import PropertyGroup from posthog.models.property.util import build_selector_regex from posthog.models.property_definition import PropertyType from posthog.schema import ( + EmptyPropertyFilter, FilterLogicalOperator, PropertyGroupFilter, PropertyGroupFilterValue, PropertyOperator, RetentionEntity, - EventPropertyFilter, - PersonPropertyFilter, - ElementPropertyFilter, - SessionPropertyFilter, - CohortPropertyFilter, - RecordingPropertyFilter, - GroupPropertyFilter, - FeaturePropertyFilter, - HogQLPropertyFilter, - EmptyPropertyFilter, - DataWarehousePropertyFilter, - DataWarehousePersonPropertyFilter, ) from posthog.warehouse.models import DataWarehouseJoin, DataWarehouseSavedQuery, DataWarehouseTable from posthog.utils import get_from_dict_or_attr @@ -78,194 +67,8 @@ def visit_call(self, node: ast.Call): self.visit(arg) -def _handle_bool_values(value: ValueT, field: ast.Field, property: Property, team: Team) -> ValueT | bool: - if value != "true" and value != "false": - return value - if property.type == "person": - property_types = PropertyDefinition.objects.filter( - team=team, - name=property.key, - type=PropertyDefinition.Type.PERSON, - ) - elif property.type == "group": - property_types = PropertyDefinition.objects.filter( - team=team, - name=property.key, - type=PropertyDefinition.Type.GROUP, - group_type_index=property.group_type_index, - ) - elif property.type == "data_warehouse_person_property": - key = field.chain[-2] - - # TODO: pass id of table item being filtered on instead of searching through joins - current_join: DataWarehouseJoin | None = ( - DataWarehouseJoin.objects.filter(Q(deleted__isnull=True) | Q(deleted=False)) - .filter(team=team, source_table_name="persons", field_name=key) - .first() - ) - - if not current_join: - raise Exception(f"Could not find join for key {key}") - - prop_type = None - - maybe_view = ( - DataWarehouseSavedQuery.objects.filter(Q(deleted__isnull=True) | Q(deleted=False)) - .filter(team=team, name=current_join.joining_table_name) - .first() - ) - - if maybe_view: - prop_type_dict = maybe_view.columns.get(property.key, None) - prop_type = prop_type_dict.get("hogql") - - maybe_table = ( - DataWarehouseTable.objects.filter(Q(deleted__isnull=True) | Q(deleted=False)) - .filter(team=team, name=current_join.joining_table_name) - .first() - ) - - if maybe_table: - prop_type_dict = maybe_table.columns.get(property.key, None) - prop_type = prop_type_dict.get("hogql") - - if not maybe_view and not maybe_table: - raise Exception(f"Could not find table or view for key {key}") - - if prop_type == "BooleanDatabaseField": - if value == "true": - value = True - if value == "false": - value = False - - return value - - else: - property_types = PropertyDefinition.objects.filter( - team=team, - name=property.key, - type=PropertyDefinition.Type.EVENT, - ) - property_type = property_types[0].property_type if len(property_types) > 0 else None - - if property_type == PropertyType.Boolean: - if value == "true": - return True - if value == "false": - return False - return value - - -def _field_to_compare_op( - field: ast.Field, value: ValueT, operator: PropertyOperator, property: Property, is_json_field: bool, team: Team -) -> ast.Expr: - if operator == PropertyOperator.IS_SET: - return ast.CompareOperation( - op=ast.CompareOperationOp.NotEq, - left=field, - right=ast.Constant(value=None), - ) - elif operator == PropertyOperator.IS_NOT_SET: - return ast.Or( - exprs=[ - ast.CompareOperation( - op=ast.CompareOperationOp.Eq, - left=field, - right=ast.Constant(value=None), - ) - ] - + ( - [ - ast.Not( - expr=ast.Call( - name="JSONHas", - args=[ast.Field(chain=field.chain[:-1]), ast.Constant(value=property.key)], - ) - ) - ] - if is_json_field - else [] - ) - ) - elif operator == PropertyOperator.ICONTAINS: - return ast.CompareOperation( - op=ast.CompareOperationOp.ILike, - left=field, - right=ast.Constant(value=f"%{value}%"), - ) - elif operator == PropertyOperator.NOT_ICONTAINS: - return ast.CompareOperation( - op=ast.CompareOperationOp.NotILike, - left=field, - right=ast.Constant(value=f"%{value}%"), - ) - elif operator == PropertyOperator.REGEX: - return ast.Call( - name="ifNull", - args=[ - ast.Call(name="match", args=[ast.Call(name="toString", args=[field]), ast.Constant(value=value)]), - ast.Constant(value=0), - ], - ) - elif operator == PropertyOperator.NOT_REGEX: - return ast.Call( - name="ifNull", - args=[ - ast.Call( - name="not", - args=[ - ast.Call( - name="match", args=[ast.Call(name="toString", args=[field]), ast.Constant(value=value)] - ) - ], - ), - ast.Constant(value=1), - ], - ) - elif operator == PropertyOperator.EXACT or operator == PropertyOperator.IS_DATE_EXACT: - return ast.CompareOperation( - op=ast.CompareOperationOp.Eq, - left=field, - right=ast.Constant(value=_handle_bool_values(value, field, property, team)), - ) - elif operator == PropertyOperator.IS_NOT: - return ast.CompareOperation( - op=ast.CompareOperationOp.NotEq, - left=field, - right=ast.Constant(value=_handle_bool_values(value, field, property, team)), - ) - elif operator == PropertyOperator.LT or operator == PropertyOperator.IS_DATE_BEFORE: - return ast.CompareOperation(op=ast.CompareOperationOp.Lt, left=field, right=ast.Constant(value=value)) - elif operator == PropertyOperator.GT or operator == PropertyOperator.IS_DATE_AFTER: - return ast.CompareOperation(op=ast.CompareOperationOp.Gt, left=field, right=ast.Constant(value=value)) - elif operator == PropertyOperator.LTE: - return ast.CompareOperation(op=ast.CompareOperationOp.LtEq, left=field, right=ast.Constant(value=value)) - elif operator == PropertyOperator.GTE: - return ast.CompareOperation(op=ast.CompareOperationOp.GtEq, left=field, right=ast.Constant(value=value)) - else: - raise NotImplementedError(f"PropertyOperator {operator} not implemented") - - def property_to_expr( - property: list - | dict - | PropertyGroup - | PropertyGroupFilter - | PropertyGroupFilterValue - | Property - | ast.Expr - | EventPropertyFilter - | PersonPropertyFilter - | ElementPropertyFilter - | SessionPropertyFilter - | CohortPropertyFilter - | RecordingPropertyFilter - | GroupPropertyFilter - | FeaturePropertyFilter - | HogQLPropertyFilter - | EmptyPropertyFilter - | DataWarehousePropertyFilter - | DataWarehousePersonPropertyFilter, + property: Union[BaseModel, PropertyGroup, Property, dict, list, ast.Expr], team: Team, scope: Literal["event", "person", "session", "replay", "replay_entity", "replay_pdi"] = "event", ) -> ast.Expr: @@ -367,11 +170,16 @@ def property_to_expr( else: chain = ["properties"] + if property.type == "session": + properties_field = None + else: + properties_field = ast.Field(chain=chain) + field = ast.Field(chain=[*chain, property.key]) if isinstance(value, list): if len(value) == 0: - return ast.Constant(value=1) + return ast.Constant(value=True) elif len(value) == 1: value = value[0] else: @@ -398,14 +206,164 @@ def property_to_expr( return ast.And(exprs=exprs) return ast.Or(exprs=exprs) - return _field_to_compare_op( - field=field, - value=value, - operator=operator, - team=team, - property=property, - is_json_field=property.type != "session", - ) + if operator == PropertyOperator.IS_SET: + return ast.CompareOperation( + op=ast.CompareOperationOp.NotEq, + left=field, + right=ast.Constant(value=None), + ) + elif operator == PropertyOperator.IS_NOT_SET: + return ast.Or( + exprs=[ + ast.CompareOperation( + op=ast.CompareOperationOp.Eq, + left=field, + right=ast.Constant(value=None), + ) + ] + + ( + [] + if not properties_field or properties_field == field + else [ + ast.Not( + expr=ast.Call( + name="JSONHas", + args=[properties_field, ast.Constant(value=property.key)], + ) + ) + ] + ) + ) + elif operator == PropertyOperator.ICONTAINS: + return ast.CompareOperation( + op=ast.CompareOperationOp.ILike, + left=field, + right=ast.Constant(value=f"%{value}%"), + ) + elif operator == PropertyOperator.NOT_ICONTAINS: + return ast.CompareOperation( + op=ast.CompareOperationOp.NotILike, + left=field, + right=ast.Constant(value=f"%{value}%"), + ) + elif operator == PropertyOperator.REGEX: + return ast.Call( + name="ifNull", + args=[ + ast.Call(name="match", args=[ast.Call(name="toString", args=[field]), ast.Constant(value=value)]), + ast.Constant(value=0), + ], + ) + elif operator == PropertyOperator.NOT_REGEX: + return ast.Call( + name="ifNull", + args=[ + ast.Call( + name="not", + args=[ + ast.Call( + name="match", args=[ast.Call(name="toString", args=[field]), ast.Constant(value=value)] + ) + ], + ), + ast.Constant(value=1), + ], + ) + elif operator == PropertyOperator.EXACT or operator == PropertyOperator.IS_DATE_EXACT: + op = ast.CompareOperationOp.Eq + elif operator == PropertyOperator.IS_NOT: + op = ast.CompareOperationOp.NotEq + elif operator == PropertyOperator.LT or operator == PropertyOperator.IS_DATE_BEFORE: + op = ast.CompareOperationOp.Lt + elif operator == PropertyOperator.GT or operator == PropertyOperator.IS_DATE_AFTER: + op = ast.CompareOperationOp.Gt + elif operator == PropertyOperator.LTE: + op = ast.CompareOperationOp.LtEq + elif operator == PropertyOperator.GTE: + op = ast.CompareOperationOp.GtEq + else: + raise NotImplementedError(f"PropertyOperator {operator} not implemented") + + # For Boolean and untyped properties, treat "true" and "false" as boolean values + if ( + (op == ast.CompareOperationOp.Eq or op == ast.CompareOperationOp.NotEq) + and team is not None + and (value == "true" or value == "false") + ): + if property.type == "person": + property_types = PropertyDefinition.objects.filter( + team=team, + name=property.key, + type=PropertyDefinition.Type.PERSON, + ) + elif property.type == "group": + property_types = PropertyDefinition.objects.filter( + team=team, + name=property.key, + type=PropertyDefinition.Type.GROUP, + group_type_index=property.group_type_index, + ) + elif property.type == "data_warehouse_person_property": + key = chain[-1] + + # TODO: pass id of table item being filtered on instead of searching through joins + current_join: DataWarehouseJoin | None = ( + DataWarehouseJoin.objects.filter(Q(deleted__isnull=True) | Q(deleted=False)) + .filter(team=team, source_table_name="persons", field_name=key) + .first() + ) + + if not current_join: + raise Exception(f"Could not find join for key {key}") + + prop_type = None + + maybe_view = ( + DataWarehouseSavedQuery.objects.filter(Q(deleted__isnull=True) | Q(deleted=False)) + .filter(team=team, name=current_join.joining_table_name) + .first() + ) + + if maybe_view: + prop_type_dict = maybe_view.columns.get(property.key, None) + prop_type = prop_type_dict.get("hogql") + + maybe_table = ( + DataWarehouseTable.objects.filter(Q(deleted__isnull=True) | Q(deleted=False)) + .filter(team=team, name=current_join.joining_table_name) + .first() + ) + + if maybe_table: + prop_type_dict = maybe_table.columns.get(property.key, None) + prop_type = prop_type_dict.get("hogql") + + if not maybe_view and not maybe_table: + raise Exception(f"Could not find table or view for key {key}") + + if prop_type == "BooleanDatabaseField": + if value == "true": + value = True + if value == "false": + value = False + + return ast.CompareOperation(op=op, left=field, right=ast.Constant(value=value)) + + else: + property_types = PropertyDefinition.objects.filter( + team=team, + name=property.key, + type=PropertyDefinition.Type.EVENT, + ) + property_type = property_types[0].property_type if len(property_types) > 0 else None + + if property_type == PropertyType.Boolean: + if value == "true": + value = True + if value == "false": + value = False + + return ast.CompareOperation(op=op, left=field, right=ast.Constant(value=value)) elif property.type == "element": if scope == "person": @@ -449,34 +407,10 @@ def property_to_expr( return expr if property.key == "href": - return parse_expr( - "arrayExists(href -> {compare}, elements_chain_hrefs)", - { - "compare": _field_to_compare_op( - field=ast.Field(chain=["href"]), - value=value, - operator=operator, - team=team, - property=property, - is_json_field=False, - ) - }, - ) + return element_chain_key_filter("href", str(value), operator) if property.key == "text": - return parse_expr( - "arrayExists(text -> {compare}, elements_chain_texts)", - { - "compare": _field_to_compare_op( - field=ast.Field(chain=["text"]), - value=value, - operator=operator, - team=team, - property=property, - is_json_field=False, - ) - }, - ) + return element_chain_key_filter("text", str(value), operator) raise NotImplementedError(f"property_to_expr for type element not implemented for key {property.key}") elif property.type == "cohort" or property.type == "static-cohort" or property.type == "precalculated-cohort": @@ -515,49 +449,21 @@ def action_to_expr(action: Action) -> ast.Expr: exprs.append(tag_name_to_expr(step.tag_name)) if step.href is not None: if step.href_matching == "regex": - exprs.append( - ast.CompareOperation( - op=ast.CompareOperationOp.Regex, - left=ast.Field(chain=["elements_chain_href"]), - right=ast.Constant(value=step.href), - ) - ) + operator = PropertyOperator.REGEX elif step.href_matching == "contains": - exprs.append( - ast.CompareOperation( - op=ast.CompareOperationOp.ILike, - left=ast.Field(chain=["elements_chain_href"]), - right=ast.Constant(value=f"%{step.href}%"), - ) - ) + operator = PropertyOperator.ICONTAINS else: - exprs.append( - ast.CompareOperation( - op=ast.CompareOperationOp.Eq, - left=ast.Field(chain=["elements_chain_href"]), - right=ast.Constant(value=step.href), - ) - ) + operator = PropertyOperator.EXACT + exprs.append(element_chain_key_filter("href", step.href, operator)) if step.text is not None: - value = step.text if step.text_matching == "regex": - match = ast.CompareOperationOp.Regex + operator = PropertyOperator.REGEX elif step.text_matching == "contains": - match = ast.CompareOperationOp.ILike - value = f"%{value}%" + operator = PropertyOperator.ICONTAINS else: - match = ast.CompareOperationOp.Eq - - exprs.append( - parse_expr( - "arrayExists(x -> {match}, elements_chain_texts)", - { - "match": ast.CompareOperation( - op=match, left=ast.Field(chain=["x"]), right=ast.Constant(value=value) - ) - }, - ) - ) + operator = PropertyOperator.EXACT + exprs.append(element_chain_key_filter("text", step.text, operator)) + if step.url: if step.url_matching == "exact": expr = parse_expr( @@ -606,38 +512,45 @@ def entity_to_expr(entity: RetentionEntity) -> ast.Expr: ) +def element_chain_key_filter(key: str, text: str, operator: PropertyOperator): + escaped = text.replace('"', r"\"") + if operator == PropertyOperator.IS_SET or operator == PropertyOperator.IS_NOT_SET: + value = r'[^"]+' + elif operator == PropertyOperator.ICONTAINS or operator == PropertyOperator.NOT_ICONTAINS: + value = rf'[^"]*{re.escape(escaped)}[^"]*' + elif operator == PropertyOperator.REGEX or operator == PropertyOperator.NOT_REGEX: + value = escaped + elif operator == PropertyOperator.EXACT or operator == PropertyOperator.IS_NOT: + value = re.escape(escaped) + else: + raise NotImplementedError(f"element_href_to_expr not implemented for operator {operator}") + + regex = f'({key}="{value}")' + if operator == PropertyOperator.ICONTAINS or operator == PropertyOperator.NOT_ICONTAINS: + expr = parse_expr("elements_chain =~* {regex}", {"regex": ast.Constant(value=str(regex))}) + else: + expr = parse_expr("elements_chain =~ {regex}", {"regex": ast.Constant(value=str(regex))}) + + if ( + operator == PropertyOperator.IS_NOT_SET + or operator == PropertyOperator.NOT_ICONTAINS + or operator == PropertyOperator.IS_NOT + or operator == PropertyOperator.NOT_REGEX + ): + expr = ast.Call(name="not", args=[expr]) + return expr + + def tag_name_to_expr(tag_name: str): regex = rf"(^|;){tag_name}(\.|$|;|:)" expr = parse_expr("elements_chain =~ {regex}", {"regex": ast.Constant(value=str(regex))}) return expr -def selector_to_expr(selector_string: str): - selector = Selector(selector_string, escape_slashes=False) - exprs = [] - regex = build_selector_regex(selector) - exprs.append(parse_expr("elements_chain =~ {regex}", {"regex": ast.Constant(value=regex)})) - - useful_elements: list[ast.Expr] = [] - for part in selector.parts: - if "tag_name" in part.data: - if part.data["tag_name"] in Element.USEFUL_ELEMENTS: - useful_elements.append(ast.Constant(value=part.data["tag_name"])) - - if "attr_id" in part.data: - exprs.append( - parse_expr( - "indexOf(elements_chain_ids, {value}) > 0", {"value": ast.Constant(value=part.data["attr_id"])} - ) - ) - if len(useful_elements) > 0: - exprs.append( - parse_expr("hasAll(elements_chain_elements, {value})", {"value": ast.Array(exprs=useful_elements)}) - ) - - if len(exprs) == 1: - return exprs[0] - return ast.And(exprs=exprs) +def selector_to_expr(selector: str): + regex = build_selector_regex(Selector(selector, escape_slashes=False)) + expr = parse_expr("elements_chain =~ {regex}", {"regex": ast.Constant(value=regex)}) + return expr def get_property_type(property): diff --git a/posthog/hogql/test/__snapshots__/test_resolver.ambr b/posthog/hogql/test/__snapshots__/test_resolver.ambr index 9907d46ee7f89..d7d042252c55d 100644 --- a/posthog/hogql/test/__snapshots__/test_resolver.ambr +++ b/posthog/hogql/test/__snapshots__/test_resolver.ambr @@ -32,10 +32,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -124,34 +120,6 @@ table_type: } }, - elements_chain_elements: { - alias: "elements_chain_elements" - type: { - name: "elements_chain_elements" - table_type: - } - }, - elements_chain_href: { - alias: "elements_chain_href" - type: { - name: "elements_chain_href" - table_type: - } - }, - elements_chain_ids: { - alias: "elements_chain_ids" - type: { - name: "elements_chain_ids" - table_type: - } - }, - elements_chain_texts: { - alias: "elements_chain_texts" - type: { - name: "elements_chain_texts" - table_type: - } - }, event: { alias: "event" type: { @@ -414,74 +382,6 @@ alias: "$group_4" type: } - }, - { - alias: "elements_chain_href" - expr: { - chain: [ - "elements_chain_href" - ] - type: { - name: "elements_chain_href" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_href" - type: - } - }, - { - alias: "elements_chain_texts" - expr: { - chain: [ - "elements_chain_texts" - ] - type: { - name: "elements_chain_texts" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_texts" - type: - } - }, - { - alias: "elements_chain_ids" - expr: { - chain: [ - "elements_chain_ids" - ] - type: { - name: "elements_chain_ids" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_ids" - type: - } - }, - { - alias: "elements_chain_elements" - expr: { - chain: [ - "elements_chain_elements" - ] - type: { - name: "elements_chain_elements" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_elements" - type: - } } ] select_from: { @@ -640,50 +540,6 @@ } hidden: True type: - }, - { - alias: "elements_chain_href" - expr: { - chain: [ - "elements_chain_href" - ] - type: - } - hidden: True - type: - }, - { - alias: "elements_chain_texts" - expr: { - chain: [ - "elements_chain_texts" - ] - type: - } - hidden: True - type: - }, - { - alias: "elements_chain_ids" - expr: { - chain: [ - "elements_chain_ids" - ] - type: - } - hidden: True - type: - }, - { - alias: "elements_chain_elements" - expr: { - chain: [ - "elements_chain_elements" - ] - type: - } - hidden: True - type: } ] select_from: { @@ -715,10 +571,6 @@ created_at: , distinct_id: , elements_chain: , - elements_chain_elements: , - elements_chain_href: , - elements_chain_ids: , - elements_chain_texts: , event: , properties: , timestamp: , @@ -755,10 +607,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -1011,74 +859,6 @@ alias: "$group_4" type: } - }, - { - alias: "elements_chain_href" - expr: { - chain: [ - "elements_chain_href" - ] - type: { - name: "elements_chain_href" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_href" - type: - } - }, - { - alias: "elements_chain_texts" - expr: { - chain: [ - "elements_chain_texts" - ] - type: { - name: "elements_chain_texts" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_texts" - type: - } - }, - { - alias: "elements_chain_ids" - expr: { - chain: [ - "elements_chain_ids" - ] - type: { - name: "elements_chain_ids" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_ids" - type: - } - }, - { - alias: "elements_chain_elements" - expr: { - chain: [ - "elements_chain_elements" - ] - type: { - name: "elements_chain_elements" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_elements" - type: - } } ] select_from: { @@ -1104,10 +884,6 @@ created_at: , distinct_id: , elements_chain: , - elements_chain_elements: , - elements_chain_href: , - elements_chain_ids: , - elements_chain_texts: , event: , properties: , timestamp: , @@ -1154,10 +930,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -1246,34 +1018,6 @@ table_type: } }, - elements_chain_elements: { - alias: "elements_chain_elements" - type: { - name: "elements_chain_elements" - table_type: - } - }, - elements_chain_href: { - alias: "elements_chain_href" - type: { - name: "elements_chain_href" - table_type: - } - }, - elements_chain_ids: { - alias: "elements_chain_ids" - type: { - name: "elements_chain_ids" - table_type: - } - }, - elements_chain_texts: { - alias: "elements_chain_texts" - type: { - name: "elements_chain_texts" - table_type: - } - }, event: { alias: "event" type: { @@ -1536,74 +1280,6 @@ alias: "$group_4" type: } - }, - { - alias: "elements_chain_href" - expr: { - chain: [ - "elements_chain_href" - ] - type: { - name: "elements_chain_href" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_href" - type: - } - }, - { - alias: "elements_chain_texts" - expr: { - chain: [ - "elements_chain_texts" - ] - type: { - name: "elements_chain_texts" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_texts" - type: - } - }, - { - alias: "elements_chain_ids" - expr: { - chain: [ - "elements_chain_ids" - ] - type: { - name: "elements_chain_ids" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_ids" - type: - } - }, - { - alias: "elements_chain_elements" - expr: { - chain: [ - "elements_chain_elements" - ] - type: { - name: "elements_chain_elements" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_elements" - type: - } } ] select_from: { @@ -1764,50 +1440,6 @@ } hidden: True type: - }, - { - alias: "elements_chain_href" - expr: { - chain: [ - "elements_chain_href" - ] - type: - } - hidden: True - type: - }, - { - alias: "elements_chain_texts" - expr: { - chain: [ - "elements_chain_texts" - ] - type: - } - hidden: True - type: - }, - { - alias: "elements_chain_ids" - expr: { - chain: [ - "elements_chain_ids" - ] - type: - } - hidden: True - type: - }, - { - alias: "elements_chain_elements" - expr: { - chain: [ - "elements_chain_elements" - ] - type: - } - hidden: True - type: } ] select_from: { @@ -1844,10 +1476,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -2099,74 +1727,6 @@ alias: "$group_4" type: } - }, - { - alias: "elements_chain_href" - expr: { - chain: [ - "elements_chain_href" - ] - type: { - name: "elements_chain_href" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_href" - type: - } - }, - { - alias: "elements_chain_texts" - expr: { - chain: [ - "elements_chain_texts" - ] - type: { - name: "elements_chain_texts" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_texts" - type: - } - }, - { - alias: "elements_chain_ids" - expr: { - chain: [ - "elements_chain_ids" - ] - type: { - name: "elements_chain_ids" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_ids" - type: - } - }, - { - alias: "elements_chain_elements" - expr: { - chain: [ - "elements_chain_elements" - ] - type: { - name: "elements_chain_elements" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_elements" - type: - } } ] select_from: { @@ -2192,10 +1752,6 @@ created_at: , distinct_id: , elements_chain: , - elements_chain_elements: , - elements_chain_href: , - elements_chain_ids: , - elements_chain_texts: , event: , properties: , timestamp: , @@ -2233,10 +1789,6 @@ created_at: , distinct_id: , elements_chain: , - elements_chain_elements: , - elements_chain_href: , - elements_chain_ids: , - elements_chain_texts: , event: , properties: , timestamp: , @@ -2485,10 +2037,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -2740,74 +2288,6 @@ alias: "$group_4" type: } - }, - { - alias: "elements_chain_href" - expr: { - chain: [ - "elements_chain_href" - ] - type: { - name: "elements_chain_href" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_href" - type: - } - }, - { - alias: "elements_chain_texts" - expr: { - chain: [ - "elements_chain_texts" - ] - type: { - name: "elements_chain_texts" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_texts" - type: - } - }, - { - alias: "elements_chain_ids" - expr: { - chain: [ - "elements_chain_ids" - ] - type: { - name: "elements_chain_ids" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_ids" - type: - } - }, - { - alias: "elements_chain_elements" - expr: { - chain: [ - "elements_chain_elements" - ] - type: { - name: "elements_chain_elements" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_elements" - type: - } } ] select_from: { @@ -2833,10 +2313,6 @@ created_at: , distinct_id: , elements_chain: , - elements_chain_elements: , - elements_chain_href: , - elements_chain_ids: , - elements_chain_texts: , event: , properties: , timestamp: , @@ -2877,10 +2353,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -3133,74 +2605,6 @@ alias: "$group_4" type: } - }, - { - alias: "elements_chain_href" - expr: { - chain: [ - "elements_chain_href" - ] - type: { - name: "elements_chain_href" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_href" - type: - } - }, - { - alias: "elements_chain_texts" - expr: { - chain: [ - "elements_chain_texts" - ] - type: { - name: "elements_chain_texts" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_texts" - type: - } - }, - { - alias: "elements_chain_ids" - expr: { - chain: [ - "elements_chain_ids" - ] - type: { - name: "elements_chain_ids" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_ids" - type: - } - }, - { - alias: "elements_chain_elements" - expr: { - chain: [ - "elements_chain_elements" - ] - type: { - name: "elements_chain_elements" - table_type: - } - } - hidden: True - type: { - alias: "elements_chain_elements" - type: - } } ] select_from: { @@ -3227,10 +2631,6 @@ created_at: , distinct_id: , elements_chain: , - elements_chain_elements: , - elements_chain_href: , - elements_chain_ids: , - elements_chain_texts: , event: , properties: , timestamp: , @@ -3271,10 +2671,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -3374,10 +2770,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -3757,10 +3149,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -3894,10 +3282,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -4035,10 +3419,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -4212,10 +3592,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -4394,10 +3770,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -4529,10 +3901,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -4665,10 +4033,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -4788,10 +4152,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -4998,10 +4358,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -5096,10 +4452,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, @@ -5206,10 +4558,6 @@ created_at: {}, distinct_id: {}, elements_chain: {}, - elements_chain_elements: {}, - elements_chain_href: {}, - elements_chain_ids: {}, - elements_chain_texts: {}, event: {}, goe_0: {}, goe_1: {}, diff --git a/posthog/hogql/test/test_property.py b/posthog/hogql/test/test_property.py index 359401b52fcda..19b48e652808b 100644 --- a/posthog/hogql/test/test_property.py +++ b/posthog/hogql/test/test_property.py @@ -6,6 +6,7 @@ from posthog.hogql.parser import parse_expr from posthog.hogql.property import ( action_to_expr, + element_chain_key_filter, has_aggregation, property_to_expr, selector_to_expr, @@ -22,7 +23,7 @@ ) from posthog.models.property import PropertyGroup from posthog.models.property_definition import PropertyType -from posthog.schema import HogQLPropertyFilter, RetentionEntity, EmptyPropertyFilter +from posthog.schema import HogQLPropertyFilter, PropertyOperator, RetentionEntity, EmptyPropertyFilter from posthog.test.base import BaseTest from posthog.warehouse.models import DataWarehouseTable, DataWarehouseJoin, DataWarehouseCredential @@ -340,7 +341,7 @@ def test_property_to_expr_element(self): "operator": "exact", } ), - self._parse_expr("arrayExists(href -> href = 'href-text.', elements_chain_hrefs)"), + clear_locations(element_chain_key_filter("href", "href-text.", PropertyOperator.EXACT)), ) self.assertEqual( self._property_to_expr( @@ -351,9 +352,7 @@ def test_property_to_expr_element(self): "operator": "regex", } ), - self._parse_expr( - "arrayExists(text -> ifNull(match(toString(text), 'text-text.'), false), elements_chain_texts)" - ), + clear_locations(element_chain_key_filter("text", "text-text.", PropertyOperator.REGEX)), ) def test_property_groups(self): @@ -471,14 +470,7 @@ def test_selector_to_expr(self): self.assertEqual( self._selector_to_expr("a[href='boo']"), clear_locations( - parse_expr( - "{regex} and hasAll(elements_chain_elements, ['a'])", - { - "regex": elements_chain_match( - '(^|;)a.*?href="boo".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' - ) - }, - ) + elements_chain_match('(^|;)a.*?href="boo".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))') ), ) self.assertEqual( @@ -490,26 +482,14 @@ def test_selector_to_expr(self): self.assertEqual( self._selector_to_expr("#withid"), clear_locations( - parse_expr( - """{regex} and indexOf(elements_chain_ids, 'withid') > 0""", - { - "regex": elements_chain_match( - '(^|;).*?attr_id="withid".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' - ) - }, - ) + elements_chain_match('(^|;).*?attr_id="withid".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))') ), ) self.assertEqual( self._selector_to_expr("#with-dashed-id"), clear_locations( - parse_expr( - """{regex} and indexOf(elements_chain_ids, 'with-dashed-id') > 0""", - { - "regex": elements_chain_match( - '(^|;).*?attr_id="with\\-dashed\\-id".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' - ) - }, + elements_chain_match( + '(^|;).*?attr_id="with\\-dashed\\-id".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' ) ), ) @@ -520,17 +500,46 @@ def test_selector_to_expr(self): self.assertEqual( self._selector_to_expr("#with\\slashed\\id"), clear_locations( - parse_expr( - "{regex} and indexOf(elements_chain_ids, 'with\\\\slashed\\\\id') > 0", - { - "regex": elements_chain_match( - '(^|;).*?attr_id="with\\\\slashed\\\\id".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' - ) - }, + elements_chain_match( + '(^|;).*?attr_id="with\\\\slashed\\\\id".*?([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' ) ), ) + def test_elements_chain_key_filter(self): + self.assertEqual( + clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.IS_SET)), + clear_locations(elements_chain_match('(href="[^"]+")')), + ) + self.assertEqual( + clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.IS_NOT_SET)), + clear_locations(not_call(elements_chain_match('(href="[^"]+")'))), + ) + self.assertEqual( + clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.ICONTAINS)), + clear_locations(elements_chain_imatch('(href="[^"]*boo\\.\\.[^"]*")')), + ) + self.assertEqual( + clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.NOT_ICONTAINS)), + clear_locations(not_call(elements_chain_imatch('(href="[^"]*boo\\.\\.[^"]*")'))), + ) + self.assertEqual( + clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.REGEX)), + clear_locations(elements_chain_match('(href="boo..")')), + ) + self.assertEqual( + clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.NOT_REGEX)), + clear_locations(not_call(elements_chain_match('(href="boo..")'))), + ) + self.assertEqual( + clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.EXACT)), + clear_locations(elements_chain_match('(href="boo\\.\\.")')), + ) + self.assertEqual( + clear_locations(element_chain_key_filter("href", "boo..", PropertyOperator.IS_NOT)), + clear_locations(not_call(elements_chain_match('(href="boo\\.\\.")'))), + ) + def test_action_to_expr(self): action1 = Action.objects.create( team=self.team, @@ -538,27 +547,19 @@ def test_action_to_expr(self): { "event": "$autocapture", "selector": "a.nav-link.active", + "tag_name": "a", } ], ) self.assertEqual( clear_locations(action_to_expr(action1)), self._parse_expr( - "event = '$autocapture' and {regex1}", + "event = '$autocapture' and elements_chain =~ {regex1} and elements_chain =~ {regex2}", { - "regex1": ast.And( - exprs=[ - self._parse_expr( - "elements_chain =~ {regex}", - { - "regex": ast.Constant( - value='(^|;)a.*?\\.active\\..*?nav\\-link([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' - ) - }, - ), - self._parse_expr("hasAll(elements_chain_elements, ['a'])"), - ] + "regex1": ast.Constant( + value='(^|;)a.*?\\.active\\..*?nav\\-link([-_a-zA-Z0-9\\.:"= ]*?)?($|;|:([^;^\\s]*(;|$|\\s)))' ), + "regex2": ast.Constant(value="(^|;)a(\\.|$|;|:)"), }, ), ) @@ -610,24 +611,6 @@ def test_action_to_expr(self): self._parse_expr("event = '$pageview' OR true"), # All events just resolve to "true" ) - action5 = Action.objects.create( - team=self.team, - steps_json=[{"event": "$autocapture", "href": "https://example4.com", "href_matching": "regex"}], - ) - self.assertEqual( - clear_locations(action_to_expr(action5)), - self._parse_expr("event = '$autocapture' and elements_chain_href =~ 'https://example4.com'"), - ) - - action6 = Action.objects.create( - team=self.team, - steps_json=[{"event": "$autocapture", "text": "blabla", "text_matching": "regex"}], - ) - self.assertEqual( - clear_locations(action_to_expr(action6)), - self._parse_expr("event = '$autocapture' and arrayExists(x -> x =~ 'blabla', elements_chain_texts)"), - ) - def test_cohort_filter_static(self): cohort = Cohort.objects.create( team=self.team, diff --git a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr index d733159ba5ee0..9822999809a62 100644 --- a/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr +++ b/posthog/hogql_queries/insights/funnels/test/__snapshots__/test_funnel.ambr @@ -317,9 +317,9 @@ if(not(empty(e__override.distinct_id)), e__override.person_id, e.person_id) AS aggregation_target, if(equals(e.event, 'user signed up'), 1, 0) AS step_0, if(ifNull(equals(step_0, 1), 0), timestamp, NULL) AS latest_0, - if(and(equals(e.event, '$autocapture'), match(e.elements_chain, '(^|;)button(\\.|$|;|:)'), arrayExists(x -> ifNull(equals(x, 'Pay $10'), 0), e.elements_chain_texts)), 1, 0) AS step_1, + if(and(equals(e.event, '$autocapture'), match(e.elements_chain, '(^|;)button(\\.|$|;|:)'), match(e.elements_chain, '(text="Pay\\ \\$10")')), 1, 0) AS step_1, if(ifNull(equals(step_1, 1), 0), timestamp, NULL) AS latest_1, - if(and(equals(e.event, '$autocapture'), match(e.elements_chain, '(^|;)a(\\.|$|;|:)'), equals(e.elements_chain_href, '/movie')), 1, 0) AS step_2, + if(and(equals(e.event, '$autocapture'), match(e.elements_chain, '(^|;)a(\\.|$|;|:)'), match(e.elements_chain, '(href="/movie")')), 1, 0) AS step_2, if(ifNull(equals(step_2, 1), 0), timestamp, NULL) AS latest_2 FROM events AS e LEFT OUTER JOIN diff --git a/posthog/models/event/sql.py b/posthog/models/event/sql.py index 8219bece6572b..33e7d2a2c3062 100644 --- a/posthog/models/event/sql.py +++ b/posthog/models/event/sql.py @@ -65,10 +65,6 @@ , $group_4 VARCHAR MATERIALIZED {trim_quotes_expr("JSONExtractRaw(properties, '$group_4')")} COMMENT 'column_materializer::$group_4' , $window_id VARCHAR MATERIALIZED {trim_quotes_expr("JSONExtractRaw(properties, '$window_id')")} COMMENT 'column_materializer::$window_id' , $session_id VARCHAR MATERIALIZED {trim_quotes_expr("JSONExtractRaw(properties, '$session_id')")} COMMENT 'column_materializer::$session_id' - , elements_chain_href String MATERIALIZED extract(elements_chain, '(?::|\")href="(.*?)"') - , elements_chain_texts Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|\")text="(.*?)"')) - , elements_chain_ids Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|\")attr_id="(.*?)"')) - , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?:^|;)(a|button|form|input|select|textarea|label)(?:\\.|$|:)')) , INDEX `minmax_$group_0` `$group_0` TYPE minmax GRANULARITY 1 , INDEX `minmax_$group_1` `$group_1` TYPE minmax GRANULARITY 1 , INDEX `minmax_$group_2` `$group_2` TYPE minmax GRANULARITY 1 @@ -76,6 +72,10 @@ , INDEX `minmax_$group_4` `$group_4` TYPE minmax GRANULARITY 1 , INDEX `minmax_$window_id` `$window_id` TYPE minmax GRANULARITY 1 , INDEX `minmax_$session_id` `$session_id` TYPE minmax GRANULARITY 1 + , elements_chain_href String MATERIALIZED extract(elements_chain, '(?::|\")href="(.*?)"') + , elements_chain_texts Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|\")text="(.*?)"')) + , elements_chain_ids Array(String) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?::|\")attr_id="(.*?)"')) + , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) MATERIALIZED arrayDistinct(extractAll(elements_chain, '(?:^|;)(a|button|form|input|select|textarea|label)(?:\\.|$|:)')) """ EVENTS_TABLE_PROXY_MATERIALIZED_COLUMNS = """ @@ -86,10 +86,6 @@ , $group_4 VARCHAR COMMENT 'column_materializer::$group_4' , $window_id VARCHAR COMMENT 'column_materializer::$window_id' , $session_id VARCHAR COMMENT 'column_materializer::$session_id' - , elements_chain_href String COMMENT 'column_materializer::elements_chain::href' - , elements_chain_texts Array(String) COMMENT 'column_materializer::elements_chain::texts' - , elements_chain_ids Array(String) COMMENT 'column_materializer::elements_chain::ids' - , elements_chain_elements Array(Enum('a', 'button', 'form', 'input', 'select', 'textarea', 'label')) COMMENT 'column_materializer::elements_chain::elements' """ EVENTS_DATA_TABLE_ENGINE = lambda: ReplacingMergeTree( diff --git a/posthog/test/base.py b/posthog/test/base.py index 6f23e9d8fbc05..6d1d608da930a 100644 --- a/posthog/test/base.py +++ b/posthog/test/base.py @@ -5,7 +5,6 @@ import threading import time import uuid -import unittest from collections.abc import Callable, Generator from contextlib import contextmanager from functools import wraps @@ -101,10 +100,6 @@ persons_ordering_int: int = 1 -# Expand string diffs -unittest.util._MAX_LENGTH = 2000 # type: ignore - - def _setup_test_data(klass): klass.organization = Organization.objects.create(name=klass.CONFIG_ORGANIZATION_NAME) klass.project, klass.team = Project.objects.create_with_team( From f4180098b66f27d17d2d3b596032e4b20fa9a0be Mon Sep 17 00:00:00 2001 From: Tom Owers Date: Wed, 24 Jul 2024 10:50:24 +0100 Subject: [PATCH 12/33] =?UTF-8?q?feat(data-warehouse):=20add=20the=20abili?= =?UTF-8?q?ty=20to=20connect=20to=20MySQL=20as=20a=20datawa=E2=80=A6=20(#2?= =?UTF-8?q?3921)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Jacob Spizziri Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- ...s-app-dashboards--insight-legend--dark.png | Bin 35301 -> 115292 bytes frontend/public/services/mysql.png | Bin 0 -> 23509 bytes .../data-warehouse/new/sourceWizardLogic.tsx | 124 ++++++++++++++++++ .../DataWarehouseManagedSourcesTable.tsx | 2 + frontend/src/types.ts | 2 +- latest_migrations.manifest | 2 +- ...dd_mysql_externaldatasource_source_type.py | 27 ++++ .../data_imports/pipelines/schemas.py | 3 + .../pipelines/sql_database/__init__.py | 17 ++- .../workflow_activities/create_job_model.py | 8 +- .../workflow_activities/import_data.py | 10 +- .../tests/batch_exports/test_import_data.py | 15 ++- posthog/warehouse/api/external_data_schema.py | 17 ++- posthog/warehouse/api/external_data_source.py | 57 +++++--- .../api/test/test_external_data_source.py | 5 +- .../warehouse/models/external_data_schema.py | 82 ++++++++++++ .../warehouse/models/external_data_source.py | 1 + requirements-dev.in | 1 + requirements-dev.txt | 9 +- requirements.in | 1 + requirements.txt | 1 + 21 files changed, 337 insertions(+), 47 deletions(-) create mode 100644 frontend/public/services/mysql.png create mode 100644 posthog/migrations/0448_add_mysql_externaldatasource_source_type.py diff --git a/frontend/__snapshots__/scenes-app-dashboards--insight-legend--dark.png b/frontend/__snapshots__/scenes-app-dashboards--insight-legend--dark.png index 9d811913930caae25596af83fb0fef13e26c9d5d..d7d9398cd00ccc97d920dea9e00c7dc1e801d9cc 100644 GIT binary patch literal 115292 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 z zD$O1@GKj?HBmHKjv6}h&nq-BZ{kO5(2=lH)obZ=`4DONq1IzoCgt1y5;0TuG2jfw; zDGuB*9D}W#;sG29?OYh$=_TD$wWE*qt&xO${X=={xOeZwo_<~f0dwqI$KJZSYs|M6nq4Hqu5MV}d!|XY zz8$i2p5Z(sCAW0880_>uM`Iu9%1Crk(ql~KR;%24`>m#dM9>j0xC2{$8$S^rrrIaU zKX;W<^pUdiV|#P99m74i?;pZtW^~Xh0d#ln-pznmyUO-ZnWj*X4Z>VGsm+|Pd# zCksHkORp(b0)% zN9xxgNX$r9g@dJfz4rH4;e66x@rI80Gi;8tbP9s!j@jooA!2vH3KQl<{raV5u10R| zbf@+)Gol4{|DoWp91zFl&OK205C7Qz@SFYXC5rIp?agzEF4-Ck#(9uU)7==n*{(bz zoxOTEdUNS_7p3z=_q=0TM)X8ZReq;cjr5W#1U%N2Kc7g!kiOQ~u}Zl5+c7=fUovix zQN{GHL>7+Dz8X1>GV4*1S-En&%eMNbD0xI#X=#2eZDd1B%leli{jhvrvAf4>`DJsP ztv}8NEX<%G;qf;jPt8O$Uxk8oml9(Cy&S7{N?O{tqZ0=1&V=cfW7p>_;~deYQ1lkf zN#WK<5>T!o5L50$E$MBV+l#~Z*=>5#x^ZzrQ0*4NP7c{RoZydFN<6Z2*&Qyh^*s{u z9@@C2RmaWM9zZ2%t%KgTTG-=nK5>49LEOrp${31m%0rBrr3RoWoNvrU_uMQ7OSb}? zjM4=?%$xd9xnf*o#v4``TOPa`_ow2F74VJD7 z3JT(5OH~6XNR(U}aBy&RJSRq{=b}Z{|BS@mTT@nlbkDQx{LU*}9>1b~zSbyB<_D(8X=+U*VQw7&oDQIFtGU-6cvTMeC6Qm{MkYPZd2LL7SdspbFPzAbRe;- zeib+{>%F=R_h)|G?Q=xdJcL6^NF>eeZzUXcdO?^8R7#<6vBRlL6Fvt}%~O~}41F8l znFW2QC&oIrI~vR+Nnn1lDLJ6UaA*am-<8yGyQs8)k3?!UdXnbo=nRoAvW+({ zr=;K*zz!coma7wyNlCo^d_qDXU3o`k47m*eAQ7gTw~iP@AG%x1bzhLTN$Iz`|0-aA z-#x}s;3ISM)#Zw4=c|8n0ako`s>Q^{0PWHoKY3s9*xg1waiT{_%Q{45d{P7Q^r#UFnGBKAh0;v`WR0mTjMRZ{Dh5oe!{@opQ;R(c7|DR zd~u?ZRKa$wOqic!XU~=lEHiIEi+!rX-qHbq63ass=CdJ|ey0#o;c-q}0(tX+>4Ikf zXcBS`lu3=*`S=3Drg&dnnVmB5J^E8A=c{V6j>8T&6k+$f@3!;g3F>G()wfqgf423J zhG~3FgmreY-}*U7FZqOSUz8NE_%a2tQ@ZxG`M&`23?O&G^+ zg=0!-Ub3;E}iA4hVW4hlfg*;{Svi3g_t+V9vrCJ`xFX%hhJa z!%yCRbq`%i>?0mN0HbSgvBu~yOTkl;KoV`I%~0fLOEh}!=E%}wwM+$|Tad4OY5RDz z>LE+`cJh9k;lPiVaY8`FA{xstBor&)PzSIJL_J;*b%jsjXy5ImoXOINX*Jc|U7&%{ zD?!}ECHd|nxVdc?OJX$o`LEaOKqdKGK=y6QD~(D$qt*Gs8&pk#a{21f$*sYv<9lTs zOTTM`dadk-I@mwV%bEB)>+y;y!vzhR$!9r@uSn*}|DCyIf9<}Rs`}me6;{7Mg!%WF!_-|s|4ws$3M4eq^_st&}PMCWiZs4I}Zk%7;i_^!A7 z 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 delta 16555 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 AyZ`_I literal 0 HcmV?d00001 diff --git a/frontend/src/scenes/data-warehouse/new/sourceWizardLogic.tsx b/frontend/src/scenes/data-warehouse/new/sourceWizardLogic.tsx index 8aad2919fc516..49d93f36b4b85 100644 --- a/frontend/src/scenes/data-warehouse/new/sourceWizardLogic.tsx +++ b/frontend/src/scenes/data-warehouse/new/sourceWizardLogic.tsx @@ -198,6 +198,130 @@ export const SOURCE_DETAILS: Record = { }, ], }, + MySQL: { + name: 'MySQL', + caption: ( + <> + Enter your MySQL/MariaDB credentials to automatically pull your MySQL data into the PostHog Data + warehouse. + + ), + fields: [ + { + name: 'host', + label: 'Host', + type: 'text', + required: true, + placeholder: 'localhost', + }, + { + name: 'port', + label: 'Port', + type: 'number', + required: true, + placeholder: '3306', + }, + { + name: 'dbname', + label: 'Database', + type: 'text', + required: true, + placeholder: 'mysql', + }, + { + name: 'user', + label: 'User', + type: 'text', + required: true, + placeholder: 'mysql', + }, + { + name: 'password', + label: 'Password', + type: 'password', + required: true, + placeholder: '', + }, + { + name: 'schema', + label: 'Schema', + type: 'text', + required: true, + placeholder: 'public', + }, + { + name: 'ssh-tunnel', + label: 'Use SSH tunnel?', + type: 'switch-group', + default: false, + fields: [ + { + name: 'host', + label: 'Tunnel host', + type: 'text', + required: true, + placeholder: 'localhost', + }, + { + name: 'port', + label: 'Tunnel port', + type: 'number', + required: true, + placeholder: '22', + }, + { + type: 'select', + name: 'auth_type', + label: 'Authentication type', + required: true, + defaultValue: 'password', + options: [ + { + label: 'Password', + value: 'password', + fields: [ + { + name: 'username', + label: 'Tunnel username', + type: 'text', + required: true, + placeholder: 'User1', + }, + { + name: 'password', + label: 'Tunnel password', + type: 'password', + required: true, + placeholder: '', + }, + ], + }, + { + label: 'Key pair', + value: 'keypair', + fields: [ + { + name: 'private_key', + label: 'Tunnel private key', + type: 'textarea', + required: true, + placeholder: '', + }, + { + name: 'passphrase', + label: 'Tunnel passphrase', + type: 'password', + required: false, + placeholder: '', + }, + ], + }, + ], + }, + ], + }, + ], + }, Snowflake: { name: 'Snowflake', caption: ( diff --git a/frontend/src/scenes/data-warehouse/settings/DataWarehouseManagedSourcesTable.tsx b/frontend/src/scenes/data-warehouse/settings/DataWarehouseManagedSourcesTable.tsx index 51153885c7bbb..0c97d1bd088f8 100644 --- a/frontend/src/scenes/data-warehouse/settings/DataWarehouseManagedSourcesTable.tsx +++ b/frontend/src/scenes/data-warehouse/settings/DataWarehouseManagedSourcesTable.tsx @@ -10,6 +10,7 @@ import Iconazure from 'public/services/azure.png' import IconCloudflare from 'public/services/cloudflare.png' import IconGoogleCloudStorage from 'public/services/google-cloud-storage.png' import IconHubspot from 'public/services/hubspot.png' +import IconMySQL from 'public/services/mysql.png' import IconPostgres from 'public/services/postgres.png' import IconSnowflake from 'public/services/snowflake.png' import IconStripe from 'public/services/stripe.png' @@ -187,6 +188,7 @@ export function RenderDataWarehouseSourceIcon({ Hubspot: IconHubspot, Zendesk: IconZendesk, Postgres: IconPostgres, + MySQL: IconMySQL, Snowflake: IconSnowflake, aws: IconAwsS3, 'google-cloud': IconGoogleCloudStorage, diff --git a/frontend/src/types.ts b/frontend/src/types.ts index ceede7bd84355..b6cefa0036249 100644 --- a/frontend/src/types.ts +++ b/frontend/src/types.ts @@ -3828,7 +3828,7 @@ export enum DataWarehouseSettingsTab { SelfManaged = 'self-managed', } -export const externalDataSources = ['Stripe', 'Hubspot', 'Postgres', 'Zendesk', 'Snowflake'] as const +export const externalDataSources = ['Stripe', 'Hubspot', 'Postgres', 'MySQL', 'Zendesk', 'Snowflake'] as const export type ExternalDataSourceType = (typeof externalDataSources)[number] diff --git a/latest_migrations.manifest b/latest_migrations.manifest index d9d360ae6dc94..a446e72c61968 100644 --- a/latest_migrations.manifest +++ b/latest_migrations.manifest @@ -5,7 +5,7 @@ contenttypes: 0002_remove_content_type_name ee: 0016_rolemembership_organization_member otp_static: 0002_throttling otp_totp: 0002_auto_20190420_0723 -posthog: 0447_alter_integration_kind +posthog: 0448_add_mysql_externaldatasource_source_type sessions: 0001_initial social_django: 0010_uid_db_index two_factor: 0007_auto_20201201_1019 diff --git a/posthog/migrations/0448_add_mysql_externaldatasource_source_type.py b/posthog/migrations/0448_add_mysql_externaldatasource_source_type.py new file mode 100644 index 0000000000000..b1cc746856069 --- /dev/null +++ b/posthog/migrations/0448_add_mysql_externaldatasource_source_type.py @@ -0,0 +1,27 @@ +# Generated by Django 4.2.11 on 2024-06-05 17:12 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("posthog", "0447_alter_integration_kind"), + ] + + operations = [ + migrations.AlterField( + model_name="externaldatasource", + name="source_type", + field=models.CharField( + choices=[ + ("Stripe", "Stripe"), + ("Hubspot", "Hubspot"), + ("Postgres", "Postgres"), + ("Zendesk", "Zendesk"), + ("Snowflake", "Snowflake"), + ("MySQL", "MySQL"), + ], + max_length=128, + ), + ), + ] diff --git a/posthog/temporal/data_imports/pipelines/schemas.py b/posthog/temporal/data_imports/pipelines/schemas.py index 7dccb65eca59b..8c0355b34d6ed 100644 --- a/posthog/temporal/data_imports/pipelines/schemas.py +++ b/posthog/temporal/data_imports/pipelines/schemas.py @@ -21,6 +21,7 @@ ), ExternalDataSource.Type.POSTGRES: (), ExternalDataSource.Type.SNOWFLAKE: (), + ExternalDataSource.Type.MYSQL: (), } PIPELINE_TYPE_INCREMENTAL_ENDPOINTS_MAPPING = { @@ -29,6 +30,7 @@ ExternalDataSource.Type.ZENDESK: ZENDESK_INCREMENTAL_ENDPOINTS, ExternalDataSource.Type.POSTGRES: (), ExternalDataSource.Type.SNOWFLAKE: (), + ExternalDataSource.Type.MYSQL: (), } PIPELINE_TYPE_INCREMENTAL_FIELDS_MAPPING: dict[ExternalDataSource.Type, dict[str, list[IncrementalField]]] = { @@ -37,4 +39,5 @@ ExternalDataSource.Type.ZENDESK: ZENDESK_INCREMENTAL_FIELDS, ExternalDataSource.Type.POSTGRES: {}, ExternalDataSource.Type.SNOWFLAKE: {}, + ExternalDataSource.Type.MYSQL: {}, } diff --git a/posthog/temporal/data_imports/pipelines/sql_database/__init__.py b/posthog/temporal/data_imports/pipelines/sql_database/__init__.py index 04fb8885701da..858872fe3ee6e 100644 --- a/posthog/temporal/data_imports/pipelines/sql_database/__init__.py +++ b/posthog/temporal/data_imports/pipelines/sql_database/__init__.py @@ -16,6 +16,7 @@ from urllib.parse import quote from posthog.warehouse.types import IncrementalFieldType +from posthog.warehouse.models.external_data_source import ExternalDataSource from sqlalchemy.sql import text from .helpers import ( @@ -35,7 +36,8 @@ def incremental_type_to_initial_value(field_type: IncrementalFieldType) -> Any: return date(1970, 1, 1) -def postgres_source( +def sql_source_for_type( + source_type: ExternalDataSource.Type, host: str, port: int, user: str, @@ -53,10 +55,6 @@ def postgres_source( database = quote(database) sslmode = quote(sslmode) - credentials = ConnectionStringCredentials( - f"postgresql://{user}:{password}@{host}:{port}/{database}?sslmode={sslmode}" - ) - if incremental_field is not None and incremental_field_type is not None: incremental: dlt.sources.incremental | None = dlt.sources.incremental( cursor_path=incremental_field, initial_value=incremental_type_to_initial_value(incremental_field_type) @@ -64,6 +62,15 @@ def postgres_source( else: incremental = None + if source_type == ExternalDataSource.Type.POSTGRES: + credentials = ConnectionStringCredentials( + f"postgresql://{user}:{password}@{host}:{port}/{database}?sslmode={sslmode}" + ) + elif source_type == ExternalDataSource.Type.MYSQL: + credentials = ConnectionStringCredentials(f"mysql+pymysql://{user}:{password}@{host}:{port}/{database}") + else: + raise Exception("Unsupported source_type") + db_source = sql_database(credentials, schema=schema, table_names=table_names, incremental=incremental) return db_source diff --git a/posthog/temporal/data_imports/workflow_activities/create_job_model.py b/posthog/temporal/data_imports/workflow_activities/create_job_model.py index a35bb1667e7b0..21f5e046d1a28 100644 --- a/posthog/temporal/data_imports/workflow_activities/create_job_model.py +++ b/posthog/temporal/data_imports/workflow_activities/create_job_model.py @@ -13,7 +13,7 @@ from posthog.warehouse.models import sync_old_schemas_with_new_schemas, ExternalDataSource, aget_schema_by_id from posthog.warehouse.models.external_data_schema import ( ExternalDataSchema, - get_postgres_schemas, + get_sql_schemas_for_source_type, get_snowflake_schemas, ) from posthog.temporal.common.logger import bind_temporal_worker_logger @@ -46,7 +46,7 @@ async def create_external_data_job_model_activity(inputs: CreateExternalDataJobM source = await sync_to_async(ExternalDataSource.objects.get)(team_id=inputs.team_id, id=inputs.source_id) - if source.source_type == ExternalDataSource.Type.POSTGRES: + if source.source_type in [ExternalDataSource.Type.POSTGRES, ExternalDataSource.Type.MYSQL]: host = source.job_inputs.get("host") port = source.job_inputs.get("port") user = source.job_inputs.get("user") @@ -74,8 +74,8 @@ async def create_external_data_job_model_activity(inputs: CreateExternalDataJobM private_key=ssh_tunnel_auth_type_private_key, ) - schemas_to_sync = await sync_to_async(get_postgres_schemas)( - host, port, database, user, password, db_schema, ssh_tunnel + schemas_to_sync = await sync_to_async(get_sql_schemas_for_source_type)( + source.source_type, host, port, database, user, password, db_schema, ssh_tunnel ) elif source.source_type == ExternalDataSource.Type.SNOWFLAKE: account_id = source.job_inputs.get("account_id") diff --git a/posthog/temporal/data_imports/workflow_activities/import_data.py b/posthog/temporal/data_imports/workflow_activities/import_data.py index 9849339e785c7..190a35e3ab673 100644 --- a/posthog/temporal/data_imports/workflow_activities/import_data.py +++ b/posthog/temporal/data_imports/workflow_activities/import_data.py @@ -102,8 +102,8 @@ async def import_data_activity(inputs: ImportDataActivityInputs): schema=schema, reset_pipeline=reset_pipeline, ) - elif model.pipeline.source_type == ExternalDataSource.Type.POSTGRES: - from posthog.temporal.data_imports.pipelines.sql_database import postgres_source + elif model.pipeline.source_type in [ExternalDataSource.Type.POSTGRES, ExternalDataSource.Type.MYSQL]: + from posthog.temporal.data_imports.pipelines.sql_database import sql_source_for_type host = model.pipeline.job_inputs.get("host") port = model.pipeline.job_inputs.get("port") @@ -137,7 +137,8 @@ async def import_data_activity(inputs: ImportDataActivityInputs): if tunnel is None: raise Exception("Can't open tunnel to SSH server") - source = postgres_source( + source = sql_source_for_type( + source_type=model.pipeline.source_type, host=tunnel.local_bind_host, port=tunnel.local_bind_port, user=user, @@ -163,7 +164,8 @@ async def import_data_activity(inputs: ImportDataActivityInputs): reset_pipeline=reset_pipeline, ) - source = postgres_source( + source = sql_source_for_type( + source_type=model.pipeline.source_type, host=host, port=port, user=user, diff --git a/posthog/temporal/tests/batch_exports/test_import_data.py b/posthog/temporal/tests/batch_exports/test_import_data.py index 2b743102056d0..935781c3bdf34 100644 --- a/posthog/temporal/tests/batch_exports/test_import_data.py +++ b/posthog/temporal/tests/batch_exports/test_import_data.py @@ -70,12 +70,13 @@ async def test_postgres_source_without_ssh_tunnel(activity_environment, team, ** activity_inputs = await _setup(team, job_inputs) with ( - mock.patch("posthog.temporal.data_imports.pipelines.sql_database.postgres_source") as postgres_source, + mock.patch("posthog.temporal.data_imports.pipelines.sql_database.sql_source_for_type") as sql_source_for_type, mock.patch("posthog.temporal.data_imports.workflow_activities.import_data._run"), ): await activity_environment.run(import_data_activity, activity_inputs) - postgres_source.assert_called_once_with( + sql_source_for_type.assert_called_once_with( + source_type=ExternalDataSource.Type.POSTGRES, host="host.com", port="5432", user="Username", @@ -107,12 +108,13 @@ async def test_postgres_source_with_ssh_tunnel_disabled(activity_environment, te activity_inputs = await _setup(team, job_inputs) with ( - mock.patch("posthog.temporal.data_imports.pipelines.sql_database.postgres_source") as postgres_source, + mock.patch("posthog.temporal.data_imports.pipelines.sql_database.sql_source_for_type") as sql_source_for_type, mock.patch("posthog.temporal.data_imports.workflow_activities.import_data._run"), ): await activity_environment.run(import_data_activity, activity_inputs) - postgres_source.assert_called_once_with( + sql_source_for_type.assert_called_once_with( + source_type=ExternalDataSource.Type.POSTGRES, host="host.com", port="5432", user="Username", @@ -160,13 +162,14 @@ def __exit__(self, exc_type, exc_value, exc_traceback): return MockedTunnel() with ( - mock.patch("posthog.temporal.data_imports.pipelines.sql_database.postgres_source") as postgres_source, + mock.patch("posthog.temporal.data_imports.pipelines.sql_database.sql_source_for_type") as sql_source_for_type, mock.patch("posthog.temporal.data_imports.workflow_activities.import_data._run"), mock.patch.object(SSHTunnel, "get_tunnel", mock_get_tunnel), ): await activity_environment.run(import_data_activity, activity_inputs) - postgres_source.assert_called_once_with( + sql_source_for_type.assert_called_once_with( + source_type=ExternalDataSource.Type.POSTGRES, host="other-host.com", port=55550, user="Username", diff --git a/posthog/warehouse/api/external_data_schema.py b/posthog/warehouse/api/external_data_schema.py index eaba69507f392..e85f303b24ccb 100644 --- a/posthog/warehouse/api/external_data_schema.py +++ b/posthog/warehouse/api/external_data_schema.py @@ -24,10 +24,11 @@ delete_data_import_folder, ) from posthog.warehouse.models.external_data_schema import ( + filter_mysql_incremental_fields, filter_postgres_incremental_fields, filter_snowflake_incremental_fields, - get_postgres_schemas, get_snowflake_schemas, + get_sql_schemas_for_source_type, ) from posthog.warehouse.models.external_data_source import ExternalDataSource from posthog.warehouse.models.ssh_tunnel import SSHTunnel @@ -253,7 +254,7 @@ def incremental_fields(self, request: Request, *args: Any, **kwargs: Any): source: ExternalDataSource = instance.source incremental_columns: list[IncrementalField] = [] - if source.source_type == ExternalDataSource.Type.POSTGRES: + if source.source_type in [ExternalDataSource.Type.POSTGRES, ExternalDataSource.Type.MYSQL]: # TODO(@Gilbert09): Move all this into a util and replace elsewhere host = source.job_inputs.get("host") port = source.job_inputs.get("port") @@ -282,7 +283,8 @@ def incremental_fields(self, request: Request, *args: Any, **kwargs: Any): private_key=ssh_tunnel_auth_type_private_key, ) - pg_schemas = get_postgres_schemas( + db_schemas = get_sql_schemas_for_source_type( + source.source_type, host=host, port=port, database=database, @@ -292,10 +294,15 @@ def incremental_fields(self, request: Request, *args: Any, **kwargs: Any): ssh_tunnel=ssh_tunnel, ) - columns = pg_schemas.get(instance.name, []) + columns = db_schemas.get(instance.name, []) + if source.source_type == ExternalDataSource.Type.POSTGRES: + incremental_fields_func = filter_postgres_incremental_fields + else: + incremental_fields_func = filter_mysql_incremental_fields + incremental_columns = [ {"field": name, "field_type": field_type, "label": name, "type": field_type} - for name, field_type in filter_postgres_incremental_fields(columns) + for name, field_type in incremental_fields_func(columns) ] elif source.source_type == ExternalDataSource.Type.SNOWFLAKE: # TODO(@Gilbert09): Move all this into a util and replace elsewhere diff --git a/posthog/warehouse/api/external_data_source.py b/posthog/warehouse/api/external_data_source.py index af3df2ec43ee2..059e1fe271154 100644 --- a/posthog/warehouse/api/external_data_source.py +++ b/posthog/warehouse/api/external_data_source.py @@ -34,7 +34,7 @@ from posthog.warehouse.models.external_data_schema import ( filter_postgres_incremental_fields, filter_snowflake_incremental_fields, - get_postgres_schemas, + get_sql_schemas_for_source_type, get_snowflake_schemas, ) @@ -50,7 +50,16 @@ logger = structlog.get_logger(__name__) -GenericPostgresError = "Could not connect to Postgres. Please check all connection details are valid." + +def get_generic_sql_error(source_type: ExternalDataSource.Type): + if source_type == ExternalDataSource.Type.MYSQL: + name = "MySQL" + else: + name = "Postgres" + + return f"Could not connect to {name}. Please check all connection details are valid." + + GenericSnowflakeError = "Could not connect to Snowflake. Please check all connection details are valid." PostgresErrors = { "password authentication failed for user": "Invalid user or password", @@ -248,9 +257,9 @@ def create(self, request: Request, *args: Any, **kwargs: Any) -> Response: new_source_model = self._handle_hubspot_source(request, *args, **kwargs) elif source_type == ExternalDataSource.Type.ZENDESK: new_source_model = self._handle_zendesk_source(request, *args, **kwargs) - elif source_type == ExternalDataSource.Type.POSTGRES: + elif source_type in [ExternalDataSource.Type.POSTGRES, ExternalDataSource.Type.MYSQL]: try: - new_source_model, postgres_schemas = self._handle_postgres_source(request, *args, **kwargs) + new_source_model, sql_schemas = self._handle_sql_source(request, *args, **kwargs) except InternalPostgresError: return Response( status=status.HTTP_400_BAD_REQUEST, data={"message": "Cannot use internal Postgres database"} @@ -264,8 +273,8 @@ def create(self, request: Request, *args: Any, **kwargs: Any) -> Response: payload = request.data["payload"] schemas = payload.get("schemas", None) - if source_type == ExternalDataSource.Type.POSTGRES: - default_schemas = postgres_schemas + if source_type in [ExternalDataSource.Type.POSTGRES, ExternalDataSource.Type.MYSQL]: + default_schemas = sql_schemas elif source_type == ExternalDataSource.Type.SNOWFLAKE: default_schemas = snowflake_schemas else: @@ -408,9 +417,7 @@ def _handle_hubspot_source(self, request: Request, *args: Any, **kwargs: Any) -> return new_source_model - def _handle_postgres_source( - self, request: Request, *args: Any, **kwargs: Any - ) -> tuple[ExternalDataSource, list[Any]]: + def _handle_sql_source(self, request: Request, *args: Any, **kwargs: Any) -> tuple[ExternalDataSource, list[Any]]: payload = request.data["payload"] prefix = request.data.get("prefix", None) source_type = request.data["source_type"] @@ -474,7 +481,16 @@ def _handle_postgres_source( private_key=ssh_tunnel_auth_type_private_key, ) - schemas = get_postgres_schemas(host, port, database, user, password, schema, ssh_tunnel) + schemas = get_sql_schemas_for_source_type( + source_type, + host, + port, + database, + user, + password, + schema, + ssh_tunnel, + ) return new_source_model, schemas @@ -609,7 +625,7 @@ def database_schema(self, request: Request, *arg: Any, **kwargs: Any): ) # Get schemas and validate SQL credentials - if source_type == ExternalDataSource.Type.POSTGRES: + if source_type in [ExternalDataSource.Type.POSTGRES, ExternalDataSource.Type.MYSQL]: host = request.data.get("host", None) port = request.data.get("port", None) database = request.data.get("dbname", None) @@ -677,11 +693,20 @@ def database_schema(self, request: Request, *arg: Any, **kwargs: Any): ) try: - result = get_postgres_schemas(host, port, database, user, password, schema, ssh_tunnel) + result = get_sql_schemas_for_source_type( + source_type, + host, + port, + database, + user, + password, + schema, + ssh_tunnel, + ) if len(result.keys()) == 0: return Response( status=status.HTTP_400_BAD_REQUEST, - data={"message": "Postgres schema doesn't exist"}, + data={"message": "Schema doesn't exist"}, ) except OperationalError as e: exposed_error = self._expose_postgres_error(e) @@ -691,12 +716,12 @@ def database_schema(self, request: Request, *arg: Any, **kwargs: Any): return Response( status=status.HTTP_400_BAD_REQUEST, - data={"message": exposed_error or GenericPostgresError}, + data={"message": exposed_error or get_generic_sql_error(source_type)}, ) except BaseSSHTunnelForwarderError as e: return Response( status=status.HTTP_400_BAD_REQUEST, - data={"message": e.value or GenericPostgresError}, + data={"message": e.value or get_generic_sql_error(source_type)}, ) except Exception as e: capture_exception(e) @@ -704,7 +729,7 @@ def database_schema(self, request: Request, *arg: Any, **kwargs: Any): return Response( status=status.HTTP_400_BAD_REQUEST, - data={"message": GenericPostgresError}, + data={"message": get_generic_sql_error(source_type)}, ) filtered_results = [ diff --git a/posthog/warehouse/api/test/test_external_data_source.py b/posthog/warehouse/api/test/test_external_data_source.py index 84517cafb32af..2ddadcb039874 100644 --- a/posthog/warehouse/api/test/test_external_data_source.py +++ b/posthog/warehouse/api/test/test_external_data_source.py @@ -584,9 +584,10 @@ def test_database_schema_non_postgres_source(self): assert table in table_names @patch( - "posthog.warehouse.api.external_data_source.get_postgres_schemas", return_value={"table_1": [("id", "integer")]} + "posthog.warehouse.api.external_data_source.get_sql_schemas_for_source_type", + return_value={"table_1": [("id", "integer")]}, ) - def test_internal_postgres(self, patch_get_postgres_schemas): + def test_internal_postgres(self, patch_get_sql_schemas_for_source_type): # This test checks handling of project ID 2 in Cloud US and project ID 1 in Cloud EU, # so let's make sure there are no projects with these IDs in the test DB Project.objects.filter(id__in=[1, 2]).delete() diff --git a/posthog/warehouse/models/external_data_schema.py b/posthog/warehouse/models/external_data_schema.py index fbb65500192d7..f47c24277237e 100644 --- a/posthog/warehouse/models/external_data_schema.py +++ b/posthog/warehouse/models/external_data_schema.py @@ -6,6 +6,8 @@ from posthog.models.utils import CreatedMetaFields, UUIDModel, sane_repr import uuid import psycopg2 +import pymysql +from .external_data_source import ExternalDataSource from posthog.warehouse.data_load.service import ( external_data_workflow_exists, pause_external_data_schedule, @@ -222,3 +224,83 @@ def get_schemas(postgres_host: str, postgres_port: int): return get_schemas(tunnel.local_bind_host, tunnel.local_bind_port) return get_schemas(host, int(port)) + + +def filter_mysql_incremental_fields(columns: list[tuple[str, str]]) -> list[tuple[str, IncrementalFieldType]]: + results: list[tuple[str, IncrementalFieldType]] = [] + for column_name, type in columns: + type = type.lower() + if type.startswith("timestamp"): + results.append((column_name, IncrementalFieldType.Timestamp)) + elif type == "date": + results.append((column_name, IncrementalFieldType.Date)) + elif type == "datetime": + results.append((column_name, IncrementalFieldType.DateTime)) + elif type == "tinyint" or type == "smallint" or type == "mediumint" or type == "int" or type == "bigint": + results.append((column_name, IncrementalFieldType.Integer)) + + return results + + +def get_mysql_schemas( + host: str, + port: str, + database: str, + user: str, + password: str, + schema: str, + ssh_tunnel: SSHTunnel, +) -> dict[str, list[tuple[str, str]]]: + def get_schemas(mysql_host: str, mysql_port: int): + connection = pymysql.connect( + host=mysql_host, + port=mysql_port, + database=database, + user=user, + password=password, + connect_timeout=5, + ) + + with connection.cursor() as cursor: + cursor.execute( + "SELECT table_name, column_name, data_type FROM information_schema.columns WHERE table_schema = %(schema)s ORDER BY table_name ASC", + {"schema": schema}, + ) + result = cursor.fetchall() + + schema_list = defaultdict(list) + for row in result: + schema_list[row[0]].append((row[1], row[2])) + + connection.close() + + return schema_list + + if ssh_tunnel.enabled: + with ssh_tunnel.get_tunnel(host, int(port)) as tunnel: + if tunnel is None: + raise Exception("Can't open tunnel to SSH server") + + return get_schemas(tunnel.local_bind_host, tunnel.local_bind_port) + + return get_schemas(host, int(port)) + + +def get_sql_schemas_for_source_type( + source_type: ExternalDataSource.Type, + host: str, + port: str, + database: str, + user: str, + password: str, + schema: str, + ssh_tunnel: SSHTunnel, +) -> dict[str, list[tuple[str, str]]]: + if source_type == ExternalDataSource.Type.POSTGRES: + schemas = get_postgres_schemas(host, port, database, user, password, schema, ssh_tunnel) + elif source_type == ExternalDataSource.Type.MYSQL: + schemas = get_mysql_schemas(host, port, database, user, password, schema, ssh_tunnel) + else: + raise Exception("Unsupported source_type") + + return schemas diff --git a/posthog/warehouse/models/external_data_source.py b/posthog/warehouse/models/external_data_source.py index dc21af8db26ad..f9ffb21d41b29 100644 --- a/posthog/warehouse/models/external_data_source.py +++ b/posthog/warehouse/models/external_data_source.py @@ -19,6 +19,7 @@ class Type(models.TextChoices): POSTGRES = "Postgres", "Postgres" ZENDESK = "Zendesk", "Zendesk" SNOWFLAKE = "Snowflake", "Snowflake" + MYSQL = "MySQL", "MySQL" class Status(models.TextChoices): RUNNING = "Running", "Running" diff --git a/requirements-dev.in b/requirements-dev.in index 9ab0252aecf67..5ca5431dbaf1c 100644 --- a/requirements-dev.in +++ b/requirements-dev.in @@ -26,6 +26,7 @@ packaging==23.1 black~=23.9.1 boto3-stubs[s3] types-markdown==3.3.9 +types-PyMySQL==1.1.0.20240524 types-PyYAML==6.0.1 types-freezegun==1.1.10 types-paramiko==3.4.0.20240423 diff --git a/requirements-dev.txt b/requirements-dev.txt index a528eb65d50a7..938eaead5395c 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -37,7 +37,7 @@ black==23.9.1 # -r requirements-dev.in # datamodel-code-generator # inline-snapshot -boto3-stubs[s3]==1.34.84 +boto3-stubs==1.34.84 # via -r requirements-dev.in botocore-stubs==1.34.84 # via boto3-stubs @@ -62,7 +62,7 @@ click==8.1.7 # inline-snapshot colorama==0.4.4 # via pytest-watch -coverage[toml]==5.5 +coverage==5.5 # via pytest-cov cryptography==39.0.2 # via @@ -98,6 +98,7 @@ executing==2.0.1 faker==17.5.0 # via -r requirements-dev.in fakeredis==2.23.3 + # via -r requirements-dev.in flaky==3.7.0 # via -r requirements-dev.in freezegun==1.2.2 @@ -197,7 +198,7 @@ pycparser==2.20 # via # -c requirements.txt # cffi -pydantic[email]==2.5.3 +pydantic==2.5.3 # via # -c requirements.txt # datamodel-code-generator @@ -313,6 +314,8 @@ types-markdown==3.3.9 # via -r requirements-dev.in types-paramiko==3.4.0.20240423 # via -r requirements-dev.in +types-pymysql==1.1.0.20240524 + # via -r requirements-dev.in types-python-dateutil==2.8.3 # via -r requirements-dev.in types-pytz==2023.3.0.0 diff --git a/requirements.in b/requirements.in index 9d5e15a4e59a5..03656f814bcf8 100644 --- a/requirements.in +++ b/requirements.in @@ -56,6 +56,7 @@ paramiko==3.4.0 Pillow==10.2.0 posthoganalytics==3.5.0 psycopg2-binary==2.9.7 +PyMySQL==1.1.1 psycopg[binary]==3.1.18 pyarrow==15.0.0 pydantic==2.5.3 diff --git a/requirements.txt b/requirements.txt index 92b14db6600f4..a7f9721004c84 100644 --- a/requirements.txt +++ b/requirements.txt @@ -414,6 +414,7 @@ psycopg-binary==3.1.18 # via psycopg psycopg2-binary==2.9.7 # via -r requirements.in +PyMySQL==1.1.1 py==1.11.0 # via retry pyarrow==15.0.0 From 6440ea5e6de1ca81551bd5823b0737f734933af4 Mon Sep 17 00:00:00 2001 From: Georgiy Tarasov Date: Wed, 24 Jul 2024 12:17:56 +0200 Subject: [PATCH 13/33] fix(insights): polishing of multiple breakdowns in Trends (#23649) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- ...nsight-details--trends-world-map--dark.png | Bin 19356 -> 17523 bytes ...sight-details--trends-world-map--light.png | Bin 19151 -> 17211 bytes .../activityLogLogic.insight.test.tsx | 136 ++++++++++-------- .../lib/components/ActivityLog/complex.sql | 27 ++++ .../lib/components/ActivityLog/full_query.sql | 41 ++++++ .../src/lib/components/ActivityLog/weekly.sql | 45 ++++++ .../Cards/InsightCard/InsightDetails.tsx | 30 ++-- .../nodes/InsightViz/InsightDisplayConfig.tsx | 3 +- frontend/src/queries/utils.ts | 11 ++ .../taxonomicBreakdownFilterLogic.test.ts | 57 +++++++- .../taxonomicBreakdownFilterLogic.ts | 9 ++ .../scenes/insights/insightVizDataLogic.ts | 9 +- .../saved-insights/activityDescriptions.tsx | 5 +- .../hogql_queries/insights/trends/having.sql | 11 ++ 14 files changed, 307 insertions(+), 77 deletions(-) create mode 100644 frontend/src/lib/components/ActivityLog/complex.sql create mode 100644 frontend/src/lib/components/ActivityLog/full_query.sql create mode 100644 frontend/src/lib/components/ActivityLog/weekly.sql create mode 100644 posthog/hogql_queries/insights/trends/having.sql diff --git a/frontend/__snapshots__/components-cards-insight-details--trends-world-map--dark.png b/frontend/__snapshots__/components-cards-insight-details--trends-world-map--dark.png index 15b60cc25575c147ee841a8d44cd3855bd8e8bc8..6b08cf6fd3d08701111e45674fea554be37413b6 100644 GIT binary patch literal 17523 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
t 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 B-=_co literal 19151 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 j{gvs8e*y0-oT6GG{)R_2 { }) it('can handle change of insight query', async () => { - const logic = await insightTestSetup('test insight', 'updated', [ - { - type: ActivityScope.INSIGHT, - action: 'changed', - field: 'query', - after: { - kind: 'TrendsQuery', - properties: { - type: 'AND', - values: [ - { - type: 'OR', - values: [ - { - type: 'event', - key: '$current_url', - operator: 'exact', - value: ['https://hedgebox.net/files/'], - }, - { - type: 'event', - key: '$geoip_country_code', - operator: 'exact', - value: ['US', 'AU'], - }, - ], - }, - ], - }, - filterTestAccounts: false, - interval: 'day', - dateRange: { - date_from: '-7d', - }, - series: [ + const insightMock = { + type: ActivityScope.INSIGHT, + action: 'changed', + field: 'query', + after: { + kind: 'TrendsQuery', + properties: { + type: 'AND', + values: [ { - kind: 'EventsNode', - name: '$pageview', - custom_name: 'Views', - event: '$pageview', - properties: [ + type: 'OR', + values: [ { type: 'event', - key: '$browser', + key: '$current_url', operator: 'exact', - value: 'Chrome', + value: ['https://hedgebox.net/files/'], }, { - type: 'cohort', - key: 'id', - value: 2, + type: 'event', + key: '$geoip_country_code', + operator: 'exact', + value: ['US', 'AU'], }, ], - limit: 100, }, ], - trendsFilter: { - display: 'ActionsAreaGraph', - }, - breakdownFilter: { - breakdown: '$geoip_country_code', - breakdown_type: 'event', + }, + filterTestAccounts: false, + interval: 'day', + dateRange: { + date_from: '-7d', + }, + series: [ + { + kind: 'EventsNode', + name: '$pageview', + custom_name: 'Views', + event: '$pageview', + properties: [ + { + type: 'event', + key: '$browser', + operator: 'exact', + value: 'Chrome', + }, + { + type: 'cohort', + key: 'id', + value: 2, + }, + ], + limit: 100, }, + ], + trendsFilter: { + display: 'ActionsAreaGraph', + }, + breakdownFilter: { + breakdown: '$geoip_country_code', + breakdown_type: 'event', }, }, - ]) - const actual = logic.values.humanizedActivity + } - const renderedDescription = render(<>{actual[0].description}).container + let logic = await insightTestSetup('test insight', 'updated', [insightMock as any]) + let actual = logic.values.humanizedActivity + + let renderedDescription = render(<>{actual[0].description}).container expect(renderedDescription).toHaveTextContent('peter changed query definition on test insight') - const renderedExtendedDescription = render(<>{actual[0].extendedDescription}).container + let renderedExtendedDescription = render(<>{actual[0].extendedDescription}).container expect(renderedExtendedDescription).toHaveTextContent( "Query summaryAShowing \"Views\"Pageviewcounted by total countwhere event'sBrowser= equals Chromeand person belongs to cohortID 2FiltersEvent'sCurrent URL= equals https://hedgebox.net/files/or event'sCountry Code= equals US or AUBreakdown byCountry Code" ) + ;(insightMock.after.breakdownFilter as BreakdownFilter) = { + breakdowns: [ + { + property: '$geoip_country_code', + type: 'event', + }, + { + property: '$session_duration', + type: 'session', + }, + ], + } + + logic = await insightTestSetup('test insight', 'updated', [insightMock as any]) + actual = logic.values.humanizedActivity + + renderedDescription = render(<>{actual[0].description}).container + expect(renderedDescription).toHaveTextContent('peter changed query definition on test insight') + + renderedExtendedDescription = render(<>{actual[0].extendedDescription}).container + expect(renderedExtendedDescription).toHaveTextContent( + "Query summaryAShowing \"Views\"Pageviewcounted by total countwhere event'sBrowser= equals Chromeand person belongs to cohortID 2FiltersEvent'sCurrent URL= equals https://hedgebox.net/files/or event'sCountry Code= equals US or AUBreakdown byCountry CodeSession duration" + ) }) it('can handle change of filters on a retention graph', async () => { diff --git a/frontend/src/lib/components/ActivityLog/complex.sql b/frontend/src/lib/components/ActivityLog/complex.sql new file mode 100644 index 0000000000000..377778eff333d --- /dev/null +++ b/frontend/src/lib/components/ActivityLog/complex.sql @@ -0,0 +1,27 @@ +SELECT + count() AS total, + toStartOfDay(min_timestamp) AS day_start, + breakdown_value AS breakdown_value +FROM + (SELECT + min(timestamp) AS min_timestamp, + argMin(breakdown_value, timestamp) AS breakdown_value + FROM + (SELECT + person_id, + timestamp, + ifNull(nullIf(toString(properties.$browser), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM + events AS e SAMPLE 1 + WHERE + and(equals(event, '$pageview'), lessOrEquals(timestamp, assumeNotNull(toDateTime('2025-01-20 23:59:59')))) + ) + GROUP BY + person_id + ) +WHERE + greaterOrEquals(min_timestamp, toStartOfDay(assumeNotNull(toDateTime('2020-01-09 00:00:00')))) +GROUP BY + day_start, + breakdown_value +LIMIT 50000 diff --git a/frontend/src/lib/components/ActivityLog/full_query.sql b/frontend/src/lib/components/ActivityLog/full_query.sql new file mode 100644 index 0000000000000..b7129f83c64f4 --- /dev/null +++ b/frontend/src/lib/components/ActivityLog/full_query.sql @@ -0,0 +1,41 @@ +SELECT + arrayMap(number -> plus(toStartOfDay(assumeNotNull(toDateTime('2024-07-16 00:00:00'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(toDateTime('2024-07-16 00:00:00'))), toStartOfDay(assumeNotNull(toDateTime('2024-07-23 23:59:59'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> equals(x, _match_date), _days_for_count), _index), 1))), date) AS total +FROM + (SELECT + sum(total) AS count, + day_start + FROM (SELECT + count() AS total, + day_start, + breakdown_value + FROM ( + SELECT + min(timestamp) as day_start, + argMin(breakdown_value, timestamp) AS breakdown_value, + FROM + ( + SELECT + person_id, + toStartOfDay(timestamp) AS timestamp, + ifNull(nullIf(toString(person.properties.email), ''), '$$_posthog_breakdown_null_$$') AS breakdown_value + FROM + events AS e SAMPLE 1 + WHERE + and(lessOrEquals(timestamp, assumeNotNull(toDateTime('2024-07-23 23:59:59'))), equals(properties.$browser, 'Safari')) + ) + WHERE + greaterOrEquals(timestamp, toStartOfDay(assumeNotNull(toDateTime('2024-07-16 00:00:00')))) + GROUP BY + person_id + ) + GROUP BY + day_start, + breakdown_value) + GROUP BY + day_start + ORDER BY + day_start ASC) +ORDER BY + arraySum(total) DESC +LIMIT 50000 diff --git a/frontend/src/lib/components/ActivityLog/weekly.sql b/frontend/src/lib/components/ActivityLog/weekly.sql new file mode 100644 index 0000000000000..579249842508c --- /dev/null +++ b/frontend/src/lib/components/ActivityLog/weekly.sql @@ -0,0 +1,45 @@ +SELECT + arrayMap(number -> plus(toStartOfDay(assumeNotNull(toDateTime('2024-07-16 00:00:00'))), toIntervalDay(number)), range(0, plus(coalesce(dateDiff('day', toStartOfDay(assumeNotNull(toDateTime('2024-07-16 00:00:00'))), toStartOfDay(assumeNotNull(toDateTime('2024-07-23 23:59:59'))))), 1))) AS date, + arrayMap(_match_date -> arraySum(arraySlice(groupArray(count), indexOf(groupArray(day_start) AS _days_for_count, _match_date) AS _index, plus(minus(arrayLastIndex(x -> equals(x, _match_date), _days_for_count), _index), 1))), date) AS total +FROM + (SELECT + sum(total) AS count, + day_start + FROM + (SELECT + counts AS total, + toStartOfDay(timestamp) AS day_start + FROM + (SELECT + d.timestamp, + count(DISTINCT actor_id) AS counts + FROM + (SELECT + minus(toStartOfDay(assumeNotNull(toDateTime('2024-07-23 23:59:59'))), toIntervalDay(number)) AS timestamp + FROM + numbers(dateDiff('day', minus(toStartOfDay(assumeNotNull(toDateTime('2024-07-16 00:00:00'))), toIntervalDay(7)), assumeNotNull(toDateTime('2024-07-23 23:59:59')))) AS numbers) AS d + CROSS JOIN (SELECT + timestamp AS timestamp, + e.person_id AS actor_id + FROM + events AS e SAMPLE 1 + WHERE + and(equals(event, '$pageview'), greaterOrEquals(timestamp, minus(assumeNotNull(toDateTime('2024-07-16 00:00:00')), toIntervalDay(7))), lessOrEquals(timestamp, assumeNotNull(toDateTime('2024-07-23 23:59:59')))) + GROUP BY + timestamp, + actor_id) AS e + WHERE + and(lessOrEquals(e.timestamp, plus(d.timestamp, toIntervalDay(1))), greater(e.timestamp, minus(d.timestamp, toIntervalDay(6)))) + GROUP BY + d.timestamp + ORDER BY + d.timestamp ASC) + WHERE + and(greaterOrEquals(timestamp, toStartOfDay(assumeNotNull(toDateTime('2024-07-16 00:00:00')))), lessOrEquals(timestamp, assumeNotNull(toDateTime('2024-07-23 23:59:59'))))) + GROUP BY + day_start + ORDER BY + day_start ASC) +ORDER BY + arraySum(total) DESC +LIMIT 50000 diff --git a/frontend/src/lib/components/Cards/InsightCard/InsightDetails.tsx b/frontend/src/lib/components/Cards/InsightCard/InsightDetails.tsx index 3c5d5636e29d1..9a0038556dea6 100644 --- a/frontend/src/lib/components/Cards/InsightCard/InsightDetails.tsx +++ b/frontend/src/lib/components/Cards/InsightCard/InsightDetails.tsx @@ -39,6 +39,7 @@ import { isLifecycleQuery, isPathsQuery, isTrendsQuery, + isValidBreakdown, } from '~/queries/utils' import { AnyPropertyFilter, @@ -155,11 +156,7 @@ function SeriesDisplay({ const { mathDefinitions } = useValues(mathsLogic) const filter = query.series[seriesIndex] - const hasBreakdown = - isInsightQueryWithBreakdown(query) && - query.breakdownFilter != null && - query.breakdownFilter.breakdown_type != null && - query.breakdownFilter.breakdown != null + const hasBreakdown = isInsightQueryWithBreakdown(query) && isValidBreakdown(query.breakdownFilter) const mathDefinition = mathDefinitions[ isLifecycleQuery(query) @@ -338,25 +335,26 @@ export function LEGACY_FilterBasedBreakdownSummary({ filters }: { filters: Parti } export function BreakdownSummary({ query }: { query: InsightQueryNode }): JSX.Element | null { - if ( - !isInsightQueryWithBreakdown(query) || - !query.breakdownFilter || - query.breakdownFilter.breakdown_type == null || - query.breakdownFilter.breakdown == null - ) { + if (!isInsightQueryWithBreakdown(query) || !isValidBreakdown(query.breakdownFilter)) { return null } - const { breakdown_type, breakdown } = query.breakdownFilter - const breakdownArray = Array.isArray(breakdown) ? breakdown : [breakdown] + const { breakdown_type, breakdown, breakdowns } = query.breakdownFilter return ( <>
Breakdown by
- {breakdownArray.map((b) => ( - - ))} + {Array.isArray(breakdowns) + ? breakdowns.map((b) => ( + + )) + : breakdown && + (Array.isArray(breakdown) + ? breakdown + : [breakdown].map((b) => ( + + )))}
) diff --git a/frontend/src/queries/nodes/InsightViz/InsightDisplayConfig.tsx b/frontend/src/queries/nodes/InsightViz/InsightDisplayConfig.tsx index aeca448a78211..86d42ae2ea769 100644 --- a/frontend/src/queries/nodes/InsightViz/InsightDisplayConfig.tsx +++ b/frontend/src/queries/nodes/InsightViz/InsightDisplayConfig.tsx @@ -28,6 +28,7 @@ import { PathStepPicker } from 'scenes/insights/views/Paths/PathStepPicker' import { trendsDataLogic } from 'scenes/trends/trendsDataLogic' import { useDebouncedCallback } from 'use-debounce' +import { isValidBreakdown } from '~/queries/utils' import { ChartDisplayType } from '~/types' export function InsightDisplayConfig(): JSX.Element { @@ -62,7 +63,7 @@ export function InsightDisplayConfig(): JSX.Element { isLifecycle || ((isTrends || isStickiness) && !(display && NON_TIME_SERIES_DISPLAY_TYPES.includes(display))) const showSmoothing = - isTrends && !breakdownFilter?.breakdown_type && (!display || display === ChartDisplayType.ActionsLineGraph) + isTrends && !isValidBreakdown(breakdownFilter) && (!display || display === ChartDisplayType.ActionsLineGraph) const { showValuesOnSeries, mightContainFractionalNumbers } = useValues(trendsDataLogic(insightProps)) diff --git a/frontend/src/queries/utils.ts b/frontend/src/queries/utils.ts index 05e42c680b0e2..3062354c7df91 100644 --- a/frontend/src/queries/utils.ts +++ b/frontend/src/queries/utils.ts @@ -447,3 +447,14 @@ export function hogql(strings: TemplateStringsArray, ...values: any[]): string { return strings.reduce((acc, str, i) => acc + str + (i < strings.length - 1 ? formatHogQlValue(values[i]) : ''), '') } hogql.identifier = hogQlIdentifier + +/** + * Wether we have a valid `breakdownFilter` or not. + */ +export function isValidBreakdown(breakdownFilter?: BreakdownFilter | null): breakdownFilter is BreakdownFilter { + return !!( + breakdownFilter && + ((breakdownFilter.breakdown && breakdownFilter.breakdown_type) || + (breakdownFilter.breakdowns && breakdownFilter.breakdowns.length > 0)) + ) +} diff --git a/frontend/src/scenes/insights/filters/BreakdownFilter/taxonomicBreakdownFilterLogic.test.ts b/frontend/src/scenes/insights/filters/BreakdownFilter/taxonomicBreakdownFilterLogic.test.ts index 1064db47dd981..a011a4a4e1eb6 100644 --- a/frontend/src/scenes/insights/filters/BreakdownFilter/taxonomicBreakdownFilterLogic.test.ts +++ b/frontend/src/scenes/insights/filters/BreakdownFilter/taxonomicBreakdownFilterLogic.test.ts @@ -2,7 +2,7 @@ import { expectLogic } from 'kea-test-utils' import { TaxonomicFilterGroup, TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import { initKeaTests } from '~/test/init' -import { InsightLogicProps } from '~/types' +import { ChartDisplayType, InsightLogicProps } from '~/types' import * as breakdownLogic from './taxonomicBreakdownFilterLogic' @@ -138,6 +138,32 @@ describe('taxonomicBreakdownFilterLogic', () => { }) }) + it('resets the map view when adding a next breakdown', async () => { + logic = taxonomicBreakdownFilterLogic({ + insightProps, + breakdownFilter: { + breakdown: '$geoip_country_code', + breakdown_type: 'person', + }, + isTrends: true, + display: ChartDisplayType.WorldMap, + updateBreakdownFilter, + updateDisplay, + }) + logic.mount() + const changedBreakdown = 'c' + const group: TaxonomicFilterGroup = taxonomicGroupFor(TaxonomicFilterGroupType.EventProperties, undefined) + + await expectLogic(logic, () => { + logic.actions.addBreakdown(changedBreakdown, group) + }).toFinishListeners() + + expect(updateBreakdownFilter).toHaveBeenCalledWith({ + breakdown_type: 'event', + breakdown: 'c', + }) + }) + it('sets a limit', async () => { logic = taxonomicBreakdownFilterLogic({ insightProps, @@ -700,6 +726,35 @@ describe('taxonomicBreakdownFilterLogic', () => { expect(updateBreakdownFilter.mock.calls[0][0]).toHaveProperty('breakdowns', undefined) }) + + it('resets the map view when adding a next breakdown', async () => { + const logic = taxonomicBreakdownFilterLogic({ + insightProps, + breakdownFilter: { + breakdowns: [{ property: '$geoip_country_code', type: 'person' }], + }, + isTrends: true, + display: ChartDisplayType.WorldMap, + updateBreakdownFilter, + updateDisplay, + }) + mockFeatureFlag(logic) + logic.mount() + const changedBreakdown = 'c' + const group: TaxonomicFilterGroup = taxonomicGroupFor(TaxonomicFilterGroupType.EventProperties, undefined) + + await expectLogic(logic, () => { + logic.actions.addBreakdown(changedBreakdown, group) + }).toFinishListeners() + + expect(updateBreakdownFilter).toHaveBeenCalledWith({ + breakdowns: [ + { property: '$geoip_country_code', type: 'person' }, + { property: 'c', type: 'event' }, + ], + }) + expect(updateDisplay).toHaveBeenCalledWith(undefined) + }) }) describe('single breakdown to multiple breakdowns', () => { diff --git a/frontend/src/scenes/insights/filters/BreakdownFilter/taxonomicBreakdownFilterLogic.ts b/frontend/src/scenes/insights/filters/BreakdownFilter/taxonomicBreakdownFilterLogic.ts index 291968d794bf9..d9ea96530c955 100644 --- a/frontend/src/scenes/insights/filters/BreakdownFilter/taxonomicBreakdownFilterLogic.ts +++ b/frontend/src/scenes/insights/filters/BreakdownFilter/taxonomicBreakdownFilterLogic.ts @@ -277,6 +277,15 @@ export const taxonomicBreakdownFilterLogic = kea([ isUsingSessionAnalysis: [ (s) => [s.series, s.breakdownFilter, s.properties], (series, breakdownFilter, properties) => { - const using_session_breakdown = breakdownFilter?.breakdown_type === 'session' + const using_session_breakdown = + breakdownFilter?.breakdown_type === 'session' || + breakdownFilter?.breakdowns?.find((breakdown) => breakdown.type === 'session') const using_session_math = series?.some((entity) => entity.math === 'unique_session') const using_session_property_math = series?.some((entity) => { // Should be made more generic is we ever add more session properties @@ -598,6 +600,11 @@ const handleQuerySourceUpdateSideEffects = ( mergedUpdate['properties'] = [] } + // Remove breakdown filter if display type is BoldNumber because it is not supported + if (kind === NodeKind.TrendsQuery && maybeChangedDisplay === ChartDisplayType.BoldNumber) { + mergedUpdate['breakdownFilter'] = null + } + // Don't allow minutes on anything other than Trends if ( currentState.kind == NodeKind.TrendsQuery && diff --git a/frontend/src/scenes/saved-insights/activityDescriptions.tsx b/frontend/src/scenes/saved-insights/activityDescriptions.tsx index 94403b56c65e2..cd7668905e5ad 100644 --- a/frontend/src/scenes/saved-insights/activityDescriptions.tsx +++ b/frontend/src/scenes/saved-insights/activityDescriptions.tsx @@ -21,7 +21,7 @@ import { urls } from 'scenes/urls' import { filtersToQueryNode } from '~/queries/nodes/InsightQuery/utils/filtersToQueryNode' import { queryNodeToFilter } from '~/queries/nodes/InsightQuery/utils/queryNodeToFilter' import { InsightQueryNode, QuerySchema, TrendsQuery } from '~/queries/schema' -import { isInsightQueryNode } from '~/queries/utils' +import { isInsightQueryNode, isValidBreakdown } from '~/queries/utils' import { FilterType, InsightModel, InsightShortId } from '~/types' const nameOrLinkToInsight = (short_id?: InsightShortId | null, name?: string | null): string | JSX.Element => { @@ -235,6 +235,7 @@ const insightActionsMapping: Record< function summarizeChanges(filtersAfter: Partial): ChangeMapping | null { const query = filtersToQueryNode(filtersAfter) + const trendsQuery = query as TrendsQuery return { description: ['changed query definition'], @@ -242,7 +243,7 @@ function summarizeChanges(filtersAfter: Partial): ChangeMapping | nu
- {(query as TrendsQuery)?.breakdownFilter?.breakdown_type && } + {isValidBreakdown(trendsQuery?.breakdownFilter) && }
), } diff --git a/posthog/hogql_queries/insights/trends/having.sql b/posthog/hogql_queries/insights/trends/having.sql new file mode 100644 index 0000000000000..ed8045610a9a7 --- /dev/null +++ b/posthog/hogql_queries/insights/trends/having.sql @@ -0,0 +1,11 @@ +SELECT + toStartOfDay(min(timestamp)) as day_start, + argMin(ifNull(nullIf(toString(person.properties.email), ''), '$$_posthog_breakdown_null_$$'), timestamp) AS breakdown_value +FROM + events AS e SAMPLE 1 +WHERE + lessOrEquals(timestamp, assumeNotNull(toDateTime('2024-07-23 23:59:59'))) and event = '$pageview' +GROUP BY + person_id +HAVING + equals(properties.$browser, 'Safari') From c7f565830faf41c29eaab61db30bb3f3864c748e Mon Sep 17 00:00:00 2001 From: PostHog Bot <69588470+posthog-bot@users.noreply.github.com> Date: Wed, 24 Jul 2024 06:18:32 -0400 Subject: [PATCH 14/33] chore(deps): Update posthog-js to 1.149.1 (#23943) --- package.json | 2 +- pnpm-lock.yaml | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 6fe9d5d70e712..df58f8681ecad 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "pmtiles": "^2.11.0", "postcss": "^8.4.31", "postcss-preset-env": "^9.3.0", - "posthog-js": "1.149.0", + "posthog-js": "1.149.1", "posthog-js-lite": "3.0.0", "prettier": "^2.8.8", "prop-types": "^15.7.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 13add50e919ca..307e5fc0965ff 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -263,8 +263,8 @@ dependencies: specifier: ^9.3.0 version: 9.3.0(postcss@8.4.31) posthog-js: - specifier: 1.149.0 - version: 1.149.0 + specifier: 1.149.1 + version: 1.149.1 posthog-js-lite: specifier: 3.0.0 version: 3.0.0 @@ -13913,7 +13913,7 @@ packages: hogan.js: 3.0.2 htm: 3.1.1 instantsearch-ui-components: 0.3.0 - preact: 10.22.1 + preact: 10.23.0 qs: 6.9.7 search-insights: 2.13.0 dev: false @@ -17721,11 +17721,11 @@ packages: resolution: {integrity: sha512-dyajjnfzZD1tht4N7p7iwf7nBnR1MjVaVu+MKr+7gBgA39bn28wizCIJZztZPtHy4PY0YwtSGgwfBCuG/hnHgA==} dev: false - /posthog-js@1.149.0: - resolution: {integrity: sha512-uIknyqxv5uDAToPaYVBzGqWwTiuga56cHs+3OeiXKZgjkm97yWh9VA5/gRD/3LEq3iszxHEOU4I5pVIaUrMNtg==} + /posthog-js@1.149.1: + resolution: {integrity: sha512-n3mkDlV0vJ1QhkDkWwUzY9RIFTPbzDzbKRyjzRE4D6H2PoH3vsrR05DNujoCr3t0hqgsaO4RLXO3VlctpdkGKQ==} dependencies: fflate: 0.4.8 - preact: 10.22.1 + preact: 10.23.0 web-vitals: 4.2.2 dev: false @@ -17733,8 +17733,8 @@ packages: resolution: {integrity: sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==} dev: false - /preact@10.22.1: - resolution: {integrity: sha512-jRYbDDgMpIb5LHq3hkI0bbl+l/TQ9UnkdQ0ww+lp+4MMOdqaUYdFc5qeyP+IV8FAd/2Em7drVPeKdQxsiWCf/A==} + /preact@10.23.0: + resolution: {integrity: sha512-Pox0jeY4q6PGkFB5AsXni+zHxxx/sAYFIFZzukW4nIpoJLRziRX0xC4WjZENlkSrDQvqVgZcaZzZ/NL8/A+H/w==} dev: false /prelude-ls@1.2.1: From 5899877b44005040ea48b3ee9a6c12cd402f2024 Mon Sep 17 00:00:00 2001 From: Ben White Date: Wed, 24 Jul 2024 13:30:12 +0200 Subject: [PATCH 15/33] fix: Filter out templates if not enabled (#23938) --- .../destinations/newDestinationsLogic.tsx | 26 ++++++++++++++++--- .../hogFunctionConfigurationLogic.tsx | 5 ++-- .../customerio/template_customerio.py | 2 +- .../cdp/templates/hubspot/template_hubspot.py | 2 +- .../templates/intercom/template_intercom.py | 2 +- .../templates/sendgrid/template_sendgrid.py | 2 +- 6 files changed, 29 insertions(+), 10 deletions(-) diff --git a/frontend/src/scenes/pipeline/destinations/newDestinationsLogic.tsx b/frontend/src/scenes/pipeline/destinations/newDestinationsLogic.tsx index a0aecfca38bab..5b702e7718654 100644 --- a/frontend/src/scenes/pipeline/destinations/newDestinationsLogic.tsx +++ b/frontend/src/scenes/pipeline/destinations/newDestinationsLogic.tsx @@ -4,7 +4,9 @@ import { actions, afterMount, connect, kea, listeners, path, reducers, selectors import { loaders } from 'kea-loaders' import { actionToUrl, combineUrl, router, urlToAction } from 'kea-router' import api from 'lib/api' +import { FEATURE_FLAGS } from 'lib/constants' import { LemonField } from 'lib/lemon-ui/LemonField' +import { featureFlagLogic } from 'lib/logic/featureFlagLogic' import { objectsEqual } from 'lib/utils' import posthog from 'posthog-js' import { urls } from 'scenes/urls' @@ -42,7 +44,7 @@ export interface Fuse extends FuseClass {} export const newDestinationsLogic = kea([ connect({ - values: [userLogic, ['user']], + values: [userLogic, ['user'], featureFlagLogic, ['featureFlags']], }), path(() => ['scenes', 'pipeline', 'destinations', 'newDestinationsLogic']), actions({ @@ -104,10 +106,26 @@ export const newDestinationsLogic = kea([ }, ], destinations: [ - (s) => [s.plugins, s.hogFunctionTemplates, s.batchExportServiceNames, router.selectors.hashParams], - (plugins, hogFunctionTemplates, batchExportServiceNames, hashParams): NewDestinationItemType[] => { + (s) => [ + s.plugins, + s.hogFunctionTemplates, + s.batchExportServiceNames, + s.featureFlags, + router.selectors.hashParams, + ], + ( + plugins, + hogFunctionTemplates, + batchExportServiceNames, + featureFlags, + hashParams + ): NewDestinationItemType[] => { + const hogTemplates = featureFlags[FEATURE_FLAGS.HOG_FUNCTIONS] + ? Object.values(hogFunctionTemplates) + : [] + return [ - ...Object.values(hogFunctionTemplates).map((hogFunction) => ({ + ...hogTemplates.map((hogFunction) => ({ icon: , name: hogFunction.name, description: hogFunction.description, diff --git a/frontend/src/scenes/pipeline/hogfunctions/hogFunctionConfigurationLogic.tsx b/frontend/src/scenes/pipeline/hogfunctions/hogFunctionConfigurationLogic.tsx index 5b66a92a708b1..089c0c648d4d4 100644 --- a/frontend/src/scenes/pipeline/hogfunctions/hogFunctionConfigurationLogic.tsx +++ b/frontend/src/scenes/pipeline/hogfunctions/hogFunctionConfigurationLogic.tsx @@ -304,6 +304,7 @@ export const hogFunctionConfigurationLogic = kea [s.configuration, s.currentTeam, s.groupTypes], (configuration, currentTeam, groupTypes): HogFunctionInvocationGlobals => { + const currentUrl = window.location.href.split('#')[0] const globals: HogFunctionInvocationGlobals = { event: { uuid: uuid(), @@ -312,7 +313,7 @@ export const hogFunctionConfigurationLogic = kea Date: Wed, 24 Jul 2024 14:49:31 +0300 Subject: [PATCH 16/33] feat: Inline plugins (plugins without running VM2) (#23443) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Ben White --- latest_migrations.manifest | 2 +- .../functional_tests/plugins.test.ts | 2 +- plugin-server/src/capabilities.ts | 3 + plugin-server/src/main/pluginsServer.ts | 8 + plugin-server/src/types.ts | 19 +- plugin-server/src/utils/db/sql.ts | 98 +++++++++- .../src/worker/plugins/loadPlugin.ts | 16 +- .../src/worker/plugins/loadPluginsFromDB.ts | 6 +- .../src/worker/plugins/loadSchedule.ts | 2 +- plugin-server/src/worker/plugins/run.ts | 16 +- plugin-server/src/worker/plugins/setup.ts | 18 +- plugin-server/src/worker/plugins/teardown.ts | 6 +- plugin-server/src/worker/vm/capabilities.ts | 6 +- .../src/worker/vm/extensions/jobs.ts | 2 +- plugin-server/src/worker/vm/inline/inline.ts | 92 ++++++++++ plugin-server/src/worker/vm/inline/noop.ts | 68 +++++++ .../src/worker/vm/inline/semver-flattener.ts | 135 ++++++++++++++ plugin-server/src/worker/vm/lazy.ts | 52 ++++-- plugin-server/tests/helpers/sqlMock.ts | 4 +- plugin-server/tests/server.test.ts | 7 +- plugin-server/tests/sql.test.ts | 8 +- plugin-server/tests/worker/plugins.test.ts | 65 +++---- .../tests/worker/plugins/inline.test.ts | 167 ++++++++++++++++++ .../tests/worker/plugins/run.test.ts | 16 +- .../tests/worker/vm.extra-lazy.test.ts | 12 +- plugin-server/tests/worker/vm.lazy.test.ts | 4 +- posthog/api/plugin.py | 5 +- .../api/test/__snapshots__/test_plugin.ambr | 6 +- posthog/api/test/test_plugin.py | 12 +- .../test/test_create_batch_export_from_app.py | 17 +- ...ation_alter_plugin_plugin_type_and_more.py | 90 ++++++++++ posthog/models/plugin.py | 22 +-- 32 files changed, 845 insertions(+), 141 deletions(-) create mode 100644 plugin-server/src/worker/vm/inline/inline.ts create mode 100644 plugin-server/src/worker/vm/inline/noop.ts create mode 100644 plugin-server/src/worker/vm/inline/semver-flattener.ts create mode 100644 plugin-server/tests/worker/plugins/inline.test.ts create mode 100644 posthog/migrations/0449_alter_plugin_organization_alter_plugin_plugin_type_and_more.py diff --git a/latest_migrations.manifest b/latest_migrations.manifest index a446e72c61968..6338f39708702 100644 --- a/latest_migrations.manifest +++ b/latest_migrations.manifest @@ -5,7 +5,7 @@ contenttypes: 0002_remove_content_type_name ee: 0016_rolemembership_organization_member otp_static: 0002_throttling otp_totp: 0002_auto_20190420_0723 -posthog: 0448_add_mysql_externaldatasource_source_type +posthog: 0449_alter_plugin_organization_alter_plugin_plugin_type_and_more sessions: 0001_initial social_django: 0010_uid_db_index two_factor: 0007_auto_20201201_1019 diff --git a/plugin-server/functional_tests/plugins.test.ts b/plugin-server/functional_tests/plugins.test.ts index db56c3f2cefdb..e9129c0ae5188 100644 --- a/plugin-server/functional_tests/plugins.test.ts +++ b/plugin-server/functional_tests/plugins.test.ts @@ -583,7 +583,7 @@ test.concurrent('plugins can use attachements', async () => { key: 'testAttachment', contents: 'test', }) - await enablePluginConfig(teamId, plugin.id) + await enablePluginConfig(teamId, pluginConfig.id) await reloadPlugins() diff --git a/plugin-server/src/capabilities.ts b/plugin-server/src/capabilities.ts index 9bfe5a642155e..11158a284b951 100644 --- a/plugin-server/src/capabilities.ts +++ b/plugin-server/src/capabilities.ts @@ -26,6 +26,7 @@ export function getPluginServerCapabilities(config: PluginsServerConfig): Plugin cdpProcessedEvents: true, cdpFunctionCallbacks: true, cdpFunctionOverflow: true, + syncInlinePlugins: true, ...sharedCapabilities, } case PluginServerMode.ingestion: @@ -89,6 +90,7 @@ export function getPluginServerCapabilities(config: PluginsServerConfig): Plugin return { pluginScheduledTasks: true, appManagementSingleton: true, + syncInlinePlugins: true, ...sharedCapabilities, } case PluginServerMode.cdp_processed_events: @@ -121,6 +123,7 @@ export function getPluginServerCapabilities(config: PluginsServerConfig): Plugin sessionRecordingBlobIngestion: true, appManagementSingleton: true, preflightSchedules: true, + syncInlinePlugins: true, ...sharedCapabilities, } } diff --git a/plugin-server/src/main/pluginsServer.ts b/plugin-server/src/main/pluginsServer.ts index d8d619be7e7b3..d12a2f4362fe1 100644 --- a/plugin-server/src/main/pluginsServer.ts +++ b/plugin-server/src/main/pluginsServer.ts @@ -28,6 +28,7 @@ import { OrganizationManager } from '../worker/ingestion/organization-manager' import { TeamManager } from '../worker/ingestion/team-manager' import Piscina, { makePiscina as defaultMakePiscina } from '../worker/piscina' import { RustyHook } from '../worker/rusty-hook' +import { syncInlinePlugins } from '../worker/vm/inline/inline' import { GraphileWorker } from './graphile-worker/graphile-worker' import { loadPluginSchedule } from './graphile-worker/schedule' import { startGraphileWorker } from './graphile-worker/worker-setup' @@ -439,6 +440,13 @@ export async function startPluginsServer( healthChecks['webhooks-ingestion'] = isWebhooksIngestionHealthy } + if (capabilities.syncInlinePlugins) { + ;[hub, closeHub] = hub ? [hub, closeHub] : await createHub(serverConfig, capabilities) + serverInstance = serverInstance ? serverInstance : { hub } + + await syncInlinePlugins(hub) + } + if (hub && serverInstance) { pubSub = new PubSub(hub, { [hub.PLUGINS_RELOAD_PUBSUB_CHANNEL]: async () => { diff --git a/plugin-server/src/types.ts b/plugin-server/src/types.ts index c4df28fa9e798..92ec13670deed 100644 --- a/plugin-server/src/types.ts +++ b/plugin-server/src/types.ts @@ -33,7 +33,7 @@ import { TeamManager } from './worker/ingestion/team-manager' import { RustyHook } from './worker/rusty-hook' import { PluginsApiKeyManager } from './worker/vm/extensions/helpers/api-key-manager' import { RootAccessManager } from './worker/vm/extensions/helpers/root-acess-manager' -import { LazyPluginVM } from './worker/vm/lazy' +import { PluginInstance } from './worker/vm/lazy' export { Element } from '@posthog/plugin-scaffold' // Re-export Element from scaffolding, for backwards compat. @@ -314,7 +314,7 @@ export interface Hub extends PluginsServerConfig { // diagnostics lastActivity: number lastActivityType: string - statelessVms: StatelessVmMap + statelessVms: StatelessInstanceMap conversionBufferEnabledTeams: Set // functions enqueuePluginJob: (job: EnqueuedPluginJob) => Promise @@ -344,6 +344,7 @@ export interface PluginServerCapabilities { preflightSchedules?: boolean // Used for instance health checks on hobby deploy, not useful on cloud http?: boolean mmdb?: boolean + syncInlinePlugins?: boolean } export type EnqueuedJob = EnqueuedPluginJob | GraphileWorkerCronScheduleJob @@ -394,9 +395,9 @@ export interface JobSpec { export interface Plugin { id: number - organization_id: string + organization_id?: string name: string - plugin_type: 'local' | 'respository' | 'custom' | 'source' + plugin_type: 'local' | 'respository' | 'custom' | 'source' | 'inline' description?: string is_global: boolean is_preinstalled?: boolean @@ -443,7 +444,7 @@ export interface PluginConfig { order: number config: Record attachments?: Record - vm?: LazyPluginVM | null + instance?: PluginInstance | null created_at: string updated_at?: string // We're migrating to a new functions that take PostHogEvent instead of PluginEvent @@ -528,7 +529,7 @@ export interface PluginTask { __ignoreForAppMetrics?: boolean } -export type VMMethods = { +export type PluginMethods = { setupPlugin?: () => Promise teardownPlugin?: () => Promise getSettings?: () => PluginSettings @@ -538,7 +539,7 @@ export type VMMethods = { } // Helper when ensuring that a required method is implemented -export type VMMethodsConcrete = Required +export type PluginMethodsConcrete = Required export enum AlertLevel { P0 = 0, @@ -565,7 +566,7 @@ export interface Alert { } export interface PluginConfigVMResponse { vm: VM - methods: VMMethods + methods: PluginMethods tasks: Record> vmResponseVariable: string usedImports: Set @@ -1150,7 +1151,7 @@ export enum PropertyUpdateOperation { SetOnce = 'set_once', } -export type StatelessVmMap = Record +export type StatelessInstanceMap = Record export enum OrganizationPluginsAccessLevel { NONE = 0, diff --git a/plugin-server/src/utils/db/sql.ts b/plugin-server/src/utils/db/sql.ts index 6aab87a5f9ceb..37f2bfeff4384 100644 --- a/plugin-server/src/utils/db/sql.ts +++ b/plugin-server/src/utils/db/sql.ts @@ -1,4 +1,5 @@ import { Hub, Plugin, PluginAttachmentDB, PluginCapabilities, PluginConfig, PluginConfigId } from '../../types' +import { InlinePluginDescription } from '../../worker/vm/inline/inline' import { PostgresUse } from './postgres' function pluginConfigsInForceQuery(specificField?: keyof PluginConfig): string { @@ -58,6 +59,49 @@ const PLUGIN_SELECT = `SELECT LEFT JOIN posthog_pluginsourcefile psf__site_ts ON (psf__site_ts.plugin_id = posthog_plugin.id AND psf__site_ts.filename = 'site.ts')` +const PLUGIN_UPSERT_RETURNING = `INSERT INTO posthog_plugin + ( + name, + url, + tag, + from_json, + from_web, + error, + plugin_type, + organization_id, + is_global, + capabilities, + public_jobs, + is_stateless, + log_level, + description, + is_preinstalled, + config_schema, + updated_at, + created_at + ) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, NOW(), NOW()) + ON CONFLICT (url) + DO UPDATE SET + name = $1, + tag = $3, + from_json = $4, + from_web = $5, + error = $6, + plugin_type = $7, + organization_id = $8, + is_global = $9, + capabilities = $10, + public_jobs = $11, + is_stateless = $12, + log_level = $13, + description = $14, + is_preinstalled = $15, + config_schema = $16, + updated_at = NOW() + RETURNING * +` + export async function getPlugin(hub: Hub, pluginId: number): Promise { const result = await hub.db.postgres.query( PostgresUse.COMMON_READ, @@ -68,14 +112,14 @@ export async function getPlugin(hub: Hub, pluginId: number): Promise { +export async function getActivePluginRows(hub: Hub): Promise { const { rows }: { rows: Plugin[] } = await hub.db.postgres.query( PostgresUse.COMMON_READ, `${PLUGIN_SELECT} WHERE posthog_plugin.id IN (${pluginConfigsInForceQuery('plugin_id')} GROUP BY posthog_pluginconfig.plugin_id)`, undefined, - 'getPluginRows' + 'getActivePluginRows' ) return rows @@ -124,3 +168,53 @@ export async function disablePlugin(hub: Hub, pluginConfigId: PluginConfigId): P ) await hub.db.redisPublish(hub.PLUGINS_RELOAD_PUBSUB_CHANNEL, 'reload!') } + +// Given an inline plugin description, upsert it into the known plugins table, returning the full +// Plugin object. Matching is done based on plugin url, not id, since that varies by region. +export async function upsertInlinePlugin(hub: Hub, inline: InlinePluginDescription): Promise { + const fullPlugin: Plugin = { + id: 0, + name: inline.name, + url: inline.url, + tag: inline.tag, + from_json: false, + from_web: false, + error: undefined, + plugin_type: 'inline', + organization_id: undefined, + is_global: inline.is_global, + capabilities: inline.capabilities, + public_jobs: undefined, + is_stateless: inline.is_stateless, + log_level: inline.log_level, + description: inline.description, + is_preinstalled: inline.is_preinstalled, + config_schema: inline.config_schema, + } + + const { rows }: { rows: Plugin[] } = await hub.db.postgres.query( + PostgresUse.COMMON_WRITE, + `${PLUGIN_UPSERT_RETURNING}`, + [ + fullPlugin.name, + fullPlugin.url, + fullPlugin.tag, + fullPlugin.from_json, + fullPlugin.from_web, + fullPlugin.error, + fullPlugin.plugin_type, + fullPlugin.organization_id, + fullPlugin.is_global, + fullPlugin.capabilities, + fullPlugin.public_jobs, + fullPlugin.is_stateless, + fullPlugin.log_level, + fullPlugin.description, + fullPlugin.is_preinstalled, + JSON.stringify(fullPlugin.config_schema), + ], + 'upsertInlinePlugin' + ) + + return rows[0] +} diff --git a/plugin-server/src/worker/plugins/loadPlugin.ts b/plugin-server/src/worker/plugins/loadPlugin.ts index 26a7d45f97e62..a264961ad8c6c 100644 --- a/plugin-server/src/worker/plugins/loadPlugin.ts +++ b/plugin-server/src/worker/plugins/loadPlugin.ts @@ -18,10 +18,16 @@ export async function loadPlugin(hub: Hub, pluginConfig: PluginConfig): Promise< const isLocalPlugin = plugin?.plugin_type === 'local' if (!plugin) { - pluginConfig.vm?.failInitialization!() + pluginConfig.instance?.failInitialization!() return false } + // Inline plugins don't need "loading", and have no source files. + if (plugin.plugin_type === 'inline') { + await pluginConfig.instance?.initialize!('', pluginDigest(plugin)) + return true + } + try { // load config json const configJson = isLocalPlugin @@ -32,7 +38,7 @@ export async function loadPlugin(hub: Hub, pluginConfig: PluginConfig): Promise< try { config = JSON.parse(configJson) } catch (e) { - pluginConfig.vm?.failInitialization!() + pluginConfig.instance?.failInitialization!() await processError(hub, pluginConfig, `Could not load "plugin.json" for ${pluginDigest(plugin)}`) return false } @@ -46,11 +52,11 @@ export async function loadPlugin(hub: Hub, pluginConfig: PluginConfig): Promise< readFileIfExists(hub.BASE_DIR, plugin, 'index.ts') : plugin.source__index_ts if (pluginSource) { - void pluginConfig.vm?.initialize!(pluginSource, pluginDigest(plugin)) + void pluginConfig.instance?.initialize!(pluginSource, pluginDigest(plugin)) return true } else { // always call this if no backend app present, will signal that the VM is done - pluginConfig.vm?.failInitialization!() + pluginConfig.instance?.failInitialization!() // if there is a frontend or site app, don't save an error if no backend app const hasFrontend = isLocalPlugin @@ -72,7 +78,7 @@ export async function loadPlugin(hub: Hub, pluginConfig: PluginConfig): Promise< } } } catch (error) { - pluginConfig.vm?.failInitialization!() + pluginConfig.instance?.failInitialization!() await processError(hub, pluginConfig, error) } return false diff --git a/plugin-server/src/worker/plugins/loadPluginsFromDB.ts b/plugin-server/src/worker/plugins/loadPluginsFromDB.ts index 81282e0646794..b36fb0e251141 100644 --- a/plugin-server/src/worker/plugins/loadPluginsFromDB.ts +++ b/plugin-server/src/worker/plugins/loadPluginsFromDB.ts @@ -2,7 +2,7 @@ import { PluginAttachment } from '@posthog/plugin-scaffold' import { Summary } from 'prom-client' import { Hub, Plugin, PluginConfig, PluginConfigId, PluginId, PluginMethod, TeamId } from '../../types' -import { getPluginAttachmentRows, getPluginConfigRows, getPluginRows } from '../../utils/db/sql' +import { getActivePluginRows, getPluginAttachmentRows, getPluginConfigRows } from '../../utils/db/sql' const loadPluginsMsSummary = new Summary({ name: 'load_plugins_ms', @@ -29,7 +29,7 @@ export async function loadPluginsFromDB( hub: Hub ): Promise> { const startTimer = new Date() - const pluginRows = await getPluginRows(hub) + const pluginRows = await getActivePluginRows(hub) const plugins = new Map() for (const row of pluginRows) { @@ -78,7 +78,7 @@ export async function loadPluginsFromDB( ...row, plugin: plugin, attachments: attachmentsPerConfig.get(row.id) || {}, - vm: null, + instance: null, method, } pluginConfigs.set(row.id, pluginConfig) diff --git a/plugin-server/src/worker/plugins/loadSchedule.ts b/plugin-server/src/worker/plugins/loadSchedule.ts index 6c5c4684d7390..ff54dae570aa1 100644 --- a/plugin-server/src/worker/plugins/loadSchedule.ts +++ b/plugin-server/src/worker/plugins/loadSchedule.ts @@ -18,7 +18,7 @@ export async function loadSchedule(server: Hub): Promise { let count = 0 for (const [id, pluginConfig] of server.pluginConfigs) { - const tasks = (await pluginConfig.vm?.getScheduledTasks()) ?? {} + const tasks = (await pluginConfig.instance?.getScheduledTasks()) ?? {} for (const [taskName, task] of Object.entries(tasks)) { if (task && taskName in pluginSchedule) { pluginSchedule[taskName].push(id) diff --git a/plugin-server/src/worker/plugins/run.ts b/plugin-server/src/worker/plugins/run.ts index 7b24bc10a4a0e..4fb0635994aaf 100644 --- a/plugin-server/src/worker/plugins/run.ts +++ b/plugin-server/src/worker/plugins/run.ts @@ -1,6 +1,6 @@ import { PluginEvent, Webhook } from '@posthog/plugin-scaffold' -import { Hub, PluginConfig, PluginTaskType, PostIngestionEvent, VMMethodsConcrete } from '../../types' +import { Hub, PluginConfig, PluginMethodsConcrete, PluginTaskType, PostIngestionEvent } from '../../types' import { processError } from '../../utils/db/error' import { convertToOnEventPayload, @@ -19,7 +19,7 @@ async function runSingleTeamPluginOnEvent( hub: Hub, event: PostIngestionEvent, pluginConfig: PluginConfig, - onEvent: VMMethodsConcrete['onEvent'] + onEvent: PluginMethodsConcrete['onEvent'] ): Promise { const timeout = setTimeout(() => { status.warn('⌛', `Still running single onEvent plugin for team ${event.teamId} for plugin ${pluginConfig.id}`) @@ -85,7 +85,7 @@ async function runSingleTeamPluginComposeWebhook( hub: Hub, postIngestionEvent: PostIngestionEvent, pluginConfig: PluginConfig, - composeWebhook: VMMethodsConcrete['composeWebhook'] + composeWebhook: PluginMethodsConcrete['composeWebhook'] ): Promise { // 1. Calls `composeWebhook` for the plugin, send `composeWebhook` appmetric success/fail if applicable. // 2. Send via Rusty-Hook if enabled. @@ -329,7 +329,7 @@ export async function runPluginTask( let shouldQueueAppMetric = false try { - const task = await pluginConfig?.vm?.getTask(taskName, taskType) + const task = await pluginConfig?.instance?.getTask(taskName, taskType) if (!task) { throw new Error( `Task "${taskName}" not found for plugin "${pluginConfig?.plugin?.name}" with config id ${pluginConfigId}` @@ -381,23 +381,23 @@ export async function runPluginTask( return response } -async function getPluginMethodsForTeam( +async function getPluginMethodsForTeam( hub: Hub, teamId: number, method: M -): Promise<[PluginConfig, VMMethodsConcrete[M]][]> { +): Promise<[PluginConfig, PluginMethodsConcrete[M]][]> { const pluginConfigs = hub.pluginConfigsPerTeam.get(teamId) || [] if (pluginConfigs.length === 0) { return [] } const methodsObtained = await Promise.all( - pluginConfigs.map(async (pluginConfig) => [pluginConfig, await pluginConfig?.vm?.getVmMethod(method)]) + pluginConfigs.map(async (pluginConfig) => [pluginConfig, await pluginConfig?.instance?.getPluginMethod(method)]) ) const methodsObtainedFiltered = methodsObtained.filter(([_, method]) => !!method) as [ PluginConfig, - VMMethodsConcrete[M] + PluginMethodsConcrete[M] ][] return methodsObtainedFiltered diff --git a/plugin-server/src/worker/plugins/setup.ts b/plugin-server/src/worker/plugins/setup.ts index b2e4e0bdd0f0c..161309f76877a 100644 --- a/plugin-server/src/worker/plugins/setup.ts +++ b/plugin-server/src/worker/plugins/setup.ts @@ -1,8 +1,8 @@ import { Gauge, Summary } from 'prom-client' -import { Hub, StatelessVmMap } from '../../types' +import { Hub, StatelessInstanceMap } from '../../types' import { status } from '../../utils/status' -import { LazyPluginVM } from '../vm/lazy' +import { constructPluginInstance } from '../vm/lazy' import { loadPlugin } from './loadPlugin' import { loadPluginsFromDB } from './loadPluginsFromDB' import { loadSchedule } from './loadSchedule' @@ -24,7 +24,7 @@ export async function setupPlugins(hub: Hub): Promise { status.info('🔁', `Loading plugin configs...`) const { plugins, pluginConfigs, pluginConfigsPerTeam } = await loadPluginsFromDB(hub) const pluginVMLoadPromises: Array> = [] - const statelessVms = {} as StatelessVmMap + const statelessInstances = {} as StatelessInstanceMap const timer = new Date() @@ -37,11 +37,11 @@ export async function setupPlugins(hub: Hub): Promise { const pluginChanged = plugin?.updated_at !== prevPlugin?.updated_at if (!pluginConfigChanged && !pluginChanged) { - pluginConfig.vm = prevConfig.vm - } else if (plugin?.is_stateless && statelessVms[plugin.id]) { - pluginConfig.vm = statelessVms[plugin.id] + pluginConfig.instance = prevConfig.instance + } else if (plugin?.is_stateless && statelessInstances[plugin.id]) { + pluginConfig.instance = statelessInstances[plugin.id] } else { - pluginConfig.vm = new LazyPluginVM(hub, pluginConfig) + pluginConfig.instance = constructPluginInstance(hub, pluginConfig) if (hub.PLUGIN_LOAD_SEQUENTIALLY) { await loadPlugin(hub, pluginConfig) } else { @@ -52,7 +52,7 @@ export async function setupPlugins(hub: Hub): Promise { } if (plugin?.is_stateless) { - statelessVms[plugin.id] = pluginConfig.vm + statelessInstances[plugin.id] = pluginConfig.instance } } } @@ -67,7 +67,7 @@ export async function setupPlugins(hub: Hub): Promise { importUsedGauge.reset() const seenPlugins = new Set() for (const pluginConfig of pluginConfigs.values()) { - const usedImports = pluginConfig.vm?.usedImports + const usedImports = pluginConfig.instance?.usedImports if (usedImports && !seenPlugins.has(pluginConfig.plugin_id)) { seenPlugins.add(pluginConfig.plugin_id) for (const importName of usedImports) { diff --git a/plugin-server/src/worker/plugins/teardown.ts b/plugin-server/src/worker/plugins/teardown.ts index 8d465a7644369..4fe1a4f52c19e 100644 --- a/plugin-server/src/worker/plugins/teardown.ts +++ b/plugin-server/src/worker/plugins/teardown.ts @@ -6,9 +6,9 @@ export async function teardownPlugins(server: Hub, pluginConfig?: PluginConfig): const teardownPromises: Promise[] = [] for (const pluginConfig of pluginConfigs) { - if (pluginConfig.vm) { - pluginConfig.vm.clearRetryTimeoutIfExists() - const teardownPlugin = await pluginConfig.vm.getTeardownPlugin() + if (pluginConfig.instance) { + pluginConfig.instance.clearRetryTimeoutIfExists() + const teardownPlugin = await pluginConfig.instance.getTeardown() if (teardownPlugin) { teardownPromises.push( (async () => { diff --git a/plugin-server/src/worker/vm/capabilities.ts b/plugin-server/src/worker/vm/capabilities.ts index 5c4fa2e90386e..daa12444eb9be 100644 --- a/plugin-server/src/worker/vm/capabilities.ts +++ b/plugin-server/src/worker/vm/capabilities.ts @@ -1,17 +1,17 @@ -import { PluginCapabilities, PluginTask, PluginTaskType, VMMethods } from '../../types' +import { PluginCapabilities, PluginMethods, PluginTask, PluginTaskType } from '../../types' import { PluginServerCapabilities } from './../../types' const PROCESS_EVENT_CAPABILITIES = new Set(['ingestion', 'ingestionOverflow', 'ingestionHistorical']) export function getVMPluginCapabilities( - methods: VMMethods, + methods: PluginMethods, tasks: Record> ): PluginCapabilities { const capabilities: Required = { scheduled_tasks: [], jobs: [], methods: [] } if (methods) { for (const [key, value] of Object.entries(methods)) { - if (value as VMMethods[keyof VMMethods] | undefined) { + if (value as PluginMethods[keyof PluginMethods] | undefined) { capabilities.methods.push(key) } } diff --git a/plugin-server/src/worker/vm/extensions/jobs.ts b/plugin-server/src/worker/vm/extensions/jobs.ts index cdeaa9c1ff45b..3d9ffac9a35b9 100644 --- a/plugin-server/src/worker/vm/extensions/jobs.ts +++ b/plugin-server/src/worker/vm/extensions/jobs.ts @@ -64,7 +64,7 @@ export function createJobs(server: Hub, pluginConfig: PluginConfig): Jobs { pluginJobEnqueueCounter.labels(String(pluginConfig.plugin?.id)).inc() await server.enqueuePluginJob(job) } catch (e) { - await pluginConfig.vm?.createLogEntry( + await pluginConfig.instance?.createLogEntry( `Failed to enqueue job ${type} with error: ${e.message}`, PluginLogEntryType.Error ) diff --git a/plugin-server/src/worker/vm/inline/inline.ts b/plugin-server/src/worker/vm/inline/inline.ts new file mode 100644 index 0000000000000..42a90248c5c4b --- /dev/null +++ b/plugin-server/src/worker/vm/inline/inline.ts @@ -0,0 +1,92 @@ +import { PluginConfigSchema } from '@posthog/plugin-scaffold' + +import { Hub, PluginCapabilities, PluginConfig, PluginLogLevel } from '../../../types' +import { upsertInlinePlugin } from '../../../utils/db/sql' +import { status } from '../../../utils/status' +import { PluginInstance } from '../lazy' +import { NoopInlinePlugin } from './noop' +import { SEMVER_FLATTENER_CONFIG_SCHEMA, SemverFlattener } from './semver-flattener' + +export function constructInlinePluginInstance(hub: Hub, pluginConfig: PluginConfig): PluginInstance { + const url = pluginConfig.plugin?.url + + if (!INLINE_PLUGIN_URLS.includes(url as InlinePluginId)) { + throw new Error(`Invalid inline plugin URL: ${url}`) + } + const plugin = INLINE_PLUGIN_MAP[url as InlinePluginId] + + return plugin.constructor(hub, pluginConfig) +} + +export interface RegisteredInlinePlugin { + constructor: (hub: Hub, config: PluginConfig) => PluginInstance + description: Readonly +} + +export const INLINE_PLUGIN_URLS = ['inline://noop', 'inline://semver-flattener'] as const +type InlinePluginId = (typeof INLINE_PLUGIN_URLS)[number] + +// TODO - add all inline plugins here +export const INLINE_PLUGIN_MAP: Record = { + 'inline://noop': { + constructor: (hub: Hub, config: PluginConfig) => new NoopInlinePlugin(hub, config), + description: { + name: 'Noop Plugin', + description: 'A plugin that does nothing', + is_global: false, + is_preinstalled: false, + url: 'inline://noop', + config_schema: {}, + tag: 'noop', + capabilities: {}, + is_stateless: true, + log_level: PluginLogLevel.Info, + }, + }, + + 'inline://semver-flattener': { + constructor: (hub: Hub, config: PluginConfig) => new SemverFlattener(hub, config), + description: { + name: 'posthog-semver-flattener', + description: + 'Processes specified properties to flatten sematic versions. Assumes any property contains a string which matches [the SemVer specification](https://semver.org/#backusnaur-form-grammar-for-valid-semver-versions)', + is_global: false, + is_preinstalled: false, + url: 'inline://semver-flattener', + config_schema: SEMVER_FLATTENER_CONFIG_SCHEMA, + tag: 'semver-flattener', + capabilities: { + jobs: [], + scheduled_tasks: [], + methods: ['processEvent'], + }, + is_stateless: false, // TODO - this plugin /could/ be stateless, but right now we cache config parsing, which is stateful + log_level: PluginLogLevel.Info, + }, + }, +} + +// Inline plugins are uniquely identified by their /url/, not their ID, and do +// not have most of the standard plugin properties. This reduced interface is +// the "canonical" description of an inline plugin, but can be mapped to a region +// specific Plugin object by url. +export interface InlinePluginDescription { + name: string + description: string + is_global: boolean + is_preinstalled: boolean + url: string + config_schema: Record | PluginConfigSchema[] + tag: string + capabilities: PluginCapabilities + is_stateless: boolean + log_level: PluginLogLevel +} + +export async function syncInlinePlugins(hub: Hub): Promise { + status.info('⚡', 'Syncing inline plugins') + for (const url of INLINE_PLUGIN_URLS) { + const plugin = INLINE_PLUGIN_MAP[url] + await upsertInlinePlugin(hub, plugin.description) + } +} diff --git a/plugin-server/src/worker/vm/inline/noop.ts b/plugin-server/src/worker/vm/inline/noop.ts new file mode 100644 index 0000000000000..aaa80d8b1007f --- /dev/null +++ b/plugin-server/src/worker/vm/inline/noop.ts @@ -0,0 +1,68 @@ +import { PluginEvent } from '@posthog/plugin-scaffold' + +import { + Hub, + PluginConfig, + PluginLogEntrySource, + PluginLogEntryType, + PluginMethods, + PluginTask, + PluginTaskType, +} from '../../../types' +import { PluginInstance } from '../lazy' + +export class NoopInlinePlugin implements PluginInstance { + // The noop plugin has no initialization behavior, or imports + initialize = async () => {} + failInitialization = () => {} + usedImports: Set | undefined + methods: PluginMethods + + hub: Hub + config: PluginConfig + + constructor(hub: Hub, pluginConfig: PluginConfig) { + this.hub = hub + this.config = pluginConfig + this.usedImports = new Set() + + this.methods = { + processEvent: (event: PluginEvent) => { + return Promise.resolve(event) + }, + } + } + + public getTeardown(): Promise { + return Promise.resolve(null) + } + + public getTask(_name: string, _type: PluginTaskType): Promise { + return Promise.resolve(null) + } + + public getScheduledTasks(): Promise> { + return Promise.resolve({}) + } + + public getPluginMethod(method_name: T): Promise { + return Promise.resolve(this.methods[method_name] as PluginMethods[T]) + } + + public clearRetryTimeoutIfExists = () => {} + + public setupPluginIfNeeded(): Promise { + return Promise.resolve(true) + } + + public async createLogEntry(message: string, logType = PluginLogEntryType.Info): Promise { + // TODO - this will be identical across all plugins, so figure out a better place to put it. + await this.hub.db.queuePluginLogEntry({ + message, + pluginConfig: this.config, + source: PluginLogEntrySource.System, + type: logType, + instanceId: this.hub.instanceId, + }) + } +} diff --git a/plugin-server/src/worker/vm/inline/semver-flattener.ts b/plugin-server/src/worker/vm/inline/semver-flattener.ts new file mode 100644 index 0000000000000..50290c6f5066e --- /dev/null +++ b/plugin-server/src/worker/vm/inline/semver-flattener.ts @@ -0,0 +1,135 @@ +import { PluginEvent } from '@posthog/plugin-scaffold' + +import { + Hub, + PluginConfig, + PluginLogEntrySource, + PluginLogEntryType, + PluginMethods, + PluginTask, + PluginTaskType, +} from '../../../types' +import { PluginInstance } from '../lazy' + +export class SemverFlattener implements PluginInstance { + initialize = async () => {} + failInitialization = async () => {} + clearRetryTimeoutIfExists = () => {} + usedImports: Set | undefined + methods: PluginMethods + + hub: Hub + config: PluginConfig + targetProps: string[] + + constructor(hub: Hub, pluginConfig: PluginConfig) { + this.hub = hub + this.config = pluginConfig + this.usedImports = new Set() + + this.targetProps = (this.config.config.properties as string)?.split(',').map((s) => s.trim()) + if (!this.targetProps) { + this.targetProps = [] + } + + this.methods = { + processEvent: (event: PluginEvent) => { + return Promise.resolve(this.flattenSemver(event)) + }, + } + } + + public getTeardown(): Promise { + return Promise.resolve(null) + } + + public getTask(_name: string, _type: PluginTaskType): Promise { + return Promise.resolve(null) + } + + public getScheduledTasks(): Promise> { + return Promise.resolve({}) + } + + public getPluginMethod(method_name: T): Promise { + return Promise.resolve(this.methods[method_name] as PluginMethods[T]) + } + + public setupPluginIfNeeded(): Promise { + return Promise.resolve(true) + } + + public async createLogEntry(message: string, logType = PluginLogEntryType.Info): Promise { + // TODO - this will be identical across all plugins, so figure out a better place to put it. + await this.hub.db.queuePluginLogEntry({ + message, + pluginConfig: this.config, + source: PluginLogEntrySource.System, + type: logType, + instanceId: this.hub.instanceId, + }) + } + + flattenSemver(event: PluginEvent): PluginEvent { + if (!event.properties) { + return event + } + + for (const target of this.targetProps) { + const candidate = event.properties[target] + + if (candidate) { + const { major, minor, patch, preRelease, build } = splitVersion(candidate) + event.properties[`${target}__major`] = major + event.properties[`${target}__minor`] = minor + if (patch !== undefined) { + event.properties[`${target}__patch`] = patch + } + if (preRelease !== undefined) { + event.properties[`${target}__preRelease`] = preRelease + } + if (build !== undefined) { + event.properties[`${target}__build`] = build + } + } + } + + return event + } +} + +export interface VersionParts { + major: number + minor: number + patch?: number + preRelease?: string + build?: string +} + +const splitVersion = (candidate: string): VersionParts => { + const [head, build] = candidate.split('+') + const [version, ...preRelease] = head.split('-') + const [major, minor, patch] = version.split('.') + return { + major: Number(major), + minor: Number(minor), + patch: patch ? Number(patch) : undefined, + preRelease: preRelease.join('-') || undefined, + build, + } +} + +export const SEMVER_FLATTENER_CONFIG_SCHEMA = [ + { + markdown: + 'Processes specified properties to flatten sematic versions. Assumes any property contains a string which matches [the SemVer specification](https://semver.org/#backusnaur-form-grammar-for-valid-semver-versions)', + }, + { + key: 'properties', + name: 'comma separated properties to explode version number from', + type: 'string' as const, + hint: 'my_version_number,app_version', + default: '', + required: true, + }, +] diff --git a/plugin-server/src/worker/vm/lazy.ts b/plugin-server/src/worker/vm/lazy.ts index 9c1964a792269..c873c4a437c7e 100644 --- a/plugin-server/src/worker/vm/lazy.ts +++ b/plugin-server/src/worker/vm/lazy.ts @@ -9,9 +9,9 @@ import { PluginConfigVMResponse, PluginLogEntrySource, PluginLogEntryType, + PluginMethods, PluginTask, PluginTaskType, - VMMethods, } from '../../types' import { processError } from '../../utils/db/error' import { disablePlugin, getPlugin, setPluginCapabilities } from '../../utils/db/sql' @@ -20,6 +20,7 @@ import { getNextRetryMs } from '../../utils/retries' import { status } from '../../utils/status' import { pluginDigest } from '../../utils/utils' import { getVMPluginCapabilities, shouldSetupPluginInServer } from '../vm/capabilities' +import { constructInlinePluginInstance } from './inline/inline' import { createPluginConfigVM } from './vm' export const VM_INIT_MAX_RETRIES = 5 @@ -44,7 +45,33 @@ const pluginDisabledBySystemCounter = new Counter({ labelNames: ['plugin_id'], }) -export class LazyPluginVM { +export function constructPluginInstance(hub: Hub, pluginConfig: PluginConfig): PluginInstance { + if (pluginConfig.plugin?.plugin_type == 'inline') { + return constructInlinePluginInstance(hub, pluginConfig) + } + return new LazyPluginVM(hub, pluginConfig) +} + +export interface PluginInstance { + // These are "optional", but if they're not set, loadPlugin will fail + initialize?: (indexJs: string, logInfo: string) => Promise + failInitialization?: () => void + + getTeardown: () => Promise + getTask: (name: string, type: PluginTaskType) => Promise + getScheduledTasks: () => Promise> + getPluginMethod: (method_name: T) => Promise + clearRetryTimeoutIfExists: () => void + setupPluginIfNeeded: () => Promise + + createLogEntry: (message: string, logType?: PluginLogEntryType) => Promise + + // This is only used for metrics, and can probably be dropped as we start to care less about + // what imports are used by plugins (or as inlining more plugins makes imports irrelevant) + usedImports: Set | undefined +} + +export class LazyPluginVM implements PluginInstance { initialize?: (indexJs: string, logInfo: string) => Promise failInitialization?: () => void resolveInternalVm!: Promise @@ -68,15 +95,7 @@ export class LazyPluginVM { this.initVm() } - public async getOnEvent(): Promise { - return await this.getVmMethod('onEvent') - } - - public async getProcessEvent(): Promise { - return await this.getVmMethod('processEvent') - } - - public async getTeardownPlugin(): Promise { + public async getTeardown(): Promise { // if we never ran `setupPlugin`, there's no reason to run `teardownPlugin` - it's essentially "tore down" already if (!this.ready) { return null @@ -112,15 +131,15 @@ export class LazyPluginVM { return tasks || {} } - public async getVmMethod(method: T): Promise { - let vmMethod = (await this.resolveInternalVm)?.methods[method] || null - if (!this.ready && vmMethod) { + public async getPluginMethod(method_name: T): Promise { + let method = (await this.resolveInternalVm)?.methods[method_name] || null + if (!this.ready && method) { const pluginReady = await this.setupPluginIfNeeded() if (!pluginReady) { - vmMethod = null + method = null } } - return vmMethod + return method } public clearRetryTimeoutIfExists(): void { @@ -207,6 +226,7 @@ export class LazyPluginVM { return true } + // TODO - this is only called in tests, try to remove at some point. public async _setupPlugin(vm?: VM): Promise { const logInfo = this.pluginConfig.plugin ? pluginDigest(this.pluginConfig.plugin) diff --git a/plugin-server/tests/helpers/sqlMock.ts b/plugin-server/tests/helpers/sqlMock.ts index 378c6bf6273e9..a323d0fd18cb7 100644 --- a/plugin-server/tests/helpers/sqlMock.ts +++ b/plugin-server/tests/helpers/sqlMock.ts @@ -2,7 +2,9 @@ import * as s from '../../src/utils/db/sql' // mock functions that get data from postgres and give them the right types type UnPromisify = F extends (...args: infer A) => Promise ? (...args: A) => T : never -export const getPluginRows = s.getPluginRows as unknown as jest.MockedFunction> +export const getPluginRows = s.getActivePluginRows as unknown as jest.MockedFunction< + UnPromisify +> export const getPluginAttachmentRows = s.getPluginAttachmentRows as unknown as jest.MockedFunction< UnPromisify > diff --git a/plugin-server/tests/server.test.ts b/plugin-server/tests/server.test.ts index 3f497be03703c..52fe0b989bf40 100644 --- a/plugin-server/tests/server.test.ts +++ b/plugin-server/tests/server.test.ts @@ -58,6 +58,7 @@ describe('server', () => { ingestionHistorical: true, appManagementSingleton: true, preflightSchedules: true, + syncInlinePlugins: true, } ) }) @@ -73,6 +74,7 @@ describe('server', () => { { http: true, eventsIngestionPipelines: true, + syncInlinePlugins: true, } ) }) @@ -95,6 +97,7 @@ describe('server', () => { cdpProcessedEvents: true, cdpFunctionCallbacks: true, cdpFunctionOverflow: true, + syncInlinePlugins: true, } ) }) @@ -112,6 +115,7 @@ describe('server', () => { http: true, sessionRecordingBlobIngestion: true, sessionRecordingBlobOverflowIngestion: true, + syncInlinePlugins: true, } ) }) @@ -126,6 +130,7 @@ describe('server', () => { pluginScheduledTasks: true, processAsyncWebhooksHandlers: true, preflightSchedules: true, + syncInlinePlugins: true, } ) @@ -141,7 +146,7 @@ describe('server', () => { test('starts graphile for scheduled tasks capability', async () => { pluginsServer = await createPluginServer( {}, - { ingestion: true, pluginScheduledTasks: true, processPluginJobs: true } + { ingestion: true, pluginScheduledTasks: true, processPluginJobs: true, syncInlinePlugins: true } ) expect(startGraphileWorker).toHaveBeenCalled() diff --git a/plugin-server/tests/sql.test.ts b/plugin-server/tests/sql.test.ts index 24c294a6a97c2..d23b133b4c5bf 100644 --- a/plugin-server/tests/sql.test.ts +++ b/plugin-server/tests/sql.test.ts @@ -1,7 +1,7 @@ import { Hub } from '../src/types' import { createHub } from '../src/utils/db/hub' import { PostgresUse } from '../src/utils/db/postgres' -import { disablePlugin, getPluginAttachmentRows, getPluginConfigRows, getPluginRows } from '../src/utils/db/sql' +import { disablePlugin, getActivePluginRows, getPluginAttachmentRows, getPluginConfigRows } from '../src/utils/db/sql' import { commonOrganizationId } from './helpers/plugins' import { resetTestDatabase } from './helpers/sql' @@ -66,7 +66,7 @@ describe('sql', () => { expect(rows1).toEqual([expectedRow]) }) - test('getPluginRows', async () => { + test('getActivePluginRows', async () => { const rowsExpected = [ { error: null, @@ -92,7 +92,7 @@ describe('sql', () => { }, ] - const rows1 = await getPluginRows(hub) + const rows1 = await getActivePluginRows(hub) expect(rows1).toEqual(rowsExpected) await hub.db.postgres.query( PostgresUse.COMMON_WRITE, @@ -100,7 +100,7 @@ describe('sql', () => { undefined, 'testTag' ) - const rows2 = await getPluginRows(hub) + const rows2 = await getActivePluginRows(hub) expect(rows2).toEqual(rowsExpected) }) diff --git a/plugin-server/tests/worker/plugins.test.ts b/plugin-server/tests/worker/plugins.test.ts index e43dd0a628ec0..286f289e46cd4 100644 --- a/plugin-server/tests/worker/plugins.test.ts +++ b/plugin-server/tests/worker/plugins.test.ts @@ -8,6 +8,7 @@ import { loadPlugin } from '../../src/worker/plugins/loadPlugin' import { loadSchedule } from '../../src/worker/plugins/loadSchedule' import { runProcessEvent } from '../../src/worker/plugins/run' import { setupPlugins } from '../../src/worker/plugins/setup' +import { LazyPluginVM } from '../../src/worker/vm/lazy' import { commonOrganizationId, mockPluginSourceCode, @@ -64,7 +65,6 @@ describe('plugins', () => { expect(pluginConfig.enabled).toEqual(pluginConfig39.enabled) expect(pluginConfig.order).toEqual(pluginConfig39.order) expect(pluginConfig.config).toEqual(pluginConfig39.config) - expect(pluginConfig.error).toEqual(pluginConfig39.error) expect(pluginConfig.plugin).toEqual({ ...plugin60, @@ -78,16 +78,15 @@ describe('plugins', () => { contents: pluginAttachment1.contents, }, }) - expect(pluginConfig.vm).toBeDefined() - const vm = await pluginConfig.vm!.resolveInternalVm - expect(Object.keys(vm!.methods).sort()).toEqual([ - 'composeWebhook', - 'getSettings', - 'onEvent', - 'processEvent', - 'setupPlugin', - 'teardownPlugin', - ]) + expect(pluginConfig.instance).toBeDefined() + const instance = pluginConfig.instance! + + expect(instance.getPluginMethod('composeWebhook')).toBeDefined() + expect(instance.getPluginMethod('getSettings')).toBeDefined() + expect(instance.getPluginMethod('onEvent')).toBeDefined() + expect(instance.getPluginMethod('processEvent')).toBeDefined() + expect(instance.getPluginMethod('setupPlugin')).toBeDefined() + expect(instance.getPluginMethod('teardownPlugin')).toBeDefined() // async loading of capabilities expect(setPluginCapabilities).toHaveBeenCalled() @@ -101,7 +100,7 @@ describe('plugins', () => { ], ]) - const processEvent = vm!.methods['processEvent']! + const processEvent = await instance.getPluginMethod('processEvent') const event = { event: '$test', properties: {}, team_id: 2 } as PluginEvent await processEvent(event) @@ -135,10 +134,10 @@ describe('plugins', () => { expect(pluginConfigTeam1.plugin).toEqual(plugin) expect(pluginConfigTeam2.plugin).toEqual(plugin) - expect(pluginConfigTeam1.vm).toBeDefined() - expect(pluginConfigTeam2.vm).toBeDefined() + expect(pluginConfigTeam1.instance).toBeDefined() + expect(pluginConfigTeam2.instance).toBeDefined() - expect(pluginConfigTeam1.vm).toEqual(pluginConfigTeam2.vm) + expect(pluginConfigTeam1.instance).toEqual(pluginConfigTeam2.instance) }) test('plugin returns null', async () => { @@ -211,9 +210,11 @@ describe('plugins', () => { const { pluginConfigs } = hub const pluginConfig = pluginConfigs.get(39)! - pluginConfig.vm!.totalInitAttemptsCounter = 20 // prevent more retries + expect(pluginConfig.instance).toBeInstanceOf(LazyPluginVM) + const vm = pluginConfig.instance as LazyPluginVM + vm.totalInitAttemptsCounter = 20 // prevent more retries await delay(4000) // processError is called at end of retries - expect(await pluginConfig.vm!.getScheduledTasks()).toEqual({}) + expect(await pluginConfig.instance!.getScheduledTasks()).toEqual({}) const event = { event: '$test', properties: {}, team_id: 2 } as PluginEvent const returnedEvent = await runProcessEvent(hub, { ...event }) @@ -238,9 +239,11 @@ describe('plugins', () => { const { pluginConfigs } = hub const pluginConfig = pluginConfigs.get(39)! - pluginConfig.vm!.totalInitAttemptsCounter = 20 // prevent more retries + expect(pluginConfig.instance).toBeInstanceOf(LazyPluginVM) + const vm = pluginConfig.instance as LazyPluginVM + vm!.totalInitAttemptsCounter = 20 // prevent more retries await delay(4000) // processError is called at end of retries - expect(await pluginConfig.vm!.getScheduledTasks()).toEqual({}) + expect(await pluginConfig.instance!.getScheduledTasks()).toEqual({}) const event = { event: '$test', properties: {}, team_id: 2 } as PluginEvent const returnedEvent = await runProcessEvent(hub, { ...event }) @@ -308,7 +311,7 @@ describe('plugins', () => { await setupPlugins(hub) const { pluginConfigs } = hub - expect(await pluginConfigs.get(39)!.vm!.getScheduledTasks()).toEqual({}) + expect(await pluginConfigs.get(39)!.instance!.getScheduledTasks()).toEqual({}) const event = { event: '$test', properties: {}, team_id: 2 } as PluginEvent const returnedEvent = await runProcessEvent(hub, { ...event }) @@ -341,7 +344,7 @@ describe('plugins', () => { await setupPlugins(hub) const { pluginConfigs } = hub - expect(await pluginConfigs.get(39)!.vm!.getScheduledTasks()).toEqual({}) + expect(await pluginConfigs.get(39)!.instance!.getScheduledTasks()).toEqual({}) const event = { event: '$test', properties: {}, team_id: 2 } as PluginEvent const returnedEvent = await runProcessEvent(hub, { ...event }) @@ -379,7 +382,7 @@ describe('plugins', () => { `Could not load "plugin.json" for plugin test-maxmind-plugin ID ${plugin60.id} (organization ID ${commonOrganizationId})` ) - expect(await pluginConfigs.get(39)!.vm!.getScheduledTasks()).toEqual({}) + expect(await pluginConfigs.get(39)!.instance!.getScheduledTasks()).toEqual({}) }) test('local plugin with broken plugin.json does not do much', async () => { @@ -403,7 +406,7 @@ describe('plugins', () => { pluginConfigs.get(39)!, expect.stringContaining('Could not load "plugin.json" for plugin ') ) - expect(await pluginConfigs.get(39)!.vm!.getScheduledTasks()).toEqual({}) + expect(await pluginConfigs.get(39)!.instance!.getScheduledTasks()).toEqual({}) unlink() }) @@ -426,7 +429,7 @@ describe('plugins', () => { pluginConfigs.get(39)!, `Could not load source code for plugin test-maxmind-plugin ID 60 (organization ID ${commonOrganizationId}). Tried: index.js` ) - expect(await pluginConfigs.get(39)!.vm!.getScheduledTasks()).toEqual({}) + expect(await pluginConfigs.get(39)!.instance!.getScheduledTasks()).toEqual({}) }) test('plugin config order', async () => { @@ -499,7 +502,7 @@ describe('plugins', () => { const pluginConfig = pluginConfigs.get(39)! - await pluginConfig.vm?.resolveInternalVm + await (pluginConfig.instance as LazyPluginVM)?.resolveInternalVm // async loading of capabilities expect(pluginConfig.plugin!.capabilities!.methods!.sort()).toEqual(['processEvent', 'setupPlugin']) @@ -529,7 +532,7 @@ describe('plugins', () => { const pluginConfig = pluginConfigs.get(39)! - await pluginConfig.vm?.resolveInternalVm + await (pluginConfig.instance as LazyPluginVM)?.resolveInternalVm // async loading of capabilities expect(pluginConfig.plugin!.capabilities!.methods!.sort()).toEqual(['onEvent', 'processEvent']) @@ -553,7 +556,7 @@ describe('plugins', () => { const pluginConfig = pluginConfigs.get(39)! - await pluginConfig.vm?.resolveInternalVm + await (pluginConfig.instance as LazyPluginVM)?.resolveInternalVm // async loading of capabilities expect(pluginConfig.plugin!.capabilities!.methods!.sort()).toEqual(['onEvent', 'processEvent']) @@ -581,7 +584,7 @@ describe('plugins', () => { const pluginConfig = pluginConfigs.get(39)! - await pluginConfig.vm?.resolveInternalVm + await (pluginConfig.instance as LazyPluginVM)?.resolveInternalVm // async loading of capabilities expect(pluginConfig.plugin!.capabilities!.methods!.sort()).toEqual(['onEvent', 'processEvent']) @@ -675,7 +678,7 @@ describe('plugins', () => { await setupPlugins(hub) const pluginConfig = hub.pluginConfigs.get(39)! - await pluginConfig.vm?.resolveInternalVm + await (pluginConfig.instance as LazyPluginVM)?.resolveInternalVm // async loading of capabilities expect(setPluginCapabilities.mock.calls.length).toBe(1) @@ -685,7 +688,7 @@ describe('plugins', () => { await setupPlugins(hub) const newPluginConfig = hub.pluginConfigs.get(39)! - await newPluginConfig.vm?.resolveInternalVm + await (newPluginConfig.instance as LazyPluginVM)?.resolveInternalVm // async loading of capabilities expect(newPluginConfig.plugin).not.toBe(pluginConfig.plugin) @@ -694,7 +697,7 @@ describe('plugins', () => { }) describe('loadSchedule()', () => { - const mockConfig = (tasks: any) => ({ vm: { getScheduledTasks: () => Promise.resolve(tasks) } }) + const mockConfig = (tasks: any) => ({ instance: { getScheduledTasks: () => Promise.resolve(tasks) } }) const hub = { pluginConfigs: new Map( diff --git a/plugin-server/tests/worker/plugins/inline.test.ts b/plugin-server/tests/worker/plugins/inline.test.ts new file mode 100644 index 0000000000000..d03d66b357552 --- /dev/null +++ b/plugin-server/tests/worker/plugins/inline.test.ts @@ -0,0 +1,167 @@ +import { PluginEvent } from '@posthog/plugin-scaffold' + +import { Hub, LogLevel, Plugin, PluginConfig } from '../../../src/types' +import { createHub } from '../../../src/utils/db/hub' +import { PostgresUse } from '../../../src/utils/db/postgres' +import { + constructInlinePluginInstance, + INLINE_PLUGIN_MAP, + INLINE_PLUGIN_URLS, + syncInlinePlugins, +} from '../../../src/worker/vm/inline/inline' +import { VersionParts } from '../../../src/worker/vm/inline/semver-flattener' +import { PluginInstance } from '../../../src/worker/vm/lazy' +import { resetTestDatabase } from '../../helpers/sql' + +describe('Inline plugin', () => { + let hub: Hub + let closeHub: () => Promise + + beforeAll(async () => { + console.info = jest.fn() as any + console.warn = jest.fn() as any + ;[hub, closeHub] = await createHub({ LOG_LEVEL: LogLevel.Log }) + await resetTestDatabase() + }) + + afterAll(async () => { + await closeHub() + }) + + // Sync all the inline plugins, then assert that for each plugin URL, a + // plugin exists in the database with the correct properties. + test('syncInlinePlugins', async () => { + await syncInlinePlugins(hub) + + const { rows }: { rows: Plugin[] } = await hub.postgres.query( + PostgresUse.COMMON_WRITE, + 'SELECT * FROM posthog_plugin', + undefined, + 'getPluginRows' + ) + for (const url of INLINE_PLUGIN_URLS) { + const plugin = INLINE_PLUGIN_MAP[url] + const row = rows.find((row) => row.url === url)! + // All the inline plugin properties should align + expect(row).not.toBeUndefined() + expect(row.name).toEqual(plugin.description.name) + expect(row.description).toEqual(plugin.description.description) + expect(row.is_global).toEqual(plugin.description.is_global) + expect(row.is_preinstalled).toEqual(plugin.description.is_preinstalled) + expect(row.config_schema).toEqual(plugin.description.config_schema) + expect(row.tag).toEqual(plugin.description.tag) + expect(row.capabilities).toEqual(plugin.description.capabilities) + expect(row.is_stateless).toEqual(plugin.description.is_stateless) + expect(row.log_level).toEqual(plugin.description.log_level) + + // These non-inline plugin properties should be fixed across all inline plugins + // (in true deployments some of these would not be the case, as they're leftovers from + // before inlining, but in tests the inline plugins are always newly created) + expect(row.plugin_type).toEqual('inline') + expect(row.from_json).toEqual(false) + expect(row.from_web).toEqual(false) + expect(row.source__plugin_json).toBeUndefined() + expect(row.source__index_ts).toBeUndefined() + expect(row.source__frontend_tsx).toBeUndefined() + expect(row.source__site_ts).toBeUndefined() + expect(row.error).toBeNull() + expect(row.organization_id).toBeNull() + expect(row.metrics).toBeNull() + expect(row.public_jobs).toBeNull() + } + }) + + test('semver-flattener', async () => { + interface SemanticVersionTestCase { + versionString: string + expected: VersionParts + } + + const config: PluginConfig = { + plugin: { + id: null, + organization_id: null, + plugin_type: null, + name: null, + is_global: null, + url: 'inline://semver-flattener', + }, + config: { + properties: 'version,version2', + }, + id: null, + plugin_id: null, + enabled: null, + team_id: null, + order: null, + created_at: null, + } + + const instance: PluginInstance = constructInlinePluginInstance(hub, config) + + const versionExamples: SemanticVersionTestCase[] = [ + { + versionString: '1.2.3', + expected: { major: 1, minor: 2, patch: 3, build: undefined }, + }, + { + versionString: '22.7', + expected: { major: 22, minor: 7, preRelease: undefined, build: undefined }, + }, + { + versionString: '22.7-pre-release', + expected: { major: 22, minor: 7, patch: undefined, preRelease: 'pre-release', build: undefined }, + }, + { + versionString: '1.0.0-alpha+001', + expected: { major: 1, minor: 0, patch: 0, preRelease: 'alpha', build: '001' }, + }, + { + versionString: '1.0.0+20130313144700', + expected: { major: 1, minor: 0, patch: 0, build: '20130313144700' }, + }, + { + versionString: '1.2.3-beta+exp.sha.5114f85', + expected: { major: 1, minor: 2, patch: 3, preRelease: 'beta', build: 'exp.sha.5114f85' }, + }, + { + versionString: '1.0.0+21AF26D3—-117B344092BD', + expected: { major: 1, minor: 0, patch: 0, preRelease: undefined, build: '21AF26D3—-117B344092BD' }, + }, + ] + + const test_event: PluginEvent = { + distinct_id: '', + ip: null, + site_url: '', + team_id: 0, + now: '', + event: '', + uuid: '', + properties: {}, + } + + const method = await instance.getPluginMethod('processEvent') + + for (const { versionString, expected } of versionExamples) { + test_event.properties.version = versionString + test_event.properties.version2 = versionString + const flattened = await method(test_event) + + expect(flattened.properties.version__major).toEqual(expected.major) + expect(flattened.properties.version__minor).toEqual(expected.minor) + expect(flattened.properties.version__patch).toEqual(expected.patch) + expect(flattened.properties.version__preRelease).toEqual(expected.preRelease) + expect(flattened.properties.version__build).toEqual(expected.build) + + expect(flattened.properties.version2__major).toEqual(expected.major) + expect(flattened.properties.version2__minor).toEqual(expected.minor) + expect(flattened.properties.version2__patch).toEqual(expected.patch) + expect(flattened.properties.version2__preRelease).toEqual(expected.preRelease) + expect(flattened.properties.version2__build).toEqual(expected.build) + + // reset the event for the next iteration + test_event.properties = {} + } + }) +}) diff --git a/plugin-server/tests/worker/plugins/run.test.ts b/plugin-server/tests/worker/plugins/run.test.ts index aa48e0b8451a1..928b31ee7ab00 100644 --- a/plugin-server/tests/worker/plugins/run.test.ts +++ b/plugin-server/tests/worker/plugins/run.test.ts @@ -20,7 +20,7 @@ describe('runPluginTask()', () => { { team_id: 2, enabled: true, - vm: { + instance: { getTask, }, }, @@ -30,7 +30,7 @@ describe('runPluginTask()', () => { { team_id: 2, enabled: false, - vm: { + instance: { getTask, }, }, @@ -142,8 +142,8 @@ describe('runOnEvent', () => { plugin_id: 100, team_id: 2, enabled: false, - vm: { - getVmMethod: () => onEvent, + instance: { + getPluginMethod: () => onEvent, }, }, @@ -151,8 +151,8 @@ describe('runOnEvent', () => { plugin_id: 101, team_id: 2, enabled: false, - vm: { - getVmMethod: () => onEvent, + instance: { + getPluginMethod: () => onEvent, }, }, ], @@ -264,8 +264,8 @@ describe('runComposeWebhook', () => { plugin_id: 100, team_id: 2, enabled: false, - vm: { - getVmMethod: () => composeWebhook, + instance: { + getPluginMethod: () => composeWebhook, } as any, } mockActionManager = { diff --git a/plugin-server/tests/worker/vm.extra-lazy.test.ts b/plugin-server/tests/worker/vm.extra-lazy.test.ts index e571b2f809b59..78bcc0da60f6c 100644 --- a/plugin-server/tests/worker/vm.extra-lazy.test.ts +++ b/plugin-server/tests/worker/vm.extra-lazy.test.ts @@ -33,7 +33,7 @@ describe('VMs are extra lazy 💤', () => { const pluginConfig = { ...pluginConfig39, plugin: plugin60 } const lazyVm = new LazyPluginVM(hub, pluginConfig) - pluginConfig.vm = lazyVm + pluginConfig.instance = lazyVm jest.spyOn(lazyVm, 'setupPluginIfNeeded') await lazyVm.initialize!(indexJs, pluginDigest(plugin60)) @@ -58,7 +58,7 @@ describe('VMs are extra lazy 💤', () => { const pluginConfig = { ...pluginConfig39, plugin: plugin60 } const lazyVm = new LazyPluginVM(hub, pluginConfig) - pluginConfig.vm = lazyVm + pluginConfig.instance = lazyVm jest.spyOn(lazyVm, 'setupPluginIfNeeded') await lazyVm.initialize!(indexJs, pluginDigest(plugin60)) @@ -80,7 +80,7 @@ describe('VMs are extra lazy 💤', () => { await resetTestDatabase(indexJs) const pluginConfig = { ...pluginConfig39, plugin: plugin60 } const lazyVm = new LazyPluginVM(hub, pluginConfig) - pluginConfig.vm = lazyVm + pluginConfig.instance = lazyVm jest.spyOn(lazyVm, 'setupPluginIfNeeded') await lazyVm.initialize!(indexJs, pluginDigest(plugin60)) @@ -88,7 +88,7 @@ describe('VMs are extra lazy 💤', () => { expect(lazyVm.setupPluginIfNeeded).not.toHaveBeenCalled() expect(fetch).not.toHaveBeenCalled() - await lazyVm.getOnEvent() + await lazyVm.getPluginMethod('onEvent') expect(lazyVm.ready).toEqual(true) expect(lazyVm.setupPluginIfNeeded).toHaveBeenCalled() expect(fetch).toHaveBeenCalledWith('https://onevent.com/', undefined) @@ -107,14 +107,14 @@ describe('VMs are extra lazy 💤', () => { await resetTestDatabase(indexJs) const pluginConfig = { ...pluginConfig39, plugin: plugin60 } const lazyVm = new LazyPluginVM(hub, pluginConfig) - pluginConfig.vm = lazyVm + pluginConfig.instance = lazyVm jest.spyOn(lazyVm, 'setupPluginIfNeeded') await lazyVm.initialize!(indexJs, pluginDigest(plugin60)) lazyVm.ready = false lazyVm.inErroredState = true - const onEvent = await lazyVm.getOnEvent() + const onEvent = await lazyVm.getPluginMethod('onEvent') expect(onEvent).toBeNull() expect(lazyVm.ready).toEqual(false) expect(lazyVm.setupPluginIfNeeded).toHaveBeenCalled() diff --git a/plugin-server/tests/worker/vm.lazy.test.ts b/plugin-server/tests/worker/vm.lazy.test.ts index fc77c5c9f3582..cfe13bc628902 100644 --- a/plugin-server/tests/worker/vm.lazy.test.ts +++ b/plugin-server/tests/worker/vm.lazy.test.ts @@ -65,7 +65,7 @@ describe('LazyPluginVM', () => { const vm = createVM() void initializeVm(vm) - expect(await vm.getProcessEvent()).toEqual('processEvent') + expect(await vm.getPluginMethod('processEvent')).toEqual('processEvent') expect(await vm.getTask('someTask', PluginTaskType.Schedule)).toEqual(null) expect(await vm.getTask('runEveryMinute', PluginTaskType.Schedule)).toEqual('runEveryMinute') expect(await vm.getScheduledTasks()).toEqual(mockVM.tasks.schedule) @@ -109,7 +109,7 @@ describe('LazyPluginVM', () => { void initializeVm(vm) - expect(await vm.getProcessEvent()).toEqual(null) + expect(await vm.getPluginMethod('processEvent')).toEqual(null) expect(await vm.getTask('runEveryMinute', PluginTaskType.Schedule)).toEqual(null) expect(await vm.getScheduledTasks()).toEqual({}) }) diff --git a/posthog/api/plugin.py b/posthog/api/plugin.py index 481b63476f10e..04578f5e64eba 100644 --- a/posthog/api/plugin.py +++ b/posthog/api/plugin.py @@ -290,7 +290,10 @@ def get_latest_tag(self, plugin: Plugin) -> Optional[str]: return None def get_organization_name(self, plugin: Plugin) -> str: - return plugin.organization.name + if plugin.organization: + return plugin.organization.name + else: + return "posthog-inline" def create(self, validated_data: dict, *args: Any, **kwargs: Any) -> Plugin: validated_data["url"] = self.initial_data.get("url", None) diff --git a/posthog/api/test/__snapshots__/test_plugin.ambr b/posthog/api/test/__snapshots__/test_plugin.ambr index d658a166f5858..e424770da1794 100644 --- a/posthog/api/test/__snapshots__/test_plugin.ambr +++ b/posthog/api/test/__snapshots__/test_plugin.ambr @@ -141,7 +141,7 @@ "posthog_organization"."personalization", "posthog_organization"."domain_whitelist" FROM "posthog_plugin" - INNER JOIN "posthog_organization" ON ("posthog_plugin"."organization_id" = "posthog_organization"."id") + LEFT OUTER JOIN "posthog_organization" ON ("posthog_plugin"."organization_id" = "posthog_organization"."id") WHERE ("posthog_plugin"."organization_id" = '00000000-0000-0000-0000-000000000000'::uuid OR "posthog_plugin"."is_global" OR "posthog_plugin"."id" IN @@ -329,7 +329,7 @@ "posthog_organization"."personalization", "posthog_organization"."domain_whitelist" FROM "posthog_plugin" - INNER JOIN "posthog_organization" ON ("posthog_plugin"."organization_id" = "posthog_organization"."id") + LEFT OUTER JOIN "posthog_organization" ON ("posthog_plugin"."organization_id" = "posthog_organization"."id") WHERE ("posthog_plugin"."organization_id" = '00000000-0000-0000-0000-000000000000'::uuid OR "posthog_plugin"."is_global" OR "posthog_plugin"."id" IN @@ -542,7 +542,7 @@ "posthog_organization"."personalization", "posthog_organization"."domain_whitelist" FROM "posthog_plugin" - INNER JOIN "posthog_organization" ON ("posthog_plugin"."organization_id" = "posthog_organization"."id") + LEFT OUTER JOIN "posthog_organization" ON ("posthog_plugin"."organization_id" = "posthog_organization"."id") WHERE ("posthog_plugin"."organization_id" = '00000000-0000-0000-0000-000000000000'::uuid OR "posthog_plugin"."is_global" OR "posthog_plugin"."id" IN diff --git a/posthog/api/test/test_plugin.py b/posthog/api/test/test_plugin.py index 968a18faa8b98..0176cc6077739 100644 --- a/posthog/api/test/test_plugin.py +++ b/posthog/api/test/test_plugin.py @@ -885,6 +885,8 @@ def test_plugin_unused(self, mock_get, mock_reload): ) def test_install_plugin_on_multiple_orgs(self, mock_get, mock_reload): + # Expectation: since plugins are url-unique, installing the same plugin on a second orgs should + # return a 400 response, as the plugin is already installed on the first org my_org = self.organization other_org = Organization.objects.create( name="FooBar2", plugins_access_level=Organization.PluginsAccessLevel.INSTALL @@ -914,6 +916,7 @@ def test_install_plugin_on_multiple_orgs(self, mock_get, mock_reload): f"/api/organizations/{other_org.id}/plugins/", {"url": "https://github.com/PostHog/helloworldplugin"}, ) + # Fails due to org membership self.assertEqual(response.status_code, 403) self.assertEqual(Plugin.objects.count(), 1) @@ -923,14 +926,9 @@ def test_install_plugin_on_multiple_orgs(self, mock_get, mock_reload): f"/api/organizations/{other_org.id}/plugins/", {"url": "https://github.com/PostHog/helloworldplugin"}, ) - self.assertEqual(response.status_code, 201) - self.assertEqual(Plugin.objects.count(), 2) - response = self.client.post( - f"/api/organizations/{other_org.id}/plugins/", - {"url": "https://github.com/PostHog/helloworldplugin"}, - ) + # Fails since the plugin already exists self.assertEqual(response.status_code, 400) - self.assertEqual(Plugin.objects.count(), 2) + self.assertEqual(Plugin.objects.count(), 1) def test_cannot_access_others_orgs_plugins(self, mock_get, mock_reload): other_org = Organization.objects.create( diff --git a/posthog/management/commands/test/test_create_batch_export_from_app.py b/posthog/management/commands/test/test_create_batch_export_from_app.py index a5c8fffc5f4d4..9357920f909a5 100644 --- a/posthog/management/commands/test/test_create_batch_export_from_app.py +++ b/posthog/management/commands/test/test_create_batch_export_from_app.py @@ -3,6 +3,7 @@ import datetime as dt import json import typing +import uuid import pytest import temporalio.client @@ -36,11 +37,17 @@ def team(organization): team.delete() +# Used to randomize plugin URLs, to prevent tests stepping on each other, since +# plugin urls are constrained to be unique. +def append_random(url: str) -> str: + return f"{url}?random={uuid.uuid4()}" + + @pytest.fixture def snowflake_plugin(organization) -> typing.Generator[Plugin, None, None]: plugin = Plugin.objects.create( name="Snowflake Export", - url="https://github.com/PostHog/snowflake-export-plugin", + url=append_random("https://github.com/PostHog/snowflake-export-plugin"), plugin_type="custom", organization=organization, ) @@ -52,7 +59,7 @@ def snowflake_plugin(organization) -> typing.Generator[Plugin, None, None]: def s3_plugin(organization) -> typing.Generator[Plugin, None, None]: plugin = Plugin.objects.create( name="S3 Export Plugin", - url="https://github.com/PostHog/s3-export-plugin", + url=append_random("https://github.com/PostHog/s3-export-plugin"), plugin_type="custom", organization=organization, ) @@ -64,7 +71,7 @@ def s3_plugin(organization) -> typing.Generator[Plugin, None, None]: def bigquery_plugin(organization) -> typing.Generator[Plugin, None, None]: plugin = Plugin.objects.create( name="BigQuery Export", - url="https://github.com/PostHog/bigquery-plugin", + url=append_random("https://github.com/PostHog/bigquery-plugin"), plugin_type="custom", organization=organization, ) @@ -76,7 +83,7 @@ def bigquery_plugin(organization) -> typing.Generator[Plugin, None, None]: def postgres_plugin(organization) -> typing.Generator[Plugin, None, None]: plugin = Plugin.objects.create( name="PostgreSQL Export Plugin", - url="https://github.com/PostHog/postgres-plugin", + url=append_random("https://github.com/PostHog/postgres-plugin"), plugin_type="custom", organization=organization, ) @@ -88,7 +95,7 @@ def postgres_plugin(organization) -> typing.Generator[Plugin, None, None]: def redshift_plugin(organization) -> typing.Generator[Plugin, None, None]: plugin = Plugin.objects.create( name="Redshift Export Plugin", - url="https://github.com/PostHog/postgres-plugin", + url=append_random("https://github.com/PostHog/postgres-plugin"), plugin_type="custom", organization=organization, ) diff --git a/posthog/migrations/0449_alter_plugin_organization_alter_plugin_plugin_type_and_more.py b/posthog/migrations/0449_alter_plugin_organization_alter_plugin_plugin_type_and_more.py new file mode 100644 index 0000000000000..acbeebaac82f1 --- /dev/null +++ b/posthog/migrations/0449_alter_plugin_organization_alter_plugin_plugin_type_and_more.py @@ -0,0 +1,90 @@ +# Generated by Django 4.2.14 on 2024-07-22 08:04 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + atomic = False # Added to support concurrent index creation + dependencies = [ + ("posthog", "0448_add_mysql_externaldatasource_source_type"), + ] + + operations = [ + migrations.SeparateDatabaseAndState( + state_operations=[ + migrations.AlterField( + model_name="plugin", + name="organization", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="plugins", + related_query_name="plugin", + to="posthog.organization", + ), + ), + ], + database_operations=[ + migrations.RunSQL( + """ + SET CONSTRAINTS "posthog_plugin_organization_id_d040b9a9_fk_posthog_o" IMMEDIATE; -- existing-table-constraint-ignore + ALTER TABLE "posthog_plugin" DROP CONSTRAINT "posthog_plugin_organization_id_d040b9a9_fk_posthog_o"; -- existing-table-constraint-ignore + ALTER TABLE "posthog_plugin" ALTER COLUMN "organization_id" DROP NOT NULL; + ALTER TABLE "posthog_plugin" ADD CONSTRAINT "posthog_plugin_organization_id_d040b9a9_fk_posthog_o" FOREIGN KEY ("organization_id") REFERENCES "posthog_organization" ("id") DEFERRABLE INITIALLY DEFERRED; -- existing-table-constraint-ignore + """, + reverse_sql=""" + SET CONSTRAINTS "posthog_plugin_organization_id_d040b9a9_fk_posthog_o" IMMEDIATE; -- existing-table-constraint-ignore + ALTER TABLE "posthog_plugin" DROP CONSTRAINT "posthog_plugin_organization_id_d040b9a9_fk_posthog_o"; -- existing-table-constraint-ignore + ALTER TABLE "posthog_plugin" ALTER COLUMN "organization_id" SET NOT NULL; + ALTER TABLE "posthog_plugin" ADD CONSTRAINT "posthog_plugin_organization_id_d040b9a9_fk_posthog_o" FOREIGN KEY ("organization_id") REFERENCES "posthog_organization" ("id") DEFERRABLE INITIALLY DEFERRED; -- existing-table-constraint-ignore + """, + ), + ], + ), + migrations.AlterField( + model_name="plugin", + name="plugin_type", + field=models.CharField( + blank=True, + choices=[ + ("local", "local"), + ("custom", "custom"), + ("repository", "repository"), + ("source", "source"), + ("inline", "inline"), + ], + default=None, + max_length=200, + null=True, + ), + ), + migrations.SeparateDatabaseAndState( + state_operations=[ + migrations.AlterField( + model_name="plugin", + name="url", + field=models.CharField(blank=True, max_length=800, null=True, unique=True), + ) + ], + database_operations=[ + migrations.RunSQL( + """ + ALTER TABLE "posthog_plugin" ADD CONSTRAINT "posthog_plugin_url_bccac89d_uniq" UNIQUE ("url"); -- existing-table-constraint-ignore + """, + reverse_sql=""" + ALTER TABLE "posthog_plugin" DROP CONSTRAINT IF EXISTS "posthog_plugin_url_bccac89d_uniq"; + """, + ), + # We add the index seperately + migrations.RunSQL( + """ + CREATE INDEX CONCURRENTLY "posthog_plugin_url_bccac89d_like" ON "posthog_plugin" ("url" varchar_pattern_ops); + """, + reverse_sql=""" + DROP INDEX IF EXISTS "posthog_plugin_url_bccac89d_like"; + """, + ), + ], + ), + ] diff --git a/posthog/models/plugin.py b/posthog/models/plugin.py index 26b3cdde676ca..19d07578cf4a5 100644 --- a/posthog/models/plugin.py +++ b/posthog/models/plugin.py @@ -38,15 +38,11 @@ pass -def raise_if_plugin_installed(url: str, organization_id: str): +def raise_if_plugin_installed(url: str): url_without_private_key = url.split("?")[0] - if ( - Plugin.objects.filter( - models.Q(url=url_without_private_key) | models.Q(url__startswith=f"{url_without_private_key}?") - ) - .filter(organization_id=organization_id) - .exists() - ): + if Plugin.objects.filter( + models.Q(url=url_without_private_key) | models.Q(url__startswith=f"{url_without_private_key}?") + ).exists(): raise ValidationError(f'Plugin from URL "{url_without_private_key}" already installed!') @@ -125,7 +121,7 @@ def install(self, **kwargs) -> "Plugin": plugin_json: Optional[dict[str, Any]] = None if kwargs.get("plugin_type", None) != Plugin.PluginType.SOURCE: plugin_json = update_validated_data_from_url(kwargs, kwargs["url"]) - raise_if_plugin_installed(kwargs["url"], kwargs["organization_id"]) + raise_if_plugin_installed(kwargs["url"]) plugin = Plugin.objects.create(**kwargs) if plugin_json: PluginSourceFile.objects.sync_from_plugin_archive(plugin, plugin_json) @@ -149,12 +145,18 @@ class PluginType(models.TextChoices): "source", "source", ) # coded inside the browser (versioned via plugin_source_version) + INLINE = ( + "inline", + "inline", + ) # Code checked into plugin_server, url starts with "inline:" + # DEPRECATED: plugin-server will own all plugin code, org relations don't make sense organization: models.ForeignKey = models.ForeignKey( "posthog.Organization", on_delete=models.CASCADE, related_name="plugins", related_query_name="plugin", + null=True, ) plugin_type: models.CharField = models.CharField( max_length=200, null=True, blank=True, choices=PluginType.choices, default=None @@ -167,7 +169,7 @@ class PluginType(models.TextChoices): name: models.CharField = models.CharField(max_length=200, null=True, blank=True) description: models.TextField = models.TextField(null=True, blank=True) - url: models.CharField = models.CharField(max_length=800, null=True, blank=True) + url: models.CharField = models.CharField(max_length=800, null=True, blank=True, unique=True) icon: models.CharField = models.CharField(max_length=800, null=True, blank=True) # Describe the fields to ask in the interface; store answers in PluginConfig->config # - config_schema = { [fieldKey]: { name: 'api key', type: 'string', default: '', required: true } } From f2061fc866a5c0b3b40189fb433e24663a1c3673 Mon Sep 17 00:00:00 2001 From: Ben White Date: Wed, 24 Jul 2024 13:51:37 +0200 Subject: [PATCH 17/33] fix: Flakey snapshot (#23912) --- .../src/scenes/dashboard/DashboardInsightCardLegend.stories.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/scenes/dashboard/DashboardInsightCardLegend.stories.tsx b/frontend/src/scenes/dashboard/DashboardInsightCardLegend.stories.tsx index c2cfb06a3ff07..5c9caef93e5d2 100644 --- a/frontend/src/scenes/dashboard/DashboardInsightCardLegend.stories.tsx +++ b/frontend/src/scenes/dashboard/DashboardInsightCardLegend.stories.tsx @@ -22,6 +22,7 @@ const meta: Meta = { mockDate: '2023-02-01', waitForSelector: '.InsightCard', }, + tags: ['test-skip'], // Flakey } export default meta From 17b0c8f35e78000058b55c923371a29cd032ea57 Mon Sep 17 00:00:00 2001 From: Tom Owers Date: Wed, 24 Jul 2024 13:14:53 +0100 Subject: [PATCH 18/33] fix(data-warehouse): Implemented upserts for incremental syncs (#23850) --- .../pipelines/sql_database/__init__.py | 7 +- .../data_imports/pipelines/stripe/__init__.py | 56 ++++++++-- .../pipelines/zendesk/__init__.py | 102 ++++++++++++------ requirements.in | 4 +- requirements.txt | 2 +- 5 files changed, 124 insertions(+), 47 deletions(-) diff --git a/posthog/temporal/data_imports/pipelines/sql_database/__init__.py b/posthog/temporal/data_imports/pipelines/sql_database/__init__.py index 858872fe3ee6e..6cf0073863551 100644 --- a/posthog/temporal/data_imports/pipelines/sql_database/__init__.py +++ b/posthog/temporal/data_imports/pipelines/sql_database/__init__.py @@ -145,7 +145,12 @@ def sql_database( name=table.name, primary_key=get_primary_key(table), merge_key=get_primary_key(table), - write_disposition="merge" if incremental else "replace", + write_disposition={ + "disposition": "merge", + "strategy": "upsert", + } + if incremental + else "replace", spec=SqlDatabaseTableConfiguration, table_format="delta", columns=get_column_hints(engine, schema or "", table.name), diff --git a/posthog/temporal/data_imports/pipelines/stripe/__init__.py b/posthog/temporal/data_imports/pipelines/stripe/__init__.py index c6ff35e971a74..7bb66a63d1b06 100644 --- a/posthog/temporal/data_imports/pipelines/stripe/__init__.py +++ b/posthog/temporal/data_imports/pipelines/stripe/__init__.py @@ -14,7 +14,12 @@ def get_resource(name: str, is_incremental: bool) -> EndpointResource: "name": "BalanceTransaction", "table_name": "balance_transaction", "primary_key": "id", - "write_disposition": "merge" if is_incremental else "replace", + "write_disposition": { + "disposition": "merge", + "strategy": "upsert", + } + if is_incremental + else "replace", "columns": get_dlt_mapping_for_external_table("stripe_balancetransaction"), # type: ignore "endpoint": { "data_selector": "data", @@ -44,7 +49,12 @@ def get_resource(name: str, is_incremental: bool) -> EndpointResource: "name": "Charge", "table_name": "charge", "primary_key": "id", - "write_disposition": "merge" if is_incremental else "replace", + "write_disposition": { + "disposition": "merge", + "strategy": "upsert", + } + if is_incremental + else "replace", "columns": get_dlt_mapping_for_external_table("stripe_charge"), # type: ignore "endpoint": { "data_selector": "data", @@ -73,7 +83,12 @@ def get_resource(name: str, is_incremental: bool) -> EndpointResource: "name": "Customer", "table_name": "customer", "primary_key": "id", - "write_disposition": "merge" if is_incremental else "replace", + "write_disposition": { + "disposition": "merge", + "strategy": "upsert", + } + if is_incremental + else "replace", "columns": get_dlt_mapping_for_external_table("stripe_customer"), # type: ignore "endpoint": { "data_selector": "data", @@ -101,7 +116,12 @@ def get_resource(name: str, is_incremental: bool) -> EndpointResource: "name": "Invoice", "table_name": "invoice", "primary_key": "id", - "write_disposition": "merge" if is_incremental else "replace", + "write_disposition": { + "disposition": "merge", + "strategy": "upsert", + } + if is_incremental + else "replace", "columns": get_dlt_mapping_for_external_table("stripe_invoice"), # type: ignore "endpoint": { "data_selector": "data", @@ -132,7 +152,12 @@ def get_resource(name: str, is_incremental: bool) -> EndpointResource: "name": "Price", "table_name": "price", "primary_key": "id", - "write_disposition": "merge" if is_incremental else "replace", + "write_disposition": { + "disposition": "merge", + "strategy": "upsert", + } + if is_incremental + else "replace", "columns": get_dlt_mapping_for_external_table("stripe_price"), # type: ignore "endpoint": { "data_selector": "data", @@ -164,7 +189,12 @@ def get_resource(name: str, is_incremental: bool) -> EndpointResource: "name": "Product", "table_name": "product", "primary_key": "id", - "write_disposition": "merge" if is_incremental else "replace", + "write_disposition": { + "disposition": "merge", + "strategy": "upsert", + } + if is_incremental + else "replace", "columns": get_dlt_mapping_for_external_table("stripe_product"), # type: ignore "endpoint": { "data_selector": "data", @@ -194,7 +224,12 @@ def get_resource(name: str, is_incremental: bool) -> EndpointResource: "name": "Subscription", "table_name": "subscription", "primary_key": "id", - "write_disposition": "merge" if is_incremental else "replace", + "write_disposition": { + "disposition": "merge", + "strategy": "upsert", + } + if is_incremental + else "replace", "columns": get_dlt_mapping_for_external_table("stripe_subscription"), # type: ignore "endpoint": { "data_selector": "data", @@ -274,7 +309,12 @@ def stripe_source( }, "resource_defaults": { "primary_key": "id", - "write_disposition": "merge" if is_incremental else "replace", + "write_disposition": { + "disposition": "merge", + "strategy": "upsert", + } + if is_incremental + else "replace", }, "resources": [get_resource(endpoint, is_incremental)], } diff --git a/posthog/temporal/data_imports/pipelines/zendesk/__init__.py b/posthog/temporal/data_imports/pipelines/zendesk/__init__.py index 2e7859935f37d..0bf2510cce8f3 100644 --- a/posthog/temporal/data_imports/pipelines/zendesk/__init__.py +++ b/posthog/temporal/data_imports/pipelines/zendesk/__init__.py @@ -1,6 +1,6 @@ import base64 import dlt -from dlt.sources.helpers.rest_client.paginators import BasePaginator +from dlt.sources.helpers.rest_client.paginators import BasePaginator, JSONLinkPaginator from dlt.sources.helpers.requests import Response, Request import requests from posthog.temporal.data_imports.pipelines.rest_source import RESTAPIConfig, rest_api_resources @@ -14,15 +14,17 @@ def get_resource(name: str, is_incremental: bool) -> EndpointResource: "name": "brands", "table_name": "brands", "primary_key": "id", - "write_disposition": "merge" if is_incremental else "replace", + "write_disposition": { + "disposition": "merge", + "strategy": "upsert", + } + if is_incremental + else "replace", "columns": get_dlt_mapping_for_external_table("zendesk_brands"), # type: ignore "endpoint": { "data_selector": "brands", "path": "/api/v2/brands", - "paginator": { - "type": "json_response", - "next_url_path": "links.next", - }, + "paginator": JSONLinkPaginator(next_url_path="links.next"), "params": { "page[size]": 100, }, @@ -33,15 +35,17 @@ def get_resource(name: str, is_incremental: bool) -> EndpointResource: "name": "organizations", "table_name": "organizations", "primary_key": "id", - "write_disposition": "merge" if is_incremental else "replace", + "write_disposition": { + "disposition": "merge", + "strategy": "upsert", + } + if is_incremental + else "replace", "columns": get_dlt_mapping_for_external_table("zendesk_organizations"), # type: ignore "endpoint": { "data_selector": "organizations", "path": "/api/v2/organizations", - "paginator": { - "type": "json_response", - "next_url_path": "links.next", - }, + "paginator": JSONLinkPaginator(next_url_path="links.next"), "params": { "page[size]": 100, }, @@ -52,15 +56,17 @@ def get_resource(name: str, is_incremental: bool) -> EndpointResource: "name": "groups", "table_name": "groups", "primary_key": "id", - "write_disposition": "merge" if is_incremental else "replace", + "write_disposition": { + "disposition": "merge", + "strategy": "upsert", + } + if is_incremental + else "replace", "columns": get_dlt_mapping_for_external_table("zendesk_groups"), # type: ignore "endpoint": { "data_selector": "groups", "path": "/api/v2/groups", - "paginator": { - "type": "json_response", - "next_url_path": "links.next", - }, + "paginator": JSONLinkPaginator(next_url_path="links.next"), "params": { # the parameters below can optionally be configured # "exclude_deleted": "OPTIONAL_CONFIG", @@ -73,15 +79,17 @@ def get_resource(name: str, is_incremental: bool) -> EndpointResource: "name": "sla_policies", "table_name": "sla_policies", "primary_key": "id", - "write_disposition": "merge" if is_incremental else "replace", + "write_disposition": { + "disposition": "merge", + "strategy": "upsert", + } + if is_incremental + else "replace", "columns": get_dlt_mapping_for_external_table("zendesk_sla_policies"), # type: ignore "endpoint": { "data_selector": "sla_policies", "path": "/api/v2/slas/policies", - "paginator": { - "type": "json_response", - "next_url_path": "links.next", - }, + "paginator": JSONLinkPaginator(next_url_path="links.next"), }, "table_format": "delta", }, @@ -89,15 +97,17 @@ def get_resource(name: str, is_incremental: bool) -> EndpointResource: "name": "users", "table_name": "users", "primary_key": "id", - "write_disposition": "merge" if is_incremental else "replace", + "write_disposition": { + "disposition": "merge", + "strategy": "upsert", + } + if is_incremental + else "replace", "columns": get_dlt_mapping_for_external_table("zendesk_users"), # type: ignore "endpoint": { "data_selector": "users", "path": "/api/v2/users", - "paginator": { - "type": "json_response", - "next_url_path": "links.next", - }, + "paginator": JSONLinkPaginator(next_url_path="links.next"), "params": { # the parameters below can optionally be configured # "role": "OPTIONAL_CONFIG", @@ -113,15 +123,17 @@ def get_resource(name: str, is_incremental: bool) -> EndpointResource: "name": "ticket_fields", "table_name": "ticket_fields", "primary_key": "id", - "write_disposition": "merge" if is_incremental else "replace", + "write_disposition": { + "disposition": "merge", + "strategy": "upsert", + } + if is_incremental + else "replace", "columns": get_dlt_mapping_for_external_table("zendesk_ticket_fields"), # type: ignore "endpoint": { "data_selector": "ticket_fields", "path": "/api/v2/ticket_fields", - "paginator": { - "type": "json_response", - "next_url_path": "links.next", - }, + "paginator": JSONLinkPaginator(next_url_path="links.next"), "params": { # the parameters below can optionally be configured # "locale": "OPTIONAL_CONFIG", @@ -135,7 +147,12 @@ def get_resource(name: str, is_incremental: bool) -> EndpointResource: "name": "ticket_events", "table_name": "ticket_events", "primary_key": "id", - "write_disposition": "merge" if is_incremental else "replace", + "write_disposition": { + "disposition": "merge", + "strategy": "upsert", + } + if is_incremental + else "replace", "columns": get_dlt_mapping_for_external_table("zendesk_ticket_events"), # type: ignore "endpoint": { "data_selector": "ticket_events", @@ -159,7 +176,12 @@ def get_resource(name: str, is_incremental: bool) -> EndpointResource: "name": "tickets", "table_name": "tickets", "primary_key": "id", - "write_disposition": "merge" if is_incremental else "replace", + "write_disposition": { + "disposition": "merge", + "strategy": "upsert", + } + if is_incremental + else "replace", "columns": get_dlt_mapping_for_external_table("zendesk_tickets"), # type: ignore "endpoint": { "data_selector": "tickets", @@ -182,7 +204,12 @@ def get_resource(name: str, is_incremental: bool) -> EndpointResource: "name": "ticket_metric_events", "table_name": "ticket_metric_events", "primary_key": "id", - "write_disposition": "merge" if is_incremental else "replace", + "write_disposition": { + "disposition": "merge", + "strategy": "upsert", + } + if is_incremental + else "replace", "columns": get_dlt_mapping_for_external_table("zendesk_ticket_metric_events"), # type: ignore "endpoint": { "data_selector": "ticket_metric_events", @@ -274,7 +301,12 @@ def zendesk_source( }, "resource_defaults": { "primary_key": "id", - "write_disposition": "merge" if is_incremental else "replace", + "write_disposition": { + "disposition": "merge", + "strategy": "upsert", + } + if is_incremental + else "replace", }, "resources": [get_resource(endpoint, is_incremental)], } diff --git a/requirements.in b/requirements.in index 03656f814bcf8..004661063be43 100644 --- a/requirements.in +++ b/requirements.in @@ -33,8 +33,8 @@ djangorestframework==3.15.1 djangorestframework-csv==2.1.1 djangorestframework-dataclasses==1.2.0 django-fernet-encrypted-fields==0.1.3 -dlt==0.5.1 -dlt[deltalake]==0.5.1 +dlt==0.5.2a1 +dlt[deltalake]==0.5.2a1 dnspython==2.2.1 drf-exceptions-hog==0.4.0 drf-extensions==0.7.0 diff --git a/requirements.txt b/requirements.txt index a7f9721004c84..c4e07d9924e01 100644 --- a/requirements.txt +++ b/requirements.txt @@ -204,7 +204,7 @@ djangorestframework-csv==2.1.1 # via -r requirements.in djangorestframework-dataclasses==1.2.0 # via -r requirements.in -dlt==0.5.1 +dlt==0.5.2a1 # via -r requirements.in dnspython==2.2.1 # via -r requirements.in From ca8d5f26b1e9e4b7ae36bed4c1438557745219ed Mon Sep 17 00:00:00 2001 From: Ben White Date: Wed, 24 Jul 2024 15:14:44 +0200 Subject: [PATCH 19/33] fix: Remove some unused code (#23948) --- .../scenes/pipeline/AppMetricSparkLine.tsx | 30 ++++++++++++++----- .../hogFunctionConfigurationLogic.tsx | 7 +++++ plugin-server/src/cdp/cdp-consumers.ts | 9 ------ 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/frontend/src/scenes/pipeline/AppMetricSparkLine.tsx b/frontend/src/scenes/pipeline/AppMetricSparkLine.tsx index ed14e30ec0fdd..ee4ff1dbfa5f8 100644 --- a/frontend/src/scenes/pipeline/AppMetricSparkLine.tsx +++ b/frontend/src/scenes/pipeline/AppMetricSparkLine.tsx @@ -4,7 +4,7 @@ import { useEffect } from 'react' import { pipelineNodeMetricsLogic } from './pipelineNodeMetricsLogic' import { pipelineNodeMetricsV2Logic } from './pipelineNodeMetricsV2Logic' -import { PipelineBackend, PipelineNode } from './types' +import { PipelineNode } from './types' export function AppMetricSparkLine({ pipelineNode }: { pipelineNode: PipelineNode }): JSX.Element { const logic = pipelineNodeMetricsLogic({ id: pipelineNode.id }) @@ -19,22 +19,28 @@ export function AppMetricSparkLine({ pipelineNode }: { pipelineNode: PipelineNod const displayData: SparklineTimeSeries[] = [ { color: 'success', - name: pipelineNode.backend == 'batch_export' ? 'Runs succeeded' : 'Events sent', + name: 'Success', values: successes, }, ] + if (appMetricsResponse?.metrics.failures.some((failure) => failure > 0)) { displayData.push({ color: 'danger', - name: pipelineNode.backend == 'batch_export' ? 'Runs failed' : 'Events dropped', + name: 'Failure', values: failures, }) } - if (pipelineNode.backend == PipelineBackend.HogFunction) { - return Coming soon - } - return + return ( + + ) } export function AppMetricSparkLineV2({ pipelineNode }: { pipelineNode: PipelineNode }): JSX.Element { @@ -59,5 +65,13 @@ export function AppMetricSparkLineV2({ pipelineNode }: { pipelineNode: PipelineN }, ] - return + return ( + + ) } diff --git a/frontend/src/scenes/pipeline/hogfunctions/hogFunctionConfigurationLogic.tsx b/frontend/src/scenes/pipeline/hogfunctions/hogFunctionConfigurationLogic.tsx index 089c0c648d4d4..70d39a02e3e01 100644 --- a/frontend/src/scenes/pipeline/hogfunctions/hogFunctionConfigurationLogic.tsx +++ b/frontend/src/scenes/pipeline/hogfunctions/hogFunctionConfigurationLogic.tsx @@ -8,6 +8,7 @@ import api from 'lib/api' import { dayjs } from 'lib/dayjs' import { uuid } from 'lib/utils' import { deleteWithUndo } from 'lib/utils/deleteWithUndo' +import posthog from 'posthog-js' import { teamLogic } from 'scenes/teamLogic' import { urls } from 'scenes/urls' import { userLogic } from 'scenes/userLogic' @@ -184,6 +185,12 @@ export const hogFunctionConfigurationLogic = kea Date: Wed, 24 Jul 2024 09:27:47 -0400 Subject: [PATCH 20/33] chore(data-warehouse): add buttons to copy table and field names (#23919) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- .../src/lib/components/DatabaseTableTree/TreeRow.tsx | 12 ++++++++++-- .../data-warehouse/external/DataWarehouseTables.tsx | 10 ++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/frontend/src/lib/components/DatabaseTableTree/TreeRow.tsx b/frontend/src/lib/components/DatabaseTableTree/TreeRow.tsx index 099b77ff9d89f..d50c84c42875d 100644 --- a/frontend/src/lib/components/DatabaseTableTree/TreeRow.tsx +++ b/frontend/src/lib/components/DatabaseTableTree/TreeRow.tsx @@ -1,5 +1,6 @@ import { IconChevronDown, IconEllipsis } from '@posthog/icons' import { LemonButton, Spinner } from '@posthog/lemon-ui' +import { copyToClipboard } from 'lib/utils/copyToClipboard' import { useCallback, useState } from 'react' import { DatabaseSchemaTable } from '~/queries/schema' @@ -13,10 +14,17 @@ export interface TreeRowProps { selected?: boolean } -export function TreeRow({ item, selected }: TreeRowProps): JSX.Element { +export function TreeRow({ item }: TreeRowProps): JSX.Element { return (
  • - {item.icon} : null}> + { + void copyToClipboard(item.name, item.name) + }} + size="xsmall" + fullWidth + icon={item.icon ? <>{item.icon} : null} + > {item.name} {item.type} diff --git a/frontend/src/scenes/data-warehouse/external/DataWarehouseTables.tsx b/frontend/src/scenes/data-warehouse/external/DataWarehouseTables.tsx index d8c1e6114a913..83a1c9925bf3f 100644 --- a/frontend/src/scenes/data-warehouse/external/DataWarehouseTables.tsx +++ b/frontend/src/scenes/data-warehouse/external/DataWarehouseTables.tsx @@ -4,6 +4,7 @@ import { clsx } from 'clsx' import { BindLogic, useActions, useValues } from 'kea' import { router } from 'kea-router' import { DatabaseTableTree, TreeItem } from 'lib/components/DatabaseTableTree/DatabaseTableTree' +import { copyToClipboard } from 'lib/utils/copyToClipboard' import { useState } from 'react' import { insightDataLogic } from 'scenes/insights/insightDataLogic' import { insightLogic } from 'scenes/insights/insightLogic' @@ -97,6 +98,15 @@ export const DatabaseTableTreeWithItems = ({ inline }: DatabaseTableTreeProps): const dropdownOverlay = (table: DatabaseSchemaTable): JSX.Element => ( <> + { + void copyToClipboard(table.name, table.name) + }} + fullWidth + data-attr="schema-list-item-copy" + > + Copy table name + { selectRow(table) From d6a48a9e091b4a1c87355c703c7f15cdb2fd68ca Mon Sep 17 00:00:00 2001 From: Tom Owers Date: Wed, 24 Jul 2024 14:44:11 +0100 Subject: [PATCH 21/33] feat(data-warehouse): Add incremental syncs to snowflake: (#23928) --- .../data_imports/pipelines/sql_database/__init__.py | 11 +++++++++-- .../data_imports/workflow_activities/import_data.py | 4 ++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/posthog/temporal/data_imports/pipelines/sql_database/__init__.py b/posthog/temporal/data_imports/pipelines/sql_database/__init__.py index 6cf0073863551..6f9ec4c1162b7 100644 --- a/posthog/temporal/data_imports/pipelines/sql_database/__init__.py +++ b/posthog/temporal/data_imports/pipelines/sql_database/__init__.py @@ -86,7 +86,7 @@ def snowflake_source( table_names: list[str], role: Optional[str] = None, incremental_field: Optional[str] = None, - incremental_field_type: Optional[str] = None, + incremental_field_type: Optional[IncrementalFieldType] = None, ) -> DltSource: account_id = quote(account_id) user = quote(user) @@ -95,10 +95,17 @@ def snowflake_source( warehouse = quote(warehouse) role = quote(role) if role else None + if incremental_field is not None and incremental_field_type is not None: + incremental: dlt.sources.incremental | None = dlt.sources.incremental( + cursor_path=incremental_field, initial_value=incremental_type_to_initial_value(incremental_field_type) + ) + else: + incremental = None + credentials = ConnectionStringCredentials( f"snowflake://{user}:{password}@{account_id}/{database}/{schema}?warehouse={warehouse}{f'&role={role}' if role else ''}" ) - db_source = sql_database(credentials, schema=schema, table_names=table_names) + db_source = sql_database(credentials, schema=schema, table_names=table_names, incremental=incremental) return db_source diff --git a/posthog/temporal/data_imports/workflow_activities/import_data.py b/posthog/temporal/data_imports/workflow_activities/import_data.py index 190a35e3ab673..103408db92bd4 100644 --- a/posthog/temporal/data_imports/workflow_activities/import_data.py +++ b/posthog/temporal/data_imports/workflow_activities/import_data.py @@ -208,6 +208,10 @@ async def import_data_activity(inputs: ImportDataActivityInputs): warehouse=warehouse, role=role, table_names=endpoints, + incremental_field=schema.sync_type_config.get("incremental_field") if schema.is_incremental else None, + incremental_field_type=schema.sync_type_config.get("incremental_field_type") + if schema.is_incremental + else None, ) return await _run( From af8a8810bfc7abc74f5bd2f0cfb2b97c4513c21a Mon Sep 17 00:00:00 2001 From: Tom Owers Date: Wed, 24 Jul 2024 14:46:04 +0100 Subject: [PATCH 22/33] feat(data-warehouse): Added sync frequency interval (#23944) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- ...s-app-dashboards--insight-legend--dark.png | Bin 115292 -> 35301 bytes .../settings/source/Schemas.tsx | 13 +++-- frontend/src/types.ts | 2 +- latest_migrations.manifest | 2 +- ...schema_sync_frequency_interval_and_more.py | 53 ++++++++++++++++++ posthog/warehouse/api/external_data_schema.py | 19 ++++++- .../api/test/test_external_data_schema.py | 7 ++- .../api/test/test_external_data_source.py | 3 +- posthog/warehouse/data_load/service.py | 24 +++----- .../warehouse/models/external_data_schema.py | 52 ++++++++++++++++- .../warehouse/models/external_data_source.py | 2 +- 11 files changed, 147 insertions(+), 30 deletions(-) create mode 100644 posthog/migrations/0450_externaldataschema_sync_frequency_interval_and_more.py diff --git a/frontend/__snapshots__/scenes-app-dashboards--insight-legend--dark.png b/frontend/__snapshots__/scenes-app-dashboards--insight-legend--dark.png index d7d9398cd00ccc97d920dea9e00c7dc1e801d9cc..9d811913930caae25596af83fb0fef13e26c9d5d 100644 GIT binary patch delta 16555 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 z zD$O1@GKj?HBmHKjv6}h&nq-BZ{kO5(2=lH)obZ=`4DONq1IzoCgt1y5;0TuG2jfw; zDGuB*9D}W#;sG29?OYh$=_TD$wWE*qt&xO${X=={xOeZwo_<~f0dwqI$KJZSYs|M6nq4Hqu5MV}d!|XY zz8$i2p5Z(sCAW0880_>uM`Iu9%1Crk(ql~KR;%24`>m#dM9>j0xC2{$8$S^rrrIaU zKX;W<^pUdiV|#P99m74i?;pZtW^~Xh0d#ln-pznmyUO-ZnWj*X4Z>VGsm+|Pd# zCksHkORp(b0)% zN9xxgNX$r9g@dJfz4rH4;e66x@rI80Gi;8tbP9s!j@jooA!2vH3KQl<{raV5u10R| zbf@+)Gol4{|DoWp91zFl&OK205C7Qz@SFYXC5rIp?agzEF4-Ck#(9uU)7==n*{(bz zoxOTEdUNS_7p3z=_q=0TM)X8ZReq;cjr5W#1U%N2Kc7g!kiOQ~u}Zl5+c7=fUovix zQN{GHL>7+Dz8X1>GV4*1S-En&%eMNbD0xI#X=#2eZDd1B%leli{jhvrvAf4>`DJsP ztv}8NEX<%G;qf;jPt8O$Uxk8oml9(Cy&S7{N?O{tqZ0=1&V=cfW7p>_;~deYQ1lkf zN#WK<5>T!o5L50$E$MBV+l#~Z*=>5#x^ZzrQ0*4NP7c{RoZydFN<6Z2*&Qyh^*s{u z9@@C2RmaWM9zZ2%t%KgTTG-=nK5>49LEOrp${31m%0rBrr3RoWoNvrU_uMQ7OSb}? zjM4=?%$xd9xnf*o#v4``TOPa`_ow2F74VJD7 z3JT(5OH~6XNR(U}aBy&RJSRq{=b}Z{|BS@mTT@nlbkDQx{LU*}9>1b~zSbyB<_D(8X=+U*VQw7&oDQIFtGU-6cvTMeC6Qm{MkYPZd2LL7SdspbFPzAbRe;- zeib+{>%F=R_h)|G?Q=xdJcL6^NF>eeZzUXcdO?^8R7#<6vBRlL6Fvt}%~O~}41F8l znFW2QC&oIrI~vR+Nnn1lDLJ6UaA*am-<8yGyQs8)k3?!UdXnbo=nRoAvW+({ zr=;K*zz!coma7wyNlCo^d_qDXU3o`k47m*eAQ7gTw~iP@AG%x1bzhLTN$Iz`|0-aA z-#x}s;3ISM)#Zw4=c|8n0ako`s>Q^{0PWHoKY3s9*xg1waiT{_%Q{45d{P7Q^r#UFnGBKAh0;v`WR0mTjMRZ{Dh5oe!{@opQ;R(c7|DR zd~u?ZRKa$wOqic!XU~=lEHiIEi+!rX-qHbq63ass=CdJ|ey0#o;c-q}0(tX+>4Ikf zXcBS`lu3=*`S=3Drg&dnnVmB5J^E8A=c{V6j>8T&6k+$f@3!;g3F>G()wfqgf423J zhG~3FgmreY-}*U7FZqOSUz8NE_%a2tQ@ZxG`M&`23?O&G^+ zg=0!-Ub3;E}iA4hVW4hlfg*;{Svi3g_t+V9vrCJ`xFX%hhJa z!%yCRbq`%i>?0mN0HbSgvBu~yOTkl;KoV`I%~0fLOEh}!=E%}wwM+$|Tad4OY5RDz z>LE+`cJh9k;lPiVaY8`FA{xstBor&)PzSIJL_J;*b%jsjXy5ImoXOINX*Jc|U7&%{ zD?!}ECHd|nxVdc?OJX$o`LEaOKqdKGK=y6QD~(D$qt*Gs8&pk#a{21f$*sYv<9lTs zOTTM`dadk-I@mwV%bEB)>+y;y!vzhR$!9r@uSn*}|DCyIf9<}Rs`}me6;{7Mg!%WF!_-|s|4ws$3M4eq^_st&}PMCWiZs4I}Zk%7;i_^!A7 z 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 diff --git a/frontend/src/scenes/data-warehouse/settings/source/Schemas.tsx b/frontend/src/scenes/data-warehouse/settings/source/Schemas.tsx index 93f469198b53c..916bc13c99f41 100644 --- a/frontend/src/scenes/data-warehouse/settings/source/Schemas.tsx +++ b/frontend/src/scenes/data-warehouse/settings/source/Schemas.tsx @@ -70,14 +70,19 @@ export const SchemaTable = ({ schemas, isLoading }: SchemaTableProps): JSX.Eleme return ( updateSchema({ ...schema, sync_frequency: value as DataWarehouseSyncInterval }) } options={[ - { value: 'day' as DataWarehouseSyncInterval, label: 'Daily' }, - { value: 'week' as DataWarehouseSyncInterval, label: 'Weekly' }, - { value: 'month' as DataWarehouseSyncInterval, label: 'Monthly' }, + { value: '5min' as DataWarehouseSyncInterval, label: '5 mins' }, + { value: '30min' as DataWarehouseSyncInterval, label: '30 mins' }, + { value: '1hour' as DataWarehouseSyncInterval, label: '1 hour' }, + { value: '6hour' as DataWarehouseSyncInterval, label: '6 hours' }, + { value: '12hour' as DataWarehouseSyncInterval, label: '12 hours' }, + { value: '24hour' as DataWarehouseSyncInterval, label: 'Daily' }, + { value: '7day' as DataWarehouseSyncInterval, label: 'Weekly' }, + { value: '30day' as DataWarehouseSyncInterval, label: 'Monthly' }, ]} /> ) diff --git a/frontend/src/types.ts b/frontend/src/types.ts index b6cefa0036249..31a685da19cbe 100644 --- a/frontend/src/types.ts +++ b/frontend/src/types.ts @@ -4012,7 +4012,7 @@ export type BatchExportService = export type PipelineInterval = 'hour' | 'day' | 'every 5 minutes' -export type DataWarehouseSyncInterval = 'day' | 'week' | 'month' +export type DataWarehouseSyncInterval = '5min' | '30min' | '1hour' | '6hour' | '12hour' | '24hour' | '7day' | '30day' export type BatchExportConfiguration = { // User provided data for the export. This is the data that the user diff --git a/latest_migrations.manifest b/latest_migrations.manifest index 6338f39708702..e052952856d52 100644 --- a/latest_migrations.manifest +++ b/latest_migrations.manifest @@ -5,7 +5,7 @@ contenttypes: 0002_remove_content_type_name ee: 0016_rolemembership_organization_member otp_static: 0002_throttling otp_totp: 0002_auto_20190420_0723 -posthog: 0449_alter_plugin_organization_alter_plugin_plugin_type_and_more +posthog: 0450_externaldataschema_sync_frequency_interval_and_more sessions: 0001_initial social_django: 0010_uid_db_index two_factor: 0007_auto_20201201_1019 diff --git a/posthog/migrations/0450_externaldataschema_sync_frequency_interval_and_more.py b/posthog/migrations/0450_externaldataschema_sync_frequency_interval_and_more.py new file mode 100644 index 0000000000000..0456b88e6dca0 --- /dev/null +++ b/posthog/migrations/0450_externaldataschema_sync_frequency_interval_and_more.py @@ -0,0 +1,53 @@ +# Generated by Django 4.2.14 on 2024-07-24 10:13 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("posthog", "0449_alter_plugin_organization_alter_plugin_plugin_type_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="externaldataschema", + name="sync_frequency_interval", + field=models.DurationField(blank=True, null=True, default=datetime.timedelta(seconds=21600)), + ), + migrations.RunSQL( + sql=""" + UPDATE posthog_externaldataschema + SET sync_frequency_interval = interval '24 hour' + WHERE sync_frequency = 'day'; + """, + reverse_sql=migrations.RunSQL.noop, + ), + migrations.RunSQL( + sql=""" + UPDATE posthog_externaldataschema + SET sync_frequency_interval = interval '7 day' + WHERE sync_frequency = 'week'; + """, + reverse_sql=migrations.RunSQL.noop, + ), + migrations.RunSQL( + sql=""" + UPDATE posthog_externaldataschema + SET sync_frequency_interval = interval '30 day' + WHERE sync_frequency = 'month'; + """, + reverse_sql=migrations.RunSQL.noop, + ), + migrations.AlterField( + model_name="externaldataschema", + name="sync_frequency", + field=models.CharField( + blank=True, + choices=[("day", "Daily"), ("week", "Weekly"), ("month", "Monthly")], + default="day", + max_length=128, + null=True, + ), + ), + ] diff --git a/posthog/warehouse/api/external_data_schema.py b/posthog/warehouse/api/external_data_schema.py index e85f303b24ccb..116455992060d 100644 --- a/posthog/warehouse/api/external_data_schema.py +++ b/posthog/warehouse/api/external_data_schema.py @@ -29,6 +29,8 @@ filter_snowflake_incremental_fields, get_snowflake_schemas, get_sql_schemas_for_source_type, + sync_frequency_interval_to_sync_frequency, + sync_frequency_to_sync_frequency_interval, ) from posthog.warehouse.models.external_data_source import ExternalDataSource from posthog.warehouse.models.ssh_tunnel import SSHTunnel @@ -43,6 +45,7 @@ class ExternalDataSchemaSerializer(serializers.ModelSerializer): sync_type = serializers.SerializerMethodField(read_only=True) incremental_field = serializers.SerializerMethodField(read_only=True) incremental_field_type = serializers.SerializerMethodField(read_only=True) + sync_frequency = serializers.SerializerMethodField(read_only=True) class Meta: model = ExternalDataSchema @@ -92,6 +95,9 @@ def get_table(self, schema: ExternalDataSchema) -> Optional[dict]: return SimpleTableSerializer(schema.table, context={"database": hogql_context}).data or None + def get_sync_frequency(self, schema: ExternalDataSchema): + return sync_frequency_interval_to_sync_frequency(schema) + def update(self, instance: ExternalDataSchema, validated_data: dict[str, Any]) -> ExternalDataSchema: data = self.context["request"].data @@ -134,7 +140,16 @@ def update(self, instance: ExternalDataSchema, validated_data: dict[str, Any]) - validated_data["sync_type_config"] = payload should_sync = validated_data.get("should_sync", None) - sync_frequency = validated_data.get("sync_frequency", None) + sync_frequency = data.get("sync_frequency", None) + was_sync_frequency_updated = False + + if sync_frequency: + sync_frequency_interval = sync_frequency_to_sync_frequency_interval(sync_frequency) + + if sync_frequency_interval != instance.sync_frequency_interval: + was_sync_frequency_updated = True + validated_data["sync_frequency_interval"] = sync_frequency_interval + instance.sync_frequency_interval = sync_frequency_interval if should_sync is True and sync_type is None and instance.sync_type is None: raise ValidationError("Sync type must be set up first before enabling schema") @@ -150,7 +165,7 @@ def update(self, instance: ExternalDataSchema, validated_data: dict[str, Any]) - if should_sync is True: sync_external_data_job_workflow(instance, create=True) - if sync_frequency: + if was_sync_frequency_updated: sync_external_data_job_workflow(instance, create=False) if trigger_refresh: diff --git a/posthog/warehouse/api/test/test_external_data_schema.py b/posthog/warehouse/api/test/test_external_data_schema.py index 44554f4dce17d..b63f3f1dfab4f 100644 --- a/posthog/warehouse/api/test/test_external_data_schema.py +++ b/posthog/warehouse/api/test/test_external_data_schema.py @@ -1,3 +1,4 @@ +from datetime import timedelta from unittest import mock import uuid import psycopg @@ -370,7 +371,7 @@ def test_update_schema_sync_frequency(self): should_sync=True, status=ExternalDataSchema.Status.COMPLETED, sync_type=ExternalDataSchema.SyncType.FULL_REFRESH, - sync_frequency=ExternalDataSchema.SyncFrequency.DAILY, + sync_frequency_interval=timedelta(hours=24), ) with ( @@ -385,11 +386,11 @@ def test_update_schema_sync_frequency(self): response = self.client.patch( f"/api/projects/{self.team.pk}/external_data_schemas/{schema.id}", - data={"sync_frequency": "week"}, + data={"sync_frequency": "7day"}, ) assert response.status_code == 200 mock_sync_external_data_job_workflow.assert_called_once() schema.refresh_from_db() - assert schema.sync_frequency == ExternalDataSchema.SyncFrequency.WEEKLY + assert schema.sync_frequency_interval == timedelta(days=7) diff --git a/posthog/warehouse/api/test/test_external_data_source.py b/posthog/warehouse/api/test/test_external_data_source.py index 2ddadcb039874..85fbec2cef0f7 100644 --- a/posthog/warehouse/api/test/test_external_data_source.py +++ b/posthog/warehouse/api/test/test_external_data_source.py @@ -15,6 +15,7 @@ from posthog.warehouse.models.external_data_job import ExternalDataJob +from posthog.warehouse.models.external_data_schema import sync_frequency_interval_to_sync_frequency class TestExternalDataSource(APIBaseTest): @@ -415,7 +416,7 @@ def test_get_external_data_source_with_schema(self): "status": schema.status, "sync_type": schema.sync_type, "table": schema.table, - "sync_frequency": schema.sync_frequency, + "sync_frequency": sync_frequency_interval_to_sync_frequency(schema), } ], ) diff --git a/posthog/warehouse/data_load/service.py b/posthog/warehouse/data_load/service.py index 46b3bc5b8de01..9ee54510227bc 100644 --- a/posthog/warehouse/data_load/service.py +++ b/posthog/warehouse/data_load/service.py @@ -48,7 +48,7 @@ def get_sync_schedule(external_data_schema: "ExternalDataSchema"): external_data_source_id=external_data_schema.source_id, ) - sync_frequency = get_sync_frequency(external_data_schema) + sync_frequency, jitter = get_sync_frequency(external_data_schema) return Schedule( action=ScheduleActionStartWorkflow( @@ -58,27 +58,21 @@ def get_sync_schedule(external_data_schema: "ExternalDataSchema"): task_queue=str(DATA_WAREHOUSE_TASK_QUEUE), ), spec=ScheduleSpec( - intervals=[ - ScheduleIntervalSpec(every=sync_frequency, offset=timedelta(hours=external_data_schema.created_at.hour)) - ], - jitter=timedelta(hours=2), + intervals=[ScheduleIntervalSpec(every=sync_frequency)], + jitter=jitter, ), state=ScheduleState(note=f"Schedule for external data source: {external_data_schema.pk}"), policy=SchedulePolicy(overlap=ScheduleOverlapPolicy.SKIP), ) -def get_sync_frequency(external_data_schema: "ExternalDataSchema"): - from posthog.warehouse.models.external_data_schema import ExternalDataSchema +def get_sync_frequency(external_data_schema: "ExternalDataSchema") -> tuple[timedelta, timedelta]: + if external_data_schema.sync_frequency_interval <= timedelta(hours=1): + return (external_data_schema.sync_frequency_interval, timedelta(minutes=1)) + if external_data_schema.sync_frequency_interval <= timedelta(hours=12): + return (external_data_schema.sync_frequency_interval, timedelta(minutes=30)) - if external_data_schema.sync_frequency == ExternalDataSchema.SyncFrequency.DAILY: - return timedelta(days=1) - elif external_data_schema.sync_frequency == ExternalDataSchema.SyncFrequency.WEEKLY: - return timedelta(weeks=1) - elif external_data_schema.sync_frequency == ExternalDataSchema.SyncFrequency.MONTHLY: - return timedelta(days=30) - else: - raise ValueError(f"Unknown sync frequency: {external_data_schema.source.sync_frequency}") + return (external_data_schema.sync_frequency_interval, timedelta(hours=1)) def sync_external_data_job_workflow( diff --git a/posthog/warehouse/models/external_data_schema.py b/posthog/warehouse/models/external_data_schema.py index f47c24277237e..1303805e01c66 100644 --- a/posthog/warehouse/models/external_data_schema.py +++ b/posthog/warehouse/models/external_data_schema.py @@ -1,6 +1,8 @@ from collections import defaultdict +from datetime import timedelta from typing import Optional from django.db import models +from django_deprecate_fields import deprecate_field import snowflake.connector from posthog.models.team import Team from posthog.models.utils import CreatedMetaFields, UUIDModel, sane_repr @@ -55,8 +57,12 @@ class SyncFrequency(models.TextChoices): default=dict, blank=True, ) - sync_frequency: models.CharField = models.CharField( - max_length=128, choices=SyncFrequency.choices, default=SyncFrequency.DAILY, blank=True + # Deprecated in favour of `sync_frequency_interval` + sync_frequency = deprecate_field( + models.CharField(max_length=128, choices=SyncFrequency.choices, default=SyncFrequency.DAILY, blank=True) + ) + sync_frequency_interval: models.DurationField = models.DurationField( + default=timedelta(hours=6), null=True, blank=True ) __repr__ = sane_repr("name") @@ -125,6 +131,48 @@ def sync_old_schemas_with_new_schemas(new_schemas: list, source_id: uuid.UUID, t ExternalDataSchema.objects.create(name=schema, team_id=team_id, source_id=source_id, should_sync=False) +def sync_frequency_to_sync_frequency_interval(frequency: str) -> timedelta: + if frequency == "5min": + return timedelta(minutes=5) + if frequency == "30min": + return timedelta(minutes=30) + if frequency == "1hour": + return timedelta(hours=1) + if frequency == "6hour": + return timedelta(hours=6) + if frequency == "12hour": + return timedelta(hours=12) + if frequency == "24hour": + return timedelta(hours=24) + if frequency == "7day": + return timedelta(days=7) + if frequency == "30day": + return timedelta(days=30) + + raise ValueError(f"Frequency {frequency} is not supported") + + +def sync_frequency_interval_to_sync_frequency(schema: ExternalDataSchema) -> str: + if schema.sync_frequency_interval == timedelta(minutes=5): + return "5min" + if schema.sync_frequency_interval == timedelta(minutes=30): + return "30min" + if schema.sync_frequency_interval == timedelta(hours=1): + return "1hour" + if schema.sync_frequency_interval == timedelta(hours=6): + return "6hour" + if schema.sync_frequency_interval == timedelta(hours=12): + return "12hour" + if schema.sync_frequency_interval == timedelta(hours=24): + return "24hour" + if schema.sync_frequency_interval == timedelta(days=7): + return "7day" + if schema.sync_frequency_interval == timedelta(days=30): + return "30day" + + raise ValueError(f"Frequency interval {schema.sync_frequency_interval} is not supported") + + def filter_snowflake_incremental_fields(columns: list[tuple[str, str]]) -> list[tuple[str, IncrementalFieldType]]: results: list[tuple[str, IncrementalFieldType]] = [] for column_name, type in columns: diff --git a/posthog/warehouse/models/external_data_source.py b/posthog/warehouse/models/external_data_source.py index f9ffb21d41b29..e6f617f79fbf9 100644 --- a/posthog/warehouse/models/external_data_source.py +++ b/posthog/warehouse/models/external_data_source.py @@ -40,7 +40,7 @@ class SyncFrequency(models.TextChoices): destination_id: models.CharField = models.CharField(max_length=400, null=True, blank=True) team: models.ForeignKey = models.ForeignKey(Team, on_delete=models.CASCADE) - # Deprecated, use `ExternalDataSchema.sync_frequency` + # Deprecated, use `ExternalDataSchema.sync_frequency_interval` sync_frequency: models.CharField = models.CharField( max_length=128, choices=SyncFrequency.choices, default=SyncFrequency.DAILY, blank=True ) From 0a015ed10d60b263433f299801ced2ce20707d91 Mon Sep 17 00:00:00 2001 From: Tom Owers Date: Wed, 24 Jul 2024 14:46:15 +0100 Subject: [PATCH 23/33] fix(data-warehouse): Check table name before creation (#23947) --- posthog/warehouse/api/table.py | 12 +++++-- posthog/warehouse/api/test/test_table.py | 46 ++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/posthog/warehouse/api/table.py b/posthog/warehouse/api/table.py index 58d6296cb2ae3..d5929a9a04315 100644 --- a/posthog/warehouse/api/table.py +++ b/posthog/warehouse/api/table.py @@ -1,6 +1,6 @@ from typing import Any -from rest_framework import filters, request, response, serializers, status, viewsets +from rest_framework import exceptions, filters, request, response, serializers, status, viewsets from rest_framework.decorators import action from posthog.api.routing import TeamAndOrgViewSetMixin @@ -89,11 +89,17 @@ def get_external_schema(self, instance: DataWarehouseTable): return SimpleExternalDataSchemaSerializer(instance.externaldataschema_set.first(), read_only=True).data or None def create(self, validated_data): - validated_data["team_id"] = self.context["team_id"] + team_id = self.context["team_id"] + + table_name_exists = DataWarehouseTable.objects.filter(team_id=team_id, name=validated_data["name"]).exists() + if table_name_exists: + raise exceptions.ValidationError("Table name already exists.") + + validated_data["team_id"] = team_id validated_data["created_by"] = self.context["request"].user if validated_data.get("credential"): validated_data["credential"] = DataWarehouseCredential.objects.create( - team_id=self.context["team_id"], + team_id=team_id, access_key=validated_data["credential"]["access_key"], access_secret=validated_data["credential"]["access_secret"], ) diff --git a/posthog/warehouse/api/test/test_table.py b/posthog/warehouse/api/test/test_table.py index 885f5c7267aaa..f8c451c35ab5b 100644 --- a/posthog/warehouse/api/test/test_table.py +++ b/posthog/warehouse/api/test/test_table.py @@ -232,3 +232,49 @@ def test_update_schema_400_with_invalid_type(self): assert response.status_code == 400 assert response.json()["message"] == "Can not parse type another_type for column id - type does not exist" assert table.columns == columns + + @patch( + "posthog.warehouse.models.table.DataWarehouseTable.get_columns", + return_value={ + "id": {"clickhouse": "Nullable(String)", "hogql": "StringDatabaseField", "valid": True}, + "a_column": {"clickhouse": "Nullable(String)", "hogql": "StringDatabaseField", "valid": True}, + }, + ) + @patch( + "posthog.warehouse.models.table.DataWarehouseTable.validate_column_type", + return_value=True, + ) + def test_table_name_duplicate(self, patch_get_columns, patch_validate_column_type): + response = self.client.post( + f"/api/projects/{self.team.id}/warehouse_tables/", + { + "name": "whatever", + "url_pattern": "https://your-org.s3.amazonaws.com/bucket/whatever.pqt", + "credential": { + "access_key": "_accesskey", + "access_secret": "_accesssecret", + }, + "format": "Parquet", + }, + ) + assert response.status_code == 201 + data: dict[str, Any] = response.json() + + table = DataWarehouseTable.objects.get(id=data["id"]) + + assert table is not None + + response = self.client.post( + f"/api/projects/{self.team.id}/warehouse_tables/", + { + "name": "whatever", + "url_pattern": "https://your-org.s3.amazonaws.com/bucket/whatever.pqt", + "credential": { + "access_key": "_accesskey", + "access_secret": "_accesssecret", + }, + "format": "Parquet", + }, + ) + assert response.status_code == 400 + assert DataWarehouseTable.objects.count() == 1 From 2e9b6bcdbdce1dd1c0fca88e8b62e3feaa0d4328 Mon Sep 17 00:00:00 2001 From: Eric Duong Date: Wed, 24 Jul 2024 09:55:34 -0400 Subject: [PATCH 24/33] chore(data-warehouse): change to sentence case (#23924) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- ...ghts--funnel-top-to-bottom-edit--light.png | Bin 163826 -> 163819 bytes .../external/DataWarehouseExternalScene.tsx | 4 ++-- .../src/scenes/pipeline/pipelineLogic.tsx | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-edit--light.png b/frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-edit--light.png index 4ca21748c10e4c4b555653cd305703e490130789..01df2b71a3a80c845f84d22815e68f9739a82644 100644 GIT binary patch delta 84069 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 z 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 CxShuU delta 84103 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 D-7O>F diff --git a/frontend/src/scenes/data-warehouse/external/DataWarehouseExternalScene.tsx b/frontend/src/scenes/data-warehouse/external/DataWarehouseExternalScene.tsx index 20e0cee417cee..dcbadd261a832 100644 --- a/frontend/src/scenes/data-warehouse/external/DataWarehouseExternalScene.tsx +++ b/frontend/src/scenes/data-warehouse/external/DataWarehouseExternalScene.tsx @@ -32,9 +32,9 @@ export const humanFriendlyDataWarehouseTabName = (tab: DataWarehouseTab): string case DataWarehouseTab.Explore: return 'Explore' case DataWarehouseTab.ManagedSources: - return 'Managed Sources' + return 'Managed sources' case DataWarehouseTab.SelfManagedSources: - return 'Self-Managed Sources' + return 'Self-Managed sources' } } diff --git a/frontend/src/scenes/pipeline/pipelineLogic.tsx b/frontend/src/scenes/pipeline/pipelineLogic.tsx index 4376a6478a53f..6b86424c73fca 100644 --- a/frontend/src/scenes/pipeline/pipelineLogic.tsx +++ b/frontend/src/scenes/pipeline/pipelineLogic.tsx @@ -17,9 +17,9 @@ export const humanFriendlyTabName = (tab: PipelineTab): string => { case PipelineTab.Destinations: return 'Destinations' case PipelineTab.DataImport: - return 'Data Import' + return 'Data import' case PipelineTab.SiteApps: - return 'Site Apps' + return 'Site apps' case PipelineTab.ImportApps: return 'Legacy sources' case PipelineTab.AppsManagement: From e08c15a8883cb15f7870ab19c85e798a07845bbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1s=20Far=C3=ADas=20Santana?= Date: Wed, 24 Jul 2024 16:12:59 +0200 Subject: [PATCH 25/33] fix: Properly retry on S3 upload part timeouts (#23940) --- .../email/batch_export_run_failure.html | 6 +- .../temporal/batch_exports/batch_exports.py | 5 +- .../batch_exports/bigquery_batch_export.py | 7 +- .../batch_exports/postgres_batch_export.py | 1 + .../temporal/batch_exports/s3_batch_export.py | 45 ++++- .../batch_exports/snowflake_batch_export.py | 1 + .../temporal/batch_exports/temporary_file.py | 15 +- .../test_s3_batch_export_workflow.py | 180 ++++++++++++++++++ .../batch_exports/test_temporary_file.py | 24 ++- 9 files changed, 266 insertions(+), 18 deletions(-) diff --git a/posthog/templates/email/batch_export_run_failure.html b/posthog/templates/email/batch_export_run_failure.html index 04cf2021e342c..58244e49a5bc8 100644 --- a/posthog/templates/email/batch_export_run_failure.html +++ b/posthog/templates/email/batch_export_run_failure.html @@ -3,7 +3,7 @@ {% block heading %}PostHog batch export {{ name }} has failed{% endblock %} {% block section %}

    - There's been a fatal error with your batch export {{ name }} at {{ time }}. Due to the nature of the error, it cannot be retried automatically and requires manual intervention. + There's been a fatal error with your batch export {{ name }} at {{ time }}. Due to the nature of the error, we could not automatically recover from the failure and it requires manual intervention. We recommend reviewing the batch export logs for error details:

    @@ -14,7 +14,9 @@

    - After reviewing the logs, and addressing any errors in them, you can retry the batch export run manually. If the batch export continues to fail we will disable it. + In the logs you may find configuration errors that can be addressed by yourself, like an incorrect credential, or an unreachable warehouse. If you’re feeling extra-adventurous, sometimes a manual retry can fix things! + + If you can't diagnose the issue, please contact us for help. Keep in mind that if the batch export continues to fail we will have to disable it.

    {% endblock %} diff --git a/posthog/temporal/batch_exports/batch_exports.py b/posthog/temporal/batch_exports/batch_exports.py index f2b04f3cac869..e0d629c54e35c 100644 --- a/posthog/temporal/batch_exports/batch_exports.py +++ b/posthog/temporal/batch_exports/batch_exports.py @@ -434,15 +434,16 @@ async def finish_batch_export_run(inputs: FinishBatchExportRunInputs) -> None: logger.error("Batch export failed with error: %s", batch_export_run.latest_error) elif batch_export_run.status == BatchExportRun.Status.FAILED: - logger.error("Batch export failed with non-retryable error: %s", batch_export_run.latest_error) + logger.error("Batch export failed with non-recoverable error: %s", batch_export_run.latest_error) from posthog.tasks.email import send_batch_export_run_failure try: - logger.info("Sending failure notification email for run %s", inputs.id) await database_sync_to_async(send_batch_export_run_failure)(inputs.id) except Exception: logger.exception("Failure email notification could not be sent") + else: + logger.info("Failure notification email for run %s has been sent", inputs.id) is_over_failure_threshold = await check_if_over_failure_threshold( inputs.batch_export_id, diff --git a/posthog/temporal/batch_exports/bigquery_batch_export.py b/posthog/temporal/batch_exports/bigquery_batch_export.py index f1e7b7c5b157d..735df5b7f3505 100644 --- a/posthog/temporal/batch_exports/bigquery_batch_export.py +++ b/posthog/temporal/batch_exports/bigquery_batch_export.py @@ -428,11 +428,12 @@ async def insert_into_bigquery_activity(inputs: BigQueryInsertInputs) -> Records async def flush_to_bigquery( local_results_file, - records_since_last_flush, - bytes_since_last_flush, + records_since_last_flush: int, + bytes_since_last_flush: int, flush_counter: int, last_inserted_at, - last, + last: bool, + error: Exception | None, ): logger.debug( "Loading %s records of size %s bytes", diff --git a/posthog/temporal/batch_exports/postgres_batch_export.py b/posthog/temporal/batch_exports/postgres_batch_export.py index 5535b82a251b9..75093fe444986 100644 --- a/posthog/temporal/batch_exports/postgres_batch_export.py +++ b/posthog/temporal/batch_exports/postgres_batch_export.py @@ -522,6 +522,7 @@ async def flush_to_postgres( flush_counter: int, last_inserted_at, last: bool, + error: Exception | None, ): logger.debug( "Copying %s records of size %s bytes", diff --git a/posthog/temporal/batch_exports/s3_batch_export.py b/posthog/temporal/batch_exports/s3_batch_export.py index f371a5421ce42..7150d116feb71 100644 --- a/posthog/temporal/batch_exports/s3_batch_export.py +++ b/posthog/temporal/batch_exports/s3_batch_export.py @@ -7,6 +7,7 @@ import typing import aioboto3 +import botocore.exceptions import pyarrow as pa from django.conf import settings from temporalio import activity, workflow @@ -117,6 +118,18 @@ def __init__(self): super().__init__("No multi-part upload is in progress. Call 'create' to start one.") +class IntermittentUploadPartTimeoutError(Exception): + """Exception raised when an S3 upload part times out. + + This is generally a transient or intermittent error that can be handled by a retry. + However, it's wrapped by a `botocore.exceptions.ClientError` that generally includes + non-retryable errors. So, we can re-raise our own exception in those cases. + """ + + def __init__(self, part_number: int): + super().__init__(f"An intermittent `RequestTimeout` was raised while attempting to upload part {part_number}") + + class S3MultiPartUploadState(typing.NamedTuple): upload_id: str parts: list[dict[str, str | int]] @@ -274,13 +287,22 @@ async def upload_part(self, body: BatchExportTemporaryFile, rewind: bool = True) reader = io.BufferedReader(body) # type: ignore async with self.s3_client() as s3_client: - response = await s3_client.upload_part( - Bucket=self.bucket_name, - Key=self.key, - PartNumber=next_part_number, - UploadId=self.upload_id, - Body=reader, - ) + try: + response = await s3_client.upload_part( + Bucket=self.bucket_name, + Key=self.key, + PartNumber=next_part_number, + UploadId=self.upload_id, + Body=reader, + ) + except botocore.exceptions.ClientError as err: + error_code = err.response.get("Error", {}).get("Code", None) + + if error_code is not None and error_code == "RequestTimeout": + raise IntermittentUploadPartTimeoutError(part_number=next_part_number) from err + else: + raise + reader.detach() # BufferedReader closes the file otherwise. self.parts.append({"PartNumber": next_part_number, "ETag": response["ETag"]}) @@ -485,7 +507,16 @@ async def flush_to_s3( flush_counter: int, last_inserted_at: dt.datetime, last: bool, + error: Exception | None, ): + if error is not None: + logger.debug("Error while writing part %d", s3_upload.part_number + 1, exc_info=error) + logger.warn( + "An error was detected while writing part %d. Partial part will not be uploaded in case it can be retried.", + s3_upload.part_number + 1, + ) + return + logger.debug( "Uploading %s part %s containing %s records with size %s bytes", "last " if last else "", diff --git a/posthog/temporal/batch_exports/snowflake_batch_export.py b/posthog/temporal/batch_exports/snowflake_batch_export.py index 0d69335836399..e7fc189b3fc28 100644 --- a/posthog/temporal/batch_exports/snowflake_batch_export.py +++ b/posthog/temporal/batch_exports/snowflake_batch_export.py @@ -627,6 +627,7 @@ async def flush_to_snowflake( flush_counter: int, last_inserted_at, last: bool, + error: Exception | None, ): logger.info( "Putting %sfile %s containing %s records with size %s bytes", diff --git a/posthog/temporal/batch_exports/temporary_file.py b/posthog/temporal/batch_exports/temporary_file.py index d69e41edfa495..39651f3560d72 100644 --- a/posthog/temporal/batch_exports/temporary_file.py +++ b/posthog/temporal/batch_exports/temporary_file.py @@ -243,7 +243,15 @@ def reset(self): BytesSinceLastFlush = int FlushCounter = int FlushCallable = collections.abc.Callable[ - [BatchExportTemporaryFile, RecordsSinceLastFlush, BytesSinceLastFlush, FlushCounter, LastInsertedAt, IsLast], + [ + BatchExportTemporaryFile, + RecordsSinceLastFlush, + BytesSinceLastFlush, + FlushCounter, + LastInsertedAt, + IsLast, + Exception | None, + ], collections.abc.Awaitable[None], ] @@ -306,6 +314,7 @@ def reset_writer_tracking(self): self.bytes_total = 0 self.bytes_since_last_flush = 0 self.flush_counter = 0 + self.error = None @contextlib.asynccontextmanager async def open_temporary_file(self, current_flush_counter: int = 0): @@ -325,6 +334,9 @@ async def open_temporary_file(self, current_flush_counter: int = 0): try: yield + except Exception as e: + self.error = e + raise finally: self.track_bytes_written(temp_file) @@ -401,6 +413,7 @@ async def flush(self, last_inserted_at: dt.datetime, is_last: bool = False) -> N self.flush_counter, last_inserted_at, is_last, + self.error, ) self.batch_export_file.reset() diff --git a/posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py b/posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py index 624708410a220..4c959170dba9e 100644 --- a/posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py +++ b/posthog/temporal/tests/batch_exports/test_s3_batch_export_workflow.py @@ -1,9 +1,12 @@ import asyncio +import contextlib import datetime as dt import functools +import io import json import os import uuid +from unittest import mock import aioboto3 import botocore.exceptions @@ -26,9 +29,11 @@ from posthog.temporal.batch_exports.s3_batch_export import ( FILE_FORMAT_EXTENSIONS, HeartbeatDetails, + IntermittentUploadPartTimeoutError, S3BatchExportInputs, S3BatchExportWorkflow, S3InsertInputs, + S3MultiPartUpload, get_s3_key, insert_into_s3_activity, s3_default_fields, @@ -1251,3 +1256,178 @@ def track_hearbeat_details(*details): data_interval_start=data_interval_start, data_interval_end=data_interval_end, ) + + +async def test_s3_multi_part_upload_raises_retryable_exception(bucket_name, s3_key_prefix): + """Test a retryable exception is raised instead of a `RequestTimeout`. + + Even though they should be retryable, `RequestTimeout`s are wrapped by `ClientError`, which + are all non-retryable. So, we assert our own exception is raised instead. + """ + s3_upload = S3MultiPartUpload( + bucket_name=bucket_name, + key=s3_key_prefix, + encryption=None, + kms_key_id=None, + region_name="us-east-1", + aws_access_key_id="object_storage_root_user", + aws_secret_access_key="object_storage_root_password", + endpoint_url=settings.OBJECT_STORAGE_ENDPOINT, + ) + + async def faulty_upload_part(*args, **kwargs): + raise botocore.exceptions.ClientError( + error_response={ + "Error": {"Code": "RequestTimeout", "Message": "Oh no!"}, + "ResponseMetadata": {"MaxAttemptsReached": True, "RetryAttempts": 2}, # type: ignore + }, + operation_name="UploadPart", + ) + + class FakeSession(aioboto3.Session): + @contextlib.asynccontextmanager + async def client(self, *args, **kwargs): + client = self._session.create_client(*args, **kwargs) + client.upload_part = faulty_upload_part + + yield client + + s3_upload._session = FakeSession() + + with pytest.raises(IntermittentUploadPartTimeoutError): + await s3_upload.upload_part(io.BytesIO(b"1010"), rewind=False) # type: ignore + + +@pytest.mark.parametrize("model", [TEST_S3_MODELS[1], TEST_S3_MODELS[2], None]) +async def test_s3_export_workflow_with_request_timeouts( + clickhouse_client, + ateam, + minio_client, + bucket_name, + interval, + s3_batch_export, + s3_key_prefix, + data_interval_end, + data_interval_start, + model: BatchExportModel | BatchExportSchema | None, + generate_test_data, +): + """Test the S3BatchExport Workflow end-to-end when a `RequestTimeout` occurs. + + We run the S3 batch export workflow with a mocked session that will raise a `ClientError` due + to a `RequestTimeout` on the first run of the batch export. The second run should work normally. + """ + batch_export_schema: BatchExportSchema | None = None + batch_export_model: BatchExportModel | None = None + if isinstance(model, BatchExportModel): + batch_export_model = model + elif model is not None: + batch_export_schema = model + + raised = False + + class FakeSession(aioboto3.Session): + @contextlib.asynccontextmanager + async def client(self, *args, **kwargs): + client = self._session.create_client(*args, **kwargs) + + async with client as client: + original_upload_part = client.upload_part + + async def faulty_upload_part(*args, **kwargs): + nonlocal raised + + if not raised: + raised = True + raise botocore.exceptions.ClientError( + error_response={ + "Error": {"Code": "RequestTimeout", "Message": "Oh no!"}, + "ResponseMetadata": {"MaxAttemptsReached": True, "RetryAttempts": 2}, # type: ignore + }, + operation_name="UploadPart", + ) + else: + return await original_upload_part(*args, **kwargs) + + client.upload_part = faulty_upload_part + + yield client + + workflow_id = str(uuid.uuid4()) + inputs = S3BatchExportInputs( + team_id=ateam.pk, + batch_export_id=str(s3_batch_export.id), + data_interval_end=data_interval_end.isoformat(), + batch_export_model=batch_export_model, + batch_export_schema=batch_export_schema, + interval=interval, + **s3_batch_export.destination.config, + ) + + async with await WorkflowEnvironment.start_time_skipping() as activity_environment: + async with Worker( + activity_environment.client, + task_queue=settings.TEMPORAL_TASK_QUEUE, + workflows=[S3BatchExportWorkflow], + activities=[ + start_batch_export_run, + insert_into_s3_activity, + finish_batch_export_run, + ], + workflow_runner=UnsandboxedWorkflowRunner(), + ): + with mock.patch("posthog.temporal.batch_exports.s3_batch_export.aioboto3.Session", FakeSession): + await activity_environment.client.execute_workflow( + S3BatchExportWorkflow.run, + inputs, + id=workflow_id, + task_queue=settings.TEMPORAL_TASK_QUEUE, + retry_policy=RetryPolicy(maximum_attempts=2), + execution_timeout=dt.timedelta(seconds=10), + ) + + runs = await afetch_batch_export_runs(batch_export_id=s3_batch_export.id) + assert len(runs) == 2 + # Sort by `last_updated_at` as earlier run should be the failed run. + runs.sort(key=lambda r: r.last_updated_at) + + run = runs[0] + (events_to_export_created, persons_to_export_created) = generate_test_data + assert run.status == "FailedRetryable" + assert run.records_completed is None + + run = runs[1] + (events_to_export_created, persons_to_export_created) = generate_test_data + assert run.status == "Completed" + assert run.records_completed == len(events_to_export_created) or run.records_completed == len( + persons_to_export_created + ) + + assert runs[0].data_interval_end == runs[1].data_interval_end + + expected_key_prefix = s3_key_prefix.format( + table=batch_export_model.name if batch_export_model is not None else "events", + year=data_interval_end.year, + # All of these must include leading 0s. + month=data_interval_end.strftime("%m"), + day=data_interval_end.strftime("%d"), + hour=data_interval_end.strftime("%H"), + minute=data_interval_end.strftime("%M"), + second=data_interval_end.strftime("%S"), + ) + + objects = await minio_client.list_objects_v2(Bucket=bucket_name, Prefix=expected_key_prefix) + key = objects["Contents"][0].get("Key") + assert len(objects.get("Contents", [])) == 1 + assert key.startswith(expected_key_prefix) + + await assert_clickhouse_records_in_s3( + s3_compatible_client=minio_client, + clickhouse_client=clickhouse_client, + bucket_name=bucket_name, + key_prefix=expected_key_prefix, + team_id=ateam.pk, + data_interval_start=data_interval_start, + data_interval_end=data_interval_end, + batch_export_model=model, + ) diff --git a/posthog/temporal/tests/batch_exports/test_temporary_file.py b/posthog/temporal/tests/batch_exports/test_temporary_file.py index e9e70579acbd6..4f6ffc8ad0569 100644 --- a/posthog/temporal/tests/batch_exports/test_temporary_file.py +++ b/posthog/temporal/tests/batch_exports/test_temporary_file.py @@ -226,7 +226,13 @@ async def test_jsonl_writer_writes_record_batches(record_batch): inserted_ats_seen: list[LastInsertedAt] = [] async def store_in_memory_on_flush( - batch_export_file, records_since_last_flush, bytes_since_last_flush, flush_counter, last_inserted_at, is_last + batch_export_file, + records_since_last_flush, + bytes_since_last_flush, + flush_counter, + last_inserted_at, + is_last, + error, ): assert writer.records_since_last_flush == record_batch.num_rows in_memory_file_obj.write(batch_export_file.read()) @@ -264,7 +270,13 @@ async def test_csv_writer_writes_record_batches(record_batch): inserted_ats_seen = [] async def store_in_memory_on_flush( - batch_export_file, records_since_last_flush, bytes_since_last_flush, flush_counter, last_inserted_at, is_last + batch_export_file, + records_since_last_flush, + bytes_since_last_flush, + flush_counter, + last_inserted_at, + is_last, + error, ): in_memory_file_obj.write(batch_export_file.read().decode("utf-8")) inserted_ats_seen.append(last_inserted_at) @@ -304,7 +316,13 @@ async def test_parquet_writer_writes_record_batches(record_batch): inserted_ats_seen = [] async def store_in_memory_on_flush( - batch_export_file, records_since_last_flush, bytes_since_last_flush, flush_counter, last_inserted_at, is_last + batch_export_file, + records_since_last_flush, + bytes_since_last_flush, + flush_counter, + last_inserted_at, + is_last, + error, ): in_memory_file_obj.write(batch_export_file.read()) inserted_ats_seen.append(last_inserted_at) From d31143658830152380b2332af5b50b09c20c6349 Mon Sep 17 00:00:00 2001 From: Raquel Smith Date: Wed, 24 Jul 2024 07:35:00 -0700 Subject: [PATCH 26/33] feat: consume existing org invite when using JIT (#23930) --- posthog/api/signup.py | 52 +++++++++++++++++++++---------- posthog/api/test/test_signup.py | 55 ++++++++++++++++++++++++++++++++- 2 files changed, 89 insertions(+), 18 deletions(-) diff --git a/posthog/api/signup.py b/posthog/api/signup.py index 13ea4f9c20625..7cda79d66195d 100644 --- a/posthog/api/signup.py +++ b/posthog/api/signup.py @@ -407,9 +407,9 @@ def process_social_invite_signup(strategy: DjangoStrategy, invite_id: str, email def process_social_domain_jit_provisioning_signup( - email: str, full_name: str, user: Optional[User] = None + strategy: DjangoStrategy, email: str, full_name: str, user: Optional[User] = None ) -> Optional[User]: - # Check if the user is on a allowed domain + # Check if the user is on an allowed domain domain = email.split("@")[-1] try: logger.info(f"process_social_domain_jit_provisioning_signup", domain=domain) @@ -429,19 +429,37 @@ def process_social_domain_jit_provisioning_signup( ) if domain_instance.is_verified and domain_instance.jit_provisioning_enabled: if not user: - user = User.objects.create_and_join( - organization=domain_instance.organization, - email=email, - password=None, - first_name=full_name, - is_email_verified=True, - ) - logger.info( - f"process_social_domain_jit_provisioning_join_complete", - domain=domain, - user=user.email, - organization=domain_instance.organization_id, - ) + try: + invite: OrganizationInvite = OrganizationInvite.objects.get( + target_email=email, organization=domain_instance.organization + ) + invite.validate(user=None, email=email) + + try: + user = strategy.create_user( + email=email, first_name=full_name, password=None, is_email_verified=True + ) + assert isinstance(user, User) # type hinting + invite.use(user, prevalidated=True) + except Exception as e: + capture_exception(e) + message = "Account unable to be created. This account may already exist. Please try again or use different credentials." + raise ValidationError(message, code="unknown", params={"source": "social_create_user"}) + + except OrganizationInvite.DoesNotExist: + user = User.objects.create_and_join( + organization=domain_instance.organization, + email=email, + password=None, + first_name=full_name, + is_email_verified=True, + ) + logger.info( + f"process_social_domain_jit_provisioning_join_complete", + domain=domain, + user=user.email, + organization=domain_instance.organization_id, + ) if not user.organizations.filter(pk=domain_instance.organization_id).exists(): user.join(organization=domain_instance.organization) logger.info( @@ -471,7 +489,7 @@ def social_create_user( user.set_unusable_password() user.is_email_verified = True user.save() - process_social_domain_jit_provisioning_signup(user.email, user.first_name, user) + process_social_domain_jit_provisioning_signup(strategy, user.email, user.first_name, user) return {"is_new": False} backend_processor = "social_create_user" @@ -501,7 +519,7 @@ def social_create_user( else: # JIT Provisioning? - user = process_social_domain_jit_provisioning_signup(email, full_name) + user = process_social_domain_jit_provisioning_signup(strategy, email, full_name) logger.info( f"social_create_user_jit_user", full_name_len=len(full_name), diff --git a/posthog/api/test/test_signup.py b/posthog/api/test/test_signup.py index 2e9ccfe3f5e7f..919f029787483 100644 --- a/posthog/api/test/test_signup.py +++ b/posthog/api/test/test_signup.py @@ -615,7 +615,7 @@ def test_api_social_login_cannot_create_second_organization(self, mock_sso_provi response, "/login?error_code=no_new_organizations" ) # show the user an error; operation not permitted - def run_test_for_allowed_domain(self, mock_sso_providers, mock_request, mock_capture): + def run_test_for_allowed_domain(self, mock_sso_providers, mock_request, mock_capture, use_invite: bool = False): # Make sure Google Auth is valid for this test instance mock_sso_providers.return_value = {"google-oauth2": True} @@ -627,6 +627,18 @@ def run_test_for_allowed_domain(self, mock_sso_providers, mock_request, mock_cap organization=new_org, ) new_project = Team.objects.create(organization=new_org, name="My First Project") + + if use_invite: + private_project: Team = Team.objects.create( + organization=new_org, name="Private Project", access_control=True + ) + OrganizationInvite.objects.create( + target_email="jane@hogflix.posthog.com", + organization=new_org, + first_name="Jane", + level=OrganizationMembership.Level.MEMBER, + private_project_access=[{"id": private_project.id, "level": ExplicitTeamMembership.Level.ADMIN}], + ) user_count = User.objects.count() response = self.client.get(reverse("social:begin", kwargs={"backend": "google-oauth2"})) self.assertEqual(response.status_code, status.HTTP_302_FOUND) @@ -655,6 +667,23 @@ def run_test_for_allowed_domain(self, mock_sso_providers, mock_request, mock_cap ) self.assertFalse(mock_capture.call_args.kwargs["properties"]["is_organization_first_user"]) + if use_invite: + # make sure the org invite no longer exists + self.assertEqual( + OrganizationInvite.objects.filter( + organization=new_org, target_email="jane@hogflix.posthog.com" + ).count(), + 0, + ) + teams = user.teams.all() + # make sure user has access to the private project specified in the invite + self.assertTrue(teams.filter(pk=private_project.pk).exists()) + org_membership = OrganizationMembership.objects.get(organization=new_org, user=user) + explicit_team_membership = ExplicitTeamMembership.objects.get( + team=private_project, parent_membership=org_membership + ) + assert explicit_team_membership.level == ExplicitTeamMembership.Level.ADMIN + @patch("posthoganalytics.capture") @mock.patch("social_core.backends.base.BaseAuth.request") @mock.patch("posthog.api.authentication.get_instance_available_sso_providers") @@ -689,6 +718,30 @@ def test_social_signup_with_allowed_domain_on_cloud( assert mock_update_billing_customer_email.called_once() assert mock_update_billing_admin_emails.called_once() + @patch("posthoganalytics.capture") + @mock.patch("ee.billing.billing_manager.BillingManager.update_billing_distinct_ids") + @mock.patch("ee.billing.billing_manager.BillingManager.update_billing_customer_email") + @mock.patch("ee.billing.billing_manager.BillingManager.update_billing_admin_emails") + @mock.patch("social_core.backends.base.BaseAuth.request") + @mock.patch("posthog.api.authentication.get_instance_available_sso_providers") + @mock.patch("posthog.tasks.user_identify.identify_task") + @pytest.mark.ee + def test_social_signup_with_allowed_domain_on_cloud_with_existing_invite( + self, + mock_identify, + mock_sso_providers, + mock_request, + mock_update_distinct_ids, + mock_update_billing_customer_email, + mock_update_billing_admin_emails, + mock_capture, + ): + with self.is_cloud(True): + self.run_test_for_allowed_domain(mock_sso_providers, mock_request, mock_capture, use_invite=True) + assert mock_update_distinct_ids.called_once() + assert mock_update_billing_customer_email.called_once() + assert mock_update_billing_admin_emails.called_once() + @mock.patch("social_core.backends.base.BaseAuth.request") @mock.patch("posthog.api.authentication.get_instance_available_sso_providers") @pytest.mark.ee From fbe0bcc469769023586db52f5879658cde526bef Mon Sep 17 00:00:00 2001 From: David Newell Date: Wed, 24 Jul 2024 15:37:38 +0100 Subject: [PATCH 27/33] feat: error tracking assignees (#23909) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- ...es-app-errortracking--group-page--dark.png | Bin 93109 -> 94255 bytes ...s-app-errortracking--group-page--light.png | Bin 93296 -> 94463 bytes ...nes-app-errortracking--list-page--dark.png | Bin 35252 -> 40310 bytes ...es-app-errortracking--list-page--light.png | Bin 36093 -> 41131 bytes frontend/src/lib/api.ts | 26 ++++- frontend/src/lib/components/MemberSelect.tsx | 40 +++---- .../lemon-ui/LemonTable/LemonTableLink.tsx | 2 +- .../src/queries/nodes/DataTable/DataTable.tsx | 6 +- .../queries/nodes/DataTable/renderColumn.tsx | 31 ++++-- frontend/src/queries/query.ts | 1 + frontend/src/queries/types.ts | 1 + .../error-tracking/ErrorTrackingActions.tsx | 62 +++++++++++ .../error-tracking/ErrorTrackingFilters.tsx | 89 ++++----------- .../ErrorTrackingGroupScene.tsx | 11 +- .../error-tracking/ErrorTrackingScene.tsx | 104 ++++++++++++------ .../error-tracking/errorTrackingDataLogic.tsx | 44 ++++++++ .../errorTrackingGroupSceneLogic.ts | 14 +-- .../error-tracking/errorTrackingSceneLogic.ts | 24 +++- frontend/src/scenes/error-tracking/queries.ts | 2 +- posthog/api/__init__.py | 10 +- posthog/api/error_tracking.py | 23 ++++ posthog/api/test/test_error_tracking.py | 39 +++++++ .../models/error_tracking/error_tracking.py | 4 +- 23 files changed, 379 insertions(+), 154 deletions(-) create mode 100644 frontend/src/scenes/error-tracking/ErrorTrackingActions.tsx create mode 100644 frontend/src/scenes/error-tracking/errorTrackingDataLogic.tsx create mode 100644 posthog/api/error_tracking.py create mode 100644 posthog/api/test/test_error_tracking.py diff --git a/frontend/__snapshots__/scenes-app-errortracking--group-page--dark.png b/frontend/__snapshots__/scenes-app-errortracking--group-page--dark.png index 4a2a4bfe032653c07114ad1d79f05a446a9b2853..6ced54136d89e0b186086d8eab8fe3ed37ff1edf 100644 GIT binary patch literal 94255 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
    AfX&rDthXK9+a>l{ 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%0AmH)}gjl%Xp4|aD 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 z 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 I&MBb@0DLFKq5uE@ literal 93109 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 F{~KtL#9ROX diff --git a/frontend/__snapshots__/scenes-app-errortracking--list-page--dark.png b/frontend/__snapshots__/scenes-app-errortracking--list-page--dark.png index 3108b395d78fddb795569c803cd4c5b75edb2c50..fda158a90c73f9891699fe176befaa67af499ad9 100644 GIT binary patch literal 40310 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

    |B{PQ(l#j*TbY5Rv9Et?G4zTbT$N&gAc@I0lL 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 literal 35252 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 diff --git a/frontend/__snapshots__/scenes-app-errortracking--list-page--light.png b/frontend/__snapshots__/scenes-app-errortracking--list-page--light.png index 3a44c91f3b34403b9626681a20125d57a1319b40..1070b31f74596ba26ea794f1aac7c46b5b31f492 100644 GIT binary patch literal 41131 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 + ) +} diff --git a/frontend/src/scenes/error-tracking/ErrorTrackingFilters.tsx b/frontend/src/scenes/error-tracking/ErrorTrackingFilters.tsx index 4f10f2459020d..37d5007133f28 100644 --- a/frontend/src/scenes/error-tracking/ErrorTrackingFilters.tsx +++ b/frontend/src/scenes/error-tracking/ErrorTrackingFilters.tsx @@ -1,6 +1,4 @@ -import { LemonSelect } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' -import { DateFilter } from 'lib/components/DateFilter/DateFilter' import { TaxonomicFilterGroupType } from 'lib/components/TaxonomicFilter/types' import UniversalFilters from 'lib/components/UniversalFilters/UniversalFilters' import { universalFiltersLogic } from 'lib/components/UniversalFilters/universalFiltersLogic' @@ -9,76 +7,29 @@ import { useEffect, useState } from 'react' import { TestAccountFilter } from 'scenes/insights/filters/TestAccountFilter' import { errorTrackingLogic } from './errorTrackingLogic' -import { errorTrackingSceneLogic } from './errorTrackingSceneLogic' -export const ErrorTrackingFilters = ({ showOrder = true }: { showOrder?: boolean }): JSX.Element => { - const { dateRange, filterGroup, filterTestAccounts } = useValues(errorTrackingLogic) - const { setDateRange, setFilterGroup, setFilterTestAccounts } = useActions(errorTrackingLogic) - const { order } = useValues(errorTrackingSceneLogic) - const { setOrder } = useActions(errorTrackingSceneLogic) +export const ErrorTrackingFilters = (): JSX.Element => { + const { filterGroup, filterTestAccounts } = useValues(errorTrackingLogic) + const { setFilterGroup, setFilterTestAccounts } = useActions(errorTrackingLogic) return ( -
      -
      -
      - { - setDateRange({ date_from: changedDateFrom, date_to: changedDateTo }) - }} - size="small" - /> - {showOrder && ( - - )} -
      -
      - { - setFilterTestAccounts(filter_test_accounts || false) - }} - /> -
      -
      -
      - - - +
      + + + +
      + { + setFilterTestAccounts(filter_test_accounts || false) + }} + />
      ) diff --git a/frontend/src/scenes/error-tracking/ErrorTrackingGroupScene.tsx b/frontend/src/scenes/error-tracking/ErrorTrackingGroupScene.tsx index 668565b97495c..6009b8f03961e 100644 --- a/frontend/src/scenes/error-tracking/ErrorTrackingGroupScene.tsx +++ b/frontend/src/scenes/error-tracking/ErrorTrackingGroupScene.tsx @@ -1,9 +1,10 @@ import './ErrorTracking.scss' -import { LemonTabs } from '@posthog/lemon-ui' +import { LemonDivider, LemonTabs } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { SceneExport } from 'scenes/sceneTypes' +import { ErrorTrackingActions } from './ErrorTrackingActions' import { ErrorTrackingFilters } from './ErrorTrackingFilters' import { ErrorGroupTab, errorTrackingGroupSceneLogic } from './errorTrackingGroupSceneLogic' import { BreakdownsTab } from './groups/BreakdownsTab' @@ -12,8 +13,8 @@ import { OverviewTab } from './groups/OverviewTab' export const scene: SceneExport = { component: ErrorTrackingGroupScene, logic: errorTrackingGroupSceneLogic, - paramsToProps: ({ params: { id } }): (typeof errorTrackingGroupSceneLogic)['props'] => ({ - id, + paramsToProps: ({ params: { id: fingerprint } }): (typeof errorTrackingGroupSceneLogic)['props'] => ({ + fingerprint, }), } @@ -23,7 +24,9 @@ export function ErrorTrackingGroupScene(): JSX.Element { return (
      - + + + - errorTrackingQuery({ - order, - dateRange, - filterTestAccounts, - filterGroup, - sparklineSelectedPeriod, - }), - [order, dateRange, filterTestAccounts, filterGroup, sparklineSelectedPeriod] - ) + const insightProps: InsightLogicProps = { + dashboardItemId: 'new-ErrorTrackingQuery', + } const context: QueryContext = { columns: { @@ -42,16 +37,24 @@ export function ErrorTrackingScene(): JSX.Element { width: '50%', render: CustomGroupTitleColumn, }, + occurrences: { align: 'center' }, volume: { renderTitle: CustomVolumeColumnHeader }, + assignee: { render: AssigneeColumn, align: 'center' }, }, showOpenEditorButton: false, + insightProps: insightProps, + alwaysRefresh: true, } return ( -
      - - -
      + +
      + + + + +
      +
      ) } @@ -80,19 +83,52 @@ const CustomGroupTitleColumn: QueryContextColumnComponent = (props) => { const record = props.record as ErrorTrackingGroup return ( - -
      {record.description}
      -
      - - | - +
      + +
      {record.description}
      +
      + + | + +
      -
      - } - to={urls.errorTrackingGroup(record.fingerprint)} - /> + } + className="flex-1" + to={urls.errorTrackingGroup(record.fingerprint)} + /> +
      + ) +} + +const AssigneeColumn: QueryContextColumnComponent = (props) => { + const { assignGroup } = useActions(errorTrackingDataLogic) + + const record = props.record as ErrorTrackingGroup + + return ( + { + const assigneeId = user?.id || null + assignGroup(props.recordIndex, assigneeId) + }} + > + {(user) => ( + + ) : ( + + ) + } + /> + )} + ) } diff --git a/frontend/src/scenes/error-tracking/errorTrackingDataLogic.tsx b/frontend/src/scenes/error-tracking/errorTrackingDataLogic.tsx new file mode 100644 index 0000000000000..5f7ad4ee30345 --- /dev/null +++ b/frontend/src/scenes/error-tracking/errorTrackingDataLogic.tsx @@ -0,0 +1,44 @@ +import { actions, connect, kea, listeners, path, props } from 'kea' +import api from 'lib/api' + +import { dataNodeLogic, DataNodeLogicProps } from '~/queries/nodes/DataNode/dataNodeLogic' +import { ErrorTrackingGroup } from '~/queries/schema' + +import type { errorTrackingDataLogicType } from './errorTrackingDataLogicType' + +export interface ErrorTrackingDataLogicProps { + query: DataNodeLogicProps['query'] + key: DataNodeLogicProps['key'] +} + +export const errorTrackingDataLogic = kea([ + path(['scenes', 'error-tracking', 'errorTrackingDataLogic']), + props({} as ErrorTrackingDataLogicProps), + + connect(({ key, query }: ErrorTrackingDataLogicProps) => ({ + values: [dataNodeLogic({ key, query }), ['response']], + actions: [dataNodeLogic({ key, query }), ['setResponse']], + })), + + actions({ + assignGroup: (recordIndex: number, assigneeId: number | null) => ({ + recordIndex, + assigneeId, + }), + }), + + listeners(({ values, actions }) => ({ + assignGroup: async ({ recordIndex, assigneeId }) => { + const response = values.response + if (response) { + const params = { assignee: assigneeId } + const results = values.response?.results as ErrorTrackingGroup[] + const group = { ...results[recordIndex], ...params } + results.splice(recordIndex, 1, group) + // optimistically update local results + actions.setResponse({ ...response, results: results }) + await api.errorTracking.update(group.fingerprint, params) + } + }, + })), +]) diff --git a/frontend/src/scenes/error-tracking/errorTrackingGroupSceneLogic.ts b/frontend/src/scenes/error-tracking/errorTrackingGroupSceneLogic.ts index e5a07b73b03fd..8289707d37d1e 100644 --- a/frontend/src/scenes/error-tracking/errorTrackingGroupSceneLogic.ts +++ b/frontend/src/scenes/error-tracking/errorTrackingGroupSceneLogic.ts @@ -13,7 +13,7 @@ import { errorTrackingLogic } from './errorTrackingLogic' import { errorTrackingGroupQuery } from './queries' export interface ErrorTrackingGroupSceneLogicProps { - id: string + fingerprint: string } export enum ErrorGroupTab { @@ -61,7 +61,7 @@ export const errorTrackingGroupSceneLogic = kea { const response = await api.query( errorTrackingGroupQuery({ - fingerprint: props.id, + fingerprint: props.fingerprint, dateRange: values.dateRange, filterTestAccounts: values.filterTestAccounts, filterGroup: values.filterGroup, @@ -78,8 +78,8 @@ export const errorTrackingGroupSceneLogic = kea [p.id], - (id): Breadcrumb[] => { + (_, p) => [p.fingerprint], + (fingerprint): Breadcrumb[] => { return [ { key: Scene.ErrorTracking, @@ -87,8 +87,8 @@ export const errorTrackingGroupSceneLogic = kea ({ setErrorGroupTab: () => { - const searchParams = {} + const searchParams = router.values.searchParams if (values.errorGroupTab != ErrorGroupTab.Overview) { searchParams['tab'] = values.errorGroupTab diff --git a/frontend/src/scenes/error-tracking/errorTrackingSceneLogic.ts b/frontend/src/scenes/error-tracking/errorTrackingSceneLogic.ts index 5bc91d06a7206..145c047d59648 100644 --- a/frontend/src/scenes/error-tracking/errorTrackingSceneLogic.ts +++ b/frontend/src/scenes/error-tracking/errorTrackingSceneLogic.ts @@ -1,12 +1,18 @@ -import { actions, kea, path, reducers } from 'kea' +import { actions, connect, kea, path, reducers, selectors } from 'kea' -import { ErrorTrackingQuery } from '~/queries/schema' +import { DataTableNode, ErrorTrackingQuery } from '~/queries/schema' +import { errorTrackingLogic } from './errorTrackingLogic' import type { errorTrackingSceneLogicType } from './errorTrackingSceneLogicType' +import { errorTrackingQuery } from './queries' export const errorTrackingSceneLogic = kea([ path(['scenes', 'error-tracking', 'errorTrackingSceneLogic']), + connect({ + values: [errorTrackingLogic, ['dateRange', 'filterTestAccounts', 'filterGroup', 'sparklineSelectedPeriod']], + }), + actions({ setOrder: (order: ErrorTrackingQuery['order']) => ({ order }), }), @@ -19,4 +25,18 @@ export const errorTrackingSceneLogic = kea([ }, ], }), + + selectors({ + query: [ + (s) => [s.order, s.dateRange, s.filterTestAccounts, s.filterGroup, s.sparklineSelectedPeriod], + (order, dateRange, filterTestAccounts, filterGroup, sparklineSelectedPeriod): DataTableNode => + errorTrackingQuery({ + order, + dateRange, + filterTestAccounts, + filterGroup, + sparklineSelectedPeriod, + }), + ], + }), ]) diff --git a/frontend/src/scenes/error-tracking/queries.ts b/frontend/src/scenes/error-tracking/queries.ts index 9124197d14f08..f6f2a49998aa3 100644 --- a/frontend/src/scenes/error-tracking/queries.ts +++ b/frontend/src/scenes/error-tracking/queries.ts @@ -47,7 +47,7 @@ export const errorTrackingQuery = ({ }): DataTableNode => { const select: string[] = [] - const columns = ['error', 'occurrences', 'sessions', 'users'] + const columns = ['error', 'occurrences', 'sessions', 'users', 'assignee'] if (sparklineSelectedPeriod) { const { value, displayAs, offsetHours } = parseSparklineSelection(sparklineSelectedPeriod) diff --git a/posthog/api/__init__.py b/posthog/api/__init__.py index 6ef347008e7fb..4473a35ecaab8 100644 --- a/posthog/api/__init__.py +++ b/posthog/api/__init__.py @@ -23,6 +23,7 @@ comments, dead_letter_queue, early_access_feature, + error_tracking, event_definition, exports, feature_flag, @@ -132,7 +133,7 @@ def api_not_found(request): "project_early_access_feature", ["team_id"], ) -project_surveys_router = projects_router.register(r"surveys", survey.SurveyViewSet, "project_surveys", ["team_id"]) +projects_router.register(r"surveys", survey.SurveyViewSet, "project_surveys", ["team_id"]) projects_router.register( r"dashboard_templates", @@ -396,6 +397,13 @@ def api_not_found(request): ["team_id"], ) +projects_router.register( + r"error_tracking", + error_tracking.ErrorTrackingGroupViewSet, + "project_error_tracking", + ["team_id"], +) + projects_router.register( r"comments", comments.CommentViewSet, diff --git a/posthog/api/error_tracking.py b/posthog/api/error_tracking.py new file mode 100644 index 0000000000000..bdef3cc42ee03 --- /dev/null +++ b/posthog/api/error_tracking.py @@ -0,0 +1,23 @@ +from django.db.models import QuerySet +from rest_framework import serializers, viewsets + +from posthog.api.forbid_destroy_model import ForbidDestroyModel +from posthog.api.routing import TeamAndOrgViewSetMixin +from posthog.models.error_tracking import ErrorTrackingGroup + + +class ErrorTrackingGroupSerializer(serializers.ModelSerializer): + class Meta: + model = ErrorTrackingGroup + fields = ["assignee"] + + +class ErrorTrackingGroupViewSet(TeamAndOrgViewSetMixin, ForbidDestroyModel, viewsets.ModelViewSet): + scope_object = "INTERNAL" + queryset = ErrorTrackingGroup.objects.all() + serializer_class = ErrorTrackingGroupSerializer + + def safely_get_object(self, queryset) -> QuerySet: + fingerprint = self.kwargs["pk"] + group, _ = queryset.get_or_create(fingerprint=fingerprint, team=self.team) + return group diff --git a/posthog/api/test/test_error_tracking.py b/posthog/api/test/test_error_tracking.py new file mode 100644 index 0000000000000..c2d6f74b45785 --- /dev/null +++ b/posthog/api/test/test_error_tracking.py @@ -0,0 +1,39 @@ +from posthog.test.base import APIBaseTest +from posthog.models import Team, ErrorTrackingGroup + + +class TestErrorTracking(APIBaseTest): + def test_reuses_existing_group_for_team(self): + fingerprint = "CustomFingerprint" + ErrorTrackingGroup.objects.create(fingerprint=fingerprint, team=self.team) + + self.assertEqual(ErrorTrackingGroup.objects.count(), 1) + self.client.patch( + f"/api/projects/{self.team.id}/error_tracking/{fingerprint}", + data={"assignee": self.user.id}, + ) + self.assertEqual(ErrorTrackingGroup.objects.count(), 1) + + def test_creates_group_if_not_already_existing_for_team(self): + fingerprint = "CustomFingerprint" + other_team = Team.objects.create(organization=self.organization) + ErrorTrackingGroup.objects.create(fingerprint=fingerprint, team=other_team) + + self.assertEqual(ErrorTrackingGroup.objects.count(), 1) + self.client.patch( + f"/api/projects/{self.team.id}/error_tracking/{fingerprint}", + data={"assignee": self.user.id}, + ) + self.assertEqual(ErrorTrackingGroup.objects.count(), 2) + + def test_can_only_update_allowed_fields(self): + fingerprint = "CustomFingerprint" + other_team = Team.objects.create(organization=self.organization) + group = ErrorTrackingGroup.objects.create(fingerprint=fingerprint, team=other_team) + + self.client.patch( + f"/api/projects/{self.team.id}/error_tracking/{fingerprint}", + data={"fingerprint": "NewFingerprint", "assignee": self.user.id}, + ) + group.refresh_from_db() + self.assertEqual(group.fingerprint, "CustomFingerprint") diff --git a/posthog/models/error_tracking/error_tracking.py b/posthog/models/error_tracking/error_tracking.py index 58e0ad06808b7..9ec2fa296c13d 100644 --- a/posthog/models/error_tracking/error_tracking.py +++ b/posthog/models/error_tracking/error_tracking.py @@ -2,7 +2,7 @@ from django.contrib.postgres.fields import ArrayField from posthog.models.utils import UUIDModel from django.db import transaction -from django.db.models import Q +from django.db.models import Q, QuerySet class ErrorTrackingGroup(UUIDModel): @@ -27,7 +27,7 @@ class Status(models.TextChoices): ) @classmethod - def filter_fingerprints(cls, queryset, fingerprints: list[str]): + def filter_fingerprints(cls, queryset, fingerprints: list[str]) -> QuerySet: query = Q(fingerprint__in=fingerprints) for fp in fingerprints: From 8244fcafd02c4ba50d466cbc0bb503137d53f651 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Oberm=C3=BCller?= Date: Wed, 24 Jul 2024 16:59:16 +0200 Subject: [PATCH 28/33] test(visual): change method to wait for image (#23906) --- .storybook/test-runner.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.storybook/test-runner.ts b/.storybook/test-runner.ts index 24cb830f76ddd..026a3f786ada3 100644 --- a/.storybook/test-runner.ts +++ b/.storybook/test-runner.ts @@ -161,9 +161,8 @@ async function expectStoryToMatchSnapshot( }) // Wait for all images to load - await page.waitForFunction(() => Array.from(document.images).every((i: HTMLImageElement) => i.complete)) await waitForPageReady(page) - await page.waitForLoadState('networkidle') + await page.waitForFunction(() => Array.from(document.images).every((i: HTMLImageElement) => !!i.naturalWidth)) await page.waitForTimeout(2000) await check(page, context, browser, 'light', storyContext.parameters?.testOptions?.snapshotTargetSelector) @@ -174,9 +173,8 @@ async function expectStoryToMatchSnapshot( }) // Wait for all images to load - await page.waitForFunction(() => Array.from(document.images).every((i: HTMLImageElement) => i.complete)) await waitForPageReady(page) - await page.waitForLoadState('networkidle') + await page.waitForFunction(() => Array.from(document.images).every((i: HTMLImageElement) => !!i.naturalWidth)) await page.waitForTimeout(100) await check(page, context, browser, 'dark', storyContext.parameters?.testOptions?.snapshotTargetSelector) From a44a4e3a3cc7366dcd45173bb7e4c585abd80052 Mon Sep 17 00:00:00 2001 From: Tom Owers Date: Wed, 24 Jul 2024 16:11:39 +0100 Subject: [PATCH 29/33] chore(data-warehouse): Adds an updated_at field to warehouse models (#23945) Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> --- latest_migrations.manifest | 2 +- ..._datawarehousetable_updated_at_and_more.py | 32 +++++++++++++ posthog/models/utils.py | 7 +++ .../test_session_recordings.ambr | 48 +++++++++++++++++++ posthog/warehouse/models/external_data_job.py | 4 +- .../warehouse/models/external_data_schema.py | 4 +- .../warehouse/models/external_data_source.py | 4 +- posthog/warehouse/models/table.py | 3 +- 8 files changed, 96 insertions(+), 8 deletions(-) create mode 100644 posthog/migrations/0451_datawarehousetable_updated_at_and_more.py diff --git a/latest_migrations.manifest b/latest_migrations.manifest index e052952856d52..3079c62e846e3 100644 --- a/latest_migrations.manifest +++ b/latest_migrations.manifest @@ -5,7 +5,7 @@ contenttypes: 0002_remove_content_type_name ee: 0016_rolemembership_organization_member otp_static: 0002_throttling otp_totp: 0002_auto_20190420_0723 -posthog: 0450_externaldataschema_sync_frequency_interval_and_more +posthog: 0451_datawarehousetable_updated_at_and_more sessions: 0001_initial social_django: 0010_uid_db_index two_factor: 0007_auto_20201201_1019 diff --git a/posthog/migrations/0451_datawarehousetable_updated_at_and_more.py b/posthog/migrations/0451_datawarehousetable_updated_at_and_more.py new file mode 100644 index 0000000000000..b5ba9d16d99d5 --- /dev/null +++ b/posthog/migrations/0451_datawarehousetable_updated_at_and_more.py @@ -0,0 +1,32 @@ +# Generated by Django 4.2.14 on 2024-07-24 11:20 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("posthog", "0450_externaldataschema_sync_frequency_interval_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="datawarehousetable", + name="updated_at", + field=models.DateTimeField(auto_now=True, null=True, blank=True), + ), + migrations.AddField( + model_name="externaldatajob", + name="updated_at", + field=models.DateTimeField(auto_now=True, null=True, blank=True), + ), + migrations.AddField( + model_name="externaldataschema", + name="updated_at", + field=models.DateTimeField(auto_now=True, null=True, blank=True), + ), + migrations.AddField( + model_name="externaldatasource", + name="updated_at", + field=models.DateTimeField(auto_now=True, null=True, blank=True), + ), + ] diff --git a/posthog/models/utils.py b/posthog/models/utils.py index f16bd09984e13..6bfcc81c30825 100644 --- a/posthog/models/utils.py +++ b/posthog/models/utils.py @@ -146,6 +146,13 @@ class Meta: abstract = True +class UpdatedMetaFields(models.Model): + updated_at: models.DateTimeField = models.DateTimeField(auto_now=True, null=True, blank=True) + + class Meta: + abstract = True + + class DeletedMetaFields(models.Model): deleted: models.BooleanField = models.BooleanField(null=True, blank=True) diff --git a/posthog/session_recordings/test/__snapshots__/test_session_recordings.ambr b/posthog/session_recordings/test/__snapshots__/test_session_recordings.ambr index e1e2bd01a820a..16bc71a7219e4 100644 --- a/posthog/session_recordings/test/__snapshots__/test_session_recordings.ambr +++ b/posthog/session_recordings/test/__snapshots__/test_session_recordings.ambr @@ -474,6 +474,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -518,6 +519,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -652,6 +654,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -696,6 +699,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -1408,6 +1412,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -1452,6 +1457,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -1816,6 +1822,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -1860,6 +1867,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -1931,6 +1939,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -1975,6 +1984,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -2394,6 +2404,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -2438,6 +2449,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -2509,6 +2521,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -2553,6 +2566,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -2935,6 +2949,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -2979,6 +2994,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -3106,6 +3122,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -3150,6 +3167,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -3533,6 +3551,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -3577,6 +3596,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -3648,6 +3668,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -3692,6 +3713,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -3864,6 +3886,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -3908,6 +3931,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -4010,6 +4034,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -4054,6 +4079,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -4415,6 +4441,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -4459,6 +4486,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -4530,6 +4558,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -4574,6 +4603,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -4912,6 +4942,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -4956,6 +4987,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -4992,6 +5024,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -5036,6 +5069,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -5107,6 +5141,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -5151,6 +5186,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -5508,6 +5544,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -5552,6 +5589,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -5641,6 +5679,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -5685,6 +5724,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -6039,6 +6079,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -6083,6 +6124,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -6154,6 +6196,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -6198,6 +6241,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -6257,6 +6301,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -6301,6 +6346,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", @@ -6610,6 +6656,7 @@ ''' SELECT "posthog_datawarehousetable"."created_by_id", "posthog_datawarehousetable"."created_at", + "posthog_datawarehousetable"."updated_at", "posthog_datawarehousetable"."deleted", "posthog_datawarehousetable"."id", "posthog_datawarehousetable"."name", @@ -6654,6 +6701,7 @@ "posthog_datawarehousecredential"."team_id", "posthog_externaldatasource"."created_by_id", "posthog_externaldatasource"."created_at", + "posthog_externaldatasource"."updated_at", "posthog_externaldatasource"."id", "posthog_externaldatasource"."source_id", "posthog_externaldatasource"."connection_id", diff --git a/posthog/warehouse/models/external_data_job.py b/posthog/warehouse/models/external_data_job.py index 488f7ba0f9212..7b7f1cc15e1a8 100644 --- a/posthog/warehouse/models/external_data_job.py +++ b/posthog/warehouse/models/external_data_job.py @@ -2,14 +2,14 @@ from django.db.models import Prefetch from django.conf import settings from posthog.models.team import Team -from posthog.models.utils import CreatedMetaFields, UUIDModel, sane_repr +from posthog.models.utils import CreatedMetaFields, UUIDModel, UpdatedMetaFields, sane_repr from posthog.settings import TEST from posthog.warehouse.s3 import get_s3_client from uuid import UUID from posthog.warehouse.util import database_sync_to_async -class ExternalDataJob(CreatedMetaFields, UUIDModel): +class ExternalDataJob(CreatedMetaFields, UpdatedMetaFields, UUIDModel): class Status(models.TextChoices): RUNNING = "Running", "Running" FAILED = "Failed", "Failed" diff --git a/posthog/warehouse/models/external_data_schema.py b/posthog/warehouse/models/external_data_schema.py index 1303805e01c66..95bfb94a2f624 100644 --- a/posthog/warehouse/models/external_data_schema.py +++ b/posthog/warehouse/models/external_data_schema.py @@ -5,7 +5,7 @@ from django_deprecate_fields import deprecate_field import snowflake.connector from posthog.models.team import Team -from posthog.models.utils import CreatedMetaFields, UUIDModel, sane_repr +from posthog.models.utils import CreatedMetaFields, UUIDModel, UpdatedMetaFields, sane_repr import uuid import psycopg2 import pymysql @@ -21,7 +21,7 @@ from posthog.warehouse.util import database_sync_to_async -class ExternalDataSchema(CreatedMetaFields, UUIDModel): +class ExternalDataSchema(CreatedMetaFields, UpdatedMetaFields, UUIDModel): class Status(models.TextChoices): RUNNING = "Running", "Running" PAUSED = "Paused", "Paused" diff --git a/posthog/warehouse/models/external_data_source.py b/posthog/warehouse/models/external_data_source.py index e6f617f79fbf9..0919362b80a2c 100644 --- a/posthog/warehouse/models/external_data_source.py +++ b/posthog/warehouse/models/external_data_source.py @@ -2,7 +2,7 @@ from django.db import models from posthog.models.team import Team -from posthog.models.utils import CreatedMetaFields, UUIDModel, sane_repr +from posthog.models.utils import CreatedMetaFields, UUIDModel, UpdatedMetaFields, sane_repr from posthog.warehouse.util import database_sync_to_async from uuid import UUID @@ -12,7 +12,7 @@ logger = structlog.get_logger(__name__) -class ExternalDataSource(CreatedMetaFields, UUIDModel): +class ExternalDataSource(CreatedMetaFields, UpdatedMetaFields, UUIDModel): class Type(models.TextChoices): STRIPE = "Stripe", "Stripe" HUBSPOT = "Hubspot", "Hubspot" diff --git a/posthog/warehouse/models/table.py b/posthog/warehouse/models/table.py index a99ed5bcdf0b2..b6454ea379d80 100644 --- a/posthog/warehouse/models/table.py +++ b/posthog/warehouse/models/table.py @@ -13,6 +13,7 @@ CreatedMetaFields, DeletedMetaFields, UUIDModel, + UpdatedMetaFields, sane_repr, ) from posthog.schema import DatabaseSerializedFieldType, HogQLQueryModifiers @@ -65,7 +66,7 @@ def get_queryset(self): ) -class DataWarehouseTable(CreatedMetaFields, UUIDModel, DeletedMetaFields): +class DataWarehouseTable(CreatedMetaFields, UpdatedMetaFields, UUIDModel, DeletedMetaFields): # loading external_data_source and credentials is easily N+1, # so we have a custom object manager meaning people can't forget to load them # this also means we _always_ have two joins whenever we load tables From 50adf3b4aeb7a1826956a8ba0a1d941d67b27a87 Mon Sep 17 00:00:00 2001 From: Neil Kakkar Date: Wed, 24 Jul 2024 16:40:09 +0100 Subject: [PATCH 30/33] feat(flags): Fetch flags and team from database (#23120) Co-authored-by: Dylan Martin Co-authored-by: James Greenhill --- .github/workflows/ci-plugin-server.yml | 2 +- .github/workflows/rust.yml | 62 +++++- .../commands/setup_test_environment.py | 10 + rust/Cargo.lock | 2 + rust/feature-flags/Cargo.toml | 4 +- rust/feature-flags/README.md | 17 ++ rust/feature-flags/src/api.rs | 60 +++++- rust/feature-flags/src/config.rs | 90 ++++++++- rust/feature-flags/src/database.rs | 98 +++++++++ rust/feature-flags/src/flag_definitions.rs | 143 ++++++++++--- rust/feature-flags/src/flag_matching.rs | 189 ++++++++++++++++-- rust/feature-flags/src/lib.rs | 1 + rust/feature-flags/src/router.rs | 49 ++++- rust/feature-flags/src/server.rs | 24 ++- rust/feature-flags/src/team.rs | 83 ++++++-- rust/feature-flags/src/test_utils.rs | 157 ++++++++++++++- rust/feature-flags/tests/common/mod.rs | 12 -- .../tests/test_flag_matching_consistency.rs | 16 +- rust/feature-flags/tests/test_flags.rs | 5 +- 19 files changed, 914 insertions(+), 110 deletions(-) create mode 100644 rust/feature-flags/src/database.rs diff --git a/.github/workflows/ci-plugin-server.yml b/.github/workflows/ci-plugin-server.yml index a62bd4a66851a..55b071a49b02a 100644 --- a/.github/workflows/ci-plugin-server.yml +++ b/.github/workflows/ci-plugin-server.yml @@ -44,7 +44,7 @@ jobs: - 'plugin-server/**' - 'posthog/clickhouse/migrations/**' - 'ee/migrations/**' - - 'ee/management/commands/setup_test_environment.py' + - 'posthog/management/commands/setup_test_environment.py' - 'posthog/migrations/**' - 'posthog/plugins/**' - 'docker*.yml' diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index a6ab35daa8d3b..3624e6c028c0f 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -34,6 +34,9 @@ jobs: - '.github/workflows/rust.yml' - '.github/workflows/rust-docker-build.yml' - '.github/workflows/rust-hook-migrator-docker.yml' + - 'posthog/management/commands/setup_test_environment.py' + - 'posthog/migrations/**' + - 'ee/migrations/**' build: name: Build rust services @@ -73,6 +76,11 @@ jobs: test: name: Test rust services + strategy: + matrix: + package: + - feature-flags + - others needs: changes runs-on: depot-ubuntu-22.04-4 timeout-minutes: 10 @@ -86,11 +94,15 @@ jobs: # Use sparse checkout to only select files in rust directory # Turning off cone mode ensures that files in the project root are not included during checkout - uses: actions/checkout@v3 - if: needs.changes.outputs.rust == 'true' + if: needs.changes.outputs.rust == 'true' && matrix.package == 'others' with: sparse-checkout: 'rust/' sparse-checkout-cone-mode: false + # For flags checkout entire repository + - uses: actions/checkout@v3 + if: needs.changes.outputs.rust == 'true' && matrix.package == 'feature-flags' + - name: Login to DockerHub if: needs.changes.outputs.rust == 'true' uses: docker/login-action@v2 @@ -99,8 +111,15 @@ jobs: username: posthog password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Setup main repo dependencies for flags + if: needs.changes.outputs.rust == 'true' && matrix.package == 'feature-flags' + run: | + docker compose -f ../docker-compose.dev.yml down + docker compose -f ../docker-compose.dev.yml up -d + echo "127.0.0.1 kafka" | sudo tee -a /etc/hosts + - name: Setup dependencies - if: needs.changes.outputs.rust == 'true' + if: needs.changes.outputs.rust == 'true' && matrix.package == 'others' run: | docker compose up kafka redis db echo_server -d --wait docker compose up setup_test_db @@ -119,9 +138,46 @@ jobs: rust/target key: ${ runner.os }-cargo-debug-${{ hashFiles('**/Cargo.lock') }} + - name: Set up Python + if: needs.changes.outputs.rust == 'true' && matrix.package == 'feature-flags' + uses: actions/setup-python@v5 + with: + python-version: 3.11.9 + cache: 'pip' + cache-dependency-path: '**/requirements*.txt' + token: ${{ secrets.POSTHOG_BOT_GITHUB_TOKEN }} + + # uv is a fast pip alternative: https://github.com/astral-sh/uv/ + - run: pip install uv + if: needs.changes.outputs.rust == 'true' && matrix.package == 'feature-flags' + + - name: Install SAML (python3-saml) dependencies + if: needs.changes.outputs.rust == 'true' && matrix.package == 'feature-flags' + run: | + sudo apt-get update + sudo apt-get install libxml2-dev libxmlsec1-dev libxmlsec1-openssl + + - name: Install python dependencies + if: needs.changes.outputs.rust == 'true' && matrix.package == 'feature-flags' + run: | + uv pip install --system -r ../requirements-dev.txt + uv pip install --system -r ../requirements.txt + + - name: Set up databases + if: needs.changes.outputs.rust == 'true' && matrix.package == 'feature-flags' + env: + DEBUG: 'true' + TEST: 'true' + SECRET_KEY: 'abcdef' # unsafe - for testing only + DATABASE_URL: 'postgres://posthog:posthog@localhost:5432/posthog' + run: cd ../ && python manage.py setup_test_environment --only-postgres + - name: Run cargo test if: needs.changes.outputs.rust == 'true' - run: cargo test --all-features + run: | + echo "Starting cargo test" + cargo test --all-features ${{ matrix.package == 'feature-flags' && '--package feature-flags' || '--workspace --exclude feature-flags' }} + echo "Cargo test completed" linting: name: Lint rust services diff --git a/posthog/management/commands/setup_test_environment.py b/posthog/management/commands/setup_test_environment.py index 39549ec864e6d..07c39f6ce6414 100644 --- a/posthog/management/commands/setup_test_environment.py +++ b/posthog/management/commands/setup_test_environment.py @@ -26,6 +26,12 @@ class Command(BaseCommand): help = "Set up databases for non-Python tests that depend on the Django server" + # has optional arg to only run postgres setup + def add_arguments(self, parser): + parser.add_argument( + "--only-postgres", action="store_true", help="Only set up the Postgres database", default=False + ) + def handle(self, *args, **options): if not TEST: raise ValueError("TEST environment variable needs to be set for this command to function") @@ -36,6 +42,10 @@ def handle(self, *args, **options): test_runner.setup_databases() test_runner.setup_test_environment() + if options["only_postgres"]: + print("Only setting up Postgres database") # noqa: T201 + return + print("\nCreating test ClickHouse database...") # noqa: T201 database = Database( CLICKHOUSE_DATABASE, diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 3617bee588a41..15c2210f61fb5 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -1049,10 +1049,12 @@ dependencies = [ "serde-pickle", "serde_json", "sha1", + "sqlx", "thiserror", "tokio", "tracing", "tracing-subscriber", + "uuid", ] [[package]] diff --git a/rust/feature-flags/Cargo.toml b/rust/feature-flags/Cargo.toml index 08ff21eaed0d8..e4d51dc308d34 100644 --- a/rust/feature-flags/Cargo.toml +++ b/rust/feature-flags/Cargo.toml @@ -15,6 +15,7 @@ tokio = { workspace = true } tracing = { workspace = true } tracing-subscriber = { workspace = true, features = ["env-filter"] } bytes = { workspace = true } +once_cell = "1.18.0" rand = { workspace = true } redis = { version = "0.23.3", features = [ "tokio-comp", @@ -27,12 +28,13 @@ thiserror = { workspace = true } serde-pickle = { version = "1.1.1"} sha1 = "0.10.6" regex = "1.10.4" +sqlx = { workspace = true } +uuid = { workspace = true } [lints] workspace = true [dev-dependencies] assert-json-diff = { workspace = true } -once_cell = "1.18.0" reqwest = { workspace = true } diff --git a/rust/feature-flags/README.md b/rust/feature-flags/README.md index 1c9500900aade..efce036124524 100644 --- a/rust/feature-flags/README.md +++ b/rust/feature-flags/README.md @@ -1,6 +1,23 @@ # Testing +First, make sure docker compose is running (from main posthog repo), and test database exists: + +``` +docker compose -f ../docker-compose.dev.yml up -d +``` + +``` +TEST=1 python manage.py setup_test_environment --only-postgres +``` + +We only need to run the above once, when the test database is created. + +TODO: Would be nice to make the above automatic. + + +Then, run the tests: + ``` cargo test --package feature-flags ``` diff --git a/rust/feature-flags/src/api.rs b/rust/feature-flags/src/api.rs index ccf4735e5b04a..2caae80bf9af6 100644 --- a/rust/feature-flags/src/api.rs +++ b/rust/feature-flags/src/api.rs @@ -5,6 +5,9 @@ use axum::response::{IntoResponse, Response}; use serde::{Deserialize, Serialize}; use thiserror::Error; +use crate::database::CustomDatabaseError; +use crate::redis::CustomRedisError; + #[derive(Debug, PartialEq, Eq, Deserialize, Serialize)] pub enum FlagsResponseCode { Ok = 1, @@ -42,6 +45,14 @@ pub enum FlagError { DataParsingError, #[error("redis unavailable")] RedisUnavailable, + #[error("database unavailable")] + DatabaseUnavailable, + #[error("Timed out while fetching data")] + TimeoutError, + // TODO: Consider splitting top-level errors (that are returned to the client) + // and FlagMatchingError, like timeouterror which we can gracefully handle. + // This will make the `into_response` a lot clearer as well, since it wouldn't + // have arbitrary errors that actually never make it to the client. } impl IntoResponse for FlagError { @@ -58,10 +69,53 @@ impl IntoResponse for FlagError { FlagError::RateLimited => (StatusCode::TOO_MANY_REQUESTS, self.to_string()), - FlagError::DataParsingError | FlagError::RedisUnavailable => { - (StatusCode::SERVICE_UNAVAILABLE, self.to_string()) - } + FlagError::DataParsingError + | FlagError::RedisUnavailable + | FlagError::DatabaseUnavailable + | FlagError::TimeoutError => (StatusCode::SERVICE_UNAVAILABLE, self.to_string()), } .into_response() } } + +impl From for FlagError { + fn from(e: CustomRedisError) -> Self { + match e { + CustomRedisError::NotFound => FlagError::TokenValidationError, + CustomRedisError::PickleError(e) => { + tracing::error!("failed to fetch data: {}", e); + FlagError::DataParsingError + } + CustomRedisError::Timeout(_) => FlagError::TimeoutError, + CustomRedisError::Other(e) => { + tracing::error!("Unknown redis error: {}", e); + FlagError::RedisUnavailable + } + } + } +} + +impl From for FlagError { + fn from(e: CustomDatabaseError) -> Self { + match e { + CustomDatabaseError::NotFound => FlagError::TokenValidationError, + CustomDatabaseError::Other(_) => { + tracing::error!("failed to get connection: {}", e); + FlagError::DatabaseUnavailable + } + CustomDatabaseError::Timeout(_) => FlagError::TimeoutError, + } + } +} + +impl From for FlagError { + fn from(e: sqlx::Error) -> Self { + // TODO: Be more precise with error handling here + tracing::error!("sqlx error: {}", e); + println!("sqlx error: {}", e); + match e { + sqlx::Error::RowNotFound => FlagError::TokenValidationError, + _ => FlagError::DatabaseUnavailable, + } + } +} diff --git a/rust/feature-flags/src/config.rs b/rust/feature-flags/src/config.rs index cc7ad37bf72c1..d9e1bf06b1ee3 100644 --- a/rust/feature-flags/src/config.rs +++ b/rust/feature-flags/src/config.rs @@ -1,16 +1,17 @@ -use std::net::SocketAddr; - use envconfig::Envconfig; +use once_cell::sync::Lazy; +use std::net::SocketAddr; +use std::str::FromStr; -#[derive(Envconfig, Clone)] +#[derive(Envconfig, Clone, Debug)] pub struct Config { #[envconfig(default = "127.0.0.1:3001")] pub address: SocketAddr, - #[envconfig(default = "postgres://posthog:posthog@localhost:15432/test_database")] + #[envconfig(default = "postgres://posthog:posthog@localhost:5432/test_posthog")] pub write_database_url: String, - #[envconfig(default = "postgres://posthog:posthog@localhost:15432/test_database")] + #[envconfig(default = "postgres://posthog:posthog@localhost:5432/test_posthog")] pub read_database_url: String, #[envconfig(default = "1024")] @@ -21,4 +22,83 @@ pub struct Config { #[envconfig(default = "redis://localhost:6379/")] pub redis_url: String, + + #[envconfig(default = "1")] + pub acquire_timeout_secs: u64, +} + +impl Config { + pub fn default_test_config() -> Self { + Self { + address: SocketAddr::from_str("127.0.0.1:0").unwrap(), + redis_url: "redis://localhost:6379/".to_string(), + write_database_url: "postgres://posthog:posthog@localhost:5432/test_posthog" + .to_string(), + read_database_url: "postgres://posthog:posthog@localhost:5432/test_posthog".to_string(), + max_concurrent_jobs: 1024, + max_pg_connections: 100, + acquire_timeout_secs: 1, + } + } +} + +pub static DEFAULT_TEST_CONFIG: Lazy = Lazy::new(Config::default_test_config); + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_default_config() { + let config = Config::init_from_env().unwrap(); + assert_eq!( + config.address, + SocketAddr::from_str("127.0.0.1:3001").unwrap() + ); + assert_eq!( + config.write_database_url, + "postgres://posthog:posthog@localhost:5432/test_posthog" + ); + assert_eq!( + config.read_database_url, + "postgres://posthog:posthog@localhost:5432/test_posthog" + ); + assert_eq!(config.max_concurrent_jobs, 1024); + assert_eq!(config.max_pg_connections, 100); + assert_eq!(config.redis_url, "redis://localhost:6379/"); + } + + #[test] + fn test_default_test_config() { + let config = Config::default_test_config(); + assert_eq!(config.address, SocketAddr::from_str("127.0.0.1:0").unwrap()); + assert_eq!( + config.write_database_url, + "postgres://posthog:posthog@localhost:5432/test_posthog" + ); + assert_eq!( + config.read_database_url, + "postgres://posthog:posthog@localhost:5432/test_posthog" + ); + assert_eq!(config.max_concurrent_jobs, 1024); + assert_eq!(config.max_pg_connections, 100); + assert_eq!(config.redis_url, "redis://localhost:6379/"); + } + + #[test] + fn test_default_test_config_static() { + let config = &*DEFAULT_TEST_CONFIG; + assert_eq!(config.address, SocketAddr::from_str("127.0.0.1:0").unwrap()); + assert_eq!( + config.write_database_url, + "postgres://posthog:posthog@localhost:5432/test_posthog" + ); + assert_eq!( + config.read_database_url, + "postgres://posthog:posthog@localhost:5432/test_posthog" + ); + assert_eq!(config.max_concurrent_jobs, 1024); + assert_eq!(config.max_pg_connections, 100); + assert_eq!(config.redis_url, "redis://localhost:6379/"); + } } diff --git a/rust/feature-flags/src/database.rs b/rust/feature-flags/src/database.rs new file mode 100644 index 0000000000000..29360d22b9444 --- /dev/null +++ b/rust/feature-flags/src/database.rs @@ -0,0 +1,98 @@ +use std::time::Duration; + +use anyhow::Result; +use async_trait::async_trait; +use sqlx::{ + pool::PoolConnection, + postgres::{PgPoolOptions, PgRow}, + Postgres, +}; +use thiserror::Error; +use tokio::time::timeout; + +use crate::config::Config; + +const DATABASE_TIMEOUT_MILLISECS: u64 = 1000; + +#[derive(Error, Debug)] +pub enum CustomDatabaseError { + #[error("Not found in database")] + NotFound, + + #[error("Pg error: {0}")] + Other(#[from] sqlx::Error), + + #[error("Timeout error")] + Timeout(#[from] tokio::time::error::Elapsed), +} + +/// A simple db wrapper +/// Supports running any arbitrary query with a timeout. +/// TODO: Make sqlx prepared statements work with pgbouncer, potentially by setting pooling mode to session. +#[async_trait] +pub trait Client { + async fn get_connection(&self) -> Result, CustomDatabaseError>; + async fn run_query( + &self, + query: String, + parameters: Vec, + timeout_ms: Option, + ) -> Result, CustomDatabaseError>; +} + +pub struct PgClient { + pool: sqlx::PgPool, +} + +impl PgClient { + pub async fn new_read_client(config: &Config) -> Result { + let pool = PgPoolOptions::new() + .max_connections(config.max_pg_connections) + .acquire_timeout(Duration::from_secs(1)) + .test_before_acquire(true) + .connect(&config.read_database_url) + .await?; + + Ok(PgClient { pool }) + } + + pub async fn new_write_client(config: &Config) -> Result { + let pool = PgPoolOptions::new() + .max_connections(config.max_pg_connections) + .acquire_timeout(Duration::from_secs(1)) + .test_before_acquire(true) + .connect(&config.write_database_url) + .await?; + + Ok(PgClient { pool }) + } +} + +#[async_trait] +impl Client for PgClient { + async fn run_query( + &self, + query: String, + parameters: Vec, + timeout_ms: Option, + ) -> Result, CustomDatabaseError> { + let built_query = sqlx::query(&query); + let built_query = parameters + .iter() + .fold(built_query, |acc, param| acc.bind(param)); + let query_results = built_query.fetch_all(&self.pool); + + let timeout_ms = match timeout_ms { + Some(ms) => ms, + None => DATABASE_TIMEOUT_MILLISECS, + }; + + let fut = timeout(Duration::from_secs(timeout_ms), query_results).await?; + + Ok(fut?) + } + + async fn get_connection(&self) -> Result, CustomDatabaseError> { + Ok(self.pool.acquire().await?) + } +} diff --git a/rust/feature-flags/src/flag_definitions.rs b/rust/feature-flags/src/flag_definitions.rs index fbbd0445b5998..cc208ae8b073f 100644 --- a/rust/feature-flags/src/flag_definitions.rs +++ b/rust/feature-flags/src/flag_definitions.rs @@ -1,11 +1,8 @@ -use serde::Deserialize; +use serde::{Deserialize, Serialize}; use std::sync::Arc; use tracing::instrument; -use crate::{ - api::FlagError, - redis::{Client, CustomRedisError}, -}; +use crate::{api::FlagError, database::Client as DatabaseClient, redis::Client as RedisClient}; // TRICKY: This cache data is coming from django-redis. If it ever goes out of sync, we'll bork. // TODO: Add integration tests across repos to ensure this doesn't happen. @@ -46,7 +43,7 @@ pub struct PropertyFilter { pub operator: Option, #[serde(rename = "type")] pub prop_type: String, - pub group_type_index: Option, + pub group_type_index: Option, } #[derive(Debug, Clone, Deserialize)] @@ -74,15 +71,15 @@ pub struct MultivariateFlagOptions { pub struct FlagFilters { pub groups: Vec, pub multivariate: Option, - pub aggregation_group_type_index: Option, + pub aggregation_group_type_index: Option, pub payloads: Option, pub super_groups: Option>, } #[derive(Debug, Clone, Deserialize)] pub struct FeatureFlag { - pub id: i64, - pub team_id: i64, + pub id: i32, + pub team_id: i32, pub name: Option, pub key: String, pub filters: FlagFilters, @@ -94,8 +91,20 @@ pub struct FeatureFlag { pub ensure_experience_continuity: bool, } +#[derive(Debug, Serialize, sqlx::FromRow)] +pub struct FeatureFlagRow { + pub id: i32, + pub team_id: i32, + pub name: Option, + pub key: String, + pub filters: serde_json::Value, + pub deleted: bool, + pub active: bool, + pub ensure_experience_continuity: bool, +} + impl FeatureFlag { - pub fn get_group_type_index(&self) -> Option { + pub fn get_group_type_index(&self) -> Option { self.filters.aggregation_group_type_index } @@ -121,27 +130,13 @@ impl FeatureFlagList { /// Returns feature flags from redis given a team_id #[instrument(skip_all)] pub async fn from_redis( - client: Arc, - team_id: i64, + client: Arc, + team_id: i32, ) -> Result { // TODO: Instead of failing here, i.e. if not in redis, fallback to pg let serialized_flags = client .get(format!("{TEAM_FLAGS_CACHE_PREFIX}{}", team_id)) - .await - .map_err(|e| match e { - CustomRedisError::NotFound => FlagError::TokenValidationError, - CustomRedisError::PickleError(_) => { - // TODO: Implement From trait for FlagError so we don't need to map - // CustomRedisError ourselves - tracing::error!("failed to fetch data: {}", e); - println!("failed to fetch data: {}", e); - FlagError::DataParsingError - } - _ => { - tracing::error!("Unknown redis error: {}", e); - FlagError::RedisUnavailable - } - })?; + .await?; let flags_list: Vec = serde_json::from_str(&serialized_flags).map_err(|e| { @@ -153,13 +148,45 @@ impl FeatureFlagList { Ok(FeatureFlagList { flags: flags_list }) } + + /// Returns feature flags from postgres given a team_id + #[instrument(skip_all)] + pub async fn from_pg( + client: Arc, + team_id: i32, + ) -> Result { + let mut conn = client.get_connection().await?; + // TODO: Clean up error handling here + + let query = "SELECT id, team_id, name, key, filters, deleted, active, ensure_experience_continuity FROM posthog_featureflag WHERE team_id = $1"; + let flags_row = sqlx::query_as::<_, FeatureFlagRow>(query) + .bind(team_id) + .fetch_all(&mut *conn) + .await?; + + let serialized_flags = serde_json::to_string(&flags_row).map_err(|e| { + tracing::error!("failed to serialize flags: {}", e); + println!("failed to serialize flags: {}", e); + FlagError::DataParsingError + })?; + + let flags_list: Vec = + serde_json::from_str(&serialized_flags).map_err(|e| { + tracing::error!("failed to parse data to flags list: {}", e); + println!("failed to parse data: {}", e); + + FlagError::DataParsingError + })?; + Ok(FeatureFlagList { flags: flags_list }) + } } #[cfg(test)] mod tests { use super::*; use crate::test_utils::{ - insert_flags_for_team_in_redis, insert_new_team_in_redis, setup_redis_client, + insert_flags_for_team_in_pg, insert_flags_for_team_in_redis, insert_new_team_in_pg, + insert_new_team_in_redis, setup_pg_client, setup_redis_client, }; #[tokio::test] @@ -211,4 +238,64 @@ mod tests { _ => panic!("Expected RedisUnavailable"), }; } + + #[tokio::test] + async fn test_fetch_flags_from_pg() { + let client = setup_pg_client(None).await; + + let team = insert_new_team_in_pg(client.clone()) + .await + .expect("Failed to insert team in pg"); + + insert_flags_for_team_in_pg(client.clone(), team.id, None) + .await + .expect("Failed to insert flags"); + + let flags_from_pg = FeatureFlagList::from_pg(client.clone(), team.id) + .await + .expect("Failed to fetch flags from pg"); + + assert_eq!(flags_from_pg.flags.len(), 1); + let flag = flags_from_pg.flags.get(0).expect("Flags should be in pg"); + + assert_eq!(flag.key, "flag1"); + assert_eq!(flag.team_id, team.id); + assert_eq!(flag.filters.groups.len(), 1); + assert_eq!( + flag.filters.groups[0] + .properties + .as_ref() + .expect("Properties don't exist on flag") + .len(), + 1 + ); + let property_filter = &flag.filters.groups[0] + .properties + .as_ref() + .expect("Properties don't exist on flag")[0]; + + assert_eq!(property_filter.key, "email"); + assert_eq!(property_filter.value, "a@b.com"); + assert_eq!(property_filter.operator, None); + assert_eq!(property_filter.prop_type, "person"); + assert_eq!(property_filter.group_type_index, None); + assert_eq!(flag.filters.groups[0].rollout_percentage, Some(50.0)); + } + + // TODO: Add more tests to validate deserialization of flags. + // TODO: Also make sure old flag data is handled, or everything is migrated to new style in production + + #[tokio::test] + async fn test_fetch_empty_team_from_pg() { + let client = setup_pg_client(None).await; + + match FeatureFlagList::from_pg(client.clone(), 1234) + .await + .expect("Failed to fetch flags from pg") + { + FeatureFlagList { flags } => { + assert_eq!(flags.len(), 0); + } + } + } } diff --git a/rust/feature-flags/src/flag_matching.rs b/rust/feature-flags/src/flag_matching.rs index 510fc153dc87a..485d8a646e823 100644 --- a/rust/feature-flags/src/flag_matching.rs +++ b/rust/feature-flags/src/flag_matching.rs @@ -1,6 +1,12 @@ -use crate::flag_definitions::{FeatureFlag, FlagGroupType}; +use crate::{ + api::FlagError, + database::Client as DatabaseClient, + flag_definitions::{FeatureFlag, FlagGroupType}, + property_matching::match_property, +}; +use serde_json::Value; use sha1::{Digest, Sha1}; -use std::fmt::Write; +use std::{collections::HashMap, fmt::Write, sync::Arc}; #[derive(Debug, PartialEq, Eq)] pub struct FeatureFlagMatch { @@ -11,6 +17,11 @@ pub struct FeatureFlagMatch { //payload } +#[derive(Debug, sqlx::FromRow)] +pub struct Person { + pub properties: sqlx::types::Json>, +} + // TODO: Rework FeatureFlagMatcher - python has a pretty awkward interface, where we pass in all flags, and then again // the flag to match. I don't think there's any reason anymore to store the flags in the matcher, since we can just // pass the flag to match directly to the get_match method. This will also make the matcher more stateless. @@ -21,23 +32,30 @@ pub struct FeatureFlagMatch { // for all teams. If not, we can have a LRU cache, or a cache that stores only the most recent N keys. // But, this can be a future refactor, for now just focusing on getting the basic matcher working, write lots and lots of tests // and then we can easily refactor stuff around. -#[derive(Debug)] +// #[derive(Debug)] pub struct FeatureFlagMatcher { // pub flags: Vec, pub distinct_id: String, + pub database_client: Option>, + cached_properties: Option>, } const LONG_SCALE: u64 = 0xfffffffffffffff; impl FeatureFlagMatcher { - pub fn new(distinct_id: String) -> Self { + pub fn new( + distinct_id: String, + database_client: Option>, + ) -> Self { FeatureFlagMatcher { // flags, distinct_id, + database_client, + cached_properties: None, } } - pub fn get_match(&self, feature_flag: &FeatureFlag) -> FeatureFlagMatch { + pub async fn get_match(&mut self, feature_flag: &FeatureFlag) -> FeatureFlagMatch { if self.hashed_identifier(feature_flag).is_none() { return FeatureFlagMatch { matches: false, @@ -49,8 +67,9 @@ impl FeatureFlagMatcher { // TODO: Variant overrides condition sort for (index, condition) in feature_flag.get_conditions().iter().enumerate() { - let (is_match, _evaluation_reason) = - self.is_condition_match(feature_flag, condition, index); + let (is_match, _evaluation_reason) = self + .is_condition_match(feature_flag, condition, index) + .await; if is_match { // TODO: This is a bit awkward, we should handle overrides only when variants exist. @@ -82,20 +101,33 @@ impl FeatureFlagMatcher { } } - pub fn is_condition_match( - &self, + // TODO: Making all this mutable just to store a cached value is annoying. Can I refactor this to be non-mutable? + // Leaning a bit more towards a separate cache store for this. + pub async fn is_condition_match( + &mut self, feature_flag: &FeatureFlag, condition: &FlagGroupType, _index: usize, ) -> (bool, String) { let rollout_percentage = condition.rollout_percentage.unwrap_or(100.0); let mut condition_match = true; - if condition.properties.is_some() { - // TODO: Handle matching conditions - if !condition.properties.as_ref().unwrap().is_empty() { - condition_match = false; + + if let Some(ref properties) = condition.properties { + if properties.is_empty() { + condition_match = true; + } else { + // TODO: First handle given override properties before going to db + let target_properties = self + .get_person_properties(feature_flag.team_id, self.distinct_id.clone()) + .await + .unwrap_or_default(); + // TODO: Handle db issues / person not found + + condition_match = properties.iter().all(|property| { + match_property(property, &target_properties, false).unwrap_or(false) + }); } - } + }; if !condition_match { return (false, "NO_CONDITION_MATCH".to_string()); @@ -157,4 +189,133 @@ impl FeatureFlagMatcher { } None } + + pub async fn get_person_properties( + &mut self, + team_id: i32, + distinct_id: String, + ) -> Result, FlagError> { + // TODO: Do we even need to cache here anymore? + // Depends on how often we're calling this function + // to match all flags for a single person + + if let Some(cached_props) = self.cached_properties.clone() { + // TODO: Maybe we don't want to copy around all user properties, this will by far be the largest chunk + // of data we're copying around. Can we work with references here? + // Worst case, just use a Rc. + return Ok(cached_props); + } + + if self.database_client.is_none() { + return Err(FlagError::DatabaseUnavailable); + } + + let mut conn = self + .database_client + .as_ref() + .expect("client should exist here") + .get_connection() + .await?; + + let query = r#" + SELECT "posthog_person"."properties" + FROM "posthog_person" + INNER JOIN "posthog_persondistinctid" ON ("posthog_person"."id" = "posthog_persondistinctid"."person_id") + WHERE ("posthog_persondistinctid"."distinct_id" = $1 + AND "posthog_persondistinctid"."team_id" = $2 + AND "posthog_person"."team_id" = $3) + LIMIT 1; + "#; + + let row = sqlx::query_as::<_, Person>(query) + .bind(&distinct_id) + .bind(team_id) + .bind(team_id) + .fetch_optional(&mut *conn) + .await?; + + let props = match row { + Some(row) => row.properties.0, + None => HashMap::new(), + }; + + self.cached_properties = Some(props.clone()); + + Ok(props) + } +} + +#[cfg(test)] +mod tests { + + use serde_json::json; + + use super::*; + use crate::test_utils::{insert_new_team_in_pg, insert_person_for_team_in_pg, setup_pg_client}; + + #[tokio::test] + async fn test_fetch_properties_from_pg_to_match() { + let client = setup_pg_client(None).await; + + let team = insert_new_team_in_pg(client.clone()) + .await + .expect("Failed to insert team in pg"); + + let distinct_id = "user_distinct_id".to_string(); + insert_person_for_team_in_pg(client.clone(), team.id, distinct_id.clone(), None) + .await + .expect("Failed to insert person"); + + let not_matching_distinct_id = "not_matching_distinct_id".to_string(); + insert_person_for_team_in_pg( + client.clone(), + team.id, + not_matching_distinct_id.clone(), + Some(json!({ "email": "a@x.com"})), + ) + .await + .expect("Failed to insert person"); + + let flag = serde_json::from_value(json!( + { + "id": 1, + "team_id": team.id, + "name": "flag1", + "key": "flag1", + "filters": { + "groups": [ + { + "properties": [ + { + "key": "email", + "value": "a@b.com", + "type": "person" + } + ], + "rollout_percentage": 100 + } + ] + } + } + )) + .unwrap(); + + let mut matcher = FeatureFlagMatcher::new(distinct_id, Some(client.clone())); + let match_result = matcher.get_match(&flag).await; + assert_eq!(match_result.matches, true); + assert_eq!(match_result.variant, None); + + // property value is different + let mut matcher = FeatureFlagMatcher::new(not_matching_distinct_id, Some(client.clone())); + let match_result = matcher.get_match(&flag).await; + assert_eq!(match_result.matches, false); + assert_eq!(match_result.variant, None); + + // person does not exist + let mut matcher = + FeatureFlagMatcher::new("other_distinct_id".to_string(), Some(client.clone())); + let match_result = matcher.get_match(&flag).await; + assert_eq!(match_result.matches, false); + assert_eq!(match_result.variant, None); + } } diff --git a/rust/feature-flags/src/lib.rs b/rust/feature-flags/src/lib.rs index 7f03747b9ee6d..7784bd7bf1b8d 100644 --- a/rust/feature-flags/src/lib.rs +++ b/rust/feature-flags/src/lib.rs @@ -1,5 +1,6 @@ pub mod api; pub mod config; +pub mod database; pub mod flag_definitions; pub mod flag_matching; pub mod property_matching; diff --git a/rust/feature-flags/src/router.rs b/rust/feature-flags/src/router.rs index 8824d44efdbde..2fbc87c870930 100644 --- a/rust/feature-flags/src/router.rs +++ b/rust/feature-flags/src/router.rs @@ -2,18 +2,59 @@ use std::sync::Arc; use axum::{routing::post, Router}; -use crate::{redis::Client, v0_endpoint}; +use crate::{database::Client as DatabaseClient, redis::Client as RedisClient, v0_endpoint}; #[derive(Clone)] pub struct State { - pub redis: Arc, + pub redis: Arc, // TODO: Add pgClient when ready + pub postgres: Arc, } -pub fn router(redis: Arc) -> Router { - let state = State { redis }; +pub fn router(redis: Arc, postgres: Arc) -> Router +where + R: RedisClient + Send + Sync + 'static, + D: DatabaseClient + Send + Sync + 'static, +{ + let state = State { redis, postgres }; Router::new() .route("/flags", post(v0_endpoint::flags).get(v0_endpoint::flags)) .with_state(state) } + +// TODO, eventually we can differentiate read and write postgres clients, if needed +// I _think_ everything is read-only, but I'm not 100% sure yet +// here's how that client would look +// use std::sync::Arc; + +// use axum::{routing::post, Router}; + +// use crate::{database::Client as DatabaseClient, redis::Client as RedisClient, v0_endpoint}; + +// #[derive(Clone)] +// pub struct State { +// pub redis: Arc, +// pub postgres_read: Arc, +// pub postgres_write: Arc, +// } + +// pub fn router( +// redis: Arc, +// postgres_read: Arc, +// postgres_write: Arc, +// ) -> Router +// where +// R: RedisClient + Send + Sync + 'static, +// D: DatabaseClient + Send + Sync + 'static, +// { +// let state = State { +// redis, +// postgres_read, +// postgres_write, +// }; + +// Router::new() +// .route("/flags", post(v0_endpoint::flags).get(v0_endpoint::flags)) +// .with_state(state) +// } diff --git a/rust/feature-flags/src/server.rs b/rust/feature-flags/src/server.rs index ffe6b0efb7068..37bd721a9a51f 100644 --- a/rust/feature-flags/src/server.rs +++ b/rust/feature-flags/src/server.rs @@ -5,7 +5,7 @@ use std::sync::Arc; use tokio::net::TcpListener; use crate::config::Config; - +use crate::database::PgClient; use crate::redis::RedisClient; use crate::router; @@ -13,13 +13,25 @@ pub async fn serve(config: Config, listener: TcpListener, shutdown: F) where F: Future + Send + 'static, { - let redis_client = - Arc::new(RedisClient::new(config.redis_url).expect("failed to create redis client")); + let redis_client = match RedisClient::new(config.redis_url.clone()) { + Ok(client) => Arc::new(client), + Err(e) => { + tracing::error!("Failed to create Redis client: {}", e); + return; + } + }; + + let read_postgres_client = match PgClient::new_read_client(&config).await { + Ok(client) => Arc::new(client), + Err(e) => { + tracing::error!("Failed to create read Postgres client: {}", e); + return; + } + }; - let app = router::router(redis_client); + // You can decide which client to pass to the router, or pass both if needed + let app = router::router(redis_client, read_postgres_client); - // run our app with hyper - // `axum::Server` is a re-export of `hyper::Server` tracing::info!("listening on {:?}", listener.local_addr().unwrap()); axum::serve( listener, diff --git a/rust/feature-flags/src/team.rs b/rust/feature-flags/src/team.rs index e872aa477968f..7c7cfd9547bbf 100644 --- a/rust/feature-flags/src/team.rs +++ b/rust/feature-flags/src/team.rs @@ -2,18 +2,15 @@ use serde::{Deserialize, Serialize}; use std::sync::Arc; use tracing::instrument; -use crate::{ - api::FlagError, - redis::{Client, CustomRedisError}, -}; +use crate::{api::FlagError, database::Client as DatabaseClient, redis::Client as RedisClient}; // TRICKY: This cache data is coming from django-redis. If it ever goes out of sync, we'll bork. // TODO: Add integration tests across repos to ensure this doesn't happen. pub const TEAM_TOKEN_CACHE_PREFIX: &str = "posthog:1:team_token:"; -#[derive(Debug, Deserialize, Serialize)] +#[derive(Debug, Deserialize, Serialize, sqlx::FromRow)] pub struct Team { - pub id: i64, + pub id: i32, pub name: String, pub api_token: String, } @@ -23,24 +20,13 @@ impl Team { #[instrument(skip_all)] pub async fn from_redis( - client: Arc, + client: Arc, token: String, ) -> Result { // TODO: Instead of failing here, i.e. if not in redis, fallback to pg let serialized_team = client .get(format!("{TEAM_TOKEN_CACHE_PREFIX}{}", token)) - .await - .map_err(|e| match e { - CustomRedisError::NotFound => FlagError::TokenValidationError, - CustomRedisError::PickleError(_) => { - tracing::error!("failed to fetch data: {}", e); - FlagError::DataParsingError - } - _ => { - tracing::error!("Unknown redis error: {}", e); - FlagError::RedisUnavailable - } - })?; + .await?; // TODO: Consider an LRU cache for teams as well, with small TTL to skip redis/pg lookups let team: Team = serde_json::from_str(&serialized_team).map_err(|e| { @@ -50,6 +36,21 @@ impl Team { Ok(team) } + + pub async fn from_pg( + client: Arc, + token: String, + ) -> Result { + let mut conn = client.get_connection().await?; + + let query = "SELECT id, name, api_token FROM posthog_team WHERE api_token = $1"; + let row = sqlx::query_as::<_, Team>(query) + .bind(&token) + .fetch_one(&mut *conn) + .await?; + + Ok(row) + } } #[cfg(test)] @@ -60,14 +61,19 @@ mod tests { use super::*; use crate::{ team, - test_utils::{insert_new_team_in_redis, random_string, setup_redis_client}, + test_utils::{ + insert_new_team_in_pg, insert_new_team_in_redis, random_string, setup_pg_client, + setup_redis_client, + }, }; #[tokio::test] async fn test_fetch_team_from_redis() { let client = setup_redis_client(None); - let team = insert_new_team_in_redis(client.clone()).await.unwrap(); + let team = insert_new_team_in_redis(client.clone()) + .await + .expect("Failed to insert team in redis"); let target_token = team.api_token; @@ -137,4 +143,39 @@ mod tests { Ok(_) => panic!("Expected DataParsingError"), }; } + + #[tokio::test] + async fn test_fetch_team_from_pg() { + let client = setup_pg_client(None).await; + + let team = insert_new_team_in_pg(client.clone()) + .await + .expect("Failed to insert team in pg"); + + let target_token = team.api_token; + + let team_from_pg = Team::from_pg(client.clone(), target_token.clone()) + .await + .expect("Failed to fetch team from pg"); + + assert_eq!(team_from_pg.api_token, target_token); + assert_eq!(team_from_pg.id, team.id); + assert_eq!(team_from_pg.name, team.name); + } + + #[tokio::test] + async fn test_fetch_team_from_pg_with_invalid_token() { + // TODO: Figure out a way such that `run_database_migrations` is called only once, and already called + // before running these tests. + + let client = setup_pg_client(None).await; + let target_token = "xxxx".to_string(); + + match Team::from_pg(client.clone(), target_token.clone()).await { + Err(FlagError::TokenValidationError) => (), + _ => panic!("Expected TokenValidationError"), + }; + } + + // TODO: Handle cases where db connection fails. } diff --git a/rust/feature-flags/src/test_utils.rs b/rust/feature-flags/src/test_utils.rs index 92bc8a4ff4494..9d1f5970d46b6 100644 --- a/rust/feature-flags/src/test_utils.rs +++ b/rust/feature-flags/src/test_utils.rs @@ -1,10 +1,13 @@ use anyhow::Error; -use serde_json::json; +use serde_json::{json, Value}; use std::sync::Arc; +use uuid::Uuid; use crate::{ - flag_definitions::{self, FeatureFlag}, - redis::{Client, RedisClient}, + config::{Config, DEFAULT_TEST_CONFIG}, + database::{Client as DatabaseClientTrait, PgClient}, + flag_definitions::{self, FeatureFlag, FeatureFlagRow}, + redis::{Client as RedisClientTrait, RedisClient}, team::{self, Team}, }; use rand::{distributions::Alphanumeric, Rng}; @@ -44,7 +47,7 @@ pub async fn insert_new_team_in_redis(client: Arc) -> Result, - team_id: i64, + team_id: i32, json_value: Option, ) -> Result<(), Error> { let payload = match json_value { @@ -124,3 +127,149 @@ pub fn create_flag_from_json(json_value: Option) -> Vec { serde_json::from_str(&payload).expect("Failed to parse data to flags list"); flags } + +pub async fn setup_pg_client(config: Option<&Config>) -> Arc { + let config = config.unwrap_or(&DEFAULT_TEST_CONFIG); + Arc::new( + PgClient::new_read_client(config) + .await + .expect("Failed to create pg read client"), + ) +} + +pub async fn insert_new_team_in_pg(client: Arc) -> Result { + const ORG_ID: &str = "019026a4be8000005bf3171d00629163"; + + client.run_query( + r#"INSERT INTO posthog_organization + (id, name, slug, created_at, updated_at, plugins_access_level, for_internal_metrics, is_member_join_email_enabled, enforce_2fa, is_hipaa, customer_id, available_product_features, personalization, setup_section_2_completed, domain_whitelist) + VALUES + ($1::uuid, 'Test Organization', 'test-organization', '2024-06-17 14:40:49.298579+00:00', '2024-06-17 14:40:49.298593+00:00', 9, false, true, NULL, false, NULL, '{}', '{}', true, '{}') + ON CONFLICT DO NOTHING"#.to_string(), + vec![ORG_ID.to_string()], + Some(2000), + ).await?; + + client + .run_query( + r#"INSERT INTO posthog_project + (id, organization_id, name, created_at) + VALUES + (1, $1::uuid, 'Test Team', '2024-06-17 14:40:51.329772+00:00') + ON CONFLICT DO NOTHING"# + .to_string(), + vec![ORG_ID.to_string()], + Some(2000), + ) + .await?; + + let id = rand::thread_rng().gen_range(0..10_000_000); + let token = random_string("phc_", 12); + let team = Team { + id, + name: "team".to_string(), + api_token: token, + }; + let uuid = Uuid::now_v7(); + + let mut conn = client.get_connection().await?; + let res = sqlx::query( + r#"INSERT INTO posthog_team + (id, uuid, organization_id, project_id, api_token, name, created_at, updated_at, app_urls, anonymize_ips, completed_snippet_onboarding, ingested_event, session_recording_opt_in, is_demo, access_control, test_account_filters, timezone, data_attributes, plugins_opt_in, opt_out_capture, event_names, event_names_with_usage, event_properties, event_properties_with_usage, event_properties_numerical) VALUES + ($1, $5, $2::uuid, 1, $3, $4, '2024-06-17 14:40:51.332036+00:00', '2024-06-17', '{}', false, false, false, false, false, false, '{}', 'UTC', '["data-attr"]', false, false, '[]', '[]', '[]', '[]', '[]')"# + ).bind(team.id).bind(ORG_ID).bind(&team.api_token).bind(&team.name).bind(uuid).execute(&mut *conn).await?; + + assert_eq!(res.rows_affected(), 1); + + Ok(team) +} + +pub async fn insert_flags_for_team_in_pg( + client: Arc, + team_id: i32, + flag: Option, +) -> Result { + let id = rand::thread_rng().gen_range(0..10_000_000); + + let payload_flag = match flag { + Some(value) => value, + None => FeatureFlagRow { + id, + key: "flag1".to_string(), + name: Some("flag1 description".to_string()), + active: true, + deleted: false, + ensure_experience_continuity: false, + team_id, + filters: json!({ + "groups": [ + { + "properties": [ + { + "key": "email", + "value": "a@b.com", + "type": "person", + }, + ], + "rollout_percentage": 50, + }, + ], + }), + }, + }; + + let mut conn = client.get_connection().await?; + let res = sqlx::query( + r#"INSERT INTO posthog_featureflag + (id, team_id, name, key, filters, deleted, active, ensure_experience_continuity, created_at) VALUES + ($1, $2, $3, $4, $5, $6, $7, $8, '2024-06-17')"# + ).bind(payload_flag.id).bind(team_id).bind(&payload_flag.name).bind(&payload_flag.key).bind(&payload_flag.filters).bind(payload_flag.deleted).bind(payload_flag.active).bind(payload_flag.ensure_experience_continuity).execute(&mut *conn).await?; + + assert_eq!(res.rows_affected(), 1); + + Ok(payload_flag) +} + +pub async fn insert_person_for_team_in_pg( + client: Arc, + team_id: i32, + distinct_id: String, + properties: Option, +) -> Result<(), Error> { + let payload = match properties { + Some(value) => value, + None => json!({ + "email": "a@b.com", + "name": "Alice", + }), + }; + + let uuid = Uuid::now_v7(); + + let mut conn = client.get_connection().await?; + let res = sqlx::query( + r#" + WITH inserted_person AS ( + INSERT INTO posthog_person ( + created_at, properties, properties_last_updated_at, + properties_last_operation, team_id, is_user_id, is_identified, uuid, version + ) + VALUES ('2023-04-05', $1, '{}', '{}', $2, NULL, true, $3, 0) + RETURNING * + ) + INSERT INTO posthog_persondistinctid (distinct_id, person_id, team_id, version) + VALUES ($4, (SELECT id FROM inserted_person), $5, 0) + "#, + ) + .bind(&payload) + .bind(team_id) + .bind(uuid) + .bind(&distinct_id) + .bind(team_id) + .execute(&mut *conn) + .await?; + + assert_eq!(res.rows_affected(), 1); + + Ok(()) +} diff --git a/rust/feature-flags/tests/common/mod.rs b/rust/feature-flags/tests/common/mod.rs index c8644fe1f4542..2b14292e0fda3 100644 --- a/rust/feature-flags/tests/common/mod.rs +++ b/rust/feature-flags/tests/common/mod.rs @@ -1,9 +1,6 @@ use std::net::SocketAddr; -use std::str::FromStr; -use std::string::ToString; use std::sync::Arc; -use once_cell::sync::Lazy; use reqwest::header::CONTENT_TYPE; use tokio::net::TcpListener; use tokio::sync::Notify; @@ -11,15 +8,6 @@ use tokio::sync::Notify; use feature_flags::config::Config; use feature_flags::server::serve; -pub static DEFAULT_CONFIG: Lazy = Lazy::new(|| Config { - address: SocketAddr::from_str("127.0.0.1:0").unwrap(), - redis_url: "redis://localhost:6379/".to_string(), - write_database_url: "postgres://posthog:posthog@localhost:15432/test_database".to_string(), - read_database_url: "postgres://posthog:posthog@localhost:15432/test_database".to_string(), - max_concurrent_jobs: 1024, - max_pg_connections: 100, -}); - pub struct ServerHandle { pub addr: SocketAddr, shutdown: Arc, diff --git a/rust/feature-flags/tests/test_flag_matching_consistency.rs b/rust/feature-flags/tests/test_flag_matching_consistency.rs index 4a24b0e16d50e..d4b55ed4e9001 100644 --- a/rust/feature-flags/tests/test_flag_matching_consistency.rs +++ b/rust/feature-flags/tests/test_flag_matching_consistency.rs @@ -5,8 +5,8 @@ use feature_flags::flag_matching::{FeatureFlagMatch, FeatureFlagMatcher}; use feature_flags::test_utils::create_flag_from_json; use serde_json::json; -#[test] -fn it_is_consistent_with_rollout_calculation_for_simple_flags() { +#[tokio::test] +async fn it_is_consistent_with_rollout_calculation_for_simple_flags() { let flags = create_flag_from_json(Some( json!([{ "id": 1, @@ -107,7 +107,9 @@ fn it_is_consistent_with_rollout_calculation_for_simple_flags() { for i in 0..1000 { let distinct_id = format!("distinct_id_{}", i); - let feature_flag_match = FeatureFlagMatcher::new(distinct_id).get_match(&flags[0]); + let feature_flag_match = FeatureFlagMatcher::new(distinct_id, None) + .get_match(&flags[0]) + .await; if results[i] { assert_eq!( @@ -129,8 +131,8 @@ fn it_is_consistent_with_rollout_calculation_for_simple_flags() { } } -#[test] -fn it_is_consistent_with_rollout_calculation_for_multivariate_flags() { +#[tokio::test] +async fn it_is_consistent_with_rollout_calculation_for_multivariate_flags() { let flags = create_flag_from_json(Some( json!([{ "id": 1, @@ -1186,7 +1188,9 @@ fn it_is_consistent_with_rollout_calculation_for_multivariate_flags() { for i in 0..1000 { let distinct_id = format!("distinct_id_{}", i); - let feature_flag_match = FeatureFlagMatcher::new(distinct_id).get_match(&flags[0]); + let feature_flag_match = FeatureFlagMatcher::new(distinct_id, None) + .get_match(&flags[0]) + .await; if results[i].is_some() { assert_eq!( diff --git a/rust/feature-flags/tests/test_flags.rs b/rust/feature-flags/tests/test_flags.rs index 2ceba24efd712..f9a46e1c543af 100644 --- a/rust/feature-flags/tests/test_flags.rs +++ b/rust/feature-flags/tests/test_flags.rs @@ -6,13 +6,14 @@ use serde_json::{json, Value}; use crate::common::*; +use feature_flags::config::DEFAULT_TEST_CONFIG; use feature_flags::test_utils::{insert_new_team_in_redis, setup_redis_client}; pub mod common; #[tokio::test] async fn it_sends_flag_request() -> Result<()> { - let config = DEFAULT_CONFIG.clone(); + let config = DEFAULT_TEST_CONFIG.clone(); let distinct_id = "user_distinct_id".to_string(); @@ -50,7 +51,7 @@ async fn it_sends_flag_request() -> Result<()> { #[tokio::test] async fn it_rejects_invalid_headers_flag_request() -> Result<()> { - let config = DEFAULT_CONFIG.clone(); + let config = DEFAULT_TEST_CONFIG.clone(); let distinct_id = "user_distinct_id".to_string(); From a47a677680fbc55d1e2af8255bff5e67d025b640 Mon Sep 17 00:00:00 2001 From: Raquel Smith Date: Wed, 24 Jul 2024 08:55:28 -0700 Subject: [PATCH 31/33] feat: add field to skip sending invite emails (#23933) --- posthog/api/organization_invite.py | 5 ++++- posthog/api/test/test_organization_invites.py | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/posthog/api/organization_invite.py b/posthog/api/organization_invite.py index 3dc6d979af801..b3a22fe1bf599 100644 --- a/posthog/api/organization_invite.py +++ b/posthog/api/organization_invite.py @@ -25,6 +25,7 @@ class OrganizationInviteSerializer(serializers.ModelSerializer): created_by = UserBasicSerializer(read_only=True) + send_email = serializers.BooleanField(write_only=True, default=True) class Meta: model = OrganizationInvite @@ -40,6 +41,7 @@ class Meta: "updated_at", "message", "private_project_access", + "send_email", ] read_only_fields = [ "id", @@ -96,12 +98,13 @@ def create(self, validated_data: dict[str, Any], *args: Any, **kwargs: Any) -> O user__email=validated_data["target_email"], ).exists(): raise exceptions.ValidationError("A user with this email address already belongs to the organization.") + send_email = validated_data.pop("send_email", True) invite: OrganizationInvite = OrganizationInvite.objects.create( organization_id=self.context["organization_id"], created_by=self.context["request"].user, **validated_data, ) - if is_email_available(with_absolute_urls=True): + if is_email_available(with_absolute_urls=True) and send_email: invite.emailing_attempt_made = True send_invite(invite_id=invite.id) invite.save() diff --git a/posthog/api/test/test_organization_invites.py b/posthog/api/test/test_organization_invites.py index 4733e32099333..351d2b21aabc9 100644 --- a/posthog/api/test/test_organization_invites.py +++ b/posthog/api/test/test_organization_invites.py @@ -134,6 +134,25 @@ def test_add_organization_invite_with_email(self, mock_capture): self.assertListEqual(mail.outbox[0].to, [email]) self.assertEqual(mail.outbox[0].reply_to, [self.user.email]) # Reply-To is set to the inviting user + @patch("posthoganalytics.capture") + def test_add_organization_invite_with_email_on_instance_but_send_email_prop_false(self, mock_capture): + """ + Email is available on the instance, but the user creating the invite does not want to send an email to the invitee. + """ + set_instance_setting("EMAIL_HOST", "localhost") + email = "x@x.com" + + with self.settings(EMAIL_ENABLED=True, SITE_URL="http://test.posthog.com"): + response = self.client.post( + "/api/organizations/@current/invites/", {"target_email": email, "send_email": False} + ) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + self.assertTrue(OrganizationInvite.objects.exists()) + + # Assert invite email is not sent + self.assertEqual(len(mail.outbox), 0) + def test_can_create_invites_for_the_same_email_multiple_times(self): email = "x@posthog.com" count = OrganizationInvite.objects.count() From d2a8c186da349038981acb0d81cc8b227b4c0986 Mon Sep 17 00:00:00 2001 From: Jacob Spizziri Date: Wed, 24 Jul 2024 12:23:20 -0400 Subject: [PATCH 32/33] =?UTF-8?q?feat(data-warehouse):=20add=20username=20?= =?UTF-8?q?for=20ssh=20connections=20to=20MySQL=20datab=E2=80=A6=20(#23950?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/scenes/data-warehouse/new/sourceWizardLogic.tsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/frontend/src/scenes/data-warehouse/new/sourceWizardLogic.tsx b/frontend/src/scenes/data-warehouse/new/sourceWizardLogic.tsx index 49d93f36b4b85..b0216397540e9 100644 --- a/frontend/src/scenes/data-warehouse/new/sourceWizardLogic.tsx +++ b/frontend/src/scenes/data-warehouse/new/sourceWizardLogic.tsx @@ -300,6 +300,13 @@ export const SOURCE_DETAILS: Record = { label: 'Key pair', value: 'keypair', fields: [ + { + name: 'username', + label: 'Tunnel username', + type: 'text', + required: false, + placeholder: 'User1', + }, { name: 'private_key', label: 'Tunnel private key', From de544af2a3e0105a435c7dc717bf50f62edf0bca Mon Sep 17 00:00:00 2001 From: James Greenhill Date: Wed, 24 Jul 2024 09:34:15 -0700 Subject: [PATCH 33/33] chore: bump the timeout for the `mark_deletions_done` query that is run before async deletes (#23935) --- posthog/models/async_deletion/delete_events.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/posthog/models/async_deletion/delete_events.py b/posthog/models/async_deletion/delete_events.py index 7997f492738fc..9c94af5203c6e 100644 --- a/posthog/models/async_deletion/delete_events.py +++ b/posthog/models/async_deletion/delete_events.py @@ -91,7 +91,7 @@ def _verify_by_column(self, distinct_columns: str, async_deletions: list[AsyncDe WHERE {" OR ".join(conditions)} """, args, - settings={"max_query_size": MAX_QUERY_SIZE}, + settings={"max_query_size": MAX_QUERY_SIZE, "max_execution_time": 30 * 60}, ) return {tuple(row) for row in clickhouse_result}

      ?w&eCu;!=Uj=IvA0Is*+_>_;oM1nqRwz5C0z>Ks z!0>qwV}w0gTc3V?@Ry`y6RaEwQVO6^x#`;j^7DzH2@@3s=j~-Eng*mZ)t`@af|v-! z=LU{K(AOeB3#+B|bR*kv!V_Ej4Bi|CgnKkM)A8}WY0w3Y9?ULX=(VWZQn|&Rh$=ES zf9$el`y)G>!jtIcO+5oW0hg`jfnx8C>d|7#Txgp=h~5wo7&Uj+&UjHA;TmFO%nh0o zPdu<_aCBRkj}%irletC4`$oB-b%`ZK-Xj5rGT>2v4)6r=H#$S?&RXkpwa99?oWm0mSoHT4MlsnCT~_loei3_cswp5861)Q| z!*uRSkeDhNSPuDc;K=g35eep2AVJv5Q1kr2yrBPqsLkmX^pD!7J2R%RllrkTfP}%lz>NhK_Z8E5by~%au4dtbLJo& zb$M~od2i03ClhhpvA-r8H7gS|bz$^)J4@`otGUo}gMr;(?qD{5jLrd6KFdQ{>%KV# zFbspmqw=-uk#m2E0bHvtVjeK+z})Sycwt$uRHx4+VLPK_1bH|Y=Y6}mZ2nfstiYfL zj4Sr%<4?6#?y+r6X?N31ePBqu{YsyIO9RK%&Ae3V!mPV(%;+~GoMiuTroywMtn|dU2l;ZNf{Z-d^XdL z1~avlmB|G%r0BbelS>rQ?#IiOCLZNIJ?Tg|fdG@v9qi_TxMgoN_J|HCg0#TIK^nAb zlsc}Kpvz0ZdE>9_P7|FHp{aB{R(wE(2)H!~iY@zwAjVr<)*HgT?=?O84)Ze84}Nl# z$GGIeUdU!b#%Z_K1!tK~E!T2!WZ{+zF`8(avq@DYdjAoMh`xYgD`ckgCy&FfRNgGg zRqLV;<@?xh=*=_ zvzZ{3lAr66WGuJcCoPaI(gW1i&cR_j*6%Pmp~8YN%6>36c$lhAEoG*ye{_!zvIG_@jS60S+B-oHa7cCwHU+oMeRKoP^Z~=k+ zCGN>qYX$*QeML6Cj2^qGpm}-ja6nxk#bv+I z2kk`0e)H;2+3)fo&X+x&4+k~}a6NGA_}fkSyKhXw&qLLqYCvv}lt2ne@iNU%9&AKsE;`Br~5k%t?^QeM3wL+ zModx$ASq-HON-WFtH7Kui3M8eHa1k@SSDW(*}B?a6mq+kXOc4!1@Q&Z@$%T}7|euXEts(EYc ze2==t;mCFj43BqQtqqHaUG4k0}}V7K1e94%em z8QtpEMG=3> zZ#3k@D%nk*w~DEwZwr>MDQdDwDMI|^L^IK4;W#zks2YMCEkC?c;vleb<;ry7rHnsk zS6uT}>C^V}Zf+hh_TVV8li7v3nOihh^sN?K$+z;1D$FU>MsRt2_7x?vP%d@o~1RJ^Jfr@n) z*g#t4G@^a^C#Sw}F2nH3muZeY<6Gfdl^@x=QGzDMfz%hg8+X&(HhKkS# z3dck5c;{vaw1OQ;z&ZY>r%G3b#6qp?oq1q(AG|%T6)P(tw$4Iv>Vz7*pimEQej0}% zj792oy`T=fIGi%p$VeN>y3<-KQ~+Fp4-@-xF_aq6!O@iDDYJ5%~!Hr!E_>D`hb8&0DvgBq{_`jmpxK5T_SFd8u7|K`X2 ze{p91=c)g52L9&^{LdNqKRE-Mk=d27xKU%Y0RQ_nxaIiFd(W)en(B!Yy^y$wjPU=n IbxsLQ0AvxoL;wH) literal 36093 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 y2|_DE35(D?+?8`tjn_~ z8`Lb#ehW)cQdagF-XkpZY3TFz2)uI+Ay!uCbVb-(Sik?Ya)U*AmBhfcg{{_N|ZUuM(R+HBqZWeT%JHjKk9WHDa2{*Q8GUP}%RR_?6w z1;t;!Sc%8L3V7##4!y+br?8sxt-FFGL{td_d}%r*<+@frg&m}6+Q{yYj(={ z1~o-jt}T5Jj&&svqywr48uPj|=qlo_z}ycghzi?LO3XksUAY~1c<8l2vzpxt#JvF(KIw@6;%zGi1W1hwjI1b z2OKQIasbr^$lTwTE$%O zbJ>hlv$M0C?Y?G#!+NhQi5#8y_x5-?s!o%x$wYXh9-5e()17vVxdyi(yXcI<4hSsI zpIyq)&iS#<%w1ee!JKVaRjMID(xIGYRf)SfKQo`j6B-&sdFGO-t*xz{-I(yl4m|cC zADabI*65g+OWpVh=>TZ7?4h)VPwZ|LHg8!g2lkaqxDA9l@~vNz{I}^hI7)H>?9^Jpt_7e zxgwk5;E`3g?*%pmZ71SON;)#UL4;SLs%4EnOmA&#JGZn2 zF;gKS=Wz|^&%3xp;>}EZ^YrER2D`c@jAUgw&4IoUL498u^K!4MsG<>dmJ-w$@QxQH z?4Ht{j`4d=NZWwNl;cpkqnc_(TtpN#|iwkvEZa= z;luXMwDHPlTh5O1vaunuG@-k^BPYi|Pd`sT9gcb%9xiC?X{pfc;*T&kH_z^}{M)%T zbIs`;ew>hwx~99kIw38EEqj&wZDyXnP{B?Vye6Z&jG!s3=b<@-2pLuVx1tC^UYe-SlK_V<@5aC0|QuFUq4_3!`E-7S!0@o7ZFDN-RVCEVoE zYNJBj(X${>@4NKYwz0;AyS@+Y5FL6M3_Nu&fi@9=c>~Ms`1bZt@QKe>jZq6WCBl}C)L$m*yl^<3H4bc`qtXF_UiS4y1+u?^J zhg%x6Ie|rb;Xd`I&{(OJauM}v)Uz0c?L33Nx5)*c7vj$fWV#a_9X(&WG#9QgLb7_&|M!JeBeS?K$X zdySLqL1XjFV9?CK);x2%R(D%ZSJ#W6YuQ*{C~Rkt_x$MWX>@i5j=b%2_hbr=GJZ1e zrjk7Fw}k%s+m*DN0eteL)h4^BJJqx1sO!x9Bdxr#J%p4y@xM9NU-;B3H2pmZqaL)p z`}3{Qcfc1tF~Pr$aogLZ$o)7LG_5u;-&ET>EX-{}y1BQavyviM=;>($T;pE8Y=V)T zs-8tkHJm74qu&yEE*E^wB^LLZnZ@U0q1=>@fDjVNqR5@&(@k1a)zUQ8niC~ZrBn}r zYdN&vqhNiA#h4D^Scb=mv|i=MPB7PvUOSPiDT45ul+TM!}L zq0B#EW*dG|MvYL4B>-|y2$$N~==@MeAP`&@dVfJ|@9dpsJHa+Q^ku5rKo)?OFfL#^jtJ!`S%52Xduw-9zSPCv|z{2>7Oz{aA zJXUJ5)}O-2C;=83jdah$o?4k*Rnn#AdJ4sp>`RsMqi6Ta-Z%V61+{>yfz8r!LwQgE zcpsWYhlhvj<$2ebLq%530->lb*{!wPb-Fmw6lw*Jtxe7vzp_f?RHvF6xcnhfMkVUk>m^qNq^Hq zA2-x6poIlIG^V_~97LWZliSX0qJ8HlEw_~xKFsfambj8EDmD<4l=B*Sp)phs!5jqw zfSrS~aepf4JPwJpM&3gm_&lJbPP10JE@lUBi=M>S^d0KnYG`PvQsXI~S!(?R}u{J6v=kL#e4aok+EK`qU}w6hsV znA7*R&ojbY;pII9eFTCWru^r#@C%=2O>jT47{Qsyr(f9$;|0#5)K(ANLM6}T`gV43 zr*?>5Nhz}{`X-mBGTvFzh*VEcK#3RP1M#l zh))oKz=m6eE(k4y9cbO3&ghYg3xBGzj!x9{H1@e%NP_szRJ*-%zOB9(H#chTjq%Eg zoxHq`OCKniXEm@?2+#F3Ia*p;UowoCOY7F(E9FA@tR!H6%lMmq+(@Sv6ubJ+JI2pO=Ez|B=k zE$`-z)>iTL#V}A_?CfA}n0()8W+q+u)dHOzPAmvy>39^yX;Q z`YUgmhqI)G?ZW)-CIeW~feeJk%nodz*u!Txtb3^tnSBd4P_-fZ?q7O)O8}-e99v4x zLmG%|3>KL!j!AgH(mx1r{??1LFwnjW7S)QmEg3M-n^{|DdjUWN1rk}~^@dk>cL15G z23~+_vMWUnjt^89kKJjn2{};Y!=z>~*2~|$>3nsf(?UZs?_LU+ z9gL;;h%Z^{xu;;lxbp0@30K`edi_jB*tEr8_8Y{Ywji~kTO0b!%aRwP6B2m+ zE((|q0xvEXLVoyY(RM;CbFTIAY+1S`B-x` zH1y4p(E5T68tmF&xbcG32t-&&&%#Km$dn08=vb8CIM-E!DVX&M zx0@U)=FR8rXg`yYmPS(IPa!1F(u?tOS;q_Qz%W!$*#YP<7W*K9IDBY~s-<9x5py%T zbt_aR$Y*_PD=0XaC;#L@9|0elr-K~}rJ#GAxH^GD-}4Uv9RROU$#nA!H~5y`y?X~B z2NmM6`;!C_ClK$PW(6c~QL_UuHI>+HxV^J{?`LQ6W#%sLsUAXqSwi=HxNM83s6aOO zk|eSAhnVY9YkND$$5i1lt8YW3sb}>qoRn%O38=zV%WQ^X-o6!pC!HnTCov-80(CK_ zvDmrPZWQ7N(Dv9pbC|$%qjm4yTWn4_x>$%07bQKn554x}UXwH5uxn^ z&8=<)pshD+VaE9Snwf!_IV?Q`UrJoa?GbhUwmuKDcFH-J0@H#}Sre4pD75}jd0;}#tdflH@`zJLGj z-n^#C$vH6F7B6M9t!6R13j+so7}5ccxpL(Sly|pppP*!Cd}|XDxlb z?cv|G0CG*Ld0ICz$SWFfC!IJ2zL=d(2yVao?A za}Hn+5I8#(WR(c{gH{FApp4ZgH->pezlzY8niDK>iGmd(7YqyxHX@|4;1F$%<1Z#Y zJ**s^g?T1NGaE`OaFcw6N`l+&HVaj zJek*KpAXr|b6n0>L3jxzGOht_-M28nr{-~BL_X1nTMP~NF{p7K>TlPsGHjrdAwg^pyqx!m$T=guN8tX2z;SStRPDh)VQ6^c!5j7-ZMOW$^+S@nVT9s~G zQl8I-h%3@ykIEP}%Qt!W@KrIltA_RWNWvsR+f{x-aF}05eQrEzQjU0yGT{ zmXn^Gpw9Zpl$(qFG8tnvOtiGjv;?BtUGKf+0asU7xWB5qmXqsdQl~;0VXUdh=^c|o#IgW;J-@?*zglx7u*%jZxMAHf7C?Wu$Bo03nataCx z%FsWA1grr_3H*g+jx<%u<_3c??fszx8DUv)If%G%ZfS2JXE||caiI^Dad>lcbZcDi z{(Wcf6sJ4exGob}E2(#K1Bkng7ncpO?%R8NGP1JDXXAhOTP3V{JMyabkAJ)kYkfE{ zR8>`bpKhPn7~nG`4RK+pCRHVOwwoMHOs3q%&$+K((sr1++Wyg4I)KJyYpVETEz~pA zhz2QL-Zn-W$|AwDnS?U^GIaw(hN$7k*{{BQ`2v>_@XfR%p!lhUq2oHcoZRfM@#-#H zGdjs&dIJ48_z-mnx1h3m+Wp%MUAiWhv@{3jg;zSrgR(IjSlpjl7|@JHAz$X^=7JK< zU?_!Dg(-xhj^N~f;K-x{{Nt? zu1C&rtjF4qc(APo)sGwudn@my$nhAICpk=g4WeD^1NQe=CL@hAkCcRj*UT#|$j~k+ zEIjS*rUrgymjG8h&TD5q^4q=3{#0C%)*G4pNUwvm_;^ELBAqvO%Y7XX*$_hf#T%k{&_1voc>&E`7W*n zS-vxnI-U4+rK0j1{aw1}aA&l9u*uPONI;7+lOgYZs$2 z6Ej!W&(aXdN+L8q&KG zo^y|2>C4N_y~e|Huz%njNj*so@;eJFD=RZIQrgFI;x7uUH*VZu6Hi7yc<^D}Z~JFk zEX*JP%`DQJI-nk!o4<>WPSehTa#g~4urvFQBi!~jO^M0u#(WP50f0*7ZQty{kMTJ7 zw)Fe};{t%~`%}{_8tLBYJk>A_?ey{iO+d&}$m<`E0C4o#!5GG^qpR!o-r(mC`T6UZ z*RNr+vt$ty6&-15yjrgW#gIi?+-Q}my|7yuB4EYBd;wRW(O^XUEyy7JjRR|}kliaI zy5)t1OPzwZs>CvXj0pKvddWFDfg`i_ddK zy`rjZ?{{6#NSsT!G#J4eiMp>3b>Bb%Qk6U`;cyFo8f{}^H(oO}IeE?Rt}@23N;~hZ z3b@)1SLhanc0n*4lT9AT5PsPTq_Yrd5El4Y2){EtbIo13$|eEG73ucxE3qod=M*Obcg75Qpc!8{4e(%;Ta7us+ZAn zu+xUaLNBM;m}A)WOTn%ULN^StrgOm>TD1a!tYFqu+!$j`|Pnvt$sP%&PB%HHZdnNW^ndZ1!DH%c zUvoU^c!$B+%{4~}sWQ7|D=j2|PVL2iag6ZQKdlY_^H)j=4(E|?NghW{vo!e~Pslld z;}|PAgvB3mn1AUYfBjRHxY8K{Dpgcz)5mIb`7tDnsUrf|F}<1^$#>e?G((r+Uslg% zcSaD~gptAo%iN6TK(}1Iu&b!xOoG7R|MtCh0CHtq5Y4+^NQ%b*B;Z=n9r8l6AMXZ` zi*pOzAC(tN6{D{8IUW7L>zw_Fg3Y#paWI#pdLQh{yjvPA-U8$iHgWje(jv&i| zI}SkKL~SClrkimj7)898Yk5Tm)H@HA9Xv5~y)H~N~I zvdVjo)_QHNioO29#_cS2J()42zJVDW<{Q1H7GY*_pva7Z^~>iI&|<(kpxL9yr%csu8_p;u~%pZClpNZ0JvudhxG(X)$A^ygjB z(eWC$IU={uvU4CEot=5RIBneF#E<Ldy>of--qm z>PtDxIX^%j09U@M`Q)(rB&1n;TgQ@V_wZe{{OBsKm*}~F?{b+e@gvwK)kuMAl^z3j zkqR??I8@QK5M=O_5HA zaKHIJJe+{+;7-AknOOOp%zVp-c?~`7A#?oLo3FscV-E;>bUl&<0O`OwGLUCB)Zh=dREaXEeF??!3sBg4M4f7@)bryCY&B$;eHt; zQ$s;vW23O6IQBI-7MA%7p4KST-e}o49#lOwP6vR|So%7>VmX!pR z*zpA)TJLQ&^yeV?Oh*QRK;XUqakYgnL&D|m-zoc=tgQKeLNuI%WkJF=^8WoYZtKnm zYf%W*fd~Q|e1M6yb)|DtQD&x#FWI?kKcL5ZqYARP;8q#9QwoTt}X8XdRC9hz+2Vi-bxj+#wwJ>e1Y79$(fxH5^iCO4Lv-GzGGoY3>BsaFUj)8!QIkm>}H_8mcG6g}vZJ(Q?@BC=& z%ckFnT>iJ}%xirE04w*RPWbrpj4c6yh5iF#o&Zq#@b_0@ii;|GI6%&CI_v zE72TS!6l3SL-IQNOeO4&B`DZuc|9#By~`3h3nL>VrB;Ff{dntVZ z*4kzla=Z+KhoMA8$-RJZ*Dp>+2As@pRi*mQ9vaIoBf7}cEYbm5b zCDy8g^s%zAh)PUkVZunRkm%GLw9bPE;}E$_Gtm2nwGOm8t~TTRLZ(WezXs(3b_19@ zv!wGNz#`w0o{3|DoNRo(oQm^DVvmSZF*jU(pq@=ivMRXbiJZ3^=fNK0l_pH{8 z|2N2XRSjC?_yv)8NGK+EfC7Y1Rn_*%f5%nb4wPN+V{N^?y>GlJSwu%j*^=DcAY+p9 zkusd|+xCMxO;=A3L=>C&apazbpZZ;8G~)$C&!cTa*ExkD6ZkpNl}5n2l@qFL5r=Gp5eC9yv`4M(b1KJ#oodJsYbSe-%Sk~ z(}QD^2V@{_3R;)WmGjwOj+9o`*+~)Df1CB_L>B%kyu=#x~M#t~Z zb5v%K37OrUxzyheTs$!J)QHp!;(-SOn#|!ce0ljz3RZOu`+I#wf=0QBDHRdxk9s~ zm)8z)&5lH%cJuP$ZDD83$~;a4`8c5laMF(UcI})#u~Izb6i2cu(|6ks>)>Sbg8{aK zSMU&R3O7ugF9QP`o0{%%MFRN;8YlJ`6A+d!4LKQk@1*hCyK)vG#PF`5e1bWWgM&j< z6xRqF)%=!d5DsnW=_zRq^?dFNXZ{qw{;kE+zCExWaE_%Cn705*mfanUmgz}8)s8@P z7&LZ0kpS-54kqnRPc?ynXLQu-Thehdq0L@z(1O#`(n=oIo&NgutM79%CQ;A(11A5F zklIV*_$;^bM*+!FP&tHhA5acSk z0z}Pmi4))3qoL_#if4qjQhV}GB#D#RG|EPrkf+a?pC8=f$q3vTWHrZ$x+p}K8T<~* z)aV)!VsyWK>%vh+U03t>iq+E1Ym$m4HF8}4zzErEXt)Iho$v`>V`F19J%+8N?;!vg zelwsS?T2Zn2-rkXq)bF#%s% I{9Y6h*Kefap{Iy1k^e^T(I+GE2X~vUHX*=&q8I zW|k&1Gc*4DdG~eZalj8y>YF4y9QuFPi=K-!p+Dc<+`LfSfspqR`}x!{M@A|tQN{1`1G9mk)uUdGjR z3I2NQe{rn8{;B`#@8l19L94+W`onhY*;3`nj6Yn%v^?yz4MclpLTZx&az~; zBYh4?s6C*dxc>a*xw-oZDSIrDHQL9xjLg4FpcZ4;Mg37bp9Ft*^|5i@a33Jchm4iQ z?wR1}>FJXc-mTS%y517!8LzKa%qDPS3Fp?n-6lZWK@!=7Fd5f~ z50pqNICNEc%1qf$d^H=Bpg0`&u>UAW9SUW*!>Os}l&JL-pV32_{@n9m-eLJ8$;X5; zRDtou&)lbz#NTTY0BVTyb#So7mCO$b-r6gHYGuNB0;F{y;=Pu^47j0&3J=2y=&_q^ zW`MLq+YW1!PvAanR@q~vymm{<+^WvZVfM8@wYTR(#vCG$lKMkpxd%cxOH zg{$ha)LRI|TciZlv8z9EvOIo~*#~6pSkIAojJyjvzh43wZMhNM+1B;ZkF5ObWvhxI=6pM}ZgG%J)4 z4u9~j*10f3bML0x2}Jg?lEXOoX|)0xWYDj1@@1TNoS|s(#V}7z_}4j+SYm1%+BBbk<*RjSv$Q zX}Jq9D2RUn`v^??b8SgL-6qDLk0yT+iSc`e-{}Ig72MP zqgVQMAUPt%&3yiB41PLhW%1;JJXIy7-URjODugN>hiaSw3+6+ZehQ4Q_wQqXHQR3L zqAjyyUtUbCb|pKHE@wHeuRr`;BU7v8dlNN9&AI0JG(Jam;)KWPr`OBhQHo2Cx#xJ0 z2K*%T!-u5}Uu@i*otK8VZ@CSm$Le1OQL!HtFE20BXH&U5@^{#=W$>UdL?z^4_ar1z zLs-jrwF{7_gCLM<@9HW{S8fCUENG-AyJuRUs)A8g@#IH3Fhk9o5oMKbe2&NbE6bhN z)G_Xxzy5k2SkjYZ1R4ZvknoU@%K(pm_^i7}8LImWq>pHk8`~o})|4iJs)e=n!S+T5 z@egRmQevKffR1^}8K23setO*NqVVy;^`?yQ@!eu?DPsjOa; zEfv^quORd^p=FHB-7Wb^9mohh8R6gK~lh>L^x#fq>E&FXfqD(1UjCY=Hco z+nQG-Bo4lAG9Ut>(1^0!h2|b=h-%NBX0X>nkk8t5&3}^;LovYa8eAqrN9u=t@8}3n5n!^h<(=r2|On4g0}V;&*7Z zmX=1qI|l+Uc>cws*J)&5y*PKtb(xSp;mh}n#4>irJPH(`PgX{DQn}^#2o0t7_(eQE z1B-@s72B2O1S|k3(ZOz$KJ1Z~5jEMb){$c{ox8~wkI&yjHIev_7Uc1N{ z&wflDYRQf_pc=8kmB8v554uSZ_-ys42IZpegQok3yUG(x-C~*Ds9u$j0C))i?;Or5 zL(?7lQ^7KJ&cG0MDCq^qKI@$n028FVJz*_MR}LD>*I3Flvhsij7n*gz_F$9c5qU-K zB0bn7g(yy(ZKCD~Ws;yRy<%W&Iv42z?v#>^5^&ve{LTpQY%i2=$auVq#29!wFSY&vjVDhpgCm$2V{&b>o9u6WE8(G26uu&QQgCRiAf zov3MPYb@|Juvyd3r$T#u466b71Pfj{^x&XggdEa~H!W{LK9RFrtR;T`hvhZDOjx^u zii2wJPOPjLCEr7%wiE{J4Ec`hJM5({_}Ka<+9ZI+!K>&us?-omc25%vHxM{Q-MT9C+~tNzv1a_Q;j z>=HR&ILB*i6|y|ljx4yxB5Hk4>AriX4gYh2b6h8yKOgj; pOYomj@Sg|aKXbufCXjykgon{P$?wRq!LT_dFQalNAMxP%{{xycaY6t9 diff --git a/frontend/src/lib/api.ts b/frontend/src/lib/api.ts index 648ea4aba4478..6bb3b9159b040 100644 --- a/frontend/src/lib/api.ts +++ b/frontend/src/lib/api.ts @@ -8,7 +8,13 @@ import posthog from 'posthog-js' import { SavedSessionRecordingPlaylistsResult } from 'scenes/session-recordings/saved-playlists/savedSessionRecordingPlaylistsLogic' import { getCurrentExporterData } from '~/exporter/exporterViewLogic' -import { DatabaseSerializedFieldType, QuerySchema, QueryStatusResponse, RefreshType } from '~/queries/schema' +import { + DatabaseSerializedFieldType, + ErrorTrackingGroup, + QuerySchema, + QueryStatusResponse, + RefreshType, +} from '~/queries/schema' import { ActionType, ActivityScope, @@ -658,6 +664,15 @@ class ApiRequest { return this.surveys(teamId).addPathComponent('activity') } + // Error tracking + public errorTracking(teamId?: TeamType['id']): ApiRequest { + return this.projectsDetail(teamId).addPathComponent('error_tracking') + } + + public errorTrackingGroup(fingerprint: ErrorTrackingGroup['fingerprint'], teamId?: TeamType['id']): ApiRequest { + return this.errorTracking(teamId).addPathComponent(fingerprint) + } + // # Warehouse public dataWarehouseTables(teamId?: TeamType['id']): ApiRequest { return this.projectsDetail(teamId).addPathComponent('warehouse_tables') @@ -1698,6 +1713,15 @@ const api = { }, }, + errorTracking: { + async update( + fingerprint: ErrorTrackingGroup['fingerprint'], + data: Partial> + ): Promise { + return await new ApiRequest().errorTrackingGroup(fingerprint).update({ data }) + }, + }, + recordings: { async list(params: Record): Promise { return await new ApiRequest().recordings().withQueryString(toParams(params)).get() diff --git a/frontend/src/lib/components/MemberSelect.tsx b/frontend/src/lib/components/MemberSelect.tsx index c1a919dbf6b68..853aa4ae11ba1 100644 --- a/frontend/src/lib/components/MemberSelect.tsx +++ b/frontend/src/lib/components/MemberSelect.tsx @@ -1,4 +1,4 @@ -import { LemonButton, LemonDropdown, LemonInput, ProfilePicture } from '@posthog/lemon-ui' +import { LemonButton, LemonDropdown, LemonDropdownProps, LemonInput, ProfilePicture } from '@posthog/lemon-ui' import { useActions, useValues } from 'kea' import { fullName } from 'lib/utils' import { useEffect, useMemo, useState } from 'react' @@ -9,11 +9,12 @@ import { UserBasicType } from '~/types' export type MemberSelectProps = { defaultLabel?: string // NOTE: Trying to cover a lot of different cases - if string we assume uuid, if number we assume id - value: UserBasicType | string | number | null + value: string | number | null onChange: (value: UserBasicType | null) => void + children?: (selectedUser: UserBasicType | null) => LemonDropdownProps['children'] } -export function MemberSelect({ defaultLabel = 'Any user', value, onChange }: MemberSelectProps): JSX.Element { +export function MemberSelect({ defaultLabel = 'Any user', value, onChange, children }: MemberSelectProps): JSX.Element { const { meFirstMembers, filteredMembers, search, membersLoading } = useValues(membersLogic) const { ensureAllMembersLoaded, setSearch } = useActions(membersLogic) const [showPopover, setShowPopover] = useState(false) @@ -22,11 +23,8 @@ export function MemberSelect({ defaultLabel = 'Any user', value, onChange }: Mem if (!value) { return null } - if (typeof value === 'string' || typeof value === 'number') { - const propToCompare = typeof value === 'string' ? 'uuid' : 'id' - return meFirstMembers.find((member) => member.user[propToCompare] === value)?.user ?? `${value}` - } - return value + const propToCompare = typeof value === 'string' ? 'uuid' : 'id' + return meFirstMembers.find((member) => member.user[propToCompare] === value)?.user ?? null }, [value, meFirstMembers]) const _onChange = (value: UserBasicType | null): void => { @@ -94,18 +92,20 @@ export function MemberSelect({ defaultLabel = 'Any user', value, onChange }: Mem } > - - {typeof selectedMemberAsUser === 'string' ? ( - selectedMemberAsUser - ) : selectedMemberAsUser ? ( - - {fullName(selectedMemberAsUser)} - {meFirstMembers[0].user.uuid === selectedMemberAsUser.uuid ? ` (you)` : ''} - - ) : ( - defaultLabel - )} - + {children ? ( + children(selectedMemberAsUser) + ) : ( + + {selectedMemberAsUser ? ( + + {fullName(selectedMemberAsUser)} + {meFirstMembers[0].user.uuid === selectedMemberAsUser.uuid ? ` (you)` : ''} + + ) : ( + defaultLabel + )} + + )} ) } diff --git a/frontend/src/lib/lemon-ui/LemonTable/LemonTableLink.tsx b/frontend/src/lib/lemon-ui/LemonTable/LemonTableLink.tsx index c5c1b4915af45..868754e9f19fd 100644 --- a/frontend/src/lib/lemon-ui/LemonTable/LemonTableLink.tsx +++ b/frontend/src/lib/lemon-ui/LemonTable/LemonTableLink.tsx @@ -5,7 +5,7 @@ export function LemonTableLink({ title, description, ...props -}: Pick & { +}: Pick & { title: JSX.Element | string description?: JSX.Element | string }): JSX.Element { diff --git a/frontend/src/queries/nodes/DataTable/DataTable.tsx b/frontend/src/queries/nodes/DataTable/DataTable.tsx index 308d53bc17f78..2eef1f4d5b282 100644 --- a/frontend/src/queries/nodes/DataTable/DataTable.tsx +++ b/frontend/src/queries/nodes/DataTable/DataTable.tsx @@ -168,7 +168,7 @@ export function DataTable({ uniqueKey, query, setQuery, context, cachedResults } ...columnsInLemonTable.map((key, index) => ({ dataIndex: key as any, ...renderColumnMeta(key, query, context), - render: function RenderDataTableColumn(_: any, { result, label }: DataTableRow) { + render: function RenderDataTableColumn(_: any, { result, label }: DataTableRow, recordIndex: number) { if (label) { if (index === (expandable ? 1 : 0)) { return { @@ -179,9 +179,9 @@ export function DataTable({ uniqueKey, query, setQuery, context, cachedResults } return { props: { colSpan: 0 } } } else if (result) { if (sourceFeatures.has(QueryFeature.resultIsArrayOfArrays)) { - return renderColumn(key, result[index], result, query, setQuery, context) + return renderColumn(key, result[index], result, recordIndex, query, setQuery, context) } - return renderColumn(key, result[key], result, query, setQuery, context) + return renderColumn(key, result[key], result, recordIndex, query, setQuery, context) } }, sorter: undefined, // using custom sorting code diff --git a/frontend/src/queries/nodes/DataTable/renderColumn.tsx b/frontend/src/queries/nodes/DataTable/renderColumn.tsx index 5eddb88cba390..d8c5da94857bc 100644 --- a/frontend/src/queries/nodes/DataTable/renderColumn.tsx +++ b/frontend/src/queries/nodes/DataTable/renderColumn.tsx @@ -26,6 +26,7 @@ export function renderColumn( key: string, value: any, record: Record | any[], + recordIndex: number, query: DataTableNode, setQuery?: (query: DataTableNode) => void, context?: QueryContext @@ -37,6 +38,26 @@ export function renderColumn( return } else if (value === errorColumn) { return Error + } else if (queryContextColumnName && queryContextColumn?.render) { + const Component = queryContextColumn?.render + return ( + + ) + } else if (context?.columns?.[key] && context?.columns?.[key].render) { + const Component = context?.columns?.[key]?.render + return Component ? ( + + ) : ( + String(value) + ) + } else if (typeof value === 'object' && Array.isArray(value) && value[0] === '__hx_tag') { + return renderHogQLX(value) } else if (value === null) { return ( @@ -45,11 +66,6 @@ export function renderColumn( ) - } else if (queryContextColumnName && queryContextColumn?.render) { - const Component = queryContextColumn?.render - return - } else if (typeof value === 'object' && Array.isArray(value) && value[0] === '__hx_tag') { - return renderHogQLX(value) } else if (isHogQLQuery(query.source)) { if (typeof value === 'string') { try { @@ -230,13 +246,10 @@ export function renderColumn( const columnName = trimQuotes(key.substring(16)) // 16 = "context.columns.".length const Component = context?.columns?.[columnName]?.render return Component ? ( - + ) : ( String(value) ) - } else if (context?.columns?.[key]) { - const Component = context?.columns?.[key]?.render - return Component ? : String(value) } else if (key === 'id' && (isPersonsNode(query.source) || isActorsQuery(query.source))) { return ( diff --git a/frontend/src/scenes/error-tracking/ErrorTrackingActions.tsx b/frontend/src/scenes/error-tracking/ErrorTrackingActions.tsx new file mode 100644 index 0000000000000..d5bdbf4889d54 --- /dev/null +++ b/frontend/src/scenes/error-tracking/ErrorTrackingActions.tsx @@ -0,0 +1,62 @@ +import { LemonSelect } from '@posthog/lemon-ui' +import { useActions, useValues } from 'kea' +import { DateFilter } from 'lib/components/DateFilter/DateFilter' + +import { errorTrackingLogic } from './errorTrackingLogic' +import { errorTrackingSceneLogic } from './errorTrackingSceneLogic' + +export const ErrorTrackingActions = ({ showOrder = true }: { showOrder?: boolean }): JSX.Element => { + const { dateRange } = useValues(errorTrackingLogic) + const { setDateRange } = useActions(errorTrackingLogic) + const { order } = useValues(errorTrackingSceneLogic) + const { setOrder } = useActions(errorTrackingSceneLogic) + + return ( +

    !FPj3SX1NBN4D1bM{3?Uc4Rx}^`k;i1-OT%3&W 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 literal 93296 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