Add telemetry console frontend

This commit is contained in:
Itay Mizeretz 2018-01-09 19:19:16 +02:00
parent 1ab1dbedb1
commit 50c674a2af
2 changed files with 47 additions and 14 deletions

View File

@ -53,7 +53,9 @@ class MapPageComponent extends React.Component {
selected: null, selected: null,
selectedType: null, selectedType: null,
killPressed: false, killPressed: false,
showKillDialog: false showKillDialog: false,
telemetry: [],
telemetryLastTimestamp: null
}; };
} }
@ -77,13 +79,18 @@ class MapPageComponent extends React.Component {
componentDidMount() { componentDidMount() {
this.updateMapFromServer(); this.updateMapFromServer();
this.interval = setInterval(this.updateMapFromServer, 1000); this.interval = setInterval(this.timedEvents, 1000);
} }
componentWillUnmount() { componentWillUnmount() {
clearInterval(this.interval); clearInterval(this.interval);
} }
timedEvents = () => {
this.updateMapFromServer();
this.updateTelemetryFromServer();
};
updateMapFromServer = () => { updateMapFromServer = () => {
fetch('/api/netmap') fetch('/api/netmap')
.then(res => res.json()) .then(res => res.json())
@ -96,6 +103,21 @@ class MapPageComponent extends React.Component {
}); });
}; };
updateTelemetryFromServer = () => {
fetch('/api/telemetry-feed?timestamp='+this.state.telemetryLastTimestamp)
.then(res => res.json())
.then(res => {
let newTelem = this.state.telemetry.concat(res['telemetries']);
this.setState(
{
telemetry: newTelem,
telemetryLastTimestamp: res['timestamp']
});
this.props.onStatusChange();
});
};
selectionChanged(event) { selectionChanged(event) {
if (event.nodes.length === 1) { if (event.nodes.length === 1) {
fetch('/api/netmap/node?id=' + event.nodes[0]) fetch('/api/netmap/node?id=' + event.nodes[0])
@ -156,6 +178,26 @@ class MapPageComponent extends React.Component {
) )
}; };
renderTelemetryEntry(telemetry) {
return (
<div key={telemetry.id}>
<span className="date">{telemetry.timestamp}</span>
<span className="source"> {telemetry.hostname}:</span>
<span className="event"> {telemetry.brief}</span>
</div>
);
}
renderTelemetryConsole() {
return (
<div className="telemetry-console">
{
this.state.telemetry.map(this.renderTelemetryEntry)
}
</div>
);
}
render() { render() {
return ( return (
<div> <div>
@ -174,17 +216,7 @@ class MapPageComponent extends React.Component {
<b style={{color: '#aeaeae'}}> | </b> <b style={{color: '#aeaeae'}}> | </b>
<span>Island Communication <i className="fa fa-lg fa-minus" style={{color: '#a9aaa9'}} /></span> <span>Island Communication <i className="fa fa-lg fa-minus" style={{color: '#a9aaa9'}} /></span>
</div> </div>
{ { this.renderTelemetryConsole() }
/*
<div className="telemetry-console">
<div>
<span className="date">2017-10-16 16:00:05</span>
<span className="source"> monkey-elastic</span>
<span className="event"> bla bla</span>
</div>
</div>
*/
}
<div style={{height: '80vh'}}> <div style={{height: '80vh'}}>
<ReactiveGraph graph={this.state.graph} options={options} events={this.events}/> <ReactiveGraph graph={this.state.graph} options={options} events={this.events}/>
</div> </div>

View File

@ -276,13 +276,14 @@ body {
bottom: 0; bottom: 0;
left: 0; left: 0;
right: 0; right: 0;
height: 70px; height: 130px;
background: rgba(0,0,0,0.7); background: rgba(0,0,0,0.7);
border-radius: 5px; border-radius: 5px;
border: 3px solid #aaa; border: 3px solid #aaa;
padding: 0.5em; padding: 0.5em;
color: white; color: white;
font-family: Consolas, "Courier New", monospace; font-family: Consolas, "Courier New", monospace;
overflow: auto;
} }
.telemetry-console .date { .telemetry-console .date {