MCPcopy Create free account
hub / github.com/actiontech/dtle / ValidateJobV2

Function ValidateJobV2

api/handler/v2/validation.go:28–68  ·  view source on GitHub ↗

@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)

Source from the content-addressed store, hash-verified

26// @Success 200 {object} models.ValidateJobRespV2
27// @Router /v2/validation/job [post]
28func 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
70func apiJobConfigToNomadJobJson(apiJobConfig *models.ValidateJobReqV2) (resJson []byte, err error) {
71 nomadJob, err := convertJobToNomadJob(true, &models.CreateOrUpdateMysqlToMysqlJobParamV2{JobId: apiJobConfig.JobId, SrcTask: apiJobConfig.SrcTaskConfig, DestTask: apiJobConfig.DestTaskConfig})

Callers

nothing calls this directly

Calls 8

NewLoggerFunction · 0.92
BindAndValidateFunction · 0.92
BuildBaseRespFunction · 0.92
BuildUrlFunction · 0.92
InvokePostApiWithJsonFunction · 0.92
decryptMySQLPwdFunction · 0.85
validateTaskConfigFunction · 0.85

Tested by

no test coverage detected