缓解io压力
This commit is contained in:
@@ -13,24 +13,30 @@ import (
|
||||
"github.com/break/junhong_cmp_fiber/pkg/errors"
|
||||
)
|
||||
|
||||
// startGatewayAttempt 在实际调用 Gateway 前建立 Integration Log 尝试事实。
|
||||
func startGatewayAttempt(ctx context.Context, repository *integrationlog.Repository, cardID uint, operation, scene string) (*model.IntegrationLog, error) {
|
||||
if repository == nil {
|
||||
return nil, errors.New(errors.CodeInternalError, "Gateway Integration Log 未配置")
|
||||
}
|
||||
// newGatewayAttempt 只在内存中准备稳定关联标识;成功无变化的轮询不落库。
|
||||
func newGatewayAttempt(cardID uint, operation, scene string) integrationlog.Attempt {
|
||||
resourceID := strconv.FormatUint(uint64(cardID), 10)
|
||||
integrationID := uuid.NewString()
|
||||
triggerSource := constants.CardObservationSourcePolling
|
||||
triggerScene := scene
|
||||
return repository.Start(ctx, integrationlog.Attempt{
|
||||
IntegrationID: integrationID,
|
||||
Provider: constants.IntegrationProviderGateway, Direction: constants.IntegrationDirectionOutbound,
|
||||
return integrationlog.Attempt{IntegrationID: integrationID,
|
||||
Provider: constants.IntegrationProviderGateway, Direction: constants.IntegrationDirectionOutbound,
|
||||
Operation: operation, ResourceType: constants.AssetTypeIotCard, ResourceID: &resourceID,
|
||||
TriggerSource: &triggerSource, TriggerScene: &triggerScene, TriggerSeries: &integrationID,
|
||||
CorrelationID: &integrationID,
|
||||
RequestSummary: map[string]any{"card_id": cardID}, Metadata: map[string]any{"scene": scene},
|
||||
InitialResult: constants.IntegrationResultPending,
|
||||
})
|
||||
CorrelationID: &integrationID, RequestSummary: map[string]any{"card_id": cardID},
|
||||
Metadata: map[string]any{"scene": scene}}
|
||||
}
|
||||
|
||||
// recordGatewayAttempt 在结果明确后才写入外部交互日志。
|
||||
func recordGatewayAttempt(ctx context.Context, repository *integrationlog.Repository, attempt integrationlog.Attempt, result string, changed bool, summary string) error {
|
||||
if repository == nil {
|
||||
return errors.New(errors.CodeInternalError, "Gateway Integration Log 未配置")
|
||||
}
|
||||
attempt.InitialResult = result
|
||||
attempt.StateChanged = changed
|
||||
attempt.Metadata = map[string]any{"scene": attempt.TriggerScene, "summary": summary}
|
||||
_, err := repository.Start(ctx, attempt)
|
||||
return err
|
||||
}
|
||||
|
||||
// completeGatewayAttempt 记录 Gateway 查询成功或明确失败,不把响应正文写入日志。
|
||||
|
||||
Reference in New Issue
Block a user