Mercurial > mercurial > hgweb_golang.cgi
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) +} +