AppManager: App installation status monitoring

Change-Id: I64f4ae0d27892b74f8827a275907cb75da09a758
diff --git a/core/installer/tasks/release.go b/core/installer/tasks/release.go
index 059d1ee..1bd0d6e 100644
--- a/core/installer/tasks/release.go
+++ b/core/installer/tasks/release.go
@@ -4,9 +4,10 @@
 	"time"
 
 	"github.com/giolekva/pcloud/core/installer"
+	"github.com/giolekva/pcloud/core/installer/status"
 )
 
-func NewMonitorReleaseTasks(mon installer.HelmReleaseMonitor, rr installer.ReleaseResources) []Task {
+func NewMonitorReleaseTasks(mon status.ResourceMonitor, rr installer.ReleaseResources) []Task {
 	var t []Task
 	for _, h := range rr.Helm {
 		t = append(t, newMonitorHelm(mon, h))
@@ -14,11 +15,11 @@
 	return t
 }
 
-func NewMonitorRelease(mon installer.HelmReleaseMonitor, rr installer.ReleaseResources) Task {
+func NewMonitorRelease(mon status.ResourceMonitor, rr installer.ReleaseResources) Task {
 	return newConcurrentParentTask("Monitor", true, NewMonitorReleaseTasks(mon, rr)...)
 }
 
-func newMonitorHelm(mon installer.HelmReleaseMonitor, h installer.Resource) Task {
+func newMonitorHelm(mon status.ResourceMonitor, h installer.Resource) Task {
 	rType := h.Annotations["dodo.cloud/resource-type"]
 	var name string
 	switch rType {
@@ -36,11 +37,18 @@
 		name = h.Annotations["dodo.cloud/resource.service.name"]
 	}
 	t := newResourceLeafTask(h.Info, &ResourceId{rType, name}, func() error {
+		ref := status.ResourceRef{
+			Name:      h.Name,
+			Namespace: h.Namespace,
+		}
 		for {
-			if ok, err := mon.IsReleased(h.Namespace, h.Name); err == nil && ok {
-				break
+			if s, err := mon.Get(ref); err != nil {
+				return err
+			} else if status.IsStatusTerminal(s) {
+				return nil
+			} else {
+				time.Sleep(5 * time.Second)
 			}
-			time.Sleep(5 * time.Second)
 		}
 		return nil
 	})