|
@@ -42,7 +42,17 @@ func GetEdbDataFromWind(edbCode, startDate, endDate string) (item *EdbDataFromWi
|
|
|
//异常的话,需要邮件通知
|
|
|
if len(item.ErrorCode) > 0 {
|
|
|
if item.ErrorCode["0"] != 0 {
|
|
|
- go alarm_msg.SendAlarmMsg(fmt.Sprintf("wind数据服务异常,edbCode:%s,ErrorCode:%d", edbCode, item.ErrorCode["0"]), 3)
|
|
|
+ if item.ErrorCode["0"] == -40520005 {
|
|
|
+ // 设置服务器已超限
|
|
|
+ SetIsLimitEdbCodeInWindUrl(windUrl)
|
|
|
+ err = DeleteEdbCodeInWindUrl(edbCode)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ return GetEdbDataFromWind(edbCode, startDate, endDate)
|
|
|
+ } else {
|
|
|
+ go alarm_msg.SendAlarmMsg(fmt.Sprintf("wind数据服务异常,edbCode:%s,ErrorCode:%d", edbCode, item.ErrorCode["0"]), 3)
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
return
|
|
@@ -64,16 +74,26 @@ func GetWindUrl(edbCode string) (windUrl string, err error) {
|
|
|
//如果缓存中没有的话,那么从配置中获取
|
|
|
for _, windUrlMap := range utils.Hz_Wind_Data_Url_LIST {
|
|
|
//判断该url是否被占满了
|
|
|
- count, tmpErr := GetCountEdbCodeInWindUrl(windUrlMap.Url)
|
|
|
- if tmpErr != nil && tmpErr.Error() != "nil returned" {
|
|
|
+ //count, tmpErr := GetCountEdbCodeInWindUrl(windUrlMap.Url)
|
|
|
+ //if tmpErr != nil && tmpErr.Error() != "nil returned" {
|
|
|
+ // err = tmpErr
|
|
|
+ // return
|
|
|
+ //}
|
|
|
+ //if count < windUrlMap.Num {
|
|
|
+ // windUrl = windUrlMap.Url
|
|
|
+ // AddEdbCodeInWindUrl(windUrlMap.Url, edbCode)
|
|
|
+ // return
|
|
|
+ //}
|
|
|
+ //如果超限了,那么进入下一循环
|
|
|
+ isLimit, tmpErr := GetIsLimitEdbCodeInWindUrl(windUrlMap.Url)
|
|
|
+ if isLimit {
|
|
|
err = tmpErr
|
|
|
- return
|
|
|
- }
|
|
|
- if count < windUrlMap.Num {
|
|
|
- windUrl = windUrlMap.Url
|
|
|
- AddEdbCodeInWindUrl(windUrlMap.Url, edbCode)
|
|
|
- return
|
|
|
+ continue
|
|
|
}
|
|
|
+
|
|
|
+ windUrl = windUrlMap.Url
|
|
|
+ AddEdbCodeInWindUrl(windUrlMap.Url, edbCode)
|
|
|
+ return
|
|
|
}
|
|
|
return
|
|
|
}
|
|
@@ -88,6 +108,27 @@ func GetCountEdbCodeInWindUrl(windUrl string) (num int, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+// GetIsLimitEdbCodeInWindUrl 从缓存key中获取是否超限
|
|
|
+func GetIsLimitEdbCodeInWindUrl(windUrl string) (isLimit bool, err error) {
|
|
|
+ cacheKey := utils.CACHE_WIND_URL + ":limit:" + time.Now().Format(utils.FormatDateUnSpace) + ":" + utils.MD5(windUrl)
|
|
|
+
|
|
|
+ num, err := utils.Rc.RedisInt(cacheKey)
|
|
|
+ if err != nil && err.Error() == "redigo: nil returned" {
|
|
|
+ err = nil
|
|
|
+ }
|
|
|
+ if num > 0 {
|
|
|
+ isLimit = true
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+// SetIsLimitEdbCodeInWindUrl 设置服务器已超限
|
|
|
+func SetIsLimitEdbCodeInWindUrl(windUrl string) {
|
|
|
+ cacheKey := utils.CACHE_WIND_URL + ":limit:" + time.Now().Format(utils.FormatDateUnSpace) + ":" + utils.MD5(windUrl)
|
|
|
+ _ = utils.Rc.SetNX(cacheKey, 1, utils.GetTodayLastSecond())
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
// AddEdbCodeInWindUrl 将指标插入到缓存key中
|
|
|
// @return isInsert bool 是否插入数据,true时为插入数据,false表示数据已存在
|
|
|
func AddEdbCodeInWindUrl(windUrl, edbCode string) (isInsert bool) {
|
|
@@ -98,3 +139,10 @@ func AddEdbCodeInWindUrl(windUrl, edbCode string) (isInsert bool) {
|
|
|
utils.Rc.Incrby(cacheKey2, 1)
|
|
|
return
|
|
|
}
|
|
|
+
|
|
|
+// DeleteEdbCodeInWindUrl 删除指标编码 服务器归属 缓存
|
|
|
+func DeleteEdbCodeInWindUrl(edbCode string) (err error) {
|
|
|
+ cacheKey := utils.CACHE_WIND_URL + ":" + edbCode
|
|
|
+ err = utils.Rc.Delete(cacheKey)
|
|
|
+ return
|
|
|
+}
|