/racs/getfaillist api support accept parameters as database query filters

This commit is contained in:
r0n1n7an 2024-11-27 16:06:03 +08:00
parent 802d301cb5
commit df700fb872
4 changed files with 54 additions and 21 deletions

View File

@ -575,10 +575,24 @@ func handleRacsGetFailList(w http.ResponseWriter, r *http.Request) {
if r.RequestURI == "/favicon.ico" { if r.RequestURI == "/favicon.ico" {
return return
} }
var err error
addr := strings.Split(r.RemoteAddr, ":")[0] addr := strings.Split(r.RemoteAddr, ":")[0]
uri := r.RequestURI 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) racs := new(racs.RACS)
rst := racs.GetFailList(cfg, logger, addr, uri) rst = racs.GetFailList(cfg, logger, addr, uri, params)
rpl := strings.NewReplacer( rpl := strings.NewReplacer(
"map[string]string", "", "map[string]string", "",
"map[string]interface {}", "", "map[string]interface {}", "",

View File

@ -18,4 +18,5 @@ MySQL:
OfflineView: v_offline OfflineView: v_offline
StorageTable: racs StorageTable: racs
GetFailListSQL: SELECT * FROM v_racs GetFailListSQL: SELECT * FROM v_racs
GetFailListParams:
- {"Param":"LINE", "Column":"Tab_Line"}

View File

@ -5,6 +5,11 @@ type Cfg struct {
MySQL MySQL `yaml:"MySQL"` MySQL MySQL `yaml:"MySQL"`
} }
type Param2Column struct {
Param string `yaml:"Param"`
Column string `yaml:"Column"`
}
type Settings struct { type Settings struct {
ListenPort string `yaml:"ListenPort"` ListenPort string `yaml:"ListenPort"`
HookScript string `yaml:"HookScript"` HookScript string `yaml:"HookScript"`
@ -16,14 +21,15 @@ type Settings struct {
} }
type MySQL struct { type MySQL struct {
Server string `yaml:"Server"` Server string `yaml:"Server"`
Port string `yaml:"Port"` Port string `yaml:"Port"`
Database string `yaml:"Database"` Database string `yaml:"Database"`
User string `yaml:"User"` User string `yaml:"User"`
Password string `yaml:"Password"` Password string `yaml:"Password"`
IssuesTable string `yaml:"IssuesTable"` IssuesTable string `yaml:"IssuesTable"`
IssuesView string `yaml:"IssuesView"` IssuesView string `yaml:"IssuesView"`
OfflineView string `yaml:"OfflineView"` OfflineView string `yaml:"OfflineView"`
StorageTable string `yaml:"StorageTable"` StorageTable string `yaml:"StorageTable"`
GetFailListSQL string `yaml:"GetFailListSQL"` GetFailListSQL string `yaml:"GetFailListSQL"`
GetFailListParams []Param2Column `yaml:"GetFailListParams"`
} }

View File

@ -5,19 +5,12 @@ import (
"database/sql" "database/sql"
"fmt" "fmt"
"log" "log"
"strings"
_ "github.com/go-sql-driver/mysql" _ "github.com/go-sql-driver/mysql"
) )
type RACS struct{} 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 { 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": ""} 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 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": ""} rst := map[string]interface{}{"Result": "OK", "ErrMsg": ""}
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s",
cfg.MySQL.User, cfg.MySQL.User,
@ -122,7 +115,26 @@ func (r *RACS) GetFailList(cfg cnf.Cfg, logger *log.Logger, addr string, uri str
return rst return rst
} }
defer dbo.Close() defer dbo.Close()
dml := cfg.MySQL.GetFailListSQL 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) qry, err := dbo.Query(dml)
if err != nil { if err != nil {
rst["Result"] = "NG" rst["Result"] = "NG"