Skip to content

Commit 7a36e01

Browse files
authored
feat: add eventing for Credit 250 experiment (#4594)
1 parent 5739c57 commit 7a36e01

File tree

10 files changed

+237
-7
lines changed

10 files changed

+237
-7
lines changed

src/billing/components/Free/PAYGConversion.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ import {
1414
import {useHistory} from 'react-router-dom'
1515
import CloudUpgradeButton from 'src/shared/components/CloudUpgradeButton'
1616
import {isFlagEnabled} from 'src/shared/utils/featureFlag'
17+
import {event} from 'src/cloud/utils/reporting'
1718
import {GoogleOptimizeExperiment} from 'src/cloud/components/experiments/GoogleOptimizeExperiment'
19+
import {getDataLayerIdentity} from 'src/cloud/utils/experiments'
1820
import {CREDIT_250_EXPERIMENT_ID} from 'src/shared/constants'
1921

2022
const CARDINALITY_LIMIT = 1_000_000
@@ -46,6 +48,15 @@ export const Credit250PAYGConversion: FC = () => {
4648
</Heading>
4749
<CloudUpgradeButton
4850
className="credit-250-conversion-upgrade--button"
51+
metric={() => {
52+
const identity = getDataLayerIdentity()
53+
event(`billing.conversion.payg.credit-250.upgrade`, {
54+
location: 'billing',
55+
...identity,
56+
experimentId: CREDIT_250_EXPERIMENT_ID,
57+
experimentVariantId: '1',
58+
})
59+
}}
4960
showPromoMessage={false}
5061
size={ComponentSize.Large}
5162
/>

src/checkout/CancelButton.tsx

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
import React, {FC, useContext} from 'react'
22
import {CTAButton, ComponentColor} from '@influxdata/clockface'
33
import {CheckoutContext} from 'src/checkout/context/checkout'
4+
import {GoogleOptimizeExperiment} from 'src/cloud/components/experiments/GoogleOptimizeExperiment'
5+
import {getDataLayerIdentity} from 'src/cloud/utils/experiments'
6+
import {CREDIT_250_EXPERIMENT_ID} from 'src/shared/constants'
7+
import {event} from 'src/cloud/utils/reporting'
8+
import {isFlagEnabled} from 'src/shared/utils/featureFlag'
49

510
const CancelButton: FC = () => {
611
const {handleCancelClick} = useContext(CheckoutContext)
712

8-
return (
13+
const original = (
914
<CTAButton
1015
color={ComponentColor.Default}
1116
onClick={handleCancelClick}
@@ -14,6 +19,37 @@ const CancelButton: FC = () => {
1419
testID="checkout-cancel--button"
1520
/>
1621
)
22+
23+
const handleCancelCredit250Click = () => {
24+
const identity = getDataLayerIdentity()
25+
event('checkout.cancel.credit-250.upgrade', {
26+
location: 'checkout',
27+
...identity,
28+
experimentId: CREDIT_250_EXPERIMENT_ID,
29+
experimentVariantId: '1',
30+
})
31+
handleCancelClick()
32+
}
33+
34+
if (isFlagEnabled('credit250Experiment')) {
35+
return (
36+
<GoogleOptimizeExperiment
37+
experimentID={CREDIT_250_EXPERIMENT_ID}
38+
original={original}
39+
variants={[
40+
<CTAButton
41+
key="1"
42+
color={ComponentColor.Default}
43+
onClick={handleCancelCredit250Click}
44+
text="Cancel"
45+
id="button-cancel" // for google-analytics
46+
testID="checkout-cancel--button"
47+
/>,
48+
]}
49+
/>
50+
)
51+
}
52+
return original
1753
}
1854

1955
export default CancelButton

src/cloud/components/AssetLimitAlert.tsx

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,17 @@ import {
1515
} from '@influxdata/clockface'
1616
import CloudUpgradeButton from 'src/shared/components/CloudUpgradeButton'
1717

18+
// Utils
19+
import {event} from 'src/cloud/utils/reporting'
20+
import {isFlagEnabled} from 'src/shared/utils/featureFlag'
21+
import {
22+
getDataLayerIdentity,
23+
getExperimentVariantId,
24+
} from 'src/cloud/utils/experiments'
25+
1826
// Constants
1927
import {CLOUD} from 'src/shared/constants'
28+
import {CREDIT_250_EXPERIMENT_ID} from 'src/shared/constants'
2029

2130
// Types
2231
import {LimitStatus} from 'src/cloud/actions/limits'
@@ -50,6 +59,24 @@ const AssetLimitAlert: FC<Props> = ({limitStatus, resourceName, className}) => {
5059
<CloudUpgradeButton
5160
buttonText={`Get more ${resourceName}`}
5261
className="upgrade-payg--button__asset-alert"
62+
metric={() => {
63+
const experimentVariantId = getExperimentVariantId(
64+
CREDIT_250_EXPERIMENT_ID
65+
)
66+
const identity = getDataLayerIdentity()
67+
event(
68+
isFlagEnabled('credit250Experiment') &&
69+
experimentVariantId === '1'
70+
? `${resourceName}.alert.limit.credit-250.upgrade`
71+
: `${resourceName}.alert.limit.upgrade`,
72+
{
73+
asset: resourceName,
74+
...identity,
75+
experimentId: CREDIT_250_EXPERIMENT_ID,
76+
experimentVariantId,
77+
}
78+
)
79+
}}
5380
/>
5481
</FlexBox>
5582
</Panel.Body>

src/cloud/components/AssetLimitOverlay.tsx

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,16 @@ import {
1414
} from '@influxdata/clockface'
1515
import CloudUpgradeButton from 'src/shared/components/CloudUpgradeButton'
1616

17+
// Utils
18+
import {isFlagEnabled} from 'src/shared/utils/featureFlag'
19+
import {
20+
getDataLayerIdentity,
21+
getExperimentVariantId,
22+
} from 'src/cloud/utils/experiments'
23+
24+
// Constants
25+
import {CREDIT_250_EXPERIMENT_ID} from 'src/shared/constants'
26+
1727
// Types
1828
import {AppState} from 'src/types'
1929
import {event} from 'src/cloud/utils/reporting'
@@ -59,7 +69,22 @@ const AssetLimitOverlay: FC<OwnProps & StateProps> = ({assetName, onClose}) => {
5969
size={ComponentSize.Large}
6070
className="upgrade-payg--button__asset-create"
6171
metric={() => {
62-
event('asset limit upgrade', {asset: assetName})
72+
const experimentVariantId = getExperimentVariantId(
73+
CREDIT_250_EXPERIMENT_ID
74+
)
75+
const identity = getDataLayerIdentity()
76+
event(
77+
isFlagEnabled('credit250Experiment') &&
78+
experimentVariantId === '1'
79+
? `${assetName}.overlay.limit.credit-250.upgrade`
80+
: `${assetName}.overlay.limit.upgrade`,
81+
{
82+
asset: assetName,
83+
...identity,
84+
experimentId: CREDIT_250_EXPERIMENT_ID,
85+
experimentVariantId,
86+
}
87+
)
6388
}}
6489
/>
6590
</Overlay.Footer>

src/cloud/components/RateLimitAlert.tsx

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,14 @@ import {
2525
} from 'src/cloud/utils/limits'
2626
import {event} from 'src/cloud/utils/reporting'
2727
import {isFlagEnabled} from 'src/shared/utils/featureFlag'
28+
import {
29+
getDataLayerIdentity,
30+
getExperimentVariantId,
31+
} from 'src/cloud/utils/experiments'
2832

2933
// Constants
3034
import {CLOUD} from 'src/shared/constants'
35+
import {CREDIT_250_EXPERIMENT_ID} from 'src/shared/constants'
3136

3237
// Types
3338
import RateLimitAlertContent from 'src/cloud/components/RateLimitAlertContent'
@@ -126,7 +131,21 @@ const RateLimitAlert: FC<Props> = ({alertOnly, className, location}) => {
126131
<CloudUpgradeButton
127132
className="upgrade-payg--button__header"
128133
metric={() => {
129-
event('rate limit upgrade', {location})
134+
const experimentVariantId = getExperimentVariantId(
135+
CREDIT_250_EXPERIMENT_ID
136+
)
137+
const identity = getDataLayerIdentity()
138+
event(
139+
isFlagEnabled('credit250Experiment') && experimentVariantId === '1'
140+
? `${location}.alert.credit-250.upgrade`
141+
: `${location}.alert.upgrade`,
142+
{
143+
location,
144+
...identity,
145+
experimentId: CREDIT_250_EXPERIMENT_ID,
146+
experimentVariantId,
147+
}
148+
)
130149
}}
131150
/>
132151
)

src/cloud/components/RateLimitAlertContent.tsx

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ import {event} from 'src/cloud/utils/reporting'
2424
// Utils
2525
import {isFlagEnabled} from 'src/shared/utils/featureFlag'
2626
import {GoogleOptimizeExperiment} from 'src/cloud/components/experiments/GoogleOptimizeExperiment'
27+
import {
28+
getDataLayerIdentity,
29+
getExperimentVariantId,
30+
} from 'src/cloud/utils/experiments'
2731

2832
// Constants
2933
import {CREDIT_250_EXPERIMENT_ID} from 'src/shared/constants'
@@ -99,7 +103,24 @@ export const UpgradeContent: FC<UpgradeProps> = ({
99103
<CloudUpgradeButton
100104
className="upgrade-payg--button__rate-alert"
101105
showPromoMessage={false}
102-
metric={() => event(`user.limits.${type}.upgrade`, {location})}
106+
metric={() => {
107+
const experimentVariantId = getExperimentVariantId(
108+
CREDIT_250_EXPERIMENT_ID
109+
)
110+
const identity = getDataLayerIdentity()
111+
event(
112+
isFlagEnabled('credit250Experiment') &&
113+
experimentVariantId === '1'
114+
? `user.limits.${type}.credit-250.upgrade`
115+
: `user.limits.${type}.upgrade`,
116+
{
117+
location,
118+
...identity,
119+
experimentId: CREDIT_250_EXPERIMENT_ID,
120+
experimentVariantId,
121+
}
122+
)
123+
}}
103124
/>
104125
</FlexBox>
105126
</div>

src/cloud/utils/experiments.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,18 @@ export const getExperimentVariantId = (
2121
pushDataLayerEvent(activationEvent)
2222
return getVariant(experimentID)
2323
}
24+
25+
export const getDataLayerIdentity = () => {
26+
const identity = Object.assign(
27+
{},
28+
...(window?.dataLayer.map(element => {
29+
for (const key in element) {
30+
if (key === 'identity') {
31+
return element[key]
32+
}
33+
}
34+
return {}
35+
}) ?? [])
36+
)
37+
return identity
38+
}

src/support/components/FreeAccountSupportOverlay.tsx

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,17 @@ import {SafeBlankLink} from 'src/utils/SafeBlankLink'
88
// Contexts
99
import {OverlayContext} from 'src/overlays/components/OverlayController'
1010

11+
// Utils
12+
import {event} from 'src/cloud/utils/reporting'
13+
import {isFlagEnabled} from 'src/shared/utils/featureFlag'
14+
import {
15+
getDataLayerIdentity,
16+
getExperimentVariantId,
17+
} from 'src/cloud/utils/experiments'
18+
19+
// Constants
20+
import {CREDIT_250_EXPERIMENT_ID} from 'src/shared/constants'
21+
1122
import './ContactSupport.scss'
1223

1324
interface OwnProps {
@@ -62,7 +73,26 @@ const FreeAccountSupportOverlay: FC<OwnProps> = () => {
6273
</List>
6374
</Overlay.Body>
6475
<Overlay.Footer>
65-
<CloudUpgradeButton />
76+
<CloudUpgradeButton
77+
metric={() => {
78+
const experimentVariantId = getExperimentVariantId(
79+
CREDIT_250_EXPERIMENT_ID
80+
)
81+
const identity = getDataLayerIdentity()
82+
event(
83+
isFlagEnabled('credit250Experiment') &&
84+
experimentVariantId === '1'
85+
? `help-bar.overlay.free-account.credit-250.upgrade`
86+
: `help-bar.overlay.free-account.upgrade`,
87+
{
88+
location: 'help bar',
89+
...identity,
90+
experimentId: CREDIT_250_EXPERIMENT_ID,
91+
experimentVariantId,
92+
}
93+
)
94+
}}
95+
/>
6696
</Overlay.Footer>
6797
</Overlay.Container>
6898
)

src/writeData/subscriptions/components/CreateSubscriptionPage.tsx

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,14 @@ import {AppState, ResourceType, Bucket} from 'src/types'
3737
// Utils
3838
import {getAll} from 'src/resources/selectors'
3939
import {event} from 'src/cloud/utils/reporting'
40+
import {isFlagEnabled} from 'src/shared/utils/featureFlag'
41+
import {
42+
getDataLayerIdentity,
43+
getExperimentVariantId,
44+
} from 'src/cloud/utils/experiments'
45+
46+
// Constants
47+
import {CREDIT_250_EXPERIMENT_ID} from 'src/shared/constants'
4048

4149
// Actions
4250
import {shouldShowUpgradeButton, getQuartzMe} from 'src/me/selectors'
@@ -162,7 +170,22 @@ const CreateSubscriptionPage: FC = () => {
162170
>
163171
<CloudUpgradeButton
164172
metric={() => {
165-
event('subscription upgrade')
173+
const experimentVariantId = getExperimentVariantId(
174+
CREDIT_250_EXPERIMENT_ID
175+
)
176+
const identity = getDataLayerIdentity()
177+
event(
178+
isFlagEnabled('credit250Experiment') &&
179+
experimentVariantId === '1'
180+
? `subscriptions.create.credit-250.upgrade`
181+
: `subscriptions.create.upgrade`,
182+
{
183+
location: 'subscriptions create',
184+
...identity,
185+
experimentId: CREDIT_250_EXPERIMENT_ID,
186+
experimentVariantId,
187+
}
188+
)
166189
}}
167190
/>
168191
</FlexBox>

src/writeData/subscriptions/components/ParsingForm.tsx

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,14 @@ import LineProtocolForm from 'src/writeData/subscriptions/components/LineProtoco
3232
import {getOrg} from 'src/organizations/selectors'
3333
import {event} from 'src/cloud/utils/reporting'
3434
import {checkRequiredFields} from 'src/writeData/subscriptions/utils/form'
35+
import {isFlagEnabled} from 'src/shared/utils/featureFlag'
36+
import {
37+
getDataLayerIdentity,
38+
getExperimentVariantId,
39+
} from 'src/cloud/utils/experiments'
40+
41+
// Constants
42+
import {CREDIT_250_EXPERIMENT_ID} from 'src/shared/constants'
3543

3644
// Types
3745
import {SUBSCRIPTIONS, LOAD_DATA} from 'src/shared/constants/routes'
@@ -152,7 +160,22 @@ const ParsingForm: FC<Props> = ({
152160
<CloudUpgradeButton
153161
className="create-parsing-form__upgrade-button"
154162
metric={() => {
155-
event('parsing form upgrade')
163+
const experimentVariantId = getExperimentVariantId(
164+
CREDIT_250_EXPERIMENT_ID
165+
)
166+
const identity = getDataLayerIdentity()
167+
event(
168+
isFlagEnabled('credit250Experiment') &&
169+
experimentVariantId === '1'
170+
? `subscriptions.parsing-form.credit-250.upgrade`
171+
: `subscriptions.parsing-form.upgrade`,
172+
{
173+
location: 'subscriptions parsing form',
174+
...identity,
175+
experimentId: CREDIT_250_EXPERIMENT_ID,
176+
experimentVariantId,
177+
}
178+
)
156179
}}
157180
/>
158181
) : (

0 commit comments

Comments
 (0)