func doScheduleApp()

in schedule/schedule.go [81:111]


func doScheduleApp(schedule *Schedule, app *deploy.App, cfg chaosmonkey.AppConfig, chaosConfig *config.Monkey) {

	if !cfg.Enabled {
		log.Printf("app=%s disabled\n", app.Name())
		return
	}

	r := rand.New(rand.NewSource(time.Now().UnixNano()))
	startHour := chaosConfig.StartHour()
	endHour := chaosConfig.EndHour()
	location, err := chaosConfig.Location()

	if err != nil {
		panic(fmt.Sprintf("Could not get Location for time zone calculation: %s", err.Error()))
	}

	groups := app.EligibleInstanceGroups(cfg)

	if len(groups) == 0 {
		log.Printf("app=%s no eligible instance groups", app.Name())
	}

	for _, group := range groups {
		kill := shouldKillInstance(cfg.MeanTimeBetweenKillsInWorkDays, r)
		log.Printf("%s mtbk=%d kill=%t\n", grp.String(group), cfg.MeanTimeBetweenKillsInWorkDays, kill)
		if kill {
			time := chooseTerminationTime(time.Now(), startHour, endHour, location)
			schedule.Add(time, group)
		}
	}
}