فهرست منبع

wind指标刷新埋点

xyxie 6 روز پیش
والد
کامیت
e280dab25e

+ 23 - 8
controllers/base_from_wind.go

@@ -113,7 +113,7 @@ func (this *WindController) Add() {
 		_ = utils.Rc.Put(terminalCodeCacheKey, terminalCode, utils.GetTodayLastSecond())
 
 		//windUrl = utils.Hz_Wind_Data_Url_LIST[1].Url
-		dataItem, errCode, err := services.GetEdbDataFromWindUrl(windUrl, req.EdbCode, utils.BASE_START_DATE, endDate)
+		dataItem, errCode, _, err := services.GetEdbDataFromWindUrl(windUrl, req.EdbCode, utils.BASE_START_DATE, endDate)
 		//dataItem, errCode, err := services.GetEdbDataFromWind(req.EdbCode, utils.BASE_START_DATE, endDate)
 		if errCode == 421 { //指标超限
 			br.Ret = 421
@@ -185,11 +185,6 @@ func (this *WindController) Refresh() {
 		return
 	}
 
-	utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
-	defer func() {
-		utils.Rc.Delete(cacheKey)
-	}()
-
 	//获取指标信息
 	edbInfo, err := models.GetEdbInfoById(req.EdbInfoId)
 	if err != nil {
@@ -198,6 +193,23 @@ func (this *WindController) Refresh() {
 		return
 	}
 
+	utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
+	var hasUpdate bool
+	var updateResult bool
+	var realApiErrMsg string
+	var dataItem *models.EdbDataFromWind
+	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)
+	}()
+
+
 	//期货数据,就默认到今天,特殊处理下
 	endDate := utils.BASE_END_DATE
 	if strings.Contains(req.EdbCode, ".") {
@@ -209,10 +221,12 @@ func (this *WindController) Refresh() {
 		br.Msg = "终端未配置"
 		return
 	}
-	dataItem, errCode, err := services.GetEdbDataFromWindUrl(terminal.ServerUrl, req.EdbCode, utils.GetEdbRefreshStartDate(req.StartDate), utils.GetEdbRefreshEndDate(endDate))
+	var errCode int
+	dataItem, errCode, realApiErrMsg, err = services.GetEdbDataFromWindUrl(terminal.ServerUrl, req.EdbCode, utils.GetEdbRefreshStartDate(req.StartDate), utils.GetEdbRefreshEndDate(endDate))
 	if errCode == 421 { //指标超限
 		br.Ret = 421
 		br.Msg = "指标超限!"
+		err = errors.New(realApiErrMsg)
 		return
 	}
 	// 忽略掉指标下架的错误, 并更新指标为停止更新
@@ -224,6 +238,7 @@ func (this *WindController) Refresh() {
 			br.ErrMsg = "更新wind指标停更失败, Err: " + e.Error()
 			return
 		}
+		err = errors.New(realApiErrMsg)
 		br.Ret = 200
 		br.Msg = "操作成功"
 		return
@@ -233,7 +248,7 @@ func (this *WindController) Refresh() {
 		br.ErrMsg = "获取指标信息失败 GetEdbDataFromWind,Err:" + err.Error()
 		return
 	}
-	err = models.RefreshEdbDataFromWind(req.EdbInfoId, req.EdbCode, utils.GetEdbRefreshStartDate(req.StartDate), dataItem)
+	hasUpdate, err = models.RefreshEdbDataFromWind(req.EdbInfoId, req.EdbCode, utils.GetEdbRefreshStartDate(req.StartDate), dataItem)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "刷新指标信息失败!"
 		br.ErrMsg = "刷新指标信息失败 RefreshEdbDataFromWind,Err:" + err.Error()

+ 23 - 9
controllers/base_from_wind_wsd.go

@@ -2,6 +2,7 @@ package controllers
 
 import (
 	"encoding/json"
+	"errors"
 	"eta/eta_index_lib/logic"
 	"eta/eta_index_lib/models"
 	"eta/eta_index_lib/services"
@@ -95,7 +96,7 @@ func (this *WindWsdController) Add() {
 		_ = utils.Rc.Put(terminalCodeCacheKey, terminalCode, utils.GetTodayLastSecond())
 
 		//windUrl = utils.Hz_Wind_Data_Url_LIST[1].Url
-		dataItem, errCode, err := services.GetEdbDataFromWindUrlWsd(windUrl, req.StockCode, req.EdbCode, utils.BASE_START_DATE, endDate)
+		dataItem, errCode, _, err := services.GetEdbDataFromWindUrlWsd(windUrl, req.StockCode, req.EdbCode, utils.BASE_START_DATE, endDate)
 		if errCode == 421 { //指标超限
 			br.Ret = 421
 			br.Msg = "指标超限!"
@@ -166,12 +167,6 @@ func (this *WindWsdController) Refresh() {
 		br.Msg = "系统处理中,请稍后重试"
 		return
 	}
-
-	utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
-	defer func() {
-		utils.Rc.Delete(cacheKey)
-	}()
-
 	//获取指标信息
 	edbInfo, err := models.GetEdbInfoById(req.EdbInfoId)
 	if err != nil {
@@ -180,6 +175,22 @@ func (this *WindWsdController) Refresh() {
 		return
 	}
 
+	utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
+	var hasUpdate bool
+	var updateResult bool
+	var realApiErrMsg string
+	var dataItem map[string]map[string]interface{}
+	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)
+	}()
+
 	//期货数据,就默认到今天,特殊处理下
 	endDate := utils.BASE_END_DATE
 	if strings.Contains(req.EdbCode, ".") {
@@ -191,10 +202,12 @@ func (this *WindWsdController) Refresh() {
 		br.Msg = "终端未配置"
 		return
 	}
-	dataItem, errCode, err := services.GetEdbDataFromWindUrlWsd(terminal.ServerUrl, edbInfo.StockCode, edbInfo.IndicatorCode, utils.GetEdbRefreshStartDate(req.StartDate), utils.GetEdbRefreshEndDate(endDate))
+	var errCode int
+	dataItem, errCode, realApiErrMsg, err = services.GetEdbDataFromWindUrlWsd(terminal.ServerUrl, edbInfo.StockCode, edbInfo.IndicatorCode, utils.GetEdbRefreshStartDate(req.StartDate), utils.GetEdbRefreshEndDate(endDate))
 	if errCode == 421 { //指标超限
 		br.Ret = 421
 		br.Msg = "指标超限!"
+		err = errors.New(realApiErrMsg)
 		return
 	}
 	// 忽略掉指标下架的错误, 并更新指标为停止更新
@@ -206,6 +219,7 @@ func (this *WindWsdController) Refresh() {
 			br.ErrMsg = "更新wind指标停更失败, Err: " + e.Error()
 			return
 		}
+		err = errors.New(realApiErrMsg)
 		br.Ret = 200
 		br.Msg = "操作成功"
 		return
@@ -215,7 +229,7 @@ func (this *WindWsdController) Refresh() {
 		br.ErrMsg = "获取指标信息失败 GetEdbDataFromWind,Err:" + err.Error()
 		return
 	}
-	err = models.RefreshEdbDataFromWindWsd(req.EdbInfoId, edbInfo.EdbCode, utils.GetEdbRefreshStartDate(req.StartDate), dataItem)
+	hasUpdate, err = models.RefreshEdbDataFromWindWsd(req.EdbInfoId, edbInfo.EdbCode, utils.GetEdbRefreshStartDate(req.StartDate), dataItem)
 	if err != nil && err.Error() != utils.ErrNoRow() {
 		br.Msg = "刷新指标信息失败!"
 		br.ErrMsg = "刷新指标信息失败 RefreshEdbDataFromWind,Err:" + err.Error()

+ 5 - 3
models/base_from_wind.go

@@ -50,7 +50,7 @@ func AddEdbDataFromWind(edbCode string, item *EdbDataFromWind) (err error) {
 }
 
 // RefreshEdbDataFromWind 刷新wind指标数据
-func RefreshEdbDataFromWind(edbInfoId int, edbCode, startDate string, item *EdbDataFromWind) (err error) {
+func RefreshEdbDataFromWind(edbInfoId int, edbCode, startDate string, item *EdbDataFromWind) (hasUpdate bool, err error) {
 	//o := orm.NewOrm()
 	source := utils.DATA_SOURCE_WIND
 	subSource := utils.DATA_SUB_SOURCE_EDB
@@ -122,8 +122,9 @@ func RefreshEdbDataFromWind(edbInfoId int, edbCode, startDate string, item *EdbD
 			if findItem != nil && utils.SubFloatToString(findItem.Value, 30) != saveVal {
 				err = ModifyEdbDataById(source, subSource, findItem.EdbDataId, saveVal)
 				if err != nil {
-					return err
+					return false, err
 				}
+				hasUpdate = true
 			}
 		}
 
@@ -147,8 +148,9 @@ func RefreshEdbDataFromWind(edbInfoId int, edbCode, startDate string, item *EdbD
 		err = global.DEFAULT_DB.Exec(addSql).Error
 		if err != nil {
 			fmt.Println("RefreshEdbDataFromWind add Err", err.Error())
-			return
+			return false, err
 		}
+		hasUpdate = true
 	}
 
 	return

+ 7 - 5
models/base_from_wind_wsd.go

@@ -105,7 +105,7 @@ func AddEdbDataFromWindWsd(stockCode string, item map[string]map[string]interfac
 }
 
 // RefreshEdbDataFromWind 刷新wind指标数据
-func RefreshEdbDataFromWindWsd(edbInfoId int, edbCode, startDate string, item map[string]map[string]interface{}) (err error) {
+func RefreshEdbDataFromWindWsd(edbInfoId int, edbCode, startDate string, item map[string]map[string]interface{}) (hasUpdate bool, err error) {
 	//o := orm.NewOrm()
 	source := utils.DATA_SOURCE_WIND
 	subSource := utils.DATA_SUB_SOURCE_DATE
@@ -157,7 +157,7 @@ func RefreshEdbDataFromWindWsd(edbInfoId int, edbCode, startDate string, item ma
 			wkInt, err := strconv.ParseInt(wk, 10, 64)
 			if err != nil {
 				fmt.Println("ParseInt Err:" + err.Error() + ";wk:" + wk)
-				return err
+				return false, err
 			}
 
 			vk = strings.ToLower(vk)
@@ -171,7 +171,7 @@ func RefreshEdbDataFromWindWsd(edbInfoId int, edbCode, startDate string, item ma
 
 			dataTime, err := time.ParseInLocation(utils.FormatDate, dateTime, time.Local)
 			if err != nil {
-				return err
+				return false, err
 			}
 			timestamp := dataTime.UnixNano() / 1e6
 			timeStr := fmt.Sprintf("%d", timestamp)
@@ -204,8 +204,9 @@ func RefreshEdbDataFromWindWsd(edbInfoId int, edbCode, startDate string, item ma
 				if findItem != nil && utils.SubFloatToString(findItem.Value, 30) != saveVal {
 					err = ModifyEdbDataById(source, subSource, findItem.EdbDataId, saveVal)
 					if err != nil {
-						return err
+						return false, err
 					}
+					hasUpdate = true
 				}
 			}
 
@@ -230,8 +231,9 @@ func RefreshEdbDataFromWindWsd(edbInfoId int, edbCode, startDate string, item ma
 		err = global.DEFAULT_DB.Exec(addSql).Error
 		if err != nil {
 			fmt.Println("RefreshEdbDataFromWind add Err", err.Error())
-			return
+			return false, err
 		}
+		hasUpdate = true
 	}
 
 	return

+ 13 - 4
services/base_from_wind.go

@@ -16,7 +16,7 @@ const (
 )
 
 // GetEdbDataFromWind 获取wind数据
-func GetEdbDataFromWind(edbCode, startDate, endDate string) (item *models.EdbDataFromWind, errorCode int, err error) {
+func GetEdbDataFromWind(edbCode, startDate, endDate string) (item *models.EdbDataFromWind, errorCode int, apiErrMsg string, err error) {
 	windUrl, err := GetWindUrl(edbCode)
 	if err != nil {
 		errorCode = 421
@@ -32,6 +32,7 @@ func GetEdbDataFromWind(edbCode, startDate, endDate string) (item *models.EdbDat
 	utils.FileLog.Info(fmt.Sprint("指标编码:", edbCode, ";wind result:", string(body)))
 
 	if err != nil {
+		apiErrMsg = err.Error()
 		return
 	}
 	item = new(models.EdbDataFromWind)
@@ -58,6 +59,7 @@ func GetEdbDataFromWind(edbCode, startDate, endDate string) (item *models.EdbDat
 				if err != nil {
 					return
 				}
+				apiErrMsg = fmt.Sprintf("ErrorCode:%d, wind数据接口超限", item.ErrorCode["0"])
 				return GetEdbDataFromWind(edbCode, startDate, endDate)
 			} else if item.ErrorCode["0"] == -40520005 {
 				//.ErrorCode=-40520005
@@ -67,12 +69,15 @@ func GetEdbDataFromWind(edbCode, startDate, endDate string) (item *models.EdbDat
 				if err != nil {
 					return
 				}
+				apiErrMsg = fmt.Sprintf("ErrorCode:%d, 无API接口权限", item.ErrorCode["0"])
 				go alarm_msg.SendAlarmMsg(fmt.Sprintf("wind数据服务异常,edbCode:%s,ErrorCode:%d,result:%s", edbCode, item.ErrorCode["0"], string(body)), 3)
 				return GetEdbDataFromWind(edbCode, startDate, endDate)
 			} else if item.ErrorCode["0"] == WindNoAuthCode {
 				// 指标下架, 无权限
-				return nil, WindNoAuthCode, nil
+				apiErrMsg = fmt.Sprintf("ErrorCode:%d, 指标已下架", item.ErrorCode["0"])
+				return nil, WindNoAuthCode, apiErrMsg, nil
 			} else {
+				apiErrMsg = fmt.Sprintf("ErrorCode:%d, wind数据服务异常", item.ErrorCode["0"])
 				go alarm_msg.SendAlarmMsg(fmt.Sprintf("wind数据服务异常,edbCode:%s,ErrorCode:%d,result:%s", edbCode, item.ErrorCode["0"], string(body)), 3)
 			}
 		}
@@ -81,7 +86,7 @@ func GetEdbDataFromWind(edbCode, startDate, endDate string) (item *models.EdbDat
 }
 
 // GetEdbDataFromWindUrl 通过url获取wind数据
-func GetEdbDataFromWindUrl(windUrl, edbCode, startDate, endDate string) (item *models.EdbDataFromWind, errorCode int, err error) {
+func GetEdbDataFromWindUrl(windUrl, edbCode, startDate, endDate string) (item *models.EdbDataFromWind, errorCode int, apiErrMsg string, err error) {
 	// todo 刷新后的处理
 	if windUrl == `` {
 		return GetEdbDataFromWind(edbCode, startDate, endDate)
@@ -118,6 +123,7 @@ func GetEdbDataFromWindUrl(windUrl, edbCode, startDate, endDate string) (item *m
 				//}
 				// 设置服务器已超限
 				errorCode = 421
+				apiErrMsg = fmt.Sprintf("ErrorCode:%d, wind数据接口超限", item.ErrorCode["0"])
 				go alarm_msg.SendAlarmMsg(fmt.Sprintf("wind数据接口超限,地址:%s", requestWindUrl), 2)
 				//go utils.SendEmail("wind数据接口超限", "地址:"+requestWindUrl, utils.EmailSendToUsers)
 				return
@@ -125,12 +131,15 @@ func GetEdbDataFromWindUrl(windUrl, edbCode, startDate, endDate string) (item *m
 				//.ErrorCode=-40520005
 				//.Data=[No Python API Authority
 				err = errors.New("No Python API Authority")
+				apiErrMsg = fmt.Sprintf("ErrorCode:%d, 无API接口权限", item.ErrorCode["0"])
 				go alarm_msg.SendAlarmMsg(fmt.Sprintf("wind数据服务异常,edbCode:%s,ErrorCode:%d,result:%s", edbCode, item.ErrorCode["0"], string(body)), 3)
 				return
 			} else if item.ErrorCode["0"] == WindNoAuthCode {
 				// 指标下架, 无权限
-				return nil, WindNoAuthCode, nil
+				apiErrMsg = fmt.Sprintf("ErrorCode:%d, 指标已下架", item.ErrorCode["0"])
+				return nil, WindNoAuthCode, apiErrMsg, nil
 			} else {
+				apiErrMsg = fmt.Sprintf("ErrorCode:%d, wind数据服务异常", item.ErrorCode["0"])
 				go alarm_msg.SendAlarmMsg(fmt.Sprintf("wind数据服务异常,edbCode:%s,ErrorCode:%d,result:%s", edbCode, item.ErrorCode["0"], string(body)), 3)
 			}
 		}

+ 11 - 3
services/base_from_wind_wsd.go

@@ -10,7 +10,7 @@ import (
 )
 
 // GetEdbDataFromWind 获取wind数据
-func GetEdbDataFromWindWsd(securitiesCode, edbCode, startDate, endDate string) (item *models.EdbDataFromWind, errorCode int, err error) {
+func GetEdbDataFromWindWsd(securitiesCode, edbCode, startDate, endDate string) (item *models.EdbDataFromWind, errorCode int, apiErrMsg string, err error) {
 	windUrl, err := GetWindUrl(edbCode)
 	if err != nil {
 		errorCode = 421
@@ -52,6 +52,7 @@ func GetEdbDataFromWindWsd(securitiesCode, edbCode, startDate, endDate string) (
 				if err != nil {
 					return
 				}
+				apiErrMsg = fmt.Sprintf("ErrorCode:%d, wind数据接口超限", item.ErrorCode["0"])
 				return GetEdbDataFromWind(edbCode, startDate, endDate)
 			} else if item.ErrorCode["0"] == -40520005 {
 				//.ErrorCode=-40520005
@@ -61,12 +62,15 @@ func GetEdbDataFromWindWsd(securitiesCode, edbCode, startDate, endDate string) (
 				if err != nil {
 					return
 				}
+				apiErrMsg = fmt.Sprintf("ErrorCode:%d, 无API接口权限", item.ErrorCode["0"])
 				go alarm_msg.SendAlarmMsg(fmt.Sprintf("wind数据服务异常,edbCode:%s,ErrorCode:%d,result:%s", edbCode, item.ErrorCode["0"], string(body)), 3)
 				return GetEdbDataFromWind(edbCode, startDate, endDate)
 			} else if item.ErrorCode["0"] == WindNoAuthCode {
 				// 指标下架, 无权限
-				return nil, WindNoAuthCode, nil
+				apiErrMsg = fmt.Sprintf("ErrorCode:%d, 指标已下架", item.ErrorCode["0"])
+				return nil, WindNoAuthCode, apiErrMsg, nil
 			} else {
+				apiErrMsg = fmt.Sprintf("ErrorCode:%d, wind数据服务异常", item.ErrorCode["0"])
 				go alarm_msg.SendAlarmMsg(fmt.Sprintf("wind数据服务异常,edbCode:%s,ErrorCode:%d,result:%s", edbCode, item.ErrorCode["0"], string(body)), 3)
 			}
 		}
@@ -75,13 +79,17 @@ func GetEdbDataFromWindWsd(securitiesCode, edbCode, startDate, endDate string) (
 }
 
 // GetEdbDataFromWindUrlWsd 通过url获取wind wsd数据
-func GetEdbDataFromWindUrlWsd(windUrl, stockCode, edbCode, startDate, endDate string) (item map[string]map[string]interface{}, errorCode int, err error) {
+func GetEdbDataFromWindUrlWsd(windUrl, stockCode, edbCode, startDate, endDate string) (item map[string]map[string]interface{}, errorCode int, apiErrMsg string, err error) {
 	requestWindUrl := windUrl + `edbInfo/wind/wsd?StockCode=%s&EdbCode=%s&StartDate=%s&EndDate=%s`
 	requestWindUrl = fmt.Sprintf(requestWindUrl, stockCode, edbCode, startDate, endDate)
 	utils.FileLog.Info(fmt.Sprintf("windUrl:%s", requestWindUrl))
 	body, err := http.Get(requestWindUrl)
 	utils.FileLog.Info(fmt.Sprint("wind result:", string(body)))
 	err = json.Unmarshal(body, &item)
+	if err != nil {
+		apiErrMsg = fmt.Sprintf("wind数据服务异常")
+		return
+	}	
 	return
 }