laconic-console/packages/console-app/src/components/LogPoller.js
Egor Gripasov 3c731b3b2b
fix: Add running bots tab. (#56)
* fix: Add bots resolver.

* minot fix.

* test commit.

* add bot kill

* Integration.

* add refetch.

* Lint.

* Formatting fix.

* Better error handling.
2020-12-02 05:32:49 -05:00

55 lines
1.1 KiB
JavaScript

//
// Copyright 2020 DXOS.org
//
import React, { useContext } from 'react';
import { useQuery } from '@apollo/react-hooks';
import { ConsoleContext, useQueryStatusReducer } from '../hooks';
import LOGS from '../gql/logs.graphql';
import Log from './Log';
const MAX_LINES = 1000;
const _logBuffers = new Map();
const getLogBuffer = (name) => {
let buffer = _logBuffers.get(name);
if (!buffer) {
buffer = [];
_logBuffers.set(name, buffer);
}
return buffer;
};
const LogPoller = ({ service }) => {
const { config } = useContext(ConsoleContext);
const logBuffer = getLogBuffer(service);
const { data } = useQueryStatusReducer(useQuery(LOGS, {
pollInterval: config.api.intervalLog,
variables: { service, incremental: logBuffer.length !== 0 }
}));
if (!data) {
return null;
}
const { incremental, lines } = JSON.parse(data.logs.json);
if (!incremental && lines.length) {
logBuffer.length = 0;
}
logBuffer.push(...lines);
if (logBuffer.length > MAX_LINES) {
logBuffer.splice(0, logBuffer.length - MAX_LINES);
}
return (
<Log log={logBuffer.slice(0)} />
);
};
export default LogPoller;