1export interface Labels {
2  [key: string]: string;
3}
4
5export interface Target {
6  discoveredLabels: Labels;
7  labels: Labels;
8  scrapePool: string;
9  scrapeUrl: string;
10  globalUrl: string;
11  lastError: string;
12  lastScrape: string;
13  lastScrapeDuration: number;
14  health: string;
15}
16
17export interface DroppedTarget {
18  discoveredLabels: Labels;
19}
20
21export interface ScrapePool {
22  upCount: number;
23  targets: Target[];
24}
25
26export interface ScrapePools {
27  [scrapePool: string]: ScrapePool;
28}
29
30export const groupTargets = (targets: Target[]): ScrapePools =>
31  targets.reduce((pools: ScrapePools, target: Target) => {
32    const { health, scrapePool } = target;
33    const up = health.toLowerCase() === 'up' ? 1 : 0;
34    if (!pools[scrapePool]) {
35      pools[scrapePool] = {
36        upCount: 0,
37        targets: [],
38      };
39    }
40    pools[scrapePool].targets.push(target);
41    pools[scrapePool].upCount += up;
42    return pools;
43  }, {});
44
45export const getColor = (health: string): string => {
46  switch (health.toLowerCase()) {
47    case 'up':
48      return 'success';
49    case 'down':
50      return 'danger';
51    default:
52      return 'warning';
53  }
54};
55