// GetStatus returns the status of a given task schedule func GetStatus(w rest.ResponseWriter, r *rest.Request) { Token := r.PathParam("Token") if Token == "" { rest.Error(w, "Token required", 400) return } dbConn, err := util.GetConnection(CLUSTERADMIN_DB) if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), 400) return } defer dbConn.Close() err = secimpl.Authorize(dbConn, Token, "perm-read") if err != nil { logit.Error.Println("validate token error " + err.Error()) rest.Error(w, err.Error(), http.StatusUnauthorized) return } ID := r.PathParam("ID") if ID == "" { rest.Error(w, "ID required", 400) return } stat, err := task.GetStatus(dbConn, ID) if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), 400) return } w.WriteHeader(http.StatusOK) w.WriteJson(stat) }
// DeleteTaskStatus deletes a task status and any related backup files func DeleteTaskStatus(w rest.ResponseWriter, r *rest.Request) { dbConn, err := util.GetConnection(CLUSTERADMIN_DB) if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), 400) return } defer dbConn.Close() postMsg := DeleteStatusPost{} err = r.DecodeJsonPayload(&postMsg) if err != nil { logit.Error.Println("decode" + err.Error()) rest.Error(w, err.Error(), http.StatusInternalServerError) return } err = secimpl.Authorize(dbConn, postMsg.Token, "perm-backup") if err != nil { logit.Error.Println("validate token error " + err.Error()) rest.Error(w, err.Error(), http.StatusUnauthorized) return } taskstatus, err := task.GetStatus(dbConn, postMsg.StatusID) if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), http.StatusInternalServerError) return } var schedule task.TaskSchedule schedule, err = task.GetSchedule(dbConn, taskstatus.ScheduleID) if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), http.StatusInternalServerError) return } //delete any backup files if necessary if taskstatus.ProfileName == "pg_basebackup" { deletereq := cpmserverapi.DiskDeleteRequest{} deletereq.Path = taskstatus.Path var deleteresp cpmserverapi.DiskDeleteResponse deleteresp, err = cpmserverapi.DiskDeleteClient(schedule.Serverip, &deletereq) if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), http.StatusInternalServerError) return } if deleteresp.Status != "OK" { logit.Error.Println("Status not OK in deletevolume " + deleteresp.Status) rest.Error(w, err.Error(), http.StatusInternalServerError) return } } err = task.DeleteStatus(dbConn, postMsg.StatusID) if err != nil { logit.Error.Println(err.Error()) rest.Error(w, err.Error(), http.StatusInternalServerError) return } }