0
0
mirror of https://github.com/PostHog/posthog.git synced 2024-11-28 09:16:49 +01:00
Commit Graph

65 Commits

Author SHA1 Message Date
Tim Glaser
560fe0765e
Deprecate dashboard item type and move to display (#2715)
* Deprecate dashboard item type and move to display

* Mypy rerors

* fix test

* fix

* Fix test

* Fix another test

* Remove determineInsightType

* Get rid of RetentionTable display types

* Fix update dashboard
2020-12-11 20:12:52 +01:00
Tim Glaser
602931680c
Don't calculate broken cohorts (#2730)
* Don't calculate broken cohorts

* Reset to 0 on correct
2020-12-10 15:58:45 +01:00
Tim Glaser
e8d64117d3
Remove legacy funnel code (#2700)
* Remove legacy funnel code

* recsw

* Fix test
2020-12-08 18:23:46 +01:00
Tim Glaser
4ef642e9ad
Fix various caching issues (#2496)
* Don't return last refresh if no cache

* Add filters_hash, fix caching

* Add migration

* fix tests
2020-11-24 21:09:58 +01:00
Michael Matloka
d24783ece6
Org/projects UX enhancements (#2145)
* Improve member removal UX

* Add Delete Project

* Constrain project deletion in the frontend

* Improve no org

* Make minor fixes

* Bring back changes

* Add member level changing

* Update test_organization_members.py

* Fix org leaving edge case

* Polish Project Settings UI

* Allow full project deletion

* Fix dynamic page title edge case

* Mymymypy

* Remove console.log

* Remove obsolete test

* Fix API constraints

* Fix invite creation validation case

* Add cloud/self-hosted specificity to premium feature guarding

* Improve user setting logic in case of error

* Use Teammates instead of Team Members

* Improve org/project creation UX

* Add organization ownership

* Add migration

* Fix redirecting to org creation

* Improve clipboard toast consistency

* isort

* Update tests

* isort

* Update test_organization.py

* Fix typing (somewhat)

* Explain passing on ownership

* Address feedback

* Reverse guardPremiumFeature return

* Fix typing

* Fix test

* Fix last typing

* Fix merge conflict resolution

* Remove unused code
2020-11-23 10:53:45 +01:00
Tim Glaser
bb6b1e6b01
Increase action step url max length. Closes #2348 (#2369) 2020-11-16 17:50:16 +01:00
Eric Duong
7916ceb8ba
Revert "Revert "Plugin Attachments (#2263)" (#2376)" (#2380)
This reverts commit 9ff05e8c53.
2020-11-13 14:15:24 -05:00
Eric Duong
9ff05e8c53
Revert "Plugin Attachments (#2263)" (#2376)
This reverts commit 39c2e5973b.
2020-11-13 12:10:27 -05:00
Marius Andra
39c2e5973b
Plugin Attachments (#2263)
* file uploads for plugins [WIP]

* save plugin attachments

* rename file->attachment, add size

* rename file->attachment, add size

* rename config type "file" to "attachment"

* see already uploaded files

* new config schema, add markdown support, move "disabled/enabled" switch up for visibility

* hints via markdown

* new plugin server

* remove attachments

* fix config serialization due to formdata

* small fixes

* help mypy

* remove `isFormData` argument

* remove debugger

* consistent naming for add/remove attachment

* remove unused params

* extract plugin test http mock, create test for plugin/create, mark most fields as read-only

* update github helloworldplugin zip with JS version of plugin

* upgrade plugins

* add auth test

* test plugin repo and config

* test plugin API attachment uploads

* test plugin server status response

* extract plugin config FormData method

* fix mypy

* use FakeRedis, not FakeStrictRedis

* random try - add REDIS_URL to tests

* try bad github action print debugging

* try bad github action print debugging

* plugin tests under multi tenancy

* add fakeredis to CI FOSS test

* remove prints

* enable plugin tests if in EE
2020-11-13 15:18:12 +01:00
Tim Glaser
25a053cda4
Manage events view (#2319)
* Finish the local dev w/ proto setup

* WIP manage events view

* Add task, add interface etc

* Move everything to 'manage events' view

* Move all settings into single dropdown (can be reverted)

* Urls for tabs

* Fix migration

* Clickhouse and humanize volume

* Fix cypress test

* Fix sidebar cypress

* Fix cypress again

* Fix some small issues

* Address comments

* Corect naming

* Fix test'

Co-authored-by: James Greenhill <fuziontech@gmail.com>
2020-11-13 14:59:08 +01:00
Michael Matloka
f0ea1bd9e5
Send invite over email if possible (#2112)
Co-authored-by: Paolo D'Amico <paolodamico@users.noreply.github.com>
2020-11-10 09:13:17 +00:00
Marius Andra
995bdbc873
install and mark local plugins from the interface (#2172) 2020-11-03 00:12:14 +01: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
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
Paolo D'Amico
e6217f6484
Dashboard empty states (#2068) 2020-10-28 16:28:22 +00:00
Michael Matloka
600b0d5269
Remove useless User.is_superuser (#2026)
* Remove useless User.is_superuser

* Fix first_name
2020-10-26 17:15:02 +01:00
Michael Matloka
8dd8970854
Rename existing projects to "Default Project" (#2009)
* Rename existing projects to "Default Project"

* Use ORM instead of raw SQL

* Update latest_migrations.manifest
2020-10-23 16:03:34 +02:00
Paolo D'Amico
44bfcffca4
201021 Fix weekly email report (#1954)
* refactor weekly email task to schedule one async job per team

* optimise async email processing

* turns on weekly email cron job if env var is True

* ensure weekly report emails are sent only once to each email address

* fix mypy
2020-10-22 18:46:33 +02:00
Michael Matloka
533c7df105
Organization<>Team<>User structure (closes #1540) (#1562)
* Backend changes to implement #1461

* Added the missing migration files

* Fixes Typecheck errors

* Refactor request.user.team_set.get() to use request.user.team

* Updated user patch method to change current_team on team id instead of name

* Merged migration file

* Changes team property to return first item in queryset

* Fixes failing tests

* Changed User api to return the ids of the teams they are currently part of

* Frontend for changing teams

* Update and simplify migrations

* Improve team and user buttons

* Make team changing backend more logical

* Improve current_team mechanics

* Update test_team.py

* Fix Team.objects.create_with_data

* Update migration

* Update tests

* Make setup_review more convenient

* Add Organization and OrganizationMembership

* Replace is_admin with level

* Extend API

* Update team.py

* Improve modeling

* Improve handling of new mechanics

* Add proper migration

* Remove _ensure_organization_and_team

* Update 0084_org_team_user.py

* Improve user, org and team creation

* Make MembershipLevel more flexible for the future

* Add member deletion

* Fix naive datetime warnings

* Update setup_review.py

* Update API route

* Make PersonalAPIKey changes

* Update models and migrations, fix typing

* Fix typing

* Use MAC-less UUID v1 instead of v4 for better performance

* Add abstract UUIDModel

* Update utils.py

* Update utils.py

* Fix multi/unicast bit

* Update APIs, frontend and tests

* Update pull_request_template.md

* Fix comment

* Fix migration error

* Compress migrations

* Updates with minimal renaming

* More updates

* Make further updates

* Update test_team_user.py

* Fix issues

* Add migration

* Satisfy mypy

* Remove Signup redirect on logged in

* Use uuid1_macless in Person

* Fix typing

* Update tests

* Update /api/team/signup to /api/organization/signup

* Fix mypy issues and update tests

The remaining failures are actually missing functionality (TDD applied), so filling these in.

* Update 0086_org_live

* Make small improvements

* Implement permissions

* Remove now unneccesary membership check

* Update setup_dev.py

* Make small frontend improvements

* Add drf-nested-routers as requirement

* Remove unused import

* Implemented nested routes

* Remove cruft

* Add relevant org/proj/user name to headings

* Fix imports

* Update migration

* Replace unreliable drf-nested-routers with drf-extensions

* Improve unset team handling

* Make org and team creation proper

* Update migration

* Fix migration

* Update TopContent

* Update command palette for new sidebar structure

* Remove deprecated demo data deletion

* Assume that each org has a project and fix typing

* Require paid plan for multiple orgs and projects

* Make HogFlix demo a separate team

* Update migration

* Slightly improve style

* Adjust page layout bottom padding

* Make user dropdown nicer

* Fix base app tests

* Satisfy mypy

* Fix test_leave_organization

* Improve wording

* Possibly fix import

* Remove misplaced None check

* Enhance org and teams APIs and add tests

* Fix /api/projects for particular Team

* Improve invites and demo data

* Address feedback

* Put everything related to billing on Organization

* Fix minor issues

* Simplify invitation creation

* Update team model

* Make orgs and projects premium only on self-hosted

* Improve testing

* Update migration

* Remove extra License import

* Fix minor issues

* Fix Django tests

* Fix Cypress

* Fix yarn build

* Fix TeamSignupViewset

* Fix posthog-production incompatibility

* Remove extraneous insight endpoint registration

* Adjust tests for posthog-production

* Simplify invitations and fix email validation

* Address all feedback

* Satisfy mypy

* Update migration

* Fix constraint removal in migration

* Update tests

* Fix test creation edge case

* Run posthog-production CI tests against this branch and teams-live

* Ensure that js_posthog_api_key is always passed

* Fix preflight check pre-login

* Update cypress tests

* Update instanceStatus.js

* Bring ee tets up to par

* Bring actions-ux-201012 back

* Cypress retry in cypress.json

* Revert "Run posthog-production CI tests against this branch and teams-live"

This reverts commit d79cb844d8.

Co-authored-by: anna <ms.annaphilips@gmail.com>
Co-authored-by: Anna Philips <aphilips@matmacorp.com>
2020-10-22 10:58:32 +02:00
Paolo D'Amico
3f2119e58b
Fix: Clearing custom webhook message would save empty string (#1692) (#1892)
Co-authored-by: Jonathan Lloyd <jonathan@thisisjonathan.com>
2020-10-15 12:44:24 +02:00
Marius Andra
32592b36bb
Remove Toolbar Beta Toggle (#1853) 2020-10-15 11:42:42 +02:00
Michael Matloka
c3d3f83c49
Destroy lodash (#1864)
* Convert utils to TS and add missing lodash-like functions

* Purge lodash, using utils and ES features instead

* Remove lodash as a dependency

* Fix Annotation.created_at default value (was null)

* Convert all of utils to TypeScript

* Update ESLint rule @typescript-eslint/explicit-module-boundary-types

* Put all @types/* into devDependencies

* Lower @typescript-eslint/explicit-function-return-type severity

* Fix Annotation.created_at in a better way

* Don't copy item on push in groupBy

* Use `Set.has()` instead of `in Set`

* Update .eslintrc.js

* Update .eslintrc.js
2020-10-14 10:42:06 +02:00
Karl-Aksel Puulmann
d4a00c9da2
Make session recording possible (#1821)
* Store rrweb.js under /static/recorder.js

This will be loaded by posthog.js and start the recording.

* Add new migration for Team.session_recording_opt_in

This will be used to figure out by posthog.js whether to capture session
data or not.

* Drop dead code

* refact: extract method

* Refactor decide endpoint to load team separately from calculating feature flags

This will be used for deciding whether to capture or not session
recordings

* Send `sessionRecording` key as part of decide endpoint

Will be used by posthog.js to turn recording on/off

* Make tests pass

* Make rrweb available
2020-10-08 11:09:35 +02:00
Michael Matloka
8a629179a9
Organizations – models (#1674)
* Update only models

* Bring in line with master and use uuid1_macless

* Update models and annotation scope support

* Delete test_team_model.py

* Update user creation, team retrieval and fix tests

* Make fixes

* Rename migration

* Fix migrating from master

* Bring back previous company_name max_length

* Use get_price_id()

* Temporarily disable team member deletion

* Update user joining and leaving, and billing

* Improve first_name handling

* Update warning

* Update TestTeamUser

* Fix migration

* Update 0085_org_models.py

* Improve bootstrapping

* Move multitenancy price tests to posthog-production

* Update team_user.py

* Update setup_review.py

* Enhance opt_slash_path

* Update team.py

* Fix default test email

* Fix typing
2020-09-24 00:53:51 +02:00
James Greenhill
97a665d277
Leverage Postgres for Persons and reorder order by's on clickhouse" (#1681)
* Query optimizations

* more sql optimizations

* checkpoint

* fix migration

* add UUID field to person

* use django signals to signal that clickhouse needs to be updated

* cleanup person logic

* cleanups

* update migration

* Don't setup the django signals unless we are for sure using ee setup

* expecting back to 30 queries for capturing with new person

* add .venv to .gitignore

* add env back to .gitignore

Co-authored-by: Ubuntu <ubuntu@ip-172-31-73-18.ec2.internal>
2020-09-22 13:41:08 +01:00
Paolo D'Amico
1da7f43ef3
Improvements to PH user metrics (#1508)
* feat: first event ingested event & team_setup_complete property

* fix: typechecking

* refactor: optimization - reduce number of queries

* add `first_team_user` to `user signed up` event
2020-09-01 15:37:03 +02:00
Michael Matloka
c040601f49
Personal API keys and Zapier integration (#1281)
* Add missing migration

* Add generate_random_token() model util

* Move PublicTokenAuthentication to utils

* Make use of generate_random_token

* Add User.personal_access_token field

* Add PersonalAccessTokenAuthentication

* Fix PublicTokenAuthentication

* Fix migration and auth import

* Add personal_access_token to user API

* Update Setup.js

* Support trailing slash in API

* Improve PAT auth quality

* Add django-rest-hooks requirement

* Update settings.py for rest_hooks

* Fix django-rest-hooks requirement

* Bring back API routes with no double trailing slash

* Rename posthog.api.team to team_user

* Add API TODO

* Ad PAT auth with X-PAT HTTP header

* Replace User.personal_access_token with PersonalAPIKey model

* Fix PersonalAPIKey max_lengths

* Describe posthog.models.utils.generate_random_token better

* Add personal_api_key to API

* Add authenticate_header to PersonalAPIKeyAuthentication

* Add hook API endpoint

* Use django.utils.timezone in place of datetime.datetime

* Add Personal API Keys to Setup

* Sort personal_api_keys in ORM

* Add Action.on_perform()

* Remove requirements.txt comment

* Add a

* Add REST hook tasks

* Optimize PersonalAPIKeyAuthentication query

* Add a trailing slash version of /e endpoint

* Add team field to PersonalAPIKey model

* Add personal API key support to capture endpoint, get_cached_from_token

* Reject personal API keys from inactive users

* Add extra_properties_json field to /capture

* Improve PAK auth header regex

* Use custom hook model

* Deliver hooks

* Handle action.on_perform

* Consolidate userLogic in userLogic.tsx

* Update PersonalAPIKeys.js

* Make PersonalAPIKey foreign keys read-only

* Update requirements/dev.txt

* Make PersonalAPIKeys TSX

* Fix conflict

* Fix migration

* Fix minor mishaps

* Update and fix tests

* Use CharField of random 32 bits as hook.id

* Fix conflicting migrations

* Fix ValidationError in HookSerializer.validate_event

* Use query param in /api/event/actions ID filtering

* Rename endpoint `hook` to `hooks`

* Satisfy mypy

* Add tests

* Use DRF serialization in action_defined and annotation_created triggers

* Update migration leafs

* Make mypy ignore rest_hooks

* Update Django signal receiver names

* Update TS dependencies

* Revert "Update TS dependencies"

This reverts commit 7fc26fefcd.

* Add field user to Hook model

* Update migration leafs

* Fix circular import

* Fix some code

* Install git before running pip install in Dockerfiles

* Improve personal API keys UI

* Satisfy mypy

* Reword key label placeholder

* Add personal API key support to /api/user/*

Unfortunately these endpoints are still limited by CSRF protections at the moment, so not accessible outside PostHog itself.

* Improve PersonalAPIKeyAuthentication and add CsrfOrKeyViewMiddleware

* Run collectstatic before test

* Don't install dev dependencies in CI

* Update dependency installation order in CI

* Fix bug and describe PersonalAPIKeyAuthentication

* Fix CI issues

* Fix typing issues

* Fix more typing issues

* Use /api/personal_api_keys to list keys

* Move REST hooks (and therefore Zapier) to ee/

* Refactor personal API logic with kea-loaders

* Add "More about API authentication in PostHog docs."

* Update PersonalAPIKeys.tsx

* Use TestMixin

* Fix "Authentication" that should've been "Authorization"

* Add option to skip self.client.force_login in API tests

* Include team_id and user_id in personal API key serialization

* Update test_hooks.py

* Add personal API key tests

* Remove leftover

* Make ee.settings override posthog.settings

* Don't directly import from models

* Remove unused imports

* Fix mypy issues

* Fix HOOK_DELIVERER

* Use decorator for /api/user PAK auth

* Don't fire REST hook if user doesn't have "zapier" feature

* Import Optional

* Reword to "premium Zapier"

* Make mypy happy

* Fix test_delete_personal_api_key

* Fix misclick

* Fix and test /capture with personal API key

* Make mypy happy

* Remove extra_properties_json

* Resolve migrations

* Remove apt-utils

* Optimize and test PAK user.is_active filtering

* Replace DEBUG true with 1

* Remove unused instance_id

* Improve typing

* Fix deletion toast

* Refactor CopyToClipboard and use it in PAKs

* Use toast.success

* Update migrations

* Fix migration

* Fix migrations

* Complete merge

Co-authored-by: Tim Glaser <tim@glsr.nl>
2020-08-26 10:34:57 +02:00
Yakko Majuri
ba4a752646
Close #1292: Added tabs for distinguishing between different users (#1382)
* #1292: Added tabs for switching between user types in People

* updated fetchPeople implementation

* refactored and fixed pagination

* fixed search query across tabs issue

* updated api query param for person

* added tests

* added tests & fixed queries

* added cypress tests

* Improve code style

* Improve regex and add compatilibity with demo data

* Improve variable naming

* Switched user identifying mechanism

* made it demo friendly

* Improved method for identifying users, added tests

* fixing minor mistakes

* made cypress test more robust

* cypress test update

* fixed migrations conflict

* updated cypress tests

* Optimize process_event conditions

* Update comment

* Make _set_is_identified more versatile

* Update demo.py

* Rename queryset_anonymous_pass

* Improve rudimental identification detection

* User kea-router for All Users category tab

* Optimize People

* Make category play well with cohort in People

* Simplify way of filtering by identification

* Remove need for deep copy

* Check location in People tabs E2E test

* Update test_process_event.py

* Black test_process_event.py

* Fix test_set_is_identified

* Try E2E test with cy.wait(200)

* Try E2E with more waiting

* Don't check location in E2E test

* Add test_category_param

* Update migration

Co-authored-by: Twixes <dev@twixes.com>
2020-08-25 01:58:12 +02:00
Eric Duong
b172eee920
Insight history (#1379)
* add insight history

* add table

* edit format

* links working

* add modal

* add tab switch

* saving insights

* remove insights model

* no model for insight history

* initial working

* remove wrong typegen

* made the history per user

* missing param

* added funnel support

* add details

* add delete saved insight functionality

* add line break logic and funnel name

* fix reload logic

* fix rendering error

* add pagination component

* fix bugs

* add backend tests

* add insight-history-panel check

* add drawer and replace table

* add loading next

* add date

* add callback

* update test

* use table

* fix spacing

* fix rows

* adjust spacing

* fix spacing and styling

* fix spacing and styling

* .

* add missing package

* Funnel refactor (#1381)

* main funnel-insight page working

* consolidated funnels

* refactor funnel dashboard item

* dashboard modals working

* update demo creation

* updated migration

* fix frontend for funnels

* remove funnel code and fix bugs

* fix test and remove caching temp

* remove old tests

* fix types

* added panel for past funnels

* implement polling for funnel refactor

* .

* fix dashbaord item bug

* add params

* fix params

* clean up caching functionality

* fix types

* caching working properly

* fix dashboard update bug

* fix migrations

* fix check

* update caching to work properly

* Fix default

* fix api and styling for insight history

* more spacing

* update funnel automatically

* update tests

* fix clear condition

* merge insight history

* return save functionality

* remove file

* added extra save functionality
2020-08-24 17:02:13 -04:00
Michael Matloka
dcc61e364c
Migrate cohortpeople_id to BigAutoField (#1478) 2020-08-21 18:18:28 +02:00
Tim Glaser
b85415c8d3
Move to bigints (#1471)
* Move to bigints everywhere

* Move only cohortpeople to bigint
2020-08-19 14:54:23 +02:00
Tim Glaser
23f5918477
Add enterprise edition and licensing (#1390)
* Add enterprise edition and licensing

* Cypress test

* License wording change

* Fix typos
2020-08-14 11:23:55 +02:00
Max Ungless
d14b0404ae
Enhancement (#1156) Adding more slack context via tokenisation (#1219)
* Added ability to customise Slack/Teams messages with additional context

* Refactor slightly and improve UX

* Reword Setup #webhooks description

* Update test_user.py

* Improve Edit action webhook configuration UI

* Refactor webhooks to be more universal

* Change tasks.slack to tasks.webhooks

* Make message format input clearer

* Make post_event_to_webhook more resilient with retries

* Minor fixes

Co-authored-by: Twixes <dev@twixes.com>
2020-08-11 10:53:35 +02:00
Eric Duong
249ec347c3
Revert "Insight history (#1303)" (#1363)
This reverts commit 4166e96364.
2020-08-05 17:00:56 +02:00
Eric Duong
4166e96364
Insight history (#1303)
* add insight history

* add table

* edit format

* links working

* add modal

* add tab switch

* saving insights

* remove insights model

* no model for insight history

* initial working

* remove wrong typegen

* made the history per user

* missing param

* added funnel support

* add details

* add delete saved insight functionality

* add line break logic and funnel name

* fix reload logic

* fix rendering error

* add pagination component

* fix bugs

* add backend tests

* add insight-history-panel check

* add drawer and replace table

* add loading next

* add date

* add callback

* update test

* use table

* fix spacing

* fix rows

* adjust spacing

* fix spacing and styling

* fix spacing and styling
2020-08-05 10:13:57 -04:00
Marius Andra
863e75bf9f
Toolbar Default On + Load Test (#1326)
* set user.toolbar_mode default to "toolbar", turning it on for new users

* test that the toolbar loads when you open /demo
2020-08-04 14:46:08 +02:00
Tim Glaser
2d650c7934
1327 fix cumulative (#1328)
* Closes #1327 fix cumulative

* Fix events

* Add more checks for falsey values
2020-08-03 14:49:50 +02:00
Marius Andra
3fb85aabf6
Add missing migration for ActionStep URL matching regex (#1311) 2020-07-30 16:33:15 +02:00
Tim Glaser
31f3185776
Closes #1020 WIP shared dashboards (#1071)
* add test for caching funnels and refreshing

* Closes #1020 WIP shared dashboards

* Make webpack work

* Progress?

* Hash the entire filter and add share tokens

* Make webpack work properly

* Fix sentry error

* Tighten up the caching logic

* Correctly refresh items and show in frontend'

* Add some padding

* fix caching, update layout

* Add cypress tests

* Fix merge conflict mistake

* Convert share_token to boolean

* Hide text when small

* Redo tooltip for lock

* Remove move cursor when in shared mode

* Improve spacing

* Fix state being incorrect

* Use selectors instead of value

* Use const instead of let

* Fix type errors et al

* Increase cache size

* Fix dashboard tests

* Fix team tests

* Add wait time

* Fix tests

* Fix refreshing

* Fix dashboard tests

* Fix test

* Excluded deleted dashboard items and don't show refreshing

* Fix renaming issue

* Fix migrations and fix display of status change

* Use grid for responsive header

* Don't load annotations

* Eslint

* Fix variable naming

Co-authored-by: Eric <eeoneric@gmail.com>
2020-07-23 10:41:59 +02:00
Michael Matloka
4fe9b3c0ad
Aggregate functions on Trends (closes #1193) (#1217)
* Update entityFilterLogic for filter.math_property

* Add new math types and math_property to ActionFilterRow

* Add backend support for new math types

* Update data-attrs

* Add dropdown Cy test

* Add API tests

* Improve process_math style

* Add resiliency to non-number property value occurences

* Annotate for clarity

* Update UI text

* Update UI text a bit more

* Reword tooltip

* Update UI slightly

* Update capitalization

* Improve internal style

* Improve code style

* Filter out property `token`

* Utilize formatted string

* Don't show empty dropdown contents

* Add event_properties_numerical for the future

* Fix dropdown button title
2020-07-21 16:18:11 +02:00
James Greenhill
56ec7e9be7
Closes #1059: Async processing of Event -> Action mapping (#1170)
* Make Async processing of event -> action mappings optional for large installations

* black format python

* Bump frequency for mapping Events -> Actions to hourly

* make the recalculation of action -> events incremental

* just use naive datetime for default start

* add created_at field for events to base incremental event->action mapping off of

* use timezone aware now's

* remove old test for a migration long gone

* use naive date for default start period on calculate_events_for_period

* default old events to created_at null and fix time calculated

* set last calculated when EmptyResultSet

* black format migration

* update migration to not conflict

* consolidate calculate_events functions

* Consolidate logic and handle nulls in created_at gracefully

* add ACTION_EVENT_MAPPING_INTERVAL_MINUTES as env var

* Feedbacked, no env var for calc period and add null=true on event model

* update migrations w/ feedback

* black format migration
2020-07-14 12:36:43 -07:00
Eric Duong
9fb2f64cba
Annotations (#1120)
* draw a vertical line

* some annotation

* progress

* progress on logic and mouse events

* popover aligned

* comment popup working

* fix spacing

* add model

* annotation endpoint

* initial working

* frontend create dashbaord item with annotations working/ modified model

* remove plugin

* add sizing hook

* fully working basic implementation

* style the notes

* annotations delete

* annotations base complete

* tweaking spacing and styling

* enforce input limit

* format

* add margin

* restrict deletes to proper users

* modify styling

* add api tests

* add error boundary to graph

* fix code comments

* fix lint

* fix how name is determined

* nit

* refactor into logic

* ux fixes

* colors

* inting errors

* fix dashbaord test

* remove hardcoded test

* fix linting again

* remove autofocus

* add dynamic spacing for annotations and fix margins

* more patches

* disable annotations on compared graph

* code fixes

* fix mouseover detail

* add patch

* add control for mousedown

* add condition

* add escape key functionality

* refine boundary recalculation condition

* missing call

* fix dragging listener

* some refactoring and add control for dragging/popup

* better control when clustered

* one more tweak

* use ref again

* add condition

* another condition

* remove animations

* limit area

* adjust spacing

* condition

* minor fix

* colors

* more patches

* use draggablecancel

Co-authored-by: Marius Andra <marius.andra@gmail.com>
2020-07-10 10:28:15 -04:00
Eric Duong
f8f27316c5
Team timestamp with proper defaults (#1083)
* team-timestamp

* add updated_at field

* update manifest

* use proper default

* remove blank
2020-06-30 11:46:41 +02:00
Karl-Aksel Puulmann
02b68b6b1b
Add index to Action model (#1085)
This is a micro-optimization, likely doesn't matter for the actual bug
but something I noticed debugging issue 1059.

The query in question is:

```
last_updated_action_ts = Action.objects.filter(team_id=self.team_id).aggregate(models.Max("updated_at"))['updated_at__max']
```

The query plan before:
```
d25vf5hht9th9v> explain analyze SELECT MAX("posthog_action"."updated_at") AS "updated_at__
  max"
    FROM "posthog_action"
   WHERE "posthog_action"."team_id" = 1;
+----------------------------------------------------------------------------------------------------
| QUERY PLAN
|----------------------------------------------------------------------------------------------------
| Aggregate  (cost=5.46..5.47 rows=1 width=8) (actual time=0.026..0.026 rows=1 loops=1)
|   ->  Bitmap Heap Scan on posthog_action  (cost=2.06..5.46 rows=2 width=8) (actual time=0.019..0.02
|         Recheck Cond: (team_id = 1)
|         Heap Blocks: exact=1
|         ->  Bitmap Index Scan on posthog_action_team_id_3a21e3a6  (cost=0.00..2.06 rows=2 width=0)
|               Index Cond: (team_id = 1)
| Planning Time: 0.145 ms
| Execution Time: 0.062 ms
```

After:
```
+----------------------------------------------------------------------------------------------------
| QUERY PLAN
|----------------------------------------------------------------------------------------------------
| Result  (cost=2.06..2.06 rows=1 width=8) (actual time=0.024..0.024 rows=1 loops=1)
|   InitPlan 1 (returns $0)
|     ->  Limit  (cost=0.06..2.06 rows=1 width=8) (actual time=0.020..0.020 rows=1 loops=1)
|           ->  Index Only Scan using posthog_act_team_id_8c04de_idx on posthog_action  (cost=0.06..4
|                 Index Cond: ((team_id = 1) AND (updated_at IS NOT NULL))
|                 Heap Fetches: 1
| Planning Time: 0.147 ms
| Execution Time: 0.049 ms
```
2020-06-25 20:52:38 +02:00
Marius Andra
684bb13772
Toolbar BETA Toggle (#951)
* per-user toggle to use new toolbar

* add migration

* fix test and remove setting

* add choices to toolbar setting

* fix latest_migrations.manifest

* update text

* add hint to restart the browser

* fix test now that the setting is gone

* simplify language
2020-06-25 13:46:49 +02:00
Eric Duong
c6428e9190
Onboarding Wizard (#1051)
* intiial working

* remove animation and added snippets

* full flow working

* reorganize

* more cleanup

* fix linting

* add test for the onboarding flow

* add elixir and send event script

* try without cache

* restore cache and move directory

* udpate case

* add lazy loading to onboarding flow

* move field to team

* .

* update styling

* add default

* migration with default working

* add missing model field

* conditional test based on DOM

* add promise return

* try wait

* test again x2
2020-06-24 12:03:28 -04:00
Tim Glaser
dfb9fd5dee
Revert "Add created_at to team model (#1075)" (#1082)
This reverts commit 9e90215709.
2020-06-24 15:20:17 +02:00
Eric Duong
9e90215709
Add created_at to team model (#1075)
* team-timestamp

* add updated_at field

* update manifest
2020-06-24 09:03:06 -04:00
Karl-Aksel Puulmann
5257c30ff1
Enable discarding of IP address data (#1081)
* Add migration to add `anonymize_ips` boolean field

Issue #947

* Add setting to not capture ip data

This solves issue 947
2020-06-24 10:38:45 +02:00
Tim Glaser
f61e9c111b
517 feature flags (#1017)
* WIP #517 feature flags

* Fix default filters

* Move decide to its own file

* Bump posthog-js 1.2.2

* Fix decide endpoint

* Add logic, update posthog-js

* yarn lock

* update snippet

* Add cypress tests

* Add example code

* Fix example code

* Add tests for query size

* Add errors when trying to create feature flag with same key

* Add explanation comment

* Fix cypress tests

* Do caching of teams in Team model

* Use <= instead of <

* Instrumentation and fix

* Fix ci test

* Add patch for team

* Debug test

* It passed
2020-06-22 10:57:09 +02:00