simplify http request route

This commit is contained in:
r0n1n7an 2023-11-30 10:57:20 +08:00
parent b90685e2f8
commit 901b09e8f1
4 changed files with 140 additions and 162 deletions

Binary file not shown.

View File

@ -182,8 +182,6 @@ func startSvc() {
http.HandleFunc("/fileinfo/", handleFileInfo) http.HandleFunc("/fileinfo/", handleFileInfo)
http.HandleFunc("/setuutinfo/", handleSetUutInfo) http.HandleFunc("/setuutinfo/", handleSetUutInfo)
http.HandleFunc("/getuutinfo/", handleGetUutInfo) http.HandleFunc("/getuutinfo/", handleGetUutInfo)
http.HandleFunc("/getdefectinfo/", handleGetDefectInfo)
http.HandleFunc("/getofflineinfo/", handleGetOfflineInfo)
logger.Printf("[MSG] Starting HTTP Server On Port: %s\r\n", cfg.Settings.ListenPort) logger.Printf("[MSG] Starting HTTP Server On Port: %s\r\n", cfg.Settings.ListenPort)
err := http.ListenAndServe(":"+cfg.Settings.ListenPort, nil) err := http.ListenAndServe(":"+cfg.Settings.ListenPort, nil)
if err != nil { if err != nil {
@ -399,84 +397,29 @@ func handleGetUutInfo(w http.ResponseWriter, r *http.Request) {
return return
} }
params := make(map[string]string, 0) params, err := parseReqParams(r)
if len(r.Form) > 0 { if err != nil {
for k, v := range r.Form { logger.Printf("[ERR] %s; %s; %#v; %s\r\n", r.RemoteAddr, r.RequestURI, params, rst["ErrMsg"])
params[strings.ToUpper(strings.TrimSpace(k))] = strings.TrimSpace(v[0])
}
}
ews := new(ews.EWS)
rst = ews.GetUutInfo(cfg, logger, host, addr, uri, params)
if rst["RESULT"] != "OK" {
w.WriteHeader(http.StatusInternalServerError)
} else {
w.WriteHeader(http.StatusOK)
}
fmt.Fprintf(w, "%v", rst["ErrMsg"])
}
func handleGetDefectInfo(w http.ResponseWriter, r *http.Request) {
defer r.Body.Close()
if r.RequestURI == "/favicon.ico" {
return
}
host := strings.Split(r.Host, ":")[0]
addr := strings.Split(r.RemoteAddr, ":")[0]
uri := r.RequestURI
rst := map[string]string{"RESULT": ""}
if err := r.ParseForm(); err != nil {
logger.Printf("[ERR] %s; %s; %s\r\n", r.RemoteAddr, r.RequestURI, err.Error())
rst["RESULT"] = "NG" rst["RESULT"] = "NG"
rst["ErrMsg"] = err.Error() rst["ErrMsg"] = err.Error()
w.WriteHeader(http.StatusInternalServerError) w.WriteHeader(http.StatusBadRequest)
fmt.Fprintf(w, "%v", strings.ReplaceAll(fmt.Sprintf("%#v", rst), "map[string]string", "")) fmt.Fprintf(w, "%v", strings.ReplaceAll(fmt.Sprintf("%#v", rst), "map[string]string", ""))
return return
} }
params := make(map[string]string, 0)
if len(r.Form) > 0 {
for k, v := range r.Form {
params[strings.ToUpper(strings.TrimSpace(k))] = strings.TrimSpace(v[0])
}
}
ews := new(ews.EWS) ews := new(ews.EWS)
rst = ews.GetDefectUuts(cfg, logger, host, addr, uri, params)
if rst["RESULT"] != "OK" {
w.WriteHeader(http.StatusInternalServerError)
} else {
w.WriteHeader(http.StatusOK)
}
fmt.Fprintf(w, "%v", rst["ErrMsg"])
}
func handleGetOfflineInfo(w http.ResponseWriter, r *http.Request) { switch params["ACTION"] {
defer r.Body.Close() case "QueryByFilter":
if r.RequestURI == "/favicon.ico" { rst = ews.GetUutInfo(cfg, logger, host, addr, uri, params)
return case "GetDefectReport":
} rst = ews.GetDefectReport(cfg, logger, host, addr, uri, params)
host := strings.Split(r.Host, ":")[0] case "GetOfflineReport":
addr := strings.Split(r.RemoteAddr, ":")[0] rst = ews.GetOfflineReport(cfg, logger, host, addr, uri, params)
uri := r.RequestURI default:
rst := map[string]string{"RESULT": ""} rst = ews.GetUutInfo(cfg, logger, host, addr, uri, params)
if err := r.ParseForm(); err != nil {
logger.Printf("[ERR] %s; %s; %s\r\n", r.RemoteAddr, r.RequestURI, err.Error())
rst["RESULT"] = "NG"
rst["ErrMsg"] = err.Error()
w.WriteHeader(http.StatusInternalServerError)
fmt.Fprintf(w, "%v", strings.ReplaceAll(fmt.Sprintf("%#v", rst), "map[string]string", ""))
return
} }
params := make(map[string]string, 0)
if len(r.Form) > 0 {
for k, v := range r.Form {
params[strings.ToUpper(strings.TrimSpace(k))] = strings.TrimSpace(v[0])
}
}
ews := new(ews.EWS)
rst = ews.GetOfflineUuts(cfg, logger, host, addr, uri, params)
if rst["RESULT"] != "OK" { if rst["RESULT"] != "OK" {
w.WriteHeader(http.StatusInternalServerError) w.WriteHeader(http.StatusInternalServerError)
} else { } else {

View File

@ -6,7 +6,7 @@
<title>API Server</title> <title>API Server</title>
<style type="text/css"> <style type="text/css">
form {margin: 0px; display: inline;} form {margin: 0px; display: inline;}
ul,li {margin: 0px; padding: 0px; list-style-type: none;} ul,li {margin: 0px; padding: 0px; list-style-type: none;display: inline;}
label {font-family: Consolas; font-size: 16px;} label {font-family: Consolas; font-size: 16px;}
input {width: 200px; height: 20px; font-family: monospace; font-size: 14px;} input {width: 200px; height: 20px; font-family: monospace; font-size: 14px;}
select {width: 150px; height: 25px; font-size: 14px;} select {width: 150px; height: 25px; font-size: 14px;}
@ -22,24 +22,31 @@
</head> </head>
<body leftmargin="10px" > <body leftmargin="10px" >
<h4>机台测试记录查询</h4> <h4>机台测试记录查询</h4>
<form name="getdefectinfo" action="/getdefectinfo/" method="POST" target="result">
<input type="submit" name="Query" value="实时异常报表" style="width:120px; height:25px;">
</form>
&nbsp;
<form name="getofflineinfo" action="/getofflineinfo/" method="POST" target="result">
<input type="submit" name="Query" value="实时离线报表" style="width:120px; height:25px;">
</form>
<br/><br/>
<form name="getuutinfo" action="/getuutinfo/" method="POST" target="result"> <form name="getuutinfo" action="/getuutinfo/" method="POST" target="result">
<ul> <ul>
<li> <li>
<label>USN: </label> <!--label for="ACTION">查询类型: </label>&nbsp;-->
<input type="text" name="USN" id="USN" /> <select name="ACTION" id="ACTION">
&nbsp; <!--option value="" selected="true">* 选择查询类型 *</option-->
<input type="submit" name="Query" value="Query" style="width:75px; height:25px;" /> <option value="QueryByFilter" selected="true">条件查询</option>
<!--input type="submit" style="width:75px; height:25px;" /--> <option value="GetDefectReport">实时异常报表</option>
<option value="GetOfflineReport">实时离线报表</option>
</select>&nbsp;
</li>
<li>
<!--label for="KEY">查询条件: </label>&nbsp;-->
<select name="KEY" id="KEY">
<!--option value="" selected="true">* 选择查询条件 *</option-->
<option value="USN" selected="true">By SN</option>
<option value="MO">By MO</option>
<option value="SKU">By SKU</option>
<option value="LINE">By Line</option>
</select>&nbsp;
<input type="text" name="VALUE" id="VALUE" />&nbsp;
</li>
<li>
<input type="reset" value="Reset" style="width:100px; height:25px;" />&nbsp;
<input type="submit" value="Query" style="width:100px; height:25px;" />
</li> </li>
</ul> </ul>
</form> </form>

View File

@ -275,7 +275,7 @@ func (e *EWS) GetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
} }
rst := map[string]string{"RESULT": ""} rst := map[string]string{"RESULT": ""}
if params["USN"] == "" { if params["KEY"] == "" || params["VALUE"] == "" {
logger.Printf("[ERR] %s; %s; %#v; %s\r\n", addr, uri, params, "Invalid Parameters !") logger.Printf("[ERR] %s; %s; %#v; %s\r\n", addr, uri, params, "Invalid Parameters !")
rst["RESULT"] = "NG" rst["RESULT"] = "NG"
rst["ErrMsg"] = e.SimpleMsgHTML("red", "Invalid Parameters !") rst["ErrMsg"] = e.SimpleMsgHTML("red", "Invalid Parameters !")
@ -305,7 +305,7 @@ func (e *EWS) GetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
return rst return rst
} }
ui := new(UutInfo) ul := new(UutInfo)
partNO := "" partNO := ""
mfgMO := "" mfgMO := ""
mfgSKU := "" mfgSKU := ""
@ -314,32 +314,43 @@ func (e *EWS) GetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
//Get Last Record //Get Last Record
last := "" last := ""
row := dbo.QueryRow( curr, err := dbo.Query(
fmt.Sprintf(`SELECT usn,mac,ipaddr,relay,item,status,message,partno,mo,sku,line,stage,first_ack,last_ack,last_change,last_transfer fmt.Sprintf(`SELECT usn,mac,ipaddr,relay,item,status,message,partno,mo,sku,line,stage,first_ack,last_ack,last_change,last_transfer
FROM uutinfo FROM uutinfo
WHERE usn='%s';`, params["USN"])) WHERE %s='%s'
ORDER BY usn ASC, seqid ASC;`, params["KEY"], params["VALUE"]))
err = row.Scan( if err != nil {
&ui.USN, logger.Printf("[ERR] %s; %s; %#v; %s\r\n", addr, uri, params, err.Error())
&ui.MAC, rst["RESULT"] = "NG"
&ui.IPAddr, rst["ErrMsg"] = e.SimpleMsgHTML("red", err.Error())
&ui.Relay, return rst
&ui.Item, }
&ui.Status, defer curr.Close()
&ui.Message,
&ui.PartNO,
&ui.MfgMO,
&ui.MfgSKU,
&ui.MfgLine,
&ui.MfgStage,
&ui.FirstAck,
&ui.LastAck,
&ui.LastChg,
&ui.LastTrn,
)
if err == nil { for curr.Next() {
last = fmt.Sprintf(`<tr> err := curr.Scan(
&ul.USN,
&ul.MAC,
&ul.IPAddr,
&ul.Relay,
&ul.Item,
&ul.Status,
&ul.Message,
&ul.PartNO,
&ul.MfgMO,
&ul.MfgSKU,
&ul.MfgLine,
&ul.MfgStage,
&ul.FirstAck,
&ul.LastAck,
&ul.LastChg,
&ul.LastTrn,
)
if err != nil {
break
}
last = last + fmt.Sprintf(`<tr>
<td style="color: blue;">%s</td> <td style="color: blue;">%s</td>
<td style="color: blue;">%s</td> <td style="color: blue;">%s</td>
<td style="color: blue;">%s</td> <td style="color: blue;">%s</td>
@ -348,73 +359,90 @@ func (e *EWS) GetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
<td style="color: blue;">%s</td> <td style="color: blue;">%s</td>
<td style="color: blue;">%s</td> <td style="color: blue;">%s</td>
<td style="color: blue;">%s</td> <td style="color: blue;">%s</td>
</tr>`, </tr>%s`, ul.USN, ul.MAC, ul.IPAddr, ul.Relay, ul.Item, ul.Status, ul.Message, ul.LastChg, "\r\n")
ui.USN, ui.MAC, ui.IPAddr, ui.Relay, ui.Item, ui.Status, ui.Message, ui.LastChg)
partNO = ui.PartNO if ul.PartNO != "" {
mfgMO = ui.MfgMO partNO = ul.PartNO
mfgSKU = ui.MfgSKU }
fstAck = ui.FirstAck if ul.MfgMO != "" {
lstAck = ui.LastAck mfgMO = ul.MfgMO
}
if ul.MfgSKU != "" {
mfgSKU = ul.MfgSKU
}
if ul.FirstAck != "" {
fstAck = ul.FirstAck
}
if ul.LastAck != "" {
lstAck = ul.LastAck
}
} }
//Get Location Information //Get Location Information
loc, locTime := "", "" loc, locTime := "", ""
if last != "" { if last != "" {
qry := dbo.QueryRow(fmt.Sprintf(`SELECT CONCAT_WS('-',line,col,row,num) AS loc, update_time FROM locinfo WHERE mac='%s'`, ui.MAC)) qry := dbo.QueryRow(fmt.Sprintf(`SELECT CONCAT_WS('-',line,col,row,num) AS loc, update_time FROM locinfo WHERE mac='%s'`, ul.MAC))
qry.Scan(&loc, &locTime) qry.Scan(&loc, &locTime)
} }
//Get History Records //Get History Records
uh := new(UutInfo)
bkup := "" bkup := ""
rows, err := dbo.Query( prev, err := dbo.Query(
fmt.Sprintf(`SELECT usn,mac,ipaddr,relay,item,status,message,partno,mo,sku,line,stage,first_ack,last_ack,last_change,last_transfer fmt.Sprintf(`SELECT usn,mac,ipaddr,relay,item,status,message,partno,mo,sku,line,stage,first_ack,last_ack,last_change,last_transfer
FROM uutinfobkup FROM uutinfobkup
WHERE usn='%s' ORDER BY seqid ASC;`, params["USN"])) WHERE %s='%s'
if err == nil { ORDER BY usn ASC, seqid ASC;`, params["KEY"], params["VALUE"]))
for rows.Next() {
err := rows.Scan( if err != nil {
&ui.USN, logger.Printf("[ERR] %s; %s; %#v; %s\r\n", addr, uri, params, err.Error())
&ui.MAC, rst["RESULT"] = "NG"
&ui.IPAddr, rst["ErrMsg"] = e.SimpleMsgHTML("red", err.Error())
&ui.Relay, return rst
&ui.Item, }
&ui.Status, defer prev.Close()
&ui.Message,
&ui.PartNO, for prev.Next() {
&ui.MfgMO, err := prev.Scan(
&ui.MfgSKU, &uh.USN,
&ui.MfgLine, &uh.MAC,
&ui.MfgStage, &uh.IPAddr,
&ui.FirstAck, &uh.Relay,
&ui.LastAck, &uh.Item,
&ui.LastChg, &uh.Status,
&ui.LastTrn, &uh.Message,
) &uh.PartNO,
if err != nil { &uh.MfgMO,
break &uh.MfgSKU,
} &uh.MfgLine,
temp := fmt.Sprintf(`<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>%s`, &uh.MfgStage,
ui.USN, ui.MAC, ui.IPAddr, ui.Relay, ui.Item, ui.Status, ui.Message, ui.LastChg, "\r\n") &uh.FirstAck,
bkup = bkup + temp &uh.LastAck,
} &uh.LastChg,
&uh.LastTrn,
)
if err != nil {
break
}
bkup = bkup + fmt.Sprintf(`<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>%s`,
uh.USN, uh.MAC, uh.IPAddr, uh.Relay, uh.Item, uh.Status, uh.Message, uh.LastChg, "\r\n")
} }
defer rows.Close()
//Get Misc. Info //Get Misc. Info
if partNO == "" { if partNO == "" {
partNO = ui.PartNO partNO = uh.PartNO
} }
if mfgMO == "" { if mfgMO == "" {
mfgMO = ui.MfgMO mfgMO = uh.MfgMO
} }
if mfgSKU == "" { if mfgSKU == "" {
mfgSKU = ui.MfgSKU mfgSKU = uh.MfgSKU
} }
if fstAck == "" { if fstAck == "" {
fstAck = ui.FirstAck fstAck = uh.FirstAck
} }
if lstAck == "" { if lstAck == "" {
lstAck = ui.LastAck lstAck = uh.LastAck
} }
misc := "" misc := ""
@ -429,7 +457,7 @@ func (e *EWS) GetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
return rst return rst
} }
func (e *EWS) GetDefectUuts(cfg cnf.Cfg, logger *log.Logger, host string, addr string, uri string, params map[string]string) map[string]string { func (e *EWS) GetDefectReport(cfg cnf.Cfg, logger *log.Logger, host string, addr string, uri string, params map[string]string) map[string]string {
if cfg.Settings.LogRequest { if cfg.Settings.LogRequest {
logger.Printf("[MSG] %s; %s; Request: %#v\r\n", addr, uri, params) logger.Printf("[MSG] %s; %s; Request: %#v\r\n", addr, uri, params)
} }
@ -505,7 +533,7 @@ func (e *EWS) GetDefectUuts(cfg cnf.Cfg, logger *log.Logger, host string, addr s
return rst return rst
} }
func (e *EWS) GetOfflineUuts(cfg cnf.Cfg, logger *log.Logger, host string, addr string, uri string, params map[string]string) map[string]string { func (e *EWS) GetOfflineReport(cfg cnf.Cfg, logger *log.Logger, host string, addr string, uri string, params map[string]string) map[string]string {
if cfg.Settings.LogRequest { if cfg.Settings.LogRequest {
logger.Printf("[MSG] %s; %s; Request: %#v\r\n", addr, uri, params) logger.Printf("[MSG] %s; %s; Request: %#v\r\n", addr, uri, params)
} }
@ -601,13 +629,13 @@ func (e *EWS) TemplateUutInfo(loc, locTime, misc, last, bkup string) string {
loc = `<span style="color: red; font-size: 14px; font-family: Consolas;">Unknown</span>` loc = `<span style="color: red; font-size: 14px; font-family: Consolas;">Unknown</span>`
} }
if misc == "" { // if misc == "" {
misc = `<span style="color: red;">NO Records !</span>` // misc = `<span style="color: red;">NO Records !</span>`
} // }
if bkup == "" { // if bkup == "" {
bkup = `<span style="color: red;">NO Records !</span>` // bkup = `<span style="color: red;">NO Records !</span>`
} // }
resp := fmt.Sprintf(`<!DOCTYPE html> resp := fmt.Sprintf(`<!DOCTYPE html>
<html> <html>
@ -688,7 +716,7 @@ func (e *EWS) TemplateUutInfo(loc, locTime, misc, last, bkup string) string {
%s %s
</table> </table>
</body> </body>
</html>`, loc, locTime, misc, bkup, last) </html>`, loc, locTime, misc, last, bkup)
return resp return resp
} }