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
+}
+