예제 #1
0
파일: wait.go 프로젝트: ContainX/depcon
func (c *MarathonClient) WaitForApplication(id string, timeout time.Duration) error {
	t_now := time.Now()
	t_stop := t_now.Add(timeout)

	logWaitApplication(id)
	for {
		if time.Now().After(t_stop) {
			return ErrorTimeout
		}

		app, err := c.GetApplication(id)
		if err == nil {
			if app.DeploymentID == nil || len(app.DeploymentID) <= 0 {
				logWait.Info("Application deployment has completed for %s, elapsed time %s", id, utils.ElapsedStr(time.Since(t_now)))
				if app.HealthChecks != nil && len(app.HealthChecks) > 0 {
					err := c.WaitForApplicationHealthy(id, timeout)
					if err != nil {
						logWait.Error("Error waiting for application '%s' to become healthy: %s", id, err.Error())
					}
				} else {
					logWait.Warning("No health checks defined for '%s', skipping waiting for healthy state", id)
				}
				return nil
			}
		}
		logWaitApplication(id)
		time.Sleep(time.Duration(2) * time.Second)
	}
}
예제 #2
0
파일: wait.go 프로젝트: ContainX/depcon
func (c *MarathonClient) WaitForDeployment(id string, timeout time.Duration) error {

	t_now := time.Now()
	t_stop := t_now.Add(timeout)

	logWaitDeployment(id)

	for {
		if time.Now().After(t_stop) {
			return ErrorTimeout
		}
		if found, _ := c.HasDeployment(id); !found {
			logWait.Info("Deployment has completed for %s, elapsed time %s", id, utils.ElapsedStr(time.Since(t_now)))
			return nil
		}
		logWaitDeployment(id)
		time.Sleep(time.Duration(2) * time.Second)
	}
}
예제 #3
0
파일: wait.go 프로젝트: ContainX/depcon
func (c *MarathonClient) WaitForApplicationHealthy(id string, timeout time.Duration) error {
	t_now := time.Now()
	t_stop := t_now.Add(timeout)
	duration := time.Duration(2) * time.Second
	for {
		if time.Now().After(t_stop) {
			return ErrorTimeout
		}
		app, err := c.GetApplication(id)
		if err != nil {
			return err
		}
		total := app.TasksStaged + app.TasksRunning
		diff := total - app.TasksHealthy
		if diff == 0 {
			logWait.Info("%v of %v expected instances are healthy.  Elapsed health check time of %s", app.TasksHealthy, total, utils.ElapsedStr(time.Since(t_now)))
			return nil
		}
		logWait.Info("%v healthy instances.  Waiting for %v total instances. Retrying check in %v seconds", app.TasksHealthy, total, duration)
		time.Sleep(duration)
	}
}