2019-05-10 07:00:39 -05:00
|
|
|
import React, { PureComponent } from 'react';
|
|
|
|
|
2020-05-18 11:03:29 -05:00
|
|
|
import { ElapsedTime } from './ElapsedTime';
|
2019-10-31 04:48:05 -05:00
|
|
|
import { PanelData, LoadingState } from '@grafana/data';
|
2019-05-10 07:00:39 -05:00
|
|
|
|
2019-07-30 08:49:32 -05:00
|
|
|
function formatLatency(value: number) {
|
2019-05-10 07:00:39 -05:00
|
|
|
return `${(value / 1000).toFixed(1)}s`;
|
|
|
|
}
|
|
|
|
|
|
|
|
interface QueryStatusItemProps {
|
|
|
|
queryResponse: PanelData;
|
|
|
|
latency: number;
|
|
|
|
}
|
|
|
|
|
|
|
|
class QueryStatusItem extends PureComponent<QueryStatusItemProps> {
|
|
|
|
render() {
|
|
|
|
const { queryResponse, latency } = this.props;
|
|
|
|
const className =
|
|
|
|
queryResponse.state === LoadingState.Done || LoadingState.Error
|
|
|
|
? 'query-transaction'
|
|
|
|
: 'query-transaction query-transaction--loading';
|
|
|
|
return (
|
|
|
|
<div className={className}>
|
|
|
|
{/* <div className="query-transaction__type">{transaction.resultType}:</div> */}
|
|
|
|
<div className="query-transaction__duration">
|
|
|
|
{queryResponse.state === LoadingState.Done || LoadingState.Error ? formatLatency(latency) : <ElapsedTime />}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
interface QueryStatusProps {
|
|
|
|
queryResponse: PanelData;
|
|
|
|
latency: number;
|
|
|
|
}
|
|
|
|
|
|
|
|
export default class QueryStatus extends PureComponent<QueryStatusProps> {
|
|
|
|
render() {
|
|
|
|
const { queryResponse, latency } = this.props;
|
2019-08-30 08:30:24 -05:00
|
|
|
|
|
|
|
if (queryResponse.state === LoadingState.NotStarted) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2019-05-10 07:00:39 -05:00
|
|
|
return (
|
|
|
|
<div className="query-transactions">
|
2019-08-30 08:30:24 -05:00
|
|
|
<QueryStatusItem queryResponse={queryResponse} latency={latency} />
|
2019-05-10 07:00:39 -05:00
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|