diff src/kaigo/horori/searcher/server/searcher.go @ 48:ca00c4a85b98

small changes.
author pyon@macmini
date Wed, 22 Apr 2020 19:00:50 +0900
parents 169936fed61b
children 8384ca56f1b4
line wrap: on
line diff
--- a/src/kaigo/horori/searcher/server/searcher.go	Tue Apr 21 22:43:55 2020 +0900
+++ b/src/kaigo/horori/searcher/server/searcher.go	Wed Apr 22 19:00:50 2020 +0900
@@ -1,10 +1,11 @@
  /*
-  Last Change: 2020-04-21 火 13:59:52.
+  Last Change: 2020-04-22 水 17:23:42.
  */
 
 package main
 
 import (
+	"bufio"
     "bytes"
     "compress/gzip"
 	"encoding/csv"
@@ -16,6 +17,7 @@
 	"net/http"
 	"os"
 	"path/filepath"
+	"sort"
 	"strconv"
 	"strings"
 )
@@ -48,7 +50,8 @@
 	server string
 	port string
 	hhsdb string
-	img_root string
+	indexdb string
+	server_root string
     hhash map[string]hhs
 	iymdhash map[string]string
 	iyhash map[string]string
@@ -57,13 +60,13 @@
 func init() {
 	port = ":3910"
 	hhsdb = "hhsdb.csv"
-	img_root = "./images"
-	hhash = make(map[string]hhs)
-	iymdhash = make(map[string]string)
-	iyhash = make(map[string]string)
+	indexdb = "index.csv"
 }
 
 func main() {
+	server_root = filepath.Dir(os.Args[0])
+	hhsdb = filepath.Join(server_root, hhsdb)
+	indexdb = filepath.Join(server_root, indexdb)
 
 	// setting IP-Address & Port
 	addrs, err := net.InterfaceAddrs()
@@ -86,20 +89,28 @@
 	}
 
 	// Http-Handler
-	http.HandleFunc("/h/",  hhs_handler)      // Get /h/0800012345 -> name:addr:20200101#20210701#...
-	http.HandleFunc("/hn/", hhsnm_handler)    // Get /h/0800012345:0800098765:... -> name1:name2:...
-	http.HandleFunc("/ht/", hhstm_handler)   // Get /ht/ -> 2020-03-14 12:34
-	http.HandleFunc("/ha/", hhsdb_handler)    // Get /ha/ -> hhsdb.csv for Mover
-	http.HandleFunc("/i/",  image_handler)    // Get /i/20200110/0800012345.tgz
-	http.HandleFunc("/r/",  recent_handler)   // Get /r/0800012345:0800067890:0800099999:... -> 0800012345,name1,20200101:0800067890,name2,20210405:...
-	http.HandleFunc("/d/",  index_handler)    // Get /d/20xx -> 20xx0401:2020xx0408:... , /d/20xx0401 -> 0800012345:0800098765:...
-	http.HandleFunc("/u/",  uphhsdb_handler)  // POST /u/
-	http.HandleFunc("/ui/", upimage_handler)  // POST /ui/20200401/0800012345.tgz
+	http.HandleFunc("/h/",  hhs_handler)     // Get /h/0800012345 -> name:addr:20200101#20210701#...
+	http.HandleFunc("/hn/", hhsnm_handler)   // Get /h/0800012345:0800098765:... -> name1:name2:...
+	http.HandleFunc("/ht/", hhstm_handler)   // Get /ht/ -> 2020-03-14 12:34 (2020-04-02)
+	http.HandleFunc("/ha/", hhsdb_handler)   // Get /ha/ -> hhsdb.csv for Mover
+	http.HandleFunc("/i/",  image_handler)   // Get /i/20200110/0800012345.tgz
+	http.HandleFunc("/r/",  recent_handler)  // Get /r/0800012345:0800067890:0800099999:... -> 0800012345,name1,20200101:0800067890,name2,20210405:...
+	http.HandleFunc("/d/",  index_handler)   // Get /d/20xx -> 20xx0401:20xx0408:... , /d/20xx0401 -> 0800012345:0800098765:...
+	http.HandleFunc("/dt/", indextm_handler) // Get /dt/ -> 2020-03-14 12:34 (2020-04-02)
+	http.HandleFunc("/ud/", upidx_handler)   // Get /ud/20200402
+	http.HandleFunc("/u/",  uphhsdb_handler) // POST /u/
+	http.HandleFunc("/ui/", upimage_handler) // POST /ui/20200401/0800012345.tgz
+	http.HandleFunc("/ci/", climage_handler) // Get /ci/20200402
 
 	log.Fatal(http.ListenAndServe(server, nil))
 }
 
+/** FUNCTIONS **/
 func loadDB() error {
+	hhash = make(map[string]hhs)
+	iymdhash = make(map[string]string)
+	iyhash = make(map[string]string)
+
 	b, err := ioutil.ReadFile(hhsdb)
 	if err != nil {
 		return err
@@ -114,17 +125,14 @@
 			return err
 		}
 		h := hhs{
-			No: record[0],
-			//Birth: record[1],
-			Name: record[2],
-			//Kana: record[3],
-			Addr: record[4],
-			//Sex: record[5],
+			No:   record[0], //Birth: record[1],
+			Name: record[2], //Kana: record[3],
+			Addr: record[4], //Sex: record[5],
 		}
 		hhash[record[0]] = h
 	}
 
