package racs import ( "APIServer/cnf" "database/sql" "encoding/json" "fmt" "log" _ "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": ""} dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", cfg.MySQL.User, cfg.MySQL.Password, cfg.MySQL.Server, cfg.MySQL.Port, cfg.MySQL.Database, ) dbo, err := sql.Open("mysql", dsn) if err != nil { rst["Result"] = "NG" rst["ErrMsg"] = "racs.Inbound: " + err.Error() logger.Printf("[ERR] %s; %s; %#v; %s\r\n", addr, uri, params, rst["ErrMsg"]) return rst } defer dbo.Close() dml := fmt.Sprintf(`INSERT INTO %s (usn,storage,update_time,mark1,mark2,mark3) VALUES ('%s','%s',%s,'%s','%s','%s') ON DUPLICATE KEY UPDATE storage = VALUES(storage), update_time = NOW(), mark1 = VALUES(mark1), mark2 = VALUES(mark2), mark3 = VALUES(mark3);`, cfg.MySQL.StorageTable, params["USN"], "Inbound", "NOW()", params["MARK1"], params["MARK2"], params["MARK3"], ) _, err = dbo.Exec(dml) if err != nil { rst["Result"] = "NG" rst["ErrMsg"] = "racs.Inbound: " + err.Error() logger.Printf("[ERR] %s; %s; %#v; %s\r\n", addr, uri, params, rst["ErrMsg"]) return rst } return rst } func (r *RACS) Outbound(cfg cnf.Cfg, logger *log.Logger, addr string, uri string, params map[string]string) map[string]string { rst := map[string]string{"Result": "OK", "ErrMsg": ""} dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", cfg.MySQL.User, cfg.MySQL.Password, cfg.MySQL.Server, cfg.MySQL.Port, cfg.MySQL.Database, ) dbo, err := sql.Open("mysql", dsn) if err != nil { rst["Result"] = "NG" rst["ErrMsg"] = "racs.Outbound: " + err.Error() logger.Printf("[ERR] %s; %s; %#v; %s\r\n", addr, uri, params, rst["ErrMsg"]) return rst } defer dbo.Close() dml := fmt.Sprintf(`INSERT INTO %s (usn,storage,update_time,mark1,mark2,mark3) VALUES ('%s','%s',%s,'%s','%s','%s') ON DUPLICATE KEY UPDATE storage = VALUES(storage), update_time = NOW(), mark1 = VALUES(mark1), mark2 = VALUES(mark2), mark3 = VALUES(mark3);`, cfg.MySQL.StorageTable, params["USN"], "Outbound", "NOW()", params["MARK1"], params["MARK2"], params["MARK3"], ) _, err = dbo.Exec(dml) if err != nil { rst["Result"] = "NG" rst["ErrMsg"] = "racs.Outbound: " + err.Error() logger.Printf("[ERR] %s; %s; %#v; %s\r\n", addr, uri, params, rst["ErrMsg"]) return rst } return rst } func (r *RACS) GetFailList(cfg cnf.Cfg, logger *log.Logger, addr string, uri string) interface{} { rst := map[string]interface{}{"Result": "OK", "ErrMsg": ""} dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", cfg.MySQL.User, cfg.MySQL.Password, cfg.MySQL.Server, cfg.MySQL.Port, cfg.MySQL.Database, ) dbo, err := sql.Open("mysql", dsn) if err != nil { rst["Result"] = "NG" rst["ErrMsg"] = "racs.GetFailList: " + err.Error() logger.Printf("[ERR] %s; %s; %s\r\n", addr, uri, rst["ErrMsg"]) return rst } defer dbo.Close() dml := cfg.MySQL.GetFailListSQL qry, err := dbo.Query(dml) if err != nil { rst["Result"] = "NG" rst["ErrMsg"] = "racs.GetFailList: " + err.Error() logger.Printf("[ERR] %s; %s; %s\r\n", addr, uri, rst["ErrMsg"]) return rst } cols, err := qry.Columns() if err != nil { rst["Result"] = "NG" rst["ErrMsg"] = "racs.GetFailList: " + err.Error() logger.Printf("[ERR] %s; %s; %s\r\n", addr, uri, rst["ErrMsg"]) return rst } vals := make([][]byte, len(cols)) scans := make([]interface{}, len(cols)) for v := range vals { scans[v] = &vals[v] } list := make([]map[string]string, 0) for qry.Next() { if err := qry.Scan(scans...); err != nil { rst["Result"] = "NG" rst["ErrMsg"] = "racs.GetFailList: " + err.Error() logger.Printf("[ERR] %s; %s; %s\r\n", addr, uri, rst["ErrMsg"]) return rst } row := make(map[string]string) for k, v := range vals { key := cols[k] row[key] = string(v) } list = append(list, row) } rst["List"] = list jsonData, err := json.Marshal(rst) if err != nil { rst["Result"] = "NG" rst["ErrMsg"] = "racs.GetFailList: " + err.Error() logger.Printf("[ERR] %s; %s; %s\r\n", addr, uri, rst["ErrMsg"]) return rst } return jsonData }