From 704041ae6e38bde5e1ba736055621c4ccbd08534 Mon Sep 17 00:00:00 2001 From: balaji-jr Date: Thu, 7 Mar 2024 12:58:37 +0530 Subject: [PATCH 01/20] WIP - systems page --- package.json | 3 +- pnpm-lock.yaml | 66 +- src/api/axios.ts | 2 +- src/components/Header/TimeRange.tsx | 9 + src/components/Navbar/index.tsx | 11 +- src/constants/routes.ts | 4 +- src/pages/Systems/Ingestors.tsx | 229 +++++++ src/pages/Systems/Queriers.tsx | 144 ++++ src/pages/Systems/context.ts | 0 src/pages/Systems/index.tsx | 23 + src/pages/Systems/mock.txt | 716 ++++++++++++++++++++ src/pages/Systems/mockdata.ts | 0 src/pages/Systems/styles/Systems.module.css | 106 +++ src/routes/PrivateRoute.tsx | 2 +- src/routes/elements.tsx | 10 + src/routes/index.tsx | 4 +- 16 files changed, 1300 insertions(+), 29 deletions(-) create mode 100644 src/pages/Systems/Ingestors.tsx create mode 100644 src/pages/Systems/Queriers.tsx create mode 100644 src/pages/Systems/context.ts create mode 100644 src/pages/Systems/index.tsx create mode 100644 src/pages/Systems/mock.txt create mode 100644 src/pages/Systems/mockdata.ts create mode 100644 src/pages/Systems/styles/Systems.module.css diff --git a/package.json b/package.json index c4df4c91..d14585c4 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "@mantine/hooks": "^7.5.1", "@mantine/notifications": "^7.5.1", "@monaco-editor/react": "^4.5.1", - "@tabler/icons-react": "^2.23.0", + "@tabler/icons-react": "^2.47.0", "@types/js-cookie": "^3.0.3", "axios": "^1.4.0", "dayjs": "^1.11.10", @@ -37,6 +37,7 @@ "ms": "^2.1.3", "nice-grpc-common": "^2.0.2", "nice-grpc-web": "^3.3.2", + "parse-prometheus-text-format": "^1.1.1", "protobufjs": "^7.2.5", "react": "^18.2.0", "react-beautiful-dnd": "^13.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d97d47aa..2298024d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,7 +16,7 @@ dependencies: version: 7.5.1(@mantine/core@7.5.1)(@mantine/hooks@7.5.1)(embla-carousel-react@7.1.0)(react-dom@18.2.0)(react@18.2.0) '@mantine/charts': specifier: ^7.5.3 - version: 7.5.3(@mantine/core@7.5.1)(@mantine/hooks@7.5.1)(react-dom@18.2.0)(react@18.2.0)(recharts@2.12.1) + version: 7.5.3(@mantine/core@7.5.1)(@mantine/hooks@7.5.1)(react-dom@18.2.0)(react@18.2.0)(recharts@2.12.2) '@mantine/code-highlight': specifier: ^7.5.1 version: 7.5.1(@mantine/core@7.5.1)(@mantine/hooks@7.5.1)(react-dom@18.2.0)(react@18.2.0) @@ -37,10 +37,10 @@ dependencies: version: 7.5.1(@mantine/core@7.5.1)(@mantine/hooks@7.5.1)(react-dom@18.2.0)(react@18.2.0) '@monaco-editor/react': specifier: ^4.5.1 - version: 4.5.1(monaco-editor@0.45.0)(react-dom@18.2.0)(react@18.2.0) + version: 4.5.1(monaco-editor@0.46.0)(react-dom@18.2.0)(react@18.2.0) '@tabler/icons-react': - specifier: ^2.23.0 - version: 2.23.0(react@18.2.0) + specifier: ^2.47.0 + version: 2.47.0(react@18.2.0) '@types/js-cookie': specifier: ^3.0.3 version: 3.0.3 @@ -77,6 +77,9 @@ dependencies: nice-grpc-web: specifier: ^3.3.2 version: 3.3.2(ws@8.16.0) + parse-prometheus-text-format: + specifier: ^1.1.1 + version: 1.1.1 protobufjs: specifier: ^7.2.5 version: 7.2.5 @@ -654,7 +657,7 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false - /@mantine/charts@7.5.3(@mantine/core@7.5.1)(@mantine/hooks@7.5.1)(react-dom@18.2.0)(react@18.2.0)(recharts@2.12.1): + /@mantine/charts@7.5.3(@mantine/core@7.5.1)(@mantine/hooks@7.5.1)(react-dom@18.2.0)(react@18.2.0)(recharts@2.12.2): resolution: {integrity: sha512-TgoBVACbmAxCHZQOL/K8DlijPZ4Ogv8S4hVXdxFgwUnKUzvnLZanaan2Vu3s7111HYCY2qHwgJwuCNtKTGuARQ==} peerDependencies: '@mantine/core': 7.5.3 @@ -667,7 +670,7 @@ packages: '@mantine/hooks': 7.5.1(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - recharts: 2.12.1(react-dom@18.2.0)(react@18.2.0) + recharts: 2.12.2(react-dom@18.2.0)(react@18.2.0) dev: false /@mantine/code-highlight@7.5.1(@mantine/core@7.5.1)(@mantine/hooks@7.5.1)(react-dom@18.2.0)(react@18.2.0): @@ -765,24 +768,24 @@ packages: react: 18.2.0 dev: false - /@monaco-editor/loader@1.3.3(monaco-editor@0.45.0): + /@monaco-editor/loader@1.3.3(monaco-editor@0.46.0): resolution: {integrity: sha512-6KKF4CTzcJiS8BJwtxtfyYt9shBiEv32ateQ9T4UVogwn4HM/uPo9iJd2Dmbkpz8CM6Y0PDUpjnZzCwC+eYo2Q==} peerDependencies: monaco-editor: '>= 0.21.0 < 1' dependencies: - monaco-editor: 0.45.0 + monaco-editor: 0.46.0 state-local: 1.0.7 dev: false - /@monaco-editor/react@4.5.1(monaco-editor@0.45.0)(react-dom@18.2.0)(react@18.2.0): + /@monaco-editor/react@4.5.1(monaco-editor@0.46.0)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-NNDFdP+2HojtNhCkRfE6/D6ro6pBNihaOzMbGK84lNWzRu+CfBjwzGt4jmnqimLuqp5yE5viHS2vi+QOAnD5FQ==} peerDependencies: monaco-editor: '>= 0.25.0 < 1' react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@monaco-editor/loader': 1.3.3(monaco-editor@0.45.0) - monaco-editor: 0.45.0 + '@monaco-editor/loader': 1.3.3(monaco-editor@0.46.0) + monaco-editor: 0.46.0 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false @@ -968,18 +971,18 @@ packages: '@swc/core-win32-x64-msvc': 1.3.67 dev: true - /@tabler/icons-react@2.23.0(react@18.2.0): - resolution: {integrity: sha512-+H4mC1EZVCzCRhnPwZEVTI0veVCJuAKlopeCnRlfsYcmzgJm6Ye234c4A2qrLPQoi1Y29uN9+kqCyuYW007jPg==} + /@tabler/icons-react@2.47.0(react@18.2.0): + resolution: {integrity: sha512-iqly2FvCF/qUbgmvS8E40rVeYY7laltc5GUjRxQj59DuX0x/6CpKHTXt86YlI2whg4czvd/c8Ce8YR08uEku0g==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 dependencies: - '@tabler/icons': 2.23.0 + '@tabler/icons': 2.47.0 prop-types: 15.8.1 react: 18.2.0 dev: false - /@tabler/icons@2.23.0: - resolution: {integrity: sha512-dU54aBwaxG0H+jQ4BdrqtYFN5L7PZevvlnzyL6XeOZgfDS3+sVNCtuG3JmpTEqQSwGLYC1IEwogPGA/Iit2bOA==} + /@tabler/icons@2.47.0: + resolution: {integrity: sha512-4w5evLh+7FUUiA1GucvGj2ReX2TvOjEr4ejXdwL/bsjoSkof6r1gQmzqI+VHrE2CpJpB3al7bCTulOkFa/RcyA==} dev: false /@types/command-line-args@5.2.0: @@ -1502,6 +1505,11 @@ packages: engines: {node: '>=6'} dev: false + /clsx@2.1.0: + resolution: {integrity: sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==} + engines: {node: '>=6'} + dev: false + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -2818,8 +2826,8 @@ packages: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /monaco-editor@0.45.0: - resolution: {integrity: sha512-mjv1G1ZzfEE3k9HZN0dQ2olMdwIfaeAAjFiwNprLfYNRSz7ctv9XuCT7gPtBGrMUeV1/iZzYKj17Khu1hxoHOA==} + /monaco-editor@0.46.0: + resolution: {integrity: sha512-ADwtLIIww+9FKybWscd7OCfm9odsFYHImBRI1v9AviGce55QY8raT+9ihH8jX/E/e6QVSGM+pKj4jSUSRmALNQ==} dev: false /mri@1.2.0: @@ -3030,6 +3038,12 @@ packages: lines-and-columns: 1.2.4 dev: false + /parse-prometheus-text-format@1.1.1: + resolution: {integrity: sha512-dBlhYVACjRdSqLMFe4/Q1l/Gd3UmXm8ruvsTi7J6ul3ih45AkzkVpI5XHV4aZ37juGZW5+3dGU5lwk+QLM9XJA==} + dependencies: + shallow-equal: 1.2.1 + dev: false + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -3472,14 +3486,14 @@ packages: decimal.js-light: 2.5.1 dev: false - /recharts@2.12.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-35vUCEBPf+pM+iVgSgVTn86faKya5pc4JO6cYJL63qOK2zDEyzDn20Tdj+CDI/3z+VcpKyQ8ZBQ9OiQ+vuAbjg==} + /recharts@2.12.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-9bpxjXSF5g81YsKkTSlaX7mM4b6oYI1mIYck6YkUcWuL3tomADccI51/6thY4LmvhYuRTwpfrOvE80Zc3oBRfQ==} engines: {node: '>=14'} peerDependencies: react: ^16.0.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 dependencies: - clsx: 2.0.0 + clsx: 2.1.0 eventemitter3: 4.0.7 lodash: 4.17.21 react: 18.2.0 @@ -3487,7 +3501,7 @@ packages: react-is: 16.13.1 react-smooth: 4.0.0(react-dom@18.2.0)(react@18.2.0) recharts-scale: 0.4.5 - tiny-invariant: 1.3.1 + tiny-invariant: 1.3.3 victory-vendor: 36.9.1 dev: false @@ -3592,6 +3606,10 @@ packages: lru-cache: 6.0.0 dev: true + /shallow-equal@1.2.1: + resolution: {integrity: sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==} + dev: false + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -3756,6 +3774,10 @@ packages: resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} dev: false + /tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + dev: false + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} diff --git a/src/api/axios.ts b/src/api/axios.ts index 5a07d9a0..27e9c6f5 100644 --- a/src/api/axios.ts +++ b/src/api/axios.ts @@ -3,7 +3,7 @@ import axios from 'axios'; const baseURL = import.meta.env.VITE_PARSEABLE_URL ?? '/'; -const instance = axios.create({ baseURL, withCredentials: true }); +const instance = axios.create({ baseURL, withCredentials: false }); instance.interceptors.request.use( (request) => { diff --git a/src/components/Header/TimeRange.tsx b/src/components/Header/TimeRange.tsx index 35795412..a8dbab49 100644 --- a/src/components/Header/TimeRange.tsx +++ b/src/components/Header/TimeRange.tsx @@ -50,6 +50,15 @@ const TimeRange: FC = () => { return () => listener(); }, []); + useEffect(() => { + const listener = subLogQuery.subscribe((state) => { + console.log(state.startTime, state.endTime) + }); + + return () => listener(); + }, []); + + const onDurationSelect = (duration: FixedDurations) => { subLogSelectedTimeRange.set((state) => { state.value = duration.name; diff --git a/src/components/Navbar/index.tsx b/src/components/Navbar/index.tsx index 3adb34e9..98d7fba2 100644 --- a/src/components/Navbar/index.tsx +++ b/src/components/Navbar/index.tsx @@ -1,11 +1,11 @@ import { Box, Stack, Tooltip } from '@mantine/core'; -import { IconLogout, IconUser, IconBinaryTree2, IconInfoCircle, IconUserCog, IconHome } from '@tabler/icons-react'; +import { IconLogout, IconUser, IconBinaryTree2, IconInfoCircle, IconUserCog, IconHome, IconServerCog } from '@tabler/icons-react'; import { FC, useCallback, useEffect } from 'react'; import { useLocation, useParams } from 'react-router-dom'; import { useNavigate } from 'react-router-dom'; import { useHeaderContext } from '@/layouts/MainLayout/Context'; import { useDisclosure } from '@mantine/hooks'; -import { HOME_ROUTE, LOGS_ROUTE, USERS_MANAGEMENT_ROUTE } from '@/constants/routes'; +import { HOME_ROUTE, LOGS_ROUTE, SYSTEMS_ROUTE, USERS_MANAGEMENT_ROUTE } from '@/constants/routes'; import InfoModal from './infoModal'; import { getStreamsSepcificAccess, getUserSepcificStreams } from './rolesHandler'; import Cookies from 'js-cookie'; @@ -36,6 +36,12 @@ const navItems = [ path: '/users', route: USERS_MANAGEMENT_ROUTE, }, + { + icon: IconServerCog, + label: 'Systems', + path: '/systems', + route: SYSTEMS_ROUTE, + } ]; const navActions = [ @@ -135,6 +141,7 @@ const Navbar: FC = () => { if (navItem.route === USERS_MANAGEMENT_ROUTE && !userSpecificAccessMap.hasUserAccess) return null; const isActiveItem = navItem.route === currentRoute; + console.log(navItems) return ( { + return formatBytes(size); +}; + +type UsageIndicatorProps = { + label: string; + percentage: number | null; +}; + +const UsageIndicator = (props: UsageIndicatorProps) => { + const alarmCutOffPercentage = 79; + const { label, percentage } = props; + const statusClassName = percentage === null ? '' : percentage > alarmCutOffPercentage ? classes.alert : classes.ok; + console.log(`${classes.usageLevelIndicator} ${statusClassName}`); + return ( + + + {props.label} + + ); +}; + +const IngestorsTable = () => { + const rows = ingestorsData.map((element, index) => { + const totalErrors = element.errors.length; + return ( + + + + {element.name} + + + + + + + + + + Port + {element.port} + + + + + + + {sanitizeBytes(element.usedStorage)} + + + + + + + + + + + + + {HumanizeNumber(element.filesCount)} + {formatBytes(element.stagingDataSize)} + {element.stagingDirectory} + {element.store} + + + {element.status} + + + + {element.status === 'offline' ? ( + + + + ) : null} + + + ); + }); + + return ( + + + + Host + Storage + CPU Usage + Memory Usage + Staging Files + Staging Size + Staging Path + Store + Status + + + + {rows} +
+ ); +}; + +// const fetchh = async() => { +// return await Axios().get('http://0.0.0.0:8000/api/v1/metrics'); +// }; + + + +const Ingestors: FC = () => { + const totalMachines = ingestorsData.length; + const totalActiveMachines = ingestorsData.filter((ingestor) => ingestor.status === 'online').length; + + useEffect(() => { + // const res = fetchh(); + // console.log(res) + }, []) + + return ( + + + + + Ingestors + + {`${totalActiveMachines}/${totalMachines} active`} + + + + ); +}; + +export default Ingestors; diff --git a/src/pages/Systems/Queriers.tsx b/src/pages/Systems/Queriers.tsx new file mode 100644 index 00000000..dcd0d87e --- /dev/null +++ b/src/pages/Systems/Queriers.tsx @@ -0,0 +1,144 @@ +import { Stack, Text, Table, Tooltip } from '@mantine/core'; +import { FC } from 'react'; +import classes from './styles/Systems.module.css'; +import { IconBrandDatabricks, IconHeartRateMonitor } from '@tabler/icons-react'; +import { formatBytes } from '@/utils/formatBytes'; + +const elements = [ + { position: 6, mass: 12.011, symbol: 'C', name: 'Carbon' }, + { position: 7, mass: 14.007, symbol: 'N', name: 'Nitrogen' }, + { position: 39, mass: 88.906, symbol: 'Y', name: 'Yttrium' }, + { position: 56, mass: 137.33, symbol: 'Ba', name: 'Barium' }, + { position: 58, mass: 140.12, symbol: 'Ce', name: 'Cerium' }, +]; + +const ingestorsData = [ + { + status: 'online', + errors: ['Error type 1', 'Error type 2'], + totalMemory: 2147483648, + consumedMemory: 1398102221, + ip: '127.0.0.1', + region: 'US-East', + name: 'Querier-01-US-East', + totalStorage: 128000000000, + usedStorage: 110300000000, + cpu: 49, + stagingDirectory: '/parseable/stage', + store: '/parseable/data', + port: 8001, + }, +]; + +const systemsData = {}; + +const sizetoInteger = (str: string) => { + if (!str || typeof str !== 'string') return null; + + const strChuncks = str?.split(' '); + return Array.isArray(strChuncks) && !isNaN(Number(strChuncks[0])) ? parseInt(strChuncks[0]) : null; +}; + +const sanitizeBytes = (size: any) => { + // const size = sizetoInteger(str); + // return size ? formatBytes(size) : '–'; + return formatBytes(size); +}; + +type UsageIndicatorProps = { + label: string; + percentage: number | null; +}; + +const UsageIndicator = (props: UsageIndicatorProps) => { + const alarmCutOffPercentage = 79; + const { label, percentage } = props; + const statusClassName = percentage === null ? '' : percentage > alarmCutOffPercentage ? classes.alert : classes.ok; + console.log(`${classes.usageLevelIndicator} ${statusClassName}`); + return ( + + + {props.label} + + ); +}; + +const IngestorsTable = () => { + const rows = ingestorsData.map((element, index) => { + console.log(element.consumedMemory / element.totalMemory); + return ( + + {element.name} + + + + + + + + + + + + + + + + {element.stagingDirectory} + {element.store} + + + {element.status} + + + + ); + }); + + return ( + + + + Host + CPU Usage + Memory Usage + Storage Usage + Staging + Store + Status + + + {rows} +
+ ); +}; + +const Queriers: FC = () => { + const totalMachines = ingestorsData.length; + const totalActiveMachines = ingestorsData.filter((ingestor) => ingestor.status === 'online').length; + + return ( + + + + + Querier + + + + + ); +}; + +export default Queriers; diff --git a/src/pages/Systems/context.ts b/src/pages/Systems/context.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/pages/Systems/index.tsx b/src/pages/Systems/index.tsx new file mode 100644 index 00000000..0a113565 --- /dev/null +++ b/src/pages/Systems/index.tsx @@ -0,0 +1,23 @@ +import { Box, Divider, Stack } from '@mantine/core'; +import { FC } from 'react'; +import Queriers from './Queriers'; +import Ingestors from './Ingestors'; + +const Systems: FC = () => { + return ( + + + {/* */} + + + ); +}; + +export default Systems; diff --git a/src/pages/Systems/mock.txt b/src/pages/Systems/mock.txt new file mode 100644 index 00000000..2f31ed3f --- /dev/null +++ b/src/pages/Systems/mock.txt @@ -0,0 +1,716 @@ +# HELP parseable_events_ingested Events ingested +# TYPE parseable_events_ingested counter +parseable_events_ingested{format="json",stream="azureapimlog"} 132 +parseable_events_ingested{format="json",stream="backend"} 27078249 +parseable_events_ingested{format="json",stream="druide2e"} 9416 +parseable_events_ingested{format="json",stream="frontend"} 27306182 +# HELP parseable_events_ingested_size Events ingested size bytes +# TYPE parseable_events_ingested_size gauge +parseable_events_ingested_size{format="json",stream="azureapimlog"} 287478 +parseable_events_ingested_size{format="json",stream="backend"} 8899325195 +parseable_events_ingested_size{format="json",stream="druide2e"} 5546280 +parseable_events_ingested_size{format="json",stream="frontend"} 7712739750 +# HELP parseable_incoming_requests Incoming Requests +# TYPE parseable_incoming_requests counter +parseable_incoming_requests{endpoint="",method="GET",status="200"} 610 +parseable_incoming_requests{endpoint="",method="GET",status="304"} 859 +parseable_incoming_requests{endpoint="",method="GET",status="400"} 12 +parseable_incoming_requests{endpoint="",method="HEAD",status="200"} 491 +parseable_incoming_requests{endpoint="",method="OPTIONS",status="405"} 3 +parseable_incoming_requests{endpoint="",method="POST",status="405"} 13 +parseable_incoming_requests{endpoint="*",method="M-SEARCH",status="404"} 2 +parseable_incoming_requests{endpoint="/api/v1",method="GET",status="404"} 1 +parseable_incoming_requests{endpoint="/api/v1/about",method="GET",status="200"} 70 +parseable_incoming_requests{endpoint="/api/v1/ingest",method="POST",status="200"} 6088833 +parseable_incoming_requests{endpoint="/api/v1/log-stream",method="GET",status="404"} 1 +parseable_incoming_requests{endpoint="/api/v1/logstream",method="GET",status="200"} 77 +parseable_incoming_requests{endpoint="/api/v1/logstream//schema",method="GET",status="404"} 3 +parseable_incoming_requests{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200"} 91 +parseable_incoming_requests{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200"} 91 +parseable_incoming_requests{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200"} 415 +parseable_incoming_requests{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200"} 1 +parseable_incoming_requests{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200"} 145 +parseable_incoming_requests{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200"} 320 +parseable_incoming_requests{endpoint="/api/v1/metrics",method="GET",status="200"} 64 +parseable_incoming_requests{endpoint="/api/v1/o/code",method="GET",status="301"} 3 +parseable_incoming_requests{endpoint="/api/v1/o/code",method="GET",status="400"} 1 +parseable_incoming_requests{endpoint="/api/v1/o/login",method="GET",status="301"} 19 +parseable_incoming_requests{endpoint="/api/v1/o/login",method="GET",status="307"} 3 +parseable_incoming_requests{endpoint="/api/v1/o/login",method="GET",status="400"} 1 +parseable_incoming_requests{endpoint="/api/v1/o/logout",method="GET",status="301"} 13 +parseable_incoming_requests{endpoint="/api/v1/query",method="POST",status="200"} 556 +parseable_incoming_requests{endpoint="/api/v1/query",method="POST",status="400"} 37 +parseable_incoming_requests{endpoint="/api/v1/role",method="GET",status="200"} 14 +parseable_incoming_requests{endpoint="/api/v1/role/default",method="GET",status="200"} 7 +parseable_incoming_requests{endpoint="/api/v1/role/{name}",method="GET",status="200"} 49 +parseable_incoming_requests{endpoint="/api/v1/user",method="GET",status="200"} 7 +parseable_incoming_requests{endpoint="/api/v1/user//role",method="GET",status="404"} 3 +parseable_incoming_requests{endpoint="/api/v1/user/{username}",method="POST",status="400"} 1 +parseable_incoming_requests{endpoint="/api/v1/user/{username}/role",method="GET",status="200"} 118 +# HELP parseable_local_fs_response_time FileSystem Request Latency +# TYPE parseable_local_fs_response_time histogram +parseable_local_fs_response_time_bucket{method="GET",status="200",le="0.005"} 22377 +parseable_local_fs_response_time_bucket{method="GET",status="200",le="0.01"} 22403 +parseable_local_fs_response_time_bucket{method="GET",status="200",le="0.025"} 22413 +parseable_local_fs_response_time_bucket{method="GET",status="200",le="0.05"} 22420 +parseable_local_fs_response_time_bucket{method="GET",status="200",le="0.1"} 22423 +parseable_local_fs_response_time_bucket{method="GET",status="200",le="0.25"} 22425 +parseable_local_fs_response_time_bucket{method="GET",status="200",le="0.5"} 22425 +parseable_local_fs_response_time_bucket{method="GET",status="200",le="1"} 22425 +parseable_local_fs_response_time_bucket{method="GET",status="200",le="2.5"} 22425 +parseable_local_fs_response_time_bucket{method="GET",status="200",le="5"} 22425 +parseable_local_fs_response_time_bucket{method="GET",status="200",le="10"} 22425 +parseable_local_fs_response_time_bucket{method="GET",status="200",le="+Inf"} 22425 +parseable_local_fs_response_time_sum{method="GET",status="200"} 5.208598371000016 +parseable_local_fs_response_time_count{method="GET",status="200"} 22425 +parseable_local_fs_response_time_bucket{method="GET",status="400",le="0.005"} 3 +parseable_local_fs_response_time_bucket{method="GET",status="400",le="0.01"} 3 +parseable_local_fs_response_time_bucket{method="GET",status="400",le="0.025"} 3 +parseable_local_fs_response_time_bucket{method="GET",status="400",le="0.05"} 3 +parseable_local_fs_response_time_bucket{method="GET",status="400",le="0.1"} 3 +parseable_local_fs_response_time_bucket{method="GET",status="400",le="0.25"} 3 +parseable_local_fs_response_time_bucket{method="GET",status="400",le="0.5"} 3 +parseable_local_fs_response_time_bucket{method="GET",status="400",le="1"} 3 +parseable_local_fs_response_time_bucket{method="GET",status="400",le="2.5"} 3 +parseable_local_fs_response_time_bucket{method="GET",status="400",le="5"} 3 +parseable_local_fs_response_time_bucket{method="GET",status="400",le="10"} 3 +parseable_local_fs_response_time_bucket{method="GET",status="400",le="+Inf"} 3 +parseable_local_fs_response_time_sum{method="GET",status="400"} 0.000081395 +parseable_local_fs_response_time_count{method="GET",status="400"} 3 +parseable_local_fs_response_time_bucket{method="PUT",status="200",le="0.005"} 15495 +parseable_local_fs_response_time_bucket{method="PUT",status="200",le="0.01"} 15686 +parseable_local_fs_response_time_bucket{method="PUT",status="200",le="0.025"} 15697 +parseable_local_fs_response_time_bucket{method="PUT",status="200",le="0.05"} 15698 +parseable_local_fs_response_time_bucket{method="PUT",status="200",le="0.1"} 15698 +parseable_local_fs_response_time_bucket{method="PUT",status="200",le="0.25"} 15698 +parseable_local_fs_response_time_bucket{method="PUT",status="200",le="0.5"} 15698 +parseable_local_fs_response_time_bucket{method="PUT",status="200",le="1"} 15698 +parseable_local_fs_response_time_bucket{method="PUT",status="200",le="2.5"} 15698 +parseable_local_fs_response_time_bucket{method="PUT",status="200",le="5"} 15698 +parseable_local_fs_response_time_bucket{method="PUT",status="200",le="10"} 15698 +parseable_local_fs_response_time_bucket{method="PUT",status="200",le="+Inf"} 15698 +parseable_local_fs_response_time_sum{method="PUT",status="200"} 13.289968733000006 +parseable_local_fs_response_time_count{method="PUT",status="200"} 15698 +# HELP parseable_query_execute_time Query execute time +# TYPE parseable_query_execute_time histogram +parseable_query_execute_time_bucket{stream="azureapimlog",le="0.005"} 20 +parseable_query_execute_time_bucket{stream="azureapimlog",le="0.01"} 51 +parseable_query_execute_time_bucket{stream="azureapimlog",le="0.025"} 77 +parseable_query_execute_time_bucket{stream="azureapimlog",le="0.05"} 80 +parseable_query_execute_time_bucket{stream="azureapimlog",le="0.1"} 82 +parseable_query_execute_time_bucket{stream="azureapimlog",le="0.25"} 82 +parseable_query_execute_time_bucket{stream="azureapimlog",le="0.5"} 82 +parseable_query_execute_time_bucket{stream="azureapimlog",le="1"} 82 +parseable_query_execute_time_bucket{stream="azureapimlog",le="2.5"} 82 +parseable_query_execute_time_bucket{stream="azureapimlog",le="5"} 82 +parseable_query_execute_time_bucket{stream="azureapimlog",le="10"} 82 +parseable_query_execute_time_bucket{stream="azureapimlog",le="+Inf"} 82 +parseable_query_execute_time_sum{stream="azureapimlog"} 0.8669833279999998 +parseable_query_execute_time_count{stream="azureapimlog"} 82 +parseable_query_execute_time_bucket{stream="backend",le="0.005"} 0 +parseable_query_execute_time_bucket{stream="backend",le="0.01"} 2 +parseable_query_execute_time_bucket{stream="backend",le="0.025"} 92 +parseable_query_execute_time_bucket{stream="backend",le="0.05"} 165 +parseable_query_execute_time_bucket{stream="backend",le="0.1"} 219 +parseable_query_execute_time_bucket{stream="backend",le="0.25"} 297 +parseable_query_execute_time_bucket{stream="backend",le="0.5"} 332 +parseable_query_execute_time_bucket{stream="backend",le="1"} 337 +parseable_query_execute_time_bucket{stream="backend",le="2.5"} 339 +parseable_query_execute_time_bucket{stream="backend",le="5"} 339 +parseable_query_execute_time_bucket{stream="backend",le="10"} 339 +parseable_query_execute_time_bucket{stream="backend",le="+Inf"} 339 +parseable_query_execute_time_sum{stream="backend"} 38.289159507 +parseable_query_execute_time_count{stream="backend"} 339 +parseable_query_execute_time_bucket{stream="druide2e",le="0.005"} 0 +parseable_query_execute_time_bucket{stream="druide2e",le="0.01"} 11 +parseable_query_execute_time_bucket{stream="druide2e",le="0.025"} 19 +parseable_query_execute_time_bucket{stream="druide2e",le="0.05"} 20 +parseable_query_execute_time_bucket{stream="druide2e",le="0.1"} 20 +parseable_query_execute_time_bucket{stream="druide2e",le="0.25"} 20 +parseable_query_execute_time_bucket{stream="druide2e",le="0.5"} 20 +parseable_query_execute_time_bucket{stream="druide2e",le="1"} 20 +parseable_query_execute_time_bucket{stream="druide2e",le="2.5"} 20 +parseable_query_execute_time_bucket{stream="druide2e",le="5"} 20 +parseable_query_execute_time_bucket{stream="druide2e",le="10"} 20 +parseable_query_execute_time_bucket{stream="druide2e",le="+Inf"} 20 +parseable_query_execute_time_sum{stream="druide2e"} 0.231367115 +parseable_query_execute_time_count{stream="druide2e"} 20 +parseable_query_execute_time_bucket{stream="frontend",le="0.005"} 0 +parseable_query_execute_time_bucket{stream="frontend",le="0.01"} 0 +parseable_query_execute_time_bucket{stream="frontend",le="0.025"} 17 +parseable_query_execute_time_bucket{stream="frontend",le="0.05"} 30 +parseable_query_execute_time_bucket{stream="frontend",le="0.1"} 49 +parseable_query_execute_time_bucket{stream="frontend",le="0.25"} 86 +parseable_query_execute_time_bucket{stream="frontend",le="0.5"} 106 +parseable_query_execute_time_bucket{stream="frontend",le="1"} 107 +parseable_query_execute_time_bucket{stream="frontend",le="2.5"} 111 +parseable_query_execute_time_bucket{stream="frontend",le="5"} 115 +parseable_query_execute_time_bucket{stream="frontend",le="10"} 115 +parseable_query_execute_time_bucket{stream="frontend",le="+Inf"} 115 +parseable_query_execute_time_sum{stream="frontend"} 35.50673526699998 +parseable_query_execute_time_count{stream="frontend"} 115 +# HELP parseable_response_code Response Codes +# TYPE parseable_response_code counter +parseable_response_code{endpoint="",method="GET",statuscode="200",type="200"} 610 +parseable_response_code{endpoint="",method="GET",statuscode="304",type="300"} 859 +parseable_response_code{endpoint="",method="GET",statuscode="400",type="400"} 12 +parseable_response_code{endpoint="",method="HEAD",statuscode="200",type="200"} 491 +parseable_response_code{endpoint="",method="OPTIONS",statuscode="405",type="400"} 3 +parseable_response_code{endpoint="",method="POST",statuscode="405",type="400"} 13 +parseable_response_code{endpoint="*",method="M-SEARCH",statuscode="404",type="400"} 2 +parseable_response_code{endpoint="/api/v1",method="GET",statuscode="404",type="400"} 1 +parseable_response_code{endpoint="/api/v1/about",method="GET",statuscode="200",type="200"} 70 +parseable_response_code{endpoint="/api/v1/ingest",method="POST",statuscode="200",type="200"} 6088833 +parseable_response_code{endpoint="/api/v1/log-stream",method="GET",statuscode="404",type="400"} 1 +parseable_response_code{endpoint="/api/v1/logstream",method="GET",statuscode="200",type="200"} 77 +parseable_response_code{endpoint="/api/v1/logstream//schema",method="GET",statuscode="404",type="400"} 3 +parseable_response_code{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",statuscode="200",type="200"} 91 +parseable_response_code{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",statuscode="200",type="200"} 91 +parseable_response_code{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",statuscode="200",type="200"} 415 +parseable_response_code{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",statuscode="200",type="200"} 1 +parseable_response_code{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",statuscode="200",type="200"} 145 +parseable_response_code{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",statuscode="200",type="200"} 320 +parseable_response_code{endpoint="/api/v1/metrics",method="GET",statuscode="200",type="200"} 64 +parseable_response_code{endpoint="/api/v1/o/code",method="GET",statuscode="301",type="300"} 3 +parseable_response_code{endpoint="/api/v1/o/code",method="GET",statuscode="400",type="400"} 1 +parseable_response_code{endpoint="/api/v1/o/login",method="GET",statuscode="301",type="300"} 19 +parseable_response_code{endpoint="/api/v1/o/login",method="GET",statuscode="307",type="300"} 3 +parseable_response_code{endpoint="/api/v1/o/login",method="GET",statuscode="400",type="400"} 1 +parseable_response_code{endpoint="/api/v1/o/logout",method="GET",statuscode="301",type="300"} 13 +parseable_response_code{endpoint="/api/v1/query",method="POST",statuscode="200",type="200"} 556 +parseable_response_code{endpoint="/api/v1/query",method="POST",statuscode="400",type="400"} 37 +parseable_response_code{endpoint="/api/v1/role",method="GET",statuscode="200",type="200"} 14 +parseable_response_code{endpoint="/api/v1/role/default",method="GET",statuscode="200",type="200"} 7 +parseable_response_code{endpoint="/api/v1/role/{name}",method="GET",statuscode="200",type="200"} 49 +parseable_response_code{endpoint="/api/v1/user",method="GET",statuscode="200",type="200"} 7 +parseable_response_code{endpoint="/api/v1/user//role",method="GET",statuscode="404",type="400"} 3 +parseable_response_code{endpoint="/api/v1/user/{username}",method="POST",statuscode="400",type="400"} 1 +parseable_response_code{endpoint="/api/v1/user/{username}/role",method="GET",statuscode="200",type="200"} 118 +# HELP parseable_response_time Response Times +# TYPE parseable_response_time histogram +parseable_response_time_bucket{endpoint="",method="GET",status="200",le="0.005"} 488 +parseable_response_time_bucket{endpoint="",method="GET",status="200",le="0.01"} 517 +parseable_response_time_bucket{endpoint="",method="GET",status="200",le="0.025"} 554 +parseable_response_time_bucket{endpoint="",method="GET",status="200",le="0.05"} 580 +parseable_response_time_bucket{endpoint="",method="GET",status="200",le="0.1"} 598 +parseable_response_time_bucket{endpoint="",method="GET",status="200",le="0.25"} 607 +parseable_response_time_bucket{endpoint="",method="GET",status="200",le="0.5"} 609 +parseable_response_time_bucket{endpoint="",method="GET",status="200",le="1"} 610 +parseable_response_time_bucket{endpoint="",method="GET",status="200",le="2.5"} 610 +parseable_response_time_bucket{endpoint="",method="GET",status="200",le="5"} 610 +parseable_response_time_bucket{endpoint="",method="GET",status="200",le="10"} 610 +parseable_response_time_bucket{endpoint="",method="GET",status="200",le="+Inf"} 610 +parseable_response_time_sum{endpoint="",method="GET",status="200"} 5.510139017 +parseable_response_time_count{endpoint="",method="GET",status="200"} 610 +parseable_response_time_bucket{endpoint="",method="GET",status="304",le="0.005"} 852 +parseable_response_time_bucket{endpoint="",method="GET",status="304",le="0.01"} 855 +parseable_response_time_bucket{endpoint="",method="GET",status="304",le="0.025"} 857 +parseable_response_time_bucket{endpoint="",method="GET",status="304",le="0.05"} 858 +parseable_response_time_bucket{endpoint="",method="GET",status="304",le="0.1"} 859 +parseable_response_time_bucket{endpoint="",method="GET",status="304",le="0.25"} 859 +parseable_response_time_bucket{endpoint="",method="GET",status="304",le="0.5"} 859 +parseable_response_time_bucket{endpoint="",method="GET",status="304",le="1"} 859 +parseable_response_time_bucket{endpoint="",method="GET",status="304",le="2.5"} 859 +parseable_response_time_bucket{endpoint="",method="GET",status="304",le="5"} 859 +parseable_response_time_bucket{endpoint="",method="GET",status="304",le="10"} 859 +parseable_response_time_bucket{endpoint="",method="GET",status="304",le="+Inf"} 859 +parseable_response_time_sum{endpoint="",method="GET",status="304"} 0.201786402 +parseable_response_time_count{endpoint="",method="GET",status="304"} 859 +parseable_response_time_bucket{endpoint="",method="GET",status="400",le="0.005"} 12 +parseable_response_time_bucket{endpoint="",method="GET",status="400",le="0.01"} 12 +parseable_response_time_bucket{endpoint="",method="GET",status="400",le="0.025"} 12 +parseable_response_time_bucket{endpoint="",method="GET",status="400",le="0.05"} 12 +parseable_response_time_bucket{endpoint="",method="GET",status="400",le="0.1"} 12 +parseable_response_time_bucket{endpoint="",method="GET",status="400",le="0.25"} 12 +parseable_response_time_bucket{endpoint="",method="GET",status="400",le="0.5"} 12 +parseable_response_time_bucket{endpoint="",method="GET",status="400",le="1"} 12 +parseable_response_time_bucket{endpoint="",method="GET",status="400",le="2.5"} 12 +parseable_response_time_bucket{endpoint="",method="GET",status="400",le="5"} 12 +parseable_response_time_bucket{endpoint="",method="GET",status="400",le="10"} 12 +parseable_response_time_bucket{endpoint="",method="GET",status="400",le="+Inf"} 12 +parseable_response_time_sum{endpoint="",method="GET",status="400"} 0.000129388 +parseable_response_time_count{endpoint="",method="GET",status="400"} 12 +parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="0.005"} 491 +parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="0.01"} 491 +parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="0.025"} 491 +parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="0.05"} 491 +parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="0.1"} 491 +parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="0.25"} 491 +parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="0.5"} 491 +parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="1"} 491 +parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="2.5"} 491 +parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="5"} 491 +parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="10"} 491 +parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="+Inf"} 491 +parseable_response_time_sum{endpoint="",method="HEAD",status="200"} 0.06343978 +parseable_response_time_count{endpoint="",method="HEAD",status="200"} 491 +parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="0.005"} 3 +parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="0.01"} 3 +parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="0.025"} 3 +parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="0.05"} 3 +parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="0.1"} 3 +parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="0.25"} 3 +parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="0.5"} 3 +parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="1"} 3 +parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="2.5"} 3 +parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="5"} 3 +parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="10"} 3 +parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="+Inf"} 3 +parseable_response_time_sum{endpoint="",method="OPTIONS",status="405"} 0.000079471 +parseable_response_time_count{endpoint="",method="OPTIONS",status="405"} 3 +parseable_response_time_bucket{endpoint="",method="POST",status="405",le="0.005"} 13 +parseable_response_time_bucket{endpoint="",method="POST",status="405",le="0.01"} 13 +parseable_response_time_bucket{endpoint="",method="POST",status="405",le="0.025"} 13 +parseable_response_time_bucket{endpoint="",method="POST",status="405",le="0.05"} 13 +parseable_response_time_bucket{endpoint="",method="POST",status="405",le="0.1"} 13 +parseable_response_time_bucket{endpoint="",method="POST",status="405",le="0.25"} 13 +parseable_response_time_bucket{endpoint="",method="POST",status="405",le="0.5"} 13 +parseable_response_time_bucket{endpoint="",method="POST",status="405",le="1"} 13 +parseable_response_time_bucket{endpoint="",method="POST",status="405",le="2.5"} 13 +parseable_response_time_bucket{endpoint="",method="POST",status="405",le="5"} 13 +parseable_response_time_bucket{endpoint="",method="POST",status="405",le="10"} 13 +parseable_response_time_bucket{endpoint="",method="POST",status="405",le="+Inf"} 13 +parseable_response_time_sum{endpoint="",method="POST",status="405"} 0.001605942 +parseable_response_time_count{endpoint="",method="POST",status="405"} 13 +parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="0.005"} 2 +parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="0.01"} 2 +parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="0.025"} 2 +parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="0.05"} 2 +parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="0.1"} 2 +parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="0.25"} 2 +parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="0.5"} 2 +parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="1"} 2 +parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="2.5"} 2 +parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="5"} 2 +parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="10"} 2 +parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="+Inf"} 2 +parseable_response_time_sum{endpoint="*",method="M-SEARCH",status="404"} 0.000025608000000000003 +parseable_response_time_count{endpoint="*",method="M-SEARCH",status="404"} 2 +parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="0.005"} 1 +parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="0.01"} 1 +parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="0.025"} 1 +parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="0.05"} 1 +parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="0.1"} 1 +parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="0.25"} 1 +parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="0.5"} 1 +parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="1"} 1 +parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="2.5"} 1 +parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="5"} 1 +parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="10"} 1 +parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="+Inf"} 1 +parseable_response_time_sum{endpoint="/api/v1",method="GET",status="404"} 0.000016301 +parseable_response_time_count{endpoint="/api/v1",method="GET",status="404"} 1 +parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="0.005"} 0 +parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="0.01"} 0 +parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="0.025"} 0 +parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="0.05"} 0 +parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="0.1"} 0 +parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="0.25"} 0 +parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="0.5"} 0 +parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="1"} 66 +parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="2.5"} 70 +parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="5"} 70 +parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="10"} 70 +parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="+Inf"} 70 +parseable_response_time_sum{endpoint="/api/v1/about",method="GET",status="200"} 56.99262189200002 +parseable_response_time_count{endpoint="/api/v1/about",method="GET",status="200"} 70 +parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="0.005"} 6087344 +parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="0.01"} 6088376 +parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="0.025"} 6088679 +parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="0.05"} 6088777 +parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="0.1"} 6088813 +parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="0.25"} 6088830 +parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="0.5"} 6088833 +parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="1"} 6088833 +parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="2.5"} 6088833 +parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="5"} 6088833 +parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="10"} 6088833 +parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="+Inf"} 6088833 +parseable_response_time_sum{endpoint="/api/v1/ingest",method="POST",status="200"} 1548.8532109968596 +parseable_response_time_count{endpoint="/api/v1/ingest",method="POST",status="200"} 6088833 +parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="0.005"} 1 +parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="0.01"} 1 +parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="0.025"} 1 +parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="0.05"} 1 +parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="0.1"} 1 +parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="0.25"} 1 +parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="0.5"} 1 +parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="1"} 1 +parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="2.5"} 1 +parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="5"} 1 +parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="10"} 1 +parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="+Inf"} 1 +parseable_response_time_sum{endpoint="/api/v1/log-stream",method="GET",status="404"} 0.000025108 +parseable_response_time_count{endpoint="/api/v1/log-stream",method="GET",status="404"} 1 +parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="0.005"} 24 +parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="0.01"} 66 +parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="0.025"} 77 +parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="0.05"} 77 +parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="0.1"} 77 +parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="0.25"} 77 +parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="0.5"} 77 +parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="1"} 77 +parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="2.5"} 77 +parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="5"} 77 +parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="10"} 77 +parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="+Inf"} 77 +parseable_response_time_sum{endpoint="/api/v1/logstream",method="GET",status="200"} 0.5176541920000001 +parseable_response_time_count{endpoint="/api/v1/logstream",method="GET",status="200"} 77 +parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="0.005"} 3 +parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="0.01"} 3 +parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="0.025"} 3 +parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="0.05"} 3 +parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="0.1"} 3 +parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="0.25"} 3 +parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="0.5"} 3 +parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="1"} 3 +parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="2.5"} 3 +parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="5"} 3 +parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="10"} 3 +parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="+Inf"} 3 +parseable_response_time_sum{endpoint="/api/v1/logstream//schema",method="GET",status="404"} 0.000140426 +parseable_response_time_count{endpoint="/api/v1/logstream//schema",method="GET",status="404"} 3 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="0.005"} 82 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="0.01"} 85 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="0.025"} 87 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="0.05"} 87 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="0.1"} 91 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="0.25"} 91 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="0.5"} 91 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="1"} 91 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="2.5"} 91 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="5"} 91 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="10"} 91 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="+Inf"} 91 +parseable_response_time_sum{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200"} 0.3835341989999999 +parseable_response_time_count{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200"} 91 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="0.005"} 76 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="0.01"} 80 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="0.025"} 82 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="0.05"} 86 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="0.1"} 90 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="0.25"} 91 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="0.5"} 91 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="1"} 91 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="2.5"} 91 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="5"} 91 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="10"} 91 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="+Inf"} 91 +parseable_response_time_sum{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200"} 0.6765673750000003 +parseable_response_time_count{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200"} 91 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="0.005"} 391 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="0.01"} 393 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="0.025"} 396 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="0.05"} 403 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="0.1"} 409 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="0.25"} 415 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="0.5"} 415 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="1"} 415 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="2.5"} 415 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="5"} 415 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="10"} 415 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="+Inf"} 415 +parseable_response_time_sum{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200"} 1.7405037490000002 +parseable_response_time_count{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200"} 415 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="0.005"} 1 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="0.01"} 1 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="0.025"} 1 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="0.05"} 1 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="0.1"} 1 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="0.25"} 1 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="0.5"} 1 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="1"} 1 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="2.5"} 1 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="5"} 1 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="10"} 1 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="+Inf"} 1 +parseable_response_time_sum{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200"} 0.000758548 +parseable_response_time_count{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200"} 1 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="0.005"} 44 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="0.01"} 55 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="0.025"} 84 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="0.05"} 123 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="0.1"} 137 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="0.25"} 145 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="0.5"} 145 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="1"} 145 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="2.5"} 145 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="5"} 145 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="10"} 145 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="+Inf"} 145 +parseable_response_time_sum{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200"} 4.103456094999999 +parseable_response_time_count{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200"} 145 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="0.005"} 316 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="0.01"} 320 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="0.025"} 320 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="0.05"} 320 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="0.1"} 320 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="0.25"} 320 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="0.5"} 320 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="1"} 320 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="2.5"} 320 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="5"} 320 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="10"} 320 +parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="+Inf"} 320 +parseable_response_time_sum{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200"} 0.13364279899999998 +parseable_response_time_count{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200"} 320 +parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="0.005"} 60 +parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="0.01"} 64 +parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="0.025"} 64 +parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="0.05"} 64 +parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="0.1"} 64 +parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="0.25"} 64 +parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="0.5"} 64 +parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="1"} 64 +parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="2.5"} 64 +parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="5"} 64 +parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="10"} 64 +parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="+Inf"} 64 +parseable_response_time_sum{endpoint="/api/v1/metrics",method="GET",status="200"} 0.22528931599999993 +parseable_response_time_count{endpoint="/api/v1/metrics",method="GET",status="200"} 64 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="0.005"} 0 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="0.01"} 0 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="0.025"} 0 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="0.05"} 0 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="0.1"} 0 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="0.25"} 0 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="0.5"} 3 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="1"} 3 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="2.5"} 3 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="5"} 3 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="10"} 3 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="+Inf"} 3 +parseable_response_time_sum{endpoint="/api/v1/o/code",method="GET",status="301"} 0.918596513 +parseable_response_time_count{endpoint="/api/v1/o/code",method="GET",status="301"} 3 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="0.005"} 1 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="0.01"} 1 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="0.025"} 1 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="0.05"} 1 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="0.1"} 1 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="0.25"} 1 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="0.5"} 1 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="1"} 1 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="2.5"} 1 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="5"} 1 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="10"} 1 +parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="+Inf"} 1 +parseable_response_time_sum{endpoint="/api/v1/o/code",method="GET",status="400"} 0.00013196 +parseable_response_time_count{endpoint="/api/v1/o/code",method="GET",status="400"} 1 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="0.005"} 0 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="0.01"} 0 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="0.025"} 0 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="0.05"} 10 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="0.1"} 19 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="0.25"} 19 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="0.5"} 19 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="1"} 19 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="2.5"} 19 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="5"} 19 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="10"} 19 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="+Inf"} 19 +parseable_response_time_sum{endpoint="/api/v1/o/login",method="GET",status="301"} 0.955510771 +parseable_response_time_count{endpoint="/api/v1/o/login",method="GET",status="301"} 19 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="0.005"} 3 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="0.01"} 3 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="0.025"} 3 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="0.05"} 3 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="0.1"} 3 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="0.25"} 3 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="0.5"} 3 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="1"} 3 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="2.5"} 3 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="5"} 3 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="10"} 3 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="+Inf"} 3 +parseable_response_time_sum{endpoint="/api/v1/o/login",method="GET",status="307"} 0.000257781 +parseable_response_time_count{endpoint="/api/v1/o/login",method="GET",status="307"} 3 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="0.005"} 0 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="0.01"} 0 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="0.025"} 0 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="0.05"} 1 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="0.1"} 1 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="0.25"} 1 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="0.5"} 1 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="1"} 1 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="2.5"} 1 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="5"} 1 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="10"} 1 +parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="+Inf"} 1 +parseable_response_time_sum{endpoint="/api/v1/o/login",method="GET",status="400"} 0.04677527 +parseable_response_time_count{endpoint="/api/v1/o/login",method="GET",status="400"} 1 +parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="0.005"} 13 +parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="0.01"} 13 +parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="0.025"} 13 +parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="0.05"} 13 +parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="0.1"} 13 +parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="0.25"} 13 +parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="0.5"} 13 +parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="1"} 13 +parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="2.5"} 13 +parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="5"} 13 +parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="10"} 13 +parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="+Inf"} 13 +parseable_response_time_sum{endpoint="/api/v1/o/logout",method="GET",status="301"} 0.000949886 +parseable_response_time_count{endpoint="/api/v1/o/logout",method="GET",status="301"} 13 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="0.005"} 1 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="0.01"} 9 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="0.025"} 116 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="0.05"} 221 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="0.1"} 297 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="0.25"} 395 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="0.5"} 520 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="1"} 544 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="2.5"} 552 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="5"} 556 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="10"} 556 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="+Inf"} 556 +parseable_response_time_sum{endpoint="/api/v1/query",method="POST",status="200"} 114.43764627099998 +parseable_response_time_count{endpoint="/api/v1/query",method="POST",status="200"} 556 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="0.005"} 35 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="0.01"} 35 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="0.025"} 36 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="0.05"} 37 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="0.1"} 37 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="0.25"} 37 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="0.5"} 37 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="1"} 37 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="2.5"} 37 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="5"} 37 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="10"} 37 +parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="+Inf"} 37 +parseable_response_time_sum{endpoint="/api/v1/query",method="POST",status="400"} 0.060289156999999996 +parseable_response_time_count{endpoint="/api/v1/query",method="POST",status="400"} 37 +parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="0.005"} 14 +parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="0.01"} 14 +parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="0.025"} 14 +parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="0.05"} 14 +parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="0.1"} 14 +parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="0.25"} 14 +parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="0.5"} 14 +parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="1"} 14 +parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="2.5"} 14 +parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="5"} 14 +parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="10"} 14 +parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="+Inf"} 14 +parseable_response_time_sum{endpoint="/api/v1/role",method="GET",status="200"} 0.008029307000000001 +parseable_response_time_count{endpoint="/api/v1/role",method="GET",status="200"} 14 +parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="0.005"} 7 +parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="0.01"} 7 +parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="0.025"} 7 +parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="0.05"} 7 +parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="0.1"} 7 +parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="0.25"} 7 +parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="0.5"} 7 +parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="1"} 7 +parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="2.5"} 7 +parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="5"} 7 +parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="10"} 7 +parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="+Inf"} 7 +parseable_response_time_sum{endpoint="/api/v1/role/default",method="GET",status="200"} 0.002047298 +parseable_response_time_count{endpoint="/api/v1/role/default",method="GET",status="200"} 7 +parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="0.005"} 49 +parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="0.01"} 49 +parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="0.025"} 49 +parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="0.05"} 49 +parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="0.1"} 49 +parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="0.25"} 49 +parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="0.5"} 49 +parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="1"} 49 +parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="2.5"} 49 +parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="5"} 49 +parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="10"} 49 +parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="+Inf"} 49 +parseable_response_time_sum{endpoint="/api/v1/role/{name}",method="GET",status="200"} 0.03379075300000001 +parseable_response_time_count{endpoint="/api/v1/role/{name}",method="GET",status="200"} 49 +parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="0.005"} 7 +parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="0.01"} 7 +parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="0.025"} 7 +parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="0.05"} 7 +parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="0.1"} 7 +parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="0.25"} 7 +parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="0.5"} 7 +parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="1"} 7 +parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="2.5"} 7 +parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="5"} 7 +parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="10"} 7 +parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="+Inf"} 7 +parseable_response_time_sum{endpoint="/api/v1/user",method="GET",status="200"} 0.0016202379999999998 +parseable_response_time_count{endpoint="/api/v1/user",method="GET",status="200"} 7 +parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="0.005"} 3 +parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="0.01"} 3 +parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="0.025"} 3 +parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="0.05"} 3 +parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="0.1"} 3 +parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="0.25"} 3 +parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="0.5"} 3 +parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="1"} 3 +parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="2.5"} 3 +parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="5"} 3 +parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="10"} 3 +parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="+Inf"} 3 +parseable_response_time_sum{endpoint="/api/v1/user//role",method="GET",status="404"} 0.00014193 +parseable_response_time_count{endpoint="/api/v1/user//role",method="GET",status="404"} 3 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="0.005"} 1 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="0.01"} 1 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="0.025"} 1 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="0.05"} 1 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="0.1"} 1 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="0.25"} 1 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="0.5"} 1 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="1"} 1 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="2.5"} 1 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="5"} 1 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="10"} 1 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="+Inf"} 1 +parseable_response_time_sum{endpoint="/api/v1/user/{username}",method="POST",status="400"} 0.000176907 +parseable_response_time_count{endpoint="/api/v1/user/{username}",method="POST",status="400"} 1 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="0.005"} 89 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="0.01"} 109 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="0.025"} 118 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="0.05"} 118 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="0.1"} 118 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="0.25"} 118 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="0.5"} 118 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="1"} 118 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="2.5"} 118 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="5"} 118 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="10"} 118 +parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="+Inf"} 118 +parseable_response_time_sum{endpoint="/api/v1/user/{username}/role",method="GET",status="200"} 0.3197786290000001 +parseable_response_time_count{endpoint="/api/v1/user/{username}/role",method="GET",status="200"} 118 +# HELP parseable_staging_files Active Staging files +# TYPE parseable_staging_files gauge +parseable_staging_files{stream="azureapimlog"} 0 +parseable_staging_files{stream="backend"} 1 +parseable_staging_files{stream="druide2e"} 0 +parseable_staging_files{stream="frontend"} 1 +# HELP parseable_storage_size Storage size bytes +# TYPE parseable_storage_size gauge +parseable_storage_size{format="arrows",stream="azureapimlog",type="staging"} 278360 +parseable_storage_size{format="arrows",stream="backend",type="staging"} 3710463112 +parseable_storage_size{format="arrows",stream="frontend",type="staging"} 3349968344 +parseable_storage_size{format="parquet",stream="azureapimlog",type="data"} 1628492 +parseable_storage_size{format="parquet",stream="backend",type="data"} 1061537471 +parseable_storage_size{format="parquet",stream="druide2e",type="data"} 3421013 +parseable_storage_size{format="parquet",stream="frontend",type="data"} 1042412371 +# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds. +# TYPE process_cpu_seconds_total counter +process_cpu_seconds_total 3794 +# HELP process_max_fds Maximum number of open file descriptors. +# TYPE process_max_fds gauge +process_max_fds 1048576 +# HELP process_open_fds Number of open file descriptors. +# TYPE process_open_fds gauge +process_open_fds 267 +# HELP process_resident_memory_bytes Resident memory size in bytes. +# TYPE process_resident_memory_bytes gauge +process_resident_memory_bytes 236376064 +# HELP process_start_time_seconds Start time of the process since unix epoch in seconds. +# TYPE process_start_time_seconds gauge +process_start_time_seconds 1709565826 +# HELP process_threads Number of OS threads in the process. +# TYPE process_threads gauge +process_threads 7 +# HELP process_virtual_memory_bytes Virtual memory size in bytes. +# TYPE process_virtual_memory_bytes gauge +process_virtual_memory_bytes 692588544 \ No newline at end of file diff --git a/src/pages/Systems/mockdata.ts b/src/pages/Systems/mockdata.ts new file mode 100644 index 00000000..e69de29b diff --git a/src/pages/Systems/styles/Systems.module.css b/src/pages/Systems/styles/Systems.module.css new file mode 100644 index 00000000..536d26b9 --- /dev/null +++ b/src/pages/Systems/styles/Systems.module.css @@ -0,0 +1,106 @@ +.sectionContainer { + width: 100%; + border: 1px solid var(--mantine-color-gray-3); + /* margin: 1rem; */ + padding: 0.675rem; + padding-bottom: 0; + border-radius: 0.275rem; +} + +.sectionTitleContainer { + flex-direction: row; + justify-content: space-between; + width: 100%; + padding: 1rem 1rem 0rem 0.5rem; +} + +.sectionTitle { + font-size: 1.2rem; + font-weight: 600; +} + +.usageIndicatorContainer { + background-color: var(--mantine-color-gray-2); + width: 100%; + height: 100%; + border-radius: 0.25rem; + height: 1.6rem; + justify-content: center; + &.ok { + background-color: var(--mantine-color-green-2); + } + &.alert { + background-color: var(--mantine-color-red-1); + } + .usageIndicatorText { + font-size: 0.8rem; + text-align: center; + z-index: 9; + font-weight: 500; + } + .usageLevelIndicator { + position: absolute; + height: 100%; + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + + &.ok { + background-color: var(--mantine-color-green-5); + } + &.alert { + background-color: var(--mantine-color-red-3); + } + } +} + +.statusChip { + height: 1.6rem; + background-color: var(--mantine-color-gray-2); + border-radius: var(--mantine-spacing-sm); + text-align: center; + align-items: center; + justify-content: center; + text-transform: capitalize; + font-size: 0.875rem; + font-weight: 600; + &.offline { + background-color: var(--mantine-color-gray-1); + } + + &.online { + color: var(--mantine-color-green-9); + background-color: var(--mantine-color-green-1); + } +} + +.noAlertsIcon { + color: var(--mantine-color-green-4); +} + +.infoIcon { + background-color: transparent; + color: var(--mantine-color-gray-5); + cursor: pointer; +} + +.infoDetailsContainer { + width: 10rem; +} + +.removeIcon { + color: var(--mantine-color-red-3); + height: 1rem; + width: 1rem; + cursor: pointer; +} + +.infoTitle { + font-size: 0.9rem; + font-weight: 600; +} + + +.infoText { + font-size: 0.875rem; + /* font-weight: 600; */ +} \ No newline at end of file diff --git a/src/routes/PrivateRoute.tsx b/src/routes/PrivateRoute.tsx index 6d1ee552..721a3bfb 100644 --- a/src/routes/PrivateRoute.tsx +++ b/src/routes/PrivateRoute.tsx @@ -8,7 +8,7 @@ const PrivateRoute: FC = () => { const auth = Cookies.get('session') const { pathname } = useLocation(); - return auth ? ( + return auth || true ? ( ) : ( { ); }; + +const Systems = lazy(() => import('@/pages/Systems')); + +export const SystemsElement: FC = () => { + return ( + + + + ); +}; \ No newline at end of file diff --git a/src/routes/index.tsx b/src/routes/index.tsx index b07b8b7e..e3a81639 100644 --- a/src/routes/index.tsx +++ b/src/routes/index.tsx @@ -5,13 +5,14 @@ import { LOGS_ROUTE, OIDC_NOT_CONFIGURED_ROUTE, USERS_MANAGEMENT_ROUTE, + SYSTEMS_ROUTE } from '@/constants/routes'; import FullPageLayout from '@/layouts/FullPageLayout'; import NotFound from '@/pages/Errors/NotFound'; import type { FC } from 'react'; import { Route, Routes } from 'react-router-dom'; import PrivateRoute from './PrivateRoute'; -import { HomeElement, LoginElement, LogsElement, MainLayoutElement, UsersElement } from './elements'; +import { HomeElement, LoginElement, LogsElement, MainLayoutElement, SystemsElement, UsersElement } from './elements'; import AccessSpecificRoute from './AccessSpecificRoute'; import OIDCNotConFigured from '@/pages/Errors/OIDC'; @@ -28,6 +29,7 @@ const AppRouter: FC = () => { }> } /> + } /> } /> From c4e025df69b49083d1cac732aa659e4732fa770f Mon Sep 17 00:00:00 2001 From: balaji-jr Date: Fri, 8 Mar 2024 11:42:33 +0530 Subject: [PATCH 02/20] rm login overrides --- src/api/axios.ts | 2 +- src/routes/PrivateRoute.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/api/axios.ts b/src/api/axios.ts index 27e9c6f5..5a07d9a0 100644 --- a/src/api/axios.ts +++ b/src/api/axios.ts @@ -3,7 +3,7 @@ import axios from 'axios'; const baseURL = import.meta.env.VITE_PARSEABLE_URL ?? '/'; -const instance = axios.create({ baseURL, withCredentials: false }); +const instance = axios.create({ baseURL, withCredentials: true }); instance.interceptors.request.use( (request) => { diff --git a/src/routes/PrivateRoute.tsx b/src/routes/PrivateRoute.tsx index 721a3bfb..6d1ee552 100644 --- a/src/routes/PrivateRoute.tsx +++ b/src/routes/PrivateRoute.tsx @@ -8,7 +8,7 @@ const PrivateRoute: FC = () => { const auth = Cookies.get('session') const { pathname } = useLocation(); - return auth || true ? ( + return auth ? ( ) : ( Date: Thu, 14 Mar 2024 23:48:03 +0530 Subject: [PATCH 03/20] wip - prometheus resp transform --- src/pages/Systems/Ingestors.tsx | 3550 ++++++++++++++++++++++++++++++- 1 file changed, 3545 insertions(+), 5 deletions(-) diff --git a/src/pages/Systems/Ingestors.tsx b/src/pages/Systems/Ingestors.tsx index 028a145a..9df113ef 100644 --- a/src/pages/Systems/Ingestors.tsx +++ b/src/pages/Systems/Ingestors.tsx @@ -4,7 +4,8 @@ import classes from './styles/Systems.module.css'; import { IconBrandDatabricks, IconInfoCircleFilled, IconX } from '@tabler/icons-react'; import { HumanizeNumber, formatBytes } from '@/utils/formatBytes'; import { Axios } from '@/api/axios'; -import fs from 'fs'; + +import text from './mock.txt' const ingestorsData = [ { @@ -77,15 +78,15 @@ const ingestorsData = [ }, ]; -function bytesToGB(bytes: number, appendSuffix: boolean = true) { - if (bytes === 0) return '0 GB'; +function bytesToGiB(bytes: number, appendSuffix: boolean = true) { + if (bytes === 0) return '0 GiB'; const gigabytes = bytes / (1024 * 1024 * 1024); const prefix = gigabytes % 1 === 0 ? gigabytes : gigabytes.toFixed(1) if (!appendSuffix) return prefix; - return `${prefix} GB` + return `${prefix} GiB` } const sanitizeBytes = (size: any) => { @@ -97,6 +98,3535 @@ type UsageIndicatorProps = { percentage: number | null; }; +const parsedMetrics = { + "parseable_events_ingested": [ + { + "format": "json", + "stream": "azureapimlog", + "value": 132 + }, + { + "format": "json", + "stream": "backend", + "value": 27078249 + }, + { + "format": "json", + "stream": "druide2e", + "value": 9416 + }, + { + "format": "json", + "stream": "frontend", + "value": 27306182 + } + ], + "parseable_events_ingested_size": [ + { + "format": "json", + "stream": "azureapimlog", + "value": 287478 + }, + { + "format": "json", + "stream": "backend", + "value": 8899325195 + }, + { + "format": "json", + "stream": "druide2e", + "value": 5546280 + }, + { + "format": "json", + "stream": "frontend", + "value": 7712739750 + } + ], + "parseable_incoming_requests": [ + { + "endpoint": "", + "method": "GET", + "status": "200", + "value": 610 + }, + { + "endpoint": "", + "method": "GET", + "status": "304", + "value": 859 + }, + { + "endpoint": "", + "method": "GET", + "status": "400", + "value": 12 + }, + { + "endpoint": "", + "method": "HEAD", + "status": "200", + "value": 491 + }, + { + "endpoint": "", + "method": "OPTIONS", + "status": "405", + "value": 3 + }, + { + "endpoint": "", + "method": "POST", + "status": "405", + "value": 13 + }, + { + "endpoint": "*", + "method": "M-SEARCH", + "status": "404", + "value": 2 + }, + { + "endpoint": "/api/v1", + "method": "GET", + "status": "404", + "value": 1 + }, + { + "endpoint": "/api/v1/about", + "method": "GET", + "status": "200", + "value": 70 + }, + { + "endpoint": "/api/v1/ingest", + "method": "POST", + "status": "200", + "value": 6088833 + }, + { + "endpoint": "/api/v1/log-stream", + "method": "GET", + "status": "404", + "value": 1 + }, + { + "endpoint": "/api/v1/logstream", + "method": "GET", + "status": "200", + "value": 77 + }, + { + "endpoint": "/api/v1/logstream//schema", + "method": "GET", + "status": "404", + "value": 3 + }, + { + "endpoint": "/api/v1/metrics", + "method": "GET", + "status": "200", + "value": 64 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "301", + "value": 3 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "400", + "value": 1 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "301", + "value": 19 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "307", + "value": 3 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "400", + "value": 1 + }, + { + "endpoint": "/api/v1/o/logout", + "method": "GET", + "status": "301", + "value": 13 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "200", + "value": 556 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "400", + "value": 37 + }, + { + "endpoint": "/api/v1/role", + "method": "GET", + "status": "200", + "value": 14 + }, + { + "endpoint": "/api/v1/role/default", + "method": "GET", + "status": "200", + "value": 7 + }, + { + "endpoint": "/api/v1/user", + "method": "GET", + "status": "200", + "value": 7 + }, + { + "endpoint": "/api/v1/user//role", + "method": "GET", + "status": "404", + "value": 3 + } + ], + "parseable_local_fs_response_time_bucket": [ + { + "method": "GET", + "status": "200", + "le": "0.005", + "value": 22377 + }, + { + "method": "GET", + "status": "200", + "le": "0.01", + "value": 22403 + }, + { + "method": "GET", + "status": "200", + "le": "0.025", + "value": 22413 + }, + { + "method": "GET", + "status": "200", + "le": "0.05", + "value": 22420 + }, + { + "method": "GET", + "status": "200", + "le": "0.1", + "value": 22423 + }, + { + "method": "GET", + "status": "200", + "le": "0.25", + "value": 22425 + }, + { + "method": "GET", + "status": "200", + "le": "0.5", + "value": 22425 + }, + { + "method": "GET", + "status": "200", + "le": "1", + "value": 22425 + }, + { + "method": "GET", + "status": "200", + "le": "2.5", + "value": 22425 + }, + { + "method": "GET", + "status": "200", + "le": "5", + "value": 22425 + }, + { + "method": "GET", + "status": "200", + "le": "10", + "value": 22425 + }, + { + "method": "GET", + "status": "200", + "le": "+Inf", + "value": 22425 + }, + { + "method": "GET", + "status": "400", + "le": "0.005", + "value": 3 + }, + { + "method": "GET", + "status": "400", + "le": "0.01", + "value": 3 + }, + { + "method": "GET", + "status": "400", + "le": "0.025", + "value": 3 + }, + { + "method": "GET", + "status": "400", + "le": "0.05", + "value": 3 + }, + { + "method": "GET", + "status": "400", + "le": "0.1", + "value": 3 + }, + { + "method": "GET", + "status": "400", + "le": "0.25", + "value": 3 + }, + { + "method": "GET", + "status": "400", + "le": "0.5", + "value": 3 + }, + { + "method": "GET", + "status": "400", + "le": "1", + "value": 3 + }, + { + "method": "GET", + "status": "400", + "le": "2.5", + "value": 3 + }, + { + "method": "GET", + "status": "400", + "le": "5", + "value": 3 + }, + { + "method": "GET", + "status": "400", + "le": "10", + "value": 3 + }, + { + "method": "GET", + "status": "400", + "le": "+Inf", + "value": 3 + }, + { + "method": "PUT", + "status": "200", + "le": "0.005", + "value": 15495 + }, + { + "method": "PUT", + "status": "200", + "le": "0.01", + "value": 15686 + }, + { + "method": "PUT", + "status": "200", + "le": "0.025", + "value": 15697 + }, + { + "method": "PUT", + "status": "200", + "le": "0.05", + "value": 15698 + }, + { + "method": "PUT", + "status": "200", + "le": "0.1", + "value": 15698 + }, + { + "method": "PUT", + "status": "200", + "le": "0.25", + "value": 15698 + }, + { + "method": "PUT", + "status": "200", + "le": "0.5", + "value": 15698 + }, + { + "method": "PUT", + "status": "200", + "le": "1", + "value": 15698 + }, + { + "method": "PUT", + "status": "200", + "le": "2.5", + "value": 15698 + }, + { + "method": "PUT", + "status": "200", + "le": "5", + "value": 15698 + }, + { + "method": "PUT", + "status": "200", + "le": "10", + "value": 15698 + }, + { + "method": "PUT", + "status": "200", + "le": "+Inf", + "value": 15698 + } + ], + "parseable_local_fs_response_time_sum": [ + { + "method": "GET", + "status": "200", + "value": 5 + }, + { + "method": "GET", + "status": "400", + "value": 0 + }, + { + "method": "PUT", + "status": "200", + "value": 13 + } + ], + "parseable_local_fs_response_time_count": [ + { + "method": "GET", + "status": "200", + "value": 22425 + }, + { + "method": "GET", + "status": "400", + "value": 3 + }, + { + "method": "PUT", + "status": "200", + "value": 15698 + } + ], + "parseable_query_execute_time_bucket": [ + { + "stream": "azureapimlog", + "le": "0.005", + "value": 20 + }, + { + "stream": "azureapimlog", + "le": "0.01", + "value": 51 + }, + { + "stream": "azureapimlog", + "le": "0.025", + "value": 77 + }, + { + "stream": "azureapimlog", + "le": "0.05", + "value": 80 + }, + { + "stream": "azureapimlog", + "le": "0.1", + "value": 82 + }, + { + "stream": "azureapimlog", + "le": "0.25", + "value": 82 + }, + { + "stream": "azureapimlog", + "le": "0.5", + "value": 82 + }, + { + "stream": "azureapimlog", + "le": "1", + "value": 82 + }, + { + "stream": "azureapimlog", + "le": "2.5", + "value": 82 + }, + { + "stream": "azureapimlog", + "le": "5", + "value": 82 + }, + { + "stream": "azureapimlog", + "le": "10", + "value": 82 + }, + { + "stream": "azureapimlog", + "le": "+Inf", + "value": 82 + }, + { + "stream": "backend", + "le": "0.005", + "value": 0 + }, + { + "stream": "backend", + "le": "0.01", + "value": 2 + }, + { + "stream": "backend", + "le": "0.025", + "value": 92 + }, + { + "stream": "backend", + "le": "0.05", + "value": 165 + }, + { + "stream": "backend", + "le": "0.1", + "value": 219 + }, + { + "stream": "backend", + "le": "0.25", + "value": 297 + }, + { + "stream": "backend", + "le": "0.5", + "value": 332 + }, + { + "stream": "backend", + "le": "1", + "value": 337 + }, + { + "stream": "backend", + "le": "2.5", + "value": 339 + }, + { + "stream": "backend", + "le": "5", + "value": 339 + }, + { + "stream": "backend", + "le": "10", + "value": 339 + }, + { + "stream": "backend", + "le": "+Inf", + "value": 339 + }, + { + "stream": "druide2e", + "le": "0.005", + "value": 0 + }, + { + "stream": "druide2e", + "le": "0.01", + "value": 11 + }, + { + "stream": "druide2e", + "le": "0.025", + "value": 19 + }, + { + "stream": "druide2e", + "le": "0.05", + "value": 20 + }, + { + "stream": "druide2e", + "le": "0.1", + "value": 20 + }, + { + "stream": "druide2e", + "le": "0.25", + "value": 20 + }, + { + "stream": "druide2e", + "le": "0.5", + "value": 20 + }, + { + "stream": "druide2e", + "le": "1", + "value": 20 + }, + { + "stream": "druide2e", + "le": "2.5", + "value": 20 + }, + { + "stream": "druide2e", + "le": "5", + "value": 20 + }, + { + "stream": "druide2e", + "le": "10", + "value": 20 + }, + { + "stream": "druide2e", + "le": "+Inf", + "value": 20 + }, + { + "stream": "frontend", + "le": "0.005", + "value": 0 + }, + { + "stream": "frontend", + "le": "0.01", + "value": 0 + }, + { + "stream": "frontend", + "le": "0.025", + "value": 17 + }, + { + "stream": "frontend", + "le": "0.05", + "value": 30 + }, + { + "stream": "frontend", + "le": "0.1", + "value": 49 + }, + { + "stream": "frontend", + "le": "0.25", + "value": 86 + }, + { + "stream": "frontend", + "le": "0.5", + "value": 106 + }, + { + "stream": "frontend", + "le": "1", + "value": 107 + }, + { + "stream": "frontend", + "le": "2.5", + "value": 111 + }, + { + "stream": "frontend", + "le": "5", + "value": 115 + }, + { + "stream": "frontend", + "le": "10", + "value": 115 + }, + { + "stream": "frontend", + "le": "+Inf", + "value": 115 + } + ], + "parseable_query_execute_time_sum": [ + { + "stream": "azureapimlog", + "value": 0 + }, + { + "stream": "backend", + "value": 38 + }, + { + "stream": "druide2e", + "value": 0 + }, + { + "stream": "frontend", + "value": 35 + } + ], + "parseable_query_execute_time_count": [ + { + "stream": "azureapimlog", + "value": 82 + }, + { + "stream": "backend", + "value": 339 + }, + { + "stream": "druide2e", + "value": 20 + }, + { + "stream": "frontend", + "value": 115 + } + ], + "parseable_response_code": [ + { + "endpoint": "", + "method": "GET", + "statuscode": "200", + "type": "200", + "value": 610 + }, + { + "endpoint": "", + "method": "GET", + "statuscode": "304", + "type": "300", + "value": 859 + }, + { + "endpoint": "", + "method": "GET", + "statuscode": "400", + "type": "400", + "value": 12 + }, + { + "endpoint": "", + "method": "HEAD", + "statuscode": "200", + "type": "200", + "value": 491 + }, + { + "endpoint": "", + "method": "OPTIONS", + "statuscode": "405", + "type": "400", + "value": 3 + }, + { + "endpoint": "", + "method": "POST", + "statuscode": "405", + "type": "400", + "value": 13 + }, + { + "endpoint": "*", + "method": "M-SEARCH", + "statuscode": "404", + "type": "400", + "value": 2 + }, + { + "endpoint": "/api/v1", + "method": "GET", + "statuscode": "404", + "type": "400", + "value": 1 + }, + { + "endpoint": "/api/v1/about", + "method": "GET", + "statuscode": "200", + "type": "200", + "value": 70 + }, + { + "endpoint": "/api/v1/ingest", + "method": "POST", + "statuscode": "200", + "type": "200", + "value": 6088833 + }, + { + "endpoint": "/api/v1/log-stream", + "method": "GET", + "statuscode": "404", + "type": "400", + "value": 1 + }, + { + "endpoint": "/api/v1/logstream", + "method": "GET", + "statuscode": "200", + "type": "200", + "value": 77 + }, + { + "endpoint": "/api/v1/logstream//schema", + "method": "GET", + "statuscode": "404", + "type": "400", + "value": 3 + }, + { + "endpoint": "/api/v1/metrics", + "method": "GET", + "statuscode": "200", + "type": "200", + "value": 64 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "statuscode": "301", + "type": "300", + "value": 3 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "statuscode": "400", + "type": "400", + "value": 1 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "statuscode": "301", + "type": "300", + "value": 19 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "statuscode": "307", + "type": "300", + "value": 3 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "statuscode": "400", + "type": "400", + "value": 1 + }, + { + "endpoint": "/api/v1/o/logout", + "method": "GET", + "statuscode": "301", + "type": "300", + "value": 13 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "statuscode": "200", + "type": "200", + "value": 556 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "statuscode": "400", + "type": "400", + "value": 37 + }, + { + "endpoint": "/api/v1/role", + "method": "GET", + "statuscode": "200", + "type": "200", + "value": 14 + }, + { + "endpoint": "/api/v1/role/default", + "method": "GET", + "statuscode": "200", + "type": "200", + "value": 7 + }, + { + "endpoint": "/api/v1/user", + "method": "GET", + "statuscode": "200", + "type": "200", + "value": 7 + }, + { + "endpoint": "/api/v1/user//role", + "method": "GET", + "statuscode": "404", + "type": "400", + "value": 3 + } + ], + "parseable_response_time_bucket": [ + { + "endpoint": "", + "method": "GET", + "status": "200", + "le": "0.005", + "value": 488 + }, + { + "endpoint": "", + "method": "GET", + "status": "200", + "le": "0.01", + "value": 517 + }, + { + "endpoint": "", + "method": "GET", + "status": "200", + "le": "0.025", + "value": 554 + }, + { + "endpoint": "", + "method": "GET", + "status": "200", + "le": "0.05", + "value": 580 + }, + { + "endpoint": "", + "method": "GET", + "status": "200", + "le": "0.1", + "value": 598 + }, + { + "endpoint": "", + "method": "GET", + "status": "200", + "le": "0.25", + "value": 607 + }, + { + "endpoint": "", + "method": "GET", + "status": "200", + "le": "0.5", + "value": 609 + }, + { + "endpoint": "", + "method": "GET", + "status": "200", + "le": "1", + "value": 610 + }, + { + "endpoint": "", + "method": "GET", + "status": "200", + "le": "2.5", + "value": 610 + }, + { + "endpoint": "", + "method": "GET", + "status": "200", + "le": "5", + "value": 610 + }, + { + "endpoint": "", + "method": "GET", + "status": "200", + "le": "10", + "value": 610 + }, + { + "endpoint": "", + "method": "GET", + "status": "200", + "le": "+Inf", + "value": 610 + }, + { + "endpoint": "", + "method": "GET", + "status": "304", + "le": "0.005", + "value": 852 + }, + { + "endpoint": "", + "method": "GET", + "status": "304", + "le": "0.01", + "value": 855 + }, + { + "endpoint": "", + "method": "GET", + "status": "304", + "le": "0.025", + "value": 857 + }, + { + "endpoint": "", + "method": "GET", + "status": "304", + "le": "0.05", + "value": 858 + }, + { + "endpoint": "", + "method": "GET", + "status": "304", + "le": "0.1", + "value": 859 + }, + { + "endpoint": "", + "method": "GET", + "status": "304", + "le": "0.25", + "value": 859 + }, + { + "endpoint": "", + "method": "GET", + "status": "304", + "le": "0.5", + "value": 859 + }, + { + "endpoint": "", + "method": "GET", + "status": "304", + "le": "1", + "value": 859 + }, + { + "endpoint": "", + "method": "GET", + "status": "304", + "le": "2.5", + "value": 859 + }, + { + "endpoint": "", + "method": "GET", + "status": "304", + "le": "5", + "value": 859 + }, + { + "endpoint": "", + "method": "GET", + "status": "304", + "le": "10", + "value": 859 + }, + { + "endpoint": "", + "method": "GET", + "status": "304", + "le": "+Inf", + "value": 859 + }, + { + "endpoint": "", + "method": "GET", + "status": "400", + "le": "0.005", + "value": 12 + }, + { + "endpoint": "", + "method": "GET", + "status": "400", + "le": "0.01", + "value": 12 + }, + { + "endpoint": "", + "method": "GET", + "status": "400", + "le": "0.025", + "value": 12 + }, + { + "endpoint": "", + "method": "GET", + "status": "400", + "le": "0.05", + "value": 12 + }, + { + "endpoint": "", + "method": "GET", + "status": "400", + "le": "0.1", + "value": 12 + }, + { + "endpoint": "", + "method": "GET", + "status": "400", + "le": "0.25", + "value": 12 + }, + { + "endpoint": "", + "method": "GET", + "status": "400", + "le": "0.5", + "value": 12 + }, + { + "endpoint": "", + "method": "GET", + "status": "400", + "le": "1", + "value": 12 + }, + { + "endpoint": "", + "method": "GET", + "status": "400", + "le": "2.5", + "value": 12 + }, + { + "endpoint": "", + "method": "GET", + "status": "400", + "le": "5", + "value": 12 + }, + { + "endpoint": "", + "method": "GET", + "status": "400", + "le": "10", + "value": 12 + }, + { + "endpoint": "", + "method": "GET", + "status": "400", + "le": "+Inf", + "value": 12 + }, + { + "endpoint": "", + "method": "HEAD", + "status": "200", + "le": "0.005", + "value": 491 + }, + { + "endpoint": "", + "method": "HEAD", + "status": "200", + "le": "0.01", + "value": 491 + }, + { + "endpoint": "", + "method": "HEAD", + "status": "200", + "le": "0.025", + "value": 491 + }, + { + "endpoint": "", + "method": "HEAD", + "status": "200", + "le": "0.05", + "value": 491 + }, + { + "endpoint": "", + "method": "HEAD", + "status": "200", + "le": "0.1", + "value": 491 + }, + { + "endpoint": "", + "method": "HEAD", + "status": "200", + "le": "0.25", + "value": 491 + }, + { + "endpoint": "", + "method": "HEAD", + "status": "200", + "le": "0.5", + "value": 491 + }, + { + "endpoint": "", + "method": "HEAD", + "status": "200", + "le": "1", + "value": 491 + }, + { + "endpoint": "", + "method": "HEAD", + "status": "200", + "le": "2.5", + "value": 491 + }, + { + "endpoint": "", + "method": "HEAD", + "status": "200", + "le": "5", + "value": 491 + }, + { + "endpoint": "", + "method": "HEAD", + "status": "200", + "le": "10", + "value": 491 + }, + { + "endpoint": "", + "method": "HEAD", + "status": "200", + "le": "+Inf", + "value": 491 + }, + { + "endpoint": "", + "method": "OPTIONS", + "status": "405", + "le": "0.005", + "value": 3 + }, + { + "endpoint": "", + "method": "OPTIONS", + "status": "405", + "le": "0.01", + "value": 3 + }, + { + "endpoint": "", + "method": "OPTIONS", + "status": "405", + "le": "0.025", + "value": 3 + }, + { + "endpoint": "", + "method": "OPTIONS", + "status": "405", + "le": "0.05", + "value": 3 + }, + { + "endpoint": "", + "method": "OPTIONS", + "status": "405", + "le": "0.1", + "value": 3 + }, + { + "endpoint": "", + "method": "OPTIONS", + "status": "405", + "le": "0.25", + "value": 3 + }, + { + "endpoint": "", + "method": "OPTIONS", + "status": "405", + "le": "0.5", + "value": 3 + }, + { + "endpoint": "", + "method": "OPTIONS", + "status": "405", + "le": "1", + "value": 3 + }, + { + "endpoint": "", + "method": "OPTIONS", + "status": "405", + "le": "2.5", + "value": 3 + }, + { + "endpoint": "", + "method": "OPTIONS", + "status": "405", + "le": "5", + "value": 3 + }, + { + "endpoint": "", + "method": "OPTIONS", + "status": "405", + "le": "10", + "value": 3 + }, + { + "endpoint": "", + "method": "OPTIONS", + "status": "405", + "le": "+Inf", + "value": 3 + }, + { + "endpoint": "", + "method": "POST", + "status": "405", + "le": "0.005", + "value": 13 + }, + { + "endpoint": "", + "method": "POST", + "status": "405", + "le": "0.01", + "value": 13 + }, + { + "endpoint": "", + "method": "POST", + "status": "405", + "le": "0.025", + "value": 13 + }, + { + "endpoint": "", + "method": "POST", + "status": "405", + "le": "0.05", + "value": 13 + }, + { + "endpoint": "", + "method": "POST", + "status": "405", + "le": "0.1", + "value": 13 + }, + { + "endpoint": "", + "method": "POST", + "status": "405", + "le": "0.25", + "value": 13 + }, + { + "endpoint": "", + "method": "POST", + "status": "405", + "le": "0.5", + "value": 13 + }, + { + "endpoint": "", + "method": "POST", + "status": "405", + "le": "1", + "value": 13 + }, + { + "endpoint": "", + "method": "POST", + "status": "405", + "le": "2.5", + "value": 13 + }, + { + "endpoint": "", + "method": "POST", + "status": "405", + "le": "5", + "value": 13 + }, + { + "endpoint": "", + "method": "POST", + "status": "405", + "le": "10", + "value": 13 + }, + { + "endpoint": "", + "method": "POST", + "status": "405", + "le": "+Inf", + "value": 13 + }, + { + "endpoint": "*", + "method": "M-SEARCH", + "status": "404", + "le": "0.005", + "value": 2 + }, + { + "endpoint": "*", + "method": "M-SEARCH", + "status": "404", + "le": "0.01", + "value": 2 + }, + { + "endpoint": "*", + "method": "M-SEARCH", + "status": "404", + "le": "0.025", + "value": 2 + }, + { + "endpoint": "*", + "method": "M-SEARCH", + "status": "404", + "le": "0.05", + "value": 2 + }, + { + "endpoint": "*", + "method": "M-SEARCH", + "status": "404", + "le": "0.1", + "value": 2 + }, + { + "endpoint": "*", + "method": "M-SEARCH", + "status": "404", + "le": "0.25", + "value": 2 + }, + { + "endpoint": "*", + "method": "M-SEARCH", + "status": "404", + "le": "0.5", + "value": 2 + }, + { + "endpoint": "*", + "method": "M-SEARCH", + "status": "404", + "le": "1", + "value": 2 + }, + { + "endpoint": "*", + "method": "M-SEARCH", + "status": "404", + "le": "2.5", + "value": 2 + }, + { + "endpoint": "*", + "method": "M-SEARCH", + "status": "404", + "le": "5", + "value": 2 + }, + { + "endpoint": "*", + "method": "M-SEARCH", + "status": "404", + "le": "10", + "value": 2 + }, + { + "endpoint": "*", + "method": "M-SEARCH", + "status": "404", + "le": "+Inf", + "value": 2 + }, + { + "endpoint": "/api/v1", + "method": "GET", + "status": "404", + "le": "0.005", + "value": 1 + }, + { + "endpoint": "/api/v1", + "method": "GET", + "status": "404", + "le": "0.01", + "value": 1 + }, + { + "endpoint": "/api/v1", + "method": "GET", + "status": "404", + "le": "0.025", + "value": 1 + }, + { + "endpoint": "/api/v1", + "method": "GET", + "status": "404", + "le": "0.05", + "value": 1 + }, + { + "endpoint": "/api/v1", + "method": "GET", + "status": "404", + "le": "0.1", + "value": 1 + }, + { + "endpoint": "/api/v1", + "method": "GET", + "status": "404", + "le": "0.25", + "value": 1 + }, + { + "endpoint": "/api/v1", + "method": "GET", + "status": "404", + "le": "0.5", + "value": 1 + }, + { + "endpoint": "/api/v1", + "method": "GET", + "status": "404", + "le": "1", + "value": 1 + }, + { + "endpoint": "/api/v1", + "method": "GET", + "status": "404", + "le": "2.5", + "value": 1 + }, + { + "endpoint": "/api/v1", + "method": "GET", + "status": "404", + "le": "5", + "value": 1 + }, + { + "endpoint": "/api/v1", + "method": "GET", + "status": "404", + "le": "10", + "value": 1 + }, + { + "endpoint": "/api/v1", + "method": "GET", + "status": "404", + "le": "+Inf", + "value": 1 + }, + { + "endpoint": "/api/v1/about", + "method": "GET", + "status": "200", + "le": "0.005", + "value": 0 + }, + { + "endpoint": "/api/v1/about", + "method": "GET", + "status": "200", + "le": "0.01", + "value": 0 + }, + { + "endpoint": "/api/v1/about", + "method": "GET", + "status": "200", + "le": "0.025", + "value": 0 + }, + { + "endpoint": "/api/v1/about", + "method": "GET", + "status": "200", + "le": "0.05", + "value": 0 + }, + { + "endpoint": "/api/v1/about", + "method": "GET", + "status": "200", + "le": "0.1", + "value": 0 + }, + { + "endpoint": "/api/v1/about", + "method": "GET", + "status": "200", + "le": "0.25", + "value": 0 + }, + { + "endpoint": "/api/v1/about", + "method": "GET", + "status": "200", + "le": "0.5", + "value": 0 + }, + { + "endpoint": "/api/v1/about", + "method": "GET", + "status": "200", + "le": "1", + "value": 66 + }, + { + "endpoint": "/api/v1/about", + "method": "GET", + "status": "200", + "le": "2.5", + "value": 70 + }, + { + "endpoint": "/api/v1/about", + "method": "GET", + "status": "200", + "le": "5", + "value": 70 + }, + { + "endpoint": "/api/v1/about", + "method": "GET", + "status": "200", + "le": "10", + "value": 70 + }, + { + "endpoint": "/api/v1/about", + "method": "GET", + "status": "200", + "le": "+Inf", + "value": 70 + }, + { + "endpoint": "/api/v1/ingest", + "method": "POST", + "status": "200", + "le": "0.005", + "value": 6087344 + }, + { + "endpoint": "/api/v1/ingest", + "method": "POST", + "status": "200", + "le": "0.01", + "value": 6088376 + }, + { + "endpoint": "/api/v1/ingest", + "method": "POST", + "status": "200", + "le": "0.025", + "value": 6088679 + }, + { + "endpoint": "/api/v1/ingest", + "method": "POST", + "status": "200", + "le": "0.05", + "value": 6088777 + }, + { + "endpoint": "/api/v1/ingest", + "method": "POST", + "status": "200", + "le": "0.1", + "value": 6088813 + }, + { + "endpoint": "/api/v1/ingest", + "method": "POST", + "status": "200", + "le": "0.25", + "value": 6088830 + }, + { + "endpoint": "/api/v1/ingest", + "method": "POST", + "status": "200", + "le": "0.5", + "value": 6088833 + }, + { + "endpoint": "/api/v1/ingest", + "method": "POST", + "status": "200", + "le": "1", + "value": 6088833 + }, + { + "endpoint": "/api/v1/ingest", + "method": "POST", + "status": "200", + "le": "2.5", + "value": 6088833 + }, + { + "endpoint": "/api/v1/ingest", + "method": "POST", + "status": "200", + "le": "5", + "value": 6088833 + }, + { + "endpoint": "/api/v1/ingest", + "method": "POST", + "status": "200", + "le": "10", + "value": 6088833 + }, + { + "endpoint": "/api/v1/ingest", + "method": "POST", + "status": "200", + "le": "+Inf", + "value": 6088833 + }, + { + "endpoint": "/api/v1/log-stream", + "method": "GET", + "status": "404", + "le": "0.005", + "value": 1 + }, + { + "endpoint": "/api/v1/log-stream", + "method": "GET", + "status": "404", + "le": "0.01", + "value": 1 + }, + { + "endpoint": "/api/v1/log-stream", + "method": "GET", + "status": "404", + "le": "0.025", + "value": 1 + }, + { + "endpoint": "/api/v1/log-stream", + "method": "GET", + "status": "404", + "le": "0.05", + "value": 1 + }, + { + "endpoint": "/api/v1/log-stream", + "method": "GET", + "status": "404", + "le": "0.1", + "value": 1 + }, + { + "endpoint": "/api/v1/log-stream", + "method": "GET", + "status": "404", + "le": "0.25", + "value": 1 + }, + { + "endpoint": "/api/v1/log-stream", + "method": "GET", + "status": "404", + "le": "0.5", + "value": 1 + }, + { + "endpoint": "/api/v1/log-stream", + "method": "GET", + "status": "404", + "le": "1", + "value": 1 + }, + { + "endpoint": "/api/v1/log-stream", + "method": "GET", + "status": "404", + "le": "2.5", + "value": 1 + }, + { + "endpoint": "/api/v1/log-stream", + "method": "GET", + "status": "404", + "le": "5", + "value": 1 + }, + { + "endpoint": "/api/v1/log-stream", + "method": "GET", + "status": "404", + "le": "10", + "value": 1 + }, + { + "endpoint": "/api/v1/log-stream", + "method": "GET", + "status": "404", + "le": "+Inf", + "value": 1 + }, + { + "endpoint": "/api/v1/logstream", + "method": "GET", + "status": "200", + "le": "0.005", + "value": 24 + }, + { + "endpoint": "/api/v1/logstream", + "method": "GET", + "status": "200", + "le": "0.01", + "value": 66 + }, + { + "endpoint": "/api/v1/logstream", + "method": "GET", + "status": "200", + "le": "0.025", + "value": 77 + }, + { + "endpoint": "/api/v1/logstream", + "method": "GET", + "status": "200", + "le": "0.05", + "value": 77 + }, + { + "endpoint": "/api/v1/logstream", + "method": "GET", + "status": "200", + "le": "0.1", + "value": 77 + }, + { + "endpoint": "/api/v1/logstream", + "method": "GET", + "status": "200", + "le": "0.25", + "value": 77 + }, + { + "endpoint": "/api/v1/logstream", + "method": "GET", + "status": "200", + "le": "0.5", + "value": 77 + }, + { + "endpoint": "/api/v1/logstream", + "method": "GET", + "status": "200", + "le": "1", + "value": 77 + }, + { + "endpoint": "/api/v1/logstream", + "method": "GET", + "status": "200", + "le": "2.5", + "value": 77 + }, + { + "endpoint": "/api/v1/logstream", + "method": "GET", + "status": "200", + "le": "5", + "value": 77 + }, + { + "endpoint": "/api/v1/logstream", + "method": "GET", + "status": "200", + "le": "10", + "value": 77 + }, + { + "endpoint": "/api/v1/logstream", + "method": "GET", + "status": "200", + "le": "+Inf", + "value": 77 + }, + { + "endpoint": "/api/v1/logstream//schema", + "method": "GET", + "status": "404", + "le": "0.005", + "value": 3 + }, + { + "endpoint": "/api/v1/logstream//schema", + "method": "GET", + "status": "404", + "le": "0.01", + "value": 3 + }, + { + "endpoint": "/api/v1/logstream//schema", + "method": "GET", + "status": "404", + "le": "0.025", + "value": 3 + }, + { + "endpoint": "/api/v1/logstream//schema", + "method": "GET", + "status": "404", + "le": "0.05", + "value": 3 + }, + { + "endpoint": "/api/v1/logstream//schema", + "method": "GET", + "status": "404", + "le": "0.1", + "value": 3 + }, + { + "endpoint": "/api/v1/logstream//schema", + "method": "GET", + "status": "404", + "le": "0.25", + "value": 3 + }, + { + "endpoint": "/api/v1/logstream//schema", + "method": "GET", + "status": "404", + "le": "0.5", + "value": 3 + }, + { + "endpoint": "/api/v1/logstream//schema", + "method": "GET", + "status": "404", + "le": "1", + "value": 3 + }, + { + "endpoint": "/api/v1/logstream//schema", + "method": "GET", + "status": "404", + "le": "2.5", + "value": 3 + }, + { + "endpoint": "/api/v1/logstream//schema", + "method": "GET", + "status": "404", + "le": "5", + "value": 3 + }, + { + "endpoint": "/api/v1/logstream//schema", + "method": "GET", + "status": "404", + "le": "10", + "value": 3 + }, + { + "endpoint": "/api/v1/logstream//schema", + "method": "GET", + "status": "404", + "le": "+Inf", + "value": 3 + }, + { + "endpoint": "/api/v1/metrics", + "method": "GET", + "status": "200", + "le": "0.005", + "value": 60 + }, + { + "endpoint": "/api/v1/metrics", + "method": "GET", + "status": "200", + "le": "0.01", + "value": 64 + }, + { + "endpoint": "/api/v1/metrics", + "method": "GET", + "status": "200", + "le": "0.025", + "value": 64 + }, + { + "endpoint": "/api/v1/metrics", + "method": "GET", + "status": "200", + "le": "0.05", + "value": 64 + }, + { + "endpoint": "/api/v1/metrics", + "method": "GET", + "status": "200", + "le": "0.1", + "value": 64 + }, + { + "endpoint": "/api/v1/metrics", + "method": "GET", + "status": "200", + "le": "0.25", + "value": 64 + }, + { + "endpoint": "/api/v1/metrics", + "method": "GET", + "status": "200", + "le": "0.5", + "value": 64 + }, + { + "endpoint": "/api/v1/metrics", + "method": "GET", + "status": "200", + "le": "1", + "value": 64 + }, + { + "endpoint": "/api/v1/metrics", + "method": "GET", + "status": "200", + "le": "2.5", + "value": 64 + }, + { + "endpoint": "/api/v1/metrics", + "method": "GET", + "status": "200", + "le": "5", + "value": 64 + }, + { + "endpoint": "/api/v1/metrics", + "method": "GET", + "status": "200", + "le": "10", + "value": 64 + }, + { + "endpoint": "/api/v1/metrics", + "method": "GET", + "status": "200", + "le": "+Inf", + "value": 64 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "301", + "le": "0.005", + "value": 0 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "301", + "le": "0.01", + "value": 0 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "301", + "le": "0.025", + "value": 0 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "301", + "le": "0.05", + "value": 0 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "301", + "le": "0.1", + "value": 0 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "301", + "le": "0.25", + "value": 0 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "301", + "le": "0.5", + "value": 3 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "301", + "le": "1", + "value": 3 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "301", + "le": "2.5", + "value": 3 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "301", + "le": "5", + "value": 3 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "301", + "le": "10", + "value": 3 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "301", + "le": "+Inf", + "value": 3 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "400", + "le": "0.005", + "value": 1 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "400", + "le": "0.01", + "value": 1 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "400", + "le": "0.025", + "value": 1 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "400", + "le": "0.05", + "value": 1 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "400", + "le": "0.1", + "value": 1 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "400", + "le": "0.25", + "value": 1 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "400", + "le": "0.5", + "value": 1 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "400", + "le": "1", + "value": 1 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "400", + "le": "2.5", + "value": 1 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "400", + "le": "5", + "value": 1 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "400", + "le": "10", + "value": 1 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "400", + "le": "+Inf", + "value": 1 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "301", + "le": "0.005", + "value": 0 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "301", + "le": "0.01", + "value": 0 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "301", + "le": "0.025", + "value": 0 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "301", + "le": "0.05", + "value": 10 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "301", + "le": "0.1", + "value": 19 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "301", + "le": "0.25", + "value": 19 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "301", + "le": "0.5", + "value": 19 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "301", + "le": "1", + "value": 19 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "301", + "le": "2.5", + "value": 19 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "301", + "le": "5", + "value": 19 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "301", + "le": "10", + "value": 19 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "301", + "le": "+Inf", + "value": 19 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "307", + "le": "0.005", + "value": 3 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "307", + "le": "0.01", + "value": 3 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "307", + "le": "0.025", + "value": 3 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "307", + "le": "0.05", + "value": 3 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "307", + "le": "0.1", + "value": 3 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "307", + "le": "0.25", + "value": 3 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "307", + "le": "0.5", + "value": 3 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "307", + "le": "1", + "value": 3 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "307", + "le": "2.5", + "value": 3 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "307", + "le": "5", + "value": 3 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "307", + "le": "10", + "value": 3 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "307", + "le": "+Inf", + "value": 3 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "400", + "le": "0.005", + "value": 0 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "400", + "le": "0.01", + "value": 0 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "400", + "le": "0.025", + "value": 0 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "400", + "le": "0.05", + "value": 1 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "400", + "le": "0.1", + "value": 1 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "400", + "le": "0.25", + "value": 1 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "400", + "le": "0.5", + "value": 1 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "400", + "le": "1", + "value": 1 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "400", + "le": "2.5", + "value": 1 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "400", + "le": "5", + "value": 1 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "400", + "le": "10", + "value": 1 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "400", + "le": "+Inf", + "value": 1 + }, + { + "endpoint": "/api/v1/o/logout", + "method": "GET", + "status": "301", + "le": "0.005", + "value": 13 + }, + { + "endpoint": "/api/v1/o/logout", + "method": "GET", + "status": "301", + "le": "0.01", + "value": 13 + }, + { + "endpoint": "/api/v1/o/logout", + "method": "GET", + "status": "301", + "le": "0.025", + "value": 13 + }, + { + "endpoint": "/api/v1/o/logout", + "method": "GET", + "status": "301", + "le": "0.05", + "value": 13 + }, + { + "endpoint": "/api/v1/o/logout", + "method": "GET", + "status": "301", + "le": "0.1", + "value": 13 + }, + { + "endpoint": "/api/v1/o/logout", + "method": "GET", + "status": "301", + "le": "0.25", + "value": 13 + }, + { + "endpoint": "/api/v1/o/logout", + "method": "GET", + "status": "301", + "le": "0.5", + "value": 13 + }, + { + "endpoint": "/api/v1/o/logout", + "method": "GET", + "status": "301", + "le": "1", + "value": 13 + }, + { + "endpoint": "/api/v1/o/logout", + "method": "GET", + "status": "301", + "le": "2.5", + "value": 13 + }, + { + "endpoint": "/api/v1/o/logout", + "method": "GET", + "status": "301", + "le": "5", + "value": 13 + }, + { + "endpoint": "/api/v1/o/logout", + "method": "GET", + "status": "301", + "le": "10", + "value": 13 + }, + { + "endpoint": "/api/v1/o/logout", + "method": "GET", + "status": "301", + "le": "+Inf", + "value": 13 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "200", + "le": "0.005", + "value": 1 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "200", + "le": "0.01", + "value": 9 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "200", + "le": "0.025", + "value": 116 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "200", + "le": "0.05", + "value": 221 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "200", + "le": "0.1", + "value": 297 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "200", + "le": "0.25", + "value": 395 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "200", + "le": "0.5", + "value": 520 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "200", + "le": "1", + "value": 544 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "200", + "le": "2.5", + "value": 552 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "200", + "le": "5", + "value": 556 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "200", + "le": "10", + "value": 556 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "200", + "le": "+Inf", + "value": 556 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "400", + "le": "0.005", + "value": 35 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "400", + "le": "0.01", + "value": 35 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "400", + "le": "0.025", + "value": 36 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "400", + "le": "0.05", + "value": 37 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "400", + "le": "0.1", + "value": 37 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "400", + "le": "0.25", + "value": 37 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "400", + "le": "0.5", + "value": 37 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "400", + "le": "1", + "value": 37 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "400", + "le": "2.5", + "value": 37 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "400", + "le": "5", + "value": 37 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "400", + "le": "10", + "value": 37 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "400", + "le": "+Inf", + "value": 37 + }, + { + "endpoint": "/api/v1/role", + "method": "GET", + "status": "200", + "le": "0.005", + "value": 14 + }, + { + "endpoint": "/api/v1/role", + "method": "GET", + "status": "200", + "le": "0.01", + "value": 14 + }, + { + "endpoint": "/api/v1/role", + "method": "GET", + "status": "200", + "le": "0.025", + "value": 14 + }, + { + "endpoint": "/api/v1/role", + "method": "GET", + "status": "200", + "le": "0.05", + "value": 14 + }, + { + "endpoint": "/api/v1/role", + "method": "GET", + "status": "200", + "le": "0.1", + "value": 14 + }, + { + "endpoint": "/api/v1/role", + "method": "GET", + "status": "200", + "le": "0.25", + "value": 14 + }, + { + "endpoint": "/api/v1/role", + "method": "GET", + "status": "200", + "le": "0.5", + "value": 14 + }, + { + "endpoint": "/api/v1/role", + "method": "GET", + "status": "200", + "le": "1", + "value": 14 + }, + { + "endpoint": "/api/v1/role", + "method": "GET", + "status": "200", + "le": "2.5", + "value": 14 + }, + { + "endpoint": "/api/v1/role", + "method": "GET", + "status": "200", + "le": "5", + "value": 14 + }, + { + "endpoint": "/api/v1/role", + "method": "GET", + "status": "200", + "le": "10", + "value": 14 + }, + { + "endpoint": "/api/v1/role", + "method": "GET", + "status": "200", + "le": "+Inf", + "value": 14 + }, + { + "endpoint": "/api/v1/role/default", + "method": "GET", + "status": "200", + "le": "0.005", + "value": 7 + }, + { + "endpoint": "/api/v1/role/default", + "method": "GET", + "status": "200", + "le": "0.01", + "value": 7 + }, + { + "endpoint": "/api/v1/role/default", + "method": "GET", + "status": "200", + "le": "0.025", + "value": 7 + }, + { + "endpoint": "/api/v1/role/default", + "method": "GET", + "status": "200", + "le": "0.05", + "value": 7 + }, + { + "endpoint": "/api/v1/role/default", + "method": "GET", + "status": "200", + "le": "0.1", + "value": 7 + }, + { + "endpoint": "/api/v1/role/default", + "method": "GET", + "status": "200", + "le": "0.25", + "value": 7 + }, + { + "endpoint": "/api/v1/role/default", + "method": "GET", + "status": "200", + "le": "0.5", + "value": 7 + }, + { + "endpoint": "/api/v1/role/default", + "method": "GET", + "status": "200", + "le": "1", + "value": 7 + }, + { + "endpoint": "/api/v1/role/default", + "method": "GET", + "status": "200", + "le": "2.5", + "value": 7 + }, + { + "endpoint": "/api/v1/role/default", + "method": "GET", + "status": "200", + "le": "5", + "value": 7 + }, + { + "endpoint": "/api/v1/role/default", + "method": "GET", + "status": "200", + "le": "10", + "value": 7 + }, + { + "endpoint": "/api/v1/role/default", + "method": "GET", + "status": "200", + "le": "+Inf", + "value": 7 + }, + { + "endpoint": "/api/v1/user", + "method": "GET", + "status": "200", + "le": "0.005", + "value": 7 + }, + { + "endpoint": "/api/v1/user", + "method": "GET", + "status": "200", + "le": "0.01", + "value": 7 + }, + { + "endpoint": "/api/v1/user", + "method": "GET", + "status": "200", + "le": "0.025", + "value": 7 + }, + { + "endpoint": "/api/v1/user", + "method": "GET", + "status": "200", + "le": "0.05", + "value": 7 + }, + { + "endpoint": "/api/v1/user", + "method": "GET", + "status": "200", + "le": "0.1", + "value": 7 + }, + { + "endpoint": "/api/v1/user", + "method": "GET", + "status": "200", + "le": "0.25", + "value": 7 + }, + { + "endpoint": "/api/v1/user", + "method": "GET", + "status": "200", + "le": "0.5", + "value": 7 + }, + { + "endpoint": "/api/v1/user", + "method": "GET", + "status": "200", + "le": "1", + "value": 7 + }, + { + "endpoint": "/api/v1/user", + "method": "GET", + "status": "200", + "le": "2.5", + "value": 7 + }, + { + "endpoint": "/api/v1/user", + "method": "GET", + "status": "200", + "le": "5", + "value": 7 + }, + { + "endpoint": "/api/v1/user", + "method": "GET", + "status": "200", + "le": "10", + "value": 7 + }, + { + "endpoint": "/api/v1/user", + "method": "GET", + "status": "200", + "le": "+Inf", + "value": 7 + }, + { + "endpoint": "/api/v1/user//role", + "method": "GET", + "status": "404", + "le": "0.005", + "value": 3 + }, + { + "endpoint": "/api/v1/user//role", + "method": "GET", + "status": "404", + "le": "0.01", + "value": 3 + }, + { + "endpoint": "/api/v1/user//role", + "method": "GET", + "status": "404", + "le": "0.025", + "value": 3 + }, + { + "endpoint": "/api/v1/user//role", + "method": "GET", + "status": "404", + "le": "0.05", + "value": 3 + }, + { + "endpoint": "/api/v1/user//role", + "method": "GET", + "status": "404", + "le": "0.1", + "value": 3 + }, + { + "endpoint": "/api/v1/user//role", + "method": "GET", + "status": "404", + "le": "0.25", + "value": 3 + }, + { + "endpoint": "/api/v1/user//role", + "method": "GET", + "status": "404", + "le": "0.5", + "value": 3 + }, + { + "endpoint": "/api/v1/user//role", + "method": "GET", + "status": "404", + "le": "1", + "value": 3 + }, + { + "endpoint": "/api/v1/user//role", + "method": "GET", + "status": "404", + "le": "2.5", + "value": 3 + }, + { + "endpoint": "/api/v1/user//role", + "method": "GET", + "status": "404", + "le": "5", + "value": 3 + }, + { + "endpoint": "/api/v1/user//role", + "method": "GET", + "status": "404", + "le": "10", + "value": 3 + }, + { + "endpoint": "/api/v1/user//role", + "method": "GET", + "status": "404", + "le": "+Inf", + "value": 3 + } + ], + "parseable_response_time_sum": [ + { + "endpoint": "", + "method": "GET", + "status": "200", + "value": 5 + }, + { + "endpoint": "", + "method": "GET", + "status": "304", + "value": 0 + }, + { + "endpoint": "", + "method": "GET", + "status": "400", + "value": 0 + }, + { + "endpoint": "", + "method": "HEAD", + "status": "200", + "value": 0 + }, + { + "endpoint": "", + "method": "OPTIONS", + "status": "405", + "value": 0 + }, + { + "endpoint": "", + "method": "POST", + "status": "405", + "value": 0 + }, + { + "endpoint": "*", + "method": "M-SEARCH", + "status": "404", + "value": 0 + }, + { + "endpoint": "/api/v1", + "method": "GET", + "status": "404", + "value": 0 + }, + { + "endpoint": "/api/v1/about", + "method": "GET", + "status": "200", + "value": 56 + }, + { + "endpoint": "/api/v1/ingest", + "method": "POST", + "status": "200", + "value": 1548 + }, + { + "endpoint": "/api/v1/log-stream", + "method": "GET", + "status": "404", + "value": 0 + }, + { + "endpoint": "/api/v1/logstream", + "method": "GET", + "status": "200", + "value": 0 + }, + { + "endpoint": "/api/v1/logstream//schema", + "method": "GET", + "status": "404", + "value": 0 + }, + { + "endpoint": "/api/v1/metrics", + "method": "GET", + "status": "200", + "value": 0 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "301", + "value": 0 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "400", + "value": 0 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "301", + "value": 0 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "307", + "value": 0 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "400", + "value": 0 + }, + { + "endpoint": "/api/v1/o/logout", + "method": "GET", + "status": "301", + "value": 0 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "200", + "value": 114 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "400", + "value": 0 + }, + { + "endpoint": "/api/v1/role", + "method": "GET", + "status": "200", + "value": 0 + }, + { + "endpoint": "/api/v1/role/default", + "method": "GET", + "status": "200", + "value": 0 + }, + { + "endpoint": "/api/v1/user", + "method": "GET", + "status": "200", + "value": 0 + }, + { + "endpoint": "/api/v1/user//role", + "method": "GET", + "status": "404", + "value": 0 + } + ], + "parseable_response_time_count": [ + { + "endpoint": "", + "method": "GET", + "status": "200", + "value": 610 + }, + { + "endpoint": "", + "method": "GET", + "status": "304", + "value": 859 + }, + { + "endpoint": "", + "method": "GET", + "status": "400", + "value": 12 + }, + { + "endpoint": "", + "method": "HEAD", + "status": "200", + "value": 491 + }, + { + "endpoint": "", + "method": "OPTIONS", + "status": "405", + "value": 3 + }, + { + "endpoint": "", + "method": "POST", + "status": "405", + "value": 13 + }, + { + "endpoint": "*", + "method": "M-SEARCH", + "status": "404", + "value": 2 + }, + { + "endpoint": "/api/v1", + "method": "GET", + "status": "404", + "value": 1 + }, + { + "endpoint": "/api/v1/about", + "method": "GET", + "status": "200", + "value": 70 + }, + { + "endpoint": "/api/v1/ingest", + "method": "POST", + "status": "200", + "value": 6088833 + }, + { + "endpoint": "/api/v1/log-stream", + "method": "GET", + "status": "404", + "value": 1 + }, + { + "endpoint": "/api/v1/logstream", + "method": "GET", + "status": "200", + "value": 77 + }, + { + "endpoint": "/api/v1/logstream//schema", + "method": "GET", + "status": "404", + "value": 3 + }, + { + "endpoint": "/api/v1/metrics", + "method": "GET", + "status": "200", + "value": 64 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "301", + "value": 3 + }, + { + "endpoint": "/api/v1/o/code", + "method": "GET", + "status": "400", + "value": 1 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "301", + "value": 19 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "307", + "value": 3 + }, + { + "endpoint": "/api/v1/o/login", + "method": "GET", + "status": "400", + "value": 1 + }, + { + "endpoint": "/api/v1/o/logout", + "method": "GET", + "status": "301", + "value": 13 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "200", + "value": 556 + }, + { + "endpoint": "/api/v1/query", + "method": "POST", + "status": "400", + "value": 37 + }, + { + "endpoint": "/api/v1/role", + "method": "GET", + "status": "200", + "value": 14 + }, + { + "endpoint": "/api/v1/role/default", + "method": "GET", + "status": "200", + "value": 7 + }, + { + "endpoint": "/api/v1/user", + "method": "GET", + "status": "200", + "value": 7 + }, + { + "endpoint": "/api/v1/user//role", + "method": "GET", + "status": "404", + "value": 3 + } + ], + "parseable_staging_files": [ + { + "stream": "azureapimlog", + "value": 0 + }, + { + "stream": "backend", + "value": 1 + }, + { + "stream": "druide2e", + "value": 0 + }, + { + "stream": "frontend", + "value": 1 + } + ], + "parseable_storage_size": [ + { + "format": "arrows", + "stream": "azureapimlog", + "type": "staging", + "value": 278360 + }, + { + "format": "arrows", + "stream": "backend", + "type": "staging", + "value": 3710463112 + }, + { + "format": "arrows", + "stream": "frontend", + "type": "staging", + "value": 3349968344 + }, + { + "format": "parquet", + "stream": "azureapimlog", + "type": "data", + "value": 1628492 + }, + { + "format": "parquet", + "stream": "backend", + "type": "data", + "value": 1061537471 + }, + { + "format": "parquet", + "stream": "druide2e", + "type": "data", + "value": 3421013 + }, + { + "format": "parquet", + "stream": "frontend", + "type": "data", + "value": 1042412371 + } + ], + "process_cpu_seconds_total": 3794, + "process_max_fds": 1048576, + "process_open_fds": 267, + "process_resident_memory_bytes": 236376064, + "process_start_time_seconds": 1709565826, + "process_threads": 7, + "process_virtual_memory_bytes": 692588544 +} + +function parsePrometheusResponse(response) { + const metrics = {}; + + response.trim().split('\n').forEach(line => { + const matchWithLabels = line.match(/(\w+)\{([^\}]+)\}\s+(\d+)/); + const matchWithoutLabels = line.match(/(\w+)\s+(\d+)/); + + if (matchWithLabels) { + const metricName = matchWithLabels[1]; + const labels = matchWithLabels[2].split(',').reduce((acc, label) => { + const [key, value] = label.split('='); + acc[key] = value.replace(/"/g, ''); + return acc; + }, {}); + const value = parseInt(matchWithLabels[3], 10); + + if (!metrics[metricName]) { + metrics[metricName] = []; + } + + metrics[metricName].push({ ...labels, value }); + } else if (matchWithoutLabels) { + const metricName = matchWithoutLabels[1]; + const value = parseInt(matchWithoutLabels[2], 10); + + if (!metrics[metricName]) { + metrics[metricName] = value; + } else if (typeof metrics[metricName] === 'number') { + metrics[metricName] = [metrics[metricName], { value }]; + } else { + metrics[metricName].push({ value }); + } + } + }); + + return metrics; + } + + const UsageIndicator = (props: UsageIndicatorProps) => { const alarmCutOffPercentage = 79; const { label, percentage } = props; @@ -116,6 +3646,16 @@ const UsageIndicator = (props: UsageIndicatorProps) => { }; const IngestorsTable = () => { + const fetchFileContent = () => { + // Read the file content using the imported text file + fetch(text) + .then(response => response.text()) + .then(content => console.log(parsePrometheusResponse(content))) + .catch(error => console.error('Error reading file:', error)); + }; + useEffect(() => { + fetchFileContent() + }, []) const rows = ingestorsData.map((element, index) => { const totalErrors = element.errors.length; return ( @@ -150,7 +3690,7 @@ const IngestorsTable = () => { From 589385ac4104b1948a5b11ad9dbf8b69df520533 Mon Sep 17 00:00:00 2001 From: balaji-jr Date: Mon, 18 Mar 2024 10:47:10 +0530 Subject: [PATCH 04/20] WIP - parsing prometheus response --- src/pages/Systems/Ingestors.tsx | 7276 ++++++++++--------- src/pages/Systems/index.tsx | 2 +- src/pages/Systems/styles/Systems.module.css | 2 +- 3 files changed, 3690 insertions(+), 3590 deletions(-) diff --git a/src/pages/Systems/Ingestors.tsx b/src/pages/Systems/Ingestors.tsx index 9df113ef..8d8af175 100644 --- a/src/pages/Systems/Ingestors.tsx +++ b/src/pages/Systems/Ingestors.tsx @@ -1,11 +1,10 @@ import { Stack, Text, Table, Tooltip, Badge, ThemeIcon, Popover } from '@mantine/core'; import { FC, useEffect } from 'react'; import classes from './styles/Systems.module.css'; -import { IconBrandDatabricks, IconInfoCircleFilled, IconX } from '@tabler/icons-react'; +import { IconAlertCircle, IconBrandDatabricks, IconInfoCircleFilled, IconX } from '@tabler/icons-react'; import { HumanizeNumber, formatBytes } from '@/utils/formatBytes'; import { Axios } from '@/api/axios'; - -import text from './mock.txt' +import text from './mock.txt'; const ingestorsData = [ { @@ -24,6 +23,28 @@ const ingestorsData = [ port: 8001, filesCount: 2131231242, stagingDataSize: 42344234, + parseable_events_ingested: [ + { + format: 'json', + stream: 'azureapimlog', + value: 132, + }, + { + format: 'json', + stream: 'backend', + value: 27078249, + }, + { + format: 'json', + stream: 'druide2e', + value: 9416, + }, + { + format: 'json', + stream: 'frontend', + value: 27306182, + }, + ], }, { status: 'online', @@ -41,6 +62,28 @@ const ingestorsData = [ port: 8002, filesCount: 242423534, stagingDataSize: 23463246, + parseable_events_ingested: [ + { + format: 'json', + stream: 'azureapimlog', + value: 132, + }, + { + format: 'json', + stream: 'backend', + value: 27078249, + }, + { + format: 'json', + stream: 'druide2e', + value: 9416, + }, + { + format: 'json', + stream: 'frontend', + value: 27306182, + }, + ], }, { status: 'offline', @@ -54,10 +97,32 @@ const ingestorsData = [ usedStorage: 23400000000, cpu: 76, stagingDirectory: '/parseable/stage', - store: '/parseable/data', + store: '/parseable/data', port: 8003, filesCount: 6456323, stagingDataSize: 321234, + parseable_events_ingested: [ + { + format: 'json', + stream: 'azureapimlog', + value: 132, + }, + { + format: 'json', + stream: 'backend', + value: 27078249, + }, + { + format: 'json', + stream: 'druide2e', + value: 9416, + }, + { + format: 'json', + stream: 'frontend', + value: 27306182, + }, + ], }, { status: 'online', @@ -75,6 +140,28 @@ const ingestorsData = [ port: 8004, filesCount: 7453744555, stagingDataSize: 9242349, + parseable_events_ingested: [ + { + format: 'json', + stream: 'azureapimlog', + value: 132, + }, + { + format: 'json', + stream: 'backend', + value: 27078249, + }, + { + format: 'json', + stream: 'druide2e', + value: 9416, + }, + { + format: 'json', + stream: 'frontend', + value: 27306182, + }, + ], }, ]; @@ -82,11 +169,11 @@ function bytesToGiB(bytes: number, appendSuffix: boolean = true) { if (bytes === 0) return '0 GiB'; const gigabytes = bytes / (1024 * 1024 * 1024); - const prefix = gigabytes % 1 === 0 ? gigabytes : gigabytes.toFixed(1) + const prefix = gigabytes % 1 === 0 ? gigabytes : gigabytes.toFixed(1); if (!appendSuffix) return prefix; - return `${prefix} GiB` + return `${prefix} GiB`; } const sanitizeBytes = (size: any) => { @@ -99,3533 +186,3535 @@ type UsageIndicatorProps = { }; const parsedMetrics = { - "parseable_events_ingested": [ - { - "format": "json", - "stream": "azureapimlog", - "value": 132 - }, - { - "format": "json", - "stream": "backend", - "value": 27078249 - }, - { - "format": "json", - "stream": "druide2e", - "value": 9416 - }, - { - "format": "json", - "stream": "frontend", - "value": 27306182 - } - ], - "parseable_events_ingested_size": [ - { - "format": "json", - "stream": "azureapimlog", - "value": 287478 - }, - { - "format": "json", - "stream": "backend", - "value": 8899325195 - }, - { - "format": "json", - "stream": "druide2e", - "value": 5546280 - }, - { - "format": "json", - "stream": "frontend", - "value": 7712739750 - } - ], - "parseable_incoming_requests": [ - { - "endpoint": "", - "method": "GET", - "status": "200", - "value": 610 - }, - { - "endpoint": "", - "method": "GET", - "status": "304", - "value": 859 - }, - { - "endpoint": "", - "method": "GET", - "status": "400", - "value": 12 - }, - { - "endpoint": "", - "method": "HEAD", - "status": "200", - "value": 491 - }, - { - "endpoint": "", - "method": "OPTIONS", - "status": "405", - "value": 3 - }, - { - "endpoint": "", - "method": "POST", - "status": "405", - "value": 13 - }, - { - "endpoint": "*", - "method": "M-SEARCH", - "status": "404", - "value": 2 - }, - { - "endpoint": "/api/v1", - "method": "GET", - "status": "404", - "value": 1 - }, - { - "endpoint": "/api/v1/about", - "method": "GET", - "status": "200", - "value": 70 - }, - { - "endpoint": "/api/v1/ingest", - "method": "POST", - "status": "200", - "value": 6088833 - }, - { - "endpoint": "/api/v1/log-stream", - "method": "GET", - "status": "404", - "value": 1 - }, - { - "endpoint": "/api/v1/logstream", - "method": "GET", - "status": "200", - "value": 77 - }, - { - "endpoint": "/api/v1/logstream//schema", - "method": "GET", - "status": "404", - "value": 3 - }, - { - "endpoint": "/api/v1/metrics", - "method": "GET", - "status": "200", - "value": 64 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "301", - "value": 3 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "400", - "value": 1 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "301", - "value": 19 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "307", - "value": 3 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "400", - "value": 1 - }, - { - "endpoint": "/api/v1/o/logout", - "method": "GET", - "status": "301", - "value": 13 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "200", - "value": 556 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "400", - "value": 37 - }, - { - "endpoint": "/api/v1/role", - "method": "GET", - "status": "200", - "value": 14 - }, - { - "endpoint": "/api/v1/role/default", - "method": "GET", - "status": "200", - "value": 7 - }, - { - "endpoint": "/api/v1/user", - "method": "GET", - "status": "200", - "value": 7 - }, - { - "endpoint": "/api/v1/user//role", - "method": "GET", - "status": "404", - "value": 3 - } - ], - "parseable_local_fs_response_time_bucket": [ - { - "method": "GET", - "status": "200", - "le": "0.005", - "value": 22377 - }, - { - "method": "GET", - "status": "200", - "le": "0.01", - "value": 22403 - }, - { - "method": "GET", - "status": "200", - "le": "0.025", - "value": 22413 - }, - { - "method": "GET", - "status": "200", - "le": "0.05", - "value": 22420 - }, - { - "method": "GET", - "status": "200", - "le": "0.1", - "value": 22423 - }, - { - "method": "GET", - "status": "200", - "le": "0.25", - "value": 22425 - }, - { - "method": "GET", - "status": "200", - "le": "0.5", - "value": 22425 - }, - { - "method": "GET", - "status": "200", - "le": "1", - "value": 22425 - }, - { - "method": "GET", - "status": "200", - "le": "2.5", - "value": 22425 - }, - { - "method": "GET", - "status": "200", - "le": "5", - "value": 22425 - }, - { - "method": "GET", - "status": "200", - "le": "10", - "value": 22425 - }, - { - "method": "GET", - "status": "200", - "le": "+Inf", - "value": 22425 - }, - { - "method": "GET", - "status": "400", - "le": "0.005", - "value": 3 - }, - { - "method": "GET", - "status": "400", - "le": "0.01", - "value": 3 - }, - { - "method": "GET", - "status": "400", - "le": "0.025", - "value": 3 - }, - { - "method": "GET", - "status": "400", - "le": "0.05", - "value": 3 - }, - { - "method": "GET", - "status": "400", - "le": "0.1", - "value": 3 - }, - { - "method": "GET", - "status": "400", - "le": "0.25", - "value": 3 - }, - { - "method": "GET", - "status": "400", - "le": "0.5", - "value": 3 - }, - { - "method": "GET", - "status": "400", - "le": "1", - "value": 3 - }, - { - "method": "GET", - "status": "400", - "le": "2.5", - "value": 3 - }, - { - "method": "GET", - "status": "400", - "le": "5", - "value": 3 - }, - { - "method": "GET", - "status": "400", - "le": "10", - "value": 3 - }, - { - "method": "GET", - "status": "400", - "le": "+Inf", - "value": 3 - }, - { - "method": "PUT", - "status": "200", - "le": "0.005", - "value": 15495 - }, - { - "method": "PUT", - "status": "200", - "le": "0.01", - "value": 15686 - }, - { - "method": "PUT", - "status": "200", - "le": "0.025", - "value": 15697 - }, - { - "method": "PUT", - "status": "200", - "le": "0.05", - "value": 15698 - }, - { - "method": "PUT", - "status": "200", - "le": "0.1", - "value": 15698 - }, - { - "method": "PUT", - "status": "200", - "le": "0.25", - "value": 15698 - }, - { - "method": "PUT", - "status": "200", - "le": "0.5", - "value": 15698 - }, - { - "method": "PUT", - "status": "200", - "le": "1", - "value": 15698 - }, - { - "method": "PUT", - "status": "200", - "le": "2.5", - "value": 15698 - }, - { - "method": "PUT", - "status": "200", - "le": "5", - "value": 15698 - }, - { - "method": "PUT", - "status": "200", - "le": "10", - "value": 15698 - }, - { - "method": "PUT", - "status": "200", - "le": "+Inf", - "value": 15698 - } - ], - "parseable_local_fs_response_time_sum": [ - { - "method": "GET", - "status": "200", - "value": 5 - }, - { - "method": "GET", - "status": "400", - "value": 0 - }, - { - "method": "PUT", - "status": "200", - "value": 13 - } - ], - "parseable_local_fs_response_time_count": [ - { - "method": "GET", - "status": "200", - "value": 22425 - }, - { - "method": "GET", - "status": "400", - "value": 3 - }, - { - "method": "PUT", - "status": "200", - "value": 15698 - } - ], - "parseable_query_execute_time_bucket": [ - { - "stream": "azureapimlog", - "le": "0.005", - "value": 20 - }, - { - "stream": "azureapimlog", - "le": "0.01", - "value": 51 - }, - { - "stream": "azureapimlog", - "le": "0.025", - "value": 77 - }, - { - "stream": "azureapimlog", - "le": "0.05", - "value": 80 - }, - { - "stream": "azureapimlog", - "le": "0.1", - "value": 82 - }, - { - "stream": "azureapimlog", - "le": "0.25", - "value": 82 - }, - { - "stream": "azureapimlog", - "le": "0.5", - "value": 82 - }, - { - "stream": "azureapimlog", - "le": "1", - "value": 82 - }, - { - "stream": "azureapimlog", - "le": "2.5", - "value": 82 - }, - { - "stream": "azureapimlog", - "le": "5", - "value": 82 - }, - { - "stream": "azureapimlog", - "le": "10", - "value": 82 - }, - { - "stream": "azureapimlog", - "le": "+Inf", - "value": 82 - }, - { - "stream": "backend", - "le": "0.005", - "value": 0 - }, - { - "stream": "backend", - "le": "0.01", - "value": 2 - }, - { - "stream": "backend", - "le": "0.025", - "value": 92 - }, - { - "stream": "backend", - "le": "0.05", - "value": 165 - }, - { - "stream": "backend", - "le": "0.1", - "value": 219 - }, - { - "stream": "backend", - "le": "0.25", - "value": 297 - }, - { - "stream": "backend", - "le": "0.5", - "value": 332 - }, - { - "stream": "backend", - "le": "1", - "value": 337 - }, - { - "stream": "backend", - "le": "2.5", - "value": 339 - }, - { - "stream": "backend", - "le": "5", - "value": 339 - }, - { - "stream": "backend", - "le": "10", - "value": 339 - }, - { - "stream": "backend", - "le": "+Inf", - "value": 339 - }, - { - "stream": "druide2e", - "le": "0.005", - "value": 0 - }, - { - "stream": "druide2e", - "le": "0.01", - "value": 11 - }, - { - "stream": "druide2e", - "le": "0.025", - "value": 19 - }, - { - "stream": "druide2e", - "le": "0.05", - "value": 20 - }, - { - "stream": "druide2e", - "le": "0.1", - "value": 20 - }, - { - "stream": "druide2e", - "le": "0.25", - "value": 20 - }, - { - "stream": "druide2e", - "le": "0.5", - "value": 20 - }, - { - "stream": "druide2e", - "le": "1", - "value": 20 - }, - { - "stream": "druide2e", - "le": "2.5", - "value": 20 - }, - { - "stream": "druide2e", - "le": "5", - "value": 20 - }, - { - "stream": "druide2e", - "le": "10", - "value": 20 - }, - { - "stream": "druide2e", - "le": "+Inf", - "value": 20 - }, - { - "stream": "frontend", - "le": "0.005", - "value": 0 - }, - { - "stream": "frontend", - "le": "0.01", - "value": 0 - }, - { - "stream": "frontend", - "le": "0.025", - "value": 17 - }, - { - "stream": "frontend", - "le": "0.05", - "value": 30 - }, - { - "stream": "frontend", - "le": "0.1", - "value": 49 - }, - { - "stream": "frontend", - "le": "0.25", - "value": 86 - }, - { - "stream": "frontend", - "le": "0.5", - "value": 106 - }, - { - "stream": "frontend", - "le": "1", - "value": 107 - }, - { - "stream": "frontend", - "le": "2.5", - "value": 111 - }, - { - "stream": "frontend", - "le": "5", - "value": 115 - }, - { - "stream": "frontend", - "le": "10", - "value": 115 - }, - { - "stream": "frontend", - "le": "+Inf", - "value": 115 - } - ], - "parseable_query_execute_time_sum": [ - { - "stream": "azureapimlog", - "value": 0 - }, - { - "stream": "backend", - "value": 38 - }, - { - "stream": "druide2e", - "value": 0 - }, - { - "stream": "frontend", - "value": 35 - } - ], - "parseable_query_execute_time_count": [ - { - "stream": "azureapimlog", - "value": 82 - }, - { - "stream": "backend", - "value": 339 - }, - { - "stream": "druide2e", - "value": 20 - }, - { - "stream": "frontend", - "value": 115 - } - ], - "parseable_response_code": [ - { - "endpoint": "", - "method": "GET", - "statuscode": "200", - "type": "200", - "value": 610 - }, - { - "endpoint": "", - "method": "GET", - "statuscode": "304", - "type": "300", - "value": 859 - }, - { - "endpoint": "", - "method": "GET", - "statuscode": "400", - "type": "400", - "value": 12 - }, - { - "endpoint": "", - "method": "HEAD", - "statuscode": "200", - "type": "200", - "value": 491 - }, - { - "endpoint": "", - "method": "OPTIONS", - "statuscode": "405", - "type": "400", - "value": 3 - }, - { - "endpoint": "", - "method": "POST", - "statuscode": "405", - "type": "400", - "value": 13 - }, - { - "endpoint": "*", - "method": "M-SEARCH", - "statuscode": "404", - "type": "400", - "value": 2 - }, - { - "endpoint": "/api/v1", - "method": "GET", - "statuscode": "404", - "type": "400", - "value": 1 - }, - { - "endpoint": "/api/v1/about", - "method": "GET", - "statuscode": "200", - "type": "200", - "value": 70 - }, - { - "endpoint": "/api/v1/ingest", - "method": "POST", - "statuscode": "200", - "type": "200", - "value": 6088833 - }, - { - "endpoint": "/api/v1/log-stream", - "method": "GET", - "statuscode": "404", - "type": "400", - "value": 1 - }, - { - "endpoint": "/api/v1/logstream", - "method": "GET", - "statuscode": "200", - "type": "200", - "value": 77 - }, - { - "endpoint": "/api/v1/logstream//schema", - "method": "GET", - "statuscode": "404", - "type": "400", - "value": 3 - }, - { - "endpoint": "/api/v1/metrics", - "method": "GET", - "statuscode": "200", - "type": "200", - "value": 64 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "statuscode": "301", - "type": "300", - "value": 3 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "statuscode": "400", - "type": "400", - "value": 1 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "statuscode": "301", - "type": "300", - "value": 19 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "statuscode": "307", - "type": "300", - "value": 3 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "statuscode": "400", - "type": "400", - "value": 1 - }, - { - "endpoint": "/api/v1/o/logout", - "method": "GET", - "statuscode": "301", - "type": "300", - "value": 13 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "statuscode": "200", - "type": "200", - "value": 556 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "statuscode": "400", - "type": "400", - "value": 37 - }, - { - "endpoint": "/api/v1/role", - "method": "GET", - "statuscode": "200", - "type": "200", - "value": 14 - }, - { - "endpoint": "/api/v1/role/default", - "method": "GET", - "statuscode": "200", - "type": "200", - "value": 7 - }, - { - "endpoint": "/api/v1/user", - "method": "GET", - "statuscode": "200", - "type": "200", - "value": 7 - }, - { - "endpoint": "/api/v1/user//role", - "method": "GET", - "statuscode": "404", - "type": "400", - "value": 3 - } - ], - "parseable_response_time_bucket": [ - { - "endpoint": "", - "method": "GET", - "status": "200", - "le": "0.005", - "value": 488 - }, - { - "endpoint": "", - "method": "GET", - "status": "200", - "le": "0.01", - "value": 517 - }, - { - "endpoint": "", - "method": "GET", - "status": "200", - "le": "0.025", - "value": 554 - }, - { - "endpoint": "", - "method": "GET", - "status": "200", - "le": "0.05", - "value": 580 - }, - { - "endpoint": "", - "method": "GET", - "status": "200", - "le": "0.1", - "value": 598 - }, - { - "endpoint": "", - "method": "GET", - "status": "200", - "le": "0.25", - "value": 607 - }, - { - "endpoint": "", - "method": "GET", - "status": "200", - "le": "0.5", - "value": 609 - }, - { - "endpoint": "", - "method": "GET", - "status": "200", - "le": "1", - "value": 610 - }, - { - "endpoint": "", - "method": "GET", - "status": "200", - "le": "2.5", - "value": 610 - }, - { - "endpoint": "", - "method": "GET", - "status": "200", - "le": "5", - "value": 610 - }, - { - "endpoint": "", - "method": "GET", - "status": "200", - "le": "10", - "value": 610 - }, - { - "endpoint": "", - "method": "GET", - "status": "200", - "le": "+Inf", - "value": 610 - }, - { - "endpoint": "", - "method": "GET", - "status": "304", - "le": "0.005", - "value": 852 - }, - { - "endpoint": "", - "method": "GET", - "status": "304", - "le": "0.01", - "value": 855 - }, - { - "endpoint": "", - "method": "GET", - "status": "304", - "le": "0.025", - "value": 857 - }, - { - "endpoint": "", - "method": "GET", - "status": "304", - "le": "0.05", - "value": 858 - }, - { - "endpoint": "", - "method": "GET", - "status": "304", - "le": "0.1", - "value": 859 - }, - { - "endpoint": "", - "method": "GET", - "status": "304", - "le": "0.25", - "value": 859 - }, - { - "endpoint": "", - "method": "GET", - "status": "304", - "le": "0.5", - "value": 859 - }, - { - "endpoint": "", - "method": "GET", - "status": "304", - "le": "1", - "value": 859 - }, - { - "endpoint": "", - "method": "GET", - "status": "304", - "le": "2.5", - "value": 859 - }, - { - "endpoint": "", - "method": "GET", - "status": "304", - "le": "5", - "value": 859 - }, - { - "endpoint": "", - "method": "GET", - "status": "304", - "le": "10", - "value": 859 - }, - { - "endpoint": "", - "method": "GET", - "status": "304", - "le": "+Inf", - "value": 859 - }, - { - "endpoint": "", - "method": "GET", - "status": "400", - "le": "0.005", - "value": 12 - }, - { - "endpoint": "", - "method": "GET", - "status": "400", - "le": "0.01", - "value": 12 - }, - { - "endpoint": "", - "method": "GET", - "status": "400", - "le": "0.025", - "value": 12 - }, - { - "endpoint": "", - "method": "GET", - "status": "400", - "le": "0.05", - "value": 12 - }, - { - "endpoint": "", - "method": "GET", - "status": "400", - "le": "0.1", - "value": 12 - }, - { - "endpoint": "", - "method": "GET", - "status": "400", - "le": "0.25", - "value": 12 - }, - { - "endpoint": "", - "method": "GET", - "status": "400", - "le": "0.5", - "value": 12 - }, - { - "endpoint": "", - "method": "GET", - "status": "400", - "le": "1", - "value": 12 - }, - { - "endpoint": "", - "method": "GET", - "status": "400", - "le": "2.5", - "value": 12 - }, - { - "endpoint": "", - "method": "GET", - "status": "400", - "le": "5", - "value": 12 - }, - { - "endpoint": "", - "method": "GET", - "status": "400", - "le": "10", - "value": 12 - }, - { - "endpoint": "", - "method": "GET", - "status": "400", - "le": "+Inf", - "value": 12 - }, - { - "endpoint": "", - "method": "HEAD", - "status": "200", - "le": "0.005", - "value": 491 - }, - { - "endpoint": "", - "method": "HEAD", - "status": "200", - "le": "0.01", - "value": 491 - }, - { - "endpoint": "", - "method": "HEAD", - "status": "200", - "le": "0.025", - "value": 491 - }, - { - "endpoint": "", - "method": "HEAD", - "status": "200", - "le": "0.05", - "value": 491 - }, - { - "endpoint": "", - "method": "HEAD", - "status": "200", - "le": "0.1", - "value": 491 - }, - { - "endpoint": "", - "method": "HEAD", - "status": "200", - "le": "0.25", - "value": 491 - }, - { - "endpoint": "", - "method": "HEAD", - "status": "200", - "le": "0.5", - "value": 491 - }, - { - "endpoint": "", - "method": "HEAD", - "status": "200", - "le": "1", - "value": 491 - }, - { - "endpoint": "", - "method": "HEAD", - "status": "200", - "le": "2.5", - "value": 491 - }, - { - "endpoint": "", - "method": "HEAD", - "status": "200", - "le": "5", - "value": 491 - }, - { - "endpoint": "", - "method": "HEAD", - "status": "200", - "le": "10", - "value": 491 - }, - { - "endpoint": "", - "method": "HEAD", - "status": "200", - "le": "+Inf", - "value": 491 - }, - { - "endpoint": "", - "method": "OPTIONS", - "status": "405", - "le": "0.005", - "value": 3 - }, - { - "endpoint": "", - "method": "OPTIONS", - "status": "405", - "le": "0.01", - "value": 3 - }, - { - "endpoint": "", - "method": "OPTIONS", - "status": "405", - "le": "0.025", - "value": 3 - }, - { - "endpoint": "", - "method": "OPTIONS", - "status": "405", - "le": "0.05", - "value": 3 - }, - { - "endpoint": "", - "method": "OPTIONS", - "status": "405", - "le": "0.1", - "value": 3 - }, - { - "endpoint": "", - "method": "OPTIONS", - "status": "405", - "le": "0.25", - "value": 3 - }, - { - "endpoint": "", - "method": "OPTIONS", - "status": "405", - "le": "0.5", - "value": 3 - }, - { - "endpoint": "", - "method": "OPTIONS", - "status": "405", - "le": "1", - "value": 3 - }, - { - "endpoint": "", - "method": "OPTIONS", - "status": "405", - "le": "2.5", - "value": 3 - }, - { - "endpoint": "", - "method": "OPTIONS", - "status": "405", - "le": "5", - "value": 3 - }, - { - "endpoint": "", - "method": "OPTIONS", - "status": "405", - "le": "10", - "value": 3 - }, - { - "endpoint": "", - "method": "OPTIONS", - "status": "405", - "le": "+Inf", - "value": 3 - }, - { - "endpoint": "", - "method": "POST", - "status": "405", - "le": "0.005", - "value": 13 - }, - { - "endpoint": "", - "method": "POST", - "status": "405", - "le": "0.01", - "value": 13 - }, - { - "endpoint": "", - "method": "POST", - "status": "405", - "le": "0.025", - "value": 13 - }, - { - "endpoint": "", - "method": "POST", - "status": "405", - "le": "0.05", - "value": 13 - }, - { - "endpoint": "", - "method": "POST", - "status": "405", - "le": "0.1", - "value": 13 - }, - { - "endpoint": "", - "method": "POST", - "status": "405", - "le": "0.25", - "value": 13 - }, - { - "endpoint": "", - "method": "POST", - "status": "405", - "le": "0.5", - "value": 13 - }, - { - "endpoint": "", - "method": "POST", - "status": "405", - "le": "1", - "value": 13 - }, - { - "endpoint": "", - "method": "POST", - "status": "405", - "le": "2.5", - "value": 13 - }, - { - "endpoint": "", - "method": "POST", - "status": "405", - "le": "5", - "value": 13 - }, - { - "endpoint": "", - "method": "POST", - "status": "405", - "le": "10", - "value": 13 - }, - { - "endpoint": "", - "method": "POST", - "status": "405", - "le": "+Inf", - "value": 13 - }, - { - "endpoint": "*", - "method": "M-SEARCH", - "status": "404", - "le": "0.005", - "value": 2 - }, - { - "endpoint": "*", - "method": "M-SEARCH", - "status": "404", - "le": "0.01", - "value": 2 - }, - { - "endpoint": "*", - "method": "M-SEARCH", - "status": "404", - "le": "0.025", - "value": 2 - }, - { - "endpoint": "*", - "method": "M-SEARCH", - "status": "404", - "le": "0.05", - "value": 2 - }, - { - "endpoint": "*", - "method": "M-SEARCH", - "status": "404", - "le": "0.1", - "value": 2 - }, - { - "endpoint": "*", - "method": "M-SEARCH", - "status": "404", - "le": "0.25", - "value": 2 - }, - { - "endpoint": "*", - "method": "M-SEARCH", - "status": "404", - "le": "0.5", - "value": 2 - }, - { - "endpoint": "*", - "method": "M-SEARCH", - "status": "404", - "le": "1", - "value": 2 - }, - { - "endpoint": "*", - "method": "M-SEARCH", - "status": "404", - "le": "2.5", - "value": 2 - }, - { - "endpoint": "*", - "method": "M-SEARCH", - "status": "404", - "le": "5", - "value": 2 - }, - { - "endpoint": "*", - "method": "M-SEARCH", - "status": "404", - "le": "10", - "value": 2 - }, - { - "endpoint": "*", - "method": "M-SEARCH", - "status": "404", - "le": "+Inf", - "value": 2 - }, - { - "endpoint": "/api/v1", - "method": "GET", - "status": "404", - "le": "0.005", - "value": 1 - }, - { - "endpoint": "/api/v1", - "method": "GET", - "status": "404", - "le": "0.01", - "value": 1 - }, - { - "endpoint": "/api/v1", - "method": "GET", - "status": "404", - "le": "0.025", - "value": 1 - }, - { - "endpoint": "/api/v1", - "method": "GET", - "status": "404", - "le": "0.05", - "value": 1 - }, - { - "endpoint": "/api/v1", - "method": "GET", - "status": "404", - "le": "0.1", - "value": 1 - }, - { - "endpoint": "/api/v1", - "method": "GET", - "status": "404", - "le": "0.25", - "value": 1 - }, - { - "endpoint": "/api/v1", - "method": "GET", - "status": "404", - "le": "0.5", - "value": 1 - }, - { - "endpoint": "/api/v1", - "method": "GET", - "status": "404", - "le": "1", - "value": 1 - }, - { - "endpoint": "/api/v1", - "method": "GET", - "status": "404", - "le": "2.5", - "value": 1 - }, - { - "endpoint": "/api/v1", - "method": "GET", - "status": "404", - "le": "5", - "value": 1 - }, - { - "endpoint": "/api/v1", - "method": "GET", - "status": "404", - "le": "10", - "value": 1 - }, - { - "endpoint": "/api/v1", - "method": "GET", - "status": "404", - "le": "+Inf", - "value": 1 - }, - { - "endpoint": "/api/v1/about", - "method": "GET", - "status": "200", - "le": "0.005", - "value": 0 - }, - { - "endpoint": "/api/v1/about", - "method": "GET", - "status": "200", - "le": "0.01", - "value": 0 - }, - { - "endpoint": "/api/v1/about", - "method": "GET", - "status": "200", - "le": "0.025", - "value": 0 - }, - { - "endpoint": "/api/v1/about", - "method": "GET", - "status": "200", - "le": "0.05", - "value": 0 - }, - { - "endpoint": "/api/v1/about", - "method": "GET", - "status": "200", - "le": "0.1", - "value": 0 - }, - { - "endpoint": "/api/v1/about", - "method": "GET", - "status": "200", - "le": "0.25", - "value": 0 - }, - { - "endpoint": "/api/v1/about", - "method": "GET", - "status": "200", - "le": "0.5", - "value": 0 - }, - { - "endpoint": "/api/v1/about", - "method": "GET", - "status": "200", - "le": "1", - "value": 66 - }, - { - "endpoint": "/api/v1/about", - "method": "GET", - "status": "200", - "le": "2.5", - "value": 70 - }, - { - "endpoint": "/api/v1/about", - "method": "GET", - "status": "200", - "le": "5", - "value": 70 - }, - { - "endpoint": "/api/v1/about", - "method": "GET", - "status": "200", - "le": "10", - "value": 70 - }, - { - "endpoint": "/api/v1/about", - "method": "GET", - "status": "200", - "le": "+Inf", - "value": 70 - }, - { - "endpoint": "/api/v1/ingest", - "method": "POST", - "status": "200", - "le": "0.005", - "value": 6087344 - }, - { - "endpoint": "/api/v1/ingest", - "method": "POST", - "status": "200", - "le": "0.01", - "value": 6088376 - }, - { - "endpoint": "/api/v1/ingest", - "method": "POST", - "status": "200", - "le": "0.025", - "value": 6088679 - }, - { - "endpoint": "/api/v1/ingest", - "method": "POST", - "status": "200", - "le": "0.05", - "value": 6088777 - }, - { - "endpoint": "/api/v1/ingest", - "method": "POST", - "status": "200", - "le": "0.1", - "value": 6088813 - }, - { - "endpoint": "/api/v1/ingest", - "method": "POST", - "status": "200", - "le": "0.25", - "value": 6088830 - }, - { - "endpoint": "/api/v1/ingest", - "method": "POST", - "status": "200", - "le": "0.5", - "value": 6088833 - }, - { - "endpoint": "/api/v1/ingest", - "method": "POST", - "status": "200", - "le": "1", - "value": 6088833 - }, - { - "endpoint": "/api/v1/ingest", - "method": "POST", - "status": "200", - "le": "2.5", - "value": 6088833 - }, - { - "endpoint": "/api/v1/ingest", - "method": "POST", - "status": "200", - "le": "5", - "value": 6088833 - }, - { - "endpoint": "/api/v1/ingest", - "method": "POST", - "status": "200", - "le": "10", - "value": 6088833 - }, - { - "endpoint": "/api/v1/ingest", - "method": "POST", - "status": "200", - "le": "+Inf", - "value": 6088833 - }, - { - "endpoint": "/api/v1/log-stream", - "method": "GET", - "status": "404", - "le": "0.005", - "value": 1 - }, - { - "endpoint": "/api/v1/log-stream", - "method": "GET", - "status": "404", - "le": "0.01", - "value": 1 - }, - { - "endpoint": "/api/v1/log-stream", - "method": "GET", - "status": "404", - "le": "0.025", - "value": 1 - }, - { - "endpoint": "/api/v1/log-stream", - "method": "GET", - "status": "404", - "le": "0.05", - "value": 1 - }, - { - "endpoint": "/api/v1/log-stream", - "method": "GET", - "status": "404", - "le": "0.1", - "value": 1 - }, - { - "endpoint": "/api/v1/log-stream", - "method": "GET", - "status": "404", - "le": "0.25", - "value": 1 - }, - { - "endpoint": "/api/v1/log-stream", - "method": "GET", - "status": "404", - "le": "0.5", - "value": 1 - }, - { - "endpoint": "/api/v1/log-stream", - "method": "GET", - "status": "404", - "le": "1", - "value": 1 - }, - { - "endpoint": "/api/v1/log-stream", - "method": "GET", - "status": "404", - "le": "2.5", - "value": 1 - }, - { - "endpoint": "/api/v1/log-stream", - "method": "GET", - "status": "404", - "le": "5", - "value": 1 - }, - { - "endpoint": "/api/v1/log-stream", - "method": "GET", - "status": "404", - "le": "10", - "value": 1 - }, - { - "endpoint": "/api/v1/log-stream", - "method": "GET", - "status": "404", - "le": "+Inf", - "value": 1 - }, - { - "endpoint": "/api/v1/logstream", - "method": "GET", - "status": "200", - "le": "0.005", - "value": 24 - }, - { - "endpoint": "/api/v1/logstream", - "method": "GET", - "status": "200", - "le": "0.01", - "value": 66 - }, - { - "endpoint": "/api/v1/logstream", - "method": "GET", - "status": "200", - "le": "0.025", - "value": 77 - }, - { - "endpoint": "/api/v1/logstream", - "method": "GET", - "status": "200", - "le": "0.05", - "value": 77 - }, - { - "endpoint": "/api/v1/logstream", - "method": "GET", - "status": "200", - "le": "0.1", - "value": 77 - }, - { - "endpoint": "/api/v1/logstream", - "method": "GET", - "status": "200", - "le": "0.25", - "value": 77 - }, - { - "endpoint": "/api/v1/logstream", - "method": "GET", - "status": "200", - "le": "0.5", - "value": 77 - }, - { - "endpoint": "/api/v1/logstream", - "method": "GET", - "status": "200", - "le": "1", - "value": 77 - }, - { - "endpoint": "/api/v1/logstream", - "method": "GET", - "status": "200", - "le": "2.5", - "value": 77 - }, - { - "endpoint": "/api/v1/logstream", - "method": "GET", - "status": "200", - "le": "5", - "value": 77 - }, - { - "endpoint": "/api/v1/logstream", - "method": "GET", - "status": "200", - "le": "10", - "value": 77 - }, - { - "endpoint": "/api/v1/logstream", - "method": "GET", - "status": "200", - "le": "+Inf", - "value": 77 - }, - { - "endpoint": "/api/v1/logstream//schema", - "method": "GET", - "status": "404", - "le": "0.005", - "value": 3 - }, - { - "endpoint": "/api/v1/logstream//schema", - "method": "GET", - "status": "404", - "le": "0.01", - "value": 3 - }, - { - "endpoint": "/api/v1/logstream//schema", - "method": "GET", - "status": "404", - "le": "0.025", - "value": 3 - }, - { - "endpoint": "/api/v1/logstream//schema", - "method": "GET", - "status": "404", - "le": "0.05", - "value": 3 - }, - { - "endpoint": "/api/v1/logstream//schema", - "method": "GET", - "status": "404", - "le": "0.1", - "value": 3 - }, - { - "endpoint": "/api/v1/logstream//schema", - "method": "GET", - "status": "404", - "le": "0.25", - "value": 3 - }, - { - "endpoint": "/api/v1/logstream//schema", - "method": "GET", - "status": "404", - "le": "0.5", - "value": 3 - }, - { - "endpoint": "/api/v1/logstream//schema", - "method": "GET", - "status": "404", - "le": "1", - "value": 3 - }, - { - "endpoint": "/api/v1/logstream//schema", - "method": "GET", - "status": "404", - "le": "2.5", - "value": 3 - }, - { - "endpoint": "/api/v1/logstream//schema", - "method": "GET", - "status": "404", - "le": "5", - "value": 3 - }, - { - "endpoint": "/api/v1/logstream//schema", - "method": "GET", - "status": "404", - "le": "10", - "value": 3 - }, - { - "endpoint": "/api/v1/logstream//schema", - "method": "GET", - "status": "404", - "le": "+Inf", - "value": 3 - }, - { - "endpoint": "/api/v1/metrics", - "method": "GET", - "status": "200", - "le": "0.005", - "value": 60 - }, - { - "endpoint": "/api/v1/metrics", - "method": "GET", - "status": "200", - "le": "0.01", - "value": 64 - }, - { - "endpoint": "/api/v1/metrics", - "method": "GET", - "status": "200", - "le": "0.025", - "value": 64 - }, - { - "endpoint": "/api/v1/metrics", - "method": "GET", - "status": "200", - "le": "0.05", - "value": 64 - }, - { - "endpoint": "/api/v1/metrics", - "method": "GET", - "status": "200", - "le": "0.1", - "value": 64 - }, - { - "endpoint": "/api/v1/metrics", - "method": "GET", - "status": "200", - "le": "0.25", - "value": 64 - }, - { - "endpoint": "/api/v1/metrics", - "method": "GET", - "status": "200", - "le": "0.5", - "value": 64 - }, - { - "endpoint": "/api/v1/metrics", - "method": "GET", - "status": "200", - "le": "1", - "value": 64 - }, - { - "endpoint": "/api/v1/metrics", - "method": "GET", - "status": "200", - "le": "2.5", - "value": 64 - }, - { - "endpoint": "/api/v1/metrics", - "method": "GET", - "status": "200", - "le": "5", - "value": 64 - }, - { - "endpoint": "/api/v1/metrics", - "method": "GET", - "status": "200", - "le": "10", - "value": 64 - }, - { - "endpoint": "/api/v1/metrics", - "method": "GET", - "status": "200", - "le": "+Inf", - "value": 64 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "301", - "le": "0.005", - "value": 0 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "301", - "le": "0.01", - "value": 0 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "301", - "le": "0.025", - "value": 0 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "301", - "le": "0.05", - "value": 0 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "301", - "le": "0.1", - "value": 0 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "301", - "le": "0.25", - "value": 0 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "301", - "le": "0.5", - "value": 3 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "301", - "le": "1", - "value": 3 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "301", - "le": "2.5", - "value": 3 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "301", - "le": "5", - "value": 3 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "301", - "le": "10", - "value": 3 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "301", - "le": "+Inf", - "value": 3 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "400", - "le": "0.005", - "value": 1 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "400", - "le": "0.01", - "value": 1 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "400", - "le": "0.025", - "value": 1 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "400", - "le": "0.05", - "value": 1 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "400", - "le": "0.1", - "value": 1 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "400", - "le": "0.25", - "value": 1 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "400", - "le": "0.5", - "value": 1 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "400", - "le": "1", - "value": 1 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "400", - "le": "2.5", - "value": 1 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "400", - "le": "5", - "value": 1 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "400", - "le": "10", - "value": 1 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "400", - "le": "+Inf", - "value": 1 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "301", - "le": "0.005", - "value": 0 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "301", - "le": "0.01", - "value": 0 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "301", - "le": "0.025", - "value": 0 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "301", - "le": "0.05", - "value": 10 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "301", - "le": "0.1", - "value": 19 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "301", - "le": "0.25", - "value": 19 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "301", - "le": "0.5", - "value": 19 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "301", - "le": "1", - "value": 19 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "301", - "le": "2.5", - "value": 19 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "301", - "le": "5", - "value": 19 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "301", - "le": "10", - "value": 19 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "301", - "le": "+Inf", - "value": 19 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "307", - "le": "0.005", - "value": 3 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "307", - "le": "0.01", - "value": 3 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "307", - "le": "0.025", - "value": 3 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "307", - "le": "0.05", - "value": 3 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "307", - "le": "0.1", - "value": 3 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "307", - "le": "0.25", - "value": 3 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "307", - "le": "0.5", - "value": 3 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "307", - "le": "1", - "value": 3 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "307", - "le": "2.5", - "value": 3 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "307", - "le": "5", - "value": 3 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "307", - "le": "10", - "value": 3 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "307", - "le": "+Inf", - "value": 3 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "400", - "le": "0.005", - "value": 0 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "400", - "le": "0.01", - "value": 0 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "400", - "le": "0.025", - "value": 0 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "400", - "le": "0.05", - "value": 1 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "400", - "le": "0.1", - "value": 1 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "400", - "le": "0.25", - "value": 1 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "400", - "le": "0.5", - "value": 1 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "400", - "le": "1", - "value": 1 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "400", - "le": "2.5", - "value": 1 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "400", - "le": "5", - "value": 1 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "400", - "le": "10", - "value": 1 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "400", - "le": "+Inf", - "value": 1 - }, - { - "endpoint": "/api/v1/o/logout", - "method": "GET", - "status": "301", - "le": "0.005", - "value": 13 - }, - { - "endpoint": "/api/v1/o/logout", - "method": "GET", - "status": "301", - "le": "0.01", - "value": 13 - }, - { - "endpoint": "/api/v1/o/logout", - "method": "GET", - "status": "301", - "le": "0.025", - "value": 13 - }, - { - "endpoint": "/api/v1/o/logout", - "method": "GET", - "status": "301", - "le": "0.05", - "value": 13 - }, - { - "endpoint": "/api/v1/o/logout", - "method": "GET", - "status": "301", - "le": "0.1", - "value": 13 - }, - { - "endpoint": "/api/v1/o/logout", - "method": "GET", - "status": "301", - "le": "0.25", - "value": 13 - }, - { - "endpoint": "/api/v1/o/logout", - "method": "GET", - "status": "301", - "le": "0.5", - "value": 13 - }, - { - "endpoint": "/api/v1/o/logout", - "method": "GET", - "status": "301", - "le": "1", - "value": 13 - }, - { - "endpoint": "/api/v1/o/logout", - "method": "GET", - "status": "301", - "le": "2.5", - "value": 13 - }, - { - "endpoint": "/api/v1/o/logout", - "method": "GET", - "status": "301", - "le": "5", - "value": 13 - }, - { - "endpoint": "/api/v1/o/logout", - "method": "GET", - "status": "301", - "le": "10", - "value": 13 - }, - { - "endpoint": "/api/v1/o/logout", - "method": "GET", - "status": "301", - "le": "+Inf", - "value": 13 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "200", - "le": "0.005", - "value": 1 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "200", - "le": "0.01", - "value": 9 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "200", - "le": "0.025", - "value": 116 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "200", - "le": "0.05", - "value": 221 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "200", - "le": "0.1", - "value": 297 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "200", - "le": "0.25", - "value": 395 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "200", - "le": "0.5", - "value": 520 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "200", - "le": "1", - "value": 544 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "200", - "le": "2.5", - "value": 552 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "200", - "le": "5", - "value": 556 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "200", - "le": "10", - "value": 556 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "200", - "le": "+Inf", - "value": 556 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "400", - "le": "0.005", - "value": 35 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "400", - "le": "0.01", - "value": 35 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "400", - "le": "0.025", - "value": 36 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "400", - "le": "0.05", - "value": 37 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "400", - "le": "0.1", - "value": 37 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "400", - "le": "0.25", - "value": 37 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "400", - "le": "0.5", - "value": 37 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "400", - "le": "1", - "value": 37 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "400", - "le": "2.5", - "value": 37 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "400", - "le": "5", - "value": 37 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "400", - "le": "10", - "value": 37 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "400", - "le": "+Inf", - "value": 37 - }, - { - "endpoint": "/api/v1/role", - "method": "GET", - "status": "200", - "le": "0.005", - "value": 14 - }, - { - "endpoint": "/api/v1/role", - "method": "GET", - "status": "200", - "le": "0.01", - "value": 14 - }, - { - "endpoint": "/api/v1/role", - "method": "GET", - "status": "200", - "le": "0.025", - "value": 14 - }, - { - "endpoint": "/api/v1/role", - "method": "GET", - "status": "200", - "le": "0.05", - "value": 14 - }, - { - "endpoint": "/api/v1/role", - "method": "GET", - "status": "200", - "le": "0.1", - "value": 14 - }, - { - "endpoint": "/api/v1/role", - "method": "GET", - "status": "200", - "le": "0.25", - "value": 14 - }, - { - "endpoint": "/api/v1/role", - "method": "GET", - "status": "200", - "le": "0.5", - "value": 14 - }, - { - "endpoint": "/api/v1/role", - "method": "GET", - "status": "200", - "le": "1", - "value": 14 - }, - { - "endpoint": "/api/v1/role", - "method": "GET", - "status": "200", - "le": "2.5", - "value": 14 - }, - { - "endpoint": "/api/v1/role", - "method": "GET", - "status": "200", - "le": "5", - "value": 14 - }, - { - "endpoint": "/api/v1/role", - "method": "GET", - "status": "200", - "le": "10", - "value": 14 - }, - { - "endpoint": "/api/v1/role", - "method": "GET", - "status": "200", - "le": "+Inf", - "value": 14 - }, - { - "endpoint": "/api/v1/role/default", - "method": "GET", - "status": "200", - "le": "0.005", - "value": 7 - }, - { - "endpoint": "/api/v1/role/default", - "method": "GET", - "status": "200", - "le": "0.01", - "value": 7 - }, - { - "endpoint": "/api/v1/role/default", - "method": "GET", - "status": "200", - "le": "0.025", - "value": 7 - }, - { - "endpoint": "/api/v1/role/default", - "method": "GET", - "status": "200", - "le": "0.05", - "value": 7 - }, - { - "endpoint": "/api/v1/role/default", - "method": "GET", - "status": "200", - "le": "0.1", - "value": 7 - }, - { - "endpoint": "/api/v1/role/default", - "method": "GET", - "status": "200", - "le": "0.25", - "value": 7 - }, - { - "endpoint": "/api/v1/role/default", - "method": "GET", - "status": "200", - "le": "0.5", - "value": 7 - }, - { - "endpoint": "/api/v1/role/default", - "method": "GET", - "status": "200", - "le": "1", - "value": 7 - }, - { - "endpoint": "/api/v1/role/default", - "method": "GET", - "status": "200", - "le": "2.5", - "value": 7 - }, - { - "endpoint": "/api/v1/role/default", - "method": "GET", - "status": "200", - "le": "5", - "value": 7 - }, - { - "endpoint": "/api/v1/role/default", - "method": "GET", - "status": "200", - "le": "10", - "value": 7 - }, - { - "endpoint": "/api/v1/role/default", - "method": "GET", - "status": "200", - "le": "+Inf", - "value": 7 - }, - { - "endpoint": "/api/v1/user", - "method": "GET", - "status": "200", - "le": "0.005", - "value": 7 - }, - { - "endpoint": "/api/v1/user", - "method": "GET", - "status": "200", - "le": "0.01", - "value": 7 - }, - { - "endpoint": "/api/v1/user", - "method": "GET", - "status": "200", - "le": "0.025", - "value": 7 - }, - { - "endpoint": "/api/v1/user", - "method": "GET", - "status": "200", - "le": "0.05", - "value": 7 - }, - { - "endpoint": "/api/v1/user", - "method": "GET", - "status": "200", - "le": "0.1", - "value": 7 - }, - { - "endpoint": "/api/v1/user", - "method": "GET", - "status": "200", - "le": "0.25", - "value": 7 - }, - { - "endpoint": "/api/v1/user", - "method": "GET", - "status": "200", - "le": "0.5", - "value": 7 - }, - { - "endpoint": "/api/v1/user", - "method": "GET", - "status": "200", - "le": "1", - "value": 7 - }, - { - "endpoint": "/api/v1/user", - "method": "GET", - "status": "200", - "le": "2.5", - "value": 7 - }, - { - "endpoint": "/api/v1/user", - "method": "GET", - "status": "200", - "le": "5", - "value": 7 - }, - { - "endpoint": "/api/v1/user", - "method": "GET", - "status": "200", - "le": "10", - "value": 7 - }, - { - "endpoint": "/api/v1/user", - "method": "GET", - "status": "200", - "le": "+Inf", - "value": 7 - }, - { - "endpoint": "/api/v1/user//role", - "method": "GET", - "status": "404", - "le": "0.005", - "value": 3 - }, - { - "endpoint": "/api/v1/user//role", - "method": "GET", - "status": "404", - "le": "0.01", - "value": 3 - }, - { - "endpoint": "/api/v1/user//role", - "method": "GET", - "status": "404", - "le": "0.025", - "value": 3 - }, - { - "endpoint": "/api/v1/user//role", - "method": "GET", - "status": "404", - "le": "0.05", - "value": 3 - }, - { - "endpoint": "/api/v1/user//role", - "method": "GET", - "status": "404", - "le": "0.1", - "value": 3 - }, - { - "endpoint": "/api/v1/user//role", - "method": "GET", - "status": "404", - "le": "0.25", - "value": 3 - }, - { - "endpoint": "/api/v1/user//role", - "method": "GET", - "status": "404", - "le": "0.5", - "value": 3 - }, - { - "endpoint": "/api/v1/user//role", - "method": "GET", - "status": "404", - "le": "1", - "value": 3 - }, - { - "endpoint": "/api/v1/user//role", - "method": "GET", - "status": "404", - "le": "2.5", - "value": 3 - }, - { - "endpoint": "/api/v1/user//role", - "method": "GET", - "status": "404", - "le": "5", - "value": 3 - }, - { - "endpoint": "/api/v1/user//role", - "method": "GET", - "status": "404", - "le": "10", - "value": 3 - }, - { - "endpoint": "/api/v1/user//role", - "method": "GET", - "status": "404", - "le": "+Inf", - "value": 3 - } - ], - "parseable_response_time_sum": [ - { - "endpoint": "", - "method": "GET", - "status": "200", - "value": 5 - }, - { - "endpoint": "", - "method": "GET", - "status": "304", - "value": 0 - }, - { - "endpoint": "", - "method": "GET", - "status": "400", - "value": 0 - }, - { - "endpoint": "", - "method": "HEAD", - "status": "200", - "value": 0 - }, - { - "endpoint": "", - "method": "OPTIONS", - "status": "405", - "value": 0 - }, - { - "endpoint": "", - "method": "POST", - "status": "405", - "value": 0 - }, - { - "endpoint": "*", - "method": "M-SEARCH", - "status": "404", - "value": 0 - }, - { - "endpoint": "/api/v1", - "method": "GET", - "status": "404", - "value": 0 - }, - { - "endpoint": "/api/v1/about", - "method": "GET", - "status": "200", - "value": 56 - }, - { - "endpoint": "/api/v1/ingest", - "method": "POST", - "status": "200", - "value": 1548 - }, - { - "endpoint": "/api/v1/log-stream", - "method": "GET", - "status": "404", - "value": 0 - }, - { - "endpoint": "/api/v1/logstream", - "method": "GET", - "status": "200", - "value": 0 - }, - { - "endpoint": "/api/v1/logstream//schema", - "method": "GET", - "status": "404", - "value": 0 - }, - { - "endpoint": "/api/v1/metrics", - "method": "GET", - "status": "200", - "value": 0 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "301", - "value": 0 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "400", - "value": 0 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "301", - "value": 0 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "307", - "value": 0 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "400", - "value": 0 - }, - { - "endpoint": "/api/v1/o/logout", - "method": "GET", - "status": "301", - "value": 0 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "200", - "value": 114 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "400", - "value": 0 - }, - { - "endpoint": "/api/v1/role", - "method": "GET", - "status": "200", - "value": 0 - }, - { - "endpoint": "/api/v1/role/default", - "method": "GET", - "status": "200", - "value": 0 - }, - { - "endpoint": "/api/v1/user", - "method": "GET", - "status": "200", - "value": 0 - }, - { - "endpoint": "/api/v1/user//role", - "method": "GET", - "status": "404", - "value": 0 - } - ], - "parseable_response_time_count": [ - { - "endpoint": "", - "method": "GET", - "status": "200", - "value": 610 - }, - { - "endpoint": "", - "method": "GET", - "status": "304", - "value": 859 - }, - { - "endpoint": "", - "method": "GET", - "status": "400", - "value": 12 - }, - { - "endpoint": "", - "method": "HEAD", - "status": "200", - "value": 491 - }, - { - "endpoint": "", - "method": "OPTIONS", - "status": "405", - "value": 3 - }, - { - "endpoint": "", - "method": "POST", - "status": "405", - "value": 13 - }, - { - "endpoint": "*", - "method": "M-SEARCH", - "status": "404", - "value": 2 - }, - { - "endpoint": "/api/v1", - "method": "GET", - "status": "404", - "value": 1 - }, - { - "endpoint": "/api/v1/about", - "method": "GET", - "status": "200", - "value": 70 - }, - { - "endpoint": "/api/v1/ingest", - "method": "POST", - "status": "200", - "value": 6088833 - }, - { - "endpoint": "/api/v1/log-stream", - "method": "GET", - "status": "404", - "value": 1 - }, - { - "endpoint": "/api/v1/logstream", - "method": "GET", - "status": "200", - "value": 77 - }, - { - "endpoint": "/api/v1/logstream//schema", - "method": "GET", - "status": "404", - "value": 3 - }, - { - "endpoint": "/api/v1/metrics", - "method": "GET", - "status": "200", - "value": 64 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "301", - "value": 3 - }, - { - "endpoint": "/api/v1/o/code", - "method": "GET", - "status": "400", - "value": 1 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "301", - "value": 19 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "307", - "value": 3 - }, - { - "endpoint": "/api/v1/o/login", - "method": "GET", - "status": "400", - "value": 1 - }, - { - "endpoint": "/api/v1/o/logout", - "method": "GET", - "status": "301", - "value": 13 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "200", - "value": 556 - }, - { - "endpoint": "/api/v1/query", - "method": "POST", - "status": "400", - "value": 37 - }, - { - "endpoint": "/api/v1/role", - "method": "GET", - "status": "200", - "value": 14 - }, - { - "endpoint": "/api/v1/role/default", - "method": "GET", - "status": "200", - "value": 7 - }, - { - "endpoint": "/api/v1/user", - "method": "GET", - "status": "200", - "value": 7 - }, - { - "endpoint": "/api/v1/user//role", - "method": "GET", - "status": "404", - "value": 3 - } - ], - "parseable_staging_files": [ - { - "stream": "azureapimlog", - "value": 0 - }, - { - "stream": "backend", - "value": 1 - }, - { - "stream": "druide2e", - "value": 0 - }, - { - "stream": "frontend", - "value": 1 - } - ], - "parseable_storage_size": [ - { - "format": "arrows", - "stream": "azureapimlog", - "type": "staging", - "value": 278360 - }, - { - "format": "arrows", - "stream": "backend", - "type": "staging", - "value": 3710463112 - }, - { - "format": "arrows", - "stream": "frontend", - "type": "staging", - "value": 3349968344 - }, - { - "format": "parquet", - "stream": "azureapimlog", - "type": "data", - "value": 1628492 - }, - { - "format": "parquet", - "stream": "backend", - "type": "data", - "value": 1061537471 - }, - { - "format": "parquet", - "stream": "druide2e", - "type": "data", - "value": 3421013 - }, - { - "format": "parquet", - "stream": "frontend", - "type": "data", - "value": 1042412371 - } - ], - "process_cpu_seconds_total": 3794, - "process_max_fds": 1048576, - "process_open_fds": 267, - "process_resident_memory_bytes": 236376064, - "process_start_time_seconds": 1709565826, - "process_threads": 7, - "process_virtual_memory_bytes": 692588544 -} + parseable_events_ingested: [ + { + format: 'json', + stream: 'azureapimlog', + value: 132, + }, + { + format: 'json', + stream: 'backend', + value: 27078249, + }, + { + format: 'json', + stream: 'druide2e', + value: 9416, + }, + { + format: 'json', + stream: 'frontend', + value: 27306182, + }, + ], + parseable_events_ingested_size: [ + { + format: 'json', + stream: 'azureapimlog', + value: 287478, + }, + { + format: 'json', + stream: 'backend', + value: 8899325195, + }, + { + format: 'json', + stream: 'druide2e', + value: 5546280, + }, + { + format: 'json', + stream: 'frontend', + value: 7712739750, + }, + ], + parseable_incoming_requests: [ + { + endpoint: '', + method: 'GET', + status: '200', + value: 610, + }, + { + endpoint: '', + method: 'GET', + status: '304', + value: 859, + }, + { + endpoint: '', + method: 'GET', + status: '400', + value: 12, + }, + { + endpoint: '', + method: 'HEAD', + status: '200', + value: 491, + }, + { + endpoint: '', + method: 'OPTIONS', + status: '405', + value: 3, + }, + { + endpoint: '', + method: 'POST', + status: '405', + value: 13, + }, + { + endpoint: '*', + method: 'M-SEARCH', + status: '404', + value: 2, + }, + { + endpoint: '/api/v1', + method: 'GET', + status: '404', + value: 1, + }, + { + endpoint: '/api/v1/about', + method: 'GET', + status: '200', + value: 70, + }, + { + endpoint: '/api/v1/ingest', + method: 'POST', + status: '200', + value: 6088833, + }, + { + endpoint: '/api/v1/log-stream', + method: 'GET', + status: '404', + value: 1, + }, + { + endpoint: '/api/v1/logstream', + method: 'GET', + status: '200', + value: 77, + }, + { + endpoint: '/api/v1/logstream//schema', + method: 'GET', + status: '404', + value: 3, + }, + { + endpoint: '/api/v1/metrics', + method: 'GET', + status: '200', + value: 64, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '301', + value: 3, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '400', + value: 1, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '301', + value: 19, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '307', + value: 3, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '400', + value: 1, + }, + { + endpoint: '/api/v1/o/logout', + method: 'GET', + status: '301', + value: 13, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '200', + value: 556, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '400', + value: 37, + }, + { + endpoint: '/api/v1/role', + method: 'GET', + status: '200', + value: 14, + }, + { + endpoint: '/api/v1/role/default', + method: 'GET', + status: '200', + value: 7, + }, + { + endpoint: '/api/v1/user', + method: 'GET', + status: '200', + value: 7, + }, + { + endpoint: '/api/v1/user//role', + method: 'GET', + status: '404', + value: 3, + }, + ], + parseable_local_fs_response_time_bucket: [ + { + method: 'GET', + status: '200', + le: '0.005', + value: 22377, + }, + { + method: 'GET', + status: '200', + le: '0.01', + value: 22403, + }, + { + method: 'GET', + status: '200', + le: '0.025', + value: 22413, + }, + { + method: 'GET', + status: '200', + le: '0.05', + value: 22420, + }, + { + method: 'GET', + status: '200', + le: '0.1', + value: 22423, + }, + { + method: 'GET', + status: '200', + le: '0.25', + value: 22425, + }, + { + method: 'GET', + status: '200', + le: '0.5', + value: 22425, + }, + { + method: 'GET', + status: '200', + le: '1', + value: 22425, + }, + { + method: 'GET', + status: '200', + le: '2.5', + value: 22425, + }, + { + method: 'GET', + status: '200', + le: '5', + value: 22425, + }, + { + method: 'GET', + status: '200', + le: '10', + value: 22425, + }, + { + method: 'GET', + status: '200', + le: '+Inf', + value: 22425, + }, + { + method: 'GET', + status: '400', + le: '0.005', + value: 3, + }, + { + method: 'GET', + status: '400', + le: '0.01', + value: 3, + }, + { + method: 'GET', + status: '400', + le: '0.025', + value: 3, + }, + { + method: 'GET', + status: '400', + le: '0.05', + value: 3, + }, + { + method: 'GET', + status: '400', + le: '0.1', + value: 3, + }, + { + method: 'GET', + status: '400', + le: '0.25', + value: 3, + }, + { + method: 'GET', + status: '400', + le: '0.5', + value: 3, + }, + { + method: 'GET', + status: '400', + le: '1', + value: 3, + }, + { + method: 'GET', + status: '400', + le: '2.5', + value: 3, + }, + { + method: 'GET', + status: '400', + le: '5', + value: 3, + }, + { + method: 'GET', + status: '400', + le: '10', + value: 3, + }, + { + method: 'GET', + status: '400', + le: '+Inf', + value: 3, + }, + { + method: 'PUT', + status: '200', + le: '0.005', + value: 15495, + }, + { + method: 'PUT', + status: '200', + le: '0.01', + value: 15686, + }, + { + method: 'PUT', + status: '200', + le: '0.025', + value: 15697, + }, + { + method: 'PUT', + status: '200', + le: '0.05', + value: 15698, + }, + { + method: 'PUT', + status: '200', + le: '0.1', + value: 15698, + }, + { + method: 'PUT', + status: '200', + le: '0.25', + value: 15698, + }, + { + method: 'PUT', + status: '200', + le: '0.5', + value: 15698, + }, + { + method: 'PUT', + status: '200', + le: '1', + value: 15698, + }, + { + method: 'PUT', + status: '200', + le: '2.5', + value: 15698, + }, + { + method: 'PUT', + status: '200', + le: '5', + value: 15698, + }, + { + method: 'PUT', + status: '200', + le: '10', + value: 15698, + }, + { + method: 'PUT', + status: '200', + le: '+Inf', + value: 15698, + }, + ], + parseable_local_fs_response_time_sum: [ + { + method: 'GET', + status: '200', + value: 5, + }, + { + method: 'GET', + status: '400', + value: 0, + }, + { + method: 'PUT', + status: '200', + value: 13, + }, + ], + parseable_local_fs_response_time_count: [ + { + method: 'GET', + status: '200', + value: 22425, + }, + { + method: 'GET', + status: '400', + value: 3, + }, + { + method: 'PUT', + status: '200', + value: 15698, + }, + ], + parseable_query_execute_time_bucket: [ + { + stream: 'azureapimlog', + le: '0.005', + value: 20, + }, + { + stream: 'azureapimlog', + le: '0.01', + value: 51, + }, + { + stream: 'azureapimlog', + le: '0.025', + value: 77, + }, + { + stream: 'azureapimlog', + le: '0.05', + value: 80, + }, + { + stream: 'azureapimlog', + le: '0.1', + value: 82, + }, + { + stream: 'azureapimlog', + le: '0.25', + value: 82, + }, + { + stream: 'azureapimlog', + le: '0.5', + value: 82, + }, + { + stream: 'azureapimlog', + le: '1', + value: 82, + }, + { + stream: 'azureapimlog', + le: '2.5', + value: 82, + }, + { + stream: 'azureapimlog', + le: '5', + value: 82, + }, + { + stream: 'azureapimlog', + le: '10', + value: 82, + }, + { + stream: 'azureapimlog', + le: '+Inf', + value: 82, + }, + { + stream: 'backend', + le: '0.005', + value: 0, + }, + { + stream: 'backend', + le: '0.01', + value: 2, + }, + { + stream: 'backend', + le: '0.025', + value: 92, + }, + { + stream: 'backend', + le: '0.05', + value: 165, + }, + { + stream: 'backend', + le: '0.1', + value: 219, + }, + { + stream: 'backend', + le: '0.25', + value: 297, + }, + { + stream: 'backend', + le: '0.5', + value: 332, + }, + { + stream: 'backend', + le: '1', + value: 337, + }, + { + stream: 'backend', + le: '2.5', + value: 339, + }, + { + stream: 'backend', + le: '5', + value: 339, + }, + { + stream: 'backend', + le: '10', + value: 339, + }, + { + stream: 'backend', + le: '+Inf', + value: 339, + }, + { + stream: 'druide2e', + le: '0.005', + value: 0, + }, + { + stream: 'druide2e', + le: '0.01', + value: 11, + }, + { + stream: 'druide2e', + le: '0.025', + value: 19, + }, + { + stream: 'druide2e', + le: '0.05', + value: 20, + }, + { + stream: 'druide2e', + le: '0.1', + value: 20, + }, + { + stream: 'druide2e', + le: '0.25', + value: 20, + }, + { + stream: 'druide2e', + le: '0.5', + value: 20, + }, + { + stream: 'druide2e', + le: '1', + value: 20, + }, + { + stream: 'druide2e', + le: '2.5', + value: 20, + }, + { + stream: 'druide2e', + le: '5', + value: 20, + }, + { + stream: 'druide2e', + le: '10', + value: 20, + }, + { + stream: 'druide2e', + le: '+Inf', + value: 20, + }, + { + stream: 'frontend', + le: '0.005', + value: 0, + }, + { + stream: 'frontend', + le: '0.01', + value: 0, + }, + { + stream: 'frontend', + le: '0.025', + value: 17, + }, + { + stream: 'frontend', + le: '0.05', + value: 30, + }, + { + stream: 'frontend', + le: '0.1', + value: 49, + }, + { + stream: 'frontend', + le: '0.25', + value: 86, + }, + { + stream: 'frontend', + le: '0.5', + value: 106, + }, + { + stream: 'frontend', + le: '1', + value: 107, + }, + { + stream: 'frontend', + le: '2.5', + value: 111, + }, + { + stream: 'frontend', + le: '5', + value: 115, + }, + { + stream: 'frontend', + le: '10', + value: 115, + }, + { + stream: 'frontend', + le: '+Inf', + value: 115, + }, + ], + parseable_query_execute_time_sum: [ + { + stream: 'azureapimlog', + value: 0, + }, + { + stream: 'backend', + value: 38, + }, + { + stream: 'druide2e', + value: 0, + }, + { + stream: 'frontend', + value: 35, + }, + ], + parseable_query_execute_time_count: [ + { + stream: 'azureapimlog', + value: 82, + }, + { + stream: 'backend', + value: 339, + }, + { + stream: 'druide2e', + value: 20, + }, + { + stream: 'frontend', + value: 115, + }, + ], + parseable_response_code: [ + { + endpoint: '', + method: 'GET', + statuscode: '200', + type: '200', + value: 610, + }, + { + endpoint: '', + method: 'GET', + statuscode: '304', + type: '300', + value: 859, + }, + { + endpoint: '', + method: 'GET', + statuscode: '400', + type: '400', + value: 12, + }, + { + endpoint: '', + method: 'HEAD', + statuscode: '200', + type: '200', + value: 491, + }, + { + endpoint: '', + method: 'OPTIONS', + statuscode: '405', + type: '400', + value: 3, + }, + { + endpoint: '', + method: 'POST', + statuscode: '405', + type: '400', + value: 13, + }, + { + endpoint: '*', + method: 'M-SEARCH', + statuscode: '404', + type: '400', + value: 2, + }, + { + endpoint: '/api/v1', + method: 'GET', + statuscode: '404', + type: '400', + value: 1, + }, + { + endpoint: '/api/v1/about', + method: 'GET', + statuscode: '200', + type: '200', + value: 70, + }, + { + endpoint: '/api/v1/ingest', + method: 'POST', + statuscode: '200', + type: '200', + value: 6088833, + }, + { + endpoint: '/api/v1/log-stream', + method: 'GET', + statuscode: '404', + type: '400', + value: 1, + }, + { + endpoint: '/api/v1/logstream', + method: 'GET', + statuscode: '200', + type: '200', + value: 77, + }, + { + endpoint: '/api/v1/logstream//schema', + method: 'GET', + statuscode: '404', + type: '400', + value: 3, + }, + { + endpoint: '/api/v1/metrics', + method: 'GET', + statuscode: '200', + type: '200', + value: 64, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + statuscode: '301', + type: '300', + value: 3, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + statuscode: '400', + type: '400', + value: 1, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + statuscode: '301', + type: '300', + value: 19, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + statuscode: '307', + type: '300', + value: 3, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + statuscode: '400', + type: '400', + value: 1, + }, + { + endpoint: '/api/v1/o/logout', + method: 'GET', + statuscode: '301', + type: '300', + value: 13, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + statuscode: '200', + type: '200', + value: 556, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + statuscode: '400', + type: '400', + value: 37, + }, + { + endpoint: '/api/v1/role', + method: 'GET', + statuscode: '200', + type: '200', + value: 14, + }, + { + endpoint: '/api/v1/role/default', + method: 'GET', + statuscode: '200', + type: '200', + value: 7, + }, + { + endpoint: '/api/v1/user', + method: 'GET', + statuscode: '200', + type: '200', + value: 7, + }, + { + endpoint: '/api/v1/user//role', + method: 'GET', + statuscode: '404', + type: '400', + value: 3, + }, + ], + parseable_response_time_bucket: [ + { + endpoint: '', + method: 'GET', + status: '200', + le: '0.005', + value: 488, + }, + { + endpoint: '', + method: 'GET', + status: '200', + le: '0.01', + value: 517, + }, + { + endpoint: '', + method: 'GET', + status: '200', + le: '0.025', + value: 554, + }, + { + endpoint: '', + method: 'GET', + status: '200', + le: '0.05', + value: 580, + }, + { + endpoint: '', + method: 'GET', + status: '200', + le: '0.1', + value: 598, + }, + { + endpoint: '', + method: 'GET', + status: '200', + le: '0.25', + value: 607, + }, + { + endpoint: '', + method: 'GET', + status: '200', + le: '0.5', + value: 609, + }, + { + endpoint: '', + method: 'GET', + status: '200', + le: '1', + value: 610, + }, + { + endpoint: '', + method: 'GET', + status: '200', + le: '2.5', + value: 610, + }, + { + endpoint: '', + method: 'GET', + status: '200', + le: '5', + value: 610, + }, + { + endpoint: '', + method: 'GET', + status: '200', + le: '10', + value: 610, + }, + { + endpoint: '', + method: 'GET', + status: '200', + le: '+Inf', + value: 610, + }, + { + endpoint: '', + method: 'GET', + status: '304', + le: '0.005', + value: 852, + }, + { + endpoint: '', + method: 'GET', + status: '304', + le: '0.01', + value: 855, + }, + { + endpoint: '', + method: 'GET', + status: '304', + le: '0.025', + value: 857, + }, + { + endpoint: '', + method: 'GET', + status: '304', + le: '0.05', + value: 858, + }, + { + endpoint: '', + method: 'GET', + status: '304', + le: '0.1', + value: 859, + }, + { + endpoint: '', + method: 'GET', + status: '304', + le: '0.25', + value: 859, + }, + { + endpoint: '', + method: 'GET', + status: '304', + le: '0.5', + value: 859, + }, + { + endpoint: '', + method: 'GET', + status: '304', + le: '1', + value: 859, + }, + { + endpoint: '', + method: 'GET', + status: '304', + le: '2.5', + value: 859, + }, + { + endpoint: '', + method: 'GET', + status: '304', + le: '5', + value: 859, + }, + { + endpoint: '', + method: 'GET', + status: '304', + le: '10', + value: 859, + }, + { + endpoint: '', + method: 'GET', + status: '304', + le: '+Inf', + value: 859, + }, + { + endpoint: '', + method: 'GET', + status: '400', + le: '0.005', + value: 12, + }, + { + endpoint: '', + method: 'GET', + status: '400', + le: '0.01', + value: 12, + }, + { + endpoint: '', + method: 'GET', + status: '400', + le: '0.025', + value: 12, + }, + { + endpoint: '', + method: 'GET', + status: '400', + le: '0.05', + value: 12, + }, + { + endpoint: '', + method: 'GET', + status: '400', + le: '0.1', + value: 12, + }, + { + endpoint: '', + method: 'GET', + status: '400', + le: '0.25', + value: 12, + }, + { + endpoint: '', + method: 'GET', + status: '400', + le: '0.5', + value: 12, + }, + { + endpoint: '', + method: 'GET', + status: '400', + le: '1', + value: 12, + }, + { + endpoint: '', + method: 'GET', + status: '400', + le: '2.5', + value: 12, + }, + { + endpoint: '', + method: 'GET', + status: '400', + le: '5', + value: 12, + }, + { + endpoint: '', + method: 'GET', + status: '400', + le: '10', + value: 12, + }, + { + endpoint: '', + method: 'GET', + status: '400', + le: '+Inf', + value: 12, + }, + { + endpoint: '', + method: 'HEAD', + status: '200', + le: '0.005', + value: 491, + }, + { + endpoint: '', + method: 'HEAD', + status: '200', + le: '0.01', + value: 491, + }, + { + endpoint: '', + method: 'HEAD', + status: '200', + le: '0.025', + value: 491, + }, + { + endpoint: '', + method: 'HEAD', + status: '200', + le: '0.05', + value: 491, + }, + { + endpoint: '', + method: 'HEAD', + status: '200', + le: '0.1', + value: 491, + }, + { + endpoint: '', + method: 'HEAD', + status: '200', + le: '0.25', + value: 491, + }, + { + endpoint: '', + method: 'HEAD', + status: '200', + le: '0.5', + value: 491, + }, + { + endpoint: '', + method: 'HEAD', + status: '200', + le: '1', + value: 491, + }, + { + endpoint: '', + method: 'HEAD', + status: '200', + le: '2.5', + value: 491, + }, + { + endpoint: '', + method: 'HEAD', + status: '200', + le: '5', + value: 491, + }, + { + endpoint: '', + method: 'HEAD', + status: '200', + le: '10', + value: 491, + }, + { + endpoint: '', + method: 'HEAD', + status: '200', + le: '+Inf', + value: 491, + }, + { + endpoint: '', + method: 'OPTIONS', + status: '405', + le: '0.005', + value: 3, + }, + { + endpoint: '', + method: 'OPTIONS', + status: '405', + le: '0.01', + value: 3, + }, + { + endpoint: '', + method: 'OPTIONS', + status: '405', + le: '0.025', + value: 3, + }, + { + endpoint: '', + method: 'OPTIONS', + status: '405', + le: '0.05', + value: 3, + }, + { + endpoint: '', + method: 'OPTIONS', + status: '405', + le: '0.1', + value: 3, + }, + { + endpoint: '', + method: 'OPTIONS', + status: '405', + le: '0.25', + value: 3, + }, + { + endpoint: '', + method: 'OPTIONS', + status: '405', + le: '0.5', + value: 3, + }, + { + endpoint: '', + method: 'OPTIONS', + status: '405', + le: '1', + value: 3, + }, + { + endpoint: '', + method: 'OPTIONS', + status: '405', + le: '2.5', + value: 3, + }, + { + endpoint: '', + method: 'OPTIONS', + status: '405', + le: '5', + value: 3, + }, + { + endpoint: '', + method: 'OPTIONS', + status: '405', + le: '10', + value: 3, + }, + { + endpoint: '', + method: 'OPTIONS', + status: '405', + le: '+Inf', + value: 3, + }, + { + endpoint: '', + method: 'POST', + status: '405', + le: '0.005', + value: 13, + }, + { + endpoint: '', + method: 'POST', + status: '405', + le: '0.01', + value: 13, + }, + { + endpoint: '', + method: 'POST', + status: '405', + le: '0.025', + value: 13, + }, + { + endpoint: '', + method: 'POST', + status: '405', + le: '0.05', + value: 13, + }, + { + endpoint: '', + method: 'POST', + status: '405', + le: '0.1', + value: 13, + }, + { + endpoint: '', + method: 'POST', + status: '405', + le: '0.25', + value: 13, + }, + { + endpoint: '', + method: 'POST', + status: '405', + le: '0.5', + value: 13, + }, + { + endpoint: '', + method: 'POST', + status: '405', + le: '1', + value: 13, + }, + { + endpoint: '', + method: 'POST', + status: '405', + le: '2.5', + value: 13, + }, + { + endpoint: '', + method: 'POST', + status: '405', + le: '5', + value: 13, + }, + { + endpoint: '', + method: 'POST', + status: '405', + le: '10', + value: 13, + }, + { + endpoint: '', + method: 'POST', + status: '405', + le: '+Inf', + value: 13, + }, + { + endpoint: '*', + method: 'M-SEARCH', + status: '404', + le: '0.005', + value: 2, + }, + { + endpoint: '*', + method: 'M-SEARCH', + status: '404', + le: '0.01', + value: 2, + }, + { + endpoint: '*', + method: 'M-SEARCH', + status: '404', + le: '0.025', + value: 2, + }, + { + endpoint: '*', + method: 'M-SEARCH', + status: '404', + le: '0.05', + value: 2, + }, + { + endpoint: '*', + method: 'M-SEARCH', + status: '404', + le: '0.1', + value: 2, + }, + { + endpoint: '*', + method: 'M-SEARCH', + status: '404', + le: '0.25', + value: 2, + }, + { + endpoint: '*', + method: 'M-SEARCH', + status: '404', + le: '0.5', + value: 2, + }, + { + endpoint: '*', + method: 'M-SEARCH', + status: '404', + le: '1', + value: 2, + }, + { + endpoint: '*', + method: 'M-SEARCH', + status: '404', + le: '2.5', + value: 2, + }, + { + endpoint: '*', + method: 'M-SEARCH', + status: '404', + le: '5', + value: 2, + }, + { + endpoint: '*', + method: 'M-SEARCH', + status: '404', + le: '10', + value: 2, + }, + { + endpoint: '*', + method: 'M-SEARCH', + status: '404', + le: '+Inf', + value: 2, + }, + { + endpoint: '/api/v1', + method: 'GET', + status: '404', + le: '0.005', + value: 1, + }, + { + endpoint: '/api/v1', + method: 'GET', + status: '404', + le: '0.01', + value: 1, + }, + { + endpoint: '/api/v1', + method: 'GET', + status: '404', + le: '0.025', + value: 1, + }, + { + endpoint: '/api/v1', + method: 'GET', + status: '404', + le: '0.05', + value: 1, + }, + { + endpoint: '/api/v1', + method: 'GET', + status: '404', + le: '0.1', + value: 1, + }, + { + endpoint: '/api/v1', + method: 'GET', + status: '404', + le: '0.25', + value: 1, + }, + { + endpoint: '/api/v1', + method: 'GET', + status: '404', + le: '0.5', + value: 1, + }, + { + endpoint: '/api/v1', + method: 'GET', + status: '404', + le: '1', + value: 1, + }, + { + endpoint: '/api/v1', + method: 'GET', + status: '404', + le: '2.5', + value: 1, + }, + { + endpoint: '/api/v1', + method: 'GET', + status: '404', + le: '5', + value: 1, + }, + { + endpoint: '/api/v1', + method: 'GET', + status: '404', + le: '10', + value: 1, + }, + { + endpoint: '/api/v1', + method: 'GET', + status: '404', + le: '+Inf', + value: 1, + }, + { + endpoint: '/api/v1/about', + method: 'GET', + status: '200', + le: '0.005', + value: 0, + }, + { + endpoint: '/api/v1/about', + method: 'GET', + status: '200', + le: '0.01', + value: 0, + }, + { + endpoint: '/api/v1/about', + method: 'GET', + status: '200', + le: '0.025', + value: 0, + }, + { + endpoint: '/api/v1/about', + method: 'GET', + status: '200', + le: '0.05', + value: 0, + }, + { + endpoint: '/api/v1/about', + method: 'GET', + status: '200', + le: '0.1', + value: 0, + }, + { + endpoint: '/api/v1/about', + method: 'GET', + status: '200', + le: '0.25', + value: 0, + }, + { + endpoint: '/api/v1/about', + method: 'GET', + status: '200', + le: '0.5', + value: 0, + }, + { + endpoint: '/api/v1/about', + method: 'GET', + status: '200', + le: '1', + value: 66, + }, + { + endpoint: '/api/v1/about', + method: 'GET', + status: '200', + le: '2.5', + value: 70, + }, + { + endpoint: '/api/v1/about', + method: 'GET', + status: '200', + le: '5', + value: 70, + }, + { + endpoint: '/api/v1/about', + method: 'GET', + status: '200', + le: '10', + value: 70, + }, + { + endpoint: '/api/v1/about', + method: 'GET', + status: '200', + le: '+Inf', + value: 70, + }, + { + endpoint: '/api/v1/ingest', + method: 'POST', + status: '200', + le: '0.005', + value: 6087344, + }, + { + endpoint: '/api/v1/ingest', + method: 'POST', + status: '200', + le: '0.01', + value: 6088376, + }, + { + endpoint: '/api/v1/ingest', + method: 'POST', + status: '200', + le: '0.025', + value: 6088679, + }, + { + endpoint: '/api/v1/ingest', + method: 'POST', + status: '200', + le: '0.05', + value: 6088777, + }, + { + endpoint: '/api/v1/ingest', + method: 'POST', + status: '200', + le: '0.1', + value: 6088813, + }, + { + endpoint: '/api/v1/ingest', + method: 'POST', + status: '200', + le: '0.25', + value: 6088830, + }, + { + endpoint: '/api/v1/ingest', + method: 'POST', + status: '200', + le: '0.5', + value: 6088833, + }, + { + endpoint: '/api/v1/ingest', + method: 'POST', + status: '200', + le: '1', + value: 6088833, + }, + { + endpoint: '/api/v1/ingest', + method: 'POST', + status: '200', + le: '2.5', + value: 6088833, + }, + { + endpoint: '/api/v1/ingest', + method: 'POST', + status: '200', + le: '5', + value: 6088833, + }, + { + endpoint: '/api/v1/ingest', + method: 'POST', + status: '200', + le: '10', + value: 6088833, + }, + { + endpoint: '/api/v1/ingest', + method: 'POST', + status: '200', + le: '+Inf', + value: 6088833, + }, + { + endpoint: '/api/v1/log-stream', + method: 'GET', + status: '404', + le: '0.005', + value: 1, + }, + { + endpoint: '/api/v1/log-stream', + method: 'GET', + status: '404', + le: '0.01', + value: 1, + }, + { + endpoint: '/api/v1/log-stream', + method: 'GET', + status: '404', + le: '0.025', + value: 1, + }, + { + endpoint: '/api/v1/log-stream', + method: 'GET', + status: '404', + le: '0.05', + value: 1, + }, + { + endpoint: '/api/v1/log-stream', + method: 'GET', + status: '404', + le: '0.1', + value: 1, + }, + { + endpoint: '/api/v1/log-stream', + method: 'GET', + status: '404', + le: '0.25', + value: 1, + }, + { + endpoint: '/api/v1/log-stream', + method: 'GET', + status: '404', + le: '0.5', + value: 1, + }, + { + endpoint: '/api/v1/log-stream', + method: 'GET', + status: '404', + le: '1', + value: 1, + }, + { + endpoint: '/api/v1/log-stream', + method: 'GET', + status: '404', + le: '2.5', + value: 1, + }, + { + endpoint: '/api/v1/log-stream', + method: 'GET', + status: '404', + le: '5', + value: 1, + }, + { + endpoint: '/api/v1/log-stream', + method: 'GET', + status: '404', + le: '10', + value: 1, + }, + { + endpoint: '/api/v1/log-stream', + method: 'GET', + status: '404', + le: '+Inf', + value: 1, + }, + { + endpoint: '/api/v1/logstream', + method: 'GET', + status: '200', + le: '0.005', + value: 24, + }, + { + endpoint: '/api/v1/logstream', + method: 'GET', + status: '200', + le: '0.01', + value: 66, + }, + { + endpoint: '/api/v1/logstream', + method: 'GET', + status: '200', + le: '0.025', + value: 77, + }, + { + endpoint: '/api/v1/logstream', + method: 'GET', + status: '200', + le: '0.05', + value: 77, + }, + { + endpoint: '/api/v1/logstream', + method: 'GET', + status: '200', + le: '0.1', + value: 77, + }, + { + endpoint: '/api/v1/logstream', + method: 'GET', + status: '200', + le: '0.25', + value: 77, + }, + { + endpoint: '/api/v1/logstream', + method: 'GET', + status: '200', + le: '0.5', + value: 77, + }, + { + endpoint: '/api/v1/logstream', + method: 'GET', + status: '200', + le: '1', + value: 77, + }, + { + endpoint: '/api/v1/logstream', + method: 'GET', + status: '200', + le: '2.5', + value: 77, + }, + { + endpoint: '/api/v1/logstream', + method: 'GET', + status: '200', + le: '5', + value: 77, + }, + { + endpoint: '/api/v1/logstream', + method: 'GET', + status: '200', + le: '10', + value: 77, + }, + { + endpoint: '/api/v1/logstream', + method: 'GET', + status: '200', + le: '+Inf', + value: 77, + }, + { + endpoint: '/api/v1/logstream//schema', + method: 'GET', + status: '404', + le: '0.005', + value: 3, + }, + { + endpoint: '/api/v1/logstream//schema', + method: 'GET', + status: '404', + le: '0.01', + value: 3, + }, + { + endpoint: '/api/v1/logstream//schema', + method: 'GET', + status: '404', + le: '0.025', + value: 3, + }, + { + endpoint: '/api/v1/logstream//schema', + method: 'GET', + status: '404', + le: '0.05', + value: 3, + }, + { + endpoint: '/api/v1/logstream//schema', + method: 'GET', + status: '404', + le: '0.1', + value: 3, + }, + { + endpoint: '/api/v1/logstream//schema', + method: 'GET', + status: '404', + le: '0.25', + value: 3, + }, + { + endpoint: '/api/v1/logstream//schema', + method: 'GET', + status: '404', + le: '0.5', + value: 3, + }, + { + endpoint: '/api/v1/logstream//schema', + method: 'GET', + status: '404', + le: '1', + value: 3, + }, + { + endpoint: '/api/v1/logstream//schema', + method: 'GET', + status: '404', + le: '2.5', + value: 3, + }, + { + endpoint: '/api/v1/logstream//schema', + method: 'GET', + status: '404', + le: '5', + value: 3, + }, + { + endpoint: '/api/v1/logstream//schema', + method: 'GET', + status: '404', + le: '10', + value: 3, + }, + { + endpoint: '/api/v1/logstream//schema', + method: 'GET', + status: '404', + le: '+Inf', + value: 3, + }, + { + endpoint: '/api/v1/metrics', + method: 'GET', + status: '200', + le: '0.005', + value: 60, + }, + { + endpoint: '/api/v1/metrics', + method: 'GET', + status: '200', + le: '0.01', + value: 64, + }, + { + endpoint: '/api/v1/metrics', + method: 'GET', + status: '200', + le: '0.025', + value: 64, + }, + { + endpoint: '/api/v1/metrics', + method: 'GET', + status: '200', + le: '0.05', + value: 64, + }, + { + endpoint: '/api/v1/metrics', + method: 'GET', + status: '200', + le: '0.1', + value: 64, + }, + { + endpoint: '/api/v1/metrics', + method: 'GET', + status: '200', + le: '0.25', + value: 64, + }, + { + endpoint: '/api/v1/metrics', + method: 'GET', + status: '200', + le: '0.5', + value: 64, + }, + { + endpoint: '/api/v1/metrics', + method: 'GET', + status: '200', + le: '1', + value: 64, + }, + { + endpoint: '/api/v1/metrics', + method: 'GET', + status: '200', + le: '2.5', + value: 64, + }, + { + endpoint: '/api/v1/metrics', + method: 'GET', + status: '200', + le: '5', + value: 64, + }, + { + endpoint: '/api/v1/metrics', + method: 'GET', + status: '200', + le: '10', + value: 64, + }, + { + endpoint: '/api/v1/metrics', + method: 'GET', + status: '200', + le: '+Inf', + value: 64, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '301', + le: '0.005', + value: 0, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '301', + le: '0.01', + value: 0, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '301', + le: '0.025', + value: 0, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '301', + le: '0.05', + value: 0, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '301', + le: '0.1', + value: 0, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '301', + le: '0.25', + value: 0, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '301', + le: '0.5', + value: 3, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '301', + le: '1', + value: 3, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '301', + le: '2.5', + value: 3, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '301', + le: '5', + value: 3, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '301', + le: '10', + value: 3, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '301', + le: '+Inf', + value: 3, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '400', + le: '0.005', + value: 1, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '400', + le: '0.01', + value: 1, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '400', + le: '0.025', + value: 1, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '400', + le: '0.05', + value: 1, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '400', + le: '0.1', + value: 1, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '400', + le: '0.25', + value: 1, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '400', + le: '0.5', + value: 1, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '400', + le: '1', + value: 1, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '400', + le: '2.5', + value: 1, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '400', + le: '5', + value: 1, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '400', + le: '10', + value: 1, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '400', + le: '+Inf', + value: 1, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '301', + le: '0.005', + value: 0, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '301', + le: '0.01', + value: 0, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '301', + le: '0.025', + value: 0, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '301', + le: '0.05', + value: 10, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '301', + le: '0.1', + value: 19, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '301', + le: '0.25', + value: 19, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '301', + le: '0.5', + value: 19, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '301', + le: '1', + value: 19, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '301', + le: '2.5', + value: 19, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '301', + le: '5', + value: 19, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '301', + le: '10', + value: 19, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '301', + le: '+Inf', + value: 19, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '307', + le: '0.005', + value: 3, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '307', + le: '0.01', + value: 3, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '307', + le: '0.025', + value: 3, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '307', + le: '0.05', + value: 3, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '307', + le: '0.1', + value: 3, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '307', + le: '0.25', + value: 3, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '307', + le: '0.5', + value: 3, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '307', + le: '1', + value: 3, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '307', + le: '2.5', + value: 3, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '307', + le: '5', + value: 3, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '307', + le: '10', + value: 3, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '307', + le: '+Inf', + value: 3, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '400', + le: '0.005', + value: 0, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '400', + le: '0.01', + value: 0, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '400', + le: '0.025', + value: 0, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '400', + le: '0.05', + value: 1, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '400', + le: '0.1', + value: 1, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '400', + le: '0.25', + value: 1, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '400', + le: '0.5', + value: 1, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '400', + le: '1', + value: 1, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '400', + le: '2.5', + value: 1, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '400', + le: '5', + value: 1, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '400', + le: '10', + value: 1, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '400', + le: '+Inf', + value: 1, + }, + { + endpoint: '/api/v1/o/logout', + method: 'GET', + status: '301', + le: '0.005', + value: 13, + }, + { + endpoint: '/api/v1/o/logout', + method: 'GET', + status: '301', + le: '0.01', + value: 13, + }, + { + endpoint: '/api/v1/o/logout', + method: 'GET', + status: '301', + le: '0.025', + value: 13, + }, + { + endpoint: '/api/v1/o/logout', + method: 'GET', + status: '301', + le: '0.05', + value: 13, + }, + { + endpoint: '/api/v1/o/logout', + method: 'GET', + status: '301', + le: '0.1', + value: 13, + }, + { + endpoint: '/api/v1/o/logout', + method: 'GET', + status: '301', + le: '0.25', + value: 13, + }, + { + endpoint: '/api/v1/o/logout', + method: 'GET', + status: '301', + le: '0.5', + value: 13, + }, + { + endpoint: '/api/v1/o/logout', + method: 'GET', + status: '301', + le: '1', + value: 13, + }, + { + endpoint: '/api/v1/o/logout', + method: 'GET', + status: '301', + le: '2.5', + value: 13, + }, + { + endpoint: '/api/v1/o/logout', + method: 'GET', + status: '301', + le: '5', + value: 13, + }, + { + endpoint: '/api/v1/o/logout', + method: 'GET', + status: '301', + le: '10', + value: 13, + }, + { + endpoint: '/api/v1/o/logout', + method: 'GET', + status: '301', + le: '+Inf', + value: 13, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '200', + le: '0.005', + value: 1, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '200', + le: '0.01', + value: 9, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '200', + le: '0.025', + value: 116, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '200', + le: '0.05', + value: 221, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '200', + le: '0.1', + value: 297, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '200', + le: '0.25', + value: 395, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '200', + le: '0.5', + value: 520, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '200', + le: '1', + value: 544, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '200', + le: '2.5', + value: 552, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '200', + le: '5', + value: 556, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '200', + le: '10', + value: 556, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '200', + le: '+Inf', + value: 556, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '400', + le: '0.005', + value: 35, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '400', + le: '0.01', + value: 35, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '400', + le: '0.025', + value: 36, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '400', + le: '0.05', + value: 37, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '400', + le: '0.1', + value: 37, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '400', + le: '0.25', + value: 37, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '400', + le: '0.5', + value: 37, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '400', + le: '1', + value: 37, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '400', + le: '2.5', + value: 37, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '400', + le: '5', + value: 37, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '400', + le: '10', + value: 37, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '400', + le: '+Inf', + value: 37, + }, + { + endpoint: '/api/v1/role', + method: 'GET', + status: '200', + le: '0.005', + value: 14, + }, + { + endpoint: '/api/v1/role', + method: 'GET', + status: '200', + le: '0.01', + value: 14, + }, + { + endpoint: '/api/v1/role', + method: 'GET', + status: '200', + le: '0.025', + value: 14, + }, + { + endpoint: '/api/v1/role', + method: 'GET', + status: '200', + le: '0.05', + value: 14, + }, + { + endpoint: '/api/v1/role', + method: 'GET', + status: '200', + le: '0.1', + value: 14, + }, + { + endpoint: '/api/v1/role', + method: 'GET', + status: '200', + le: '0.25', + value: 14, + }, + { + endpoint: '/api/v1/role', + method: 'GET', + status: '200', + le: '0.5', + value: 14, + }, + { + endpoint: '/api/v1/role', + method: 'GET', + status: '200', + le: '1', + value: 14, + }, + { + endpoint: '/api/v1/role', + method: 'GET', + status: '200', + le: '2.5', + value: 14, + }, + { + endpoint: '/api/v1/role', + method: 'GET', + status: '200', + le: '5', + value: 14, + }, + { + endpoint: '/api/v1/role', + method: 'GET', + status: '200', + le: '10', + value: 14, + }, + { + endpoint: '/api/v1/role', + method: 'GET', + status: '200', + le: '+Inf', + value: 14, + }, + { + endpoint: '/api/v1/role/default', + method: 'GET', + status: '200', + le: '0.005', + value: 7, + }, + { + endpoint: '/api/v1/role/default', + method: 'GET', + status: '200', + le: '0.01', + value: 7, + }, + { + endpoint: '/api/v1/role/default', + method: 'GET', + status: '200', + le: '0.025', + value: 7, + }, + { + endpoint: '/api/v1/role/default', + method: 'GET', + status: '200', + le: '0.05', + value: 7, + }, + { + endpoint: '/api/v1/role/default', + method: 'GET', + status: '200', + le: '0.1', + value: 7, + }, + { + endpoint: '/api/v1/role/default', + method: 'GET', + status: '200', + le: '0.25', + value: 7, + }, + { + endpoint: '/api/v1/role/default', + method: 'GET', + status: '200', + le: '0.5', + value: 7, + }, + { + endpoint: '/api/v1/role/default', + method: 'GET', + status: '200', + le: '1', + value: 7, + }, + { + endpoint: '/api/v1/role/default', + method: 'GET', + status: '200', + le: '2.5', + value: 7, + }, + { + endpoint: '/api/v1/role/default', + method: 'GET', + status: '200', + le: '5', + value: 7, + }, + { + endpoint: '/api/v1/role/default', + method: 'GET', + status: '200', + le: '10', + value: 7, + }, + { + endpoint: '/api/v1/role/default', + method: 'GET', + status: '200', + le: '+Inf', + value: 7, + }, + { + endpoint: '/api/v1/user', + method: 'GET', + status: '200', + le: '0.005', + value: 7, + }, + { + endpoint: '/api/v1/user', + method: 'GET', + status: '200', + le: '0.01', + value: 7, + }, + { + endpoint: '/api/v1/user', + method: 'GET', + status: '200', + le: '0.025', + value: 7, + }, + { + endpoint: '/api/v1/user', + method: 'GET', + status: '200', + le: '0.05', + value: 7, + }, + { + endpoint: '/api/v1/user', + method: 'GET', + status: '200', + le: '0.1', + value: 7, + }, + { + endpoint: '/api/v1/user', + method: 'GET', + status: '200', + le: '0.25', + value: 7, + }, + { + endpoint: '/api/v1/user', + method: 'GET', + status: '200', + le: '0.5', + value: 7, + }, + { + endpoint: '/api/v1/user', + method: 'GET', + status: '200', + le: '1', + value: 7, + }, + { + endpoint: '/api/v1/user', + method: 'GET', + status: '200', + le: '2.5', + value: 7, + }, + { + endpoint: '/api/v1/user', + method: 'GET', + status: '200', + le: '5', + value: 7, + }, + { + endpoint: '/api/v1/user', + method: 'GET', + status: '200', + le: '10', + value: 7, + }, + { + endpoint: '/api/v1/user', + method: 'GET', + status: '200', + le: '+Inf', + value: 7, + }, + { + endpoint: '/api/v1/user//role', + method: 'GET', + status: '404', + le: '0.005', + value: 3, + }, + { + endpoint: '/api/v1/user//role', + method: 'GET', + status: '404', + le: '0.01', + value: 3, + }, + { + endpoint: '/api/v1/user//role', + method: 'GET', + status: '404', + le: '0.025', + value: 3, + }, + { + endpoint: '/api/v1/user//role', + method: 'GET', + status: '404', + le: '0.05', + value: 3, + }, + { + endpoint: '/api/v1/user//role', + method: 'GET', + status: '404', + le: '0.1', + value: 3, + }, + { + endpoint: '/api/v1/user//role', + method: 'GET', + status: '404', + le: '0.25', + value: 3, + }, + { + endpoint: '/api/v1/user//role', + method: 'GET', + status: '404', + le: '0.5', + value: 3, + }, + { + endpoint: '/api/v1/user//role', + method: 'GET', + status: '404', + le: '1', + value: 3, + }, + { + endpoint: '/api/v1/user//role', + method: 'GET', + status: '404', + le: '2.5', + value: 3, + }, + { + endpoint: '/api/v1/user//role', + method: 'GET', + status: '404', + le: '5', + value: 3, + }, + { + endpoint: '/api/v1/user//role', + method: 'GET', + status: '404', + le: '10', + value: 3, + }, + { + endpoint: '/api/v1/user//role', + method: 'GET', + status: '404', + le: '+Inf', + value: 3, + }, + ], + parseable_response_time_sum: [ + { + endpoint: '', + method: 'GET', + status: '200', + value: 5, + }, + { + endpoint: '', + method: 'GET', + status: '304', + value: 0, + }, + { + endpoint: '', + method: 'GET', + status: '400', + value: 0, + }, + { + endpoint: '', + method: 'HEAD', + status: '200', + value: 0, + }, + { + endpoint: '', + method: 'OPTIONS', + status: '405', + value: 0, + }, + { + endpoint: '', + method: 'POST', + status: '405', + value: 0, + }, + { + endpoint: '*', + method: 'M-SEARCH', + status: '404', + value: 0, + }, + { + endpoint: '/api/v1', + method: 'GET', + status: '404', + value: 0, + }, + { + endpoint: '/api/v1/about', + method: 'GET', + status: '200', + value: 56, + }, + { + endpoint: '/api/v1/ingest', + method: 'POST', + status: '200', + value: 1548, + }, + { + endpoint: '/api/v1/log-stream', + method: 'GET', + status: '404', + value: 0, + }, + { + endpoint: '/api/v1/logstream', + method: 'GET', + status: '200', + value: 0, + }, + { + endpoint: '/api/v1/logstream//schema', + method: 'GET', + status: '404', + value: 0, + }, + { + endpoint: '/api/v1/metrics', + method: 'GET', + status: '200', + value: 0, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '301', + value: 0, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '400', + value: 0, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '301', + value: 0, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '307', + value: 0, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '400', + value: 0, + }, + { + endpoint: '/api/v1/o/logout', + method: 'GET', + status: '301', + value: 0, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '200', + value: 114, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '400', + value: 0, + }, + { + endpoint: '/api/v1/role', + method: 'GET', + status: '200', + value: 0, + }, + { + endpoint: '/api/v1/role/default', + method: 'GET', + status: '200', + value: 0, + }, + { + endpoint: '/api/v1/user', + method: 'GET', + status: '200', + value: 0, + }, + { + endpoint: '/api/v1/user//role', + method: 'GET', + status: '404', + value: 0, + }, + ], + parseable_response_time_count: [ + { + endpoint: '', + method: 'GET', + status: '200', + value: 610, + }, + { + endpoint: '', + method: 'GET', + status: '304', + value: 859, + }, + { + endpoint: '', + method: 'GET', + status: '400', + value: 12, + }, + { + endpoint: '', + method: 'HEAD', + status: '200', + value: 491, + }, + { + endpoint: '', + method: 'OPTIONS', + status: '405', + value: 3, + }, + { + endpoint: '', + method: 'POST', + status: '405', + value: 13, + }, + { + endpoint: '*', + method: 'M-SEARCH', + status: '404', + value: 2, + }, + { + endpoint: '/api/v1', + method: 'GET', + status: '404', + value: 1, + }, + { + endpoint: '/api/v1/about', + method: 'GET', + status: '200', + value: 70, + }, + { + endpoint: '/api/v1/ingest', + method: 'POST', + status: '200', + value: 6088833, + }, + { + endpoint: '/api/v1/log-stream', + method: 'GET', + status: '404', + value: 1, + }, + { + endpoint: '/api/v1/logstream', + method: 'GET', + status: '200', + value: 77, + }, + { + endpoint: '/api/v1/logstream//schema', + method: 'GET', + status: '404', + value: 3, + }, + { + endpoint: '/api/v1/metrics', + method: 'GET', + status: '200', + value: 64, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '301', + value: 3, + }, + { + endpoint: '/api/v1/o/code', + method: 'GET', + status: '400', + value: 1, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '301', + value: 19, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '307', + value: 3, + }, + { + endpoint: '/api/v1/o/login', + method: 'GET', + status: '400', + value: 1, + }, + { + endpoint: '/api/v1/o/logout', + method: 'GET', + status: '301', + value: 13, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '200', + value: 556, + }, + { + endpoint: '/api/v1/query', + method: 'POST', + status: '400', + value: 37, + }, + { + endpoint: '/api/v1/role', + method: 'GET', + status: '200', + value: 14, + }, + { + endpoint: '/api/v1/role/default', + method: 'GET', + status: '200', + value: 7, + }, + { + endpoint: '/api/v1/user', + method: 'GET', + status: '200', + value: 7, + }, + { + endpoint: '/api/v1/user//role', + method: 'GET', + status: '404', + value: 3, + }, + ], + parseable_staging_files: [ + { + stream: 'azureapimlog', + value: 0, + }, + { + stream: 'backend', + value: 1, + }, + { + stream: 'druide2e', + value: 0, + }, + { + stream: 'frontend', + value: 1, + }, + ], + parseable_storage_size: [ + { + format: 'arrows', + stream: 'azureapimlog', + type: 'staging', + value: 278360, + }, + { + format: 'arrows', + stream: 'backend', + type: 'staging', + value: 3710463112, + }, + { + format: 'arrows', + stream: 'frontend', + type: 'staging', + value: 3349968344, + }, + { + format: 'parquet', + stream: 'azureapimlog', + type: 'data', + value: 1628492, + }, + { + format: 'parquet', + stream: 'backend', + type: 'data', + value: 1061537471, + }, + { + format: 'parquet', + stream: 'druide2e', + type: 'data', + value: 3421013, + }, + { + format: 'parquet', + stream: 'frontend', + type: 'data', + value: 1042412371, + }, + ], + process_cpu_seconds_total: 3794, + process_max_fds: 1048576, + process_open_fds: 267, + process_resident_memory_bytes: 236376064, + process_start_time_seconds: 1709565826, + process_threads: 7, + process_virtual_memory_bytes: 692588544, +}; function parsePrometheusResponse(response) { const metrics = {}; - - response.trim().split('\n').forEach(line => { - const matchWithLabels = line.match(/(\w+)\{([^\}]+)\}\s+(\d+)/); - const matchWithoutLabels = line.match(/(\w+)\s+(\d+)/); - - if (matchWithLabels) { - const metricName = matchWithLabels[1]; - const labels = matchWithLabels[2].split(',').reduce((acc, label) => { - const [key, value] = label.split('='); - acc[key] = value.replace(/"/g, ''); - return acc; - }, {}); - const value = parseInt(matchWithLabels[3], 10); - - if (!metrics[metricName]) { - metrics[metricName] = []; - } - - metrics[metricName].push({ ...labels, value }); - } else if (matchWithoutLabels) { - const metricName = matchWithoutLabels[1]; - const value = parseInt(matchWithoutLabels[2], 10); - - if (!metrics[metricName]) { - metrics[metricName] = value; - } else if (typeof metrics[metricName] === 'number') { - metrics[metricName] = [metrics[metricName], { value }]; - } else { - metrics[metricName].push({ value }); - } - } - }); - + + response + .trim() + .split('\n') + .forEach((line) => { + const matchWithLabels = line.match(/(\w+)\{([^\}]+)\}\s+(\d+)/); + const matchWithoutLabels = line.match(/(\w+)\s+(\d+)/); + + if (matchWithLabels) { + const metricName = matchWithLabels[1]; + const labels = matchWithLabels[2].split(',').reduce((acc, label) => { + const [key, value] = label.split('='); + acc[key] = value.replace(/"/g, ''); + return acc; + }, {}); + const value = parseInt(matchWithLabels[3], 10); + + if (!metrics[metricName]) { + metrics[metricName] = []; + } + + metrics[metricName].push({ ...labels, value }); + } else if (matchWithoutLabels) { + const metricName = matchWithoutLabels[1]; + const value = parseInt(matchWithoutLabels[2], 10); + + if (!metrics[metricName]) { + metrics[metricName] = value; + } else if (typeof metrics[metricName] === 'number') { + metrics[metricName] = [metrics[metricName], { value }]; + } else { + metrics[metricName].push({ value }); + } + } + }); + return metrics; - } - +} const UsageIndicator = (props: UsageIndicatorProps) => { const alarmCutOffPercentage = 79; @@ -3645,68 +3734,78 @@ const UsageIndicator = (props: UsageIndicatorProps) => { ); }; -const IngestorsTable = () => { - const fetchFileContent = () => { - // Read the file content using the imported text file - fetch(text) - .then(response => response.text()) - .then(content => console.log(parsePrometheusResponse(content))) - .catch(error => console.error('Error reading file:', error)); - }; - useEffect(() => { - fetchFileContent() - }, []) - const rows = ingestorsData.map((element, index) => { - const totalErrors = element.errors.length; - return ( - +const parseStreamDataMetrics = (streamData) => { + if (!streamData || !Array.isArray(streamData)) { + return 0; + } + + return streamData.reduce((acc, streamDatum) => { + const { value } = streamDatum; + return value + acc; + }, 0); +}; + +const sanitizeIngestorData = () => { + const prometheusResponse = parsedMetrics; + const ingestorData = { domain_name: 'stackio.ingest.com', port: 8000, reachable: false }; + const totalEventsIngested = parseStreamDataMetrics(prometheusResponse.parseable_events_ingested); + const totalBytesIngested = parseStreamDataMetrics(prometheusResponse.parseable_events_ingested_size); + const stagingFilesCount = parseStreamDataMetrics(prometheusResponse.parseable_staging_files); + const stagingSize = parseStreamDataMetrics(prometheusResponse.parseable_storage_size) + return { + domainName: ingestorData.domain_name, + totalEventsIngested: HumanizeNumber(totalEventsIngested), + totalBytesIngested: sanitizeBytes(totalBytesIngested), + memoryUsage: sanitizeBytes(prometheusResponse.process_resident_memory_bytes), + stagingFilesCount: HumanizeNumber(stagingFilesCount), + stagingSize: sanitizeBytes(stagingSize), + stagingPath: '/parseable/stage', + storePath: '/parseable/data', + status: ingestorData.reachable ? 'online' : 'offline', + error: 'Unknown Error' + }; +} + +const TableRow = () => { + const data = sanitizeIngestorData(); + + return ( + - {element.name} - - - - - - - - - - Port - {element.port} - - - - + {data.domainName} + {data.status === 'offline' && ( + + + + + + + + {data.error} + + + )} - {sanitizeBytes(element.usedStorage)} - - - - - - - - - + + + {data.totalEventsIngested} - - {HumanizeNumber(element.filesCount)} - {formatBytes(element.stagingDataSize)} - {element.stagingDirectory} - {element.store} + {data.totalBytesIngested} + {data.memoryUsage} + {data.stagingFilesCount} + {data.stagingSize} + {data.stagingPath} + {data.storePath} - - {element.status} + + {data.status} - {element.status === 'offline' ? ( + {data.status === 'offline' ? ( @@ -3714,15 +3813,16 @@ const IngestorsTable = () => { ); - }); +} +const IngestorsTable = () => { return ( Host + Events Ingested Storage - CPU Usage Memory Usage Staging Files Staging Size @@ -3732,7 +3832,9 @@ const IngestorsTable = () => { - {rows} + + {/* */} +
); }; @@ -3741,8 +3843,6 @@ const IngestorsTable = () => { // return await Axios().get('http://0.0.0.0:8000/api/v1/metrics'); // }; - - const Ingestors: FC = () => { const totalMachines = ingestorsData.length; const totalActiveMachines = ingestorsData.filter((ingestor) => ingestor.status === 'online').length; @@ -3750,7 +3850,7 @@ const Ingestors: FC = () => { useEffect(() => { // const res = fetchh(); // console.log(res) - }, []) + }, []); return ( @@ -3759,7 +3859,7 @@ const Ingestors: FC = () => { Ingestors - {`${totalActiveMachines}/${totalMachines} active`} + {`${totalActiveMachines}/${totalMachines} active`}
diff --git a/src/pages/Systems/index.tsx b/src/pages/Systems/index.tsx index 0a113565..ecfa9afc 100644 --- a/src/pages/Systems/index.tsx +++ b/src/pages/Systems/index.tsx @@ -13,7 +13,7 @@ const Systems: FC = () => { flexDirection: 'column', padding: '1.25rem' }}> - + {/* */} {/* */}
diff --git a/src/pages/Systems/styles/Systems.module.css b/src/pages/Systems/styles/Systems.module.css index 536d26b9..a5d6707b 100644 --- a/src/pages/Systems/styles/Systems.module.css +++ b/src/pages/Systems/styles/Systems.module.css @@ -79,7 +79,7 @@ .infoIcon { background-color: transparent; - color: var(--mantine-color-gray-5); + color: var(--mantine-color-red-5); cursor: pointer; } From 28b0ec1e518d21de4953797d4e8f0ca2cb66cb32 Mon Sep 17 00:00:00 2001 From: balaji-jr Date: Tue, 19 Mar 2024 21:42:51 +0530 Subject: [PATCH 05/20] rewritten prometheus parser --- src/@types/parseable/api/about.ts | 2 +- src/@types/parseable/api/clusterInfo.ts | 10 + src/api/cluster.ts | 11 + src/api/constants.ts | 3 + src/components/Header/TimeRange.tsx | 9 - src/components/Navbar/index.tsx | 3 +- src/components/Navbar/infoModal.tsx | 2 +- src/hooks/useClusterInfo.ts | 46 + src/pages/Home/index.tsx | 5 +- src/pages/Systems/Ingestors.tsx | 3947 +------------------ src/pages/Systems/Queriers.tsx | 260 +- src/pages/Systems/styles/Systems.module.css | 2 + src/pages/Systems/utils.ts | 99 + 13 files changed, 420 insertions(+), 3979 deletions(-) create mode 100644 src/@types/parseable/api/clusterInfo.ts create mode 100644 src/api/cluster.ts create mode 100644 src/hooks/useClusterInfo.ts create mode 100644 src/pages/Systems/utils.ts diff --git a/src/@types/parseable/api/about.ts b/src/@types/parseable/api/about.ts index 511242e7..2149c362 100644 --- a/src/@types/parseable/api/about.ts +++ b/src/@types/parseable/api/about.ts @@ -5,7 +5,7 @@ export type AboutData = { license: string; mode: string; staging: string; - store: string; + store: { type: string; path: string }; updateAvailable: boolean; version: string; llmActive: boolean; diff --git a/src/@types/parseable/api/clusterInfo.ts b/src/@types/parseable/api/clusterInfo.ts new file mode 100644 index 00000000..7a4c4ea9 --- /dev/null +++ b/src/@types/parseable/api/clusterInfo.ts @@ -0,0 +1,10 @@ +export type Ingestor = { + domain_name: string; + reachable: boolean; + error: string | null; + status: string; + stagingPath: string; + storePath: string; +} + +export type ClusterInfo = Ingestor[] \ No newline at end of file diff --git a/src/api/cluster.ts b/src/api/cluster.ts new file mode 100644 index 00000000..5c6d34fa --- /dev/null +++ b/src/api/cluster.ts @@ -0,0 +1,11 @@ +import { ClusterInfo, Ingestor } from '@/@types/parseable/api/clusterInfo'; +import { Axios } from './axios'; +import { CLUSTER_INFO_URL, CLUSTER_METRICS_URL } from './constants'; + +export const getClusterInfo = () => { + return Axios().get(CLUSTER_INFO_URL); +}; + +export const getClusterMetrics = () => { + return Axios().get(CLUSTER_METRICS_URL); +} \ No newline at end of file diff --git a/src/api/constants.ts b/src/api/constants.ts index 2d4199ef..bc7da7fa 100644 --- a/src/api/constants.ts +++ b/src/api/constants.ts @@ -32,3 +32,6 @@ export const IS_LLM_ACTIVE_URL = `${LLM_QUERY_URL}/isactive`; // caching export const CACHING_STATUS_URL = (streamName: string) => `${LOG_STREAM_LIST_URL}/${streamName}/cache`; + +export const CLUSTER_INFO_URL = `${API_V1}/cluster/info`; +export const CLUSTER_METRICS_URL = `${API_V1}/metrics`; \ No newline at end of file diff --git a/src/components/Header/TimeRange.tsx b/src/components/Header/TimeRange.tsx index a8dbab49..35795412 100644 --- a/src/components/Header/TimeRange.tsx +++ b/src/components/Header/TimeRange.tsx @@ -50,15 +50,6 @@ const TimeRange: FC = () => { return () => listener(); }, []); - useEffect(() => { - const listener = subLogQuery.subscribe((state) => { - console.log(state.startTime, state.endTime) - }); - - return () => listener(); - }, []); - - const onDurationSelect = (duration: FixedDurations) => { subLogSelectedTimeRange.set((state) => { state.value = duration.name; diff --git a/src/components/Navbar/index.tsx b/src/components/Navbar/index.tsx index 98d7fba2..02f8be8f 100644 --- a/src/components/Navbar/index.tsx +++ b/src/components/Navbar/index.tsx @@ -87,7 +87,7 @@ const Navbar: FC = () => { const userStreams = getUserSepcificStreams(getUserRolesData?.data, getLogStreamListData?.data as any); setUserSpecficStreams(userStreams as any); } else { - setUserSpecficStreams(null); + setUserSpecficStreams([]); } updateUserSpecificAccess(getStreamsSepcificAccess(getUserRolesData?.data)); }, [getUserRolesData?.data, getLogStreamListData?.data]); @@ -141,7 +141,6 @@ const Navbar: FC = () => { if (navItem.route === USERS_MANAGEMENT_ROUTE && !userSpecificAccessMap.hasUserAccess) return null; const isActiveItem = navItem.route === currentRoute; - console.log(navItems) return ( = (props) => { Store - {getAboutData?.data.store} + {getAboutData?.data?.store?.type} Cache diff --git a/src/hooks/useClusterInfo.ts b/src/hooks/useClusterInfo.ts new file mode 100644 index 00000000..d6088909 --- /dev/null +++ b/src/hooks/useClusterInfo.ts @@ -0,0 +1,46 @@ +import { useMutation, useQuery } from 'react-query'; +import { isAxiosError, AxiosError, AxiosResponse } from 'axios'; +import useMountedState from './useMountedState'; +import { notifyError } from '@/utils/notification'; +import { getClusterInfo, getClusterMetrics } from '@/api/cluster'; +import { Ingestor } from '@/@types/parseable/api/clusterInfo'; + +export const useClusterInfo = () => { + const { + data: clusterInfoData, + isError: getClusterInfoError, + isSuccess: getClusterInfoSuccess, + isLoading: getClusterInfoLoading, + refetch: getClusterInfoRefetch, + } = useQuery, Error>(['fetch-cluster-info'], () => getClusterInfo(), { + retry: false, + refetchOnWindowFocus: false, + }); + return { + clusterInfoData, + getClusterInfoError, + getClusterInfoSuccess, + getClusterInfoLoading, + getClusterInfoRefetch, + }; +}; + +export const useClusterMetrics = () => { + const { + data: clusterMetricsData, + isError: getClusterMetricsError, + isSuccess: getClusterMetricsSuccess, + isLoading: getClusterMetricsLoading, + refetch: getClusterMetricsRefetch, + } = useQuery(['fetch-cluster-metrics'], () => getClusterMetrics(), { + retry: false, + refetchOnWindowFocus: false, + }); + return { + clusterMetricsData, + getClusterMetricsError, + getClusterMetricsSuccess, + getClusterMetricsLoading, + getClusterMetricsRefetch, + }; +}; diff --git a/src/pages/Home/index.tsx b/src/pages/Home/index.tsx index 94a42335..9bfe4367 100644 --- a/src/pages/Home/index.tsx +++ b/src/pages/Home/index.tsx @@ -50,10 +50,7 @@ const Home: FC = () => { streamChangeCleanup(stream); navigate(`/${stream}/logs`); }, []); - - if (userSpecficStreams === null) return null; - if ((Array.isArray(userSpecficStreams) && userSpecficStreams.length === 0)) - return ; + if (Array.isArray(userSpecficStreams) && userSpecficStreams.length === 0) return ; return ( diff --git a/src/pages/Systems/Ingestors.tsx b/src/pages/Systems/Ingestors.tsx index 8d8af175..1a3687fe 100644 --- a/src/pages/Systems/Ingestors.tsx +++ b/src/pages/Systems/Ingestors.tsx @@ -1,3857 +1,142 @@ -import { Stack, Text, Table, Tooltip, Badge, ThemeIcon, Popover } from '@mantine/core'; -import { FC, useEffect } from 'react'; +import { Stack, Text, Table, Tooltip, ThemeIcon, Popover, Skeleton } from '@mantine/core'; +import { FC, useEffect, useState } from 'react'; import classes from './styles/Systems.module.css'; -import { IconAlertCircle, IconBrandDatabricks, IconInfoCircleFilled, IconX } from '@tabler/icons-react'; -import { HumanizeNumber, formatBytes } from '@/utils/formatBytes'; -import { Axios } from '@/api/axios'; -import text from './mock.txt'; +import { IconAlertCircle, IconBrandDatabricks, IconX } from '@tabler/icons-react'; +import { useClusterInfo } from '@/hooks/useClusterInfo'; +import { Ingestor } from '@/@types/parseable/api/clusterInfo'; +import { PrometheusMetricResponse, SanitizedMetrics, parsePrometheusResponse, sanitizeIngestorData } from './utils'; -const ingestorsData = [ - { - status: 'online', - errors: ['Error type 1', 'Error type 2'], - totalMemory: 2147483648, - consumedMemory: 1398102221, - ip: '127.0.0.1', - region: 'US-East', - name: 'Ingestor-01-US-East', - totalStorage: 128000000000, - usedStorage: 110300000000, - cpu: 49, - stagingDirectory: '/parseable/stage', - store: '/parseable/data', - port: 8001, - filesCount: 2131231242, - stagingDataSize: 42344234, - parseable_events_ingested: [ - { - format: 'json', - stream: 'azureapimlog', - value: 132, - }, - { - format: 'json', - stream: 'backend', - value: 27078249, - }, - { - format: 'json', - stream: 'druide2e', - value: 9416, - }, - { - format: 'json', - stream: 'frontend', - value: 27306182, - }, - ], - }, - { - status: 'online', - errors: [], - totalMemory: 4294967296, - consumedMemory: 3422552064, - ip: '127.0.0.1', - region: 'US-East', - name: 'Ingestor-02-US-East', - totalStorage: 256000000000, - usedStorage: 110000000000, - cpu: 89, - stagingDirectory: '/parseable/stage', - store: '/parseable/data', - port: 8002, - filesCount: 242423534, - stagingDataSize: 23463246, - parseable_events_ingested: [ - { - format: 'json', - stream: 'azureapimlog', - value: 132, - }, - { - format: 'json', - stream: 'backend', - value: 27078249, - }, - { - format: 'json', - stream: 'druide2e', - value: 9416, - }, - { - format: 'json', - stream: 'frontend', - value: 27306182, - }, - ], - }, - { - status: 'offline', - errors: [], - totalMemory: 2147483648, - consumedMemory: 945913408, - ip: '127.0.0.1', - region: 'US-East', - name: 'Ingestor-03-US-East', - totalStorage: 256000000000, - usedStorage: 23400000000, - cpu: 76, - stagingDirectory: '/parseable/stage', - store: '/parseable/data', - port: 8003, - filesCount: 6456323, - stagingDataSize: 321234, - parseable_events_ingested: [ - { - format: 'json', - stream: 'azureapimlog', - value: 132, - }, - { - format: 'json', - stream: 'backend', - value: 27078249, - }, - { - format: 'json', - stream: 'druide2e', - value: 9416, - }, - { - format: 'json', - stream: 'frontend', - value: 27306182, - }, - ], - }, - { - status: 'online', - errors: [], - totalMemory: 2147483648, - consumedMemory: 214748364, - ip: '127.0.0.1', - region: 'US-East', - name: 'Ingestor-04-US-East', - totalStorage: 256000000000, - usedStorage: 67830000000, - cpu: 56, - stagingDirectory: '/parseable/stage', - store: '/parseable/data', - port: 8004, - filesCount: 7453744555, - stagingDataSize: 9242349, - parseable_events_ingested: [ - { - format: 'json', - stream: 'azureapimlog', - value: 132, - }, - { - format: 'json', - stream: 'backend', - value: 27078249, - }, - { - format: 'json', - stream: 'druide2e', - value: 9416, - }, - { - format: 'json', - stream: 'frontend', - value: 27306182, - }, - ], - }, -]; - -function bytesToGiB(bytes: number, appendSuffix: boolean = true) { - if (bytes === 0) return '0 GiB'; - - const gigabytes = bytes / (1024 * 1024 * 1024); - const prefix = gigabytes % 1 === 0 ? gigabytes : gigabytes.toFixed(1); - - if (!appendSuffix) return prefix; - - return `${prefix} GiB`; -} - -const sanitizeBytes = (size: any) => { - return formatBytes(size); -}; - -type UsageIndicatorProps = { - label: string; - percentage: number | null; +type IngestorTableRow = { + ingestor: Ingestor; }; -const parsedMetrics = { - parseable_events_ingested: [ - { - format: 'json', - stream: 'azureapimlog', - value: 132, - }, - { - format: 'json', - stream: 'backend', - value: 27078249, - }, - { - format: 'json', - stream: 'druide2e', - value: 9416, - }, - { - format: 'json', - stream: 'frontend', - value: 27306182, - }, - ], - parseable_events_ingested_size: [ - { - format: 'json', - stream: 'azureapimlog', - value: 287478, - }, - { - format: 'json', - stream: 'backend', - value: 8899325195, - }, - { - format: 'json', - stream: 'druide2e', - value: 5546280, - }, - { - format: 'json', - stream: 'frontend', - value: 7712739750, - }, - ], - parseable_incoming_requests: [ - { - endpoint: '', - method: 'GET', - status: '200', - value: 610, - }, - { - endpoint: '', - method: 'GET', - status: '304', - value: 859, - }, - { - endpoint: '', - method: 'GET', - status: '400', - value: 12, - }, - { - endpoint: '', - method: 'HEAD', - status: '200', - value: 491, - }, - { - endpoint: '', - method: 'OPTIONS', - status: '405', - value: 3, - }, - { - endpoint: '', - method: 'POST', - status: '405', - value: 13, - }, - { - endpoint: '*', - method: 'M-SEARCH', - status: '404', - value: 2, - }, - { - endpoint: '/api/v1', - method: 'GET', - status: '404', - value: 1, - }, - { - endpoint: '/api/v1/about', - method: 'GET', - status: '200', - value: 70, - }, - { - endpoint: '/api/v1/ingest', - method: 'POST', - status: '200', - value: 6088833, - }, - { - endpoint: '/api/v1/log-stream', - method: 'GET', - status: '404', - value: 1, - }, - { - endpoint: '/api/v1/logstream', - method: 'GET', - status: '200', - value: 77, - }, - { - endpoint: '/api/v1/logstream//schema', - method: 'GET', - status: '404', - value: 3, - }, - { - endpoint: '/api/v1/metrics', - method: 'GET', - status: '200', - value: 64, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '301', - value: 3, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '400', - value: 1, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '301', - value: 19, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '307', - value: 3, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '400', - value: 1, - }, - { - endpoint: '/api/v1/o/logout', - method: 'GET', - status: '301', - value: 13, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '200', - value: 556, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '400', - value: 37, - }, - { - endpoint: '/api/v1/role', - method: 'GET', - status: '200', - value: 14, - }, - { - endpoint: '/api/v1/role/default', - method: 'GET', - status: '200', - value: 7, - }, - { - endpoint: '/api/v1/user', - method: 'GET', - status: '200', - value: 7, - }, - { - endpoint: '/api/v1/user//role', - method: 'GET', - status: '404', - value: 3, - }, - ], - parseable_local_fs_response_time_bucket: [ - { - method: 'GET', - status: '200', - le: '0.005', - value: 22377, - }, - { - method: 'GET', - status: '200', - le: '0.01', - value: 22403, - }, - { - method: 'GET', - status: '200', - le: '0.025', - value: 22413, - }, - { - method: 'GET', - status: '200', - le: '0.05', - value: 22420, - }, - { - method: 'GET', - status: '200', - le: '0.1', - value: 22423, - }, - { - method: 'GET', - status: '200', - le: '0.25', - value: 22425, - }, - { - method: 'GET', - status: '200', - le: '0.5', - value: 22425, - }, - { - method: 'GET', - status: '200', - le: '1', - value: 22425, - }, - { - method: 'GET', - status: '200', - le: '2.5', - value: 22425, - }, - { - method: 'GET', - status: '200', - le: '5', - value: 22425, - }, - { - method: 'GET', - status: '200', - le: '10', - value: 22425, - }, - { - method: 'GET', - status: '200', - le: '+Inf', - value: 22425, - }, - { - method: 'GET', - status: '400', - le: '0.005', - value: 3, - }, - { - method: 'GET', - status: '400', - le: '0.01', - value: 3, - }, - { - method: 'GET', - status: '400', - le: '0.025', - value: 3, - }, - { - method: 'GET', - status: '400', - le: '0.05', - value: 3, - }, - { - method: 'GET', - status: '400', - le: '0.1', - value: 3, - }, - { - method: 'GET', - status: '400', - le: '0.25', - value: 3, - }, - { - method: 'GET', - status: '400', - le: '0.5', - value: 3, - }, - { - method: 'GET', - status: '400', - le: '1', - value: 3, - }, - { - method: 'GET', - status: '400', - le: '2.5', - value: 3, - }, - { - method: 'GET', - status: '400', - le: '5', - value: 3, - }, - { - method: 'GET', - status: '400', - le: '10', - value: 3, - }, - { - method: 'GET', - status: '400', - le: '+Inf', - value: 3, - }, - { - method: 'PUT', - status: '200', - le: '0.005', - value: 15495, - }, - { - method: 'PUT', - status: '200', - le: '0.01', - value: 15686, - }, - { - method: 'PUT', - status: '200', - le: '0.025', - value: 15697, - }, - { - method: 'PUT', - status: '200', - le: '0.05', - value: 15698, - }, - { - method: 'PUT', - status: '200', - le: '0.1', - value: 15698, - }, - { - method: 'PUT', - status: '200', - le: '0.25', - value: 15698, - }, - { - method: 'PUT', - status: '200', - le: '0.5', - value: 15698, - }, - { - method: 'PUT', - status: '200', - le: '1', - value: 15698, - }, - { - method: 'PUT', - status: '200', - le: '2.5', - value: 15698, - }, - { - method: 'PUT', - status: '200', - le: '5', - value: 15698, - }, - { - method: 'PUT', - status: '200', - le: '10', - value: 15698, - }, - { - method: 'PUT', - status: '200', - le: '+Inf', - value: 15698, - }, - ], - parseable_local_fs_response_time_sum: [ - { - method: 'GET', - status: '200', - value: 5, - }, - { - method: 'GET', - status: '400', - value: 0, - }, - { - method: 'PUT', - status: '200', - value: 13, - }, - ], - parseable_local_fs_response_time_count: [ - { - method: 'GET', - status: '200', - value: 22425, - }, - { - method: 'GET', - status: '400', - value: 3, - }, - { - method: 'PUT', - status: '200', - value: 15698, - }, - ], - parseable_query_execute_time_bucket: [ - { - stream: 'azureapimlog', - le: '0.005', - value: 20, - }, - { - stream: 'azureapimlog', - le: '0.01', - value: 51, - }, - { - stream: 'azureapimlog', - le: '0.025', - value: 77, - }, - { - stream: 'azureapimlog', - le: '0.05', - value: 80, - }, - { - stream: 'azureapimlog', - le: '0.1', - value: 82, - }, - { - stream: 'azureapimlog', - le: '0.25', - value: 82, - }, - { - stream: 'azureapimlog', - le: '0.5', - value: 82, - }, - { - stream: 'azureapimlog', - le: '1', - value: 82, - }, - { - stream: 'azureapimlog', - le: '2.5', - value: 82, - }, - { - stream: 'azureapimlog', - le: '5', - value: 82, - }, - { - stream: 'azureapimlog', - le: '10', - value: 82, - }, - { - stream: 'azureapimlog', - le: '+Inf', - value: 82, - }, - { - stream: 'backend', - le: '0.005', - value: 0, - }, - { - stream: 'backend', - le: '0.01', - value: 2, - }, - { - stream: 'backend', - le: '0.025', - value: 92, - }, - { - stream: 'backend', - le: '0.05', - value: 165, - }, - { - stream: 'backend', - le: '0.1', - value: 219, - }, - { - stream: 'backend', - le: '0.25', - value: 297, - }, - { - stream: 'backend', - le: '0.5', - value: 332, - }, - { - stream: 'backend', - le: '1', - value: 337, - }, - { - stream: 'backend', - le: '2.5', - value: 339, - }, - { - stream: 'backend', - le: '5', - value: 339, - }, - { - stream: 'backend', - le: '10', - value: 339, - }, - { - stream: 'backend', - le: '+Inf', - value: 339, - }, - { - stream: 'druide2e', - le: '0.005', - value: 0, - }, - { - stream: 'druide2e', - le: '0.01', - value: 11, - }, - { - stream: 'druide2e', - le: '0.025', - value: 19, - }, - { - stream: 'druide2e', - le: '0.05', - value: 20, - }, - { - stream: 'druide2e', - le: '0.1', - value: 20, - }, - { - stream: 'druide2e', - le: '0.25', - value: 20, - }, - { - stream: 'druide2e', - le: '0.5', - value: 20, - }, - { - stream: 'druide2e', - le: '1', - value: 20, - }, - { - stream: 'druide2e', - le: '2.5', - value: 20, - }, - { - stream: 'druide2e', - le: '5', - value: 20, - }, - { - stream: 'druide2e', - le: '10', - value: 20, - }, - { - stream: 'druide2e', - le: '+Inf', - value: 20, - }, - { - stream: 'frontend', - le: '0.005', - value: 0, - }, - { - stream: 'frontend', - le: '0.01', - value: 0, - }, - { - stream: 'frontend', - le: '0.025', - value: 17, - }, - { - stream: 'frontend', - le: '0.05', - value: 30, - }, - { - stream: 'frontend', - le: '0.1', - value: 49, - }, - { - stream: 'frontend', - le: '0.25', - value: 86, - }, - { - stream: 'frontend', - le: '0.5', - value: 106, - }, - { - stream: 'frontend', - le: '1', - value: 107, - }, - { - stream: 'frontend', - le: '2.5', - value: 111, - }, - { - stream: 'frontend', - le: '5', - value: 115, - }, - { - stream: 'frontend', - le: '10', - value: 115, - }, - { - stream: 'frontend', - le: '+Inf', - value: 115, - }, - ], - parseable_query_execute_time_sum: [ - { - stream: 'azureapimlog', - value: 0, - }, - { - stream: 'backend', - value: 38, - }, - { - stream: 'druide2e', - value: 0, - }, - { - stream: 'frontend', - value: 35, - }, - ], - parseable_query_execute_time_count: [ - { - stream: 'azureapimlog', - value: 82, - }, - { - stream: 'backend', - value: 339, - }, - { - stream: 'druide2e', - value: 20, - }, - { - stream: 'frontend', - value: 115, - }, - ], - parseable_response_code: [ - { - endpoint: '', - method: 'GET', - statuscode: '200', - type: '200', - value: 610, - }, - { - endpoint: '', - method: 'GET', - statuscode: '304', - type: '300', - value: 859, - }, - { - endpoint: '', - method: 'GET', - statuscode: '400', - type: '400', - value: 12, - }, - { - endpoint: '', - method: 'HEAD', - statuscode: '200', - type: '200', - value: 491, - }, - { - endpoint: '', - method: 'OPTIONS', - statuscode: '405', - type: '400', - value: 3, - }, - { - endpoint: '', - method: 'POST', - statuscode: '405', - type: '400', - value: 13, - }, - { - endpoint: '*', - method: 'M-SEARCH', - statuscode: '404', - type: '400', - value: 2, - }, - { - endpoint: '/api/v1', - method: 'GET', - statuscode: '404', - type: '400', - value: 1, - }, - { - endpoint: '/api/v1/about', - method: 'GET', - statuscode: '200', - type: '200', - value: 70, - }, - { - endpoint: '/api/v1/ingest', - method: 'POST', - statuscode: '200', - type: '200', - value: 6088833, - }, - { - endpoint: '/api/v1/log-stream', - method: 'GET', - statuscode: '404', - type: '400', - value: 1, - }, - { - endpoint: '/api/v1/logstream', - method: 'GET', - statuscode: '200', - type: '200', - value: 77, - }, - { - endpoint: '/api/v1/logstream//schema', - method: 'GET', - statuscode: '404', - type: '400', - value: 3, - }, - { - endpoint: '/api/v1/metrics', - method: 'GET', - statuscode: '200', - type: '200', - value: 64, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - statuscode: '301', - type: '300', - value: 3, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - statuscode: '400', - type: '400', - value: 1, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - statuscode: '301', - type: '300', - value: 19, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - statuscode: '307', - type: '300', - value: 3, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - statuscode: '400', - type: '400', - value: 1, - }, - { - endpoint: '/api/v1/o/logout', - method: 'GET', - statuscode: '301', - type: '300', - value: 13, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - statuscode: '200', - type: '200', - value: 556, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - statuscode: '400', - type: '400', - value: 37, - }, - { - endpoint: '/api/v1/role', - method: 'GET', - statuscode: '200', - type: '200', - value: 14, - }, - { - endpoint: '/api/v1/role/default', - method: 'GET', - statuscode: '200', - type: '200', - value: 7, - }, - { - endpoint: '/api/v1/user', - method: 'GET', - statuscode: '200', - type: '200', - value: 7, - }, - { - endpoint: '/api/v1/user//role', - method: 'GET', - statuscode: '404', - type: '400', - value: 3, - }, - ], - parseable_response_time_bucket: [ - { - endpoint: '', - method: 'GET', - status: '200', - le: '0.005', - value: 488, - }, - { - endpoint: '', - method: 'GET', - status: '200', - le: '0.01', - value: 517, - }, - { - endpoint: '', - method: 'GET', - status: '200', - le: '0.025', - value: 554, - }, - { - endpoint: '', - method: 'GET', - status: '200', - le: '0.05', - value: 580, - }, - { - endpoint: '', - method: 'GET', - status: '200', - le: '0.1', - value: 598, - }, - { - endpoint: '', - method: 'GET', - status: '200', - le: '0.25', - value: 607, - }, - { - endpoint: '', - method: 'GET', - status: '200', - le: '0.5', - value: 609, - }, - { - endpoint: '', - method: 'GET', - status: '200', - le: '1', - value: 610, - }, - { - endpoint: '', - method: 'GET', - status: '200', - le: '2.5', - value: 610, - }, - { - endpoint: '', - method: 'GET', - status: '200', - le: '5', - value: 610, - }, - { - endpoint: '', - method: 'GET', - status: '200', - le: '10', - value: 610, - }, - { - endpoint: '', - method: 'GET', - status: '200', - le: '+Inf', - value: 610, - }, - { - endpoint: '', - method: 'GET', - status: '304', - le: '0.005', - value: 852, - }, - { - endpoint: '', - method: 'GET', - status: '304', - le: '0.01', - value: 855, - }, - { - endpoint: '', - method: 'GET', - status: '304', - le: '0.025', - value: 857, - }, - { - endpoint: '', - method: 'GET', - status: '304', - le: '0.05', - value: 858, - }, - { - endpoint: '', - method: 'GET', - status: '304', - le: '0.1', - value: 859, - }, - { - endpoint: '', - method: 'GET', - status: '304', - le: '0.25', - value: 859, - }, - { - endpoint: '', - method: 'GET', - status: '304', - le: '0.5', - value: 859, - }, - { - endpoint: '', - method: 'GET', - status: '304', - le: '1', - value: 859, - }, - { - endpoint: '', - method: 'GET', - status: '304', - le: '2.5', - value: 859, - }, - { - endpoint: '', - method: 'GET', - status: '304', - le: '5', - value: 859, - }, - { - endpoint: '', - method: 'GET', - status: '304', - le: '10', - value: 859, - }, - { - endpoint: '', - method: 'GET', - status: '304', - le: '+Inf', - value: 859, - }, - { - endpoint: '', - method: 'GET', - status: '400', - le: '0.005', - value: 12, - }, - { - endpoint: '', - method: 'GET', - status: '400', - le: '0.01', - value: 12, - }, - { - endpoint: '', - method: 'GET', - status: '400', - le: '0.025', - value: 12, - }, - { - endpoint: '', - method: 'GET', - status: '400', - le: '0.05', - value: 12, - }, - { - endpoint: '', - method: 'GET', - status: '400', - le: '0.1', - value: 12, - }, - { - endpoint: '', - method: 'GET', - status: '400', - le: '0.25', - value: 12, - }, - { - endpoint: '', - method: 'GET', - status: '400', - le: '0.5', - value: 12, - }, - { - endpoint: '', - method: 'GET', - status: '400', - le: '1', - value: 12, - }, - { - endpoint: '', - method: 'GET', - status: '400', - le: '2.5', - value: 12, - }, - { - endpoint: '', - method: 'GET', - status: '400', - le: '5', - value: 12, - }, - { - endpoint: '', - method: 'GET', - status: '400', - le: '10', - value: 12, - }, - { - endpoint: '', - method: 'GET', - status: '400', - le: '+Inf', - value: 12, - }, - { - endpoint: '', - method: 'HEAD', - status: '200', - le: '0.005', - value: 491, - }, - { - endpoint: '', - method: 'HEAD', - status: '200', - le: '0.01', - value: 491, - }, - { - endpoint: '', - method: 'HEAD', - status: '200', - le: '0.025', - value: 491, - }, - { - endpoint: '', - method: 'HEAD', - status: '200', - le: '0.05', - value: 491, - }, - { - endpoint: '', - method: 'HEAD', - status: '200', - le: '0.1', - value: 491, - }, - { - endpoint: '', - method: 'HEAD', - status: '200', - le: '0.25', - value: 491, - }, - { - endpoint: '', - method: 'HEAD', - status: '200', - le: '0.5', - value: 491, - }, - { - endpoint: '', - method: 'HEAD', - status: '200', - le: '1', - value: 491, - }, - { - endpoint: '', - method: 'HEAD', - status: '200', - le: '2.5', - value: 491, - }, - { - endpoint: '', - method: 'HEAD', - status: '200', - le: '5', - value: 491, - }, - { - endpoint: '', - method: 'HEAD', - status: '200', - le: '10', - value: 491, - }, - { - endpoint: '', - method: 'HEAD', - status: '200', - le: '+Inf', - value: 491, - }, - { - endpoint: '', - method: 'OPTIONS', - status: '405', - le: '0.005', - value: 3, - }, - { - endpoint: '', - method: 'OPTIONS', - status: '405', - le: '0.01', - value: 3, - }, - { - endpoint: '', - method: 'OPTIONS', - status: '405', - le: '0.025', - value: 3, - }, - { - endpoint: '', - method: 'OPTIONS', - status: '405', - le: '0.05', - value: 3, - }, - { - endpoint: '', - method: 'OPTIONS', - status: '405', - le: '0.1', - value: 3, - }, - { - endpoint: '', - method: 'OPTIONS', - status: '405', - le: '0.25', - value: 3, - }, - { - endpoint: '', - method: 'OPTIONS', - status: '405', - le: '0.5', - value: 3, - }, - { - endpoint: '', - method: 'OPTIONS', - status: '405', - le: '1', - value: 3, - }, - { - endpoint: '', - method: 'OPTIONS', - status: '405', - le: '2.5', - value: 3, - }, - { - endpoint: '', - method: 'OPTIONS', - status: '405', - le: '5', - value: 3, - }, - { - endpoint: '', - method: 'OPTIONS', - status: '405', - le: '10', - value: 3, - }, - { - endpoint: '', - method: 'OPTIONS', - status: '405', - le: '+Inf', - value: 3, - }, - { - endpoint: '', - method: 'POST', - status: '405', - le: '0.005', - value: 13, - }, - { - endpoint: '', - method: 'POST', - status: '405', - le: '0.01', - value: 13, - }, - { - endpoint: '', - method: 'POST', - status: '405', - le: '0.025', - value: 13, - }, - { - endpoint: '', - method: 'POST', - status: '405', - le: '0.05', - value: 13, - }, - { - endpoint: '', - method: 'POST', - status: '405', - le: '0.1', - value: 13, - }, - { - endpoint: '', - method: 'POST', - status: '405', - le: '0.25', - value: 13, - }, - { - endpoint: '', - method: 'POST', - status: '405', - le: '0.5', - value: 13, - }, - { - endpoint: '', - method: 'POST', - status: '405', - le: '1', - value: 13, - }, - { - endpoint: '', - method: 'POST', - status: '405', - le: '2.5', - value: 13, - }, - { - endpoint: '', - method: 'POST', - status: '405', - le: '5', - value: 13, - }, - { - endpoint: '', - method: 'POST', - status: '405', - le: '10', - value: 13, - }, - { - endpoint: '', - method: 'POST', - status: '405', - le: '+Inf', - value: 13, - }, - { - endpoint: '*', - method: 'M-SEARCH', - status: '404', - le: '0.005', - value: 2, - }, - { - endpoint: '*', - method: 'M-SEARCH', - status: '404', - le: '0.01', - value: 2, - }, - { - endpoint: '*', - method: 'M-SEARCH', - status: '404', - le: '0.025', - value: 2, - }, - { - endpoint: '*', - method: 'M-SEARCH', - status: '404', - le: '0.05', - value: 2, - }, - { - endpoint: '*', - method: 'M-SEARCH', - status: '404', - le: '0.1', - value: 2, - }, - { - endpoint: '*', - method: 'M-SEARCH', - status: '404', - le: '0.25', - value: 2, - }, - { - endpoint: '*', - method: 'M-SEARCH', - status: '404', - le: '0.5', - value: 2, - }, - { - endpoint: '*', - method: 'M-SEARCH', - status: '404', - le: '1', - value: 2, - }, - { - endpoint: '*', - method: 'M-SEARCH', - status: '404', - le: '2.5', - value: 2, - }, - { - endpoint: '*', - method: 'M-SEARCH', - status: '404', - le: '5', - value: 2, - }, - { - endpoint: '*', - method: 'M-SEARCH', - status: '404', - le: '10', - value: 2, - }, - { - endpoint: '*', - method: 'M-SEARCH', - status: '404', - le: '+Inf', - value: 2, - }, - { - endpoint: '/api/v1', - method: 'GET', - status: '404', - le: '0.005', - value: 1, - }, - { - endpoint: '/api/v1', - method: 'GET', - status: '404', - le: '0.01', - value: 1, - }, - { - endpoint: '/api/v1', - method: 'GET', - status: '404', - le: '0.025', - value: 1, - }, - { - endpoint: '/api/v1', - method: 'GET', - status: '404', - le: '0.05', - value: 1, - }, - { - endpoint: '/api/v1', - method: 'GET', - status: '404', - le: '0.1', - value: 1, - }, - { - endpoint: '/api/v1', - method: 'GET', - status: '404', - le: '0.25', - value: 1, - }, - { - endpoint: '/api/v1', - method: 'GET', - status: '404', - le: '0.5', - value: 1, - }, - { - endpoint: '/api/v1', - method: 'GET', - status: '404', - le: '1', - value: 1, - }, - { - endpoint: '/api/v1', - method: 'GET', - status: '404', - le: '2.5', - value: 1, - }, - { - endpoint: '/api/v1', - method: 'GET', - status: '404', - le: '5', - value: 1, - }, - { - endpoint: '/api/v1', - method: 'GET', - status: '404', - le: '10', - value: 1, - }, - { - endpoint: '/api/v1', - method: 'GET', - status: '404', - le: '+Inf', - value: 1, - }, - { - endpoint: '/api/v1/about', - method: 'GET', - status: '200', - le: '0.005', - value: 0, - }, - { - endpoint: '/api/v1/about', - method: 'GET', - status: '200', - le: '0.01', - value: 0, - }, - { - endpoint: '/api/v1/about', - method: 'GET', - status: '200', - le: '0.025', - value: 0, - }, - { - endpoint: '/api/v1/about', - method: 'GET', - status: '200', - le: '0.05', - value: 0, - }, - { - endpoint: '/api/v1/about', - method: 'GET', - status: '200', - le: '0.1', - value: 0, - }, - { - endpoint: '/api/v1/about', - method: 'GET', - status: '200', - le: '0.25', - value: 0, - }, - { - endpoint: '/api/v1/about', - method: 'GET', - status: '200', - le: '0.5', - value: 0, - }, - { - endpoint: '/api/v1/about', - method: 'GET', - status: '200', - le: '1', - value: 66, - }, - { - endpoint: '/api/v1/about', - method: 'GET', - status: '200', - le: '2.5', - value: 70, - }, - { - endpoint: '/api/v1/about', - method: 'GET', - status: '200', - le: '5', - value: 70, - }, - { - endpoint: '/api/v1/about', - method: 'GET', - status: '200', - le: '10', - value: 70, - }, - { - endpoint: '/api/v1/about', - method: 'GET', - status: '200', - le: '+Inf', - value: 70, - }, - { - endpoint: '/api/v1/ingest', - method: 'POST', - status: '200', - le: '0.005', - value: 6087344, - }, - { - endpoint: '/api/v1/ingest', - method: 'POST', - status: '200', - le: '0.01', - value: 6088376, - }, - { - endpoint: '/api/v1/ingest', - method: 'POST', - status: '200', - le: '0.025', - value: 6088679, - }, - { - endpoint: '/api/v1/ingest', - method: 'POST', - status: '200', - le: '0.05', - value: 6088777, - }, - { - endpoint: '/api/v1/ingest', - method: 'POST', - status: '200', - le: '0.1', - value: 6088813, - }, - { - endpoint: '/api/v1/ingest', - method: 'POST', - status: '200', - le: '0.25', - value: 6088830, - }, - { - endpoint: '/api/v1/ingest', - method: 'POST', - status: '200', - le: '0.5', - value: 6088833, - }, - { - endpoint: '/api/v1/ingest', - method: 'POST', - status: '200', - le: '1', - value: 6088833, - }, - { - endpoint: '/api/v1/ingest', - method: 'POST', - status: '200', - le: '2.5', - value: 6088833, - }, - { - endpoint: '/api/v1/ingest', - method: 'POST', - status: '200', - le: '5', - value: 6088833, - }, - { - endpoint: '/api/v1/ingest', - method: 'POST', - status: '200', - le: '10', - value: 6088833, - }, - { - endpoint: '/api/v1/ingest', - method: 'POST', - status: '200', - le: '+Inf', - value: 6088833, - }, - { - endpoint: '/api/v1/log-stream', - method: 'GET', - status: '404', - le: '0.005', - value: 1, - }, - { - endpoint: '/api/v1/log-stream', - method: 'GET', - status: '404', - le: '0.01', - value: 1, - }, - { - endpoint: '/api/v1/log-stream', - method: 'GET', - status: '404', - le: '0.025', - value: 1, - }, - { - endpoint: '/api/v1/log-stream', - method: 'GET', - status: '404', - le: '0.05', - value: 1, - }, - { - endpoint: '/api/v1/log-stream', - method: 'GET', - status: '404', - le: '0.1', - value: 1, - }, - { - endpoint: '/api/v1/log-stream', - method: 'GET', - status: '404', - le: '0.25', - value: 1, - }, - { - endpoint: '/api/v1/log-stream', - method: 'GET', - status: '404', - le: '0.5', - value: 1, - }, - { - endpoint: '/api/v1/log-stream', - method: 'GET', - status: '404', - le: '1', - value: 1, - }, - { - endpoint: '/api/v1/log-stream', - method: 'GET', - status: '404', - le: '2.5', - value: 1, - }, - { - endpoint: '/api/v1/log-stream', - method: 'GET', - status: '404', - le: '5', - value: 1, - }, - { - endpoint: '/api/v1/log-stream', - method: 'GET', - status: '404', - le: '10', - value: 1, - }, - { - endpoint: '/api/v1/log-stream', - method: 'GET', - status: '404', - le: '+Inf', - value: 1, - }, - { - endpoint: '/api/v1/logstream', - method: 'GET', - status: '200', - le: '0.005', - value: 24, - }, - { - endpoint: '/api/v1/logstream', - method: 'GET', - status: '200', - le: '0.01', - value: 66, - }, - { - endpoint: '/api/v1/logstream', - method: 'GET', - status: '200', - le: '0.025', - value: 77, - }, - { - endpoint: '/api/v1/logstream', - method: 'GET', - status: '200', - le: '0.05', - value: 77, - }, - { - endpoint: '/api/v1/logstream', - method: 'GET', - status: '200', - le: '0.1', - value: 77, - }, - { - endpoint: '/api/v1/logstream', - method: 'GET', - status: '200', - le: '0.25', - value: 77, - }, - { - endpoint: '/api/v1/logstream', - method: 'GET', - status: '200', - le: '0.5', - value: 77, - }, - { - endpoint: '/api/v1/logstream', - method: 'GET', - status: '200', - le: '1', - value: 77, - }, - { - endpoint: '/api/v1/logstream', - method: 'GET', - status: '200', - le: '2.5', - value: 77, - }, - { - endpoint: '/api/v1/logstream', - method: 'GET', - status: '200', - le: '5', - value: 77, - }, - { - endpoint: '/api/v1/logstream', - method: 'GET', - status: '200', - le: '10', - value: 77, - }, - { - endpoint: '/api/v1/logstream', - method: 'GET', - status: '200', - le: '+Inf', - value: 77, - }, - { - endpoint: '/api/v1/logstream//schema', - method: 'GET', - status: '404', - le: '0.005', - value: 3, - }, - { - endpoint: '/api/v1/logstream//schema', - method: 'GET', - status: '404', - le: '0.01', - value: 3, - }, - { - endpoint: '/api/v1/logstream//schema', - method: 'GET', - status: '404', - le: '0.025', - value: 3, - }, - { - endpoint: '/api/v1/logstream//schema', - method: 'GET', - status: '404', - le: '0.05', - value: 3, - }, - { - endpoint: '/api/v1/logstream//schema', - method: 'GET', - status: '404', - le: '0.1', - value: 3, - }, - { - endpoint: '/api/v1/logstream//schema', - method: 'GET', - status: '404', - le: '0.25', - value: 3, - }, - { - endpoint: '/api/v1/logstream//schema', - method: 'GET', - status: '404', - le: '0.5', - value: 3, - }, - { - endpoint: '/api/v1/logstream//schema', - method: 'GET', - status: '404', - le: '1', - value: 3, - }, - { - endpoint: '/api/v1/logstream//schema', - method: 'GET', - status: '404', - le: '2.5', - value: 3, - }, - { - endpoint: '/api/v1/logstream//schema', - method: 'GET', - status: '404', - le: '5', - value: 3, - }, - { - endpoint: '/api/v1/logstream//schema', - method: 'GET', - status: '404', - le: '10', - value: 3, - }, - { - endpoint: '/api/v1/logstream//schema', - method: 'GET', - status: '404', - le: '+Inf', - value: 3, - }, - { - endpoint: '/api/v1/metrics', - method: 'GET', - status: '200', - le: '0.005', - value: 60, - }, - { - endpoint: '/api/v1/metrics', - method: 'GET', - status: '200', - le: '0.01', - value: 64, - }, - { - endpoint: '/api/v1/metrics', - method: 'GET', - status: '200', - le: '0.025', - value: 64, - }, - { - endpoint: '/api/v1/metrics', - method: 'GET', - status: '200', - le: '0.05', - value: 64, - }, - { - endpoint: '/api/v1/metrics', - method: 'GET', - status: '200', - le: '0.1', - value: 64, - }, - { - endpoint: '/api/v1/metrics', - method: 'GET', - status: '200', - le: '0.25', - value: 64, - }, - { - endpoint: '/api/v1/metrics', - method: 'GET', - status: '200', - le: '0.5', - value: 64, - }, - { - endpoint: '/api/v1/metrics', - method: 'GET', - status: '200', - le: '1', - value: 64, - }, - { - endpoint: '/api/v1/metrics', - method: 'GET', - status: '200', - le: '2.5', - value: 64, - }, - { - endpoint: '/api/v1/metrics', - method: 'GET', - status: '200', - le: '5', - value: 64, - }, - { - endpoint: '/api/v1/metrics', - method: 'GET', - status: '200', - le: '10', - value: 64, - }, - { - endpoint: '/api/v1/metrics', - method: 'GET', - status: '200', - le: '+Inf', - value: 64, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '301', - le: '0.005', - value: 0, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '301', - le: '0.01', - value: 0, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '301', - le: '0.025', - value: 0, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '301', - le: '0.05', - value: 0, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '301', - le: '0.1', - value: 0, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '301', - le: '0.25', - value: 0, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '301', - le: '0.5', - value: 3, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '301', - le: '1', - value: 3, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '301', - le: '2.5', - value: 3, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '301', - le: '5', - value: 3, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '301', - le: '10', - value: 3, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '301', - le: '+Inf', - value: 3, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '400', - le: '0.005', - value: 1, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '400', - le: '0.01', - value: 1, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '400', - le: '0.025', - value: 1, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '400', - le: '0.05', - value: 1, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '400', - le: '0.1', - value: 1, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '400', - le: '0.25', - value: 1, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '400', - le: '0.5', - value: 1, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '400', - le: '1', - value: 1, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '400', - le: '2.5', - value: 1, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '400', - le: '5', - value: 1, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '400', - le: '10', - value: 1, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '400', - le: '+Inf', - value: 1, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '301', - le: '0.005', - value: 0, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '301', - le: '0.01', - value: 0, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '301', - le: '0.025', - value: 0, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '301', - le: '0.05', - value: 10, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '301', - le: '0.1', - value: 19, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '301', - le: '0.25', - value: 19, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '301', - le: '0.5', - value: 19, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '301', - le: '1', - value: 19, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '301', - le: '2.5', - value: 19, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '301', - le: '5', - value: 19, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '301', - le: '10', - value: 19, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '301', - le: '+Inf', - value: 19, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '307', - le: '0.005', - value: 3, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '307', - le: '0.01', - value: 3, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '307', - le: '0.025', - value: 3, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '307', - le: '0.05', - value: 3, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '307', - le: '0.1', - value: 3, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '307', - le: '0.25', - value: 3, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '307', - le: '0.5', - value: 3, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '307', - le: '1', - value: 3, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '307', - le: '2.5', - value: 3, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '307', - le: '5', - value: 3, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '307', - le: '10', - value: 3, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '307', - le: '+Inf', - value: 3, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '400', - le: '0.005', - value: 0, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '400', - le: '0.01', - value: 0, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '400', - le: '0.025', - value: 0, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '400', - le: '0.05', - value: 1, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '400', - le: '0.1', - value: 1, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '400', - le: '0.25', - value: 1, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '400', - le: '0.5', - value: 1, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '400', - le: '1', - value: 1, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '400', - le: '2.5', - value: 1, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '400', - le: '5', - value: 1, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '400', - le: '10', - value: 1, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '400', - le: '+Inf', - value: 1, - }, - { - endpoint: '/api/v1/o/logout', - method: 'GET', - status: '301', - le: '0.005', - value: 13, - }, - { - endpoint: '/api/v1/o/logout', - method: 'GET', - status: '301', - le: '0.01', - value: 13, - }, - { - endpoint: '/api/v1/o/logout', - method: 'GET', - status: '301', - le: '0.025', - value: 13, - }, - { - endpoint: '/api/v1/o/logout', - method: 'GET', - status: '301', - le: '0.05', - value: 13, - }, - { - endpoint: '/api/v1/o/logout', - method: 'GET', - status: '301', - le: '0.1', - value: 13, - }, - { - endpoint: '/api/v1/o/logout', - method: 'GET', - status: '301', - le: '0.25', - value: 13, - }, - { - endpoint: '/api/v1/o/logout', - method: 'GET', - status: '301', - le: '0.5', - value: 13, - }, - { - endpoint: '/api/v1/o/logout', - method: 'GET', - status: '301', - le: '1', - value: 13, - }, - { - endpoint: '/api/v1/o/logout', - method: 'GET', - status: '301', - le: '2.5', - value: 13, - }, - { - endpoint: '/api/v1/o/logout', - method: 'GET', - status: '301', - le: '5', - value: 13, - }, - { - endpoint: '/api/v1/o/logout', - method: 'GET', - status: '301', - le: '10', - value: 13, - }, - { - endpoint: '/api/v1/o/logout', - method: 'GET', - status: '301', - le: '+Inf', - value: 13, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '200', - le: '0.005', - value: 1, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '200', - le: '0.01', - value: 9, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '200', - le: '0.025', - value: 116, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '200', - le: '0.05', - value: 221, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '200', - le: '0.1', - value: 297, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '200', - le: '0.25', - value: 395, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '200', - le: '0.5', - value: 520, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '200', - le: '1', - value: 544, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '200', - le: '2.5', - value: 552, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '200', - le: '5', - value: 556, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '200', - le: '10', - value: 556, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '200', - le: '+Inf', - value: 556, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '400', - le: '0.005', - value: 35, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '400', - le: '0.01', - value: 35, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '400', - le: '0.025', - value: 36, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '400', - le: '0.05', - value: 37, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '400', - le: '0.1', - value: 37, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '400', - le: '0.25', - value: 37, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '400', - le: '0.5', - value: 37, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '400', - le: '1', - value: 37, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '400', - le: '2.5', - value: 37, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '400', - le: '5', - value: 37, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '400', - le: '10', - value: 37, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '400', - le: '+Inf', - value: 37, - }, - { - endpoint: '/api/v1/role', - method: 'GET', - status: '200', - le: '0.005', - value: 14, - }, - { - endpoint: '/api/v1/role', - method: 'GET', - status: '200', - le: '0.01', - value: 14, - }, - { - endpoint: '/api/v1/role', - method: 'GET', - status: '200', - le: '0.025', - value: 14, - }, - { - endpoint: '/api/v1/role', - method: 'GET', - status: '200', - le: '0.05', - value: 14, - }, - { - endpoint: '/api/v1/role', - method: 'GET', - status: '200', - le: '0.1', - value: 14, - }, - { - endpoint: '/api/v1/role', - method: 'GET', - status: '200', - le: '0.25', - value: 14, - }, - { - endpoint: '/api/v1/role', - method: 'GET', - status: '200', - le: '0.5', - value: 14, - }, - { - endpoint: '/api/v1/role', - method: 'GET', - status: '200', - le: '1', - value: 14, - }, - { - endpoint: '/api/v1/role', - method: 'GET', - status: '200', - le: '2.5', - value: 14, - }, - { - endpoint: '/api/v1/role', - method: 'GET', - status: '200', - le: '5', - value: 14, - }, - { - endpoint: '/api/v1/role', - method: 'GET', - status: '200', - le: '10', - value: 14, - }, - { - endpoint: '/api/v1/role', - method: 'GET', - status: '200', - le: '+Inf', - value: 14, - }, - { - endpoint: '/api/v1/role/default', - method: 'GET', - status: '200', - le: '0.005', - value: 7, - }, - { - endpoint: '/api/v1/role/default', - method: 'GET', - status: '200', - le: '0.01', - value: 7, - }, - { - endpoint: '/api/v1/role/default', - method: 'GET', - status: '200', - le: '0.025', - value: 7, - }, - { - endpoint: '/api/v1/role/default', - method: 'GET', - status: '200', - le: '0.05', - value: 7, - }, - { - endpoint: '/api/v1/role/default', - method: 'GET', - status: '200', - le: '0.1', - value: 7, - }, - { - endpoint: '/api/v1/role/default', - method: 'GET', - status: '200', - le: '0.25', - value: 7, - }, - { - endpoint: '/api/v1/role/default', - method: 'GET', - status: '200', - le: '0.5', - value: 7, - }, - { - endpoint: '/api/v1/role/default', - method: 'GET', - status: '200', - le: '1', - value: 7, - }, - { - endpoint: '/api/v1/role/default', - method: 'GET', - status: '200', - le: '2.5', - value: 7, - }, - { - endpoint: '/api/v1/role/default', - method: 'GET', - status: '200', - le: '5', - value: 7, - }, - { - endpoint: '/api/v1/role/default', - method: 'GET', - status: '200', - le: '10', - value: 7, - }, - { - endpoint: '/api/v1/role/default', - method: 'GET', - status: '200', - le: '+Inf', - value: 7, - }, - { - endpoint: '/api/v1/user', - method: 'GET', - status: '200', - le: '0.005', - value: 7, - }, - { - endpoint: '/api/v1/user', - method: 'GET', - status: '200', - le: '0.01', - value: 7, - }, - { - endpoint: '/api/v1/user', - method: 'GET', - status: '200', - le: '0.025', - value: 7, - }, - { - endpoint: '/api/v1/user', - method: 'GET', - status: '200', - le: '0.05', - value: 7, - }, - { - endpoint: '/api/v1/user', - method: 'GET', - status: '200', - le: '0.1', - value: 7, - }, - { - endpoint: '/api/v1/user', - method: 'GET', - status: '200', - le: '0.25', - value: 7, - }, - { - endpoint: '/api/v1/user', - method: 'GET', - status: '200', - le: '0.5', - value: 7, - }, - { - endpoint: '/api/v1/user', - method: 'GET', - status: '200', - le: '1', - value: 7, - }, - { - endpoint: '/api/v1/user', - method: 'GET', - status: '200', - le: '2.5', - value: 7, - }, - { - endpoint: '/api/v1/user', - method: 'GET', - status: '200', - le: '5', - value: 7, - }, - { - endpoint: '/api/v1/user', - method: 'GET', - status: '200', - le: '10', - value: 7, - }, - { - endpoint: '/api/v1/user', - method: 'GET', - status: '200', - le: '+Inf', - value: 7, - }, - { - endpoint: '/api/v1/user//role', - method: 'GET', - status: '404', - le: '0.005', - value: 3, - }, - { - endpoint: '/api/v1/user//role', - method: 'GET', - status: '404', - le: '0.01', - value: 3, - }, - { - endpoint: '/api/v1/user//role', - method: 'GET', - status: '404', - le: '0.025', - value: 3, - }, - { - endpoint: '/api/v1/user//role', - method: 'GET', - status: '404', - le: '0.05', - value: 3, - }, - { - endpoint: '/api/v1/user//role', - method: 'GET', - status: '404', - le: '0.1', - value: 3, - }, - { - endpoint: '/api/v1/user//role', - method: 'GET', - status: '404', - le: '0.25', - value: 3, - }, - { - endpoint: '/api/v1/user//role', - method: 'GET', - status: '404', - le: '0.5', - value: 3, - }, - { - endpoint: '/api/v1/user//role', - method: 'GET', - status: '404', - le: '1', - value: 3, - }, - { - endpoint: '/api/v1/user//role', - method: 'GET', - status: '404', - le: '2.5', - value: 3, - }, - { - endpoint: '/api/v1/user//role', - method: 'GET', - status: '404', - le: '5', - value: 3, - }, - { - endpoint: '/api/v1/user//role', - method: 'GET', - status: '404', - le: '10', - value: 3, - }, - { - endpoint: '/api/v1/user//role', - method: 'GET', - status: '404', - le: '+Inf', - value: 3, - }, - ], - parseable_response_time_sum: [ - { - endpoint: '', - method: 'GET', - status: '200', - value: 5, - }, - { - endpoint: '', - method: 'GET', - status: '304', - value: 0, - }, - { - endpoint: '', - method: 'GET', - status: '400', - value: 0, - }, - { - endpoint: '', - method: 'HEAD', - status: '200', - value: 0, - }, - { - endpoint: '', - method: 'OPTIONS', - status: '405', - value: 0, - }, - { - endpoint: '', - method: 'POST', - status: '405', - value: 0, - }, - { - endpoint: '*', - method: 'M-SEARCH', - status: '404', - value: 0, - }, - { - endpoint: '/api/v1', - method: 'GET', - status: '404', - value: 0, - }, - { - endpoint: '/api/v1/about', - method: 'GET', - status: '200', - value: 56, - }, - { - endpoint: '/api/v1/ingest', - method: 'POST', - status: '200', - value: 1548, - }, - { - endpoint: '/api/v1/log-stream', - method: 'GET', - status: '404', - value: 0, - }, - { - endpoint: '/api/v1/logstream', - method: 'GET', - status: '200', - value: 0, - }, - { - endpoint: '/api/v1/logstream//schema', - method: 'GET', - status: '404', - value: 0, - }, - { - endpoint: '/api/v1/metrics', - method: 'GET', - status: '200', - value: 0, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '301', - value: 0, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '400', - value: 0, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '301', - value: 0, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '307', - value: 0, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '400', - value: 0, - }, - { - endpoint: '/api/v1/o/logout', - method: 'GET', - status: '301', - value: 0, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '200', - value: 114, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '400', - value: 0, - }, - { - endpoint: '/api/v1/role', - method: 'GET', - status: '200', - value: 0, - }, - { - endpoint: '/api/v1/role/default', - method: 'GET', - status: '200', - value: 0, - }, - { - endpoint: '/api/v1/user', - method: 'GET', - status: '200', - value: 0, - }, - { - endpoint: '/api/v1/user//role', - method: 'GET', - status: '404', - value: 0, - }, - ], - parseable_response_time_count: [ - { - endpoint: '', - method: 'GET', - status: '200', - value: 610, - }, - { - endpoint: '', - method: 'GET', - status: '304', - value: 859, - }, - { - endpoint: '', - method: 'GET', - status: '400', - value: 12, - }, - { - endpoint: '', - method: 'HEAD', - status: '200', - value: 491, - }, - { - endpoint: '', - method: 'OPTIONS', - status: '405', - value: 3, - }, - { - endpoint: '', - method: 'POST', - status: '405', - value: 13, - }, - { - endpoint: '*', - method: 'M-SEARCH', - status: '404', - value: 2, - }, - { - endpoint: '/api/v1', - method: 'GET', - status: '404', - value: 1, - }, - { - endpoint: '/api/v1/about', - method: 'GET', - status: '200', - value: 70, - }, - { - endpoint: '/api/v1/ingest', - method: 'POST', - status: '200', - value: 6088833, - }, - { - endpoint: '/api/v1/log-stream', - method: 'GET', - status: '404', - value: 1, - }, - { - endpoint: '/api/v1/logstream', - method: 'GET', - status: '200', - value: 77, - }, - { - endpoint: '/api/v1/logstream//schema', - method: 'GET', - status: '404', - value: 3, - }, - { - endpoint: '/api/v1/metrics', - method: 'GET', - status: '200', - value: 64, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '301', - value: 3, - }, - { - endpoint: '/api/v1/o/code', - method: 'GET', - status: '400', - value: 1, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '301', - value: 19, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '307', - value: 3, - }, - { - endpoint: '/api/v1/o/login', - method: 'GET', - status: '400', - value: 1, - }, - { - endpoint: '/api/v1/o/logout', - method: 'GET', - status: '301', - value: 13, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '200', - value: 556, - }, - { - endpoint: '/api/v1/query', - method: 'POST', - status: '400', - value: 37, - }, - { - endpoint: '/api/v1/role', - method: 'GET', - status: '200', - value: 14, - }, - { - endpoint: '/api/v1/role/default', - method: 'GET', - status: '200', - value: 7, - }, - { - endpoint: '/api/v1/user', - method: 'GET', - status: '200', - value: 7, - }, - { - endpoint: '/api/v1/user//role', - method: 'GET', - status: '404', - value: 3, - }, - ], - parseable_staging_files: [ - { - stream: 'azureapimlog', - value: 0, - }, - { - stream: 'backend', - value: 1, - }, - { - stream: 'druide2e', - value: 0, - }, - { - stream: 'frontend', - value: 1, - }, - ], - parseable_storage_size: [ - { - format: 'arrows', - stream: 'azureapimlog', - type: 'staging', - value: 278360, - }, - { - format: 'arrows', - stream: 'backend', - type: 'staging', - value: 3710463112, - }, - { - format: 'arrows', - stream: 'frontend', - type: 'staging', - value: 3349968344, - }, - { - format: 'parquet', - stream: 'azureapimlog', - type: 'data', - value: 1628492, - }, - { - format: 'parquet', - stream: 'backend', - type: 'data', - value: 1061537471, - }, - { - format: 'parquet', - stream: 'druide2e', - type: 'data', - value: 3421013, - }, - { - format: 'parquet', - stream: 'frontend', - type: 'data', - value: 1042412371, - }, - ], - process_cpu_seconds_total: 3794, - process_max_fds: 1048576, - process_open_fds: 267, - process_resident_memory_bytes: 236376064, - process_start_time_seconds: 1709565826, - process_threads: 7, - process_virtual_memory_bytes: 692588544, +const fetchIngestorMetrics = async (domain: string) => { + const endpoint = `${domain}/api/v1/metrics`; + return await fetch(endpoint); }; -function parsePrometheusResponse(response) { - const metrics = {}; +const TrLoadingState = () => ( + + + +); - response - .trim() - .split('\n') - .forEach((line) => { - const matchWithLabels = line.match(/(\w+)\{([^\}]+)\}\s+(\d+)/); - const matchWithoutLabels = line.match(/(\w+)\s+(\d+)/); +const TableRow = (props: IngestorTableRow) => { + const { ingestor } = props; + const [isMetricsFetching, setMetricsFetching] = useState(true); + const [metrics, setMetrics] = useState(null); - if (matchWithLabels) { - const metricName = matchWithLabels[1]; - const labels = matchWithLabels[2].split(',').reduce((acc, label) => { - const [key, value] = label.split('='); - acc[key] = value.replace(/"/g, ''); - return acc; - }, {}); - const value = parseInt(matchWithLabels[3], 10); - - if (!metrics[metricName]) { - metrics[metricName] = []; - } - - metrics[metricName].push({ ...labels, value }); - } else if (matchWithoutLabels) { - const metricName = matchWithoutLabels[1]; - const value = parseInt(matchWithoutLabels[2], 10); - - if (!metrics[metricName]) { - metrics[metricName] = value; - } else if (typeof metrics[metricName] === 'number') { - metrics[metricName] = [metrics[metricName], { value }]; - } else { - metrics[metricName].push({ value }); - } + useEffect(() => { + const fetchData = async () => { + try { + const data = await fetchIngestorMetrics(ingestor.domain_name); + if (typeof data !== 'string') throw 'Invalid prometheus response'; + + const parsedMetrics: PrometheusMetricResponse | null = parsePrometheusResponse(data); + const sanitizedMetrics = parsedMetrics === null ? null : sanitizeIngestorData(parsedMetrics); + setMetrics(sanitizedMetrics); + setMetricsFetching(false); + } catch (error) { + console.log('Error fetching metrics', error); } - }); + }; - return metrics; -} + fetchData(); + }, []); -const UsageIndicator = (props: UsageIndicatorProps) => { - const alarmCutOffPercentage = 79; - const { label, percentage } = props; - const statusClassName = percentage === null ? '' : percentage > alarmCutOffPercentage ? classes.alert : classes.ok; - console.log(`${classes.usageLevelIndicator} ${statusClassName}`); return ( - - - {props.label} - + + + + {ingestor.domain_name} + {ingestor.status === 'offline' && ( + + + + + + + + {ingestor.error} + + + )} + + + {isMetricsFetching || metrics === null ? ( + + ) : ( + <> + + + {metrics.totalEventsIngested} + + + {metrics.totalBytesIngested} + {metrics.memoryUsage} + {metrics.stagingFilesCount} + {metrics.stagingSize} + {ingestor.stagingPath || ''} + {ingestor.storePath || ''} + + )} + + + {ingestor.reachable ? 'Online' : 'Offline'} + + + + {!ingestor.reachable ? ( + + + + ) : null} + + ); }; -const parseStreamDataMetrics = (streamData) => { - if (!streamData || !Array.isArray(streamData)) { - return 0; - } - - return streamData.reduce((acc, streamDatum) => { - const { value } = streamDatum; - return value + acc; - }, 0); +type IngestorTable = { + ingestors: Ingestor[]; }; -const sanitizeIngestorData = () => { - const prometheusResponse = parsedMetrics; - const ingestorData = { domain_name: 'stackio.ingest.com', port: 8000, reachable: false }; - const totalEventsIngested = parseStreamDataMetrics(prometheusResponse.parseable_events_ingested); - const totalBytesIngested = parseStreamDataMetrics(prometheusResponse.parseable_events_ingested_size); - const stagingFilesCount = parseStreamDataMetrics(prometheusResponse.parseable_staging_files); - const stagingSize = parseStreamDataMetrics(prometheusResponse.parseable_storage_size) - return { - domainName: ingestorData.domain_name, - totalEventsIngested: HumanizeNumber(totalEventsIngested), - totalBytesIngested: sanitizeBytes(totalBytesIngested), - memoryUsage: sanitizeBytes(prometheusResponse.process_resident_memory_bytes), - stagingFilesCount: HumanizeNumber(stagingFilesCount), - stagingSize: sanitizeBytes(stagingSize), - stagingPath: '/parseable/stage', - storePath: '/parseable/data', - status: ingestorData.reachable ? 'online' : 'offline', - error: 'Unknown Error' - }; -} - -const TableRow = () => { - const data = sanitizeIngestorData(); - - return ( - - - - {data.domainName} - {data.status === 'offline' && ( - - - - - - - - {data.error} - - - )} - - - - - {data.totalEventsIngested} - - - {data.totalBytesIngested} - {data.memoryUsage} - {data.stagingFilesCount} - {data.stagingSize} - {data.stagingPath} - {data.storePath} - - - {data.status} - - - - {data.status === 'offline' ? ( - - - - ) : null} - - - ); -} - -const IngestorsTable = () => { +const TableHead = () => ( + + + Domain + Events Ingested + Storage + Memory Usage + Staging Files + Staging Size + Staging Path + Store + Status + + + +); + +const IngestorsTable = (props: IngestorTable) => { + const { ingestors } = props; return ( - - - Host - Events Ingested - Storage - Memory Usage - Staging Files - Staging Size - Staging Path - Store - Status - - - - - {/* */} - + + + {ingestors.map((ingestor) => { + return ; + })} +
); }; -// const fetchh = async() => { -// return await Axios().get('http://0.0.0.0:8000/api/v1/metrics'); -// }; - const Ingestors: FC = () => { - const totalMachines = ingestorsData.length; - const totalActiveMachines = ingestorsData.filter((ingestor) => ingestor.status === 'online').length; - - useEffect(() => { - // const res = fetchh(); - // console.log(res) - }, []); + const { clusterInfoData, getClusterInfoSuccess } = useClusterInfo(); + if (!getClusterInfoSuccess || !Array.isArray(clusterInfoData?.data)) return null; + const totalActiveMachines = clusterInfoData?.data.filter((ingestor) => ingestor.reachable).length; + const totalMachines = clusterInfoData?.data.length; return ( @@ -3859,9 +144,9 @@ const Ingestors: FC = () => { Ingestors - {`${totalActiveMachines}/${totalMachines} active`} + {`${totalActiveMachines} / ${totalMachines} Active`} - +
); }; diff --git a/src/pages/Systems/Queriers.tsx b/src/pages/Systems/Queriers.tsx index dcd0d87e..99e6a91f 100644 --- a/src/pages/Systems/Queriers.tsx +++ b/src/pages/Systems/Queriers.tsx @@ -1,144 +1,142 @@ -import { Stack, Text, Table, Tooltip } from '@mantine/core'; -import { FC } from 'react'; -import classes from './styles/Systems.module.css'; -import { IconBrandDatabricks, IconHeartRateMonitor } from '@tabler/icons-react'; -import { formatBytes } from '@/utils/formatBytes'; +// import { Stack, Text, Table, Tooltip } from '@mantine/core'; +// import { FC } from 'react'; +// import classes from './styles/Systems.module.css'; +// import { IconBrandDatabricks, IconHeartRateMonitor } from '@tabler/icons-react'; +// import { formatBytes } from '@/utils/formatBytes'; -const elements = [ - { position: 6, mass: 12.011, symbol: 'C', name: 'Carbon' }, - { position: 7, mass: 14.007, symbol: 'N', name: 'Nitrogen' }, - { position: 39, mass: 88.906, symbol: 'Y', name: 'Yttrium' }, - { position: 56, mass: 137.33, symbol: 'Ba', name: 'Barium' }, - { position: 58, mass: 140.12, symbol: 'Ce', name: 'Cerium' }, -]; +// const elements = [ +// { position: 6, mass: 12.011, symbol: 'C', name: 'Carbon' }, +// { position: 7, mass: 14.007, symbol: 'N', name: 'Nitrogen' }, +// { position: 39, mass: 88.906, symbol: 'Y', name: 'Yttrium' }, +// { position: 56, mass: 137.33, symbol: 'Ba', name: 'Barium' }, +// { position: 58, mass: 140.12, symbol: 'Ce', name: 'Cerium' }, +// ]; -const ingestorsData = [ - { - status: 'online', - errors: ['Error type 1', 'Error type 2'], - totalMemory: 2147483648, - consumedMemory: 1398102221, - ip: '127.0.0.1', - region: 'US-East', - name: 'Querier-01-US-East', - totalStorage: 128000000000, - usedStorage: 110300000000, - cpu: 49, - stagingDirectory: '/parseable/stage', - store: '/parseable/data', - port: 8001, - }, -]; +// const ingestorsData = [ +// { +// status: 'online', +// errors: ['Error type 1', 'Error type 2'], +// totalMemory: 2147483648, +// consumedMemory: 1398102221, +// ip: '127.0.0.1', +// region: 'US-East', +// name: 'Querier-01-US-East', +// totalStorage: 128000000000, +// usedStorage: 110300000000, +// cpu: 49, +// stagingDirectory: '/parseable/stage', +// store: '/parseable/data', +// port: 8001, +// }, +// ]; -const systemsData = {}; +// const systemsData = {}; -const sizetoInteger = (str: string) => { - if (!str || typeof str !== 'string') return null; +// const sizetoInteger = (str: string) => { +// if (!str || typeof str !== 'string') return null; - const strChuncks = str?.split(' '); - return Array.isArray(strChuncks) && !isNaN(Number(strChuncks[0])) ? parseInt(strChuncks[0]) : null; -}; +// const strChuncks = str?.split(' '); +// return Array.isArray(strChuncks) && !isNaN(Number(strChuncks[0])) ? parseInt(strChuncks[0]) : null; +// }; -const sanitizeBytes = (size: any) => { - // const size = sizetoInteger(str); - // return size ? formatBytes(size) : '–'; - return formatBytes(size); -}; +// const sanitizeBytes = (size: any) => { +// // const size = sizetoInteger(str); +// // return size ? formatBytes(size) : '–'; +// return formatBytes(size); +// }; -type UsageIndicatorProps = { - label: string; - percentage: number | null; -}; +// type UsageIndicatorProps = { +// label: string; +// percentage: number | null; +// }; -const UsageIndicator = (props: UsageIndicatorProps) => { - const alarmCutOffPercentage = 79; - const { label, percentage } = props; - const statusClassName = percentage === null ? '' : percentage > alarmCutOffPercentage ? classes.alert : classes.ok; - console.log(`${classes.usageLevelIndicator} ${statusClassName}`); - return ( - - - {props.label} - - ); -}; +// const UsageIndicator = (props: UsageIndicatorProps) => { +// const alarmCutOffPercentage = 79; +// const { label, percentage } = props; +// const statusClassName = percentage === null ? '' : percentage > alarmCutOffPercentage ? classes.alert : classes.ok; +// return ( +// +// +// {props.label} +// +// ); +// }; -const IngestorsTable = () => { - const rows = ingestorsData.map((element, index) => { - console.log(element.consumedMemory / element.totalMemory); - return ( - - {element.name} - - - - - - - - - - - - - - - - {element.stagingDirectory} - {element.store} - - - {element.status} - - - - ); - }); +// const IngestorsTable = () => { +// const rows = ingestorsData.map((element, index) => { +// return ( +// +// {element.name} +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// {element.stagingDirectory} +// {element.store} +// +// +// {element.status} +// +// +// +// ); +// }); - return ( - - - - Host - CPU Usage - Memory Usage - Storage Usage - Staging - Store - Status - - - {rows} -
- ); -}; +// return ( +// +// +// +// Host +// CPU Usage +// Memory Usage +// Storage Usage +// Staging +// Store +// Status +// +// +// {rows} +//
+// ); +// }; -const Queriers: FC = () => { - const totalMachines = ingestorsData.length; - const totalActiveMachines = ingestorsData.filter((ingestor) => ingestor.status === 'online').length; +// const Queriers: FC = () => { +// const totalMachines = ingestorsData.length; +// const totalActiveMachines = ingestorsData.filter((ingestor) => ingestor.status === 'online').length; - return ( - - - - - Querier - - - - - ); -}; +// return ( +// +// +// +// +// Querier +// +// +// +// +// ); +// }; -export default Queriers; +// export default Queriers; diff --git a/src/pages/Systems/styles/Systems.module.css b/src/pages/Systems/styles/Systems.module.css index a5d6707b..2da641ef 100644 --- a/src/pages/Systems/styles/Systems.module.css +++ b/src/pages/Systems/styles/Systems.module.css @@ -63,6 +63,8 @@ text-transform: capitalize; font-size: 0.875rem; font-weight: 600; + width: fit-content; + padding: 0 1rem; &.offline { background-color: var(--mantine-color-gray-1); } diff --git a/src/pages/Systems/utils.ts b/src/pages/Systems/utils.ts new file mode 100644 index 00000000..6de0b4e0 --- /dev/null +++ b/src/pages/Systems/utils.ts @@ -0,0 +1,99 @@ +import { HumanizeNumber, formatBytes } from "@/utils/formatBytes"; + +interface Label { + [key: string]: string; +} + +interface Metric { + [key: string]: any; +} + +export interface PrometheusMetricResponse { + [key: string]: Metric[] | number | Label; +} + +export function parsePrometheusResponse(response: string): null | PrometheusMetricResponse { + const metrics: PrometheusMetricResponse = {}; + + if (typeof response === 'string') { + response + .trim() + .split('\n') + .forEach((line) => { + const matchWithLabels = line.match(/(\w+)\{([^\}]+)\}\s+(\d+)/); + const matchWithoutLabels = line.match(/(\w+)\s+(\d+)/); + + if (matchWithLabels) { + const metricName = matchWithLabels[1]; + const labelsStr = matchWithLabels[2]; + const labels: Label = labelsStr.split(',').reduce((acc: Label, label: string) => { + const [key, value] = label.split('='); + acc[key] = value.replace(/"/g, ''); + return acc; + }, {}); + const value = parseInt(matchWithLabels[3], 10); + + if (!metrics[metricName]) { + metrics[metricName] = []; + } + + if (Array.isArray(metrics[metricName])) { + (metrics[metricName] as Metric[]).push({ ...labels, value }); + } else { + metrics[metricName] = [{ ...labels, value }]; + } + } else if (matchWithoutLabels) { + const metricName = matchWithoutLabels[1]; + const value = parseInt(matchWithoutLabels[2], 10); + + if (!metrics[metricName]) { + metrics[metricName] = value; + } else if (typeof metrics[metricName] === 'number') { + metrics[metricName] = [{ value: metrics[metricName] }, { value }]; + } else { + (metrics[metricName] as Metric[]).push({ value }); + } + } + }); + } + + if (Object.keys(metrics).length === 0) { + return null; + } else { + return metrics; + } +} + +export const parseStreamDataMetrics = (metrics: Metric[] | number | Label | undefined) => { + if (!metrics || !Array.isArray(metrics)) { + return 0; + } + + return metrics.reduce((acc, streamDatum) => { + return streamDatum?.value ? acc + streamDatum.value : acc; + }, 0); +}; + +export type SanitizedMetrics = { + totalEventsIngested: string; + totalBytesIngested: string; + memoryUsage: string; + stagingFilesCount: string; + stagingSize: string; +}; + +export const sanitizeIngestorData = (prometheusResponse: PrometheusMetricResponse): SanitizedMetrics | null => { + const {parseable_events_ingested, parseable_events_ingested_size, parseable_staging_files, parseable_storage_size, process_resident_memory_bytes} = prometheusResponse + const totalEventsIngested = parseStreamDataMetrics(parseable_events_ingested); + const totalBytesIngested = parseStreamDataMetrics(parseable_events_ingested_size); + const stagingFilesCount = parseStreamDataMetrics(parseable_staging_files); + const stagingSize = parseStreamDataMetrics(parseable_storage_size); + const memoryUsage = typeof process_resident_memory_bytes === 'number' ? process_resident_memory_bytes : 0; + return { + totalEventsIngested: HumanizeNumber(totalEventsIngested), + totalBytesIngested: formatBytes(totalBytesIngested), + memoryUsage: formatBytes(memoryUsage), + stagingFilesCount: HumanizeNumber(stagingFilesCount), + stagingSize: formatBytes(stagingSize), + }; +}; \ No newline at end of file From ba96feea3b299fe338b200dac0d8f4d50dc2392f Mon Sep 17 00:00:00 2001 From: balaji-jr Date: Wed, 20 Mar 2024 18:58:15 +0530 Subject: [PATCH 06/20] Fixed querier part for distributed systems --- src/api/cluster.ts | 2 +- src/api/constants.ts | 1 + src/api/logStream.ts | 5 + src/components/Navbar/index.tsx | 2 +- src/hooks/useClusterInfo.ts | 6 +- src/hooks/useLogStream.tsx | 26 +- src/layouts/MainLayout/Context.tsx | 1 + src/pages/Home/CreateStreamModal.tsx | 45 ++++ src/pages/Home/index.tsx | 43 +++- .../Home/styles/CreateStreamModal.module.css | 9 + src/pages/Systems/Ingestors.tsx | 2 +- src/pages/Systems/Queriers.tsx | 227 ++++++++---------- src/pages/Systems/StandaloneServer.tsx | 123 ++++++++++ src/pages/Systems/index.tsx | 34 ++- src/pages/Systems/utils.ts | 8 +- 15 files changed, 376 insertions(+), 158 deletions(-) create mode 100644 src/pages/Home/CreateStreamModal.tsx create mode 100644 src/pages/Home/styles/CreateStreamModal.module.css create mode 100644 src/pages/Systems/StandaloneServer.tsx diff --git a/src/api/cluster.ts b/src/api/cluster.ts index 5c6d34fa..4299ea34 100644 --- a/src/api/cluster.ts +++ b/src/api/cluster.ts @@ -1,4 +1,4 @@ -import { ClusterInfo, Ingestor } from '@/@types/parseable/api/clusterInfo'; +import { Ingestor } from '@/@types/parseable/api/clusterInfo'; import { Axios } from './axios'; import { CLUSTER_INFO_URL, CLUSTER_METRICS_URL } from './constants'; diff --git a/src/api/constants.ts b/src/api/constants.ts index bc7da7fa..c96b3166 100644 --- a/src/api/constants.ts +++ b/src/api/constants.ts @@ -8,6 +8,7 @@ export const LOG_STREAMS_ALERTS_URL = (streamName: string) => `${LOG_STREAM_LIST export const LOG_STREAMS_RETRNTION_URL = (streamName: string) => `${LOG_STREAM_LIST_URL}/${streamName}/retention`; export const LOG_STREAMS_STATS_URL = (streamName: string) => `${LOG_STREAM_LIST_URL}/${streamName}/stats`; export const DELETE_STREAMS_URL = (streamName: string) => `${LOG_STREAM_LIST_URL}/${streamName}`; +export const CREATE_STREAM_URL = (streamName: string) => `${LOG_STREAM_LIST_URL}/${streamName}`; // About Parsable Instance export const ABOUT_URL = `${API_V1}/about`; diff --git a/src/api/logStream.ts b/src/api/logStream.ts index 00bc4906..cb5fb78c 100644 --- a/src/api/logStream.ts +++ b/src/api/logStream.ts @@ -6,6 +6,7 @@ import { LOG_STREAMS_ALERTS_URL, LOG_STREAMS_RETRNTION_URL, LOG_STREAMS_STATS_URL, + CREATE_STREAM_URL, } from './constants'; import { LogStreamData, LogStreamSchemaData } from '@/@types/parseable/api/stream'; @@ -40,3 +41,7 @@ export const getLogStreamStats = (streamName: string) => { export const deleteLogStream = (streamName: string) => { return Axios().delete(DELETE_STREAMS_URL(streamName)); }; + +export const createLogStream = (streamName: string) => { + return Axios().post(CREATE_STREAM_URL(streamName)); +} diff --git a/src/components/Navbar/index.tsx b/src/components/Navbar/index.tsx index 02f8be8f..f35663c3 100644 --- a/src/components/Navbar/index.tsx +++ b/src/components/Navbar/index.tsx @@ -87,7 +87,7 @@ const Navbar: FC = () => { const userStreams = getUserSepcificStreams(getUserRolesData?.data, getLogStreamListData?.data as any); setUserSpecficStreams(userStreams as any); } else { - setUserSpecficStreams([]); + setUserSpecficStreams(null); } updateUserSpecificAccess(getStreamsSepcificAccess(getUserRolesData?.data)); }, [getUserRolesData?.data, getLogStreamListData?.data]); diff --git a/src/hooks/useClusterInfo.ts b/src/hooks/useClusterInfo.ts index d6088909..c083b6e8 100644 --- a/src/hooks/useClusterInfo.ts +++ b/src/hooks/useClusterInfo.ts @@ -1,7 +1,5 @@ -import { useMutation, useQuery } from 'react-query'; -import { isAxiosError, AxiosError, AxiosResponse } from 'axios'; -import useMountedState from './useMountedState'; -import { notifyError } from '@/utils/notification'; +import { useQuery } from 'react-query'; +import { AxiosResponse } from 'axios'; import { getClusterInfo, getClusterMetrics } from '@/api/cluster'; import { Ingestor } from '@/@types/parseable/api/clusterInfo'; diff --git a/src/hooks/useLogStream.tsx b/src/hooks/useLogStream.tsx index 478fdf52..38f5974a 100644 --- a/src/hooks/useLogStream.tsx +++ b/src/hooks/useLogStream.tsx @@ -1,5 +1,7 @@ import { useMutation, useQuery } from 'react-query'; -import { deleteLogStream, getLogStreamList } from '@/api/logStream'; +import { deleteLogStream, getLogStreamList, createLogStream } from '@/api/logStream'; +import { AxiosError, isAxiosError } from 'axios'; +import { notifyError, notifySuccess } from '@/utils/notification'; export const useLogStream = () => { const { @@ -9,13 +11,29 @@ export const useLogStream = () => { isLoading: deleteLogStreamIsLoading, } = useMutation((data: { deleteStream: string }) => deleteLogStream(data.deleteStream), {}); + const { + mutate: createLogStreamMutation, + isSuccess: createLogStreamIsSuccess, + isError: createLogStreamIsError, + isLoading: createLogStreamIsLoading, + } = useMutation((data: { streamName: string;}) => createLogStream(data.streamName), { + onError: (data: AxiosError) => { + if (isAxiosError(data) && typeof data.message === 'string') { + notifyError({ message: data.message }); + } + }, + onSuccess: (_data, variables) => { + notifySuccess({message: `Stream ${variables.streamName} created successfully`}) + }, + }); + const { data: getLogStreamListData, isError: getLogStreamListIsError, isSuccess: getLogStreamListIsSuccess, isLoading: getLogStreamListIsLoading, refetch: getLogStreamListRefetch, - } = useQuery(['fetch-log-stream-list', deleteLogStreamIsSuccess], () => getLogStreamList(), { + } = useQuery(['fetch-log-stream-list', deleteLogStreamIsSuccess, createLogStreamIsSuccess], () => getLogStreamList(), { retry: false, refetchOnWindowFocus: false, refetchOnMount: false, @@ -43,5 +61,9 @@ export const useLogStream = () => { getLogStreamListIsSuccess, getLogStreamListIsLoading, getLogStreamListRefetch, + createLogStreamMutation, + createLogStreamIsSuccess, + createLogStreamIsError, + createLogStreamIsLoading }; }; diff --git a/src/layouts/MainLayout/Context.tsx b/src/layouts/MainLayout/Context.tsx index 709d4cfa..2026fdf3 100644 --- a/src/layouts/MainLayout/Context.tsx +++ b/src/layouts/MainLayout/Context.tsx @@ -86,6 +86,7 @@ const accessKeyMap: { [key: string]: string } = { hasDeleteAccess: 'DeleteStream', hasUpdateAlertAccess: 'PutAlert', hasGetAlertAccess: 'GetAlert', + hasCreateStreamAccess: 'CreateStream' }; const generateUserAcccessMap = (accessRoles: string[] | null) => { diff --git a/src/pages/Home/CreateStreamModal.tsx b/src/pages/Home/CreateStreamModal.tsx new file mode 100644 index 00000000..0b86446f --- /dev/null +++ b/src/pages/Home/CreateStreamModal.tsx @@ -0,0 +1,45 @@ +import { Box, Button, Input, Modal, Stack, Text } from '@mantine/core'; +import { FC, useCallback, useState } from 'react'; +import styles from './styles/CreateStreamModal.module.css'; +import { useLogStream } from '@/hooks/useLogStream'; + +type CreateStreamModalProps = { + opened: boolean; + close(): void; +}; + +const CreateStreamModal: FC = (props) => { + const { opened, close } = props; + const classes = styles; + const [streamName, setStreamName] = useState(''); + const { container, aboutTitle } = classes; + + const { createLogStreamMutation } = useLogStream(); + + const onSubmit = useCallback(() => { + createLogStreamMutation({ streamName }); + }, [streamName]); + + return ( + + + Create Stream + setStreamName(e.target.value)} placeholder="Enter stream name" /> + + + + + + + + + + + ); +}; + +export default CreateStreamModal; diff --git a/src/pages/Home/index.tsx b/src/pages/Home/index.tsx index 9bfe4367..c41615b2 100644 --- a/src/pages/Home/index.tsx +++ b/src/pages/Home/index.tsx @@ -1,7 +1,7 @@ import { EmptySimple } from '@/components/Empty'; import { Text, Button, Center, Box, Group, ActionIcon, Flex, Stack, Tooltip } from '@mantine/core'; -import { IconChevronRight, IconExternalLink } from '@tabler/icons-react'; -import { useEffect, type FC, useCallback } from 'react'; +import { IconChevronRight, IconExternalLink, IconPlus } from '@tabler/icons-react'; +import { useEffect, type FC, useCallback, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { useDocumentTitle } from '@mantine/hooks'; import { useGetStreamMetadata } from '@/hooks/useGetStreamMetadata'; @@ -10,6 +10,7 @@ import { LogStreamRetention, LogStreamStat } from '@/@types/parseable/api/stream import { useHeaderContext } from '@/layouts/MainLayout/Context'; import cardStyles from './styles/Card.module.css'; import homeStyles from './styles/Home.module.css'; +import CreateStreamModal from './CreateStreamModal'; const EmptyStreamsView: FC = () => { const classes = homeStyles; @@ -36,10 +37,11 @@ const Home: FC = () => { const { container } = classes; const { methods: { streamChangeCleanup }, - state: { userSpecficStreams }, + state: { userSpecficStreams, userSpecificAccessMap }, } = useHeaderContext(); const navigate = useNavigate(); const { getStreamMetadata, metaData } = useGetStreamMetadata(); + const [createStreamModalOpen, setCreateStreamModalOpen] = useState(false); useEffect(() => { if (!Array.isArray(userSpecficStreams) || userSpecficStreams.length === 0) return; @@ -50,15 +52,38 @@ const Home: FC = () => { streamChangeCleanup(stream); navigate(`/${stream}/logs`); }, []); - if (Array.isArray(userSpecficStreams) && userSpecficStreams.length === 0) return ; + const displayEmptyPlaceholder = Array.isArray(userSpecficStreams) && userSpecficStreams.length === 0 + const toggleCreateStreamModal = useCallback(() => { + setCreateStreamModalOpen(prev => !prev) + }, []) return ( - - {Object.entries(metaData || {}).map(([stream, data]) => { - return ; - })} - + + + All Streams + + {userSpecificAccessMap.hasCreateStreamAccess && ( + + )} + + + {displayEmptyPlaceholder ? ( + + ) : ( + + {Object.entries(metaData || {}).map(([stream, data]) => { + return ; + })} + + )} ); }; diff --git a/src/pages/Home/styles/CreateStreamModal.module.css b/src/pages/Home/styles/CreateStreamModal.module.css new file mode 100644 index 00000000..7ff2bb99 --- /dev/null +++ b/src/pages/Home/styles/CreateStreamModal.module.css @@ -0,0 +1,9 @@ +.container { + height: 100%; + width: 100%; +} + +.aboutTitle { + font-size: 1.2rem; + font-weight: 600; +} diff --git a/src/pages/Systems/Ingestors.tsx b/src/pages/Systems/Ingestors.tsx index 1a3687fe..e6472961 100644 --- a/src/pages/Systems/Ingestors.tsx +++ b/src/pages/Systems/Ingestors.tsx @@ -146,7 +146,7 @@ const Ingestors: FC = () => {
{`${totalActiveMachines} / ${totalMachines} Active`}
- + {clusterInfoData?.data && }
); }; diff --git a/src/pages/Systems/Queriers.tsx b/src/pages/Systems/Queriers.tsx index 99e6a91f..51166cc8 100644 --- a/src/pages/Systems/Queriers.tsx +++ b/src/pages/Systems/Queriers.tsx @@ -1,142 +1,107 @@ -// import { Stack, Text, Table, Tooltip } from '@mantine/core'; -// import { FC } from 'react'; -// import classes from './styles/Systems.module.css'; -// import { IconBrandDatabricks, IconHeartRateMonitor } from '@tabler/icons-react'; -// import { formatBytes } from '@/utils/formatBytes'; +import { Stack, Text, Table, Tooltip, Skeleton } from '@mantine/core'; +import { FC, useEffect, useState } from 'react'; +import classes from './styles/Systems.module.css'; +import { IconHeartRateMonitor } from '@tabler/icons-react'; +import { PrometheusMetricResponse, SanitizedMetrics, parsePrometheusResponse, sanitizeIngestorData } from './utils'; -// const elements = [ -// { position: 6, mass: 12.011, symbol: 'C', name: 'Carbon' }, -// { position: 7, mass: 14.007, symbol: 'N', name: 'Nitrogen' }, -// { position: 39, mass: 88.906, symbol: 'Y', name: 'Yttrium' }, -// { position: 56, mass: 137.33, symbol: 'Ba', name: 'Barium' }, -// { position: 58, mass: 140.12, symbol: 'Ce', name: 'Cerium' }, -// ]; +const fetchIngestorMetrics = async (domain: string) => { + const endpoint = `${domain}/api/v1/metrics`; + return await fetch(endpoint); +}; -// const ingestorsData = [ -// { -// status: 'online', -// errors: ['Error type 1', 'Error type 2'], -// totalMemory: 2147483648, -// consumedMemory: 1398102221, -// ip: '127.0.0.1', -// region: 'US-East', -// name: 'Querier-01-US-East', -// totalStorage: 128000000000, -// usedStorage: 110300000000, -// cpu: 49, -// stagingDirectory: '/parseable/stage', -// store: '/parseable/data', -// port: 8001, -// }, -// ]; +const TrLoadingState = () => ( + + + +); -// const systemsData = {}; +const TableRow = () => { + const [isMetricsFetching, setMetricsFetching] = useState(true); + const [metrics, setMetrics] = useState(null); -// const sizetoInteger = (str: string) => { -// if (!str || typeof str !== 'string') return null; + useEffect(() => { + const fetchData = async () => { + try { + const data = await fetchIngestorMetrics(window.location.host); + if (typeof data !== 'string') throw 'Invalid prometheus response'; -// const strChuncks = str?.split(' '); -// return Array.isArray(strChuncks) && !isNaN(Number(strChuncks[0])) ? parseInt(strChuncks[0]) : null; -// }; + const parsedMetrics: PrometheusMetricResponse | null = parsePrometheusResponse(data); + const sanitizedMetrics = parsedMetrics === null ? null : sanitizeIngestorData(parsedMetrics); + setMetrics(sanitizedMetrics); + setMetricsFetching(false); + } catch (error) { + console.log('Error fetching metrics', error); + } + }; -// const sanitizeBytes = (size: any) => { -// // const size = sizetoInteger(str); -// // return size ? formatBytes(size) : '–'; -// return formatBytes(size); -// }; + fetchData(); + }, []); -// type UsageIndicatorProps = { -// label: string; -// percentage: number | null; -// }; + return ( + + + + {window.location.host} + + + {isMetricsFetching || metrics === null ? ( + + ) : ( + <> + + + {metrics.totalEventsIngested} + + + {metrics.totalBytesIngested} + {metrics.memoryUsage} + {metrics.stagingFilesCount} + {metrics.stagingSize} + + )} + + + {'Online'} + + + + ); +}; -// const UsageIndicator = (props: UsageIndicatorProps) => { -// const alarmCutOffPercentage = 79; -// const { label, percentage } = props; -// const statusClassName = percentage === null ? '' : percentage > alarmCutOffPercentage ? classes.alert : classes.ok; -// return ( -// -// -// {props.label} -// -// ); -// }; +const TableHead = () => ( + + + Domain + Memory Usage + Status + + + +); -// const IngestorsTable = () => { -// const rows = ingestorsData.map((element, index) => { -// return ( -// -// {element.name} -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// -// {element.stagingDirectory} -// {element.store} -// -// -// {element.status} -// -// -// -// ); -// }); +const QuerierTable = () => { + return ( + + + + + +
+ ); +}; -// return ( -// -// -// -// Host -// CPU Usage -// Memory Usage -// Storage Usage -// Staging -// Store -// Status -// -// -// {rows} -//
-// ); -// }; +const Querier: FC = () => { + return ( + + + + + Querier + + + + + ); +}; -// const Queriers: FC = () => { -// const totalMachines = ingestorsData.length; -// const totalActiveMachines = ingestorsData.filter((ingestor) => ingestor.status === 'online').length; - -// return ( -// -// -// -// -// Querier -// -// -// -// -// ); -// }; - -// export default Queriers; +export default Querier; diff --git a/src/pages/Systems/StandaloneServer.tsx b/src/pages/Systems/StandaloneServer.tsx new file mode 100644 index 00000000..e802c365 --- /dev/null +++ b/src/pages/Systems/StandaloneServer.tsx @@ -0,0 +1,123 @@ +import { Stack, Text, Table, Tooltip, Skeleton } from '@mantine/core'; +import { FC, useEffect, useState } from 'react'; +import classes from './styles/Systems.module.css'; +import { IconBrandDatabricks } from '@tabler/icons-react'; +import { PrometheusMetricResponse, SanitizedMetrics, parsePrometheusResponse, sanitizeIngestorData } from './utils'; +import { useAbout } from '@/hooks/useGetAbout'; +import { AboutData } from '@/@types/parseable/api/about'; + +type IngestorTableRow = { + stagingPath: string; + storePath: string; +}; + +const fetchIngestorMetrics = async (domain: string) => { + const endpoint = `${domain}/api/v1/metrics`; + return await fetch(endpoint); +}; + +const TrLoadingState = () => ( + + + +); + +const TableRow = (props: IngestorTableRow) => { + const [isMetricsFetching, setMetricsFetching] = useState(true); + const [metrics, setMetrics] = useState(null); + + useEffect(() => { + const fetchData = async () => { + try { + const data = await fetchIngestorMetrics(window.location.host); + if (typeof data !== 'string') throw 'Invalid prometheus response'; + + const parsedMetrics: PrometheusMetricResponse | null = parsePrometheusResponse(data); + const sanitizedMetrics = parsedMetrics === null ? null : sanitizeIngestorData(parsedMetrics); + setMetrics(sanitizedMetrics); + setMetricsFetching(false); + } catch (error) { + console.log('Error fetching metrics', error); + } + }; + + fetchData(); + }, []); + + return ( + + + + {window.location.host} + + + {isMetricsFetching || metrics === null ? ( + + ) : ( + <> + + + {metrics.totalEventsIngested} + + + {metrics.totalBytesIngested} + {metrics.memoryUsage} + {metrics.stagingFilesCount} + {metrics.stagingSize} + {props.stagingPath || ''} + {props.storePath || ''} + + )} + + + {'Online'} + + + + ); +}; + +const TableHead = () => ( + + + Domain + Events Ingested + Storage + Memory Usage + Staging Files + Staging Size + Staging Path + Store + Status + + + +); + +const ServerTable = (props: AboutData) => { + return ( + + + + + +
+ ); +}; + +const StandaloneServer: FC = () => { + const {getAboutData} = useAbout() + return ( + + + + + Parseable Server + + + {getAboutData?.data && } + + ); +}; + +export default StandaloneServer; diff --git a/src/pages/Systems/index.tsx b/src/pages/Systems/index.tsx index ecfa9afc..370d2bbf 100644 --- a/src/pages/Systems/index.tsx +++ b/src/pages/Systems/index.tsx @@ -1,9 +1,15 @@ -import { Box, Divider, Stack } from '@mantine/core'; +import { Box, Button, Stack } from '@mantine/core'; import { FC } from 'react'; -import Queriers from './Queriers'; import Ingestors from './Ingestors'; +import Queriers from './Queriers'; +import StandaloneServer from './StandaloneServer'; +import { useAbout } from '@/hooks/useGetAbout'; +import { IconBook2 } from '@tabler/icons-react'; const Systems: FC = () => { + const { getAboutData, getAboutIsLoading, getAboutIsError } = useAbout(); + if (getAboutIsLoading || getAboutIsError) return null; + return ( { width: '100%', height: '100%', flexDirection: 'column', - padding: '1.25rem' + padding: '1.25rem', }}> - {/* */} - {/* */} - + {getAboutData?.data.mode === 'All' ? ( + + {/* + Know more about implementing distributed systems for enhanced efficiency + */} + + + + + + ) : ( + <> + + + + )} ); }; diff --git a/src/pages/Systems/utils.ts b/src/pages/Systems/utils.ts index 6de0b4e0..227def60 100644 --- a/src/pages/Systems/utils.ts +++ b/src/pages/Systems/utils.ts @@ -83,11 +83,13 @@ export type SanitizedMetrics = { }; export const sanitizeIngestorData = (prometheusResponse: PrometheusMetricResponse): SanitizedMetrics | null => { - const {parseable_events_ingested, parseable_events_ingested_size, parseable_staging_files, parseable_storage_size, process_resident_memory_bytes} = prometheusResponse + const {parseable_events_ingested, parseable_staging_files, parseable_storage_size, process_resident_memory_bytes} = prometheusResponse + const streamWiseDataStorage = Array.isArray(parseable_storage_size) ? parseable_storage_size.filter((d) => d.type === 'data') : [] + const streamWiseStagingStorage = Array.isArray(parseable_storage_size) ? parseable_storage_size.filter((d) => d.type === 'staging') : [] const totalEventsIngested = parseStreamDataMetrics(parseable_events_ingested); - const totalBytesIngested = parseStreamDataMetrics(parseable_events_ingested_size); + const totalBytesIngested = parseStreamDataMetrics(streamWiseDataStorage); const stagingFilesCount = parseStreamDataMetrics(parseable_staging_files); - const stagingSize = parseStreamDataMetrics(parseable_storage_size); + const stagingSize = parseStreamDataMetrics(streamWiseStagingStorage); const memoryUsage = typeof process_resident_memory_bytes === 'number' ? process_resident_memory_bytes : 0; return { totalEventsIngested: HumanizeNumber(totalEventsIngested), From eea1bea0026c00c009d5c85e97b156bb12ef631e Mon Sep 17 00:00:00 2001 From: balaji-jr Date: Wed, 20 Mar 2024 19:38:57 +0530 Subject: [PATCH 07/20] Parse readable stream response --- src/pages/Systems/Ingestors.tsx | 33 +++++++++++++++++++--- src/pages/Systems/Queriers.tsx | 33 +++++++++++++++++++--- src/pages/Systems/StandaloneServer.tsx | 39 ++++++++++++++++++++------ 3 files changed, 89 insertions(+), 16 deletions(-) diff --git a/src/pages/Systems/Ingestors.tsx b/src/pages/Systems/Ingestors.tsx index e6472961..c29ecc76 100644 --- a/src/pages/Systems/Ingestors.tsx +++ b/src/pages/Systems/Ingestors.tsx @@ -10,9 +10,19 @@ type IngestorTableRow = { ingestor: Ingestor; }; -const fetchIngestorMetrics = async (domain: string) => { - const endpoint = `${domain}/api/v1/metrics`; - return await fetch(endpoint); +const fetchIngestorMetrics = async () => { + const endpoint = `/api/v1/metrics`; + const response = await fetch(endpoint, { + headers: { + Accept: 'text/plain', + }, + }); + + if (!response.ok) { + throw new Error('Network response was not ok'); + } + + return response.body; }; const TrLoadingState = () => ( @@ -29,7 +39,22 @@ const TableRow = (props: IngestorTableRow) => { useEffect(() => { const fetchData = async () => { try { - const data = await fetchIngestorMetrics(ingestor.domain_name); + const readableStream = await fetchIngestorMetrics(); + const reader = readableStream?.getReader(); + const chunks:string[] = []; + const readData = async () => { + while (reader) { + const { done, value } = await reader.read(); + if (done) { + console.log('Stream reading complete'); + break; + } + const chunk = new TextDecoder().decode(value); + chunks.push(chunk); + } + }; + await readData(); + const data = chunks.join('') if (typeof data !== 'string') throw 'Invalid prometheus response'; const parsedMetrics: PrometheusMetricResponse | null = parsePrometheusResponse(data); diff --git a/src/pages/Systems/Queriers.tsx b/src/pages/Systems/Queriers.tsx index 51166cc8..7de19a54 100644 --- a/src/pages/Systems/Queriers.tsx +++ b/src/pages/Systems/Queriers.tsx @@ -4,9 +4,19 @@ import classes from './styles/Systems.module.css'; import { IconHeartRateMonitor } from '@tabler/icons-react'; import { PrometheusMetricResponse, SanitizedMetrics, parsePrometheusResponse, sanitizeIngestorData } from './utils'; -const fetchIngestorMetrics = async (domain: string) => { - const endpoint = `${domain}/api/v1/metrics`; - return await fetch(endpoint); +const fetchIngestorMetrics = async () => { + const endpoint = `/api/v1/metrics`; + const response = await fetch(endpoint, { + headers: { + Accept: 'text/plain', + }, + }); + + if (!response.ok) { + throw new Error('Network response was not ok'); + } + + return response.body; }; const TrLoadingState = () => ( @@ -22,7 +32,22 @@ const TableRow = () => { useEffect(() => { const fetchData = async () => { try { - const data = await fetchIngestorMetrics(window.location.host); + const readableStream = await fetchIngestorMetrics(); + const reader = readableStream?.getReader(); + const chunks:string[] = []; + const readData = async () => { + while (reader) { + const { done, value } = await reader.read(); + if (done) { + console.log('Stream reading complete'); + break; + } + const chunk = new TextDecoder().decode(value); + chunks.push(chunk); + } + }; + await readData(); + const data = chunks.join('') if (typeof data !== 'string') throw 'Invalid prometheus response'; const parsedMetrics: PrometheusMetricResponse | null = parsePrometheusResponse(data); diff --git a/src/pages/Systems/StandaloneServer.tsx b/src/pages/Systems/StandaloneServer.tsx index e802c365..8b11038c 100644 --- a/src/pages/Systems/StandaloneServer.tsx +++ b/src/pages/Systems/StandaloneServer.tsx @@ -11,9 +11,19 @@ type IngestorTableRow = { storePath: string; }; -const fetchIngestorMetrics = async (domain: string) => { - const endpoint = `${domain}/api/v1/metrics`; - return await fetch(endpoint); +const fetchIngestorMetrics = async () => { + const endpoint = `/api/v1/metrics`; + const response = await fetch(endpoint, { + headers: { + Accept: 'text/plain', + }, + }); + + if (!response.ok) { + throw new Error('Network response was not ok'); + } + + return response.body; }; const TrLoadingState = () => ( @@ -29,7 +39,22 @@ const TableRow = (props: IngestorTableRow) => { useEffect(() => { const fetchData = async () => { try { - const data = await fetchIngestorMetrics(window.location.host); + const readableStream = await fetchIngestorMetrics(); + const reader = readableStream?.getReader(); + const chunks:string[] = []; + const readData = async () => { + while (reader) { + const { done, value } = await reader.read(); + if (done) { + console.log('Stream reading complete'); + break; + } + const chunk = new TextDecoder().decode(value); + chunks.push(chunk); + } + }; + await readData(); + const data = chunks.join('') if (typeof data !== 'string') throw 'Invalid prometheus response'; const parsedMetrics: PrometheusMetricResponse | null = parsePrometheusResponse(data); @@ -68,10 +93,8 @@ const TableRow = (props: IngestorTableRow) => { {props.storePath || ''} )} - - - {'Online'} - + + {'Online'} ); From 187f7efb4b5a5ccb9a9c3b6dfba89de00c2ddc27 Mon Sep 17 00:00:00 2001 From: balaji-jr Date: Wed, 20 Mar 2024 19:39:41 +0530 Subject: [PATCH 08/20] rm parse-prometheus-text-format --- package.json | 1 - pnpm-lock.yaml | 13 ------------- 2 files changed, 14 deletions(-) diff --git a/package.json b/package.json index d14585c4..bb29edee 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,6 @@ "ms": "^2.1.3", "nice-grpc-common": "^2.0.2", "nice-grpc-web": "^3.3.2", - "parse-prometheus-text-format": "^1.1.1", "protobufjs": "^7.2.5", "react": "^18.2.0", "react-beautiful-dnd": "^13.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2298024d..96157307 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -77,9 +77,6 @@ dependencies: nice-grpc-web: specifier: ^3.3.2 version: 3.3.2(ws@8.16.0) - parse-prometheus-text-format: - specifier: ^1.1.1 - version: 1.1.1 protobufjs: specifier: ^7.2.5 version: 7.2.5 @@ -3038,12 +3035,6 @@ packages: lines-and-columns: 1.2.4 dev: false - /parse-prometheus-text-format@1.1.1: - resolution: {integrity: sha512-dBlhYVACjRdSqLMFe4/Q1l/Gd3UmXm8ruvsTi7J6ul3ih45AkzkVpI5XHV4aZ37juGZW5+3dGU5lwk+QLM9XJA==} - dependencies: - shallow-equal: 1.2.1 - dev: false - /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -3606,10 +3597,6 @@ packages: lru-cache: 6.0.0 dev: true - /shallow-equal@1.2.1: - resolution: {integrity: sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==} - dev: false - /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} From bb28c9fe86bb379df06610ab8e747df870378582 Mon Sep 17 00:00:00 2001 From: balaji-jr Date: Wed, 20 Mar 2024 19:43:20 +0530 Subject: [PATCH 09/20] newline and rm unwanted files --- src/@types/parseable/api/clusterInfo.ts | 4 +- src/api/cluster.ts | 2 +- src/api/constants.ts | 2 +- src/constants/routes.ts | 22 +- src/pages/Systems/context.ts | 0 src/pages/Systems/mock.txt | 716 ------------------------ 6 files changed, 15 insertions(+), 731 deletions(-) delete mode 100644 src/pages/Systems/context.ts delete mode 100644 src/pages/Systems/mock.txt diff --git a/src/@types/parseable/api/clusterInfo.ts b/src/@types/parseable/api/clusterInfo.ts index 7a4c4ea9..14d11a71 100644 --- a/src/@types/parseable/api/clusterInfo.ts +++ b/src/@types/parseable/api/clusterInfo.ts @@ -5,6 +5,6 @@ export type Ingestor = { status: string; stagingPath: string; storePath: string; -} +}; -export type ClusterInfo = Ingestor[] \ No newline at end of file +export type ClusterInfo = Ingestor[]; diff --git a/src/api/cluster.ts b/src/api/cluster.ts index 4299ea34..689c370e 100644 --- a/src/api/cluster.ts +++ b/src/api/cluster.ts @@ -8,4 +8,4 @@ export const getClusterInfo = () => { export const getClusterMetrics = () => { return Axios().get(CLUSTER_METRICS_URL); -} \ No newline at end of file +}; diff --git a/src/api/constants.ts b/src/api/constants.ts index c96b3166..9832a308 100644 --- a/src/api/constants.ts +++ b/src/api/constants.ts @@ -35,4 +35,4 @@ export const IS_LLM_ACTIVE_URL = `${LLM_QUERY_URL}/isactive`; export const CACHING_STATUS_URL = (streamName: string) => `${LOG_STREAM_LIST_URL}/${streamName}/cache`; export const CLUSTER_INFO_URL = `${API_V1}/cluster/info`; -export const CLUSTER_METRICS_URL = `${API_V1}/metrics`; \ No newline at end of file +export const CLUSTER_METRICS_URL = `${API_V1}/metrics`; diff --git a/src/constants/routes.ts b/src/constants/routes.ts index 4d575b07..b5bae604 100644 --- a/src/constants/routes.ts +++ b/src/constants/routes.ts @@ -10,14 +10,14 @@ export const OIDC_NOT_CONFIGURED_ROUTE = '/oidc-not-configured'; export const SYSTEMS_ROUTE = '/systems'; export const PATHS = { - all: '/*', - home: '/', - logs: '/:streamName/logs', - login: '/login', - liveTail: '/:streamName/live-tail', - stats: '/:streamName/stats', - config: '/:streamName/config', - users: '/users', - oidcNotConfigured: '/oidc-not-configured', - systems: '/systems' -} as {[key: string]: string} \ No newline at end of file + all: '/*', + home: '/', + logs: '/:streamName/logs', + login: '/login', + liveTail: '/:streamName/live-tail', + stats: '/:streamName/stats', + config: '/:streamName/config', + users: '/users', + oidcNotConfigured: '/oidc-not-configured', + systems: '/systems', +} as { [key: string]: string }; diff --git a/src/pages/Systems/context.ts b/src/pages/Systems/context.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/src/pages/Systems/mock.txt b/src/pages/Systems/mock.txt deleted file mode 100644 index 2f31ed3f..00000000 --- a/src/pages/Systems/mock.txt +++ /dev/null @@ -1,716 +0,0 @@ -# HELP parseable_events_ingested Events ingested -# TYPE parseable_events_ingested counter -parseable_events_ingested{format="json",stream="azureapimlog"} 132 -parseable_events_ingested{format="json",stream="backend"} 27078249 -parseable_events_ingested{format="json",stream="druide2e"} 9416 -parseable_events_ingested{format="json",stream="frontend"} 27306182 -# HELP parseable_events_ingested_size Events ingested size bytes -# TYPE parseable_events_ingested_size gauge -parseable_events_ingested_size{format="json",stream="azureapimlog"} 287478 -parseable_events_ingested_size{format="json",stream="backend"} 8899325195 -parseable_events_ingested_size{format="json",stream="druide2e"} 5546280 -parseable_events_ingested_size{format="json",stream="frontend"} 7712739750 -# HELP parseable_incoming_requests Incoming Requests -# TYPE parseable_incoming_requests counter -parseable_incoming_requests{endpoint="",method="GET",status="200"} 610 -parseable_incoming_requests{endpoint="",method="GET",status="304"} 859 -parseable_incoming_requests{endpoint="",method="GET",status="400"} 12 -parseable_incoming_requests{endpoint="",method="HEAD",status="200"} 491 -parseable_incoming_requests{endpoint="",method="OPTIONS",status="405"} 3 -parseable_incoming_requests{endpoint="",method="POST",status="405"} 13 -parseable_incoming_requests{endpoint="*",method="M-SEARCH",status="404"} 2 -parseable_incoming_requests{endpoint="/api/v1",method="GET",status="404"} 1 -parseable_incoming_requests{endpoint="/api/v1/about",method="GET",status="200"} 70 -parseable_incoming_requests{endpoint="/api/v1/ingest",method="POST",status="200"} 6088833 -parseable_incoming_requests{endpoint="/api/v1/log-stream",method="GET",status="404"} 1 -parseable_incoming_requests{endpoint="/api/v1/logstream",method="GET",status="200"} 77 -parseable_incoming_requests{endpoint="/api/v1/logstream//schema",method="GET",status="404"} 3 -parseable_incoming_requests{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200"} 91 -parseable_incoming_requests{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200"} 91 -parseable_incoming_requests{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200"} 415 -parseable_incoming_requests{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200"} 1 -parseable_incoming_requests{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200"} 145 -parseable_incoming_requests{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200"} 320 -parseable_incoming_requests{endpoint="/api/v1/metrics",method="GET",status="200"} 64 -parseable_incoming_requests{endpoint="/api/v1/o/code",method="GET",status="301"} 3 -parseable_incoming_requests{endpoint="/api/v1/o/code",method="GET",status="400"} 1 -parseable_incoming_requests{endpoint="/api/v1/o/login",method="GET",status="301"} 19 -parseable_incoming_requests{endpoint="/api/v1/o/login",method="GET",status="307"} 3 -parseable_incoming_requests{endpoint="/api/v1/o/login",method="GET",status="400"} 1 -parseable_incoming_requests{endpoint="/api/v1/o/logout",method="GET",status="301"} 13 -parseable_incoming_requests{endpoint="/api/v1/query",method="POST",status="200"} 556 -parseable_incoming_requests{endpoint="/api/v1/query",method="POST",status="400"} 37 -parseable_incoming_requests{endpoint="/api/v1/role",method="GET",status="200"} 14 -parseable_incoming_requests{endpoint="/api/v1/role/default",method="GET",status="200"} 7 -parseable_incoming_requests{endpoint="/api/v1/role/{name}",method="GET",status="200"} 49 -parseable_incoming_requests{endpoint="/api/v1/user",method="GET",status="200"} 7 -parseable_incoming_requests{endpoint="/api/v1/user//role",method="GET",status="404"} 3 -parseable_incoming_requests{endpoint="/api/v1/user/{username}",method="POST",status="400"} 1 -parseable_incoming_requests{endpoint="/api/v1/user/{username}/role",method="GET",status="200"} 118 -# HELP parseable_local_fs_response_time FileSystem Request Latency -# TYPE parseable_local_fs_response_time histogram -parseable_local_fs_response_time_bucket{method="GET",status="200",le="0.005"} 22377 -parseable_local_fs_response_time_bucket{method="GET",status="200",le="0.01"} 22403 -parseable_local_fs_response_time_bucket{method="GET",status="200",le="0.025"} 22413 -parseable_local_fs_response_time_bucket{method="GET",status="200",le="0.05"} 22420 -parseable_local_fs_response_time_bucket{method="GET",status="200",le="0.1"} 22423 -parseable_local_fs_response_time_bucket{method="GET",status="200",le="0.25"} 22425 -parseable_local_fs_response_time_bucket{method="GET",status="200",le="0.5"} 22425 -parseable_local_fs_response_time_bucket{method="GET",status="200",le="1"} 22425 -parseable_local_fs_response_time_bucket{method="GET",status="200",le="2.5"} 22425 -parseable_local_fs_response_time_bucket{method="GET",status="200",le="5"} 22425 -parseable_local_fs_response_time_bucket{method="GET",status="200",le="10"} 22425 -parseable_local_fs_response_time_bucket{method="GET",status="200",le="+Inf"} 22425 -parseable_local_fs_response_time_sum{method="GET",status="200"} 5.208598371000016 -parseable_local_fs_response_time_count{method="GET",status="200"} 22425 -parseable_local_fs_response_time_bucket{method="GET",status="400",le="0.005"} 3 -parseable_local_fs_response_time_bucket{method="GET",status="400",le="0.01"} 3 -parseable_local_fs_response_time_bucket{method="GET",status="400",le="0.025"} 3 -parseable_local_fs_response_time_bucket{method="GET",status="400",le="0.05"} 3 -parseable_local_fs_response_time_bucket{method="GET",status="400",le="0.1"} 3 -parseable_local_fs_response_time_bucket{method="GET",status="400",le="0.25"} 3 -parseable_local_fs_response_time_bucket{method="GET",status="400",le="0.5"} 3 -parseable_local_fs_response_time_bucket{method="GET",status="400",le="1"} 3 -parseable_local_fs_response_time_bucket{method="GET",status="400",le="2.5"} 3 -parseable_local_fs_response_time_bucket{method="GET",status="400",le="5"} 3 -parseable_local_fs_response_time_bucket{method="GET",status="400",le="10"} 3 -parseable_local_fs_response_time_bucket{method="GET",status="400",le="+Inf"} 3 -parseable_local_fs_response_time_sum{method="GET",status="400"} 0.000081395 -parseable_local_fs_response_time_count{method="GET",status="400"} 3 -parseable_local_fs_response_time_bucket{method="PUT",status="200",le="0.005"} 15495 -parseable_local_fs_response_time_bucket{method="PUT",status="200",le="0.01"} 15686 -parseable_local_fs_response_time_bucket{method="PUT",status="200",le="0.025"} 15697 -parseable_local_fs_response_time_bucket{method="PUT",status="200",le="0.05"} 15698 -parseable_local_fs_response_time_bucket{method="PUT",status="200",le="0.1"} 15698 -parseable_local_fs_response_time_bucket{method="PUT",status="200",le="0.25"} 15698 -parseable_local_fs_response_time_bucket{method="PUT",status="200",le="0.5"} 15698 -parseable_local_fs_response_time_bucket{method="PUT",status="200",le="1"} 15698 -parseable_local_fs_response_time_bucket{method="PUT",status="200",le="2.5"} 15698 -parseable_local_fs_response_time_bucket{method="PUT",status="200",le="5"} 15698 -parseable_local_fs_response_time_bucket{method="PUT",status="200",le="10"} 15698 -parseable_local_fs_response_time_bucket{method="PUT",status="200",le="+Inf"} 15698 -parseable_local_fs_response_time_sum{method="PUT",status="200"} 13.289968733000006 -parseable_local_fs_response_time_count{method="PUT",status="200"} 15698 -# HELP parseable_query_execute_time Query execute time -# TYPE parseable_query_execute_time histogram -parseable_query_execute_time_bucket{stream="azureapimlog",le="0.005"} 20 -parseable_query_execute_time_bucket{stream="azureapimlog",le="0.01"} 51 -parseable_query_execute_time_bucket{stream="azureapimlog",le="0.025"} 77 -parseable_query_execute_time_bucket{stream="azureapimlog",le="0.05"} 80 -parseable_query_execute_time_bucket{stream="azureapimlog",le="0.1"} 82 -parseable_query_execute_time_bucket{stream="azureapimlog",le="0.25"} 82 -parseable_query_execute_time_bucket{stream="azureapimlog",le="0.5"} 82 -parseable_query_execute_time_bucket{stream="azureapimlog",le="1"} 82 -parseable_query_execute_time_bucket{stream="azureapimlog",le="2.5"} 82 -parseable_query_execute_time_bucket{stream="azureapimlog",le="5"} 82 -parseable_query_execute_time_bucket{stream="azureapimlog",le="10"} 82 -parseable_query_execute_time_bucket{stream="azureapimlog",le="+Inf"} 82 -parseable_query_execute_time_sum{stream="azureapimlog"} 0.8669833279999998 -parseable_query_execute_time_count{stream="azureapimlog"} 82 -parseable_query_execute_time_bucket{stream="backend",le="0.005"} 0 -parseable_query_execute_time_bucket{stream="backend",le="0.01"} 2 -parseable_query_execute_time_bucket{stream="backend",le="0.025"} 92 -parseable_query_execute_time_bucket{stream="backend",le="0.05"} 165 -parseable_query_execute_time_bucket{stream="backend",le="0.1"} 219 -parseable_query_execute_time_bucket{stream="backend",le="0.25"} 297 -parseable_query_execute_time_bucket{stream="backend",le="0.5"} 332 -parseable_query_execute_time_bucket{stream="backend",le="1"} 337 -parseable_query_execute_time_bucket{stream="backend",le="2.5"} 339 -parseable_query_execute_time_bucket{stream="backend",le="5"} 339 -parseable_query_execute_time_bucket{stream="backend",le="10"} 339 -parseable_query_execute_time_bucket{stream="backend",le="+Inf"} 339 -parseable_query_execute_time_sum{stream="backend"} 38.289159507 -parseable_query_execute_time_count{stream="backend"} 339 -parseable_query_execute_time_bucket{stream="druide2e",le="0.005"} 0 -parseable_query_execute_time_bucket{stream="druide2e",le="0.01"} 11 -parseable_query_execute_time_bucket{stream="druide2e",le="0.025"} 19 -parseable_query_execute_time_bucket{stream="druide2e",le="0.05"} 20 -parseable_query_execute_time_bucket{stream="druide2e",le="0.1"} 20 -parseable_query_execute_time_bucket{stream="druide2e",le="0.25"} 20 -parseable_query_execute_time_bucket{stream="druide2e",le="0.5"} 20 -parseable_query_execute_time_bucket{stream="druide2e",le="1"} 20 -parseable_query_execute_time_bucket{stream="druide2e",le="2.5"} 20 -parseable_query_execute_time_bucket{stream="druide2e",le="5"} 20 -parseable_query_execute_time_bucket{stream="druide2e",le="10"} 20 -parseable_query_execute_time_bucket{stream="druide2e",le="+Inf"} 20 -parseable_query_execute_time_sum{stream="druide2e"} 0.231367115 -parseable_query_execute_time_count{stream="druide2e"} 20 -parseable_query_execute_time_bucket{stream="frontend",le="0.005"} 0 -parseable_query_execute_time_bucket{stream="frontend",le="0.01"} 0 -parseable_query_execute_time_bucket{stream="frontend",le="0.025"} 17 -parseable_query_execute_time_bucket{stream="frontend",le="0.05"} 30 -parseable_query_execute_time_bucket{stream="frontend",le="0.1"} 49 -parseable_query_execute_time_bucket{stream="frontend",le="0.25"} 86 -parseable_query_execute_time_bucket{stream="frontend",le="0.5"} 106 -parseable_query_execute_time_bucket{stream="frontend",le="1"} 107 -parseable_query_execute_time_bucket{stream="frontend",le="2.5"} 111 -parseable_query_execute_time_bucket{stream="frontend",le="5"} 115 -parseable_query_execute_time_bucket{stream="frontend",le="10"} 115 -parseable_query_execute_time_bucket{stream="frontend",le="+Inf"} 115 -parseable_query_execute_time_sum{stream="frontend"} 35.50673526699998 -parseable_query_execute_time_count{stream="frontend"} 115 -# HELP parseable_response_code Response Codes -# TYPE parseable_response_code counter -parseable_response_code{endpoint="",method="GET",statuscode="200",type="200"} 610 -parseable_response_code{endpoint="",method="GET",statuscode="304",type="300"} 859 -parseable_response_code{endpoint="",method="GET",statuscode="400",type="400"} 12 -parseable_response_code{endpoint="",method="HEAD",statuscode="200",type="200"} 491 -parseable_response_code{endpoint="",method="OPTIONS",statuscode="405",type="400"} 3 -parseable_response_code{endpoint="",method="POST",statuscode="405",type="400"} 13 -parseable_response_code{endpoint="*",method="M-SEARCH",statuscode="404",type="400"} 2 -parseable_response_code{endpoint="/api/v1",method="GET",statuscode="404",type="400"} 1 -parseable_response_code{endpoint="/api/v1/about",method="GET",statuscode="200",type="200"} 70 -parseable_response_code{endpoint="/api/v1/ingest",method="POST",statuscode="200",type="200"} 6088833 -parseable_response_code{endpoint="/api/v1/log-stream",method="GET",statuscode="404",type="400"} 1 -parseable_response_code{endpoint="/api/v1/logstream",method="GET",statuscode="200",type="200"} 77 -parseable_response_code{endpoint="/api/v1/logstream//schema",method="GET",statuscode="404",type="400"} 3 -parseable_response_code{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",statuscode="200",type="200"} 91 -parseable_response_code{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",statuscode="200",type="200"} 91 -parseable_response_code{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",statuscode="200",type="200"} 415 -parseable_response_code{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",statuscode="200",type="200"} 1 -parseable_response_code{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",statuscode="200",type="200"} 145 -parseable_response_code{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",statuscode="200",type="200"} 320 -parseable_response_code{endpoint="/api/v1/metrics",method="GET",statuscode="200",type="200"} 64 -parseable_response_code{endpoint="/api/v1/o/code",method="GET",statuscode="301",type="300"} 3 -parseable_response_code{endpoint="/api/v1/o/code",method="GET",statuscode="400",type="400"} 1 -parseable_response_code{endpoint="/api/v1/o/login",method="GET",statuscode="301",type="300"} 19 -parseable_response_code{endpoint="/api/v1/o/login",method="GET",statuscode="307",type="300"} 3 -parseable_response_code{endpoint="/api/v1/o/login",method="GET",statuscode="400",type="400"} 1 -parseable_response_code{endpoint="/api/v1/o/logout",method="GET",statuscode="301",type="300"} 13 -parseable_response_code{endpoint="/api/v1/query",method="POST",statuscode="200",type="200"} 556 -parseable_response_code{endpoint="/api/v1/query",method="POST",statuscode="400",type="400"} 37 -parseable_response_code{endpoint="/api/v1/role",method="GET",statuscode="200",type="200"} 14 -parseable_response_code{endpoint="/api/v1/role/default",method="GET",statuscode="200",type="200"} 7 -parseable_response_code{endpoint="/api/v1/role/{name}",method="GET",statuscode="200",type="200"} 49 -parseable_response_code{endpoint="/api/v1/user",method="GET",statuscode="200",type="200"} 7 -parseable_response_code{endpoint="/api/v1/user//role",method="GET",statuscode="404",type="400"} 3 -parseable_response_code{endpoint="/api/v1/user/{username}",method="POST",statuscode="400",type="400"} 1 -parseable_response_code{endpoint="/api/v1/user/{username}/role",method="GET",statuscode="200",type="200"} 118 -# HELP parseable_response_time Response Times -# TYPE parseable_response_time histogram -parseable_response_time_bucket{endpoint="",method="GET",status="200",le="0.005"} 488 -parseable_response_time_bucket{endpoint="",method="GET",status="200",le="0.01"} 517 -parseable_response_time_bucket{endpoint="",method="GET",status="200",le="0.025"} 554 -parseable_response_time_bucket{endpoint="",method="GET",status="200",le="0.05"} 580 -parseable_response_time_bucket{endpoint="",method="GET",status="200",le="0.1"} 598 -parseable_response_time_bucket{endpoint="",method="GET",status="200",le="0.25"} 607 -parseable_response_time_bucket{endpoint="",method="GET",status="200",le="0.5"} 609 -parseable_response_time_bucket{endpoint="",method="GET",status="200",le="1"} 610 -parseable_response_time_bucket{endpoint="",method="GET",status="200",le="2.5"} 610 -parseable_response_time_bucket{endpoint="",method="GET",status="200",le="5"} 610 -parseable_response_time_bucket{endpoint="",method="GET",status="200",le="10"} 610 -parseable_response_time_bucket{endpoint="",method="GET",status="200",le="+Inf"} 610 -parseable_response_time_sum{endpoint="",method="GET",status="200"} 5.510139017 -parseable_response_time_count{endpoint="",method="GET",status="200"} 610 -parseable_response_time_bucket{endpoint="",method="GET",status="304",le="0.005"} 852 -parseable_response_time_bucket{endpoint="",method="GET",status="304",le="0.01"} 855 -parseable_response_time_bucket{endpoint="",method="GET",status="304",le="0.025"} 857 -parseable_response_time_bucket{endpoint="",method="GET",status="304",le="0.05"} 858 -parseable_response_time_bucket{endpoint="",method="GET",status="304",le="0.1"} 859 -parseable_response_time_bucket{endpoint="",method="GET",status="304",le="0.25"} 859 -parseable_response_time_bucket{endpoint="",method="GET",status="304",le="0.5"} 859 -parseable_response_time_bucket{endpoint="",method="GET",status="304",le="1"} 859 -parseable_response_time_bucket{endpoint="",method="GET",status="304",le="2.5"} 859 -parseable_response_time_bucket{endpoint="",method="GET",status="304",le="5"} 859 -parseable_response_time_bucket{endpoint="",method="GET",status="304",le="10"} 859 -parseable_response_time_bucket{endpoint="",method="GET",status="304",le="+Inf"} 859 -parseable_response_time_sum{endpoint="",method="GET",status="304"} 0.201786402 -parseable_response_time_count{endpoint="",method="GET",status="304"} 859 -parseable_response_time_bucket{endpoint="",method="GET",status="400",le="0.005"} 12 -parseable_response_time_bucket{endpoint="",method="GET",status="400",le="0.01"} 12 -parseable_response_time_bucket{endpoint="",method="GET",status="400",le="0.025"} 12 -parseable_response_time_bucket{endpoint="",method="GET",status="400",le="0.05"} 12 -parseable_response_time_bucket{endpoint="",method="GET",status="400",le="0.1"} 12 -parseable_response_time_bucket{endpoint="",method="GET",status="400",le="0.25"} 12 -parseable_response_time_bucket{endpoint="",method="GET",status="400",le="0.5"} 12 -parseable_response_time_bucket{endpoint="",method="GET",status="400",le="1"} 12 -parseable_response_time_bucket{endpoint="",method="GET",status="400",le="2.5"} 12 -parseable_response_time_bucket{endpoint="",method="GET",status="400",le="5"} 12 -parseable_response_time_bucket{endpoint="",method="GET",status="400",le="10"} 12 -parseable_response_time_bucket{endpoint="",method="GET",status="400",le="+Inf"} 12 -parseable_response_time_sum{endpoint="",method="GET",status="400"} 0.000129388 -parseable_response_time_count{endpoint="",method="GET",status="400"} 12 -parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="0.005"} 491 -parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="0.01"} 491 -parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="0.025"} 491 -parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="0.05"} 491 -parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="0.1"} 491 -parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="0.25"} 491 -parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="0.5"} 491 -parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="1"} 491 -parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="2.5"} 491 -parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="5"} 491 -parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="10"} 491 -parseable_response_time_bucket{endpoint="",method="HEAD",status="200",le="+Inf"} 491 -parseable_response_time_sum{endpoint="",method="HEAD",status="200"} 0.06343978 -parseable_response_time_count{endpoint="",method="HEAD",status="200"} 491 -parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="0.005"} 3 -parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="0.01"} 3 -parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="0.025"} 3 -parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="0.05"} 3 -parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="0.1"} 3 -parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="0.25"} 3 -parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="0.5"} 3 -parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="1"} 3 -parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="2.5"} 3 -parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="5"} 3 -parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="10"} 3 -parseable_response_time_bucket{endpoint="",method="OPTIONS",status="405",le="+Inf"} 3 -parseable_response_time_sum{endpoint="",method="OPTIONS",status="405"} 0.000079471 -parseable_response_time_count{endpoint="",method="OPTIONS",status="405"} 3 -parseable_response_time_bucket{endpoint="",method="POST",status="405",le="0.005"} 13 -parseable_response_time_bucket{endpoint="",method="POST",status="405",le="0.01"} 13 -parseable_response_time_bucket{endpoint="",method="POST",status="405",le="0.025"} 13 -parseable_response_time_bucket{endpoint="",method="POST",status="405",le="0.05"} 13 -parseable_response_time_bucket{endpoint="",method="POST",status="405",le="0.1"} 13 -parseable_response_time_bucket{endpoint="",method="POST",status="405",le="0.25"} 13 -parseable_response_time_bucket{endpoint="",method="POST",status="405",le="0.5"} 13 -parseable_response_time_bucket{endpoint="",method="POST",status="405",le="1"} 13 -parseable_response_time_bucket{endpoint="",method="POST",status="405",le="2.5"} 13 -parseable_response_time_bucket{endpoint="",method="POST",status="405",le="5"} 13 -parseable_response_time_bucket{endpoint="",method="POST",status="405",le="10"} 13 -parseable_response_time_bucket{endpoint="",method="POST",status="405",le="+Inf"} 13 -parseable_response_time_sum{endpoint="",method="POST",status="405"} 0.001605942 -parseable_response_time_count{endpoint="",method="POST",status="405"} 13 -parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="0.005"} 2 -parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="0.01"} 2 -parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="0.025"} 2 -parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="0.05"} 2 -parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="0.1"} 2 -parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="0.25"} 2 -parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="0.5"} 2 -parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="1"} 2 -parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="2.5"} 2 -parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="5"} 2 -parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="10"} 2 -parseable_response_time_bucket{endpoint="*",method="M-SEARCH",status="404",le="+Inf"} 2 -parseable_response_time_sum{endpoint="*",method="M-SEARCH",status="404"} 0.000025608000000000003 -parseable_response_time_count{endpoint="*",method="M-SEARCH",status="404"} 2 -parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="0.005"} 1 -parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="0.01"} 1 -parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="0.025"} 1 -parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="0.05"} 1 -parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="0.1"} 1 -parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="0.25"} 1 -parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="0.5"} 1 -parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="1"} 1 -parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="2.5"} 1 -parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="5"} 1 -parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="10"} 1 -parseable_response_time_bucket{endpoint="/api/v1",method="GET",status="404",le="+Inf"} 1 -parseable_response_time_sum{endpoint="/api/v1",method="GET",status="404"} 0.000016301 -parseable_response_time_count{endpoint="/api/v1",method="GET",status="404"} 1 -parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="0.005"} 0 -parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="0.01"} 0 -parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="0.025"} 0 -parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="0.05"} 0 -parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="0.1"} 0 -parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="0.25"} 0 -parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="0.5"} 0 -parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="1"} 66 -parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="2.5"} 70 -parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="5"} 70 -parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="10"} 70 -parseable_response_time_bucket{endpoint="/api/v1/about",method="GET",status="200",le="+Inf"} 70 -parseable_response_time_sum{endpoint="/api/v1/about",method="GET",status="200"} 56.99262189200002 -parseable_response_time_count{endpoint="/api/v1/about",method="GET",status="200"} 70 -parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="0.005"} 6087344 -parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="0.01"} 6088376 -parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="0.025"} 6088679 -parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="0.05"} 6088777 -parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="0.1"} 6088813 -parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="0.25"} 6088830 -parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="0.5"} 6088833 -parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="1"} 6088833 -parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="2.5"} 6088833 -parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="5"} 6088833 -parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="10"} 6088833 -parseable_response_time_bucket{endpoint="/api/v1/ingest",method="POST",status="200",le="+Inf"} 6088833 -parseable_response_time_sum{endpoint="/api/v1/ingest",method="POST",status="200"} 1548.8532109968596 -parseable_response_time_count{endpoint="/api/v1/ingest",method="POST",status="200"} 6088833 -parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="0.005"} 1 -parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="0.01"} 1 -parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="0.025"} 1 -parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="0.05"} 1 -parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="0.1"} 1 -parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="0.25"} 1 -parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="0.5"} 1 -parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="1"} 1 -parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="2.5"} 1 -parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="5"} 1 -parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="10"} 1 -parseable_response_time_bucket{endpoint="/api/v1/log-stream",method="GET",status="404",le="+Inf"} 1 -parseable_response_time_sum{endpoint="/api/v1/log-stream",method="GET",status="404"} 0.000025108 -parseable_response_time_count{endpoint="/api/v1/log-stream",method="GET",status="404"} 1 -parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="0.005"} 24 -parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="0.01"} 66 -parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="0.025"} 77 -parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="0.05"} 77 -parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="0.1"} 77 -parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="0.25"} 77 -parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="0.5"} 77 -parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="1"} 77 -parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="2.5"} 77 -parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="5"} 77 -parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="10"} 77 -parseable_response_time_bucket{endpoint="/api/v1/logstream",method="GET",status="200",le="+Inf"} 77 -parseable_response_time_sum{endpoint="/api/v1/logstream",method="GET",status="200"} 0.5176541920000001 -parseable_response_time_count{endpoint="/api/v1/logstream",method="GET",status="200"} 77 -parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="0.005"} 3 -parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="0.01"} 3 -parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="0.025"} 3 -parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="0.05"} 3 -parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="0.1"} 3 -parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="0.25"} 3 -parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="0.5"} 3 -parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="1"} 3 -parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="2.5"} 3 -parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="5"} 3 -parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="10"} 3 -parseable_response_time_bucket{endpoint="/api/v1/logstream//schema",method="GET",status="404",le="+Inf"} 3 -parseable_response_time_sum{endpoint="/api/v1/logstream//schema",method="GET",status="404"} 0.000140426 -parseable_response_time_count{endpoint="/api/v1/logstream//schema",method="GET",status="404"} 3 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="0.005"} 82 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="0.01"} 85 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="0.025"} 87 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="0.05"} 87 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="0.1"} 91 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="0.25"} 91 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="0.5"} 91 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="1"} 91 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="2.5"} 91 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="5"} 91 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="10"} 91 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200",le="+Inf"} 91 -parseable_response_time_sum{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200"} 0.3835341989999999 -parseable_response_time_count{endpoint="/api/v1/logstream/{logstream}/alert",method="GET",status="200"} 91 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="0.005"} 76 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="0.01"} 80 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="0.025"} 82 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="0.05"} 86 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="0.1"} 90 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="0.25"} 91 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="0.5"} 91 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="1"} 91 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="2.5"} 91 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="5"} 91 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="10"} 91 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200",le="+Inf"} 91 -parseable_response_time_sum{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200"} 0.6765673750000003 -parseable_response_time_count{endpoint="/api/v1/logstream/{logstream}/cache",method="GET",status="200"} 91 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="0.005"} 391 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="0.01"} 393 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="0.025"} 396 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="0.05"} 403 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="0.1"} 409 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="0.25"} 415 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="0.5"} 415 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="1"} 415 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="2.5"} 415 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="5"} 415 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="10"} 415 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200",le="+Inf"} 415 -parseable_response_time_sum{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200"} 1.7405037490000002 -parseable_response_time_count{endpoint="/api/v1/logstream/{logstream}/retention",method="GET",status="200"} 415 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="0.005"} 1 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="0.01"} 1 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="0.025"} 1 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="0.05"} 1 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="0.1"} 1 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="0.25"} 1 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="0.5"} 1 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="1"} 1 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="2.5"} 1 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="5"} 1 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="10"} 1 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200",le="+Inf"} 1 -parseable_response_time_sum{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200"} 0.000758548 -parseable_response_time_count{endpoint="/api/v1/logstream/{logstream}/retention",method="PUT",status="200"} 1 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="0.005"} 44 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="0.01"} 55 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="0.025"} 84 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="0.05"} 123 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="0.1"} 137 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="0.25"} 145 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="0.5"} 145 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="1"} 145 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="2.5"} 145 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="5"} 145 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="10"} 145 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200",le="+Inf"} 145 -parseable_response_time_sum{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200"} 4.103456094999999 -parseable_response_time_count{endpoint="/api/v1/logstream/{logstream}/schema",method="GET",status="200"} 145 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="0.005"} 316 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="0.01"} 320 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="0.025"} 320 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="0.05"} 320 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="0.1"} 320 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="0.25"} 320 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="0.5"} 320 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="1"} 320 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="2.5"} 320 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="5"} 320 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="10"} 320 -parseable_response_time_bucket{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200",le="+Inf"} 320 -parseable_response_time_sum{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200"} 0.13364279899999998 -parseable_response_time_count{endpoint="/api/v1/logstream/{logstream}/stats",method="GET",status="200"} 320 -parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="0.005"} 60 -parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="0.01"} 64 -parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="0.025"} 64 -parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="0.05"} 64 -parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="0.1"} 64 -parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="0.25"} 64 -parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="0.5"} 64 -parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="1"} 64 -parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="2.5"} 64 -parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="5"} 64 -parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="10"} 64 -parseable_response_time_bucket{endpoint="/api/v1/metrics",method="GET",status="200",le="+Inf"} 64 -parseable_response_time_sum{endpoint="/api/v1/metrics",method="GET",status="200"} 0.22528931599999993 -parseable_response_time_count{endpoint="/api/v1/metrics",method="GET",status="200"} 64 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="0.005"} 0 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="0.01"} 0 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="0.025"} 0 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="0.05"} 0 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="0.1"} 0 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="0.25"} 0 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="0.5"} 3 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="1"} 3 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="2.5"} 3 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="5"} 3 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="10"} 3 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="301",le="+Inf"} 3 -parseable_response_time_sum{endpoint="/api/v1/o/code",method="GET",status="301"} 0.918596513 -parseable_response_time_count{endpoint="/api/v1/o/code",method="GET",status="301"} 3 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="0.005"} 1 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="0.01"} 1 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="0.025"} 1 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="0.05"} 1 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="0.1"} 1 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="0.25"} 1 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="0.5"} 1 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="1"} 1 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="2.5"} 1 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="5"} 1 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="10"} 1 -parseable_response_time_bucket{endpoint="/api/v1/o/code",method="GET",status="400",le="+Inf"} 1 -parseable_response_time_sum{endpoint="/api/v1/o/code",method="GET",status="400"} 0.00013196 -parseable_response_time_count{endpoint="/api/v1/o/code",method="GET",status="400"} 1 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="0.005"} 0 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="0.01"} 0 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="0.025"} 0 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="0.05"} 10 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="0.1"} 19 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="0.25"} 19 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="0.5"} 19 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="1"} 19 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="2.5"} 19 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="5"} 19 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="10"} 19 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="301",le="+Inf"} 19 -parseable_response_time_sum{endpoint="/api/v1/o/login",method="GET",status="301"} 0.955510771 -parseable_response_time_count{endpoint="/api/v1/o/login",method="GET",status="301"} 19 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="0.005"} 3 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="0.01"} 3 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="0.025"} 3 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="0.05"} 3 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="0.1"} 3 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="0.25"} 3 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="0.5"} 3 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="1"} 3 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="2.5"} 3 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="5"} 3 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="10"} 3 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="307",le="+Inf"} 3 -parseable_response_time_sum{endpoint="/api/v1/o/login",method="GET",status="307"} 0.000257781 -parseable_response_time_count{endpoint="/api/v1/o/login",method="GET",status="307"} 3 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="0.005"} 0 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="0.01"} 0 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="0.025"} 0 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="0.05"} 1 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="0.1"} 1 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="0.25"} 1 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="0.5"} 1 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="1"} 1 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="2.5"} 1 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="5"} 1 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="10"} 1 -parseable_response_time_bucket{endpoint="/api/v1/o/login",method="GET",status="400",le="+Inf"} 1 -parseable_response_time_sum{endpoint="/api/v1/o/login",method="GET",status="400"} 0.04677527 -parseable_response_time_count{endpoint="/api/v1/o/login",method="GET",status="400"} 1 -parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="0.005"} 13 -parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="0.01"} 13 -parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="0.025"} 13 -parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="0.05"} 13 -parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="0.1"} 13 -parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="0.25"} 13 -parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="0.5"} 13 -parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="1"} 13 -parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="2.5"} 13 -parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="5"} 13 -parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="10"} 13 -parseable_response_time_bucket{endpoint="/api/v1/o/logout",method="GET",status="301",le="+Inf"} 13 -parseable_response_time_sum{endpoint="/api/v1/o/logout",method="GET",status="301"} 0.000949886 -parseable_response_time_count{endpoint="/api/v1/o/logout",method="GET",status="301"} 13 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="0.005"} 1 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="0.01"} 9 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="0.025"} 116 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="0.05"} 221 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="0.1"} 297 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="0.25"} 395 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="0.5"} 520 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="1"} 544 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="2.5"} 552 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="5"} 556 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="10"} 556 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="200",le="+Inf"} 556 -parseable_response_time_sum{endpoint="/api/v1/query",method="POST",status="200"} 114.43764627099998 -parseable_response_time_count{endpoint="/api/v1/query",method="POST",status="200"} 556 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="0.005"} 35 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="0.01"} 35 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="0.025"} 36 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="0.05"} 37 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="0.1"} 37 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="0.25"} 37 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="0.5"} 37 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="1"} 37 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="2.5"} 37 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="5"} 37 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="10"} 37 -parseable_response_time_bucket{endpoint="/api/v1/query",method="POST",status="400",le="+Inf"} 37 -parseable_response_time_sum{endpoint="/api/v1/query",method="POST",status="400"} 0.060289156999999996 -parseable_response_time_count{endpoint="/api/v1/query",method="POST",status="400"} 37 -parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="0.005"} 14 -parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="0.01"} 14 -parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="0.025"} 14 -parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="0.05"} 14 -parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="0.1"} 14 -parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="0.25"} 14 -parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="0.5"} 14 -parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="1"} 14 -parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="2.5"} 14 -parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="5"} 14 -parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="10"} 14 -parseable_response_time_bucket{endpoint="/api/v1/role",method="GET",status="200",le="+Inf"} 14 -parseable_response_time_sum{endpoint="/api/v1/role",method="GET",status="200"} 0.008029307000000001 -parseable_response_time_count{endpoint="/api/v1/role",method="GET",status="200"} 14 -parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="0.005"} 7 -parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="0.01"} 7 -parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="0.025"} 7 -parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="0.05"} 7 -parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="0.1"} 7 -parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="0.25"} 7 -parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="0.5"} 7 -parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="1"} 7 -parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="2.5"} 7 -parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="5"} 7 -parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="10"} 7 -parseable_response_time_bucket{endpoint="/api/v1/role/default",method="GET",status="200",le="+Inf"} 7 -parseable_response_time_sum{endpoint="/api/v1/role/default",method="GET",status="200"} 0.002047298 -parseable_response_time_count{endpoint="/api/v1/role/default",method="GET",status="200"} 7 -parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="0.005"} 49 -parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="0.01"} 49 -parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="0.025"} 49 -parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="0.05"} 49 -parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="0.1"} 49 -parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="0.25"} 49 -parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="0.5"} 49 -parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="1"} 49 -parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="2.5"} 49 -parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="5"} 49 -parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="10"} 49 -parseable_response_time_bucket{endpoint="/api/v1/role/{name}",method="GET",status="200",le="+Inf"} 49 -parseable_response_time_sum{endpoint="/api/v1/role/{name}",method="GET",status="200"} 0.03379075300000001 -parseable_response_time_count{endpoint="/api/v1/role/{name}",method="GET",status="200"} 49 -parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="0.005"} 7 -parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="0.01"} 7 -parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="0.025"} 7 -parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="0.05"} 7 -parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="0.1"} 7 -parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="0.25"} 7 -parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="0.5"} 7 -parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="1"} 7 -parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="2.5"} 7 -parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="5"} 7 -parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="10"} 7 -parseable_response_time_bucket{endpoint="/api/v1/user",method="GET",status="200",le="+Inf"} 7 -parseable_response_time_sum{endpoint="/api/v1/user",method="GET",status="200"} 0.0016202379999999998 -parseable_response_time_count{endpoint="/api/v1/user",method="GET",status="200"} 7 -parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="0.005"} 3 -parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="0.01"} 3 -parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="0.025"} 3 -parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="0.05"} 3 -parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="0.1"} 3 -parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="0.25"} 3 -parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="0.5"} 3 -parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="1"} 3 -parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="2.5"} 3 -parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="5"} 3 -parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="10"} 3 -parseable_response_time_bucket{endpoint="/api/v1/user//role",method="GET",status="404",le="+Inf"} 3 -parseable_response_time_sum{endpoint="/api/v1/user//role",method="GET",status="404"} 0.00014193 -parseable_response_time_count{endpoint="/api/v1/user//role",method="GET",status="404"} 3 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="0.005"} 1 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="0.01"} 1 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="0.025"} 1 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="0.05"} 1 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="0.1"} 1 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="0.25"} 1 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="0.5"} 1 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="1"} 1 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="2.5"} 1 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="5"} 1 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="10"} 1 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}",method="POST",status="400",le="+Inf"} 1 -parseable_response_time_sum{endpoint="/api/v1/user/{username}",method="POST",status="400"} 0.000176907 -parseable_response_time_count{endpoint="/api/v1/user/{username}",method="POST",status="400"} 1 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="0.005"} 89 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="0.01"} 109 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="0.025"} 118 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="0.05"} 118 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="0.1"} 118 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="0.25"} 118 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="0.5"} 118 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="1"} 118 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="2.5"} 118 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="5"} 118 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="10"} 118 -parseable_response_time_bucket{endpoint="/api/v1/user/{username}/role",method="GET",status="200",le="+Inf"} 118 -parseable_response_time_sum{endpoint="/api/v1/user/{username}/role",method="GET",status="200"} 0.3197786290000001 -parseable_response_time_count{endpoint="/api/v1/user/{username}/role",method="GET",status="200"} 118 -# HELP parseable_staging_files Active Staging files -# TYPE parseable_staging_files gauge -parseable_staging_files{stream="azureapimlog"} 0 -parseable_staging_files{stream="backend"} 1 -parseable_staging_files{stream="druide2e"} 0 -parseable_staging_files{stream="frontend"} 1 -# HELP parseable_storage_size Storage size bytes -# TYPE parseable_storage_size gauge -parseable_storage_size{format="arrows",stream="azureapimlog",type="staging"} 278360 -parseable_storage_size{format="arrows",stream="backend",type="staging"} 3710463112 -parseable_storage_size{format="arrows",stream="frontend",type="staging"} 3349968344 -parseable_storage_size{format="parquet",stream="azureapimlog",type="data"} 1628492 -parseable_storage_size{format="parquet",stream="backend",type="data"} 1061537471 -parseable_storage_size{format="parquet",stream="druide2e",type="data"} 3421013 -parseable_storage_size{format="parquet",stream="frontend",type="data"} 1042412371 -# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds. -# TYPE process_cpu_seconds_total counter -process_cpu_seconds_total 3794 -# HELP process_max_fds Maximum number of open file descriptors. -# TYPE process_max_fds gauge -process_max_fds 1048576 -# HELP process_open_fds Number of open file descriptors. -# TYPE process_open_fds gauge -process_open_fds 267 -# HELP process_resident_memory_bytes Resident memory size in bytes. -# TYPE process_resident_memory_bytes gauge -process_resident_memory_bytes 236376064 -# HELP process_start_time_seconds Start time of the process since unix epoch in seconds. -# TYPE process_start_time_seconds gauge -process_start_time_seconds 1709565826 -# HELP process_threads Number of OS threads in the process. -# TYPE process_threads gauge -process_threads 7 -# HELP process_virtual_memory_bytes Virtual memory size in bytes. -# TYPE process_virtual_memory_bytes gauge -process_virtual_memory_bytes 692588544 \ No newline at end of file From acf5fd2720f2d552c2efd4a0dcd3dda8f072b48e Mon Sep 17 00:00:00 2001 From: balaji-jr Date: Sat, 23 Mar 2024 02:16:46 +0530 Subject: [PATCH 10/20] feedbacks --- src/api/logStream.ts | 2 +- src/hooks/useLogStream.tsx | 3 +- src/pages/Home/CreateStreamModal.tsx | 8 +++- src/pages/Home/index.tsx | 70 ++++++++++++++++------------ src/pages/Systems/Ingestors.tsx | 6 +-- src/pages/Systems/Queriers.tsx | 3 -- 6 files changed, 52 insertions(+), 40 deletions(-) diff --git a/src/api/logStream.ts b/src/api/logStream.ts index cb5fb78c..52ff39b9 100644 --- a/src/api/logStream.ts +++ b/src/api/logStream.ts @@ -43,5 +43,5 @@ export const deleteLogStream = (streamName: string) => { }; export const createLogStream = (streamName: string) => { - return Axios().post(CREATE_STREAM_URL(streamName)); + return Axios().put(CREATE_STREAM_URL(streamName)); } diff --git a/src/hooks/useLogStream.tsx b/src/hooks/useLogStream.tsx index 38f5974a..1470235f 100644 --- a/src/hooks/useLogStream.tsx +++ b/src/hooks/useLogStream.tsx @@ -16,13 +16,14 @@ export const useLogStream = () => { isSuccess: createLogStreamIsSuccess, isError: createLogStreamIsError, isLoading: createLogStreamIsLoading, - } = useMutation((data: { streamName: string;}) => createLogStream(data.streamName), { + } = useMutation((data: { streamName: string, onSuccess: () => void}) => createLogStream(data.streamName), { onError: (data: AxiosError) => { if (isAxiosError(data) && typeof data.message === 'string') { notifyError({ message: data.message }); } }, onSuccess: (_data, variables) => { + variables.onSuccess && variables.onSuccess(); notifySuccess({message: `Stream ${variables.streamName} created successfully`}) }, }); diff --git a/src/pages/Home/CreateStreamModal.tsx b/src/pages/Home/CreateStreamModal.tsx index 0b86446f..1e89bc44 100644 --- a/src/pages/Home/CreateStreamModal.tsx +++ b/src/pages/Home/CreateStreamModal.tsx @@ -15,9 +15,15 @@ const CreateStreamModal: FC = (props) => { const { container, aboutTitle } = classes; const { createLogStreamMutation } = useLogStream(); + const { getLogStreamListRefetch } = useLogStream(); + + const onSuccessCallback = useCallback(() => { + close(); + getLogStreamListRefetch(); + }, []); const onSubmit = useCallback(() => { - createLogStreamMutation({ streamName }); + createLogStreamMutation({ streamName, onSuccess: onSuccessCallback }); }, [streamName]); return ( diff --git a/src/pages/Home/index.tsx b/src/pages/Home/index.tsx index c41615b2..f802259e 100644 --- a/src/pages/Home/index.tsx +++ b/src/pages/Home/index.tsx @@ -1,5 +1,5 @@ import { EmptySimple } from '@/components/Empty'; -import { Text, Button, Center, Box, Group, ActionIcon, Flex, Stack, Tooltip } from '@mantine/core'; +import { Text, Button, Center, Box, Group, ActionIcon, Flex, Stack, Tooltip, ScrollArea } from '@mantine/core'; import { IconChevronRight, IconExternalLink, IconPlus } from '@tabler/icons-react'; import { useEffect, type FC, useCallback, useState } from 'react'; import { useNavigate } from 'react-router-dom'; @@ -52,39 +52,47 @@ const Home: FC = () => { streamChangeCleanup(stream); navigate(`/${stream}/logs`); }, []); - const displayEmptyPlaceholder = Array.isArray(userSpecficStreams) && userSpecficStreams.length === 0 + const displayEmptyPlaceholder = Array.isArray(userSpecficStreams) && userSpecficStreams.length === 0; const toggleCreateStreamModal = useCallback(() => { - setCreateStreamModalOpen(prev => !prev) - }, []) + setCreateStreamModalOpen((prev) => !prev); + }, []); return ( - - - - All Streams - - {userSpecificAccessMap.hasCreateStreamAccess && ( - - )} - - - {displayEmptyPlaceholder ? ( - - ) : ( - - {Object.entries(metaData || {}).map(([stream, data]) => { - return ; - })} - - )} - + + + + + All Streams + + {userSpecificAccessMap.hasCreateStreamAccess && ( + + )} + + + {displayEmptyPlaceholder ? ( + + ) : ( + + {Object.entries(metaData || {}).map(([stream, data]) => { + return ; + })} + + )} + + ); }; diff --git a/src/pages/Systems/Ingestors.tsx b/src/pages/Systems/Ingestors.tsx index c29ecc76..ecc25977 100644 --- a/src/pages/Systems/Ingestors.tsx +++ b/src/pages/Systems/Ingestors.tsx @@ -10,8 +10,8 @@ type IngestorTableRow = { ingestor: Ingestor; }; -const fetchIngestorMetrics = async () => { - const endpoint = `/api/v1/metrics`; +const fetchIngestorMetrics = async (domain: string) => { + const endpoint = `${domain}/api/v1/metrics`; const response = await fetch(endpoint, { headers: { Accept: 'text/plain', @@ -39,7 +39,7 @@ const TableRow = (props: IngestorTableRow) => { useEffect(() => { const fetchData = async () => { try { - const readableStream = await fetchIngestorMetrics(); + const readableStream = await fetchIngestorMetrics(ingestor.domain_name); const reader = readableStream?.getReader(); const chunks:string[] = []; const readData = async () => { diff --git a/src/pages/Systems/Queriers.tsx b/src/pages/Systems/Queriers.tsx index 7de19a54..9bb6004b 100644 --- a/src/pages/Systems/Queriers.tsx +++ b/src/pages/Systems/Queriers.tsx @@ -78,10 +78,7 @@ const TableRow = () => { {metrics.totalEventsIngested} - {metrics.totalBytesIngested} {metrics.memoryUsage} - {metrics.stagingFilesCount} - {metrics.stagingSize} )} From cdccefab6fbc41615545244dc8ad8f44b4745c37 Mon Sep 17 00:00:00 2001 From: balaji-jr Date: Sat, 23 Mar 2024 02:36:16 +0530 Subject: [PATCH 11/20] more feedbacks - rm extra column in querier table --- src/pages/Systems/Ingestors.tsx | 2 +- src/pages/Systems/Queriers.tsx | 7 +------ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/pages/Systems/Ingestors.tsx b/src/pages/Systems/Ingestors.tsx index ecc25977..585ebb89 100644 --- a/src/pages/Systems/Ingestors.tsx +++ b/src/pages/Systems/Ingestors.tsx @@ -11,7 +11,7 @@ type IngestorTableRow = { }; const fetchIngestorMetrics = async (domain: string) => { - const endpoint = `${domain}/api/v1/metrics`; + const endpoint = `${domain}api/v1/metrics`; const response = await fetch(endpoint, { headers: { Accept: 'text/plain', diff --git a/src/pages/Systems/Queriers.tsx b/src/pages/Systems/Queriers.tsx index 9bb6004b..c1cf8771 100644 --- a/src/pages/Systems/Queriers.tsx +++ b/src/pages/Systems/Queriers.tsx @@ -1,4 +1,4 @@ -import { Stack, Text, Table, Tooltip, Skeleton } from '@mantine/core'; +import { Stack, Text, Table, Skeleton } from '@mantine/core'; import { FC, useEffect, useState } from 'react'; import classes from './styles/Systems.module.css'; import { IconHeartRateMonitor } from '@tabler/icons-react'; @@ -73,11 +73,6 @@ const TableRow = () => { ) : ( <> - - - {metrics.totalEventsIngested} - - {metrics.memoryUsage} )} From 1038dd81086aa116b8728f399b25452ad1079e1b Mon Sep 17 00:00:00 2001 From: balaji-jr Date: Sun, 24 Mar 2024 12:19:08 +0530 Subject: [PATCH 12/20] added storage and staging path to the ingestor table --- src/@types/parseable/api/clusterInfo.ts | 5 +++-- src/pages/Systems/Ingestors.tsx | 10 ++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/@types/parseable/api/clusterInfo.ts b/src/@types/parseable/api/clusterInfo.ts index 14d11a71..c6a65e4e 100644 --- a/src/@types/parseable/api/clusterInfo.ts +++ b/src/@types/parseable/api/clusterInfo.ts @@ -3,8 +3,9 @@ export type Ingestor = { reachable: boolean; error: string | null; status: string; - stagingPath: string; - storePath: string; + staging_path: string; + storage_path: string; + storage_mode: string; }; export type ClusterInfo = Ingestor[]; diff --git a/src/pages/Systems/Ingestors.tsx b/src/pages/Systems/Ingestors.tsx index 585ebb89..6528d545 100644 --- a/src/pages/Systems/Ingestors.tsx +++ b/src/pages/Systems/Ingestors.tsx @@ -26,7 +26,7 @@ const fetchIngestorMetrics = async (domain: string) => { }; const TrLoadingState = () => ( - + ); @@ -101,8 +101,9 @@ const TableRow = (props: IngestorTableRow) => { {metrics.memoryUsage} {metrics.stagingFilesCount} {metrics.stagingSize} - {ingestor.stagingPath || ''} - {ingestor.storePath || ''} + {ingestor.staging_path || ''} + {ingestor.storage_mode || ''} + {ingestor.storage_path || ''} )} @@ -135,7 +136,8 @@ const TableHead = () => ( Staging Files Staging Size Staging Path - Store + Storage Mode + Storage Path Status From b4fc805498c0e7d0d6324278f397f6da418885e4 Mon Sep 17 00:00:00 2001 From: balaji-jr Date: Tue, 26 Mar 2024 12:15:46 +0530 Subject: [PATCH 13/20] rm storage mode from ingestor table --- src/@types/parseable/api/clusterInfo.ts | 1 - src/pages/Systems/Ingestors.tsx | 4 +--- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/@types/parseable/api/clusterInfo.ts b/src/@types/parseable/api/clusterInfo.ts index c6a65e4e..5929e6f6 100644 --- a/src/@types/parseable/api/clusterInfo.ts +++ b/src/@types/parseable/api/clusterInfo.ts @@ -5,7 +5,6 @@ export type Ingestor = { status: string; staging_path: string; storage_path: string; - storage_mode: string; }; export type ClusterInfo = Ingestor[]; diff --git a/src/pages/Systems/Ingestors.tsx b/src/pages/Systems/Ingestors.tsx index 6528d545..73fe1ade 100644 --- a/src/pages/Systems/Ingestors.tsx +++ b/src/pages/Systems/Ingestors.tsx @@ -26,7 +26,7 @@ const fetchIngestorMetrics = async (domain: string) => { }; const TrLoadingState = () => ( - + ); @@ -102,7 +102,6 @@ const TableRow = (props: IngestorTableRow) => { {metrics.stagingFilesCount} {metrics.stagingSize} {ingestor.staging_path || ''} - {ingestor.storage_mode || ''} {ingestor.storage_path || ''} )} @@ -136,7 +135,6 @@ const TableHead = () => ( Staging Files Staging Size Staging Path - Storage Mode Storage Path Status From dd51bccca2ff6d0a68e61609557cb7c91f7eace8 Mon Sep 17 00:00:00 2001 From: balaji-jr Date: Tue, 26 Mar 2024 12:57:17 +0530 Subject: [PATCH 14/20] added protocol scheme to domain label --- src/pages/Systems/Queriers.tsx | 2 +- src/pages/Systems/StandaloneServer.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/Systems/Queriers.tsx b/src/pages/Systems/Queriers.tsx index c1cf8771..34dab88d 100644 --- a/src/pages/Systems/Queriers.tsx +++ b/src/pages/Systems/Queriers.tsx @@ -66,7 +66,7 @@ const TableRow = () => { - {window.location.host} + {window.location.protocol}//{window.location.host} {isMetricsFetching || metrics === null ? ( diff --git a/src/pages/Systems/StandaloneServer.tsx b/src/pages/Systems/StandaloneServer.tsx index 8b11038c..2db60c13 100644 --- a/src/pages/Systems/StandaloneServer.tsx +++ b/src/pages/Systems/StandaloneServer.tsx @@ -73,7 +73,7 @@ const TableRow = (props: IngestorTableRow) => { - {window.location.host} + {window.location.protocol}//{window.location.host} {isMetricsFetching || metrics === null ? ( From ccf8fd918a3df5b9933fe9ed1b386bd088e27b8e Mon Sep 17 00:00:00 2001 From: balaji-jr Date: Wed, 27 Mar 2024 14:51:57 +0530 Subject: [PATCH 15/20] make req to querier to get ingestor metrics --- src/@types/parseable/api/clusterInfo.ts | 11 +++ src/api/cluster.ts | 4 +- src/api/constants.ts | 2 +- src/hooks/useClusterInfo.ts | 8 +-- src/pages/Systems/Ingestors.tsx | 93 +++++++------------------ src/pages/Systems/StandaloneServer.tsx | 12 ++-- 6 files changed, 50 insertions(+), 80 deletions(-) diff --git a/src/@types/parseable/api/clusterInfo.ts b/src/@types/parseable/api/clusterInfo.ts index 5929e6f6..41d02aff 100644 --- a/src/@types/parseable/api/clusterInfo.ts +++ b/src/@types/parseable/api/clusterInfo.ts @@ -7,4 +7,15 @@ export type Ingestor = { storage_path: string; }; +export type IngestorMetrics = { + address: string; + parseable_events_ingested: number; + parseable_staging_files: number; + process_resident_memory_bytes: number; + parseable_storage_size: { + staging: number; + data: number; + }; +}; + export type ClusterInfo = Ingestor[]; diff --git a/src/api/cluster.ts b/src/api/cluster.ts index 689c370e..93db5908 100644 --- a/src/api/cluster.ts +++ b/src/api/cluster.ts @@ -1,4 +1,4 @@ -import { Ingestor } from '@/@types/parseable/api/clusterInfo'; +import { Ingestor, IngestorMetrics } from '@/@types/parseable/api/clusterInfo'; import { Axios } from './axios'; import { CLUSTER_INFO_URL, CLUSTER_METRICS_URL } from './constants'; @@ -7,5 +7,5 @@ export const getClusterInfo = () => { }; export const getClusterMetrics = () => { - return Axios().get(CLUSTER_METRICS_URL); + return Axios().get(CLUSTER_METRICS_URL); }; diff --git a/src/api/constants.ts b/src/api/constants.ts index 9832a308..b6e53853 100644 --- a/src/api/constants.ts +++ b/src/api/constants.ts @@ -35,4 +35,4 @@ export const IS_LLM_ACTIVE_URL = `${LLM_QUERY_URL}/isactive`; export const CACHING_STATUS_URL = (streamName: string) => `${LOG_STREAM_LIST_URL}/${streamName}/cache`; export const CLUSTER_INFO_URL = `${API_V1}/cluster/info`; -export const CLUSTER_METRICS_URL = `${API_V1}/metrics`; +export const CLUSTER_METRICS_URL = `${API_V1}/cluster/metrics`; diff --git a/src/hooks/useClusterInfo.ts b/src/hooks/useClusterInfo.ts index c083b6e8..b65e68ca 100644 --- a/src/hooks/useClusterInfo.ts +++ b/src/hooks/useClusterInfo.ts @@ -1,7 +1,7 @@ import { useQuery } from 'react-query'; import { AxiosResponse } from 'axios'; import { getClusterInfo, getClusterMetrics } from '@/api/cluster'; -import { Ingestor } from '@/@types/parseable/api/clusterInfo'; +import { Ingestor, IngestorMetrics } from '@/@types/parseable/api/clusterInfo'; export const useClusterInfo = () => { const { @@ -25,17 +25,17 @@ export const useClusterInfo = () => { export const useClusterMetrics = () => { const { - data: clusterMetricsData, + data: clusterMetrics, isError: getClusterMetricsError, isSuccess: getClusterMetricsSuccess, isLoading: getClusterMetricsLoading, refetch: getClusterMetricsRefetch, - } = useQuery(['fetch-cluster-metrics'], () => getClusterMetrics(), { + } = useQuery>(['fetch-cluster-metrics'], () => getClusterMetrics(), { retry: false, refetchOnWindowFocus: false, }); return { - clusterMetricsData, + clusterMetrics, getClusterMetricsError, getClusterMetricsSuccess, getClusterMetricsLoading, diff --git a/src/pages/Systems/Ingestors.tsx b/src/pages/Systems/Ingestors.tsx index 73fe1ade..a586d8d8 100644 --- a/src/pages/Systems/Ingestors.tsx +++ b/src/pages/Systems/Ingestors.tsx @@ -1,28 +1,14 @@ import { Stack, Text, Table, Tooltip, ThemeIcon, Popover, Skeleton } from '@mantine/core'; -import { FC, useEffect, useState } from 'react'; +import { FC } from 'react'; import classes from './styles/Systems.module.css'; import { IconAlertCircle, IconBrandDatabricks, IconX } from '@tabler/icons-react'; -import { useClusterInfo } from '@/hooks/useClusterInfo'; -import { Ingestor } from '@/@types/parseable/api/clusterInfo'; -import { PrometheusMetricResponse, SanitizedMetrics, parsePrometheusResponse, sanitizeIngestorData } from './utils'; +import { useClusterInfo, useClusterMetrics } from '@/hooks/useClusterInfo'; +import { Ingestor, IngestorMetrics } from '@/@types/parseable/api/clusterInfo'; +import { HumanizeNumber, formatBytes } from '@/utils/formatBytes'; type IngestorTableRow = { ingestor: Ingestor; -}; - -const fetchIngestorMetrics = async (domain: string) => { - const endpoint = `${domain}api/v1/metrics`; - const response = await fetch(endpoint, { - headers: { - Accept: 'text/plain', - }, - }); - - if (!response.ok) { - throw new Error('Network response was not ok'); - } - - return response.body; + metrics: IngestorMetrics | undefined; }; const TrLoadingState = () => ( @@ -32,42 +18,7 @@ const TrLoadingState = () => ( ); const TableRow = (props: IngestorTableRow) => { - const { ingestor } = props; - const [isMetricsFetching, setMetricsFetching] = useState(true); - const [metrics, setMetrics] = useState(null); - - useEffect(() => { - const fetchData = async () => { - try { - const readableStream = await fetchIngestorMetrics(ingestor.domain_name); - const reader = readableStream?.getReader(); - const chunks:string[] = []; - const readData = async () => { - while (reader) { - const { done, value } = await reader.read(); - if (done) { - console.log('Stream reading complete'); - break; - } - const chunk = new TextDecoder().decode(value); - chunks.push(chunk); - } - }; - await readData(); - const data = chunks.join('') - if (typeof data !== 'string') throw 'Invalid prometheus response'; - - const parsedMetrics: PrometheusMetricResponse | null = parsePrometheusResponse(data); - const sanitizedMetrics = parsedMetrics === null ? null : sanitizeIngestorData(parsedMetrics); - setMetrics(sanitizedMetrics); - setMetricsFetching(false); - } catch (error) { - console.log('Error fetching metrics', error); - } - }; - - fetchData(); - }, []); + const { ingestor, metrics } = props; return ( @@ -88,24 +39,24 @@ const TableRow = (props: IngestorTableRow) => { )}
- {isMetricsFetching || metrics === null ? ( + {!metrics ? ( ) : ( <> - - {metrics.totalEventsIngested} + + {HumanizeNumber(metrics.parseable_events_ingested)} - {metrics.totalBytesIngested} - {metrics.memoryUsage} - {metrics.stagingFilesCount} - {metrics.stagingSize} + {formatBytes(metrics.parseable_storage_size.data)} + {formatBytes(metrics.process_resident_memory_bytes)} + {HumanizeNumber(metrics.parseable_staging_files)} + {formatBytes(metrics.parseable_storage_size.staging)} {ingestor.staging_path || ''} {ingestor.storage_path || ''} )} - + {ingestor.reachable ? 'Online' : 'Offline'} @@ -123,6 +74,7 @@ const TableRow = (props: IngestorTableRow) => { type IngestorTable = { ingestors: Ingestor[]; + allMetrics: IngestorMetrics[]; }; const TableHead = () => ( @@ -143,13 +95,14 @@ const TableHead = () => ( ); const IngestorsTable = (props: IngestorTable) => { - const { ingestors } = props; + const { ingestors, allMetrics } = props; return ( {ingestors.map((ingestor) => { - return ; + const metrics = allMetrics.find((ingestorMetric) => ingestorMetric.address === ingestor.domain_name); + return ; })}
@@ -158,7 +111,13 @@ const IngestorsTable = (props: IngestorTable) => { const Ingestors: FC = () => { const { clusterInfoData, getClusterInfoSuccess } = useClusterInfo(); - if (!getClusterInfoSuccess || !Array.isArray(clusterInfoData?.data)) return null; + const { clusterMetrics, getClusterMetricsSuccess } = useClusterMetrics(); + const showTable = + getClusterInfoSuccess && + getClusterMetricsSuccess && + Array.isArray(clusterInfoData?.data) && + Array.isArray(clusterMetrics?.data); + if (!showTable) return null; const totalActiveMachines = clusterInfoData?.data.filter((ingestor) => ingestor.reachable).length; const totalMachines = clusterInfoData?.data.length; @@ -171,7 +130,7 @@ const Ingestors: FC = () => { {`${totalActiveMachines} / ${totalMachines} Active`} - {clusterInfoData?.data && } + ); }; diff --git a/src/pages/Systems/StandaloneServer.tsx b/src/pages/Systems/StandaloneServer.tsx index 2db60c13..43c99bfd 100644 --- a/src/pages/Systems/StandaloneServer.tsx +++ b/src/pages/Systems/StandaloneServer.tsx @@ -41,7 +41,7 @@ const TableRow = (props: IngestorTableRow) => { try { const readableStream = await fetchIngestorMetrics(); const reader = readableStream?.getReader(); - const chunks:string[] = []; + const chunks: string[] = []; const readData = async () => { while (reader) { const { done, value } = await reader.read(); @@ -54,7 +54,7 @@ const TableRow = (props: IngestorTableRow) => { } }; await readData(); - const data = chunks.join('') + const data = chunks.join(''); if (typeof data !== 'string') throw 'Invalid prometheus response'; const parsedMetrics: PrometheusMetricResponse | null = parsePrometheusResponse(data); @@ -82,7 +82,7 @@ const TableRow = (props: IngestorTableRow) => { <> - {metrics.totalEventsIngested} + {metrics.totalEventsIngested} {metrics.totalBytesIngested} @@ -122,14 +122,14 @@ const ServerTable = (props: AboutData) => { - +
); }; const StandaloneServer: FC = () => { - const {getAboutData} = useAbout() + const { getAboutData } = useAbout(); return ( @@ -138,7 +138,7 @@ const StandaloneServer: FC = () => { Parseable Server - {getAboutData?.data && } + {getAboutData?.data && } ); }; From 22a2d98641ed4137bbd681f496df851e95b674a8 Mon Sep 17 00:00:00 2001 From: balaji-jr Date: Wed, 27 Mar 2024 14:55:24 +0530 Subject: [PATCH 16/20] handle empty response - ingestor table --- src/pages/Systems/Ingestors.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/pages/Systems/Ingestors.tsx b/src/pages/Systems/Ingestors.tsx index a586d8d8..c3fed39c 100644 --- a/src/pages/Systems/Ingestors.tsx +++ b/src/pages/Systems/Ingestors.tsx @@ -73,8 +73,8 @@ const TableRow = (props: IngestorTableRow) => { }; type IngestorTable = { - ingestors: Ingestor[]; - allMetrics: IngestorMetrics[]; + ingestors: Ingestor[] | undefined; + allMetrics: IngestorMetrics[] | undefined; }; const TableHead = () => ( @@ -96,6 +96,8 @@ const TableHead = () => ( const IngestorsTable = (props: IngestorTable) => { const { ingestors, allMetrics } = props; + if (!ingestors || !allMetrics) return null; + return ( From 1042f7c319a8a74d9a58cb8f9e1f2681c27287f2 Mon Sep 17 00:00:00 2001 From: balaji-jr Date: Thu, 28 Mar 2024 11:39:07 +0530 Subject: [PATCH 17/20] Ingestor table - handle offline ingestor loading state --- src/pages/Systems/Ingestors.tsx | 61 ++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 28 deletions(-) diff --git a/src/pages/Systems/Ingestors.tsx b/src/pages/Systems/Ingestors.tsx index c3fed39c..1ed5dd53 100644 --- a/src/pages/Systems/Ingestors.tsx +++ b/src/pages/Systems/Ingestors.tsx @@ -1,7 +1,7 @@ -import { Stack, Text, Table, Tooltip, ThemeIcon, Popover, Skeleton } from '@mantine/core'; +import { Stack, Text, Table, Tooltip, ThemeIcon, Skeleton } from '@mantine/core'; import { FC } from 'react'; import classes from './styles/Systems.module.css'; -import { IconAlertCircle, IconBrandDatabricks, IconX } from '@tabler/icons-react'; +import { IconAlertCircle, IconBrandDatabricks } from '@tabler/icons-react'; import { useClusterInfo, useClusterMetrics } from '@/hooks/useClusterInfo'; import { Ingestor, IngestorMetrics } from '@/@types/parseable/api/clusterInfo'; import { HumanizeNumber, formatBytes } from '@/utils/formatBytes'; @@ -12,48 +12,53 @@ type IngestorTableRow = { }; const TrLoadingState = () => ( - + ); const TableRow = (props: IngestorTableRow) => { const { ingestor, metrics } = props; - + const isOfflineIngestor = !ingestor.reachable; return ( {ingestor.domain_name} - {ingestor.status === 'offline' && ( - - - - - - - - {ingestor.error} - - + {!ingestor.reachable && ( + + + + + )} - {!metrics ? ( + {!metrics && !isOfflineIngestor ? ( ) : ( <> - - {HumanizeNumber(metrics.parseable_events_ingested)} + + + {isOfflineIngestor ? '–' : HumanizeNumber(metrics?.parseable_events_ingested || 0)} + - {formatBytes(metrics.parseable_storage_size.data)} - {formatBytes(metrics.process_resident_memory_bytes)} - {HumanizeNumber(metrics.parseable_staging_files)} - {formatBytes(metrics.parseable_storage_size.staging)} - {ingestor.staging_path || ''} - {ingestor.storage_path || ''} + + {isOfflineIngestor ? '–' : formatBytes(metrics?.parseable_storage_size.data || 0)} + + + {isOfflineIngestor ? '–' : formatBytes(metrics?.process_resident_memory_bytes || 0)} + + + {isOfflineIngestor ? '–' : HumanizeNumber(metrics?.parseable_staging_files || 0)} + + + {isOfflineIngestor ? '–' : formatBytes(metrics?.parseable_storage_size.staging || 0)} + + {ingestor.staging_path || 'Unknown'} + {ingestor.storage_path || 'Unknown'} )} @@ -61,13 +66,13 @@ const TableRow = (props: IngestorTableRow) => { {ingestor.reachable ? 'Online' : 'Offline'} - + {/* {!ingestor.reachable ? ( ) : null} - + */} ); }; @@ -86,8 +91,8 @@ const TableHead = () => ( Memory Usage Staging Files Staging Size - Staging Path - Storage Path + Staging Path + Storage Path Status From f7741174259e6047382c30b99e58cafd1f18e0f7 Mon Sep 17 00:00:00 2001 From: balaji-jr Date: Fri, 29 Mar 2024 15:00:07 +0530 Subject: [PATCH 18/20] added action to rm ingestor --- src/api/cluster.ts | 6 +++++- src/api/constants.ts | 1 + src/hooks/useClusterInfo.ts | 34 ++++++++++++++++++++++++++++++--- src/pages/Systems/Ingestors.tsx | 34 +++++++++++++++++++++++++-------- 4 files changed, 63 insertions(+), 12 deletions(-) diff --git a/src/api/cluster.ts b/src/api/cluster.ts index 93db5908..84380172 100644 --- a/src/api/cluster.ts +++ b/src/api/cluster.ts @@ -1,6 +1,6 @@ import { Ingestor, IngestorMetrics } from '@/@types/parseable/api/clusterInfo'; import { Axios } from './axios'; -import { CLUSTER_INFO_URL, CLUSTER_METRICS_URL } from './constants'; +import { CLUSTER_INFO_URL, CLUSTER_METRICS_URL, INGESTOR_DELETE_URL } from './constants'; export const getClusterInfo = () => { return Axios().get(CLUSTER_INFO_URL); @@ -9,3 +9,7 @@ export const getClusterInfo = () => { export const getClusterMetrics = () => { return Axios().get(CLUSTER_METRICS_URL); }; + +export const deleteIngestor = (ingestorUrl: string) => { + return Axios().delete(INGESTOR_DELETE_URL(ingestorUrl)); +}; \ No newline at end of file diff --git a/src/api/constants.ts b/src/api/constants.ts index b6e53853..b6b41700 100644 --- a/src/api/constants.ts +++ b/src/api/constants.ts @@ -36,3 +36,4 @@ export const CACHING_STATUS_URL = (streamName: string) => `${LOG_STREAM_LIST_URL export const CLUSTER_INFO_URL = `${API_V1}/cluster/info`; export const CLUSTER_METRICS_URL = `${API_V1}/cluster/metrics`; +export const INGESTOR_DELETE_URL = (ingestorUrl: string) => `${API_V1}/cluster/${ingestorUrl}`; diff --git a/src/hooks/useClusterInfo.ts b/src/hooks/useClusterInfo.ts index b65e68ca..23c4a782 100644 --- a/src/hooks/useClusterInfo.ts +++ b/src/hooks/useClusterInfo.ts @@ -1,7 +1,8 @@ -import { useQuery } from 'react-query'; -import { AxiosResponse } from 'axios'; -import { getClusterInfo, getClusterMetrics } from '@/api/cluster'; +import { useMutation, useQuery } from 'react-query'; +import { AxiosError, AxiosResponse, isAxiosError } from 'axios'; +import { getClusterInfo, getClusterMetrics, deleteIngestor } from '@/api/cluster'; import { Ingestor, IngestorMetrics } from '@/@types/parseable/api/clusterInfo'; +import { notifyError, notifySuccess } from '@/utils/notification'; export const useClusterInfo = () => { const { @@ -42,3 +43,30 @@ export const useClusterMetrics = () => { getClusterMetricsRefetch, }; }; + +export const useDeleteIngestor = () => { + const { + mutate: deleteIngestorMutation, + isSuccess: deleteIngestorIsSuccess, + isError: deleteIngestorIsError, + isLoading: deleteIngestorIsLoading, + } = useMutation((data: { ingestorUrl: string; onSuccess: () => void }) => deleteIngestor(data.ingestorUrl), { + onError: (data: AxiosError) => { + if (isAxiosError(data) && data.response) { + const error = data.response.data as string; + typeof error === 'string' && notifyError({ message: error }); + } + }, + onSuccess: (_data, variables) => { + variables.onSuccess && variables.onSuccess(); + notifySuccess({ message: 'Ingestor removed successfullys' }); + }, + }); + + return { + deleteIngestorMutation, + deleteIngestorIsSuccess, + deleteIngestorIsError, + deleteIngestorIsLoading, + }; +}; diff --git a/src/pages/Systems/Ingestors.tsx b/src/pages/Systems/Ingestors.tsx index 1ed5dd53..43b5932c 100644 --- a/src/pages/Systems/Ingestors.tsx +++ b/src/pages/Systems/Ingestors.tsx @@ -1,8 +1,8 @@ -import { Stack, Text, Table, Tooltip, ThemeIcon, Skeleton } from '@mantine/core'; +import { Stack, Text, Table, Tooltip, ThemeIcon, Skeleton, Box, Loader } from '@mantine/core'; import { FC } from 'react'; import classes from './styles/Systems.module.css'; -import { IconAlertCircle, IconBrandDatabricks } from '@tabler/icons-react'; -import { useClusterInfo, useClusterMetrics } from '@/hooks/useClusterInfo'; +import { IconAlertCircle, IconBrandDatabricks, IconX } from '@tabler/icons-react'; +import { useClusterInfo, useClusterMetrics, useDeleteIngestor } from '@/hooks/useClusterInfo'; import { Ingestor, IngestorMetrics } from '@/@types/parseable/api/clusterInfo'; import { HumanizeNumber, formatBytes } from '@/utils/formatBytes'; @@ -17,9 +17,21 @@ const TrLoadingState = () => ( ); +function removeProtocol(url: string) { + if (url.startsWith("http://")) { + return url.slice(7); + } else if (url.startsWith("https://")) { + return url.slice(8); + } else { + return url; + } +} + const TableRow = (props: IngestorTableRow) => { const { ingestor, metrics } = props; const isOfflineIngestor = !ingestor.reachable; + const { deleteIngestorMutation, deleteIngestorIsLoading } = useDeleteIngestor(); + const {getClusterInfoRefetch} = useClusterInfo() return ( @@ -66,13 +78,19 @@ const TableRow = (props: IngestorTableRow) => { {ingestor.reachable ? 'Online' : 'Offline'} - {/* + {!ingestor.reachable ? ( - - - + deleteIngestorMutation({ ingestorUrl: removeProtocol(ingestor.domain_name), onSuccess: getClusterInfoRefetch })}> + {deleteIngestorIsLoading ? ( + + ) : ( + + + + )} + ) : null} - */} + ); }; From 3a316e704286b1fde9ff344c9cdf9eb6c2c79c31 Mon Sep 17 00:00:00 2001 From: balaji-jr Date: Fri, 29 Mar 2024 15:01:23 +0530 Subject: [PATCH 19/20] fixed rm ingestor toast text --- src/hooks/useClusterInfo.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/useClusterInfo.ts b/src/hooks/useClusterInfo.ts index 23c4a782..b96eef54 100644 --- a/src/hooks/useClusterInfo.ts +++ b/src/hooks/useClusterInfo.ts @@ -59,7 +59,7 @@ export const useDeleteIngestor = () => { }, onSuccess: (_data, variables) => { variables.onSuccess && variables.onSuccess(); - notifySuccess({ message: 'Ingestor removed successfullys' }); + notifySuccess({ message: 'Ingestor removed successfully' }); }, }); From 2bbdd115d38102cba38c97e4064b846cdde40a80 Mon Sep 17 00:00:00 2001 From: balaji-jr Date: Fri, 29 Mar 2024 16:26:52 +0530 Subject: [PATCH 20/20] rm trailig slash - ingestor url --- src/pages/Systems/Ingestors.tsx | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/pages/Systems/Ingestors.tsx b/src/pages/Systems/Ingestors.tsx index 43b5932c..a92ae2c6 100644 --- a/src/pages/Systems/Ingestors.tsx +++ b/src/pages/Systems/Ingestors.tsx @@ -17,14 +17,18 @@ const TrLoadingState = () => ( ); -function removeProtocol(url: string) { +function sanitizeIngestorUrl(url: string) { if (url.startsWith("http://")) { - return url.slice(7); + url = url.slice(7); } else if (url.startsWith("https://")) { - return url.slice(8); - } else { - return url; + url = url.slice(8); } + + if (url.endsWith("/")) { + url = url.slice(0, -1); + } + + return url; } const TableRow = (props: IngestorTableRow) => { @@ -80,7 +84,7 @@ const TableRow = (props: IngestorTableRow) => { {!ingestor.reachable ? ( - deleteIngestorMutation({ ingestorUrl: removeProtocol(ingestor.domain_name), onSuccess: getClusterInfoRefetch })}> + deleteIngestorMutation({ ingestorUrl: sanitizeIngestorUrl(ingestor.domain_name), onSuccess: getClusterInfoRefetch })}> {deleteIngestorIsLoading ? ( ) : (