scripts/find-trace-of-missing-projects/main.go (99 lines of code) (raw):

package main import ( "bufio" "flag" "io/ioutil" "log" "net/http" "os" path2 "path" "strings" ) func loadList(filepathPtr *string) (*[]string, error) { f, err := os.Open(*filepathPtr) if err != nil { return nil, err } defer f.Close() results := make([]string, 0) scanner := bufio.NewScanner(f) for scanner.Scan() { results = append(results, scanner.Text()) } return &results, nil } func checkExists(filename string, basePathPtr *string) (*string, error) { path := path2.Join(*basePathPtr, filename) _, err := os.Stat(path) if err==nil { return &path, nil } else if os.IsNotExist(err) { return nil, nil } else { return nil, err } } /** Finds the first valid project file matching the given vsid in the given path */ func findFile(vsid string, basePathPtr *string) (*string, error) { possibleExtensions := []string{".cpr",".aep",".prproj",".plproj"} for _, xtn := range possibleExtensions { exists, err := checkExists(vsid + xtn, basePathPtr) if exists!=nil { return exists, nil } else if err != nil { return nil, err } } return nil, nil } func loadBearerToken(filePath *string) (*string,error) { f, err := os.Open(*filePath) if err != nil { return nil, err } defer f.Close() content, err := ioutil.ReadAll(f) if err != nil { return nil, err } contentStr := strings.TrimRight(string(content),"\n\t ") return &contentStr,nil } func main() { wd, err := os.Getwd() if err != nil { log.Printf("ERROR can't get current working directory: %s", err) os.Exit(1) } httpClient := &http.Client{} inputList := flag.String("list", "missing-project-vsid.lst", "newline-delimited file of vsids to look for") scanPath := flag.String("path", wd, "path to search in (non-recursive)") plutocoreBase := flag.String("url","http://localhost:8000", "base URL to pluto-core, no trailing /") storageId := flag.Int("storageId", 1, "storage ID to import the files onto") bearerTokenFile := flag.String("bearer","token.secret", "file that contains the bearer token to use for auth") flag.Parse() vsidList,err := loadList(inputList) if err != nil { log.Printf("ERROR Could not load %s: %s", *inputList, err) os.Exit(1) } bearerTokenContent, err := loadBearerToken(bearerTokenFile) if err != nil { log.Printf("ERROR Could not load bearer token data from %s: %s", *bearerTokenFile, err) os.Exit(1) } for _, vsid := range *vsidList { maybePathPtr, err := findFile(vsid, scanPath) if err != nil { log.Fatalf("ERROR Could not scan for %s: %s", vsid, err) } if maybePathPtr!=nil { log.Printf("Got %s\t%s\n", vsid, *maybePathPtr) sendErr := sendToPlutoCore(httpClient, *plutocoreBase, *maybePathPtr, vsid, *storageId, bearerTokenContent) if sendErr != nil { log.Printf("ERROR Could not send %s to %s as %s: %s", *maybePathPtr, *plutocoreBase, vsid, sendErr) os.Exit(2) } } } log.Printf("All done") }