Skip to content

Commit f78ff50

Browse files
authored
Provide new app details for new Details page (986) (#24)
Signed-off-by: Keith Chong <[email protected]>
1 parent f9c726e commit f78ff50

File tree

4 files changed

+148
-6
lines changed

4 files changed

+148
-6
lines changed

pkg/httpapi/api.go

Lines changed: 71 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,14 @@ const (
3434
defaultRef = "HEAD"
3535
defaultArgoCDInstance = "openshift-gitops"
3636
defaultArgocdNamespace = "openshift-gitops"
37+
kindService = "Service"
38+
kindDeployment = "Deployment"
39+
kindSecret = "Secret"
40+
kindSealedSecret = "SealedSecret"
41+
kindRoute = "Route"
42+
kindRoleBinding = "RoleBinding"
43+
kindClusterRole = "ClusterRole"
44+
kindClusterRoleBinding = "ClusterRoleBinding"
3745
)
3846

3947
var baseURL = fmt.Sprintf("https://%s-server.%s.svc.cluster.local", defaultArgoCDInstance, defaultArgocdNamespace)
@@ -286,13 +294,70 @@ func (a *APIRouter) GetApplicationDetails(w http.ResponseWriter, r *http.Request
286294
Message: commitInfo["message"],
287295
Revision: revision,
288296
}
289-
297+
var envResources = make(map[string][]envHealthResource)
298+
envResources[kindService] = make([]envHealthResource, 0)
299+
envResources[kindDeployment] = make([]envHealthResource, 0)
300+
envResources[kindSecret] = make([]envHealthResource, 0)
301+
envResources[kindRoute] = make([]envHealthResource, 0)
302+
envResources[kindRoleBinding] = make([]envHealthResource, 0)
303+
envResources[kindClusterRole] = make([]envHealthResource, 0)
304+
envResources[kindClusterRoleBinding] = make([]envHealthResource, 0)
305+
306+
for _, aResource := range app.Status.Resources {
307+
switch aResource.Kind {
308+
case kindService:
309+
envResources[kindService] = append(envResources[kindService], envHealthResource{
310+
Name: aResource.Name,
311+
Health: string(aResource.Health.Status),
312+
Status: string(aResource.Status),
313+
})
314+
case kindDeployment:
315+
envResources[kindDeployment] = append(envResources[kindDeployment], envHealthResource{
316+
Name: aResource.Name,
317+
Health: string(aResource.Health.Status),
318+
Status: string(aResource.Status),
319+
})
320+
case kindSecret, kindSealedSecret:
321+
envResources[kindSecret] = append(envResources[kindSecret], envHealthResource{
322+
Name: aResource.Name,
323+
Health: string(aResource.Health.Status),
324+
Status: string(aResource.Status),
325+
})
326+
case kindRoute:
327+
envResources[kindRoute] = append(envResources[kindRoute], envHealthResource{
328+
Name: aResource.Name,
329+
Status: string(aResource.Status),
330+
})
331+
case kindRoleBinding:
332+
envResources[kindRoleBinding] = append(envResources[kindRoleBinding], envHealthResource{
333+
Name: aResource.Name,
334+
Status: string(aResource.Status),
335+
})
336+
case kindClusterRole:
337+
envResources[kindClusterRole] = append(envResources[kindClusterRole], envHealthResource{
338+
Name: aResource.Name,
339+
Status: string(aResource.Status),
340+
})
341+
case kindClusterRoleBinding:
342+
envResources[kindClusterRoleBinding] = append(envResources[kindClusterRoleBinding], envHealthResource{
343+
Name: aResource.Name,
344+
Status: string(aResource.Status),
345+
})
346+
}
347+
}
290348
appEnv := map[string]interface{}{
291-
"environment": app.Spec.Destination.Namespace,
292-
"cluster": app.Spec.Destination.Server,
293-
"lastDeployed": lastDeployed,
294-
"status": app.Status.Sync.Status,
295-
"revision": revisionMeta,
349+
"environment": app.Spec.Destination.Namespace,
350+
"cluster": app.Spec.Destination.Server,
351+
"lastDeployed": lastDeployed,
352+
"status": app.Status.Sync.Status,
353+
"revision": revisionMeta,
354+
"services": envResources[kindService],
355+
"secrets": envResources[kindSecret],
356+
"deployments": envResources[kindDeployment],
357+
"routes": envResources[kindRoute],
358+
"roleBindings": envResources[kindRoleBinding],
359+
"clusterRoles": envResources[kindClusterRole],
360+
"clusterRoleBindings": envResources[kindClusterRoleBinding],
296361
}
297362

298363
marshalResponse(w, appEnv)

pkg/httpapi/api_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,31 @@ func TestGetApplicationDetails(t *testing.T) {
478478
"message": "testMessage",
479479
"revision": "123456789",
480480
},
481+
"deployments": []interface{}{
482+
map[string]interface{}{"health": string("Healthy"), "name": string("taxi"), "status": string("Synced")},
483+
},
484+
"secrets": []interface{}{
485+
map[string]interface{}{
486+
"health": string("Missing"),
487+
"name": string("testsecret"),
488+
"status": string("OutOfSync"),
489+
},
490+
},
491+
"services": []interface{}{
492+
map[string]interface{}{"health": string("Healthy"), "name": string("taxi"), "status": string("Synced")},
493+
},
494+
"routes": []interface{}{
495+
map[string]interface{}{"name": string("taxi"), "status": string("Synced")},
496+
},
497+
"clusterRoleBindings": []interface{}{
498+
map[string]interface{}{"name": string("pipelines-service-role-binding"), "status": string("Synced")},
499+
},
500+
"clusterRoles": []interface{}{
501+
map[string]interface{}{"name": string("pipelines-clusterrole"), "status": string("Synced")},
502+
},
503+
"roleBindings": []interface{}{
504+
map[string]interface{}{"name": string("argocd-admin"), "status": string("Synced")},
505+
},
481506
})
482507

