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("/setuutinfo/", handleSetUutInfo)
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)
err := http.ListenAndServe(":"+cfg.Settings.ListenPort, nil)
if err != nil {
@ -399,84 +397,29 @@ func handleGetUutInfo(w http.ResponseWriter, r *http.Request) {
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])
}
params, err := parseReqParams(r)
if err != nil {
logger.Printf("[ERR] %s; %s; %#v; %s\r\n", r.RemoteAddr, r.RequestURI, params, rst["ErrMsg"])
rst["RESULT"] = "NG"
rst["ErrMsg"] = err.Error()
w.WriteHeader(http.StatusBadRequest)
fmt.Fprintf(w, "%v", strings.ReplaceAll(fmt.Sprintf("%#v", rst), "map[string]string", ""))
return
}
ews := new(ews.EWS)
switch params["ACTION"] {
case "QueryByFilter":
rst = ews.GetUutInfo(cfg, logger, host, addr, uri, params)
case "GetDefectReport":
rst = ews.GetDefectReport(cfg, logger, host, addr, uri, params)
case "GetOfflineReport":
rst = ews.GetOfflineReport(cfg, logger, host, addr, uri, params)
default:
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["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.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) {
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["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" {
w.WriteHeader(http.StatusInternalServerError)
} else {

View File

@ -6,7 +6,7 @@
<title>API Server</title>
<style type="text/css">
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;}
input {width: 200px; height: 20px; font-family: monospace; font-size: 14px;}
select {width: 150px; height: 25px; font-size: 14px;}
@ -22,24 +22,31 @@
</head>
<body leftmargin="10px" >
<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">
<ul>
<li>
<label>USN: </label>
<input type="text" name="USN" id="USN" />
&nbsp;
<input type="submit" name="Query" value="Query" style="width:75px; height:25px;" />
<!--input type="submit" style="width:75px; height:25px;" /-->
<!--label for="ACTION">查询类型: </label>&nbsp;-->
<select name="ACTION" id="ACTION">
<!--option value="" selected="true">* 选择查询类型 *</option-->
<option value="QueryByFilter" selected="true">条件查询</option>
<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>
</ul>
</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": ""}
if params["USN"] == "" {
if params["KEY"] == "" || params["VALUE"] == "" {
logger.Printf("[ERR] %s; %s; %#v; %s\r\n", addr, uri, params, "Invalid Parameters !")
rst["RESULT"] = "NG"
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
}
ui := new(UutInfo)
ul := new(UutInfo)
partNO := ""
mfgMO := ""
mfgSKU := ""
@ -314,107 +314,135 @@ func (e *EWS) GetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
//Get Last Record
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
FROM uutinfo
WHERE usn='%s';`, params["USN"]))
WHERE %s='%s'
ORDER BY usn ASC, seqid ASC;`, params["KEY"], params["VALUE"]))
err = row.Scan(
&ui.USN,
&ui.MAC,
&ui.IPAddr,
&ui.Relay,
&ui.Item,
&ui.Status,
&ui.Message,
&ui.PartNO,
&ui.MfgMO,
&ui.MfgSKU,
&ui.MfgLine,
&ui.MfgStage,
&ui.FirstAck,
&ui.LastAck,
&ui.LastChg,
&ui.LastTrn,
if err != nil {
logger.Printf("[ERR] %s; %s; %#v; %s\r\n", addr, uri, params, err.Error())
rst["RESULT"] = "NG"
rst["ErrMsg"] = e.SimpleMsgHTML("red", err.Error())
return rst
}
defer curr.Close()
for curr.Next() {
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>
<td style="color: blue;">%s</td>
<td style="color: blue;">%s</td>
</tr>%s`, ul.USN, ul.MAC, ul.IPAddr, ul.Relay, ul.Item, ul.Status, ul.Message, ul.LastChg, "\r\n")
if err == nil {
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>
<td style="color: blue;">%s</td>
<td style="color: blue;">%s</td>
</tr>`,
ui.USN, ui.MAC, ui.IPAddr, ui.Relay, ui.Item, ui.Status, ui.Message, ui.LastChg)
partNO = ui.PartNO
mfgMO = ui.MfgMO
mfgSKU = ui.MfgSKU
fstAck = ui.FirstAck
lstAck = ui.LastAck
if ul.PartNO != "" {
partNO = ul.PartNO
}
if ul.MfgMO != "" {
mfgMO = ul.MfgMO
}
if ul.MfgSKU != "" {
mfgSKU = ul.MfgSKU
}
if ul.FirstAck != "" {
fstAck = ul.FirstAck
}
if ul.LastAck != "" {
lstAck = ul.LastAck
}
}
//Get Location Information
loc, locTime := "", ""
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)
}
//Get History Records
uh := new(UutInfo)
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
FROM uutinfobkup
WHERE usn='%s' ORDER BY seqid ASC;`, params["USN"]))
if err == nil {
for rows.Next() {
err := rows.Scan(
&ui.USN,
&ui.MAC,
&ui.IPAddr,
&ui.Relay,
&ui.Item,
&ui.Status,
&ui.Message,
&ui.PartNO,
&ui.MfgMO,
&ui.MfgSKU,
&ui.MfgLine,
&ui.MfgStage,
&ui.FirstAck,
&ui.LastAck,
&ui.LastChg,
&ui.LastTrn,
WHERE %s='%s'
ORDER BY usn ASC, seqid ASC;`, params["KEY"], params["VALUE"]))
if err != nil {
logger.Printf("[ERR] %s; %s; %#v; %s\r\n", addr, uri, params, err.Error())
rst["RESULT"] = "NG"
rst["ErrMsg"] = e.SimpleMsgHTML("red", err.Error())
return rst
}
defer prev.Close()
for prev.Next() {
err := prev.Scan(
&uh.USN,
&uh.MAC,
&uh.IPAddr,
&uh.Relay,
&uh.Item,
&uh.Status,
&uh.Message,
&uh.PartNO,
&uh.MfgMO,
&uh.MfgSKU,
&uh.MfgLine,
&uh.MfgStage,
&uh.FirstAck,
&uh.LastAck,
&uh.LastChg,
&uh.LastTrn,
)
if err != nil {
break
}
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`,
ui.USN, ui.MAC, ui.IPAddr, ui.Relay, ui.Item, ui.Status, ui.Message, ui.LastChg, "\r\n")
bkup = bkup + temp
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
if partNO == "" {
partNO = ui.PartNO
partNO = uh.PartNO
}
if mfgMO == "" {
mfgMO = ui.MfgMO
mfgMO = uh.MfgMO
}
if mfgSKU == "" {
mfgSKU = ui.MfgSKU
mfgSKU = uh.MfgSKU
}
if fstAck == "" {
fstAck = ui.FirstAck
fstAck = uh.FirstAck
}
if lstAck == "" {
lstAck = ui.LastAck
lstAck = uh.LastAck
}
misc := ""
@ -429,7 +457,7 @@ func (e *EWS) GetUutInfo(cfg cnf.Cfg, logger *log.Logger, host string, addr stri
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 {
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
}
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 {
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>`
}
if misc == "" {
misc = `<span style="color: red;">NO Records !</span>`
}
// if misc == "" {
// misc = `<span style="color: red;">NO Records !</span>`
// }
if bkup == "" {
bkup = `<span style="color: red;">NO Records !</span>`
}
// if bkup == "" {
// bkup = `<span style="color: red;">NO Records !</span>`
// }
resp := fmt.Sprintf(`<!DOCTYPE html>
<html>
@ -688,7 +716,7 @@ func (e *EWS) TemplateUutInfo(loc, locTime, misc, last, bkup string) string {
%s
</table>
</body>
</html>`, loc, locTime, misc, bkup, last)
</html>`, loc, locTime, misc, last, bkup)
return resp
}