File tree Expand file tree Collapse file tree 6 files changed +60
-24
lines changed
containers/Tenant/QueryEditor Expand file tree Collapse file tree 6 files changed +60
-24
lines changed Original file line number Diff line number Diff line change 1+ .ydb-query-duration {
2+ display : flex ;
3+ align-items : center ;
4+
5+ margin-left : 10px ;
6+
7+ color : var (--yc-color-text-complementary );
8+ }
Original file line number Diff line number Diff line change 1+ import block from 'bem-cn-lite' ;
2+
3+ import { formatDurationToShortTimeFormat , parseUsToMs } from '../../../../utils/timeParsers' ;
4+
5+ import './QueryDuration.scss' ;
6+
7+ interface QueryDurationProps {
8+ duration ?: string ;
9+ }
10+
11+ const b = block ( 'ydb-query-duration' ) ;
12+
13+ export const QueryDuration = ( { duration} : QueryDurationProps ) => {
14+ if ( ! duration ) {
15+ return null ;
16+ }
17+
18+ const parsedDuration = formatDurationToShortTimeFormat ( parseUsToMs ( duration ) , 1 ) ;
19+
20+ return < span className = { b ( ) } > { parsedDuration } </ span > ;
21+ } ;
Original file line number Diff line number Diff line change @@ -18,6 +18,7 @@ import {prepareQueryError} from '../../../../utils/query';
1818import { PaneVisibilityToggleButtons } from '../../utils/paneVisibilityToggleHelpers' ;
1919
2020import ResultIssues from '../Issues/Issues' ;
21+ import { QueryDuration } from '../QueryDuration/QueryDuration' ;
2122
2223import './QueryResult.scss' ;
2324
@@ -116,15 +117,11 @@ function QueryResult(props) {
116117 </ Fullscreen >
117118 ) }
118119 </ React . Fragment >
119- )
120+ ) ;
120121 }
121122
122123 if ( error ) {
123- return (
124- < div className = { b ( 'error' ) } >
125- { prepareQueryError ( error ) }
126- </ div >
127- ) ;
124+ return < div className = { b ( 'error' ) } > { prepareQueryError ( error ) } </ div > ;
128125 }
129126 } ;
130127
@@ -136,6 +133,7 @@ function QueryResult(props) {
136133
137134 { props . stats && ! props . error && (
138135 < React . Fragment >
136+ < QueryDuration duration = { props . stats ?. DurationUs } />
139137 < Divider />
140138 < RadioButton
141139 options = { resultOptions }
Original file line number Diff line number Diff line change 11{
2- "daysHours" : " {{days}}d {{hours}}h " ,
3- "hoursMin" : " {{hours}}h {{minutes}}m " ,
4- "minSec" : " {{minutes}}m {{seconds}}s " ,
5- "secMs" : " {{seconds}}s {{ms}}ms " ,
6- "days" : " {{days}}d " ,
7- "hours" : " {{hours}}h " ,
8- "min" : " {{minutes}}m " ,
9- "sec" : " {{seconds}}s " ,
10- "ms" : " {{ms}}ms "
2+ "daysHours" : " {{days}}\u00a0 d \u00a0 {{hours}}\u00a0 h " ,
3+ "hoursMin" : " {{hours}}\u00a0 h \u00a0 {{minutes}}\u00a0 m " ,
4+ "minSec" : " {{minutes}}\u00a0 m \u00a0 {{seconds}}\u00a0 s " ,
5+ "secMs" : " {{seconds}}\u00a0 s \u00a0 {{ms}}\u00a0 ms " ,
6+ "days" : " {{days}}\u00a0 d " ,
7+ "hours" : " {{hours}}\u00a0 h " ,
8+ "min" : " {{minutes}}\u00a0 m " ,
9+ "sec" : " {{seconds}}\u00a0 s " ,
10+ "ms" : " {{ms}}\u00a0 ms "
1111}
Original file line number Diff line number Diff line change 11{
2- "daysHours" : " {{days}}д {{hours}}ч " ,
3- "hoursMin" : " {{hours}}ч {{minutes}}м " ,
4- "minSec" : " {{minutes}}м {{seconds}}с " ,
5- "secMs" : " {{seconds}}с {{ms}}мс " ,
6- "days" : " {{days}}д " ,
7- "hours" : " {{hours}}ч " ,
8- "min" : " {{minutes}}м " ,
9- "sec" : " {{seconds}}с " ,
10- "ms" : " {{ms}}мс "
2+ "daysHours" : " {{days}}\u00a0 д \u00a0 {{hours}}\u00a0 ч " ,
3+ "hoursMin" : " {{hours}}\u00a0 ч \u00a0 {{minutes}}\u00a0 м " ,
4+ "minSec" : " {{minutes}}\u00a0 м \u00a0 {{seconds}}\u00a0 с " ,
5+ "secMs" : " {{seconds}}\u00a0 с \u00a0 {{ms}}\u00a0 мс " ,
6+ "days" : " {{days}}\u00a0 д " ,
7+ "hours" : " {{hours}}\u00a0 ч " ,
8+ "min" : " {{minutes}}\u00a0 м " ,
9+ "sec" : " {{seconds}}\u00a0 с " ,
10+ "ms" : " {{ms}}\u00a0 мс "
1111}
Original file line number Diff line number Diff line change 11import type { IProtobufTimeObject } from '../../types/api/common' ;
22
3+ import { isNumeric } from '../utils' ;
34import { parseProtobufDurationToMs , parseProtobufTimestampToMs } from '.' ;
45
56export const parseLag = ( value : string | IProtobufTimeObject | undefined ) =>
@@ -16,3 +17,11 @@ export const parseTimestampToIdleTime = (value: string | IProtobufTimeObject | u
1617 // Usually it below 100ms, so it could be omitted
1718 return duration < 0 ? 0 : duration ;
1819} ;
20+
21+ export const parseUsToMs = ( value : string | number | undefined ) => {
22+ if ( ! value || ! isNumeric ( value ) ) {
23+ return 0 ;
24+ }
25+
26+ return Math . round ( Number ( value ) / 1000 ) ;
27+ } ;
You can’t perform that action at this time.
0 commit comments