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