2020-10-30 04:01:38 +03:00
|
|
|
import React from "react";
|
|
|
|
import { timeFormat } from "d3-time-format";
|
2020-11-13 14:57:57 +03:00
|
|
|
import { Table, Tag, Typography } from "antd";
|
2020-10-30 04:01:38 +03:00
|
|
|
import Linkify from "react-linkify";
|
2020-11-01 09:17:44 +03:00
|
|
|
import { SortOrder } from "antd/lib/table/interface";
|
|
|
|
|
2020-11-13 14:57:57 +03:00
|
|
|
const { Title } = Typography;
|
|
|
|
|
2020-11-01 09:17:44 +03:00
|
|
|
function renderColumnLevel(text, entry) {
|
|
|
|
let color = 'black';
|
|
|
|
|
|
|
|
if (entry.level === "warning") {
|
|
|
|
color = "orange";
|
|
|
|
} else if (entry.level === 'error') {
|
|
|
|
color = "red";
|
|
|
|
}
|
|
|
|
|
2020-11-03 04:23:32 +03:00
|
|
|
return <Tag color={color}>{text}</Tag>;
|
2020-11-01 09:17:44 +03:00
|
|
|
}
|
|
|
|
|
2020-11-01 10:01:37 +03:00
|
|
|
function renderMessage(text) {
|
2020-11-01 09:17:44 +03:00
|
|
|
return (
|
|
|
|
<Linkify>{text}</Linkify>
|
|
|
|
)
|
|
|
|
}
|
2020-10-30 04:01:38 +03:00
|
|
|
|
2020-11-01 10:01:37 +03:00
|
|
|
interface Props {
|
|
|
|
logs: object[],
|
|
|
|
pageSize: number
|
|
|
|
}
|
|
|
|
|
|
|
|
export default function LogTable({ logs, pageSize }: Props) {
|
2020-11-13 14:57:57 +03:00
|
|
|
if (!logs.length) {
|
|
|
|
return null;
|
|
|
|
}
|
2020-10-30 04:01:38 +03:00
|
|
|
const columns = [
|
|
|
|
{
|
|
|
|
title: "Level",
|
|
|
|
dataIndex: "level",
|
|
|
|
key: "level",
|
|
|
|
filters: [
|
|
|
|
{
|
|
|
|
text: "Info",
|
|
|
|
value: "info",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
text: "Warning",
|
|
|
|
value: "warning",
|
|
|
|
},
|
|
|
|
{
|
|
|
|
text: "Error",
|
|
|
|
value: "Error",
|
|
|
|
},
|
|
|
|
],
|
|
|
|
onFilter: (level, row) => row.level.indexOf(level) === 0,
|
|
|
|
render: renderColumnLevel,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: "Timestamp",
|
|
|
|
dataIndex: "time",
|
|
|
|
key: "time",
|
|
|
|
render: (timestamp) =>
|
|
|
|
timeFormat("%H:%M:%S %m/%d/%Y")(new Date(timestamp)),
|
|
|
|
sorter: (a, b) => new Date(a.time).getTime() - new Date(b.time).getTime(),
|
2020-11-01 09:17:44 +03:00
|
|
|
sortDirections: ["descend", "ascend"] as SortOrder[],
|
|
|
|
defaultSortOrder: "descend" as SortOrder,
|
2020-10-30 04:01:38 +03:00
|
|
|
},
|
|
|
|
{
|
|
|
|
title: "Message",
|
|
|
|
dataIndex: "message",
|
|
|
|
key: "message",
|
|
|
|
render: renderMessage,
|
|
|
|
},
|
|
|
|
];
|
|
|
|
|
|
|
|
return (
|
2020-11-13 14:57:57 +03:00
|
|
|
<div className="logs-section">
|
|
|
|
<Title level={2}>Logs</Title>
|
2020-10-30 04:01:38 +03:00
|
|
|
<Table
|
2020-11-01 05:29:06 +03:00
|
|
|
size="middle"
|
2020-10-30 04:01:38 +03:00
|
|
|
dataSource={logs}
|
|
|
|
columns={columns}
|
|
|
|
rowKey={(row) => row.time}
|
|
|
|
pagination={{ pageSize: pageSize || 20 }}
|
|
|
|
/>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|