LogsContainer.tsx 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. }
  26. export class LogsContainer extends PureComponent<LogsContainerProps> {
  27. onClickLogsButton = () => {
  28. this.props.toggleLogs(this.props.exploreId);
  29. };
  30. render() {
  31. const {
  32. exploreId,
  33. loading,
  34. logsHighlighterExpressions,
  35. logsResult,
  36. onChangeTime,
  37. onClickLabel,
  38. onStartScanning,
  39. onStopScanning,
  40. range,
  41. showingLogs,
  42. scanning,
  43. scanRange,
  44. } = this.props;
  45. return (
  46. <Panel label="Logs" loading={loading} isOpen={showingLogs} onToggle={this.onClickLogsButton}>
  47. <Logs
  48. data={logsResult}
  49. exploreId={exploreId}
  50. key={logsResult && logsResult.id}
  51. highlighterExpressions={logsHighlighterExpressions}
  52. loading={loading}
  53. onChangeTime={onChangeTime}
  54. onClickLabel={onClickLabel}
  55. onStartScanning={onStartScanning}
  56. onStopScanning={onStopScanning}
  57. range={range}
  58. scanning={scanning}
  59. scanRange={scanRange}
  60. />
  61. </Panel>
  62. );
  63. }
  64. }
  65. function mapStateToProps(state: StoreState, { exploreId }) {
  66. const explore = state.explore;
  67. const item: ExploreItemState = explore[exploreId];
  68. const { logsHighlighterExpressions, logsResult, queryTransactions, scanning, scanRange, showingLogs, range } = item;
  69. const loading = queryTransactions.some(qt => qt.resultType === 'Logs' && !qt.done);
  70. return {
  71. loading,
  72. logsHighlighterExpressions,
  73. logsResult,
  74. scanning,
  75. scanRange,
  76. showingLogs,
  77. range,
  78. };
  79. }
  80. const mapDispatchToProps = {
  81. toggleLogs,
  82. };
  83. export default hot(module)(connect(mapStateToProps, mapDispatchToProps)(LogsContainer));