func buildOmahaResponse(a *api.API, omahaReq *omahaSpec.Request, ip string) (*omahaSpec.Response, error) { omahaResp := omahaSpec.NewResponse("coreroller") for _, reqApp := range omahaReq.Apps { respApp := omahaResp.AddApp(reqApp.Id) respApp.Status = "ok" // Let's add the track and version again in the response (as we got from request) respApp.Track = reqApp.Track respApp.Version = reqApp.Version // Get group group := getGroup(reqApp.Id, reqApp.Track) // If it has an event tag, we process it first. if reqApp.Events != nil { for _, event := range reqApp.Events { if err := processEvent(a, reqApp.MachineID, reqApp.Id, group, event); err != nil { logger.Warn("processEvent", "error", err.Error()) } // Always acknowledge the event respEvent := respApp.AddEvent() respEvent.Status = "ok" } } // If it has an updatechek tag if reqApp.UpdateCheck != nil { appPackage, err := a.GetUpdatePackage(reqApp.MachineID, ip, reqApp.Version, reqApp.Id, group) if err != nil && err != api.ErrNoUpdatePackageAvailable { // If there is an error, we return it respApp.Status = getStatusMesssageFromRollerdResponse(err) } else { u := respApp.AddUpdateCheck() processUpdateCheck(a, appPackage, u) } } } return omahaResp, nil }