// Get latest convergence state and send notifications func monitorConverged(lastConverged bool, lastEventAt time.Time) (bool, ecs.ServiceEvent) { log := logger.New("ns=services_monitor") services, err := models.ClusterServices() if err != nil { log.Log("fn=monitorConverged err=%q", err) return lastConverged, ecs.ServiceEvent{ CreatedAt: aws.Time(lastEventAt), } } converged := services.IsConverged() events := services.EventsSince(lastEventAt) log.Log("fn=monitorConverged converged=%t events=%d lastEventAt=%q", converged, len(events), lastEventAt) if events.HasCapacityWarning() { models.NotifyError("rack:capacity", fmt.Errorf(events.CapacityWarning()), map[string]string{ "rack": os.Getenv("RACK"), }) } if converged != lastConverged { models.NotifySuccess("rack:converge", map[string]string{ "rack": os.Getenv("RACK"), "converged": fmt.Sprintf("%t", converged), }) } return converged, services.LastEvent() }
func SystemUpdate(rw http.ResponseWriter, r *http.Request) *httperr.Error { rack, err := models.GetSystem() if err != nil { return httperr.Server(err) } notifyData := map[string]string{} if count := GetForm(r, "count"); count != "" { count, err := strconv.Atoi(count) if err != nil { return httperr.Server(err) } rack.Count = count notifyData["count"] = strconv.Itoa(count) } if t := GetForm(r, "type"); t != "" { rack.Type = t notifyData["type"] = t } if version := GetForm(r, "version"); version != "" { rack.Version = version notifyData["version"] = version } err = rack.Save() if awsError(err) == "ValidationError" { switch { case strings.Index(err.Error(), "No updates are to be performed") > -1: return httperr.Errorf(403, "no system updates are to be performed") case strings.Index(err.Error(), "can not be updated") > -1: return httperr.Errorf(403, "system is already updating") } } if err != nil { return httperr.Server(err) } rack, err = models.GetSystem() if err != nil { return httperr.Server(err) } models.NotifySuccess("system:update", notifyData) return RenderJson(rw, rack) }
func SystemUpdate(rw http.ResponseWriter, r *http.Request) *httperr.Error { rack, err := provider.SystemGet() if err != nil { return httperr.Server(err) } notifyData := map[string]string{} if count := GetForm(r, "count"); count != "" { count, err := strconv.Atoi(count) if err != nil { return httperr.Server(err) } rack.Count = count notifyData["count"] = strconv.Itoa(count) } if t := GetForm(r, "type"); t != "" { rack.Type = t notifyData["type"] = t } if version := GetForm(r, "version"); version != "" { rack.Version = version notifyData["version"] = version } err = provider.SystemSave(*rack) if err != nil { return httperr.Server(err) } rack, err = provider.SystemGet() if err != nil { return httperr.Server(err) } models.NotifySuccess("rack:update", notifyData) return RenderJson(rw, rack) }