1
import React, { FC } from 'react';
2
import { Badge } from 'reactstrap';
4
export interface EndpointLinkProps {
9
const EndpointLink: FC<EndpointLinkProps> = ({ endpoint, globalUrl }) => {
12
let invalidURL = false;
14
url = new URL(endpoint);
15
} catch (err: unknown) {
16
// In cases of IPv6 addresses with a Zone ID, URL may not be parseable.
17
// See https://github.com/prometheus/prometheus/issues/9760
18
// In this case, we attempt to prepare a synthetic URL with the
19
// same query parameters, for rendering purposes.
21
if (endpoint.indexOf('?') > -1) {
22
search = endpoint.substring(endpoint.indexOf('?'));
24
url = new URL('http://0.0.0.0' + search);
27
const { host, pathname, protocol, searchParams }: URL = url;
28
const params = Array.from(searchParams.entries());
29
const displayLink = invalidURL ? endpoint.replace(search, '') : `${protocol}//${host}${pathname}`;
32
<a href={globalUrl}>{displayLink}</a>
33
{params.length > 0 ? <br /> : null}
34
{params.map(([labelName, labelValue]: [string, string]) => {
36
<Badge color="primary" className="mr-1" key={`${labelName}/${labelValue}`}>
37
{`${labelName}="${labelValue}"`}
45
export default EndpointLink;