Skip to content

Commit

Permalink
Enable plugins for everyone (#3557)
Browse files Browse the repository at this point in the history
* Put Team.plugins_opt_in out of use

* Put Plugins out of BETA

* Add attention-grabbing blip for Plugins in nav

* Add end of Plugins beta banner

* Refactor MenuItem highlighting

* Update Plugins page copy

* Prettier

* Add User.flags field and use it instead of posthog.persistence

* Fix User.flags API

* Update migration

* Update Plugins.tsx

* Roll back extraneous additions

* Roll back more

* Update code ordering
  • Loading branch information
Twixes authored Apr 7, 2021
1 parent c7ca412 commit 61feb50
Show file tree
Hide file tree
Showing 10 changed files with 35 additions and 188 deletions.
6 changes: 3 additions & 3 deletions frontend/src/layout/navigation/MainNavigation.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
} from '@ant-design/icons'
import { useActions, useValues } from 'kea'
import { Link } from 'lib/components/Link'
import { sceneLogic } from 'scenes/sceneLogic'
import { Scene, sceneLogic } from 'scenes/sceneLogic'
import { isMobile } from 'lib/utils'
import { useEscapeKey } from 'lib/hooks/useEscapeKey'
import lgLogo from 'public/posthog-logo-white.svg'
Expand Down Expand Up @@ -40,7 +40,7 @@ import { router } from 'kea-router'
import { eventUsageLogic } from 'lib/utils/eventUsageLogic'

