|
@@ -5,8 +5,9 @@ import classnames from 'classnames';
|
|
|
|
|
|
|
|
import { LogRowModel, LogLabelStatsModel, LogsParser, calculateFieldStats, getParser } from 'app/core/logs_model';
|
|
import { LogRowModel, LogLabelStatsModel, LogsParser, calculateFieldStats, getParser } from 'app/core/logs_model';
|
|
|
import { LogLabels } from './LogLabels';
|
|
import { LogLabels } from './LogLabels';
|
|
|
-import { findHighlightChunksInText } from 'app/core/utils/text';
|
|
|
|
|
|
|
+import { findHighlightChunksInText, hasAnsiCodes } from 'app/core/utils/text';
|
|
|
import { LogLabelStats } from './LogLabelStats';
|
|
import { LogLabelStats } from './LogLabelStats';
|
|
|
|
|
+import { LogMessageAnsi } from './LogMessageAnsi';
|
|
|
|
|
|
|
|
interface Props {
|
|
interface Props {
|
|
|
highlighterExpressions?: string[];
|
|
highlighterExpressions?: string[];
|
|
@@ -135,6 +136,8 @@ export class LogRow extends PureComponent<Props, State> {
|
|
|
const highlightClassName = classnames('logs-row__match-highlight', {
|
|
const highlightClassName = classnames('logs-row__match-highlight', {
|
|
|
'logs-row__match-highlight--preview': previewHighlights,
|
|
'logs-row__match-highlight--preview': previewHighlights,
|
|
|
});
|
|
});
|
|
|
|
|
+ const containsAnsiCodes = hasAnsiCodes(row.entry);
|
|
|
|
|
+
|
|
|
return (
|
|
return (
|
|
|
<div className="logs-row">
|
|
<div className="logs-row">
|
|
|
{showDuplicates && (
|
|
{showDuplicates && (
|
|
@@ -157,16 +160,19 @@ export class LogRow extends PureComponent<Props, State> {
|
|
|
</div>
|
|
</div>
|
|
|
)}
|
|
)}
|
|
|
<div className="logs-row__message" onMouseEnter={this.onMouseOverMessage} onMouseLeave={this.onMouseOutMessage}>
|
|
<div className="logs-row__message" onMouseEnter={this.onMouseOverMessage} onMouseLeave={this.onMouseOutMessage}>
|
|
|
- {parsed && (
|
|
|
|
|
- <Highlighter
|
|
|
|
|
- autoEscape
|
|
|
|
|
- highlightTag={FieldHighlight(this.onClickHighlight)}
|
|
|
|
|
- textToHighlight={row.entry}
|
|
|
|
|
- searchWords={parsedFieldHighlights}
|
|
|
|
|
- highlightClassName="logs-row__field-highlight"
|
|
|
|
|
- />
|
|
|
|
|
- )}
|
|
|
|
|
- {!parsed &&
|
|
|
|
|
|
|
+ {containsAnsiCodes && <LogMessageAnsi value={row.entry} />}
|
|
|
|
|
+ {!containsAnsiCodes &&
|
|
|
|
|
+ parsed && (
|
|
|
|
|
+ <Highlighter
|
|
|
|
|
+ autoEscape
|
|
|
|
|
+ highlightTag={FieldHighlight(this.onClickHighlight)}
|
|
|
|
|
+ textToHighlight={row.entry}
|
|
|
|
|
+ searchWords={parsedFieldHighlights}
|
|
|
|
|
+ highlightClassName="logs-row__field-highlight"
|
|
|
|
|
+ />
|
|
|
|
|
+ )}
|
|
|
|
|
+ {!containsAnsiCodes &&
|
|
|
|
|
+ !parsed &&
|
|
|
needsHighlighter && (
|
|
needsHighlighter && (
|
|
|
<Highlighter
|
|
<Highlighter
|
|
|
textToHighlight={row.entry}
|
|
textToHighlight={row.entry}
|
|
@@ -175,7 +181,7 @@ export class LogRow extends PureComponent<Props, State> {
|
|
|
highlightClassName={highlightClassName}
|
|
highlightClassName={highlightClassName}
|
|
|
/>
|
|
/>
|
|
|
)}
|
|
)}
|
|
|
- {!parsed && !needsHighlighter && row.entry}
|
|
|
|
|
|
|
+ {!containsAnsiCodes && !parsed && !needsHighlighter && row.entry}
|
|
|
{showFieldStats && (
|
|
{showFieldStats && (
|
|
|
<div className="logs-row__stats">
|
|
<div className="logs-row__stats">
|
|
|
<LogLabelStats
|
|
<LogLabelStats
|