The PostHog development team has been actively enhancing the platform with new features and bug fixes, but inconsistent error handling in performance monitoring tasks poses a significant risk to system reliability.
master
into hogql-filter-persons
and added tests across multiple files including frontend/src/queries/schema.json
, posthog/hogql/database/schema/persons.py
, and others..run/Celery Beat.run.xml
, frontend/src/queries/schema.ts
, and posthog/tasks/poll_query_performance.py
.frontend/src/scenes/insights/EmptyStates/EmptyStates.tsx
.frontend/src/lib/constants.tsx
and other related files.posthog/management/commands/test_migrations_are_safe.py
.frontend/src/toolbar/elements/Heatmap.tsx
.frontend/src/lib/components/DateFilter/DateFilter.tsx
._timestamp
filter to event deletion by Person in posthog/models/async_deletion/delete_events.py
.frontend/src/scenes/surveys/surveyLogic.tsx
.The team has been focused on enhancing both frontend and backend functionalities, including adding new features like universal filters (#22612), improving query performance (#22603), and fixing various bugs. The collaboration patterns indicate a well-coordinated effort across different areas of the platform.
posthog/tasks/poll_query_performance.py
Severity: Medium
Inconsistent error handling can lead to undetected failures, impacting system performance monitoring.
posthog/models/event/util.py
Severity: Medium
Lack of comprehensive validation during event creation could lead to data corruption.
create_event
lack detailed validation.frontend/src/scenes/surveys/surveyLogic.tsx
Severity: Low
Insufficient test coverage could lead to undetected bugs affecting survey functionality.
This feature aims to provide a more flexible filtering mechanism across the application, enhancing user experience significantly.
Consolidating funnel queries into a single query improves performance and reduces complexity, which is crucial for handling large datasets efficiently.
This introduces new models for storing configured HogFunctions, adding extensibility to the system's event stream consumption capabilities.
Developer | Avatar | Branches | PRs | Commits | Files | Changes |
---|---|---|---|---|---|---|
Marius Andra | ![]() |
2 | 3/3/0 | 8 | 97 | 37619 |
vs. last report | -1 | +1/+3/= | -9 | +34 | +36365 | |
timgl | ![]() |
3 | 8/7/0 | 14 | 64 | 10479 |
vs. last report | -1 | -1/+1/= | +2 | +46 | +9946 | |
Ben White | ![]() |
3 | 7/8/0 | 27 | 127 | 5620 |
vs. last report | -2 | -6/=/= | -6 | -13 | +2309 | |
Paul D'Ambra | ![]() |
2 | 9/8/0 | 11 | 61 | 3849 |
vs. last report | -3 | -2/+2/= | -6 | +31 | +1633 | |
Bianca Yang | ![]() |
4 | 5/5/0 | 10 | 107 | 2001 |
vs. last report | = | =/+3/= | -25 | +19 | +608 | |
Thomas Obermüller | ![]() |
3 | 7/6/1 | 16 | 16 | 2001 |
vs. last report | -4 | -10/-6/-1 | -8 | -50 | +870 | |
Tom Owers | ![]() |
3 | 5/3/1 | 5 | 29 | 1653 |
vs. last report | +2 | -4/-6/+1 | -7 | -35 | -5837 | |
David Newell | ![]() |
3 | 4/2/0 | 13 | 41 | 1571 |
vs. last report | +1 | -4/-7/= | = | -52 | -333 | |
ted kaemming | ![]() |
2 | 4/3/0 | 9 | 15 | 1297 |
vs. last report | -1 | +2/+3/-1 | = | +8 | +928 | |
Eric Duong | ![]() |
3 | 2/1/1 | 8 | 24 | 1087 |
vs. last report | = | -5/-4/= | -2 | +11 | +623 | |
Tiina Turban | ![]() |
7 | 7/1/1 | 9 | 25 | 994 |
vs. last report | +6 | +3/-3/+1 | +4 | -4 | +357 | |
github-actions | ![]() |
18 | 0/0/0 | 123 | 63 | 972 |
vs. last report | -1 | =/=/= | +56 | -96 | +283 | |
Sandy Spicer | ![]() |
3 | 4/4/0 | 15 | 39 | 784 |
vs. last report | -1 | -5/-2/-1 | -12 | -12 | -850 | |
Raquel Smith | ![]() |
1 | 2/3/0 | 3 | 31 | 717 |
vs. last report | -3 | -3/=/= | -6 | -4 | +71 | |
Dylan Martin | ![]() |
2 | 4/3/0 | 10 | 27 | 709 |
vs. last report | = | +1/+1/= | +5 | +20 | +657 | |
Julian Bez | ![]() |
3 | 8/6/0 | 13 | 55 | 654 |
Michael Matloka | ![]() |
1 | 6/9/0 | 10 | 97 | 638 |
vs. last report | -3 | -3/+3/= | -5 | +42 | -338 | |
Zach Waterfield | ![]() |
2 | 3/5/0 | 7 | 10 | 297 |
vs. last report | -2 | -2/+3/= | -5 | -13 | -364 | |
Neil Kakkar (neilkakkar) | 1 | 1/0/0 | 2 | 2 | 182 | |
Brett Hoerner | ![]() |
1 | 1/1/0 | 1 | 4 | 64 |
Marcus Hof | ![]() |
1 | 1/2/0 | 2 | 4 | 52 |
vs. last report | -1 | -2/=/= | -2 | +1 | +6 | |
Phani Raj (Phanatic) | 1 | 1/0/0 | 4 | 8 | 51 | |
vs. last report | -1 | =/=/= | -2 | -6 | -623 | |
PostHog Bot | ![]() |
5 | 5/1/8 | 5 | 2 | 50 |
vs. last report | -1 | -3/-1/+8 | -2 | = | -52 | |
Frank Hamand | ![]() |
1 | 2/2/0 | 2 | 3 | 30 |
vs. last report | -1 | -12/-11/-1 | -12 | -33 | -1078 | |
Marc J. Schmidt | ![]() |
1 | 0/1/0 | 1 | 1 | 20 |
vs. last report | +1 | -1/+1/= | +1 | +1 | +20 | |
Steven Shults | ![]() |
1 | 0/0/0 | 1 | 2 | 6 |
Robbie | ![]() |
1 | 1/1/0 | 1 | 1 | 2 |
vs. last report | -3 | -5/-3/= | -14 | -24 | -1448 | |
Tomás Farías Santana (tomasfarias) | 1 | 1/0/0 | 1 | 1 | 2 | |
vs. last report | -1 | =/=/= | -7 | -12 | -1294 | |
None (feedanal) | 0 | 1/0/0 | 0 | 0 | 0 | |
vs. last report | -1 | +1/=/= | -2 | -2 | -33 | |
Nikita Vorobev (nikitaevg) | 0 | 1/0/0 | 0 | 0 | 0 |
PRs: created by that dev and opened/merged/closed-unmerged during the period
The PostHog development team is working on an open-source analytics platform that provides product analytics, session recording, feature flagging, and A/B testing capabilities. It is designed for self-hosting, allowing users to maintain control over their data while leveraging the platform's extensive analytics and optimization tools. The project is hosted on GitHub and continues to see active development with a balanced focus on both front-end improvements and back-end stability.
master
into hogql-filter-persons
and added tests (frontend/src/queries/schema.json
, frontend/src/queries/schema.ts
, frontend/src/scenes/debug/Modifiers.tsx
, mypy-baseline.txt
, posthog/hogql/database/argmax.py
, posthog/hogql/database/models.py
, posthog/hogql/database/schema/cohort_people.py
, posthog/hogql/database/schema/event_sessions.py
, posthog/hogql/database/schema/groups.py
, posthog/hogql/database/schema/log_entries.py
, posthog/hogql/database/schema/person_distinct_id_overrides.py
, posthog/hogql/database/schema/person_distinct_ids.py
, posthog/hogql/database/schema/person_overrides.py
, posthog/hogql/database/schema/persons.py
, posthog/hogql/database/schema/persons_pdi.py
, posthog/hogql/database/schema/session_replay_events.py
, posthog/hogql/database/schema/sessions.py
, posthog/hogql/database/schema/util/test/test_person_where_clause_extractor.py
, posthog/hogql/database/schema/util/test/test_session_where_clause_extractor.py
, posthog/hogql/database/schema/util/where_clause_extractor.py
, posthog/hogql/modifiers.py
, posthog/hogql/test/test_modifiers.py
, posthog/hogql/transforms/lazy_tables.py
, posthog/hogql/visitor.py
, posthog/hogql_queries/test/test_query_runner.py
, posthog/schema.py
, posthog/warehouse/models/join.py
)..run/Celery Beat.run.xml
, .run/Celery Threads.run.xml
, .run/Dev.run.xml
, bin/start-worker
, frontend/src/queries/schema.json
, frontend/src/queries/schema.ts
, frontend/src/scenes/insights/EmptyStates/EmptyStates.tsx
, posthog/clickhouse/client/execute_async.py
, posthog/clickhouse/client/test/test_execute_async.py
, posthog/schema.py
, posthog/tasks/poll_query_performance.py
, posthog/tasks/scheduled.py
, posthog/tasks/tasks.py
, posthog/tasks/test/test_poll_query_performance.py
).frontend/src/scenes/insights/EmptyStates/EmptyStates.tsx
)..github/actions/run-backend-tests/action.yml
).frontend/src/lib/constants.tsx
,frontend/src/scenes/billing/BillingProduct.tsx
,frontend/src/scenes/billing/BillingProductPricingTable.tsx
,frontend/src/scenes/billing/PlanComparison.tsx
).posthog/management/commands/test_migrations_are_safe.py
).frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-breakdown--dark.png
,frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-breakdown--light.png
,frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-breakdown-edit--dark.png
,frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-breakdown-edit--light.png
,frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-edit--dark.png
,frontend/__snapshots__/scenes-app-insights--funnel-top-to-bottom-edit--light.png
,posthog/api/action.py
,posthog/api/plugin.py
,posthog/api/shared.py
,posthog/api/test/__snapshots__/test_action.ambr
,posthog/api/test/__snapshots__/test_api_docs.ambr
,posthog/api/test/dashboards/__snapshots__/test_dashboard.ambr
,posthog/api/test/notebooks/__snapshots__/test_notebook.ambr
,posthog/api/test/test_action.py
,posthog/api/test/test_plugin.py
,posthog/migrations/0418_pluginconfig_filters.py
,posthog/models/plugin.py
).frontend/src/toolbar/elements/Heatmap.tsx
,frontend/src/toolbar/elements/heatmapLogic.ts
).frontend/__snapshots__/scenes-other-toolbar--heatmap--dark.png
,frontend/__snapshots__/scenes-other-toolbar--heatmap--light.png
,frontend/__snapshots__/scenes-other-toolbar--heatmap-dark--dark.png
,frontend/__snapshots__/scenes-other-toolbar--heatmap-dark--light.png
,frontend/src/lib/components/CommandBar/CommandBar.tsx
,frontend/src/lib/components/DateFilter/DateFilter.tsx
,frontend/src/lib/hooks/useOutsideClickHandler.ts
,frontend/src/lib/lemon-ui/Popover/Popover.tsx
,frontend/src/toolbar/elements/heatmapLogic.ts
,frontend/src/toolbar/stats/HeatmapToolbarMenu.tsx
)._timestamp
filter to event deletion by Person (posthog/models/async_deletion/delete_events.py
,posthog/models/event/util.py
,posthog/models/test/__snapshots__/test_async_deletion_model.ambr
,posthog/models/test/test_async_deletion_model.py
).frontend/__snapshots__/scenes-app-surveys--new-survey-targeting-section--light.png
,frontend/src/scenes/surveys/surveyLogic.tsx
).The PostHog development team has been actively working on various features and fixes across the platform. Recent activities show a strong focus on enhancing the user interface, improving backend functionalities, and adding new features such as dynamic CNAME targets, improved query performance, and better handling of async queries. The team has also been addressing bugs and optimizing existing functionalities to ensure a robust and user-friendly experience. The ongoing efforts reflect a proactive approach to maintaining and improving the platform's capabilities.
Since the last report 7 days ago, there has been a significant amount of activity in the repository. Numerous new issues have been created, and several issues have been closed. This indicates ongoing development and maintenance efforts.
Issue #22612: Universal Filters
Issue #22611: Resolve Expression Fields Underlying Type in DB Schema Query
Issue #22610: Hog Webhooks
Issue #22608: Add Cache Payload Method for Better Visibility
Issue #22605: Ignore Frontend-only Keys in Cache Key Payload
Issue #22603: Single Query for Funnels with Breakdown
Issue #22602: Batch Export Filters UI
Issue #22609: Revert "Make Port a Tel"
Issue #22607: Add IDs to Admin for QoL When Debugging/Doing Support
Issue #22606: Adapt Celery Configuration for VSCode
Issue #22604: Missing Scope on Events Endpoint
Issue #22595: Unhide Person Profiles UI for Those Who Have Access
Issue #22594: Make Migrations Safe Again
Issue #22593: Fix DRF-Spectacular Warnings Causing CI Flakiness
Issue #22590: Use Viewset's team
in @cached_by_filters
Issue #22588: Heatmap Tooltip Label Fix
Issue #22582: Add _timestamp
Filter to Event Deletion by Person
The recent activity in the repository reflects a robust development cycle focused on both expanding features and maintaining system integrity. The team's responsiveness to issues, both in terms of introducing enhancements and resolving bugs, indicates a strong commitment to user satisfaction and continuous improvement. The introduction of new features alongside critical bug fixes suggests a balanced approach to development, ensuring both innovation and stability.
Overall, the project appears to be progressing well with significant improvements made over the past week.
This pull request introduces a new feature called "Universal Filters" to the PostHog application. This feature aims to provide a more flexible and powerful filtering mechanism that can be applied across different parts of the application. The changes involve modifications to existing components and the addition of new components, logic, and utilities to support this functionality.
New Components and Logic:
UniversalFilters
: A new component that handles the rendering and management of universal filters.universalFiltersLogic
: Logic for managing the state and actions related to universal filters.utils.ts
: Utility functions to support universal filters.Modifications to Existing Components:
PropertyFilters
: Updated to integrate with the new universal filters logic.TaxonomicPropertyFilter
: Adjusted to work with universal filters.PropertyFilterButton
: Enhanced to support more flexible content rendering.Snapshot Updates:
UniversalFilters
component, which is responsible for rendering filter groups and individual filters.taxonomicPropertyFilterLogic.ts
:
utils.ts
(Property Filters):
createDefaultPropertyFilter
for creating default property filters based on various criteria.Overall, this pull request introduces a valuable feature that enhances the flexibility and power of filtering within the PostHog application. The code quality is high, with good practices followed throughout.
Since the last analysis 7 days ago, there has been significant activity in the PostHog/posthog repository. Numerous pull requests (PRs) have been opened and closed, with various enhancements, bug fixes, and new features being introduced. Below is a detailed report of the changes:
PR #22612: Universal filters
PR #22611: Resolve expression fields underlying type in db schema query
PR #22610: Hog webhooks
PR #22608: Add cache payload method for better visibility
PR #22605: Ignore frontend-only keys in cache key payload
PR #22603: Single query for funnels with breakdown
PR #22602: Batch export filters UI
PR #22601: Pipeline UI metrics page use insights like date selection
PR #22600: Patch the usage_summary value for rows_synced
null
by default.PR #22599: Event-based survey configuration with events that activate it.
events
array property on a survey that libraries can use to show a survey popup based on those configured events.Other PRs include fixes for stacked line charts (#22598), current bill value respecting usage limits (#22597), piping to allow events as filters (#22592), creating destinations from events (#22591), better code snippets (#22589), hogql type system (#22587), async calculation if stale (#22586), updating posthog-js to version 1.136.2 (#22585), product check first for some features (#22581), updating states in data warehouse pipeline UI (#22580), and various other improvements and fixes.
PR #22609: Revert "Make port a tel"
Other notable closed PRs include adding IDs to admin for QoL when debugging/doing support (#22607), adapting celery configuration for VSCode (#22606), fixing missing scope on events endpoint (#22604), un-hiding person profiles UI for those who have access (#22595), making migrations safe again (#22594), fixing DRF spectacular warnings causing CI flakiness (#22593), using viewset's team
in @cached_by_filters
decorator (#22590), fixing heatmap tooltip label (#22588), adding persistence to Redis and Kafka on hobby deployments (#22563), removing duplicate footer and fixing buggy Cancel
button behavior in surveys (#22562).
Overall, the recent activity indicates an active development cycle aimed at both expanding capabilities and ensuring the reliability of the platform.
frontend/src/queries/schema.json
Reason: This file defines the schema for queries, which is crucial for understanding how data is structured and queried within the application.
Assessment:
posthog/hogql/database/schema/util/where_clause_extractor.py
Reason: This file contains logic for extracting where clauses, which is essential for filtering data in queries.
Assessment:
WhereClauseExtractor
is well-documented and designed to handle complex query scenarios safely.visit_compare_operation
, visit_select_query
, and visit_arithmetic_operation
are designed to handle specific parts of the query AST.HasTombstoneVisitor
and IsTimeOrIntervalConstantVisitor
enhance modularity and readability.posthog/tasks/poll_query_performance.py
Reason: This file handles the polling of query performance, which is important for monitoring and optimizing query execution.
Assessment:
poll_query_performance
executes a ClickHouse SQL query to fetch performance metrics.structlog
, ensuring issues are traceable.query_manager_from_initial_query_id
extracts necessary identifiers from the query ID.noNaNInt
) is concise but might benefit from being defined as regular functions for readability.frontend/src/lib/components/heatmaps/HeatMapsSettings.tsx
Reason: This file manages the settings for heatmaps, which are a key feature for visualizing user interactions.
Assessment:
useState
, useValues
) effectively.SectionSetting
improve code reuse and readability.posthog/clickhouse/client/execute_async.py
Reason: This file deals with asynchronous execution of ClickHouse queries, which is critical for handling large datasets efficiently.
Assessment:
QueryStatusManager
encapsulates methods for managing query statuses in Redis.QUERY_WAIT_TIME
, QUERY_PROCESS_TIME
) are used to collect performance metrics.QueryNotFoundError
and QueryRetrievalError
improve error specificity.execute_process_query
handle asynchronous query execution with detailed logging and error handling.posthog/hogql/grammar/HogQLParser.g4
Reason: This file contains the grammar rules for HogQL, which is fundamental for parsing and interpreting queries written in this language.
Assessment:
selectStmt
, joinExpr
, and columnExpr
define the structure of valid HogQL queries.HogQLLexer
) ensuring consistent tokenization.posthog/api/services/query.py
Reason: This file provides services related to query execution, making it important for understanding how queries are processed and executed in the backend.
Assessment:
process_query_dict
and process_query_model
handle different types of queries using a unified interface.QuerySchemaRoot.model_validate
) ensuring data integrity.ValidationError
is used to handle validation errors gracefully.posthog/models/event/util.py
Reason: This file includes utility functions for event models, which are essential for handling event data within the application.
Assessment:
create_event
and bulk_create_events
handle event creation with detailed parameter handling.format_clickhouse_timestamp
ensure consistent timestamp formatting across events.ElementSerializer
provide serialization logic for event elements, improving API responses' consistency.sync_execute
encapsulate SQL execution logic, abstracting away direct database interactions.frontend/src/scenes/surveys/surveyLogic.tsx
Reason: This file contains the logic for surveys, which are a significant feature for gathering user feedback and insights.
Assessment
frontend/src/scenes/onboarding/Onboarding.tsx
Reason:** This file manages the onboarding process, which is crucial for new users to get started with the application effectively.
Assessment: React Component Design: Functional components with hooks (useState,useEffect) ensure modern React practices are followed Conditional Rendering: Renders different onboarding steps based on current step & product configuration Component Modularity: Breaks down onboarding steps into smaller components (OnboardingWrapper) improving readability & maintainability API Integration: Connects with backend services through hooks (useValues,useActions) ensuring seamless data flow between frontend & backend Conclusion:
Overall,the assessed files demonstrate good practices in terms of structure,error handling,module design,and integration with external services/tools (e.g.,Prometheus,Sentry).The use of modern frameworks/libraries (e.g.,React,Kea,Pydantic) further enhances code quality & maintainability
posthog/tasks/poll_query_performance.py
Severity: Medium (2/3)
Rationale
Inconsistent error handling in critical performance monitoring tasks can lead to undetected failures and degraded system performance.
poll_query_performance
function logs errors but does not implement any retry mechanism or alerting system for failures.Next Steps
posthog/models/event/util.py
Severity: Medium (2/3)
Rationale
Potential data integrity issues due to lack of comprehensive validation and error handling during event creation.
create_event
and bulk_create_events
handle event creation but lack detailed validation for input parameters.Next Steps
frontend/src/scenes/surveys/surveyLogic.tsx
Severity: Low (1/3)
Rationale
Insufficient test coverage for survey logic could lead to undetected bugs affecting user feedback collection.
Next Steps
posthog/hogql/database/schema/util/where_clause_extractor.py
Severity: Low (1/3)
Rationale
Lack of detailed documentation can hinder future maintenance and understanding of complex query extraction logic.
WhereClauseExtractor
class.Next Steps
WhereClauseExtractor
class.