AppManager: Implement ingress monitoring

Change-Id: I156236c3f062a616cfd5de9821aeccbf686e0c22
diff --git a/core/installer/status/instance.go b/core/installer/status/instance.go
index 9ad2ff0..8263803 100644
--- a/core/installer/status/instance.go
+++ b/core/installer/status/instance.go
@@ -4,6 +4,7 @@
 	"bytes"
 	"encoding/json"
 	"fmt"
+	"strings"
 )
 
 type InstanceMonitor struct {
@@ -49,40 +50,54 @@
 // TODO(gio): handle volume
 func (m *InstanceMonitor) monitor(namespace string, resource DodoResource, out ResourceOut, ret map[DodoResource]Status) (Status, error) {
 	status := StatusNoStatus
-	for _, h := range out.Helm {
-		hs, err := m.m.Get(Resource{
-			Type: ResourceHelmRelease,
+	if resource.Type == "ingress" {
+		var err error
+		status, err = m.m.Get(Resource{
+			Type: ResourceIngress,
 			ResourceRef: ResourceRef{
-				Id:        h.Id,
-				Name:      h.Name,
+				Id:        out.Id,
+				Name:      fmt.Sprintf("ingress-%s", strings.TrimPrefix(resource.Name, "https://")),
 				Namespace: namespace,
 			},
 		})
-		fmt.Println(hs, err)
 		if err != nil {
 			return StatusNoStatus, err
 		}
-		status = mergeStatus(status, hs)
+	} else {
+		for _, h := range out.Helm {
+			hs, err := m.m.Get(Resource{
+				Type: ResourceHelmRelease,
+				ResourceRef: ResourceRef{
+					Id:        h.Id,
+					Name:      h.Name,
+					Namespace: namespace,
+				},
+			})
+			if err != nil {
+				return StatusNoStatus, err
+			}
+			status = mergeStatus(status, hs)
+		}
 	}
 	for _, i := range out.Volume {
 		if s, err := m.monitor(namespace, DodoResource{"volume", i.Name}, i, ret); err != nil {
 			return StatusNoStatus, err
 		} else {
-			s = mergeStatus(status, s)
+			status = mergeStatus(status, s)
 		}
 	}
 	for _, i := range out.PostgreSQL {
 		if s, err := m.monitor(namespace, DodoResource{"postgresql", i.Name}, i, ret); err != nil {
 			return StatusNoStatus, err
 		} else {
-			s = mergeStatus(status, s)
+			status = mergeStatus(status, s)
 		}
 	}
 	for _, i := range out.MongoDB {
 		if s, err := m.monitor(namespace, DodoResource{"mongodb", i.Name}, i, ret); err != nil {
 			return StatusNoStatus, err
 		} else {
-			s = mergeStatus(status, s)
+			status = mergeStatus(status, s)
 		}
 	}
 	for _, i := range out.Ingress {
@@ -90,14 +105,14 @@
 		if s, err := m.monitor(namespace, DodoResource{"ingress", name}, i.ResourceOut, ret); err != nil {
 			return StatusNoStatus, err
 		} else {
-			s = mergeStatus(status, s)
+			status = mergeStatus(status, s)
 		}
 	}
 	for _, i := range out.Services {
 		if s, err := m.monitor(namespace, DodoResource{"service", i.Name}, i, ret); err != nil {
 			return StatusNoStatus, err
 		} else {
-			s = mergeStatus(status, s)
+			status = mergeStatus(status, s)
 		}
 	}
 	ret[resource] = status
@@ -118,6 +133,7 @@
 }
 
 type ResourceOut struct {
+	Id         string                     `json:"id"`
 	Name       string                     `json:"name"`
 	Volume     map[string]ResourceOut     `json:"volume"`
 	PostgreSQL map[string]ResourceOut     `json:"postgresql"`