diff --git a/components/log-viewer-webui/client/settings.json b/components/log-viewer-webui/client/settings.json index cc1fe697c7..5bbc0333c3 100644 --- a/components/log-viewer-webui/client/settings.json +++ b/components/log-viewer-webui/client/settings.json @@ -1,3 +1,4 @@ { - "MongoDbSearchResultsMetadataCollectionName": "results-metadata" + "MongoDbSearchResultsMetadataCollectionName": "results-metadata", + "ClpStorageEngine": "clp" } diff --git a/components/log-viewer-webui/client/src/pages/SearchPage/SearchResults/SearchResultsTable/Message/LogViewerLink.tsx b/components/log-viewer-webui/client/src/pages/SearchPage/SearchResults/SearchResultsTable/Message/LogViewerLink.tsx index 765bab8129..474fe4158b 100644 --- a/components/log-viewer-webui/client/src/pages/SearchPage/SearchResults/SearchResultsTable/Message/LogViewerLink.tsx +++ b/components/log-viewer-webui/client/src/pages/SearchPage/SearchResults/SearchResultsTable/Message/LogViewerLink.tsx @@ -1,21 +1,19 @@ +import {Link} from "react-router"; + import {LinkOutlined} from "@ant-design/icons"; import { Tooltip, Typography, } from "antd"; +import {STREAM_TYPE} from "../utils"; import styles from "./index.module.css"; -const {Link} = Typography; - -// eslint-disable-next-line no-warning-comments -// TODO: Fix link to connect to package log viewer when log viewer setup finished. Also pass -// proper args to package log viewer. -const LOG_VIEWER_URL = "https://y-scope.github.io/yscope-log-viewer/"; - interface LogViewerLinkProps { filePath: string; + logEventIdx: number; + streamId: string; } /** @@ -23,18 +21,32 @@ interface LogViewerLinkProps { * * @param props * @param props.filePath + * @param props.logEventIdx + * @param props.streamId * @return */ -const LogViewerLink = ({filePath}: LogViewerLinkProps) => ( +const LogViewerLink = ({ + filePath, + logEventIdx, + streamId, +}: LogViewerLinkProps) => ( - - - {filePath} - + + + + {filePath} + + ); diff --git a/components/log-viewer-webui/client/src/pages/SearchPage/SearchResults/SearchResultsTable/Message/index.tsx b/components/log-viewer-webui/client/src/pages/SearchPage/SearchResults/SearchResultsTable/Message/index.tsx index 83b1d660e7..d289c60629 100644 --- a/components/log-viewer-webui/client/src/pages/SearchPage/SearchResults/SearchResultsTable/Message/index.tsx +++ b/components/log-viewer-webui/client/src/pages/SearchPage/SearchResults/SearchResultsTable/Message/index.tsx @@ -11,19 +11,28 @@ import "highlight.js/styles/intellij-light.css"; const {Text} = Typography; interface MessageProps { - message: string; filePath: string; + message: string; + logEventIdx: number; + streamId: string; } /** * Renders a message with syntax highlighting and a file path link. * * @param props - * @param props.message * @param props.filePath + * @param props.logEventIdx + * @param props.message + * @param props.streamId * @return */ -const Message = ({message, filePath}: MessageProps) => { +const Message = ({ + message, + filePath, + streamId, + logEventIdx, +}: MessageProps) => { return ( <> {/* Parent `Text` component allows syntax highlighter to inherit AntD fonts. */} @@ -37,7 +46,10 @@ const Message = ({message, filePath}: MessageProps) => { {message} - + ); }; diff --git a/components/log-viewer-webui/client/src/pages/SearchPage/SearchResults/SearchResultsTable/typings.tsx b/components/log-viewer-webui/client/src/pages/SearchPage/SearchResults/SearchResultsTable/typings.tsx index 73759560c6..b9038b33c8 100644 --- a/components/log-viewer-webui/client/src/pages/SearchPage/SearchResults/SearchResultsTable/typings.tsx +++ b/components/log-viewer-webui/client/src/pages/SearchPage/SearchResults/SearchResultsTable/typings.tsx @@ -3,6 +3,7 @@ import dayjs from "dayjs"; import {DATETIME_FORMAT_TEMPLATE} from "../../../../typings/datetime"; import Message from "./Message"; +import {getStreamId} from "./utils"; /** @@ -10,12 +11,13 @@ import Message from "./Message"; */ interface SearchResult { _id: string; - timestamp: number; - message: string; + archive_id: string; filePath: string; - orig_file_path: string; - orig_file_id: string; log_event_ix: number; + message: string; + orig_file_id: string; + orig_file_path: string; + timestamp: number; } /** @@ -36,7 +38,9 @@ const searchResultsTableColumns: NonNullable["columns"] render: (_, record) => ( + logEventIdx={record.log_event_ix} + message={record.message} + streamId={getStreamId(record)}/> ), title: "Message", width: 85, diff --git a/components/log-viewer-webui/client/src/pages/SearchPage/SearchResults/SearchResultsTable/utils.ts b/components/log-viewer-webui/client/src/pages/SearchPage/SearchResults/SearchResultsTable/utils.ts new file mode 100644 index 0000000000..5cc73495b2 --- /dev/null +++ b/components/log-viewer-webui/client/src/pages/SearchPage/SearchResults/SearchResultsTable/utils.ts @@ -0,0 +1,30 @@ +import settings from "../../../../../settings.json"; +import type {SearchResult} from "./typings"; + + +const SETTINGS_STORAGE_ENGINE = settings.ClpStorageEngine; + +/** + * Stream type based on the storage engine (i.e. clp vs. clp-s). + */ +const STREAM_TYPE = "clp" === SETTINGS_STORAGE_ENGINE ? + "ir" : + "json"; + +/** + * Returns the stream id based on the storage engine. + * + * @param result The search result object. + * @return The stream id string, either from orig_file_id or archive_id. + */ +const getStreamId = (result: SearchResult): string => { + return "clp" === SETTINGS_STORAGE_ENGINE ? + result.orig_file_id : + result.archive_id; +}; + + +export { + getStreamId, + STREAM_TYPE, +}; diff --git a/components/log-viewer-webui/client/src/router.tsx b/components/log-viewer-webui/client/src/router.tsx index 3243f1a110..977a026db9 100644 --- a/components/log-viewer-webui/client/src/router.tsx +++ b/components/log-viewer-webui/client/src/router.tsx @@ -6,6 +6,7 @@ import { import MainLayout from "./components/Layout/MainLayout"; import IngestPage from "./pages/IngestPage"; import SearchPage from "./pages/SearchPage"; +import QueryStatus from "./ui/QueryStatus"; const router = createBrowserRouter([ @@ -23,6 +24,10 @@ const router = createBrowserRouter([ {path: "search", Component: SearchPage}, ], }, + { + path: "/streamFile", + Component: QueryStatus, + }, ]); diff --git a/components/log-viewer-webui/server/src/routes/static.ts b/components/log-viewer-webui/server/src/routes/static.ts index f63d3700b4..2c7ed4b6f8 100644 --- a/components/log-viewer-webui/server/src/routes/static.ts +++ b/components/log-viewer-webui/server/src/routes/static.ts @@ -49,6 +49,11 @@ const routes: FastifyPluginAsync = async (fastify) => { prefix: "/", root: clientDir, decorateReply: false, + wildcard: false, + }); + + fastify.get("/streamFile", (_, reply) => { + reply.sendFile("index.html", clientDir); }); } };