AppRunner: Ping manager periodically

Change-Id: I58d79400acae5fdcd2c0a2bdae234c6303770cbc
diff --git a/apps/app-runner/server.go b/apps/app-runner/server.go
index 6a98e3a..ef14842 100644
--- a/apps/app-runner/server.go
+++ b/apps/app-runner/server.go
@@ -21,6 +21,7 @@
 	l           sync.Locker
 	port        int
 	appId       string
+	service     string
 	ready       bool
 	cmd         *exec.Cmd
 	repoAddr    string
@@ -35,12 +36,13 @@
 	currDir     string
 }
 
-func NewServer(port int, appId string, repoAddr, branch, rootDir string, signer ssh.Signer, appDir string, runCommands []Command, self string, manager string) *Server {
+func NewServer(port int, appId, service, repoAddr, branch, rootDir string, signer ssh.Signer, appDir string, runCommands []Command, self string, manager string) *Server {
 	return &Server{
 		l:           &sync.Mutex{},
 		port:        port,
 		ready:       false,
 		appId:       appId,
+		service:     service,
 		repoAddr:    repoAddr,
 		branch:      branch,
 		rootDir:     rootDir,
@@ -58,10 +60,10 @@
 	http.HandleFunc("/update", s.handleUpdate)
 	http.HandleFunc("/ready", s.handleReady)
 	http.HandleFunc("/logs", s.handleLogs)
+	go s.pingManager()
 	if err := s.run(); err != nil {
 		return err
 	}
-	go s.pingManager()
 	return http.ListenAndServe(fmt.Sprintf(":%d", s.port), nil)
 }
 
@@ -140,13 +142,12 @@
 }
 
 type pingReq struct {
+	Service string `json:"service"`
 	Address string `json:"address"`
 	Logs    string `json:"logs"`
 }
 
 func (s *Server) pingManager() {
-	// TODO(gio): do we need runnert -> manager communication?
-	return
 	defer func() {
 		go func() {
 			time.Sleep(5 * time.Second)
@@ -154,14 +155,21 @@
 		}()
 	}()
 	buf, err := json.Marshal(pingReq{
-		Address: fmt.Sprintf("%s:%d", s.self, s.port),
+		Service: s.service,
+		Address: fmt.Sprintf("http://%s:%d", s.self, s.port),
 		Logs:    s.logs.Contents(),
 	})
 	if err != nil {
 		return
 	}
-	registerWorkerAddr := fmt.Sprintf("%s/api/apps/%s/workers", s.managerAddr, s.appId)
-	http.Post(registerWorkerAddr, "application/json", bytes.NewReader(buf))
+	registerWorkerAddr := fmt.Sprintf("%s/api/project/%s/workers", s.managerAddr, s.appId)
+	resp, err := http.Post(registerWorkerAddr, "application/json", bytes.NewReader(buf))
+	if err != nil {
+		fmt.Println(err)
+	} else {
+		// check resp code
+		io.Copy(os.Stdout, resp.Body)
+	}
 }
 
 func (s *Server) kill() error {