func exportAll(fileName string) error { exportedData := &ExportData{MajorVersion: ExportMajorVersion, MinorVersion: ExportMinorVersion, CreatedTime: time.Now()} exportedData.Data = make(map[string][]interface{}) // ... and march through everything. exportedData.Data["client"] = client.ExportAllClients() exportedData.Data["cookbook"] = exportTransformSlice(cookbook.AllCookbooks()) exportedData.Data["databag"] = exportTransformSlice(databag.AllDataBags()) exportedData.Data["environment"] = exportTransformSlice(environment.AllEnvironments()) exportedData.Data["filestore"] = exportTransformSlice(filestore.AllFilestores()) exportedData.Data["loginfo"] = exportTransformSlice(loginfo.AllLogInfos()) exportedData.Data["node"] = exportTransformSlice(node.AllNodes()) exportedData.Data["node_status"] = exportTransformSlice(node.AllNodeStatuses()) exportedData.Data["report"] = exportTransformSlice(report.AllReports()) exportedData.Data["role"] = exportTransformSlice(role.AllRoles()) exportedData.Data["sandbox"] = exportTransformSlice(sandbox.AllSandboxes()) exportedData.Data["shovey"] = exportTransformSlice(shovey.AllShoveys()) exportedData.Data["shovey_run"] = exportTransformSlice(shovey.AllShoveyRuns()) exportedData.Data["shovey_run_stream"] = exportTransformSlice(shovey.AllShoveyRunStreams()) exportedData.Data["user"] = user.ExportAllUsers() fp, err := os.Create(fileName) if err != nil { return err } enc := json.NewEncoder(fp) if err = enc.Encode(&exportedData); err != nil { return err } return nil }
func reindexAll() { reindexObjs := make([]indexer.Indexable, 0, 100) // We clear the index, *then* do the fetch because if // something comes in between the time we fetch the // objects to reindex and when it gets done, they'll // just be added naturally indexer.ClearIndex() for _, v := range client.AllClients() { reindexObjs = append(reindexObjs, v) } for _, v := range node.AllNodes() { reindexObjs = append(reindexObjs, v) } for _, v := range role.AllRoles() { reindexObjs = append(reindexObjs, v) } for _, v := range environment.AllEnvironments() { reindexObjs = append(reindexObjs, v) } defaultEnv, _ := environment.Get("_default") reindexObjs = append(reindexObjs, defaultEnv) // data bags have to be done separately dbags := databag.GetList() for _, db := range dbags { dbag, err := databag.Get(db) if err != nil { continue } dbis := make([]indexer.Indexable, dbag.NumDBItems()) i := 0 allDBItems, derr := dbag.AllDBItems() if derr != nil { logger.Errorf(derr.Error()) continue } for _, k := range allDBItems { n := k dbis[i] = n i++ } reindexObjs = append(reindexObjs, dbis...) } indexer.ReIndex(reindexObjs) return }
func statusHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") opUser, oerr := actor.GetReqUser(r.Header.Get("X-OPS-USERID")) if oerr != nil { jsonErrorReport(w, r, oerr.Error(), oerr.Status()) return } if !opUser.IsAdmin() { jsonErrorReport(w, r, "You must be an admin to do that", http.StatusForbidden) return } pathArray := splitPath(r.URL.Path) if len(pathArray) < 3 { jsonErrorReport(w, r, "Bad request", http.StatusBadRequest) return } var statusResponse interface{} switch r.Method { case "GET": /* pathArray[1] will tell us what operation we're doing */ switch pathArray[1] { // /status/all/nodes case "all": if len(pathArray) != 3 { jsonErrorReport(w, r, "Bad request", http.StatusBadRequest) return } if pathArray[2] != "nodes" { jsonErrorReport(w, r, "Invalid object to get status for", http.StatusBadRequest) return } nodes := node.AllNodes() sr := make([]map[string]string, len(nodes)) for i, n := range nodes { ns, err := n.LatestStatus() if err != nil { nsbad := make(map[string]string) nsbad["node_name"] = n.Name nsbad["status"] = "no record" sr[i] = nsbad continue } sr[i] = ns.ToJSON() nsurl := fmt.Sprintf("/status/node/%s/latest", n.Name) sr[i]["url"] = util.CustomURL(nsurl) } statusResponse = sr // /status/node/<nodeName>/(all|latest) case "node": if len(pathArray) != 4 { jsonErrorReport(w, r, "Bad request", http.StatusBadRequest) return } nodeName := pathArray[2] op := pathArray[3] n, gerr := node.Get(nodeName) if gerr != nil { jsonErrorReport(w, r, gerr.Error(), gerr.Status()) return } switch op { case "latest": ns, err := n.LatestStatus() if err != nil { jsonErrorReport(w, r, err.Error(), http.StatusInternalServerError) return } statusResponse = ns.ToJSON() case "all": ns, err := n.AllStatuses() if err != nil { jsonErrorReport(w, r, err.Error(), http.StatusInternalServerError) return } sr := make([]map[string]string, len(ns)) for i, v := range ns { sr[i] = v.ToJSON() } statusResponse = sr default: jsonErrorReport(w, r, "Bad request", http.StatusBadRequest) return } default: jsonErrorReport(w, r, "Bad request", http.StatusBadRequest) return } default: jsonErrorReport(w, r, "Method not allowed", http.StatusMethodNotAllowed) return } enc := json.NewEncoder(w) if err := enc.Encode(&statusResponse); err != nil { jsonErrorReport(w, r, err.Error(), http.StatusInternalServerError) } }