/racs/getfaillist api support accept parameters as database query filters
This commit is contained in:
parent
802d301cb5
commit
df700fb872
16
APIServer.go
16
APIServer.go
@ -575,10 +575,24 @@ func handleRacsGetFailList(w http.ResponseWriter, r *http.Request) {
|
||||
if r.RequestURI == "/favicon.ico" {
|
||||
return
|
||||
}
|
||||
|
||||
var err error
|
||||
addr := strings.Split(r.RemoteAddr, ":")[0]
|
||||
uri := r.RequestURI
|
||||
rst := map[string]interface{}{"Result": "OK", "ErrMsg": ""}
|
||||
|
||||
params, err := parseReqParams(r)
|
||||
if err != nil {
|
||||
rst["Result"] = "NG"
|
||||
rst["ErrMsg"] = "racs.HandleGetFailList: " + err.Error()
|
||||
logger.Printf("[ERR] %s; %s; %#v; %s\r\n", r.RemoteAddr, r.RequestURI, params, rst["ErrMsg"])
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
fmt.Fprintf(w, "%v", strings.ReplaceAll(fmt.Sprintf("%#v", rst), "map[string]string", ""))
|
||||
return
|
||||
}
|
||||
|
||||
racs := new(racs.RACS)
|
||||
rst := racs.GetFailList(cfg, logger, addr, uri)
|
||||
rst = racs.GetFailList(cfg, logger, addr, uri, params)
|
||||
rpl := strings.NewReplacer(
|
||||
"map[string]string", "",
|
||||
"map[string]interface {}", "",
|
||||
|
@ -18,4 +18,5 @@ MySQL:
|
||||
OfflineView: v_offline
|
||||
StorageTable: racs
|
||||
GetFailListSQL: SELECT * FROM v_racs
|
||||
|
||||
GetFailListParams:
|
||||
- {"Param":"LINE", "Column":"Tab_Line"}
|
||||
|
@ -5,6 +5,11 @@ type Cfg struct {
|
||||
MySQL MySQL `yaml:"MySQL"`
|
||||
}
|
||||
|
||||
type Param2Column struct {
|
||||
Param string `yaml:"Param"`
|
||||
Column string `yaml:"Column"`
|
||||
}
|
||||
|
||||
type Settings struct {
|
||||
ListenPort string `yaml:"ListenPort"`
|
||||
HookScript string `yaml:"HookScript"`
|
||||
@ -26,4 +31,5 @@ type MySQL struct {
|
||||
OfflineView string `yaml:"OfflineView"`
|
||||
StorageTable string `yaml:"StorageTable"`
|
||||
GetFailListSQL string `yaml:"GetFailListSQL"`
|
||||
GetFailListParams []Param2Column `yaml:"GetFailListParams"`
|
||||
}
|
||||
|
30
racs/racs.go
30
racs/racs.go
@ -5,19 +5,12 @@ import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"log"
|
||||
"strings"
|
||||
|
||||
_ "github.com/go-sql-driver/mysql"
|
||||
)
|
||||
|
||||
type RACS struct{}
|
||||
type StorageInfo struct {
|
||||
USN string
|
||||
Storage string
|
||||
UpdateTime string
|
||||
Mark1 string
|
||||
Mark2 string
|
||||
Mark3 string
|
||||
}
|
||||
|
||||
func (r *RACS) Inbound(cfg cnf.Cfg, logger *log.Logger, addr string, uri string, params map[string]string) map[string]string {
|
||||
rst := map[string]string{"Result": "OK", "ErrMsg": ""}
|
||||
@ -105,7 +98,7 @@ func (r *RACS) Outbound(cfg cnf.Cfg, logger *log.Logger, addr string, uri string
|
||||
return rst
|
||||
}
|
||||
|
||||
func (r *RACS) GetFailList(cfg cnf.Cfg, logger *log.Logger, addr string, uri string) map[string]interface{} {
|
||||
func (r *RACS) GetFailList(cfg cnf.Cfg, logger *log.Logger, addr string, uri string, params map[string]string) map[string]interface{} {
|
||||
rst := map[string]interface{}{"Result": "OK", "ErrMsg": ""}
|
||||
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s",
|
||||
cfg.MySQL.User,
|
||||
@ -122,7 +115,26 @@ func (r *RACS) GetFailList(cfg cnf.Cfg, logger *log.Logger, addr string, uri str
|
||||
return rst
|
||||
}
|
||||
defer dbo.Close()
|
||||
|
||||
dml := cfg.MySQL.GetFailListSQL
|
||||
if len(params) > 0 {
|
||||
dml = dml + " WHERE "
|
||||
for k, v := range params {
|
||||
trans := false
|
||||
for _, p := range cfg.MySQL.GetFailListParams {
|
||||
if k == p.Param {
|
||||
dml = dml + fmt.Sprintf("%s='%s' AND ", p.Column, v)
|
||||
trans = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !trans {
|
||||
dml = dml + fmt.Sprintf("%s='%s' AND ", k, v)
|
||||
}
|
||||
}
|
||||
}
|
||||
dml = strings.TrimSuffix(dml, " AND ")
|
||||
|
||||
qry, err := dbo.Query(dml)
|
||||
if err != nil {
|
||||
rst["Result"] = "NG"
|
||||
|
Loading…
x
Reference in New Issue
Block a user