Mercurial > mercurial > hgweb_golang.cgi
diff src/kaigo/horori/searcher/server/server_backup.go @ 65:0369656be06c default tip
many changes.
author | pyon@macmini |
---|---|
date | Fri, 20 May 2022 06:30:34 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/kaigo/horori/searcher/server/server_backup.go Fri May 20 06:30:34 2022 +0900 @@ -0,0 +1,126 @@ + /* + Last Change: 2022-05-17 Tue 22:56:41. + */ + +package main + +import ( + "encoding/csv" + "fmt" + "io" + "log" + "net/http" + "os" + "path" + "path/filepath" + "strings" +) + +var ( + server string + hhsdb string + indexdb string + imagedir string + lastymd string +) + +func init() { + hhsdb = "hhsdb.csv" + indexdb = "index.csv" + imagedir = "images" + lastymd = "20000101" +} + +func main() { + if len(os.Args) != 2 { + fmt.Fprintln(os.Stderr, "[usage] > server_backup 192.168.0.1:8080") + os.Exit(1) + } + + dirs, err := os.ReadDir(imagedir) + if err != nil { + log.Fatal(err) + } + + for _, dir := range dirs { + if strings.Compare(dir.Name(), lastymd) > 0 { + lastymd = dir.Name() + } + } + fmt.Println("last date :", lastymd) + + server = "http://" + os.Args[1] + "/" + + // Get /ha/ -> hhsdb.csv + os.Rename(hhsdb, hhsdb + ".bak") + if err := http_get("/ha/", hhsdb); err != nil { + os.Rename(hhsdb + ".bak", hhsdb) + log.Fatal(err) + } + fmt.Println("get hhsdb.csv : done.") + + // Get /d/ -> index.csv + os.Rename(indexdb, indexdb + ".bak") + if err := http_get("/d/", indexdb); err != nil { + os.Rename(indexdb + ".bak", indexdb) + log.Fatal(err) + } + fmt.Println("get index.csv : done.") + + // Get /i/20200110/0800012345.tgz + var tgzs []string + + b, err := os.ReadFile(indexdb) + if err != nil { + log.Fatal(err) + } + rd := csv.NewReader(strings.NewReader(string(b))) + for { + record, err := rd.Read() + if err == io.EOF { + break + } + if err != nil { + log.Fatal(err) + } + if strings.HasPrefix(record[0], "0") && strings.Compare(record[1], lastymd) > 0 { + tgz := path.Join(record[1], record[0]) + ".tgz" + tgzs = append(tgzs, tgz) + } + } + + for _, tgz := range tgzs { + url := "/i/" + tgz + file := filepath.Join(imagedir, filepath.FromSlash(tgz)) + dir, _ := filepath.Split(file) + err := os.MkdirAll(dir, 0755) + if err != nil && !os.IsExist(err) { + log.Fatal(err) + } + http_get(url, file) + fmt.Println("get image :", tgz) + } + // bye +} + +func http_get(url, file string) error { + res, err := http.Get(server + url) + if err != nil { + return err + } + body, err := io.ReadAll(res.Body) + res.Body.Close() + if res.StatusCode > 299 { + log.Fatalf("Response failed with status code: %d and\nbody: %s\n", res.StatusCode, body) + } + if err != nil { + return err + } + + err = os.WriteFile(file, body, 0666) + if err != nil { + return err + } + return nil +} +