QueryStatus.tsx 1.4 KB

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