// to show the right page in the sidebar
const sceneOverride: Record<string, string> = {
const sceneOverride: Partial<Record<Scene, string>> = {
action: 'actions',
person: 'persons',
dashboard: 'dashboards',
Expand All @@ -65,7 +65,7 @@ const MenuItem = ({ title, icon, identifier, to, hotkey, tooltip, onClick }: Men
const { featureFlags } = useValues(featureFlagLogic)

function activeScene(): string {
const nominalScene = loadingScene || scene
const nominalScene: Scene = loadingScene || scene
// Scenes with special handling can go here
return sceneOverride[nominalScene] || nominalScene
}
Expand Down
58 changes: 23 additions & 35 deletions frontend/src/scenes/plugins/Plugins.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,26 @@ import { PluginDrawer } from 'scenes/plugins/edit/PluginDrawer'
import { RepositoryTab } from 'scenes/plugins/tabs/repository/RepositoryTab'
import { InstalledTab } from 'scenes/plugins/tabs/installed/InstalledTab'
import { useActions, useValues } from 'kea'
import { userLogic } from 'scenes/userLogic'
import { pluginsLogic } from './pluginsLogic'
import { Spin, Tabs, Tag } from 'antd'
import { OptInPlugins } from 'scenes/plugins/optin/OptInPlugins'
import { Tag, Tabs } from 'antd'
import { PageHeader } from 'lib/components/PageHeader'
import { PluginTab } from 'scenes/plugins/types'
import { AdvancedTab } from 'scenes/plugins/tabs/advanced/AdvancedTab'
import { canGloballyManagePlugins, canInstallPlugins, canViewPlugins } from './access'
import { UserType } from '../../types'

export function Plugins(): JSX.Element | null {
const { user } = useValues(userLogic)
export function Plugins({ user }: { user: UserType }): JSX.Element | null {
const { pluginTab } = useValues(pluginsLogic)
const { setPluginTab } = useActions(pluginsLogic)
const { TabPane } = Tabs

if (!user) {
return <Spin />
}
useEffect(() => {
if (!canViewPlugins(user.organization)) {
window.location.href = '/'
}
}, [user])

if (!canViewPlugins(user.organization)) {
useEffect(() => {
window.location.href = '/'
}, [])
return null
}

Expand All @@ -43,35 +40,26 @@ export function Plugins(): JSX.Element | null {
</sup>
</>
}
caption={user.team?.plugins_opt_in ? "Plugins enable you to extend PostHog's core functionality." : ''}
caption="Plugins enable you to extend PostHog's core data processing functionality."
/>

{user.team?.plugins_opt_in ? (
<>
{canInstallPlugins(user.organization) ? (
<Tabs activeKey={pluginTab} onChange={(activeKey) => setPluginTab(activeKey as PluginTab)}>
<TabPane tab="Installed" key={PluginTab.Installed}>
<InstalledTab />
</TabPane>
{canGloballyManagePlugins(user.organization) && (
<TabPane tab="Repository" key={PluginTab.Repository}>
<RepositoryTab />
</TabPane>
)}
<TabPane tab="Advanced" key={PluginTab.Advanced}>
<AdvancedTab />
</TabPane>
</Tabs>
) : (
{canInstallPlugins(user.organization) ? (
<Tabs activeKey={pluginTab} onChange={(activeKey) => setPluginTab(activeKey as PluginTab)}>
<TabPane tab="Installed" key={PluginTab.Installed}>
<InstalledTab />
</TabPane>
{canGloballyManagePlugins(user.organization) && (
<TabPane tab="Repository" key={PluginTab.Repository}>
<RepositoryTab />
</TabPane>
)}
<PluginDrawer />
</>
<TabPane tab="Advanced" key={PluginTab.Advanced}>
<AdvancedTab user={user} />
</TabPane>
</Tabs>
) : (
<div style={{ maxWidth: 600, marginTop: 20 }}>
<OptInPlugins />
</div>
<InstalledTab />
)}
<PluginDrawer />
</div>
)
}
87 changes: 0 additions & 87 deletions frontend/src/scenes/plugins/optin/OptInPlugins.tsx

This file was deleted.

10 changes: 4 additions & 6 deletions frontend/src/scenes/plugins/tabs/advanced/AdvancedTab.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,13 @@ import React from 'react'
import { SourcePlugin } from 'scenes/plugins/tabs/advanced/SourcePlugin'
import { CustomPlugin } from 'scenes/plugins/tabs/advanced/CustomPlugin'
import { LocalPlugin } from 'scenes/plugins/tabs/advanced/LocalPlugin'
import { useActions, useValues } from 'kea'
import { useActions } from 'kea'
import { pluginsLogic } from 'scenes/plugins/pluginsLogic'
import { DangerZone } from 'scenes/plugins/tabs/advanced/DangerZone'
import { userLogic } from 'scenes/userLogic'
import { UserType } from 'src/types'

export function AdvancedTab(): JSX.Element {
const { user } = useValues(userLogic)
export function AdvancedTab({ user }: { user: UserType }): JSX.Element {
const { setPluginTab } = useActions(pluginsLogic)

return (
<>
<Alert
Expand Down Expand Up @@ -40,7 +39,6 @@ export function AdvancedTab(): JSX.Element {
<SourcePlugin />
<CustomPlugin />
{user && !user.is_multi_tenancy && <LocalPlugin />}
{user?.team?.plugins_opt_in && <DangerZone />}
</>
)
}
43 changes: 0 additions & 43 deletions frontend/src/scenes/plugins/tabs/advanced/DangerZone.tsx

This file was deleted.

1 change: 0 additions & 1 deletion frontend/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,6 @@ export interface TeamType {
slack_incoming_webhook: string
session_recording_opt_in: boolean
session_recording_retention_period_days: number | null
plugins_opt_in: boolean
ingested_event: boolean
is_demo: boolean
test_account_filters: FilterType[]
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@
},
"lint-staged": {
"*.{js,ts,tsx,json,yml,css,scss}": "prettier --write",
"*.{js,ts,tsx}": "eslint",
"*.{js,ts,tsx}": "eslint --fix",
"*.{py,pyi}": [
"flake8 --select=E9,F63,F7,F82",
"black",
Expand Down
9 changes: 2 additions & 7 deletions posthog/api/capture.py
Original file line number Diff line number Diff line change
Expand Up @@ -243,13 +243,8 @@ def get_event(request):
event_uuid=event_uuid,
)
else:
task_name = "posthog.tasks.process_event.process_event"
if settings.PLUGIN_SERVER_INGESTION or team.plugins_opt_in:
task_name += "_with_plugins"
celery_queue = settings.PLUGINS_CELERY_QUEUE
else:
celery_queue = settings.CELERY_DEFAULT_QUEUE

task_name = "posthog.tasks.process_event.process_event_with_plugins"
celery_queue = settings.PLUGINS_CELERY_QUEUE
celery_app.send_task(
name=task_name,
queue=celery_queue,
Expand Down
4 changes: 0 additions & 4 deletions posthog/api/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -202,9 +202,6 @@ def user(request):
team.session_recording_retention_period_days = data["team"].get(
"session_recording_retention_period_days", team.session_recording_retention_period_days,
)
if data["team"].get("plugins_opt_in") is not None:
reload_plugins_on_workers()
team.plugins_opt_in = data["team"].get("plugins_opt_in", team.plugins_opt_in)
team.completed_snippet_onboarding = data["team"].get(
"completed_snippet_onboarding", team.completed_snippet_onboarding,
)
Expand Down Expand Up @@ -281,7 +278,6 @@ def user(request):
"completed_snippet_onboarding": team.completed_snippet_onboarding,
"session_recording_opt_in": team.session_recording_opt_in,
"session_recording_retention_period_days": team.session_recording_retention_period_days,
"plugins_opt_in": team.plugins_opt_in,
"ingested_event": team.ingested_event,
"is_demo": team.is_demo,
"test_account_filters": team.test_account_filters,
Expand Down
3 changes: 2 additions & 1 deletion posthog/models/team.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,13 +97,14 @@ class Team(UUIDClassicModel):
session_recording_retention_period_days: models.IntegerField = models.IntegerField(
null=True, default=None, blank=True
)
plugins_opt_in: models.BooleanField = models.BooleanField(default=False)
signup_token: models.CharField = models.CharField(max_length=200, null=True, blank=True)
is_demo: models.BooleanField = models.BooleanField(default=False)
test_account_filters: JSONField = JSONField(default=list)
timezone: models.CharField = models.CharField(max_length=240, choices=TIMEZONES, default="UTC")
data_attributes: JSONField = JSONField(default=get_default_data_attributes)

# DEPRECATED, DISUSED: plugins are enabled for everyone now
plugins_opt_in: models.BooleanField = models.BooleanField(default=False)
# DEPRECATED, DISUSED: replaced with env variable OPT_OUT_CAPTURE and User.anonymized_data
opt_out_capture: models.BooleanField = models.BooleanField(default=False)
# DEPRECATED, DISUSED: now managing access in an Organization-centric way
Expand Down

0 comments on commit 61feb50

Please sign in to comment.