QueryStatus.tsx 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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: number) {
  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. if (queryResponse.state === LoadingState.NotStarted) {
  37. return null;
  38. }
  39. return (
  40. <div className="query-transactions">
  41. <QueryStatusItem queryResponse={queryResponse} latency={latency} />
  42. </div>
  43. );
  44. }
  45. }