Skip to content

Commit cef69c3

Browse files
authored
Merge pull request #17 from inloco/feat/analysis-run-parser
Parse AnalysisRuns to improve UI
2 parents 6b33a7a + b727c6c commit cef69c3

File tree

1 file changed

+34
-4
lines changed

1 file changed

+34
-4
lines changed

ui/src/index.tsx

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as React from "react";
22
import { RolloutWidget } from "argo-rollouts/ui/src/app/components/rollout/rollout";
33
import { ObjectMeta, TypeMeta } from "argo-rollouts/ui/src/models/kubernetes";
4-
import { RolloutRolloutInfo } from "argo-rollouts/ui/src/models/rollout/generated";
4+
import { RolloutRolloutInfo, RolloutReplicaSetInfo, RolloutAnalysisRunInfo } from "argo-rollouts/ui/src/models/rollout/generated";
55

66
export type State = TypeMeta & { metadata: ObjectMeta } & {
77
status: any;
@@ -15,6 +15,7 @@ const parseInfoFromResourceNode = (
1515
const ro: RolloutRolloutInfo = {};
1616
const { spec, status, metadata } = resource;
1717
ro.objectMeta = metadata as any;
18+
ro.analysisRuns = parseAnalysisRuns(tree, resource);
1819
ro.replicaSets = parseReplicaSets(tree, resource);
1920

2021
if (spec.strategy.canary) {
@@ -95,8 +96,8 @@ const parseCurrentSetWeight = (resource: State, currentStepIndex: number): strin
9596
return "0";
9697
};
9798

98-
const parseRevision = (rs: any) => {
99-
for (const item of rs.info || []) {
99+
const parseRevision = (node: any) => {
100+
for (const item of node.info || []) {
100101
if (item.name === "Revision") {
101102
const parts = item.value.split(":") || [];
102103
return parts.length == 2 ? parts[1] : "0";
@@ -112,7 +113,36 @@ const parsePodStatus = (pod: any) => {
112113
}
113114
};
114115

115-
const parseReplicaSets = (tree: any, rollout: any) => {
116+
const parseAnalysisRuns = (tree: any, rollout: any): RolloutAnalysisRunInfo[] => tree.nodes
117+
.filter(node => (node.kind === 'AnalysisRun') && (node.parentRefs.some(ref => ref.name === rollout.metadata.name)))
118+
.map(node => ({
119+
objectMeta: {
120+
creationTimestamp: {
121+
seconds: node.createdAt,
122+
},
123+
name: node.name,
124+
namespace: node.namespace,
125+
resourceVersion: node.version,
126+
uid: node.uid,
127+
},
128+
revision: parseRevision(node),
129+
status: parseAnalysisRunStatus(node.health.status),
130+
}) as RolloutAnalysisRunInfo);
131+
132+
const parseAnalysisRunStatus = (status: string): string => {
133+
switch(status) {
134+
case 'Healthy':
135+
return 'Successful';
136+
case 'Progressing':
137+
return 'Running';
138+
case 'Degraded':
139+
return 'Failure';
140+
default:
141+
return 'Error';
142+
}
143+
}
144+
145+
const parseReplicaSets = (tree: any, rollout: any): RolloutReplicaSetInfo[] => {
116146
const allReplicaSets = [];
117147
const allPods = [];
118148
for (const node of tree.nodes) {

0 commit comments

Comments
 (0)