Welcome to mirror list, hosted at ThFree Co, Russian Federation.

k8s_integration_helper.js « helpers « environments « javascripts « assets « app - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: a67c8b83eb62c440496e4fe698d5bf1c29f87882 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import { CLUSTER_AGENT_ERROR_MESSAGES, STATUS_TRUE, STATUS_FALSE } from '../constants';

export function generateServicePortsString(ports) {
  if (!ports?.length) return '';

  return ports
    .map((port) => {
      const nodePort = port.nodePort ? `:${port.nodePort}` : '';
      return `${port.port}${nodePort}/${port.protocol}`;
    })
    .join(', ');
}

export function getDeploymentsStatuses(items) {
  const failed = [];
  const ready = [];
  const pending = [];

  items.forEach((item) => {
    const [available, progressing] = item.status?.conditions ?? [];
    if (available?.status === STATUS_TRUE) {
      ready.push(item);
    } else if (available?.status === STATUS_FALSE && progressing?.status !== STATUS_TRUE) {
      failed.push(item);
    } else {
      pending.push(item);
    }
  });

  return {
    ...(pending.length && { pending }),
    ...(failed.length && { failed }),
    ...(ready.length && { ready }),
  };
}

export function getDaemonSetStatuses(items) {
  const failed = items.filter((item) => {
    return (
      item.status?.numberMisscheduled > 0 ||
      item.status?.numberReady !== item.status?.desiredNumberScheduled
    );
  });
  const ready = items.filter((item) => {
    return (
      item.status?.numberReady === item.status?.desiredNumberScheduled &&
      !item.status?.numberMisscheduled
    );
  });

  return {
    ...(failed.length && { failed }),
    ...(ready.length && { ready }),
  };
}

export function getStatefulSetStatuses(items) {
  const failed = items.filter((item) => {
    return item.status?.readyReplicas < item.spec?.replicas;
  });
  const ready = items.filter((item) => {
    return item.status?.readyReplicas === item.spec?.replicas;
  });

  return {
    ...(failed.length && { failed }),
    ...(ready.length && { ready }),
  };
}

export function getReplicaSetStatuses(items) {
  const failed = items.filter((item) => {
    return item.status?.readyReplicas < item.spec?.replicas;
  });
  const ready = items.filter((item) => {
    return item.status?.readyReplicas === item.spec?.replicas;
  });

  return {
    ...(failed.length && { failed }),
    ...(ready.length && { ready }),
  };
}

export function getJobsStatuses(items) {
  const failed = items.filter((item) => {
    return item.status.failed > 0 || item.status?.succeeded !== item.spec?.completions;
  });
  const completed = items.filter((item) => {
    return item.status?.succeeded === item.spec?.completions;
  });

  return {
    ...(failed.length && { failed }),
    ...(completed.length && { completed }),
  };
}

export function getCronJobsStatuses(items) {
  const failed = [];
  const ready = [];
  const suspended = [];

  items.forEach((item) => {
    if (item.status?.active > 0 && !item.status?.lastScheduleTime) {
      failed.push(item);
    } else if (item.spec?.suspend) {
      suspended.push(item);
    } else if (item.status?.lastScheduleTime) {
      ready.push(item);
    }
  });

  return {
    ...(failed.length && { failed }),
    ...(suspended.length && { suspended }),
    ...(ready.length && { ready }),
  };
}

export function humanizeClusterErrors(reason) {
  const errorReason = String(reason).toLowerCase();
  const errorMessage = CLUSTER_AGENT_ERROR_MESSAGES[errorReason];
  return errorMessage || CLUSTER_AGENT_ERROR_MESSAGES.other;
}