import { Anchor, Badge, Group, Stack } from "@mantine/core"; import { FC } from "react"; export interface EndpointLinkProps { endpoint: string; globalUrl: string; } const EndpointLink: FC = ({ endpoint, globalUrl }) => { let url: URL; let search = ""; let invalidURL = false; try { url = new URL(endpoint); } catch (err: unknown) { // In cases of IPv6 addresses with a Zone ID, URL may not be parseable. // See https://github.com/prometheus/prometheus/issues/9760 // In this case, we attempt to prepare a synthetic URL with the // same query parameters, for rendering purposes. invalidURL = true; if (endpoint.indexOf("?") > -1) { search = endpoint.substring(endpoint.indexOf("?")); } url = new URL("http://0.0.0.0" + search); } const { host, pathname, protocol, searchParams }: URL = url; const params = Array.from(searchParams.entries()); const displayLink = invalidURL ? endpoint.replace(search, "") : `${protocol}//${host}${pathname}`; return ( {displayLink} {params.length > 0 && ( {params.map(([labelName, labelValue]: [string, string]) => { return ( {`${labelName}="${labelValue}"`} ); })} )} ); }; export default EndpointLink;