QueryStatus.tsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import React, { PureComponent } from 'react';
  2. import ElapsedTime from './ElapsedTime';
  3. import { PanelData, LoadingState } from '@grafana/ui';
  4. function formatLatency(value) {
  5. return `${(value / 1000).toFixed(1)}s`;
  6. }
  7. interface QueryStatusItemProps {
  8. queryResponse: PanelData;
  9. latency: number;
  10. }
  11. class QueryStatusItem extends PureComponent<QueryStatusItemProps> {
  12. render() {
  13. const { queryResponse, latency } = this.props;
  14. const className =
  15. queryResponse.state === LoadingState.Done || LoadingState.Error
  16. ? 'query-transaction'
  17. : 'query-transaction query-transaction--loading';
  18. return (
  19. <div className={className}>
  20. {/* <div className="query-transaction__type">{transaction.resultType}:</div> */}
  21. <div className="query-transaction__duration">
  22. {queryResponse.state === LoadingState.Done || LoadingState.Error ? formatLatency(latency) : <ElapsedTime />}
  23. </div>
  24. </div>
  25. );
  26. }
  27. }
  28. interface QueryStatusProps {
  29. queryResponse: PanelData;
  30. latency: number;
  31. }
  32. export default class QueryStatus extends PureComponent<QueryStatusProps> {
  33. render() {
  34. const { queryResponse, latency } = this.props;
  35. return (
  36. <div className="query-transactions">
  37. {queryResponse && <QueryStatusItem queryResponse={queryResponse} latency={latency} />}
  38. </div>
  39. );
  40. }
  41. }