|
- package aisafety
-
- import (
- "crypto/md5"
- "encoding/hex"
- "encoding/json"
- "fmt"
- "net/url"
- "sort"
- "strings"
-
- "code.gitea.io/gitea/modules/log"
- "code.gitea.io/gitea/modules/setting"
-
- "github.com/go-resty/resty/v2"
- )
-
- var (
- restyClient *resty.Client
- HOST string
- KEY string
- )
-
- type TaskReq struct {
- UnionId string //评测任务ID,唯一标识,由后端生成UUID
- EvalName string //评测任务名称
- EvalContent string //评测任务描述
- TLPath string //
- Indicators []string //评测指标,由GetAlgorithmList接口返回的指标列表中的title属性值
- CDPath string
- CDName string //对抗数据集名称
- BDPath string
- BDName string //原数据集名称
- }
-
- type ReturnMsg struct {
- Code string `json:"code"`
- Msg string `json:"msg"`
- Data ReturnData `json:"data"`
- Times int64 `json:"times"`
- }
-
- type ReturnData struct {
- ID int `json:"id"`
- No string `json:"no"`
- StandardJson string `json:"standardJson"`
- Code int `json:"code"`
- Msg string `json:"msg"`
- Status int `json:"status"`
- }
-
- const (
- APPID = "1"
- LogPageSize = 500
- LogPageTokenExpired = "5m"
- pageSize = 15
- Success = "S000"
- )
-
- func getRestyClient() *resty.Client {
- if restyClient == nil {
- restyClient = resty.New()
- }
- return restyClient
- }
-
- func checkSetting() {
- if len(HOST) != 0 && len(KEY) != 0 {
- return
- }
- _ = loginCloudbrain()
- }
-
- func loginCloudbrain() error {
- HOST = setting.ModelSafetyTest.HOST
- KEY = setting.ModelSafetyTest.KEY
- return nil
- }
-
- func createSign(params map[string]interface{}, signKey string) string {
- var sceneList []string
- for k := range params {
- sceneList = append(sceneList, k)
- }
- sort.Strings(sceneList)
- re := ""
- for _, key := range sceneList {
- if params[key] != nil {
- re += key + "=" + fmt.Sprint(params[key]) + "&"
- }
- }
- re += "key=" + signKey
- log.Info("sign key:" + re)
- h := md5.New()
- h.Write([]byte(re))
- return strings.ToUpper(hex.EncodeToString(h.Sum(nil)))
- }
-
- func getParams(req TaskReq) (map[string]interface{}, string) {
- params := make(map[string]interface{})
- reStr := ""
-
- params["unionId"] = req.UnionId
- reStr += "unionId=" + req.UnionId
- params["evalName"] = req.EvalName
- reStr += "&evalName=" + req.EvalName
- params["evalContent"] = req.EvalContent
- reStr += "&evalContent=" + url.QueryEscape(req.EvalContent)
- params["TLPath"] = req.TLPath
- reStr += "&TLPath=" + url.QueryEscape(req.TLPath)
-
- params["CDName"] = req.CDName
- reStr += "&CDName=" + url.QueryEscape(req.CDName)
-
- params["BDName"] = req.BDName
- reStr += "&BDName=" + url.QueryEscape(req.BDName)
-
- if req.CDPath != "" {
- params["CDPath"] = req.CDPath
- reStr += "&CDPath=" + url.QueryEscape(req.CDPath)
- }
- if req.BDPath != "" {
- params["BDPath"] = req.BDPath
- reStr += "&BDPath=" + url.QueryEscape(req.BDPath)
- }
- indicators := ""
- if len(req.Indicators) > 0 {
- for _, tmp := range req.Indicators {
- indicators += tmp + "|"
- }
- }
- if len(indicators) > 0 {
- indicators = indicators[0 : len(indicators)-1]
- }
-
- params["Indicators"] = indicators
- log.Info("indicators=" + indicators)
- reStr += "&Indicators=" + url.QueryEscape(indicators)
-
- return params, reStr
- }
-
- func CreateSafetyTask(req TaskReq, jsonstr string) (string, error) {
- checkSetting()
- client := getRestyClient()
-
- //reqPara, _ := json.Marshal(body)
- //log.Warn("job req:", jsonstr)
-
- params, urlQuerys := getParams(req)
-
- bodyMap := make(map[string]interface{})
- //reJsonMap := make(map[string]interface{})
- bodyMap["resJson"] = jsonstr
- //bodyMap["externalEvalParam"] = reJsonMap
-
- //reqPara, _ := json.Marshal(bodyMap)
- //log.Warn("job req json:", string(reqPara))
-
- res, err := client.R().
- SetHeader("Content-Type", "application/json").
- SetHeader("appId", APPID).
- SetHeader("sign", createSign(params, KEY)).
- //SetAuthToken(TOKEN).
- SetBody(bodyMap).
- Post(HOST + "/v1/external/eval-standard/create?" + urlQuerys)
- log.Info("url=" + HOST + "/v1/external/eval-standard/create?" + urlQuerys)
-
- responseStr := string(res.Body())
- log.Info("CreateSafetyTask responseStr=" + responseStr + " res code=" + fmt.Sprint(res.StatusCode()))
-
- if err != nil {
- return "", fmt.Errorf("resty create job: %s", err)
- } else {
- log.Info("result string=" + " res code=" + fmt.Sprint(res.StatusCode()))
- }
-
- reMap := make(map[string]interface{})
-
- err = json.Unmarshal(res.Body(), &reMap)
- if err == nil && reMap["code"] == "0" {
- dataMap := (reMap["data"]).(map[string]interface{})
- return fmt.Sprint(dataMap["serialNo"]), nil
- }
- return "", nil
- }
-
- func GetAlgorithmList() (map[string]interface{}, error) {
- checkSetting()
- client := getRestyClient()
- params := make(map[string]interface{})
-
- jsonResult := make(map[string]interface{})
- sign := createSign(params, KEY)
-
- res, err := client.R().
- SetHeader("Content-Type", "application/json").
- SetHeader("appId", APPID).
- SetHeader("sign", sign).
- Get(HOST + "/v1/external/eval-standard/algorithmList")
-
- log.Info("url=" + HOST + "/v1/external/eval-standard/algorithmList" + " sign=" + sign + " appId=" + APPID)
-
- jsonerr := json.Unmarshal(res.Body(), &jsonResult)
- if jsonerr == nil {
- log.Info("jsonResult code=" + fmt.Sprint(jsonResult["msg"]))
- }
- responseStr := string(res.Body())
- log.Info("GetAlgorithmList responseStr=" + responseStr + " res code=" + fmt.Sprint(res.StatusCode()))
-
- if err != nil {
- log.Info("error =" + err.Error())
- return nil, fmt.Errorf("resty GetJob: %v", err)
- } else {
- reMap := make(map[string]interface{})
- err = json.Unmarshal(res.Body(), &reMap)
- if err == nil && reMap["code"] == "0" {
- return reMap, nil
- } else {
- return nil, fmt.Errorf("get error,code not 0")
- }
- }
-
- }
-
- func GetTaskStatus(jobID string) (*ReturnMsg, error) {
- checkSetting()
- client := getRestyClient()
- var reMap ReturnMsg
- params := make(map[string]interface{})
- params["serialNo"] = jobID
-
- res, err := client.R().
- SetHeader("Content-Type", "application/json").
- SetHeader("appId", APPID).
- SetHeader("sign", createSign(params, KEY)).
- SetResult(&reMap).
- Get(HOST + "/v1/external/eval-standard/query?serialNo=" + jobID)
-
- log.Info("url=" + HOST + "/v1/external/eval-standard/query?serialNo=" + jobID)
- responseStr := string(res.Body())
- log.Info("GetTaskStatus responseStr=" + responseStr + " res code=" + fmt.Sprint(res.StatusCode()))
-
- if err != nil {
- log.Info("error =" + err.Error())
- return nil, fmt.Errorf("Get task status error: %v", err)
- } else {
- return &reMap, nil
- }
- }
|