Skip to content

Commit 82a70a2

Browse files
feat(notebook/view): add post query statistics to tables (#4507)
* feat: add query stat for table num and row num * feat: move query stat to View component * fix(view): update data type for table column * style(view): add style to query stat * style(view): run prettier * feat: add process time to run the query * chore(view): reorganize component * chore(view): remove comment * chore: move QueryStat to `src/flows/pips/Table/view.tsx` * chore: replace useState with useRef for queryStart variable * chore: replace porps variables with context
1 parent 3a7e6f1 commit 82a70a2

File tree

2 files changed

+87
-1
lines changed

2 files changed

+87
-1
lines changed

src/flows/pipes/Table/view.scss

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
@import '@influxdata/clockface/dist/variables.scss';
2+
3+
.query-stat {
4+
padding: $cf-space-2xs 0;
5+
}
6+
7+
.query-stat--bold {
8+
font-weight: $cf-font-weight--medium;
9+
color: $cf-grey-75;
10+
padding-left: $cf-space-2xs;
11+
padding-right: $cf-space-s;
12+
}
13+
14+
.query-stat--normal {
15+
color: $cf-grey-55;
16+
padding: 0 $cf-space-2xs;
17+
}

src/flows/pipes/Table/view.tsx

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
// Libraries
2-
import React, {FC, useContext, useEffect, useMemo} from 'react'
2+
import React, {
3+
FC,
4+
useContext,
5+
useEffect,
6+
useMemo,
7+
useState,
8+
useRef,
9+
} from 'react'
10+
11+
// Styles
12+
import './view.scss'
313

414
// Components
515
import {Icon, IconFont} from '@influxdata/clockface'
@@ -21,6 +31,64 @@ import {downloadTextFile} from 'src/shared/utils/download'
2131
// Constants
2232
import {UNPROCESSED_PANEL_TEXT} from 'src/flows'
2333

34+
const QueryStat: FC = () => {
35+
const {loading, results} = useContext(PipeContext)
36+
const queryStart = useRef(0)
37+
const [processTime, setProcessTime] = useState(0)
38+
let tableNum = 0
39+
40+
const tableColumn = results.parsed.table?.getColumn('table') || []
41+
const lastTableValue = tableColumn[tableColumn.length - 1]
42+
43+
if (typeof lastTableValue === 'string') {
44+
tableNum = parseInt(lastTableValue) + 1
45+
} else if (typeof lastTableValue === 'boolean') {
46+
tableNum = lastTableValue ? 1 : 0
47+
} else {
48+
// number
49+
tableNum = lastTableValue + 1
50+
}
51+
52+
useEffect(() => {
53+
if (loading === RemoteDataState.Loading) {
54+
// start to count
55+
if (queryStart.current === 0) {
56+
queryStart.current = Date.now()
57+
setProcessTime(0)
58+
}
59+
return
60+
}
61+
62+
if (loading === RemoteDataState.Done && queryStart.current !== 0) {
63+
const timePassed = Date.now() - queryStart.current // ms
64+
queryStart.current = 0
65+
setProcessTime(timePassed)
66+
return
67+
}
68+
69+
queryStart.current = 0
70+
setProcessTime(0)
71+
}, [loading])
72+
73+
const queryStat = {
74+
tableNum,
75+
rowNum: results.parsed.table?.length || 0,
76+
processTime, // ms
77+
}
78+
79+
if (loading !== RemoteDataState.Done) {
80+
return null
81+
}
82+
83+
return (
84+
<div className="query-stat">
85+
<span className="query-stat--bold">{`${queryStat.tableNum} tables`}</span>
86+
<span className="query-stat--bold">{`${queryStat.rowNum} rows`}</span>
87+
<span className="query-stat--normal">{`${queryStat.processTime} ms`}</span>
88+
</div>
89+
)
90+
}
91+
2492
const Table: FC<PipeProp> = ({Context}) => {
2593
const {id, data, range, loading, results} = useContext(PipeContext)
2694
const {basic, getPanelQueries} = useContext(FlowQueryContext)
@@ -115,6 +183,7 @@ const Table: FC<PipeProp> = ({Context}) => {
115183
<Context resizes controls={caveat}>
116184
<div className="flow-visualization" id={id}>
117185
<div className="flow-visualization--view">
186+
<QueryStat />
118187
<View
119188
loading={loading}
120189
properties={

0 commit comments

Comments
 (0)