LogsContainer.tsx 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. import React, { PureComponent } from 'react';
  2. import { hot } from 'react-hot-loader';
  3. import { connect } from 'react-redux';
  4. import { RawTimeRange, TimeRange, LogLevel, TimeZone, AbsoluteTimeRange } from '@grafana/ui';
  5. import { ExploreId, ExploreItemState } from 'app/types/explore';
  6. import { LogsModel, LogsDedupStrategy } from 'app/core/logs_model';
  7. import { StoreState } from 'app/types';
  8. import { toggleLogs, changeDedupStrategy } from './state/actions';
  9. import Logs from './Logs';
  10. import Panel from './Panel';
  11. import { toggleLogLevelAction } from 'app/features/explore/state/actionTypes';
  12. import { deduplicatedLogsSelector, exploreItemUIStateSelector } from 'app/features/explore/state/selectors';
  13. import { getTimeZone } from '../profile/state/selectors';
  14. interface LogsContainerProps {
  15. exploreId: ExploreId;
  16. loading: boolean;
  17. logsHighlighterExpressions?: string[];
  18. logsResult?: LogsModel;
  19. dedupedResult?: LogsModel;
  20. onChangeTime: (range: AbsoluteTimeRange) => void;
  21. onClickLabel: (key: string, value: string) => void;
  22. onStartScanning: () => void;
  23. onStopScanning: () => void;
  24. range: TimeRange;
  25. timeZone: TimeZone;
  26. scanning?: boolean;
  27. scanRange?: RawTimeRange;
  28. showingLogs: boolean;
  29. toggleLogs: typeof toggleLogs;
  30. toggleLogLevelAction: typeof toggleLogLevelAction;
  31. changeDedupStrategy: typeof changeDedupStrategy;
  32. dedupStrategy: LogsDedupStrategy;
  33. hiddenLogLevels: Set<LogLevel>;
  34. width: number;
  35. }
  36. export class LogsContainer extends PureComponent<LogsContainerProps> {
  37. onClickLogsButton = () => {
  38. this.props.toggleLogs(this.props.exploreId, this.props.showingLogs);
  39. };
  40. handleDedupStrategyChange = (dedupStrategy: LogsDedupStrategy) => {
  41. this.props.changeDedupStrategy(this.props.exploreId, dedupStrategy);
  42. };
  43. hangleToggleLogLevel = (hiddenLogLevels: Set<LogLevel>) => {
  44. const { exploreId } = this.props;
  45. this.props.toggleLogLevelAction({
  46. exploreId,
  47. hiddenLogLevels,
  48. });
  49. };
  50. render() {
  51. const {
  52. exploreId,
  53. loading,
  54. logsHighlighterExpressions,
  55. logsResult,
  56. dedupedResult,
  57. onChangeTime,
  58. onClickLabel,
  59. onStartScanning,
  60. onStopScanning,
  61. range,
  62. timeZone,
  63. showingLogs,
  64. scanning,
  65. scanRange,
  66. width,
  67. hiddenLogLevels,
  68. } = this.props;
  69. return (
  70. <Panel label="Logs" loading={loading} isOpen={showingLogs} onToggle={this.onClickLogsButton}>
  71. <Logs
  72. dedupStrategy={this.props.dedupStrategy || LogsDedupStrategy.none}
  73. data={logsResult}
  74. dedupedData={dedupedResult}
  75. exploreId={exploreId}
  76. highlighterExpressions={logsHighlighterExpressions}
  77. loading={loading}
  78. onChangeTime={onChangeTime}
  79. onClickLabel={onClickLabel}
  80. onStartScanning={onStartScanning}
  81. onStopScanning={onStopScanning}
  82. onDedupStrategyChange={this.handleDedupStrategyChange}
  83. onToggleLogLevel={this.hangleToggleLogLevel}
  84. range={range}
  85. timeZone={timeZone}
  86. scanning={scanning}
  87. scanRange={scanRange}
  88. width={width}
  89. hiddenLogLevels={hiddenLogLevels}
  90. />
  91. </Panel>
  92. );
  93. }
  94. }
  95. function mapStateToProps(state: StoreState, { exploreId }) {
  96. const explore = state.explore;
  97. const item: ExploreItemState = explore[exploreId];
  98. const { logsHighlighterExpressions, logsResult, queryTransactions, scanning, scanRange, range } = item;
  99. const loading = queryTransactions.some(qt => qt.resultType === 'Logs' && !qt.done);
  100. const { showingLogs, dedupStrategy } = exploreItemUIStateSelector(item);
  101. const hiddenLogLevels = new Set(item.hiddenLogLevels);
  102. const dedupedResult = deduplicatedLogsSelector(item);
  103. const timeZone = getTimeZone(state.user);
  104. return {
  105. loading,
  106. logsHighlighterExpressions,
  107. logsResult,
  108. scanning,
  109. scanRange,
  110. showingLogs,
  111. range,
  112. timeZone,
  113. dedupStrategy,
  114. hiddenLogLevels,
  115. dedupedResult,
  116. };
  117. }
  118. const mapDispatchToProps = {
  119. toggleLogs,
  120. changeDedupStrategy,
  121. toggleLogLevelAction,
  122. };
  123. export default hot(module)(
  124. connect(
  125. mapStateToProps,
  126. mapDispatchToProps
  127. )(LogsContainer)
  128. );