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 {