Skip to content

Commit 8b815c4

Browse files
feat: first mile events for data collection (#4123)
1 parent c5c7bbb commit 8b815c4

File tree

13 files changed

+142
-30
lines changed

13 files changed

+142
-30
lines changed

src/homepageExperience/components/steps/CreateToken.tsx

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,19 @@ import {getOrg} from 'src/organizations/selectors'
1414

1515
// Helper Components
1616
import {SafeBlankLink} from 'src/utils/SafeBlankLink'
17+
import {event} from 'src/cloud/utils/reporting'
1718

1819
type ReduxProps = ConnectedProps<typeof connector>
1920

21+
// Events log handling
22+
const logCopyCodeSnippet = () => {
23+
event('firstMile.pythonWizard.createToken.code.copied')
24+
}
25+
26+
const logDocsOpened = () => {
27+
event('firstMile.pythonWizard.createToken.docs.opened')
28+
}
29+
2030
const CreateTokenComponent: FC<ReduxProps & RouteComponentProps> = ({
2131
showOverlay,
2232
dismissOverlay,
@@ -50,10 +60,16 @@ const CreateTokenComponent: FC<ReduxProps & RouteComponentProps> = ({
5060
Save your token as an environment variable; you’ll use it soon. Run this
5161
command in your terminal:
5262
</p>
53-
<CodeSnippet text="export INFLUXDB_TOKEN=<your token here>" />
63+
<CodeSnippet
64+
text="export INFLUXDB_TOKEN=<your token here>"
65+
onCopy={logCopyCodeSnippet}
66+
/>
5467
<p style={{marginTop: '46px'}}>
5568
You can create tokens in the future in the{' '}
56-
<SafeBlankLink href={`orgs/${org.id}/load-data/tokens`}>
69+
<SafeBlankLink
70+
href={`orgs/${org.id}/load-data/tokens`}
71+
onClick={logDocsOpened}
72+
>
5773
Token page
5874
</SafeBlankLink>
5975
.

src/homepageExperience/components/steps/ExecuteAggregateQuery.tsx

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React from 'react'
22
import CodeSnippet from 'src/shared/components/CodeSnippet'
33

44
import {SafeBlankLink} from 'src/utils/SafeBlankLink'
5+
import {event} from 'src/cloud/utils/reporting'
56

67
const fromBucketSnippet = `from(bucket: “my-bucket”)
78
|> range(start: -10m) # find data points in last 10 minutes
@@ -16,27 +17,42 @@ for table in tables:
1617
for record in table.records:
1718
print(record)`
1819

20+
const logCopyCodeSnippet = () => {
21+
event('firstMile.pythonWizard.executeAggregateQuery.code.copied')
22+
}
23+
24+
const logDocsOpened = () => {
25+
event('firstMile.pythonWizard.executeAggregateQuery.docs.opened')
26+
}
27+
1928
export const ExecuteAggregateQuery = () => {
2029
return (
2130
<>
2231
<h1>Execute an Aggregate Query</h1>
2332
<p>
2433
An{' '}
25-
<SafeBlankLink href="https://docs.influxdata.com/flux/v0.x/function-types/#aggregates">
34+
<SafeBlankLink
35+
href="https://docs.influxdata.com/flux/v0.x/function-types/#aggregates"
36+
onClick={logDocsOpened}
37+
>
2638
aggregate
2739
</SafeBlankLink>{' '}
2840
function is a powerful method for returning combined, summarized data
2941
about a set of time-series data.
3042
</p>
31-
<CodeSnippet text={fromBucketSnippet} showCopyControl={false} />
43+
<CodeSnippet
44+
text={fromBucketSnippet}
45+
showCopyControl={false}
46+
onCopy={logCopyCodeSnippet}
47+
/>
3248
<p>
3349
In this example, we use the mean() function to calculate the average of
3450
data points in last 10 minutes.
3551
<br />
3652
<br />
3753
Run the following:
3854
</p>
39-
<CodeSnippet text={codeSnippet} />
55+
<CodeSnippet text={codeSnippet} onCopy={logCopyCodeSnippet} />
4056
<p style={{marginTop: '20px'}}>
4157
This will return the mean of the five values. ( (0+1+2+3+4) / 5 = 2 )
4258
</p>

src/homepageExperience/components/steps/ExecuteQuery.tsx

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import React from 'react'
22
import CodeSnippet from 'src/shared/components/CodeSnippet'
3+
import {event} from 'src/cloud/utils/reporting'
34

45
const fromBucketSnippet = `from(bucket: “my-bucket”)
56
|> range(start: -10m)`
@@ -13,6 +14,10 @@ for table in tables:
1314
for record in table.records:
1415
print(record)`
1516

17+
const logCopyCodeSnippet = () => {
18+
event('firstMile.pythonWizard.executeQuery.code.copied')
19+
}
20+
1621
export const ExecuteQuery = () => {
1722
return (
1823
<>
@@ -25,7 +30,11 @@ export const ExecuteQuery = () => {
2530
<br />
2631
Here is what a simple Flux query looks like on its own:
2732
</p>
28-
<CodeSnippet text={fromBucketSnippet} showCopyControl={false} />
33+
<CodeSnippet
34+
text={fromBucketSnippet}
35+
showCopyControl={false}
36+
onCopy={logCopyCodeSnippet}
37+
/>
2938
<p>
3039
In this query, we are looking for data points within last 10 minutes
3140
with field key of “field1”.
@@ -36,7 +45,7 @@ export const ExecuteQuery = () => {
3645
<br />
3746
Run the following:
3847
</p>
39-
<CodeSnippet text={query} />
48+
<CodeSnippet text={query} onCopy={logCopyCodeSnippet} />
4049
</>
4150
)
4251
}

src/homepageExperience/components/steps/Finish.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react'
1+
import React, {useEffect} from 'react'
22
import {
33
AlignItems,
44
ComponentSize,
@@ -8,8 +8,12 @@ import {
88
ResourceCard,
99
} from '@influxdata/clockface'
1010
import {InfluxDBUniversityIcon, VSCodePluginIcon} from '../HomepageIcons'
11+
import {event} from 'src/cloud/utils/reporting'
1112

1213
export const Finish = () => {
14+
useEffect(() => {
15+
event('firstMile.pythonWizard.finished')
16+
}, [])
1317
return (
1418
<>
1519
<h1>Congrats!</h1>

src/homepageExperience/components/steps/InitalizeClient.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
import React from 'react'
22
import CodeSnippet from 'src/shared/components/CodeSnippet'
3+
import {event} from 'src/cloud/utils/reporting'
4+
5+
const logCopyCodeSnippet = () => {
6+
event('firstMile.pythonWizard.initializeClient.code.copied')
7+
}
38

49
export const InitalizeClient = () => {
510
const pythonCode = `import os
@@ -25,7 +30,7 @@ write_api = client.write_api(write_options=SYNCHRONOUS)`
2530
<p style={{marginTop: '40px'}}>
2631
Paste the following code after the prompt (>>>) and press Enter.
2732
</p>
28-
<CodeSnippet text={pythonCode} />
33+
<CodeSnippet text={pythonCode} onCopy={logCopyCodeSnippet} />
2934
<p style={{marginTop: '42px'}}>
3035
Here, we initialize the token, organization info, and server url that is
3136
needed to set up the initial connection to InfluxDB. The client

src/homepageExperience/components/steps/InstallDependencies.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import React, {PureComponent} from 'react'
22
import CodeSnippet from 'src/shared/components/CodeSnippet'
3+
import {event} from 'src/cloud/utils/reporting'
34

45
export class InstallDependencies extends PureComponent {
6+
private logCopyCodeSnippet = () => {
7+
event('firstMile.pythonWizard.installDependencies.code.copied')
8+
}
59
render() {
610
return (
711
<>
@@ -11,7 +15,10 @@ export class InstallDependencies extends PureComponent {
1115
<code style={{color: '#B7B8FF'}}>influxdb-client</code> module. Run
1216
the command below in your terminal.
1317
</p>
14-
<CodeSnippet text="pip3 install influxdb-client" onCopy={null} />
18+
<CodeSnippet
19+
text="pip3 install influxdb-client"
20+
onCopy={this.logCopyCodeSnippet}
21+
/>
1522
<p style={{fontStyle: 'italic'}}>
1623
You’ll need to have Python 3 installed.
1724
</p>

src/homepageExperience/components/steps/Overview.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import React, {PureComponent} from 'react'
2+
import {event} from 'src/cloud/utils/reporting'
23

34
export class Overview extends PureComponent {
5+
private logDocsOpened = () => {
6+
event('firstMile.pythonWizard.overview.docs.opened')
7+
}
48
render() {
59
return (
610
<div>
@@ -23,7 +27,14 @@ export class Overview extends PureComponent {
2327

2428
<p style={{marginTop: '150px'}}>
2529
Want to just look at code? Check out the code snippets involved in
26-
this guide on <a href="https://github.com/influxdata/ui">Github</a>.
30+
this guide on{' '}
31+
<a
32+
href="https://github.com/influxdata/ui"
33+
onClick={this.logDocsOpened}
34+
>
35+
Github
36+
</a>
37+
.
2738
</p>
2839
</article>
2940
</div>

src/homepageExperience/components/steps/Step.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ const Step = (props: StepProps) => {
4242
color: iconAndTextColor,
4343
}}
4444
>
45-
{text.split('\n').map(function(item, key) {
45+
{text.split('\n').map(function(item, index) {
4646
return (
47-
<span key={key}>
47+
<span key={`${item}-${index}`}>
4848
{item}
4949
<br />
5050
</span>

src/homepageExperience/components/steps/WriteData.tsx

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import WriteDataDetailsContextProvider, {
1818
import {getOrg} from 'src/organizations/selectors'
1919
import DataListening from 'src/homepageExperience/components/DataListening'
2020
import {getBuckets} from 'src/buckets/actions/thunks'
21+
import {event} from 'src/cloud/utils/reporting'
2122

2223
const codeSnippet = `for value in range(5):
2324
point = (
@@ -28,6 +29,14 @@ const codeSnippet = `for value in range(5):
2829
write_api.write(bucket=bucket, org=org, record=point)
2930
time.sleep(1)`
3031

32+
const logCopyCodeSnippet = () => {
33+
event('firstMile.pythonWizard.writeData.code.copied')
34+
}
35+
36+
const logDocsOpened = () => {
37+
event('firstMile.pythonWizard.writeData.docs.opened')
38+
}
39+
3140
export const WriteDataComponent = () => {
3241
const org = useSelector(getOrg)
3342
const dispatch = useDispatch()
@@ -50,7 +59,10 @@ export const WriteDataComponent = () => {
5059
<p>
5160
To start writing data, we need a place to our time-series store data. We
5261
call these{' '}
53-
<SafeBlankLink href={`orgs/${org.id}/load-data/buckets`}>
62+
<SafeBlankLink
63+
href={`orgs/${org.id}/load-data/buckets`}
64+
onClick={logDocsOpened}
65+
>
5466
buckets.
5567
</SafeBlankLink>
5668
</p>
@@ -70,15 +82,21 @@ export const WriteDataComponent = () => {
7082
In this code, we define five data points and write each one for
7183
InfluxDB. Run the following code in your Python shell:
7284
</p>
73-
<CodeSnippet text={codeSnippet} />
85+
<CodeSnippet text={codeSnippet} onCopy={logCopyCodeSnippet} />
7486
<p style={{marginTop: '20px'}}>
7587
In the above code snippet, we define five data points and write each on
7688
the InfluxDB. Each of the 5 points we write has a{' '}
77-
<SafeBlankLink href="https://docs.influxdata.com/influxdb/v1.8/concepts/glossary/#field-key">
89+
<SafeBlankLink
90+
href="https://docs.influxdata.com/influxdb/v1.8/concepts/glossary/#field-key"
91+
onClick={logDocsOpened}
92+
>
7893
field
7994
</SafeBlankLink>{' '}
8095
and a{' '}
81-
<SafeBlankLink href="https://docs.influxdata.com/influxdb/v1.8/concepts/glossary/#tag-key">
96+
<SafeBlankLink
97+
href="https://docs.influxdata.com/influxdb/v1.8/concepts/glossary/#tag-key"
98+
onClick={logDocsOpened}
99+
>
82100
tag
83101
</SafeBlankLink>
84102
.

src/homepageExperience/containers/HomepageContainer.scss

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
margin-bottom: 30px;
1010
}
1111
align-items: center;
12+
justify-content: center;
1213
flex-direction: column;
1314
height: 100%;
1415
cursor: pointer;

0 commit comments

Comments
 (0)