# HG changeset patch # User pyon@macmini # Date 1542111080 -32400 # Node ID 240752cbe11bc27449c52fe6106a88bf7b8a17a2 # Parent 799b6008db8e74922ca2c20bcd63eda3b9208612 db-upload.(by go) diff -r 799b6008db8e -r 240752cbe11b go/client.go --- a/go/client.go Mon Nov 12 19:35:50 2018 +0900 +++ b/go/client.go Tue Nov 13 21:11:20 2018 +0900 @@ -1,17 +1,17 @@ /* client.go : client-program. - Version : 1.2 - Last Change: 2018-10-30 火 09:13:24. + Version : 1.3 + Last Change: 2018-11-13 火 12:03:00. install to: rsearcher_root/ rsearcher_root/client.exe + grsearcher.exe + app.conf - + verup.bat + + upgrade.bat + auth.db ( temporary ) + hhs.db ( temporary ) - + index.db ( 10 days ) + + index.db ( 14 days ) + image/*.png, *.jpg + doc/ + .cache/* ( temporary ) @@ -19,7 +19,8 @@ $ client.exe -r 192.168.0.1:3910 # get new release $ client.exe -u 192.168.0.1:3910 # get new dbs $ client.exe 192.168.0.1:3910 0800012345 20171231 # get images - $ client.exe -a 192.168.0.1:3910 upfile.txt # upload file + $ client.exe -a 192.168.0.1:3910 upfile.txt # upload file to /upload + $ client.exe -m 192.168.0.1:3910 hhs.db # upload file to /db */ package main @@ -42,15 +43,16 @@ var version string func init() { - version = "1.2" + version = "1.3" // manage-db version } func main() { - var upgrade = flag.Bool( "r", false, "" ) // get grsearcher.exe, crypto.exe client.exe - var update = flag.Bool( "u", false, "" ) // get auth.db, hhs.db, index.db(14,28) - var upload = flag.Bool( "a", false, "" ) // post somefile - var cnttime = flag.Bool( "t", false, "" ) // count time - var printver = flag.Bool( "v", false, "" ) // print version + var upgrade = flag.Bool( "r", false, "get new release" ) // get grsearcher.exe, crypto.exe client.exe + var update = flag.Bool( "u", false, "get new DBs" ) // get auth.db, hhs.db, index.db(14,28) + var managedb = flag.Bool( "m", false, "upload to /db" ) // management db + var upload = flag.Bool( "a", false, "upload to /upload" ) // post somefile + var cnttime = flag.Bool( "t", false, "measure work time" ) // count time + var printver = flag.Bool( "v", false, "print version" ) // print version flag.Parse() // print version @@ -64,26 +66,36 @@ // upload if *upload { if flag.NArg() != 2 { - fmt.Fprintf( os.Stderr, "bad host or file.\n" ) + fmt.Fprint( os.Stderr, "bad host or file.\n" ) os.Exit( 1 ) } host := flag.Args()[0] file := flag.Args()[1] fmt.Printf( "Sending %s...", file ) - f, err := os.Open( file ) - if err != nil { + if message, err := post_file( host, "/upload", file ); err != nil { + log.Fatal( err ) + } else { + fmt.Println( string( message ) ) + } + + if *cnttime { + fmt.Println( "---", time.Now().Sub( st ) ) + } + os.Exit( 0 ) + } + + // management db + if *managedb { + if flag.NArg() != 2 { + fmt.Fprint( os.Stderr, "bad remote host.\n" ) + os.Exit( 1 ) + } + host := flag.Args()[0] + file := flag.Args()[1] + fmt.Print( "Management DB..." ) + if _, err := post_file( host, "/mngdb/", file ); err != nil { log.Fatal( err ) } - defer f.Close() - - res, err := http.Post( "http://" + host + "/upload", "binary/octet-stream", f ) - if err != nil { - log.Fatal( err ) - } - defer res.Body.Close() - message, _ := ioutil.ReadAll( res.Body ) - fmt.Println( string( message ) ) - if *cnttime { fmt.Println( "---", time.Now().Sub( st ) ) } @@ -93,7 +105,7 @@ // software upgrade if *upgrade { if flag.NArg() != 1 { - fmt.Fprintf( os.Stderr, "bad remote host.\n" ) + fmt.Fprint( os.Stderr, "bad remote host.\n" ) os.Exit( 1 ) } fmt.Print( "Getting grsearcher.exe..." ) @@ -118,7 +130,7 @@ // database update if *update { if flag.NArg() != 1 { - fmt.Fprintf( os.Stderr, "bad remote host.\n" ) + fmt.Fprint( os.Stderr, "bad remote host.\n" ) os.Exit( 1 ) } fmt.Print( "Getting auth.db..." ) @@ -146,7 +158,7 @@ // main : image download if flag.NArg() != 3 { - fmt.Fprintf( os.Stderr, "bad argument.\n" ) + fmt.Fprint( os.Stderr, "bad argument.\n" ) os.Exit( 1 ) } @@ -160,11 +172,12 @@ } m := r.FindString( h ) if len( m ) == 0 { - fmt.Fprintf( os.Stderr, "bad hno.\n" ) + fmt.Fprint( os.Stderr, "bad hno.\n" ) os.Exit( 1 ) } rfile := "/images/" + d + "/" + h + ".tgz" + fmt.Print( "Getting", rfile ) b, err := get_file( host, rfile, "" ) if err != nil { log.Fatal( err ) @@ -179,6 +192,22 @@ } /* Subroutines */ +// HTTP POST +func post_file( host, path, file string ) ( []byte, error ) { + f, err := os.Open( file ) + if err != nil { + return nil, err + } + defer f.Close() + + res, err := http.Post( "http://" + host + path + file, "binary/octet-stream", f ) + if err != nil { + return nil, err + } + defer res.Body.Close() + return ioutil.ReadAll( res.Body ) +} + // HTTP GET func get_file( host, rfile, lfile string ) ( []byte, error ) { res, err := http.Get( "http://" + host + "/" + rfile ) diff -r 799b6008db8e -r 240752cbe11b go/extsql.go --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/go/extsql.go Tue Nov 13 21:11:20 2018 +0900 @@ -0,0 +1,83 @@ +/* + extsql.go : manipulate sqlite3. + Version : 0.1 + Last Change: 2018-11-13 火 15:22:56. + + install to: rsearcher_root/ +*/ +package main + +import ( + "fmt" + "flag" + "log" + "os" + "os/exec" + "strings" +) + +var version string +var sqlite string + +func init() { + version = "0.1" // first version + sqlite = "sqlite3.exe" +} + +func main() { + var printver = flag.Bool( "v", false, "print version" ) // print version + flag.Parse() + + // print version + if *printver { + fmt.Println( "mngdb [ ver", version, "]" ) + os.Exit( 0 ) + } + + if flag.NArg() != 3 { + fmt.Fprint( os.Stderr, "argument error.\n" ) + fmt.Fprint( os.Stderr, "> extsql.exe hhs.db ccn.db 20160401\n" ) + os.Exit( 1 ) + } + hhs := flag.Args()[0] + ccn := flag.Args()[1] + ymd := flag.Args()[2] + + // make idnex.db + sql := "select hhsno, date from path where date >= " + ymd + ccndb, err := exec.Command( sqlite, ccn, sql ).Output() + if err != nil { + log.Fatal( err ) + } + + f, _ := os.Create( "index.db" ) + defer f.Close() + + m := make( map[string]bool ) + for _, cols := range strings.Split( string( ccndb ), "\n" ) { + col := strings.Split( cols, "|" ) + if len( col ) == 2 { + buf := fmt.Sprintf( "%s:%s\n", col[0], col[1] ) + f.WriteString( buf ) + m[ col[0] ] = true + } + } + + // make hhs.csv + sql = "select * from hhs_master" + hhsdb, err := exec.Command( sqlite, hhs, sql ).Output() + if err != nil { + log.Fatal( err ) + } + + f, _ = os.Create( "hhs.csv" ) + for _, cols := range strings.Split( string( hhsdb ), "\n" ) { + col := strings.Split( cols, "|" ) + if _, ok := m[ col[0] ]; ok == true { + buf := strings.Replace( cols, "|", ",", -1 ) + "\n" + f.WriteString( buf ) + } + } + f.Close() +} + diff -r 799b6008db8e -r 240752cbe11b go/server.go --- a/go/server.go Mon Nov 12 19:35:50 2018 +0900 +++ b/go/server.go Tue Nov 13 21:11:20 2018 +0900 @@ -1,7 +1,7 @@ /* server.go : server-program. - Version : 1.1 - Last Change: 2018-10-29 月 14:58:19. + Version : 1.3 + Last Change: 2018-11-13 火 08:19:52. install to: server_root/ @@ -32,7 +32,7 @@ ) func init() { - version = "1.2" // log version + version = "1.3" // manage-db version port = ":3910" server_root = filepath.Dir( os.Args[0] ) logfile = filepath.Join( server_root, "rsearcher.log" ) @@ -57,6 +57,7 @@ fmt.Println( "server start [", server, "] ( program version", version, ")" ) http.HandleFunc( "/", handler ) http.HandleFunc( "/upload", upload_handler ) + http.HandleFunc( "/mngdb/", mngdb_handler ) log.Fatal( http.ListenAndServe( server, nil ) ) } @@ -98,6 +99,26 @@ w.Write( []byte( fmt.Sprintf( "%d bytes are recieved.\n", n ) ) ) } +func mngdb_handler( w http.ResponseWriter, r *http.Request ) { + fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", "/mngdb" ) + write_log( "[access] " + r.RemoteAddr + "manage-db" ) + db := r.URL.Path[ len( "/mngdb/" ): ] + + file := filepath.Join( server_root, "db", db ) + + f, err := os.Create( file ) + if err != nil { + http.NotFound( w, r ) + return + } + _, err = io.Copy( f, r.Body ) + if err != nil { + http.NotFound( w, r ) + return + } + f.Close() +} + func write_log( msg string ) { f, err := os.OpenFile( logfile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644 ) if err != nil {