feat: 为四种现有轮询 Handler 添加 verbose log 输出
realname: verbose log 移入 gateway 块内,避免 gateway=nil 时输出零值 carddata: 添加 && h.gateway != nil 门卫,确保仅 gateway 查询成功时输出 package: verbose log 在 freshCard 加载后、EvaluateAndAct 之前输出 protect: 引入 actionTaken 变量,字段名 network_status → network_status_at_check,新增 action_taken Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -91,6 +91,15 @@ func (h *PollingCarddataHandler) Handle(ctx context.Context, t *asynq.Task) erro
|
||||
updates, flowIncrementMB, isCrossMonth := h.calculateFlowUpdates(card, gatewayFlowMB, now, resetDay)
|
||||
updates["last_data_check_at"] = now
|
||||
|
||||
if h.base.verboseLog && h.gateway != nil {
|
||||
h.base.logger.Info("流量轮询详情",
|
||||
zap.Uint("card_id", cardID),
|
||||
zap.String("iccid", card.ICCID),
|
||||
zap.Float64("gateway_flow_mb", gatewayFlowMB),
|
||||
zap.Float64("increment_mb", flowIncrementMB),
|
||||
zap.Bool("is_cross_month", isCrossMonth))
|
||||
}
|
||||
|
||||
if updateErr := h.iotCardStore.UpdateFields(ctx, cardID, updates); updateErr != nil {
|
||||
h.base.logger.Error("更新卡流量信息失败", zap.Uint("card_id", cardID), zap.Error(updateErr))
|
||||
}
|
||||
|
||||
@@ -67,6 +67,13 @@ func (h *PollingPackageHandler) Handle(ctx context.Context, t *asynq.Task) error
|
||||
zap.Uint("card_id", cardID),
|
||||
zap.Int("network_status", freshCard.NetworkStatus),
|
||||
zap.String("stop_reason", freshCard.StopReason))
|
||||
if h.base.verboseLog {
|
||||
h.base.logger.Info("套餐检查详情",
|
||||
zap.Uint("card_id", cardID),
|
||||
zap.String("iccid", freshCard.ICCID),
|
||||
zap.Int("network_status", freshCard.NetworkStatus),
|
||||
zap.String("stop_reason", freshCard.StopReason))
|
||||
}
|
||||
if evalErr := h.stopResumeSvc.EvaluateAndAct(ctx, freshCard); evalErr != nil {
|
||||
h.base.logger.Warn("套餐检查后停复机评估失败",
|
||||
zap.Uint("card_id", cardID), zap.Error(evalErr))
|
||||
|
||||
@@ -85,6 +85,8 @@ func (h *PollingProtectHandler) Handle(ctx context.Context, t *asynq.Task) error
|
||||
stopProtect := h.base.redis.Exists(ctx, constants.RedisDeviceProtectKey(deviceID, "stop")).Val() > 0
|
||||
startProtect := h.base.redis.Exists(ctx, constants.RedisDeviceProtectKey(deviceID, "start")).Val() > 0
|
||||
|
||||
actionTaken := "no_action"
|
||||
|
||||
switch {
|
||||
case stopProtect && card.NetworkStatus == constants.NetworkStatusOnline:
|
||||
// 保护期内:停机保护期发现开机卡 → 强制停机(绕过 EvaluateAndAct)
|
||||
@@ -107,6 +109,7 @@ func (h *PollingProtectHandler) Handle(ctx context.Context, t *asynq.Task) error
|
||||
h.base.logger.Warn("保护期停机 DB 更新失败", zap.Uint("card_id", cardID), zap.Error(updateErr))
|
||||
}
|
||||
h.base.updateCardCache(ctx, cardID, map[string]any{"network_status": constants.NetworkStatusOffline})
|
||||
actionTaken = "forced_stop"
|
||||
|
||||
case startProtect && card.NetworkStatus == constants.NetworkStatusOffline:
|
||||
// 保护期内:复机保护期发现停机卡 → 强制复机(绕过 EvaluateAndAct)
|
||||
@@ -129,6 +132,7 @@ func (h *PollingProtectHandler) Handle(ctx context.Context, t *asynq.Task) error
|
||||
h.base.logger.Warn("保护期复机 DB 更新失败", zap.Uint("card_id", cardID), zap.Error(updateErr))
|
||||
}
|
||||
h.base.updateCardCache(ctx, cardID, map[string]any{"network_status": constants.NetworkStatusOnline})
|
||||
actionTaken = "forced_resume"
|
||||
|
||||
case !stopProtect && !startProtect:
|
||||
// 保护期结束:调 EvaluateAndAct 重新评估正常停复机条件
|
||||
@@ -138,6 +142,17 @@ func (h *PollingProtectHandler) Handle(ctx context.Context, t *asynq.Task) error
|
||||
zap.Uint("card_id", cardID), zap.Error(evalErr))
|
||||
}
|
||||
}
|
||||
actionTaken = "evaluate"
|
||||
}
|
||||
|
||||
if h.base.verboseLog {
|
||||
h.base.logger.Info("保护期检查详情",
|
||||
zap.Uint("card_id", cardID),
|
||||
zap.String("iccid", card.ICCID),
|
||||
zap.Bool("stop_protect", stopProtect),
|
||||
zap.Bool("start_protect", startProtect),
|
||||
zap.Int("network_status_at_check", card.NetworkStatus),
|
||||
zap.String("action_taken", actionTaken))
|
||||
}
|
||||
|
||||
if updateErr := h.iotCardStore.UpdateFields(ctx, cardID, map[string]any{
|
||||
|
||||
@@ -72,6 +72,7 @@ func (h *PollingRealnameHandler) Handle(ctx context.Context, t *asynq.Task) erro
|
||||
}
|
||||
|
||||
var newStatus int
|
||||
var realStatusBool bool
|
||||
if h.gateway != nil {
|
||||
result, gwErr := h.gateway.QueryRealnameStatus(ctx, &gateway.CardStatusReq{CardNo: card.ICCID})
|
||||
if gwErr != nil {
|
||||
@@ -80,11 +81,20 @@ func (h *PollingRealnameHandler) Handle(ctx context.Context, t *asynq.Task) erro
|
||||
h.base.updateStats(ctx, constants.TaskTypePollingRealname, false, time.Since(startTime))
|
||||
return h.base.requeueCard(ctx, cardID, constants.TaskTypePollingRealname)
|
||||
}
|
||||
realStatusBool = result.RealStatus
|
||||
if result.RealStatus {
|
||||
newStatus = constants.RealNameStatusVerified
|
||||
} else {
|
||||
newStatus = constants.RealNameStatusNotVerified
|
||||
}
|
||||
if h.base.verboseLog {
|
||||
h.base.logger.Info("实名状态轮询详情",
|
||||
zap.Uint("card_id", cardID),
|
||||
zap.String("iccid", card.ICCID),
|
||||
zap.Bool("real_status", realStatusBool),
|
||||
zap.Int("new_status", newStatus),
|
||||
zap.Bool("changed", newStatus != card.RealNameStatus))
|
||||
}
|
||||
} else {
|
||||
newStatus = card.RealNameStatus
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user