comparison go/client.go @ 12:240752cbe11b

db-upload.(by go)
author pyon@macmini
date Tue, 13 Nov 2018 21:11:20 +0900
parents 82f9af6aa7e4
children f5ffc34f045a
comparison
equal deleted inserted replaced
11:799b6008db8e 12:240752cbe11b
1 /* 1 /*
2 client.go : client-program. 2 client.go : client-program.
3 Version : 1.2 3 Version : 1.3
4 Last Change: 2018-10-30 火 09:13:24. 4 Last Change: 2018-11-13 火 12:03:00.
5 5
6 install to: rsearcher_root/ 6 install to: rsearcher_root/
7 7
8 rsearcher_root/client.exe 8 rsearcher_root/client.exe
9 + grsearcher.exe 9 + grsearcher.exe
10 + app.conf 10 + app.conf
11 + verup.bat 11 + upgrade.bat
12 + auth.db ( temporary ) 12 + auth.db ( temporary )
13 + hhs.db ( temporary ) 13 + hhs.db ( temporary )
14 + index.db ( 10 days ) 14 + index.db ( 14 days )
15 + image/*.png, *.jpg 15 + image/*.png, *.jpg
16 + doc/ 16 + doc/
17 + .cache/* ( temporary ) 17 + .cache/* ( temporary )
18 18
19 $ client.exe -r 192.168.0.1:3910 # get new release 19 $ client.exe -r 192.168.0.1:3910 # get new release
20 $ client.exe -u 192.168.0.1:3910 # get new dbs 20 $ client.exe -u 192.168.0.1:3910 # get new dbs
21 $ client.exe 192.168.0.1:3910 0800012345 20171231 # get images 21 $ client.exe 192.168.0.1:3910 0800012345 20171231 # get images
22 $ client.exe -a 192.168.0.1:3910 upfile.txt # upload file 22 $ client.exe -a 192.168.0.1:3910 upfile.txt # upload file to /upload
23 $ client.exe -m 192.168.0.1:3910 hhs.db # upload file to /db
23 */ 24 */
24 package main 25 package main
25 26
26 import ( 27 import (
27 "archive/tar" 28 "archive/tar"
40 ) 41 )
41 42
42 var version string 43 var version string
43 44
44 func init() { 45 func init() {
45 version = "1.2" 46 version = "1.3" // manage-db version
46 } 47 }
47 48
48 func main() { 49 func main() {
49 var upgrade = flag.Bool( "r", false, "" ) // get grsearcher.exe, crypto.exe client.exe 50 var upgrade = flag.Bool( "r", false, "get new release" ) // get grsearcher.exe, crypto.exe client.exe
50 var update = flag.Bool( "u", false, "" ) // get auth.db, hhs.db, index.db(14,28) 51 var update = flag.Bool( "u", false, "get new DBs" ) // get auth.db, hhs.db, index.db(14,28)
51 var upload = flag.Bool( "a", false, "" ) // post somefile 52 var managedb = flag.Bool( "m", false, "upload to /db" ) // management db
52 var cnttime = flag.Bool( "t", false, "" ) // count time 53 var upload = flag.Bool( "a", false, "upload to /upload" ) // post somefile
53 var printver = flag.Bool( "v", false, "" ) // print version 54 var cnttime = flag.Bool( "t", false, "measure work time" ) // count time
55 var printver = flag.Bool( "v", false, "print version" ) // print version
54 flag.Parse() 56 flag.Parse()
55 57
56 // print version 58 // print version
57 if *printver { 59 if *printver {
58 fmt.Println( "client [ ver", version, "]" ) 60 fmt.Println( "client [ ver", version, "]" )
62 st := time.Now() // start time 64 st := time.Now() // start time
63 65
64 // upload 66 // upload
65 if *upload { 67 if *upload {
66 if flag.NArg() != 2 { 68 if flag.NArg() != 2 {
67 fmt.Fprintf( os.Stderr, "bad host or file.\n" ) 69 fmt.Fprint( os.Stderr, "bad host or file.\n" )
68 os.Exit( 1 ) 70 os.Exit( 1 )
69 } 71 }
70 host := flag.Args()[0] 72 host := flag.Args()[0]
71 file := flag.Args()[1] 73 file := flag.Args()[1]
72 fmt.Printf( "Sending %s...", file ) 74 fmt.Printf( "Sending %s...", file )
73 f, err := os.Open( file ) 75 if message, err := post_file( host, "/upload", file ); err != nil {
74 if err != nil {
75 log.Fatal( err ) 76 log.Fatal( err )
76 } 77 } else {
77 defer f.Close() 78 fmt.Println( string( message ) )
78 79 }
79 res, err := http.Post( "http://" + host + "/upload", "binary/octet-stream", f ) 80
80 if err != nil { 81 if *cnttime {
82 fmt.Println( "---", time.Now().Sub( st ) )
83 }
84 os.Exit( 0 )
85 }
86
87 // management db
88 if *managedb {
89 if flag.NArg() != 2 {
90 fmt.Fprint( os.Stderr, "bad remote host.\n" )
91 os.Exit( 1 )
92 }
93 host := flag.Args()[0]
94 file := flag.Args()[1]
95 fmt.Print( "Management DB..." )
96 if _, err := post_file( host, "/mngdb/", file ); err != nil {
81 log.Fatal( err ) 97 log.Fatal( err )
82 } 98 }
83 defer res.Body.Close()
84 message, _ := ioutil.ReadAll( res.Body )
85 fmt.Println( string( message ) )
86
87 if *cnttime { 99 if *cnttime {
88 fmt.Println( "---", time.Now().Sub( st ) ) 100 fmt.Println( "---", time.Now().Sub( st ) )
89 } 101 }
90 os.Exit( 0 ) 102 os.Exit( 0 )
91 } 103 }
92 104
93 // software upgrade 105 // software upgrade
94 if *upgrade { 106 if *upgrade {
95 if flag.NArg() != 1 { 107 if flag.NArg() != 1 {
96 fmt.Fprintf( os.Stderr, "bad remote host.\n" ) 108 fmt.Fprint( os.Stderr, "bad remote host.\n" )
97 os.Exit( 1 ) 109 os.Exit( 1 )
98 } 110 }
99 fmt.Print( "Getting grsearcher.exe..." ) 111 fmt.Print( "Getting grsearcher.exe..." )
100 host := flag.Args()[0] 112 host := flag.Args()[0]
101 if _, err := get_file( host, "/release/grsearcher.exe", "grsearcher.exe" ); err != nil { 113 if _, err := get_file( host, "/release/grsearcher.exe", "grsearcher.exe" ); err != nil {
116 } 128 }
117 129
118 // database update 130 // database update
119 if *update { 131 if *update {
120 if flag.NArg() != 1 { 132 if flag.NArg() != 1 {
121 fmt.Fprintf( os.Stderr, "bad remote host.\n" ) 133 fmt.Fprint( os.Stderr, "bad remote host.\n" )
122 os.Exit( 1 ) 134 os.Exit( 1 )
123 } 135 }
124 fmt.Print( "Getting auth.db..." ) 136 fmt.Print( "Getting auth.db..." )
125 host := flag.Args()[0] 137 host := flag.Args()[0]
126 if _, err := get_file( host, "/db/auth.db", "auth.db" ); err != nil { 138 if _, err := get_file( host, "/db/auth.db", "auth.db" ); err != nil {
144 os.Exit( 0 ) 156 os.Exit( 0 )
145 } 157 }
146 158
147 // main : image download 159 // main : image download
148 if flag.NArg() != 3 { 160 if flag.NArg() != 3 {
149 fmt.Fprintf( os.Stderr, "bad argument.\n" ) 161 fmt.Fprint( os.Stderr, "bad argument.\n" )
150 os.Exit( 1 ) 162 os.Exit( 1 )
151 } 163 }
152 164
153 host := flag.Args()[0] 165 host := flag.Args()[0]
154 h := flag.Args()[1] 166 h := flag.Args()[1]
158 if err != nil { 170 if err != nil {
159 log.Fatal( err ) 171 log.Fatal( err )
160 } 172 }
161 m := r.FindString( h ) 173 m := r.FindString( h )
162 if len( m ) == 0 { 174 if len( m ) == 0 {
163 fmt.Fprintf( os.Stderr, "bad hno.\n" ) 175 fmt.Fprint( os.Stderr, "bad hno.\n" )
164 os.Exit( 1 ) 176 os.Exit( 1 )
165 } 177 }
166 178
167 rfile := "/images/" + d + "/" + h + ".tgz" 179 rfile := "/images/" + d + "/" + h + ".tgz"
180 fmt.Print( "Getting", rfile )
168 b, err := get_file( host, rfile, "" ) 181 b, err := get_file( host, rfile, "" )
169 if err != nil { 182 if err != nil {
170 log.Fatal( err ) 183 log.Fatal( err )
171 } 184 }
172 if err := untgz_images( d, b ); err != nil { 185 if err := untgz_images( d, b ); err != nil {
177 fmt.Println( "---", time.Now().Sub( st ) ) 190 fmt.Println( "---", time.Now().Sub( st ) )
178 } 191 }
179 } 192 }
180 193
181 /* Subroutines */ 194 /* Subroutines */
195 // HTTP POST
196 func post_file( host, path, file string ) ( []byte, error ) {
197 f, err := os.Open( file )
198 if err != nil {
199 return nil, err
200 }
201 defer f.Close()
202
203 res, err := http.Post( "http://" + host + path + file, "binary/octet-stream", f )
204 if err != nil {
205 return nil, err
206 }
207 defer res.Body.Close()
208 return ioutil.ReadAll( res.Body )
209 }
210
182 // HTTP GET 211 // HTTP GET
183 func get_file( host, rfile, lfile string ) ( []byte, error ) { 212 func get_file( host, rfile, lfile string ) ( []byte, error ) {
184 res, err := http.Get( "http://" + host + "/" + rfile ) 213 res, err := http.Get( "http://" + host + "/" + rfile )
185 if err != nil { 214 if err != nil {
186 return nil, err 215 return nil, err