0
0
mirror of https://github.com/PostHog/posthog.git synced 2024-11-24 18:07:17 +01:00
Commit Graph

118 Commits

Author SHA1 Message Date
Tim Glaser
7d0b983505
Fix actions grouping by OR (#2276) 2020-11-09 10:40:16 +00:00
James Greenhill
ccd70fa3f9
Finish the local dev w/ proto setup (#2254) 2020-11-06 17:15:19 -08:00
Tim Glaser
b8f7813bf3
Fix team leakge in count (#2257) 2020-11-06 11:04:24 +01:00
Tim Glaser
5b041d9849
Fix actions count clickhouse (#2234)
* Fix actions count clickhouse

* More

* Fix

* Fix test

* Black
2020-11-05 16:26:21 +01:00
Tim Glaser
efc62e1999
Fix feature flags clickhouse (#2170)
* remove person properties up to date

* remove person props mv

* move latest person

* prune rest of person materialized

* missing parenth

* add type

* remove migration

* Fix feature flags clickhouse

* Fix feature flags clickhouse

* Fix types

* Fix stuff

* Silly me

Co-authored-by: Eric <eeoneric@gmail.com>
2020-11-05 16:01:32 +01:00
Eric Duong
7a5bcab99e
Restore slack hook (#2186)
* add back hook

* add back hook

* filter event matcher

* create artificial event to query for actions

* fix test

* possible solution

* remove printer

* reformat

* remove test_event temp

* comment out tests

* comment out

* uncomment

* patch another

* reduce var

* fix timestamp
2020-11-05 14:40:30 +01:00
Eric Duong
fd4d66738c
remove feature flags (#2212) 2020-11-04 19:16:21 +01:00
Michael Matloka
76307429d2
Fix Sentry issue POSTHOG-13K (#2180)
* Fix Sentry issue POSTHOG-13K

* Ignore typing on line

* Black
2020-11-04 11:08:28 +01:00
James Greenhill
cadb560d19
skip celery for ee path (#2210)
* skip celery for ee path

* mypy fixes

* take celery out and fix types as cleanly and performant as possible

* add timing

* setup statsd, need to clean this up

* use sane defaults for statsd
2020-11-03 17:06:52 -08:00
Tim Glaser
a07eed7d2e
Simplify action queries (#2167)
* Simplify funnel and action query

* Fix type errors

* Update test_action.py

* Move more over to avoid_loop

* Simplify query everywhere

* Fix black

* Fix

* Fix everything

* Fix black

* Fix filtering

* Move or join
2020-11-03 16:06:25 +01:00
Eric Duong
42aeecfa43
Retention ux fixes (#2168)
* fix pg monthly retention and ux adjustments

* pg labels

* fix pg tests

* add action create to django retention test

* add action create to clickhouse retention test

* fix period test for retention clickhouse

* don't need types

* fix date selection add hourly selector

* change column name

* change retention to return datetime object and change tests to reflect

* fix frontend to parse

* only show time when hourly is selected

* fix disappearing properties

* fix url handling
2020-11-03 11:22:02 +01:00
Marius Andra
a1f56ee286
remove deprecated celery tasks (#2185) 2020-11-03 10:27:08 +01:00
Marius Andra
8600f7e80c
Revert process_event task name (#2179)
* use long process_event task names (as they were before)

* fix task name for EE

* prevent losing tasks on the backwards migration

* Mypy hack
2020-11-02 16:27:40 -08:00
Eric Duong
96a614ee25
Prune person materialized (#2166)
* remove person properties up to date

* remove person props mv

* move latest person

* prune rest of person materialized

* missing parenth

* add type

* remove migration
2020-11-02 15:44:38 -05:00
Tim Glaser
119a3e7a9a
Fix elements chain with bad classes (#2133) 2020-11-02 19:24:02 +01:00
Paolo D'Amico
066721e3c1
Stability & dev experience improvements (#2152) 2020-11-02 14:55:20 +00:00
Marius Andra
fce86ef46d
Plugin v8 (#1946)
* plugin progress

* blah

* add posthog config for plugins

* test gitignore

* new functionality for plugins

* support local plugin paths

* also ignore symlinks

* add positional argument

* fixes

* small fixes

* config polish

* config passed to posthog plugin

* ooooooops

* symlink fix

* cleanse dir before loading

* add cache to plugins

* pickle the goods

* unlink symlink

* pass full config

* unlink even if link points to nothing

* fix fix

* return none if value is empty

* plugin model

* plugins scene

* add config schema to plugins

* install plugins

* save descriptions

* show descriptions

* edit plugin

* save plugin config

* plugin modal

* uninstall plugins

* UX cleanup

* add "required" to plugin config

* open plugin modal after install

* split to subcomponents

* install custom plugins

* rework backend for model plugins

* Plugins on models

* simple reload pubsub

* fix apps not installed

* fix master/main issue

* fix reload command

* use the github api to get the default branch

* init plugins only if not running migrate/makemigrations

* store plugins zip archives in postgres

* tag plugins to specific versions

* save plugins in pluginConfig

* update pluginConfigs instead of adding new rows, remove from redux on uninstall

* remove debug

* run plugins from db by team

* reload when deleting

* remove debug

* smarter handling of dynamic plugins, support local plugins again

* improve typings, add some nicer warnings

* yarn lock file after merge

* squash migrations and add "locked" field to plugins

* error if folder not found in zip

* unregister plugins

* skip plugin init in test mode

* basic plugin test

* avoid mutating the same prop hash

* add pip tools to requirements.txt

* fix mypy, fix manage.py script error

* avoid plugins with mypy

* mypy fix

* abstract redis into plugin and add team_id to reload

* refactor and start work on syncing with posthog.json

* start testing plugin loading from json

* test plugin deletion

* test for syncing plugins from config

* complete and then test local json plugin sync

* test converting back and forward between an local and http path

* remove global plugin config from plugins array in posthog.json

* rename configSchema --> config_schema

* fix migration after merge

* rename from_cli to from_json

* mypy

* import pip after plugin loaded

* show error details

* raise exceptions visible to the frontend

* sync plugins on load

* access control to updating plugins from the web

* access control

* remove posthog.json from git

* test config schema from json

* if you can install via the web, you can also configure

* remove separate view access

* title as "Plugins" instead of "Installed Plugins" if we can't install ourselves and don't see the repository

* add self.team to plugin base class

* add instance_init method

* refactor into files

* sync global plugin config from json

* make global plugins work, add test

* global plugins in interface, make them take precedence over local plugins

* add comments to plugin base class

* reload/reset plugins before each test

* add error field to plugins

* add many plugin zips

* add many plugin zips, fix imports

* store errors on plugin object and test them

* fix types

* add null to error

* can be with any team ID in the test

* save problems running plugins in the plugin_config model

* try to create redis connection pool only once

* throw if no redis

* mypy

* get instance inside heartbeat and not top level

* try caching pubsub

* try pip install with -q

* install pip externally

* remove uuid and typing, now in stdlib

* more verbosity

* add pip back

* catch exceptions

* quiet and no input for pip

* check plugin reload every 10sec on new task

* fix type errors

* fix requirements error message

* use repository.json

* only load and reload plugins on workers

* rename task

* support local js plugins via py-mini-racer

* load js plugins from zip files

* extract jsplugin class and convert to syntax that uses global functions instead of initializing a class

* process events via grpc

* process events with the "posthog-plugins" queue to enable plugins

* remove old native python & mini racer plugin code

* default to false

* change env vars

* fix test

* remove grpc tools

* skip plugins in migrate.py scripts

* fix migration

* change output of settings debug banner to STDERR

* start posthog plugin server with worker

* try to fix python 3.7 test

* add fallback for the optional argument

* annoying CI test debug

* try to finally fix python 3.7 test

* here we go again

* move plugins under instance

* move plugins npm start into its own folder

* more console.log debugginf

* and again

* move plugins to separate script

* more prints

* fix test error

* docker config

* small fixes

* dckerfile fix

* reload plugins via pubsub, upgrade version

* plugins that support team setup code

* sync if made changes from config

* move plugins in menu

* require node 14 in heroku for better plugin support (namely ?. support)

* bump node version in dockerfiles

* update node versions for github actions

* update the concurrency for heroku workers

* update the concurrency for heroku workers (add link)

* Fix migrations after merge

* add ignore_result to process_event tasks

* fix: docker-preview run in parallel bug

* change order of commands

* remove separate plugins server conf script

* clarify intent

* revert castaway change

* add context to plugins/sync.py

* change everything to ValidationError

* delegate destroy to super

* no request to repository url if can't install

* make the if cleaner

* add clarifying line

* add clarifying line

* fix url field type

* rename get_redis_instance to get_client, move to posthog.redis

* remove duplicate validation

* flip if around

* simplify api logic

* simplify plugin_config api, fix global_plugin error

* remove unnecessary field rename

* mypy

* Plugins UI (#2090)

* base UI

* more UI

* load plugin image if available

* toggle enabled plugin

* plugin cards for available

* custom plugins

* change plugin configuration to drawer

* asks for confirmation when enabling or disabling a plugin

* loading state

* separation of concerns, leave new styles for separate PR

* general improvements

* remove button when installation is not available

* preemptively avoid merge conflict with #2114

* move papercups widget & hide bottom bar when drawer is open

* allow clicking the entire plugin card

* address all feedback

* move plugins under "project" menu

* Hide "configure" from globally enabled plugins

Co-authored-by: Marius Andra <marius.andra@gmail.com>

* add plugins opt in toggle to project/plugins

* choose pipeline based on team setting

* add "beta"

* plugin opt-in opt-out pages

* adjust install button

* remove tasks that are never called, remove PLUGINS_ENABLED global key

* fix responsive card display

* fix typo and drawer width

* skeleton fixes

* typo

* use "posthog-plugin-server" npm package

* "posthog-plugin-server" doc

* require the plugin server to be online before enabling plugins

* remove a few needeless "?." cases

* add hint for config_schema

* add hint for errors

* show plugin errors

* stop clicks if clicking on error

* show plugin errors

* loading indicators

* reload plugins when opting in/out

* nicer beta tag

* add frontend type

* fix mypy error

* fix test

* disable plugins if MULTI_TENANCY

* upgrade plugin-server version

* save event with plugin error

* upgrade plugin server

* squashed & optimized migrations

* remove unused import

* updates opt-in copy & hides tech details for cloud version

* fix cypress tests

* compare with None

* change plugins url and add redirect

* remove ellipsis

* use code snippet in plugin errors

* change github regex

* fix loading flickering on installing plugins

* add comment to plugin archive

* fix python style

* remove pip-tools (relic from the python plugin era)

* hard pin plugin server version

* remove copying of posthog.json from dev dockerfile (breaks if file doesn't exist, copied later anyway)

* update lockfile

Co-authored-by: James Greenhill <fuziontech@gmail.com>
Co-authored-by: Paolo D'Amico <paolodamico@users.noreply.github.com>
2020-11-02 15:08:30 +01:00
Tim Glaser
a0bd49c61f
Clickhouse binary capture (#2146)
* Clickhouse binary capture

* Fix typecheck
2020-10-30 20:08:23 +01:00
Karl-Aksel Puulmann
6b4889ebf1
Make DELETE synchronous in clickhouse tests / make tests less flaky (#2116)
* Make DELETE synchronous in clickhouse tests

This avoids some flaky behavior, example:
- https://github.com/PostHog/posthog/pull/2110/checks?check_run_id=1327279229

Documentation:
- https://clickhouse.tech/docs/en/operations/settings/settings/#mutations_sync

Tested it out by running the following test 1000 times - before change
it fails every ~50 runs locally.

```
         def test_delete_person(self):
-            person = person_factory(
-                team=self.team, distinct_ids=["person_1", "anonymous_id"], properties={"$os": "Chrom
e"},
-            )
-            event_factory(event="test", team=self.team, distinct_id="person_1")
-            event_factory(event="test", team=self.team, distinct_id="anonymous_id")
-            event_factory(event="test", team=self.team, distinct_id="someone_else")
-
-            response = self.client.delete(f"/api/person/{person.pk}/")
-            self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
-            self.assertEqual(response.data, None)
-            self.assertEqual(len(get_people()), 0)
-            self.assertEqual(len(get_events()), 1)
-
-        def test_filters_by_endpoints_are_deprecated(self):
+            for index in range(1000):
+                print([index])
+                person = person_factory(
+                    team=self.team, distinct_ids=["person_1", "anonymous_id"], properties={"$os": "Chrome"},
+                )
+                event_factory(event="test", team=self.team, distinct_id="person_1")
+                event_factory(event="test", team=self.team, distinct_id="anonymous_id")
+                event_factory(event="test", team=self.team, distinct_id="someone_else")
+
+                response = self.client.delete(f"/api/person/{person.pk}/")
+                self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
+                self.assertEqual(response.data, None)
+                self.assertEqual(len(get_people()), 0)
+                self.assertEqual(len(get_events()), 1)
```

* Add a if not TEST clause to deleting from materialized view

This blew up clickhouse when we try to force the delete to happen sync.
Created an upstream issue: https://github.com/ClickHouse/ClickHouse/issues/16548
2020-10-30 19:38:55 +01:00
Tim Glaser
f150cd2256
Clickhouse move to JSON extract for all filters (#2056)
* Clickhouse move to JSON extract for all filters

* fix test

* Fix ordering
2020-10-29 20:49:44 +01:00
Tim Glaser
9e0dc61845
[Clickhouse] speed up sessions list (#2118)
* [Clickhouse] speed up sessions list

* Switcheroo

* Fix offset
2020-10-29 20:07:08 +01:00
Tim Glaser
21ee2d58ff
[Clickhouse] More speed optimizations for funnels (#2109)
* [Clickhouse] More speed optimizations for funnels

* Do most of the processing of funnels in clickhouse itself

* Fix type issues

* Fix tests
2020-10-29 18:22:59 +01:00
Marius Andra
75192cf725
Try to debug redis leak (#2102)
* add a bunch of ignore_result=True statements

* ignore more tasks

* ignore all other results

* ignore more results, add .delay setting with notice
2020-10-29 17:24:41 +01:00
Yakko Majuri
d77059eba0
Add CH Person Sessions By Day (#2082)
* Add CH sessions by day

* fix formatting
2020-10-29 11:41:27 +00:00
Tim Glaser
3ad92ff9a4
Clickhouse improve funnel speed (#2100) 2020-10-29 12:25:02 +01:00
Tim Glaser
0d8faa4455
Clickhouse window funnel (#2086)
* Clickhouse use window funnel

* IPDB

* Fix more issues

* Sub second precision

* use dict instead of Person
2020-10-29 10:53:17 +01:00
James Greenhill
01099a5ffd
Provide required proto message length for our clickhouse overlords (#2087) 2020-10-28 16:48:05 -07:00
James Greenhill
83b5273113
Protobufize events to protect from malformed JSON (#2085)
* Protobuf all the things

* oops

* Protobufize events to protect from malformed JSON

* format the generated files (will need to remember this for future)

* format

* clean up kafka produce serializer

* fixes
2020-10-28 15:18:52 -07:00
Eric Duong
d95c8c8106
Fixes bad timerange for retentino (#2064)
* add time clamp

* fix postgres test

* fix type

* remove excess
2020-10-28 21:47:43 +01:00
Karl-Aksel Puulmann
e3bf0cb31d
Session recording on clickhouse, separate tables and retention cronjob (#2051)
* Add scheduled task to wipe session recordings

* Create a new table for session recording

* Save snapshot events to different table

* Use SessionRecordingEvent over Events everywhere

We can remove a ton of cruft this way as well

* Add missing signature

* Extract util from models/event

* Attempt to update ingest side of clickhouse session recording events

Note that it's using main kafka topic - not sure if a good idea.

* Get separate table in ch working for session recording events

* WIP: query sessions

* Make both session recording queries work

* Make linter happy

* Rebase migration

* Make tests work

* Apply a TTL to session recordings and other configuration:

- toYYYYMMDD partitioning should be smoother with TTL setup
- TTL achieves not needing to archive the data ourselves
- index_granularity will enable smaller reads per session_id
- ORDER BY clause is to make single session as well as time range query
  reasonable

* Convert retention cronjob to new model

* Add tests to process_event changes

* Add test for ee_capture change

* Fixup migration

* Make clickhouse tests drop/create session recording tables

* Make TTL not be there in tests

Otherwise writes get eaten by it during tests when mocking time

* Fix retention task

Co-authored-by: Tim Glaser <tim@glsr.nl>
2020-10-28 21:22:16 +01:00
Eric Duong
a3239921f3
Fix loading people and stickiness (#2067)
* don't use person_up_to_date_view and fix entity timestamp

* add test

* remove broken statement

* add test
2020-10-28 19:08:37 +01:00
Tim Glaser
03374824b8
Clickhouse never calculate action (#2059) 2020-10-28 19:08:12 +01:00
Eric Duong
3d831d7935
fix retention label and add tests (#2076)
* fix label and add tests

* fix formatting pg
2020-10-28 12:42:34 -04:00
Eric Duong
6ed558983d
Fixes bad interval (#2055)
* fix interval on breakdown and tests

* fix tests and match dat handling between breakdown and normal query

* fix dau test with new time handling
2020-10-28 05:38:31 -04:00
Tim Glaser
c8bf1d0a37
Fix cohorts clickhouse (#2052)
* use json extract inside steps for funnelq eury

* remove print

* fix broken query and add person prop filtering in funnel with test

* Fix cohorts in clickhouse

* Fix types

* Fix funnels

* fix tests

* Fix tests

* Fix cohorts breakdown

* Remove unused code

* Update description

* Remove negation

Co-authored-by: Eric <eeoneric@gmail.com>
2020-10-27 21:43:38 +01:00
Eric Duong
5bb713626b
Use jsonextract for steps in funnel query (#2040)
* use json extract inside steps for funnelq eury

* remove print

* fix broken query and add person prop filtering in funnel with test
2020-10-27 17:52:12 +01:00
Eric Duong
ff78a41b17
fix flaky test (#2048) 2020-10-27 10:02:23 -04:00
Eric Duong
0497655712
Restore original retention query (#2029)
* add back original query

* fix selects
2020-10-27 09:41:23 -04:00
Tim Glaser
e958bf90a3
Use uuids in funnels for consistency (#2036)
* Use uuids in funnels for consistency

* Fix type errors

* Fix tests
2020-10-27 13:01:09 +01:00
Tim Glaser
99e2f2e0d9
Clickhosue fix events for action with no steps (#2035) 2020-10-26 20:35:38 +01:00
Tim Glaser
d664cb8a6e
Fix funnels with multiple steps (#2034) 2020-10-26 20:35:09 +01:00
Eric Duong
06cf6562e3
Filter person_distinct_id table further before joining (#2028)
* add aliases

* select specific
2020-10-26 09:18:11 -04:00
Eric Duong
3b217c3bcc
Update person property filtering (#2024)
* change person prop base and fix cohort query

* try clear signal

* remove signal
2020-10-26 08:00:23 -04:00
Tim Glaser
21d240df30
[Clickhouse] Fix grabbing by person (#1960)
* Use postgres to grab person

* Fix type

* Fix grabbing by person id

* Fix type

* WIP people from clickhouse

* Fix person delete etc

* fix test

* Fix tests
2020-10-23 17:30:12 +02:00
Tim Glaser
151222eb28
[Clickhouse] Fix action filtering on events (#2013)
* Fix action filtering on events

* Fix tests

* Fix test
2020-10-23 17:29:59 +02:00
Eric Duong
d226b4b5b4
Add tests to important query builders (#2006)
* add default tests

* add action filter_event test

* add test to parse_prop_clauses

* add ordering to session list

* fix tests and funnel

* run again
2020-10-23 08:39:41 -04:00
Eric Duong
51105ace47
Add new person matieralized (#1944)
* add new table migrations and change table names

* include necessaray config for new tables in tests

* fix tests and table

* fix table name param

* add populate clause

* added table for key value person props

* adjust person filtering to use new table

* .

* add ordering on updated_at

* add back all the condition handling on persons filtering endpoint

* fix typgin

* remove print

* re-order sort key for persons_up_to_date

Co-authored-by: James Greenhill <fuziontech@gmail.com>
2020-10-22 13:22:43 -07:00
Eric Duong
fb352aa8dc
add default time range (#1989)
* add default time range

* fix var
2020-10-22 10:33:32 -04:00
Eric Duong
0b5bb1ad74
add filter on noisy events (#1988) 2020-10-22 09:46:01 -04:00
Eric Duong
9057549ca3
remove unneeded properties on query (#1984) 2020-10-22 09:18:38 -04:00