annotate go/server.go @ 12:240752cbe11b

db-upload.(by go)
author pyon@macmini
date Tue, 13 Nov 2018 21:11:20 +0900
parents 82f9af6aa7e4
children f5ffc34f045a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
1 /*
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
2 server.go : server-program.
12
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
3 Version : 1.3
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
4 Last Change: 2018-11-13 火 08:19:52.
0
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
5
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
6 install to: server_root/
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
7
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
8 server_root/server
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
9 + db/
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
10 + release/
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
11 + images/
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
12 */
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
13 package main
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
14
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
15 import(
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
16 "path/filepath"
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
17 "fmt"
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
18 "io"
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
19 "log"
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
20 "net"
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
21 "net/http"
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
22 "os"
3
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
23 "time"
0
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
24 )
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
25
8
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
26 var (
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
27 version string
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
28 server string
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
29 port string
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
30 server_root string
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
31 logfile string
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
32 )
3
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
33
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
34 func init() {
12
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
35 version = "1.3" // manage-db version
3
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
36 port = ":3910"
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
37 server_root = filepath.Dir( os.Args[0] )
8
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
38 logfile = filepath.Join( server_root, "rsearcher.log" )
3
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
39 }
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
40
0
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
41 func main() {
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
42
3
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
43 // setting IP-Address & Port
0
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
44 addrs, err := net.InterfaceAddrs()
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
45 if err != nil {
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
46 log.Fatal( err )
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
47 }
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
48 for _, a := range addrs {
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
49 if ipnet, ok := a.( *net.IPNet ); ok && !ipnet.IP.IsLoopback() {
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
50 if ipnet.IP.To4() != nil {
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
51 server = ipnet.IP.String() + port
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
52 }
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
53 }
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
54 }
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
55
3
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
56 // start Web-server
4
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
57 fmt.Println( "server start [", server, "] ( program version", version, ")" )
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
58 http.HandleFunc( "/", handler )
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
59 http.HandleFunc( "/upload", upload_handler )
12
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
60 http.HandleFunc( "/mngdb/", mngdb_handler )
0
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
61 log.Fatal( http.ListenAndServe( server, nil ) )
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
62 }
d3b8cd5aeb70 make repo.
pyon@macmini
parents:
diff changeset
63
3
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
64 func handler( w http.ResponseWriter, r *http.Request ) {
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
65 file := filepath.Join( server_root, filepath.FromSlash( r.URL.Path ) )
8
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
66
3
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
67 fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", file )
8
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
68 write_log( "[access] " + r.RemoteAddr + " " + file )
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
69
3
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
70 f, err := os.Open( file )
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
71 if err != nil {
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
72 http.NotFound( w, r )
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
73 return
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
74 }
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
75 defer f.Close()
8
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
76
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
77 fi, _ := f.Stat()
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
78
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
79 w.Header().Set( "Content-Type", "rsearcher/octet-stream" )
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
80 w.Header().Set( "Content-Length", fmt.Sprintf( "%d", fi.Size() ) )
3
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
81 io.Copy( w, f )
db4813125eb8 many changes.
pyon@macmini
parents: 1
diff changeset
82 }
4
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
83
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
84 func upload_handler( w http.ResponseWriter, r *http.Request ) {
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
85 fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", "/upload" )
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
86 now := time.Now().Format( "20060102_150405" )
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
87 file := filepath.Join( server_root, "upload", now )
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
88 f, err := os.Create( file )
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
89 if err != nil {
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
90 http.NotFound( w, r )
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
91 return
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
92 }
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
93 n, err := io.Copy( f, r.Body )
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
94 if err != nil {
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
95 http.NotFound( w, r )
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
96 return
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
97 }
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
98 f.Close()
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
99 w.Write( []byte( fmt.Sprintf( "%d bytes are recieved.\n", n ) ) )
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
100 }
06342fc544e4 mouse gesture.
pyon@macmini
parents: 3
diff changeset
101
12
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
102 func mngdb_handler( w http.ResponseWriter, r *http.Request ) {
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
103 fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", "/mngdb" )
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
104 write_log( "[access] " + r.RemoteAddr + "manage-db" )
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
105 db := r.URL.Path[ len( "/mngdb/" ): ]
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
106
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
107 file := filepath.Join( server_root, "db", db )
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
108
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
109 f, err := os.Create( file )
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
110 if err != nil {
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
111 http.NotFound( w, r )
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
112 return
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
113 }
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
114 _, err = io.Copy( f, r.Body )
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
115 if err != nil {
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
116 http.NotFound( w, r )
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
117 return
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
118 }
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
119 f.Close()
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
120 }
240752cbe11b db-upload.(by go)
pyon@macmini
parents: 8
diff changeset
121
8
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
122 func write_log( msg string ) {
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
123 f, err := os.OpenFile( logfile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644 )
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
124 if err != nil {
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
125 log.Fatal( err )
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
126 }
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
127 defer f.Close()
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
128
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
129 logger := log.New( f, "", log.LstdFlags )
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
130 logger.Println( msg )
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
131 }
82f9af6aa7e4 add net.cpp
pyon@macmini
parents: 4
diff changeset
132