import { em, Group, Stack, Table, Text } from "@mantine/core"; import { useSuspenseAPIQuery } from "../../api/api"; import { RelabelStepsResult } from "../../api/responseTypes/relabel_steps"; import { Labels } from "../../api/responseTypes/targets"; import React from "react"; import { IconArrowDown, IconCircleMinus, IconCirclePlus, IconReplace, IconTags, } from "@tabler/icons-react"; const iconStyle = { width: em(18), height: em(18), verticalAlign: "middle" }; const ruleTable = (rule: { [key: string]: unknown }, idx: number) => { return ( Rule {idx + 1} {Object.entries(rule) .sort(([a], [b]) => { // Sort by a predefined order for known fields, otherwise alphabetically. const sortedRuleFieldNames: string[] = [ "action", "source_labels", "regex", "modulus", "replacement", "target_label", ]; const ai = sortedRuleFieldNames.indexOf(a); const bi = sortedRuleFieldNames.indexOf(b); if (ai === -1 && bi === -1) { return a.localeCompare(b); } if (ai === -1) { return 1; } if (bi === -1) { return -1; } return ai - bi; }) .map(([k, v]) => ( {k} {typeof v === "object" ? JSON.stringify(v) : String(v)} ))}
); }; const labelsTable = (labels: Labels, prevLabels: Labels | null) => { if (labels === null) { return dropped; } return ( Labels {Object.entries(labels) .concat( prevLabels ? Object.entries(prevLabels).filter( ([k]) => labels[k] === undefined ) : [] ) .sort(([a], [b]) => a.localeCompare(b)) .map(([k, v]) => { const added = prevLabels !== null && prevLabels[k] === undefined; const changed = prevLabels !== null && !added && prevLabels[k] !== v; const removed = prevLabels !== null && !changed && prevLabels[k] !== undefined && labels[k] === undefined; return ( {added ? ( ) : changed ? ( ) : removed ? ( ) : null} {k} {v} ); })}
); }; const RelabelSteps: React.FC<{ labels: Labels; pool: string; }> = ({ labels, pool }) => { const { data } = useSuspenseAPIQuery({ path: `/targets/relabel_steps`, params: { labels: JSON.stringify(labels), scrapePool: pool, }, }); return ( {labelsTable(labels, null)} {data.data.steps.map((step, idx) => ( {ruleTable(step.rule, idx)} {step.keep ? ( labelsTable( step.output, idx === 0 ? labels : data.data.steps[idx - 1].output ) ) : ( dropped )} ))} ); }; export default RelabelSteps;