laconic-console/packages/console-app/src/components/LogPoller.js

45 lines
938 B
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 logBuffer = [];
const LogPoller = ({ service }) => {
const { config } = useContext(ConsoleContext);
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;