Skip to content

Commit

Permalink
ui: break loop dep
Browse files Browse the repository at this point in the history
  • Loading branch information
unbyte committed Oct 18, 2020
1 parent a7f8ca3 commit 71cc350
Show file tree
Hide file tree
Showing 5 changed files with 172 additions and 248 deletions.
39 changes: 17 additions & 22 deletions ui/lib/apps/SlowQuery/utils/tableColumns.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,21 @@ function ResultStatusBadge({ status }: { status: 'success' | 'error' }) {
//////////////////////////////////////////
const TRANS_KEY_PREFIX = 'slow_query.fields'

export const derivedFields = {
cop_proc_avg: [
{ tooltipPrefix: 'mean', fieldName: 'cop_proc_avg' },
{ tooltipPrefix: 'max', fieldName: 'cop_proc_max' },
{ tooltipPrefix: 'p90', fieldName: 'cop_proc_p90' },
],
cop_wait_avg: [
{ tooltipPrefix: 'mean', fieldName: 'cop_wait_avg' },
{ tooltipPrefix: 'max', fieldName: 'cop_wait_max' },
{ tooltipPrefix: 'p90', fieldName: 'cop_wait_p90' },
],
}

//////////////////////////////////////////

export function slowQueryColumns(
rows: SlowquerySlowQuery[],
showFullSQL?: boolean
Expand Down Expand Up @@ -73,28 +88,8 @@ export function slowQueryColumns(
tcf.bar.single('commit_backoff_time', 'ns', rows),
tcf.bar.single('resolve_lock_time', 'ns', rows),
// cop
tcf.bar.multiple(
{
bars: [
{ mean: 'cop_proc_avg' },
{ max: 'cop_proc_max' },
{ p90: 'cop_proc_p90' },
],
},
'ns',
rows
),
tcf.bar.multiple(
{
bars: [
{ mean: 'cop_wait_avg' },
{ max: 'cop_wait_avg' },
{ p90: 'cop_wait_avg' },
],
},
'ns',
rows
),
tcf.bar.multiple({ sources: derivedFields.cop_proc_avg }, 'ns', rows),
tcf.bar.multiple({ sources: derivedFields.cop_wait_avg }, 'ns', rows),
// transaction
tcf.bar.single('write_keys', 'short', rows),
tcf.bar.single('write_size', 'bytes', rows),
Expand Down
16 changes: 7 additions & 9 deletions ui/lib/apps/SlowQuery/utils/useSlowQueryTableController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import client, { ErrorStrategy, SlowquerySlowQuery } from '@lib/client'
import { calcTimeRange, TimeRange, IColumnKeys } from '@lib/components'
import useOrderState, { IOrderOptions } from '@lib/utils/useOrderState'

import { slowQueryColumns } from './tableColumns'
import { derivedFields, slowQueryColumns } from './tableColumns'
import { getSelectedFields } from '@lib/utils/tableColumnFactory'

export const DEF_SLOW_QUERY_COLUMN_KEYS: IColumnKeys = {
Expand Down Expand Up @@ -123,18 +123,16 @@ export default function useSlowQueryTableController(
querySchemas()
}, [])

// Notice: slowQueries, tableColumns, selectedFields make loop dependencies
const selectedFields = useMemo(
() => getSelectedFields(visibleColumnKeys, derivedFields).join(','),
[visibleColumnKeys]
)

const tableColumns = useMemo(
() => slowQueryColumns(slowQueries, showFullSQL),
[slowQueries, showFullSQL]
)
// make selectedFields as a string instead of an array to avoid infinite loop
// I have verified that it will cause infinite loop if we return selectedFields as an array
// so it is better to use the basic type (string, number...) instead of object as the dependency
const selectedFields = useMemo(
() => getSelectedFields(visibleColumnKeys, tableColumns).join(','),
[visibleColumnKeys, tableColumns]
)

useEffect(() => {
async function getSlowQueryList() {
setLoadingSlowQueries(true)
Expand Down
241 changes: 70 additions & 171 deletions ui/lib/apps/Statement/utils/tableColumns.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,31 +10,65 @@ import { orange, red } from '@ant-design/colors'
import { StatementModel } from '@lib/client'
import { Bar, Pre } from '@lib/components'
import {
TableColumnFactory,
formatVal,
genDerivedBar,
IColumnWithSourceFields,
TableColumnFactory,
} from '@lib/utils/tableColumnFactory'

///////////////////////////////////////
// statements order list in local by fieldName of IColumn
// slow query order list in backend by key of IColumn
const TRANS_KEY_PREFIX = 'statement.fields'

export const derivedFields = {
avg_latency: genDerivedBar('avg_latency', 'max_latency', 'min_latency'),
parse_latency: genDerivedBar('avg_parse_latency', 'max_parse_latency'),
compile_latency: genDerivedBar('avg_compile_latency', 'max_compile_latency'),
process_time: genDerivedBar('avg_cop_process_time', 'max_cop_process_time'),
wait_time: genDerivedBar('avg_cop_wait_time', 'max_cop_wait_time'),
total_process_time: genDerivedBar('avg_process_time', 'max_process_time'),
total_wait_time: genDerivedBar('avg_wait_time', 'max_wait_time'),
backoff_time: genDerivedBar('avg_backoff_time', 'max_backoff_time'),
avg_write_keys: genDerivedBar('avg_write_keys', 'max_write_keys'),
avg_processed_keys: genDerivedBar('avg_processed_keys', 'max_processed_keys'),
avg_total_keys: genDerivedBar('avg_total_keys', 'max_total_keys'),
prewrite_time: genDerivedBar('avg_prewrite_time', 'max_prewrite_time'),
commit_time: genDerivedBar('avg_commit_time', 'max_commit_time'),
get_commit_ts_time: genDerivedBar(
'avg_get_commit_ts_time',
'max_get_commit_ts_time'
),
commit_backoff_time: genDerivedBar(
'avg_commit_backoff_time',
'max_commit_backoff_time'
),
resolve_lock_time: genDerivedBar(
'avg_resolve_lock_time',
'max_resolve_lock_time'
),
local_latch_wait_time: genDerivedBar(
'avg_local_latch_wait_time',
'max_local_latch_wait_time'
),
avg_write_size: genDerivedBar('avg_write_size', 'max_write_size'),
avg_prewrite_regions: genDerivedBar(
'avg_prewrite_regions',
'max_prewrite_regions'
),
avg_txn_retry: genDerivedBar('avg_txn_retry', 'max_txn_retry'),
avg_mem: genDerivedBar('avg_mem', 'max_mem'),
sum_errors: ['sum_errors', 'sum_warnings'],
related_schemas: ['table_names'],
}

//////////////////////////////////////////

function avgMinMaxLatencyColumn(
tcf: TableColumnFactory,
rows?: { max_latency?: number; min_latency?: number; avg_latency?: number }[]
): IColumn {
return tcf.bar.multiple(
{
bars: [
{ mean: 'avg_latency' },
{ max: 'max_latency' },
{ min: 'min_latency' },
],
},
'ns',
rows
)
return tcf.bar.multiple({ sources: derivedFields.avg_latency }, 'ns', rows)
}

function errorsWarningsColumn(
Expand All @@ -49,7 +83,7 @@ function errorsWarningsColumn(
name: tcf.columnName('errors_warnings'),
key,
fieldName: key,
sourceFields: ['sum_errors', 'sum_warnings'],
sourceFields: derivedFields.sum_errors,
minWidth: 140,
maxWidth: 200,
columnActionsMode: ColumnActionsMode.clickable,
Expand Down Expand Up @@ -80,16 +114,14 @@ Warnings: ${warningsFmtVal}`

function avgMaxColumn<T>(
tcf: TableColumnFactory,
avgKey: keyof T,
maxKey: keyof T,
displayTransKey: string,
unit: string,
rows?: T[]
): IColumn {
return tcf.bar.multiple(
{
displayTransKey,
bars: [{ mean: avgKey }, { max: maxKey }],
sources: derivedFields[displayTransKey],
},
unit,
rows
Expand All @@ -116,161 +148,28 @@ export function statementColumns(
maxWidth: 300,
columnActionsMode: ColumnActionsMode.clickable,
},
avgMaxColumn(tcf, 'avg_mem', 'max_mem', 'avg_mem', 'bytes', rows),
avgMaxColumn(tcf, 'avg_mem', 'bytes', rows),
errorsWarningsColumn(tcf, rows),
avgMaxColumn(
tcf,
'avg_parse_latency',
'max_parse_latency',
'parse_latency',
'ns',
rows
),
avgMaxColumn(
tcf,
'avg_compile_latency',
'max_compile_latency',
'compile_latency',
'ns',
rows
),
avgMaxColumn(tcf, 'parse_latency', 'ns', rows),
avgMaxColumn(tcf, 'compile_latency', 'ns', rows),
tcf.bar.single('sum_cop_task_num', 'short', rows),
avgMaxColumn(
tcf,
'avg_cop_process_time',
'max_cop_process_time',
'process_time',
'ns',
rows
),
avgMaxColumn(
tcf,
'avg_cop_wait_time',
'max_cop_wait_time',
'wait_time',
'ns',
rows
),
avgMaxColumn(
tcf,
'avg_process_time',
'max_process_time',
'total_process_time',
'ns',
rows
),
avgMaxColumn(
tcf,
'avg_wait_time',
'max_wait_time',
'total_wait_time',
'ns',
rows
),
avgMaxColumn(
tcf,
'avg_backoff_time',
'max_backoff_time',
'backoff_time',
'ns',
rows
),
avgMaxColumn(
tcf,
'avg_write_keys',
'max_write_keys',
'avg_write_keys',
'short',
rows
),
avgMaxColumn(
tcf,
'avg_processed_keys',
'max_processed_keys',
'avg_processed_keys',
'short',
rows
),
avgMaxColumn(
tcf,
'avg_total_keys',
'max_total_keys',
'avg_total_keys',
'short',
rows
),
avgMaxColumn(
tcf,
'avg_prewrite_time',
'max_prewrite_time',
'prewrite_time',
'ns',
rows
),
avgMaxColumn(
tcf,
'avg_commit_time',
'max_commit_time',
'commit_time',
'ns',
rows
),
avgMaxColumn(
tcf,
'avg_get_commit_ts_time',
'max_get_commit_ts_time',
'get_commit_ts_time',
'ns',
rows
),
avgMaxColumn(
tcf,
'avg_commit_backoff_time',
'max_commit_backoff_time',
'commit_backoff_time',
'ns',
rows
),
avgMaxColumn(
tcf,
'avg_resolve_lock_time',
'max_resolve_lock_time',
'resolve_lock_time',
'ns',
rows
),
avgMaxColumn(
tcf,
'avg_local_latch_wait_time',
'max_local_latch_wait_time',
'local_latch_wait_time',
'ns',
rows
),
avgMaxColumn(
tcf,
'avg_write_size',
'max_write_size',
'avg_write_size',
'bytes',
rows
),
avgMaxColumn(
tcf,
'avg_prewrite_regions',
'max_prewrite_regions',
'avg_prewrite_regions',
'short',
rows
),
avgMaxColumn(
tcf,
'avg_txn_retry',
'max_txn_retry',
'avg_txn_retry',
'short',
rows
),
avgMaxColumn(tcf, 'process_time', 'ns', rows),
avgMaxColumn(tcf, 'wait_time', 'ns', rows),
avgMaxColumn(tcf, 'total_process_time', 'ns', rows),
avgMaxColumn(tcf, 'total_wait_time', 'ns', rows),
avgMaxColumn(tcf, 'backoff_time', 'ns', rows),
avgMaxColumn(tcf, 'avg_write_keys', 'short', rows),
avgMaxColumn(tcf, 'avg_processed_keys', 'short', rows),
avgMaxColumn(tcf, 'avg_total_keys', 'short', rows),
avgMaxColumn(tcf, 'prewrite_time', 'ns', rows),
avgMaxColumn(tcf, 'commit_time', 'ns', rows),
avgMaxColumn(tcf, 'get_commit_ts_time', 'ns', rows),
avgMaxColumn(tcf, 'commit_backoff_time', 'ns', rows),
avgMaxColumn(tcf, 'resolve_lock_time', 'ns', rows),
avgMaxColumn(tcf, 'local_latch_wait_time', 'ns', rows),
avgMaxColumn(tcf, 'avg_write_size', 'bytes', rows),
avgMaxColumn(tcf, 'avg_prewrite_regions', 'short', rows),
avgMaxColumn(tcf, 'avg_txn_retry', 'short', rows),

tcf.bar.single('sum_backoff_times', 'short', rows),
tcf.bar.single('avg_affected_rows', 'short', rows),
Expand All @@ -292,7 +191,7 @@ export function statementColumns(
...tcf.textWithTooltip('related_schemas', rows),
minWidth: 160,
maxWidth: 240,
sourceFields: ['table_names'],
sourceFields: derivedFields.related_schemas,
},
]
}
Expand All @@ -309,6 +208,6 @@ export function planColumns(rows: StatementModel[]): IColumn[] {
tcf.bar.single('sum_latency', 'ns', rows),
avgMinMaxLatencyColumn(tcf, rows),
tcf.bar.single('exec_count', 'short', rows),
avgMaxColumn(tcf, 'avg_mem', 'max_mem', 'avg_mem', 'bytes', rows),
avgMaxColumn(tcf, 'avg_mem', 'bytes', rows),
]
}
Loading

0 comments on commit 71cc350

Please sign in to comment.