Mercurial > mercurial > hgweb_golang.cgi
comparison 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 |
comparison
equal
deleted
inserted
replaced
64:ad5c30ee5cf1 | 65:0369656be06c |
---|---|
1 /* | |
2 Last Change: 2022-05-17 Tue 22:56:41. | |
3 */ | |
4 | |
5 package main | |
6 | |
7 import ( | |
8 "encoding/csv" | |
9 "fmt" | |
10 "io" | |
11 "log" | |
12 "net/http" | |
13 "os" | |
14 "path" | |
15 "path/filepath" | |
16 "strings" | |
17 ) | |
18 | |
19 var ( | |
20 server string | |
21 hhsdb string | |
22 indexdb string | |
23 imagedir string | |
24 lastymd string | |
25 ) | |
26 | |
27 func init() { | |
28 hhsdb = "hhsdb.csv" | |
29 indexdb = "index.csv" | |
30 imagedir = "images" | |
31 lastymd = "20000101" | |
32 } | |
33 | |
34 func main() { | |
35 if len(os.Args) != 2 { | |
36 fmt.Fprintln(os.Stderr, "[usage] > server_backup 192.168.0.1:8080") | |
37 os.Exit(1) | |
38 } | |
39 | |
40 dirs, err := os.ReadDir(imagedir) | |
41 if err != nil { | |
42 log.Fatal(err) | |
43 } | |
44 | |
45 for _, dir := range dirs { | |
46 if strings.Compare(dir.Name(), lastymd) > 0 { | |
47 lastymd = dir.Name() | |
48 } | |
49 } | |
50 fmt.Println("last date :", lastymd) | |
51 | |
52 server = "http://" + os.Args[1] + "/" | |
53 | |
54 // Get /ha/ -> hhsdb.csv | |
55 os.Rename(hhsdb, hhsdb + ".bak") | |
56 if err := http_get("/ha/", hhsdb); err != nil { | |
57 os.Rename(hhsdb + ".bak", hhsdb) | |
58 log.Fatal(err) | |
59 } | |
60 fmt.Println("get hhsdb.csv : done.") | |
61 | |
62 // Get /d/ -> index.csv | |
63 os.Rename(indexdb, indexdb + ".bak") | |
64 if err := http_get("/d/", indexdb); err != nil { | |
65 os.Rename(indexdb + ".bak", indexdb) | |
66 log.Fatal(err) | |
67 } | |
68 fmt.Println("get index.csv : done.") | |
69 | |
70 // Get /i/20200110/0800012345.tgz | |
71 var tgzs []string | |
72 | |
73 b, err := os.ReadFile(indexdb) | |
74 if err != nil { | |
75 log.Fatal(err) | |
76 } | |
77 rd := csv.NewReader(strings.NewReader(string(b))) | |
78 for { | |
79 record, err := rd.Read() | |
80 if err == io.EOF { | |
81 break | |
82 } | |
83 if err != nil { | |
84 log.Fatal(err) | |
85 } | |
86 if strings.HasPrefix(record[0], "0") && strings.Compare(record[1], lastymd) > 0 { | |
87 tgz := path.Join(record[1], record[0]) + ".tgz" | |
88 tgzs = append(tgzs, tgz) | |
89 } | |
90 } | |
91 | |
92 for _, tgz := range tgzs { | |
93 url := "/i/" + tgz | |
94 file := filepath.Join(imagedir, filepath.FromSlash(tgz)) | |
95 dir, _ := filepath.Split(file) | |
96 err := os.MkdirAll(dir, 0755) | |
97 if err != nil && !os.IsExist(err) { | |
98 log.Fatal(err) | |
99 } | |
100 http_get(url, file) | |
101 fmt.Println("get image :", tgz) | |
102 } | |
103 // bye | |
104 } | |
105 | |
106 func http_get(url, file string) error { | |
107 res, err := http.Get(server + url) | |
108 if err != nil { | |
109 return err | |
110 } | |
111 body, err := io.ReadAll(res.Body) | |
112 res.Body.Close() | |
113 if res.StatusCode > 299 { | |
114 log.Fatalf("Response failed with status code: %d and\nbody: %s\n", res.StatusCode, body) | |
115 } | |
116 if err != nil { | |
117 return err | |
118 } | |
119 | |
120 err = os.WriteFile(file, body, 0666) | |
121 if err != nil { | |
122 return err | |
123 } | |
124 return nil | |
125 } | |
126 |