Răsfoiți Sursa

同花顺指标API刷新埋点

xyxie 1 săptămână în urmă
părinte
comite
edc7ffc52e

+ 14 - 3
controllers/base_from_ths.go

@@ -43,7 +43,7 @@ func (this *ThsController) Add() {
 	cacheKey = utils.CACHE_EDB_DATA_ADD + strconv.Itoa(source) + "_" + req.EdbCode
 	if !utils.Rc.IsExist(cacheKey) {
 		utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
-		dataItem, err := services.GetEdbDataFromThs(req.EdbCode, utils.BASE_START_DATE, utils.BASE_END_DATE, "")
+		dataItem, _, err := services.GetEdbDataFromThs(req.EdbCode, utils.BASE_START_DATE, utils.BASE_END_DATE, "")
 		if err != nil {
 			br.Msg = "获取指标信息失败!"
 			br.ErrMsg = "获取指标信息失败 GetEdbDataFromThs,Err:" + err.Error()
@@ -111,16 +111,27 @@ func (this *ThsController) Refresh() {
 	}
 
 	utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
+	var hasUpdate bool
+	var updateResult bool
+	var realApiErrMsg string
+	var dataItem models.EdbDataFromThs
 	defer func() {
 		utils.Rc.Delete(cacheKey)
+		var updateFailedReason string
+		if err == nil {
+			updateResult = true
+		} else {
+			updateFailedReason = err.Error()
+		}
+		_ = services.EdbDataUpdateRecord(edbInfo.EdbInfoId, hasUpdate, updateResult, updateFailedReason, realApiErrMsg)
 	}()
-	dataItem, err := services.GetEdbDataFromThs(req.EdbCode, utils.GetEdbRefreshStartDate(req.StartDate), utils.BASE_END_DATE, edbInfo.TerminalCode)
+	dataItem, realApiErrMsg, err = services.GetEdbDataFromThs(req.EdbCode, utils.GetEdbRefreshStartDate(req.StartDate), utils.BASE_END_DATE, edbInfo.TerminalCode)
 	if err != nil {
 		br.Msg = "获取指标信息失败!"
 		br.ErrMsg = "获取指标信息失败 GetEdbDataFromThs,Err:" + err.Error()
 		return
 	}
-	err = models.RefreshEdbDataFromThs(req.EdbInfoId, req.EdbCode, utils.GetEdbRefreshStartDate(req.StartDate), dataItem)
+	hasUpdate, err = models.RefreshEdbDataFromThs(req.EdbInfoId, req.EdbCode, utils.GetEdbRefreshStartDate(req.StartDate), dataItem)
 	if err != nil && !utils.IsErrNoRow(err) {
 		br.Msg = "刷新指标信息失败!"
 		br.ErrMsg = "刷新指标信息失败 RefreshEdbDataFromThs,Err:" + err.Error()

+ 7 - 5
models/base_from_ths.go

@@ -63,7 +63,7 @@ func AddEdbDataFromThs(edbCode string, item EdbDataFromThs) (err error) {
 }
 
 // 刷新同花顺指标数据
-func RefreshEdbDataFromThs(edbInfoId int, edbCode, startDate string, item EdbDataFromThs) (err error) {
+func RefreshEdbDataFromThs(edbInfoId int, edbCode, startDate string, item EdbDataFromThs) (hasUpdate bool, err error) {
 	//o := orm.NewOrm()
 	source := utils.DATA_SOURCE_THS
 	subSource := utils.DATA_SUB_SOURCE_EDB
@@ -95,7 +95,7 @@ func RefreshEdbDataFromThs(edbInfoId int, edbCode, startDate string, item EdbDat
 
 		existList, err := GetEdbDataByCondition(source, subSource, condition, pars)
 		if err != nil {
-			return err
+			return false, err
 		}
 
 		existMap := make(map[string]*EdbInfoSearchData)
@@ -117,7 +117,7 @@ func RefreshEdbDataFromThs(edbInfoId int, edbCode, startDate string, item EdbDat
 
 			dataTime, err := time.ParseInLocation(utils.FormatDate, eDate, time.Local)
 			if err != nil {
-				return err
+				return false, err
 			}
 			if findItem, ok := existMap[eDate]; !ok {
 				if _, addOk := addMap[eDate]; !addOk {
@@ -131,8 +131,9 @@ func RefreshEdbDataFromThs(edbInfoId int, edbCode, startDate string, item EdbDat
 				if findItem != nil && utils.SubFloatToString(findItem.Value, 30) != utils.SubFloatToString(sValue, 30) {
 					err = ModifyEdbDataById(source, subSource, findItem.EdbDataId, sValueStr)
 					if err != nil {
-						return err
+						return false, err
 					}
+					hasUpdate = true
 				}
 			}
 
@@ -155,8 +156,9 @@ func RefreshEdbDataFromThs(edbInfoId int, edbCode, startDate string, item EdbDat
 			//_, err = o.Raw(addSql).Exec()
 			err = global.DEFAULT_DB.Exec(addSql).Error
 			if err != nil {
-				return err
+				return false, err
 			}
+			hasUpdate = true
 		}
 	}
 	return

+ 5 - 4
services/base_from_ths.go

@@ -25,7 +25,7 @@ type EdbDataFromThsInterface struct {
 	} `json:"tables"`
 }
 
-func GetEdbDataFromThs(edbCode, startDate, endDate, edbTerminalCode string) (item models.EdbDataFromThs, err error) {
+func GetEdbDataFromThs(edbCode, startDate, endDate, edbTerminalCode string) (item models.EdbDataFromThs, apiErrMsg string, err error) {
 	terminal, err := GetTerminal(utils.DATA_SOURCE_THS, edbTerminalCode)
 	if err != nil {
 		err = fmt.Errorf("获取同花顺接口配置出错 Err: %s", err)
@@ -49,10 +49,11 @@ func GetEdbDataFromThs(edbCode, startDate, endDate, edbTerminalCode string) (ite
 		if err != nil {
 			return
 		}
-		return getEdbDataFromThsHttp(edbCode, startDate, endDate, terminal.Value, token)
+		item, apiErrMsg, err = getEdbDataFromThsHttp(edbCode, startDate, endDate, terminal.Value, token)
+		return
 	}
-
-	return getEdbDataFromThsApp(edbCode, startDate, endDate, 0, terminal.ServerUrl)
+	item, err = getEdbDataFromThsApp(edbCode, startDate, endDate, 0, terminal.ServerUrl)
+	return
 }
 
 // getEdbDataFromThs 获取同花顺接口数据

+ 4 - 1
services/base_from_ths_http.go

@@ -19,7 +19,7 @@ import (
 var tokenRedisKey = `THS_SERVER_ACCESS_TOKEN`
 
 // getEdbDataFromThsHttp 通过url获取同花顺的普通数据
-func getEdbDataFromThsHttp(edbCode, startDate, endDate, thsRefreshToken, token string) (item models.EdbDataFromThs, err error) {
+func getEdbDataFromThsHttp(edbCode, startDate, endDate, thsRefreshToken, token string) (item models.EdbDataFromThs, apiErrMsg string, err error) {
 	thsUrl := `https://quantapi.51ifind.com/api/v1/edb_service`
 	//indicators 是 半角逗号分隔的所有指标,宏观指标过多,推荐使用Windows超级命令生成。 "indicators":"M001620326,M002822183"
 	//functionpara 否 key-value格式,省略时不进行更新时间筛选。两个时间控件更新起始时间(startrtime)和更新结束时间(endrtime),不勾选时省略见下方代码块
@@ -34,6 +34,8 @@ func getEdbDataFromThsHttp(edbCode, startDate, endDate, thsRefreshToken, token s
 
 	body, err, _ := postCurl(thsUrl, dataMap, 0, thsRefreshToken, token)
 	if err != nil {
+		// 返回接口报错的实际原因
+		apiErrMsg = err.Error()
 		return
 	}
 
@@ -45,6 +47,7 @@ func getEdbDataFromThsHttp(edbCode, startDate, endDate, thsRefreshToken, token s
 	}
 	if tmpItems.Errorcode != 0 {
 		err = errors.New(tmpItems.Errmsg)
+		apiErrMsg = fmt.Sprintf("%d:%s", tmpItems.Errorcode, tmpItems.Errmsg)
 		return
 	}
 	// 因为table里面的value有的时候返回的是string,有的是float64,所以需要用interface来反射取值

+ 38 - 0
services/edb_info_stat.go

@@ -420,3 +420,41 @@ func SetEdbSourceStat(needStat bool) (err error) {
 	}
 	return
 }
+
+// 根据标识判断指标数据是否更新成功
+func EdbDataUpdateRecord(edbInfoId int, hasUpdate bool, updateResult bool, updateFailedReason string, updateRealReason string) (err error) {
+	defer func() {
+		if err != nil {
+			tips := fmt.Sprintf("ETA指标刷新统计异常, 指标ID: %d, err: %s", edbInfoId, err.Error())
+			alarm_msg.SendAlarmMsg(tips, 3)
+		}
+	}()
+	dataUpdateResult := 2
+	dataUpdateFailedReason := "服务异常"
+	if !updateResult {
+		if updateRealReason != "" {
+			dataUpdateFailedReason = updateRealReason
+		}
+		err = AddEdbInfoUpdateLog(edbInfoId, 2, updateFailedReason, dataUpdateResult, dataUpdateFailedReason, 0, 0)
+		if err != nil {
+			err = fmt.Errorf("新增指标更新日志失败,Err: %s", err)
+			return
+		}
+		return
+	}
+
+	if hasUpdate {
+		dataUpdateResult = 1
+		dataUpdateFailedReason = ""
+	} else {
+		dataUpdateFailedReason = "未刷新到数据"
+	}
+
+	// 添加刷新成功日志
+	err = AddEdbInfoUpdateLog(edbInfoId, 1, "", dataUpdateResult, dataUpdateFailedReason, 0, 0)
+	if err != nil {
+		err = fmt.Errorf("新增指标更新日志失败,Err: %s", err)
+		return
+	}
+	return
+}