LogsContainer.tsx 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import React, { PureComponent } from 'react';
  2. import { hot } from 'react-hot-loader';
  3. import { connect } from 'react-redux';
  4. import { RawTimeRange, TimeRange } from '@grafana/ui';
  5. import { ExploreId, ExploreItemState } from 'app/types/explore';
  6. import { LogsModel } from 'app/core/logs_model';
  7. import { StoreState } from 'app/types';
  8. import { toggleLogs } from './state/actions';
  9. import Logs from './Logs';
  10. import Panel from './Panel';
  11. interface LogsContainerProps {
  12. exploreId: ExploreId;
  13. loading: boolean;
  14. logsHighlighterExpressions?: string[];
  15. logsResult?: LogsModel;
  16. onChangeTime: (range: TimeRange) => void;
  17. onClickLabel: (key: string, value: string) => void;
  18. onStartScanning: () => void;
  19. onStopScanning: () => void;
  20. range: RawTimeRange;
  21. scanning?: boolean;
  22. scanRange?: RawTimeRange;
  23. showingLogs: boolean;
  24. toggleLogs: typeof toggleLogs;
  25. width: number;
  26. }
  27. export class LogsContainer extends PureComponent<LogsContainerProps> {
  28. onClickLogsButton = () => {
  29. this.props.toggleLogs(this.props.exploreId);
  30. };
  31. render() {
  32. const {
  33. exploreId,
  34. loading,
  35. logsHighlighterExpressions,
  36. logsResult,
  37. onChangeTime,
  38. onClickLabel,
  39. onStartScanning,
  40. onStopScanning,
  41. range,
  42. showingLogs,
  43. scanning,
  44. scanRange,
  45. width,
  46. } = this.props;
  47. return (
  48. <Panel label="Logs" loading={loading} isOpen={showingLogs} onToggle={this.onClickLogsButton}>
  49. <Logs
  50. data={logsResult}
  51. exploreId={exploreId}
  52. key={logsResult && logsResult.id}
  53. highlighterExpressions={logsHighlighterExpressions}
  54. loading={loading}
  55. onChangeTime={onChangeTime}
  56. onClickLabel={onClickLabel}
  57. onStartScanning={onStartScanning}
  58. onStopScanning={onStopScanning}
  59. range={range}
  60. scanning={scanning}
  61. scanRange={scanRange}
  62. width={width}
  63. />
  64. </Panel>
  65. );
  66. }
  67. }
  68. function mapStateToProps(state: StoreState, { exploreId }) {
  69. const explore = state.explore;
  70. const item: ExploreItemState = explore[exploreId];
  71. const { logsHighlighterExpressions, logsResult, queryTransactions, scanning, scanRange, showingLogs, range } = item;
  72. const loading = queryTransactions.some(qt => qt.resultType === 'Logs' && !qt.done);
  73. return {
  74. loading,
  75. logsHighlighterExpressions,
  76. logsResult,
  77. scanning,
  78. scanRange,
  79. showingLogs,
  80. range,
  81. };
  82. }
  83. const mapDispatchToProps = {
  84. toggleLogs,
  85. };
  86. export default hot(module)(connect(mapStateToProps, mapDispatchToProps)(LogsContainer));