提交 05cd3107 authored 作者: mooncake's avatar mooncake

modify web_log

上级 7084d898
...@@ -107,8 +107,7 @@ func Retry(retryFunc RetryFunc, opts ...Option) error { ...@@ -107,8 +107,7 @@ func Retry(retryFunc RetryFunc, opts ...Option) error {
err error err error
) )
for i < config.retryTimes { for i < config.retryTimes {
err = retryFunc() if err = retryFunc(); err != nil {
if err != nil {
after := time.After(config.backoffStrategy.CalculateInterval()) after := time.After(config.backoffStrategy.CalculateInterval())
select { select {
case <-after: case <-after:
...@@ -125,7 +124,7 @@ func Retry(retryFunc RetryFunc, opts ...Option) error { ...@@ -125,7 +124,7 @@ func Retry(retryFunc RetryFunc, opts ...Option) error {
// lastSlash := strings.LastIndex(funcPath, "/") // lastSlash := strings.LastIndex(funcPath, "/")
// funcName := funcPath[lastSlash+1:] // funcName := funcPath[lastSlash+1:]
return fmt.Errorf("retry[3] faild, %s", err.Error()) return fmt.Errorf("retry[%d] faild, %s", config.retryTimes, err.Error())
} }
type BackoffStrategy interface { type BackoffStrategy interface {
......
...@@ -113,24 +113,29 @@ func Init() { ...@@ -113,24 +113,29 @@ func Init() {
return nil return nil
} }
insertFn := func() error { insertFn := func() error {
var err error
if debug { if debug {
if err := webLogDaoInstance.CreateSlice(ctx, ors); err != nil { err = webLogDaoInstance.CreateSlice(ctx, ors)
logger.Error("[webLog] insert fail detail", logger.Err(err), ctxutils.CtxTraceIDField(ctx))
return err
}
} else { } else {
if err := webLogDaoInstance.CreateSliceSilent(ctx, ors); err != nil { err = webLogDaoInstance.CreateSliceSilent(ctx, ors)
}
if err != nil {
if strings.Contains(err.Error(), "Duplicate entry") {
for _, r := range ors {
_ = webLogDaoInstance.Create(ctx, r)
}
return nil
}
logger.Error("[webLog] insert fail detail", logger.Err(err), ctxutils.CtxTraceIDField(ctx)) logger.Error("[webLog] insert fail detail", logger.Err(err), ctxutils.CtxTraceIDField(ctx))
return err return err
} }
}
return nil return nil
} }
go func() { go func() {
if debug { if debug {
logger.Info("[webLog]batch insert start") logger.Info("[webLog]batch insert start")
} }
if err := retryutils.Retry(insertFn, retryutils.RetryTimes(10), retryutils.RetryWithLinearBackoff(32*time.Minute)); err != nil { if err := retryutils.Retry(insertFn, retryutils.RetryTimes(3), retryutils.RetryWithLinearBackoff(32*time.Minute)); err != nil {
logger.Error("[webLog] insert fail", logger.String("err", err.Error()), ctxutils.CtxTraceIDField(ctx)) logger.Error("[webLog] insert fail", logger.String("err", err.Error()), ctxutils.CtxTraceIDField(ctx))
for _, or := range ors { for _, or := range ors {
logger.Error("[webLog] insert fail detail", logger.String("user_id", or.UID.String()), logger.String("operate", or.Operate), ctxutils.CtxTraceIDField(ctx)) logger.Error("[webLog] insert fail detail", logger.String("user_id", or.UID.String()), logger.String("operate", or.Operate), ctxutils.CtxTraceIDField(ctx))
...@@ -183,6 +188,10 @@ func (x *webLogDao) CreateSlice(ctx context.Context, ors []*WebLog) error { ...@@ -183,6 +188,10 @@ func (x *webLogDao) CreateSlice(ctx context.Context, ors []*WebLog) error {
return x.db.WithContext(ctx).Create(ors).Error return x.db.WithContext(ctx).Create(ors).Error
} }
func (x *webLogDao) Create(ctx context.Context, r *WebLog) error {
return x.db.WithContext(ctx).Create(r).Error
}
type WebLog struct { type WebLog struct {
ID xsf.ID `json:"id" form:"id" swaggertype:"string" gorm:"column:id;type:bigint(20) unsigned;primaryKey;autoIncrement;comment:主键" example:"1000"` //主键 ID xsf.ID `json:"id" form:"id" swaggertype:"string" gorm:"column:id;type:bigint(20) unsigned;primaryKey;autoIncrement;comment:主键" example:"1000"` //主键
CompanyID xsf.ID `json:"companyID" form:"companyID" swaggertype:"string" gorm:"column:company_id;type:bigint(20) unsigned;comment:公司ID" example:"1008"` //公司ID CompanyID xsf.ID `json:"companyID" form:"companyID" swaggertype:"string" gorm:"column:company_id;type:bigint(20) unsigned;comment:公司ID" example:"1008"` //公司ID
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论