483508
//reset BaseURL

pkg/httpapi/manifest.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ type application struct {
2828
Services []service `json:"services,omitempty"`
2929
}
3030

31+
type envHealthResource struct {
32+
Name string `json:"name,omitempty"`
33+
Health string `json:"health,omitempty"`
34+
Status string `json:"status,omitempty"`
35+
}
36+
3137
func (e environment) findService(n string) *service {
3238
for _, a := range e.Apps {
3339
for _, s := range a.Services {

pkg/httpapi/testdata/application.yaml

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,49 @@ status:
1919
revision: "123456789"
2020
sync:
2121
status: Synced
22+
resources:
23+
- health:
24+
status: Healthy
25+
kind: Service
26+
name: taxi
27+
namespace: dev
28+
status: Synced
29+
version: v1
30+
- group: apps
31+
health:
32+
status: Healthy
33+
kind: Deployment
34+
name: taxi
35+
namespace: dev
36+
status: Synced
37+
version: v1
38+
- group: route.openshift.io
39+
kind: Route
40+
name: taxi
41+
namespace: dev
42+
status: Synced
43+
version: v1
44+
- group: apps
45+
health:
46+
status: Missing
47+
kind: Secret
48+
name: testsecret
49+
namespace: dev
50+
status: OutOfSync
51+
version: v1
52+
- group: rbac.authorization.k8s.io
53+
kind: ClusterRole
54+
name: pipelines-clusterrole
55+
status: Synced
56+
version: v1
57+
- group: rbac.authorization.k8s.io
58+
kind: ClusterRoleBinding
59+
name: pipelines-service-role-binding
60+
status: Synced
61+
version: v1
62+
- group: rbac.authorization.k8s.io
63+
kind: RoleBinding
64+
name: argocd-admin
65+
namespace: cicd
66+
status: Synced
67+
version: v1

0 commit comments

Comments
 (0)