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';
18
18
import { PaneVisibilityToggleButtons } from '../../utils/paneVisibilityToggleHelpers' ;
19
19
20
20
import ResultIssues from '../Issues/Issues' ;
21
+ import { QueryDuration } from '../QueryDuration/QueryDuration' ;
21
22
22
23
import './QueryResult.scss' ;
23
24
@@ -116,15 +117,11 @@ function QueryResult(props) {
116
117
</ Fullscreen >
117
118
) }
118
119
</ React . Fragment >
119
- )
120
+ ) ;
120
121
}
121
122
122
123
if ( error ) {
123
- return (
124
- < div className = { b ( 'error' ) } >
125
- { prepareQueryError ( error ) }
126
- </ div >
127
- ) ;
124
+ return < div className = { b ( 'error' ) } > { prepareQueryError ( error ) } </ div > ;
128
125
}
129
126
} ;
130
127
@@ -136,6 +133,7 @@ function QueryResult(props) {
136
133
137
134
{ props . stats && ! props . error && (
138
135
< React . Fragment >
136
+ < QueryDuration duration = { props . stats ?. DurationUs } />
139
137
< Divider />
140
138
< RadioButton
141
139
options = { resultOptions }
Original file line number Diff line number Diff line change 1
1
{
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 "
11
11
}
Original file line number Diff line number Diff line change 1
1
{
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 мс "
11
11
}
Original file line number Diff line number Diff line change 1
1
import type { IProtobufTimeObject } from '../../types/api/common' ;
2
2
3
+ import { isNumeric } from '../utils' ;
3
4
import { parseProtobufDurationToMs , parseProtobufTimestampToMs } from '.' ;
4
5
5
6
export const parseLag = ( value : string | IProtobufTimeObject | undefined ) =>
@@ -16,3 +17,11 @@ export const parseTimestampToIdleTime = (value: string | IProtobufTimeObject | u
16
17
// Usually it below 100ms, so it could be omitted
17
18
return duration < 0 ? 0 : duration ;
18
19
} ;
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