LogsContainer.tsx 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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, toUtc, dateTime } 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, changeTime } 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. onClickLabel: (key: string, value: string) => void;
  21. onStartScanning: () => void;
  22. onStopScanning: () => void;
  23. range: TimeRange;
  24. timeZone: TimeZone;
  25. scanning?: boolean;
  26. scanRange?: RawTimeRange;
  27. showingLogs: boolean;
  28. toggleLogs: typeof toggleLogs;
  29. toggleLogLevelAction: typeof toggleLogLevelAction;
  30. changeDedupStrategy: typeof changeDedupStrategy;
  31. dedupStrategy: LogsDedupStrategy;
  32. hiddenLogLevels: Set<LogLevel>;
  33. width: number;
  34. changeTime: typeof changeTime;
  35. }
  36. export class LogsContainer extends PureComponent<LogsContainerProps> {
  37. onChangeTime = (absRange: AbsoluteTimeRange) => {
  38. const { exploreId, timeZone, changeTime } = this.props;
  39. const range = {
  40. from: timeZone.isUtc ? toUtc(absRange.from) : dateTime(absRange.from),
  41. to: timeZone.isUtc ? toUtc(absRange.to) : dateTime(absRange.to),
  42. };
  43. changeTime(exploreId, range);
  44. };
  45. onClickLogsButton = () => {
  46. this.props.toggleLogs(this.props.exploreId, this.props.showingLogs);
  47. };
  48. handleDedupStrategyChange = (dedupStrategy: LogsDedupStrategy) => {
  49. this.props.changeDedupStrategy(this.props.exploreId, dedupStrategy);
  50. };
  51. hangleToggleLogLevel = (hiddenLogLevels: Set<LogLevel>) => {
  52. const { exploreId } = this.props;
  53. this.props.toggleLogLevelAction({
  54. exploreId,
  55. hiddenLogLevels,
  56. });
  57. };
  58. render() {
  59. const {
  60. exploreId,
  61. loading,
  62. logsHighlighterExpressions,
  63. logsResult,
  64. dedupedResult,
  65. onClickLabel,
  66. onStartScanning,
  67. onStopScanning,
  68. range,
  69. timeZone,
  70. showingLogs,
  71. scanning,
  72. scanRange,
  73. width,
  74. hiddenLogLevels,
  75. } = this.props;
  76. return (
  77. <Panel label="Logs" loading={loading} isOpen={showingLogs} onToggle={this.onClickLogsButton}>
  78. <Logs
  79. dedupStrategy={this.props.dedupStrategy || LogsDedupStrategy.none}
  80. data={logsResult}
  81. dedupedData={dedupedResult}
  82. exploreId={exploreId}
  83. highlighterExpressions={logsHighlighterExpressions}
  84. loading={loading}
  85. onChangeTime={this.onChangeTime}
  86. onClickLabel={onClickLabel}
  87. onStartScanning={onStartScanning}
  88. onStopScanning={onStopScanning}
  89. onDedupStrategyChange={this.handleDedupStrategyChange}
  90. onToggleLogLevel={this.hangleToggleLogLevel}
  91. range={range}
  92. timeZone={timeZone}
  93. scanning={scanning}
  94. scanRange={scanRange}
  95. width={width}
  96. hiddenLogLevels={hiddenLogLevels}
  97. />
  98. </Panel>
  99. );
  100. }
  101. }
  102. function mapStateToProps(state: StoreState, { exploreId }) {
  103. const explore = state.explore;
  104. const item: ExploreItemState = explore[exploreId];
  105. const { logsHighlighterExpressions, logsResult, logIsLoading, scanning, scanRange, range } = item;
  106. const loading = logIsLoading;
  107. const { showingLogs, dedupStrategy } = exploreItemUIStateSelector(item);
  108. const hiddenLogLevels = new Set(item.hiddenLogLevels);
  109. const dedupedResult = deduplicatedLogsSelector(item);
  110. const timeZone = getTimeZone(state.user);
  111. return {
  112. loading,
  113. logsHighlighterExpressions,
  114. logsResult,
  115. scanning,
  116. scanRange,
  117. showingLogs,
  118. range,
  119. timeZone,
  120. dedupStrategy,
  121. hiddenLogLevels,
  122. dedupedResult,
  123. };
  124. }
  125. const mapDispatchToProps = {
  126. toggleLogs,
  127. changeDedupStrategy,
  128. toggleLogLevelAction,
  129. changeTime,
  130. };
  131. export default hot(module)(
  132. connect(
  133. mapStateToProps,
  134. mapDispatchToProps
  135. )(LogsContainer)
  136. );