Merge pull request #3570 from influxdata/logs-viewer/polish

Logs Viewer Polish
pull/10616/head
Alex Paxton 2018-06-05 10:39:43 -07:00 committed by GitHub
commit 34ad08d661
2 changed files with 77 additions and 24 deletions

View File

@ -1,12 +1,12 @@
import _ from 'lodash' import _ from 'lodash'
import moment from 'moment' import moment from 'moment'
import classnames from 'classnames'
import React, {Component, MouseEvent} from 'react' import React, {Component, MouseEvent} from 'react'
import {Grid, AutoSizer} from 'react-virtualized' import {Grid, AutoSizer} from 'react-virtualized'
import {getDeep} from 'src/utils/wrappers' import {getDeep} from 'src/utils/wrappers'
import FancyScrollbar from 'src/shared/components/FancyScrollbar' import FancyScrollbar from 'src/shared/components/FancyScrollbar'
const ROW_HEIGHT = 30 const ROW_HEIGHT = 26
const HIGHLIGHT_COLOR = '#555'
interface Props { interface Props {
data: { data: {
@ -57,7 +57,7 @@ class LogsTable extends Component<Props, State> {
return ( return (
<div <div
className="logs-viewer--table-container" className="logs-viewer--table-container"
onMouseOut={this.handleMouseOut} onMouseOut={this.handleMouseLeave}
> >
<AutoSizer> <AutoSizer>
{({width}) => ( {({width}) => (
@ -149,15 +149,15 @@ class LogsTable extends Component<Props, State> {
case 'message': case 'message':
return 1200 return 1200
case 'timestamp': case 'timestamp':
return 200 return 160
case 'procid': case 'procid':
return 100 return 80
case 'facility': case 'facility':
return 150 return 120
case 'severity_1': case 'severity_1':
return 150 return 80
case 'severity': case 'severity':
return 24 return 22
default: default:
return 200 return 200
} }
@ -186,7 +186,11 @@ class LogsTable extends Component<Props, State> {
) )
return ( return (
<div style={style} key={key}> <div
className="logs-viewer--cell logs-viewer--cell-header"
style={style}
key={key}
>
{this.header(value)} {this.header(value)}
</div> </div>
) )
@ -207,9 +211,6 @@ class LogsTable extends Component<Props, State> {
case 'timestamp': case 'timestamp':
value = moment(+value / 1000000).format('YYYY/MM/DD HH:mm:ss') value = moment(+value / 1000000).format('YYYY/MM/DD HH:mm:ss')
break break
case 'severity_1':
value = this.severityLevel(value)
break
case 'message': case 'message':
value = _.replace(value, '\\n', '') value = _.replace(value, '\\n', '')
break break
@ -220,18 +221,13 @@ class LogsTable extends Component<Props, State> {
title={this.severityLevel(value)} title={this.severityLevel(value)}
/> />
) )
} break
default:
let backgroundColor = '' value = (
if (rowIndex === this.state.currentRow && columnIndex > 0) {
backgroundColor = HIGHLIGHT_COLOR
}
return (
<div <div
style={{...style, padding: '5px', backgroundColor}} className="logs-viewer--clickable"
key={key} title={`Filter by "${value}"`}
onMouseOver={this.handleMouseOver} onMouseOver={this.handleMouseEnter}
data-index={rowIndex} data-index={rowIndex}
> >
{value} {value}
@ -239,12 +235,27 @@ class LogsTable extends Component<Props, State> {
) )
} }
private handleMouseOver = (e: MouseEvent<HTMLElement>) => { const highlightRow = rowIndex === this.state.currentRow && columnIndex >= 0
return (
<div
className={classnames('logs-viewer--cell', {highlight: highlightRow})}
key={key}
style={style}
onMouseOver={this.handleMouseEnter}
data-index={rowIndex}
>
{value}
</div>
)
}
private handleMouseEnter = (e: MouseEvent<HTMLElement>): void => {
const target = e.target as HTMLElement const target = e.target as HTMLElement
this.setState({currentRow: +target.dataset.index}) this.setState({currentRow: +target.dataset.index})
} }
private handleMouseOut = () => { private handleMouseLeave = (): void => {
this.setState({currentRow: -1}) this.setState({currentRow: -1})
} }
} }

View File

@ -208,11 +208,13 @@ $logs-viewer-gutter: 60px;
} }
.logs-viewer--dot { .logs-viewer--dot {
width: 14px; width: 12px;
height: 14px; height: 12px;
border-radius: 50%; border-radius: 50%;
display: inline-block; display: inline-block;
background-color: $g0-obsidian; background-color: $g0-obsidian;
border: 2px solid $g3-castle;
margin-left: 2px;
&.emerg-severity { &.emerg-severity {
@include gradient-diag-up($c-ruby, $c-fire); @include gradient-diag-up($c-ruby, $c-fire);
@ -236,7 +238,7 @@ $logs-viewer-gutter: 60px;
@include gradient-diag-up($c-star, $c-comet); @include gradient-diag-up($c-star, $c-comet);
} }
&.debug-severity { &.debug-severity {
@include gradient-diag-up($g5-pepper, $g6-smoke); @include gradient-diag-up($g9-mountain, $g10-wolf);
} }
} }
@ -248,3 +250,43 @@ $logs-viewer-gutter: 60px;
justify-content: center; justify-content: center;
} }
} }
// Table Cell Styles
.logs-viewer--cell {
font-size: 12px;
padding: 0 4px;
color: $g11-sidewalk;
display: flex;
align-content: center;
align-items: center;
font-family: $code-font;
&.highlight {
background-color: $g5-pepper;
color: $g20-white;
}
}
.logs-viewer--cell-header {
font-weight: 600;
color: $g15-platinum;
border-bottom: 2px solid $g5-pepper;
}
// Clickable Cells
.logs-viewer--clickable {
padding: 1px 3px;
border-radius: 3px;
@include no-user-select();
&:hover {
background-color: $c-pool;
color: $g20-white;
cursor: pointer;
}
&:active,
&:active:hover {
background-color: $c-ocean;
color: $c-neutrino;
}
}