@Id ValidateJobV2 @Description validate job config. @Tags validation @Accept application/json @Security ApiKeyAuth @Param job_config body models.ValidateJobReqV2 true "validate job config" @Success 200 {object} models.ValidateJobRespV2 @Router /v2/validation/job [post]
(c echo.Context)
| 26 | // @Success 200 {object} models.ValidateJobRespV2 |
| 27 | // @Router /v2/validation/job [post] |
| 28 | func ValidateJobV2(c echo.Context) error { |
| 29 | logger := handler.NewLogger().Named("ValidateJobV2") |
| 30 | reqParam := new(models.ValidateJobReqV2) |
| 31 | if err := handler.BindAndValidate(logger, c, reqParam); err != nil { |
| 32 | return c.JSON(http.StatusInternalServerError, models.BuildBaseResp(err)) |
| 33 | } |
| 34 | |
| 35 | reqJson, err := apiJobConfigToNomadJobJson(reqParam) |
| 36 | if nil != err { |
| 37 | return c.JSON(http.StatusInternalServerError, models.BuildBaseResp(fmt.Errorf("convert param failed: %v", err))) |
| 38 | } |
| 39 | |
| 40 | url := handler.BuildUrl("/v1/validate/job") |
| 41 | logger.Info("invoke nomad api begin", "url", url) |
| 42 | nomadValidateResp := nomadApi.JobValidateResponse{} |
| 43 | if err := handler.InvokePostApiWithJson(url, reqJson, &nomadValidateResp); nil != err { |
| 44 | return c.JSON(http.StatusInternalServerError, models.BuildBaseResp(fmt.Errorf("invoke nomad api %v failed: %v", url, err))) |
| 45 | } |
| 46 | logger.Info("invoke nomad api finished") |
| 47 | logger.Info("validate task config") |
| 48 | // decrypt mysql password |
| 49 | if reqParam.IsPasswordEncrypted { |
| 50 | err := decryptMySQLPwd(reqParam.SrcTaskConfig, reqParam.DestTaskConfig) |
| 51 | if nil != err { |
| 52 | return c.JSON(http.StatusInternalServerError, models.BuildBaseResp(err)) |
| 53 | } |
| 54 | } |
| 55 | |
| 56 | validationTasks, err := validateTaskConfig(reqParam.SrcTaskConfig, reqParam.DestTaskConfig) |
| 57 | if nil != err { |
| 58 | return c.JSON(http.StatusInternalServerError, models.BuildBaseResp(fmt.Errorf("validate task config failed: %v", err))) |
| 59 | } |
| 60 | |
| 61 | return c.JSON(http.StatusOK, &models.ValidateJobRespV2{ |
| 62 | DriverConfigValidated: nomadValidateResp.DriverConfigValidated, |
| 63 | MysqlValidationTasks: validationTasks, |
| 64 | JobValidationError: nomadValidateResp.Error, |
| 65 | JobValidationWarning: nomadValidateResp.Warnings, |
| 66 | BaseResp: models.BuildBaseResp(nil), |
| 67 | }) |
| 68 | } |
| 69 | |
| 70 | func apiJobConfigToNomadJobJson(apiJobConfig *models.ValidateJobReqV2) (resJson []byte, err error) { |
| 71 | nomadJob, err := convertJobToNomadJob(true, &models.CreateOrUpdateMysqlToMysqlJobParamV2{JobId: apiJobConfig.JobId, SrcTask: apiJobConfig.SrcTaskConfig, DestTask: apiJobConfig.DestTaskConfig}) |
nothing calls this directly
no test coverage detected