-	b, err = ioutil.ReadFile("index.csv")
+	b, err = ioutil.ReadFile(indexdb)
 	if err != nil {
 		return err
 	}
@@ -157,6 +165,7 @@
 	return nil
 }
 
+/** HTTP HANDLERS **/
 /* Get /h/0800012345 -> name:addr:20200101#20210701#... */
 func hhs_handler(w http.ResponseWriter, r *http.Request) {
 	hno := r.URL.Path[len("/h/"):]
@@ -181,12 +190,25 @@
 	w.Write([]byte(strings.Join(buf, ":")))
 }
 
-/* Get /ht/ -> 2020-03-14 12:34 */
+/* Get /ht/ -> 2020-03-14 12:34 (2020-04-02) */
 func hhstm_handler(w http.ResponseWriter, r *http.Request) {
 	date := ""
 	if fi, err := os.Stat(hhsdb); err == nil {
 		t := fi.ModTime()
-		date = t.Format("2006-01-02 15:04")
+		latest := "0000000001"
+
+		f, _ := os.Open(hhsdb)
+		defer f.Close()
+		input := bufio.NewScanner(f)
+		for input.Scan() {
+			s := strings.Split(input.Text(), ",")
+			if (strings.Compare(s[0], latest) > 0) {
+				latest = s[0]
+			}
+		}
+
+		latest = "(" + latest + ")"
+		date = t.Format("2006-01-02 15:04 ") + latest
 	}
 	w.Write([]byte(date))
 }
@@ -200,7 +222,7 @@
 /* Get /i/20200110/0800012345.tgz */
 func image_handler(w http.ResponseWriter, r *http.Request) {
 	file := r.URL.Path[len("/i/"):]
-	file = filepath.Join(img_root, filepath.FromSlash(file))
+	file = filepath.Join(server_root, "images", filepath.FromSlash(file))
 
 	f, err := os.Open(file)
 	if err != nil {
@@ -233,7 +255,7 @@
 	w.Write([]byte(strings.Join(buf, ":")))
 }
 
-/* Get /d/20xx -> 20xx0401:2020xx0408:... , /d/20xx0401 -> 0800012345:0800098765:... */
+/* Get /d/20xx -> 20xx0401:20xx0408:... , /d/20xx0401 -> 0800012345:0800098765:... */
 func index_handler(w http.ResponseWriter, r *http.Request) {
 	var buf string
 	ymd := r.URL.Path[len("/d/"):]
@@ -253,7 +275,6 @@
 		return
 	}
 
-	server_root := filepath.Dir(os.Args[0])
 	file := filepath.Join(server_root, hhsdb)
 	f, err := os.Create(file)
 	if err != nil {
@@ -298,7 +319,6 @@
 	ymd := uri[0:8]
 	tgz := uri[9:]
 
-	server_root := filepath.Dir(os.Args[0])
 	dir := filepath.Join(server_root, "images", ymd)
 
 	if _, err := os.Stat(dir); os.IsNotExist(err) {
@@ -321,3 +341,64 @@
 	w.Write([]byte(fmt.Sprintf("%d bytes are recieved.\n", n)))
 }
 
+/* Get /dt/ -> 2020-03-14 12:34 (2020-04-02) */
+func indextm_handler(w http.ResponseWriter, r *http.Request) {
+	date := ""
+	if fi, err := os.Stat(indexdb); err == nil {
+		t := fi.ModTime()
+		latest := "20200101"
+
+		f, _ := os.Open(indexdb)
+		defer f.Close()
+		input := bufio.NewScanner(f)
+		for input.Scan() {
+			s := strings.Split(input.Text(), ",")
+			if (strings.Compare(s[1], latest) > 0) {
+				latest = s[1]
+			}
+		}
+
+		latest = "(" + latest[0:4] + "-" + latest[4:6] + "-" + latest[6:] + ")"
+		date = t.Format("2006-01-02 15:04 ") + latest
+	}
+	w.Write([]byte(date))
+}
+
+/* Get /ud/20200402  */
+func upidx_handler(w http.ResponseWriter, r *http.Request) {
+	date := r.URL.Path[len("/ud/"):]
+	var buf []string
+
+	f, _ := os.Open(indexdb)
+	input := bufio.NewScanner(f)
+	for input.Scan() {
+		if !strings.HasSuffix(input.Text(), date) {
+			buf = append(buf, input.Text())
+		}
+	}
+	f.Close()
+
+	imgdir := filepath.Join(server_root, "images", date)
+	files, _ := ioutil.ReadDir(imgdir)
+	for _, file := range files {
+		i := file.Name()[0:10] + "," + date
+		buf = append(buf, i)
+	}
+	sort.Sort(sort.Reverse(sort.StringSlice(buf)))
+
+	os.Remove(indexdb)
+
+	s := strings.Join(buf, "\n")
+	ioutil.WriteFile(indexdb, []byte(s), 0644)
+
+	loadDB();
+	w.Write([]byte("update index done."))
+}
+
+/* Get /ci/20200402 */
+func climage_handler(w http.ResponseWriter, r *http.Request) {
+	date := r.URL.Path[len("/ci/"):]
+	dir := filepath.Join(server_root, "images", date)
+	os.RemoveAll(dir)
+}
+