12 KiB
12 KiB
-
internal/infra/database/storage.go(database.Storage)- 工厂函数改造 (
NewStorage):- 修改函数签名,移除
logger *logs.Logger参数,改为接收ctx context.Context。 - 在函数内部,将接收到的
ctx作为第一个参数传递给NewPostgresStorage函数。
- 修改函数签名,移除
- 工厂函数改造 (
-
internal/infra/database/postgres.go- 结构体改造:
- 移除
PostgresStorage结构体中的logger *logs.Logger成员。 - 新增
selfCtx context.Context成员。
- 移除
- 构造函数改造 (
NewPostgresStorage):- 修改函数签名,移除
logger *logs.Logger参数,改为接收ctx context.Context。 - 在函数内部,为
PostgresStorage创建其专属的selfCtx:selfCtx := logs.AddCompName(ctx, "PostgresStorage")。 - 将这个
selfCtx赋值给PostgresStorage结构体的selfCtx成员。
- 修改函数签名,移除
- 公共方法改造 (
Connect,Disconnect,Migrate):- 修改方法签名,添加
ctx context.Context作为第一个参数。 - 在方法入口处,使用
newCtx, logger := logs.Trace(ctx, ps.selfCtx, "MethodName")获取新的context.Context和logger实例。 - 将所有对
ps.logger.Info,ps.logger.Errorw,ps.logger.Debugw的调用替换为logger.Info,logger.Errorw,logger.Debugw。 - 在
Connect方法中,调用logs.NewGormLogger时,将newCtx传递给它。 - 在
Connect方法中,调用gorm.Open时,使用ps.db, err = gorm.Open(postgres.Open(ps.connectionString), &gorm.Config{Logger: logs.NewGormLogger(newCtx)})。 - 在
Migrate方法中,确保所有对ps.db.AutoMigrate和ps.db.Exec的调用都使用newCtx。
- 修改方法签名,添加
- 内部辅助方法改造 (
setupTimescaleDB,creatingHyperTable,applyCompressionPolicies,creatingIndex):- 修改方法签名,添加
ctx context.Context作为第一个参数。 - 在每个方法入口处,使用
newCtx, logger := logs.Trace(ctx, ps.selfCtx, "MethodName")获取新的context.Context和logger实例。 - 将所有对
ps.logger.Info,ps.logger.Errorw,ps.logger.Debugw,ps.logger.Warnw,ps.logger.Debug的调用替换为logger.Info,logger.Errorw,logger.Debugw,logger.Warnw,logger.Debug。 - 确保所有对
ps.db.Exec的调用都使用newCtx。
- 修改方法签名,添加
- 结构体改造:
-
internal/infra/notify/log_notifier.go(notify.LogNotifier)- 结构体改造:
- 移除
logNotifier结构体中的logger *logs.Logger成员。 - 新增
selfCtx context.Context成员。
- 移除
- 构造函数改造 (
NewLogNotifier):- 修改函数签名,移除
logger *logs.Logger参数,改为接收ctx context.Context。 - 在函数内部,为
logNotifier创建其专属的selfCtx:selfCtx := logs.AddCompName(ctx, "LogNotifier")。 - 将这个
selfCtx赋值给logNotifier结构体的selfCtx成员。
- 修改函数签名,移除
- 公共方法改造 (
Send):- 修改方法签名,添加
ctx context.Context作为第一个参数。 - 在方法入口处,使用
newCtx, logger := logs.Trace(ctx, l.selfCtx, "Send")获取新的context.Context和logger实例。 - 将所有对
l.logger.Infow的调用替换为logger.Infow。
- 修改方法签名,添加
- 公共方法 (
Type):- 此方法不涉及日志或上下文传递,无需改造。
- 结构体改造:
-
internal/infra/notify/lark.go(notify.LarkNotifier)- 结构体改造:
- 新增
selfCtx context.Context成员。
- 新增
- 构造函数改造 (
NewLarkNotifier):- 修改函数签名,添加
ctx context.Context作为第一个参数。 - 在函数内部,为
larkNotifier创建其专属的selfCtx:selfCtx := logs.AddCompName(ctx, "LarkNotifier")。 - 将这个
selfCtx赋值给larkNotifier结构体的selfCtx成员。
- 修改函数签名,添加
- 公共方法改造 (
Send):- 修改方法签名,添加
ctx context.Context作为第一个参数。 - 在方法入口处,使用
newCtx, logger := logs.Trace(ctx, l.selfCtx, "Send")获取新的context.Context和logger实例。 - 将所有内部的错误日志(例如
fmt.Errorf返回的错误,以及getAccessToken中的错误)通过logger.Errorf记录。
- 修改方法签名,添加
- 内部辅助方法改造 (
getAccessToken):- 修改方法签名,添加
ctx context.Context作为第一个参数。 - 在方法入口处,使用
newCtx, logger := logs.Trace(ctx, l.selfCtx, "getAccessToken")获取新的context.Context和logger实例。 - 将所有内部的错误日志通过
logger.Errorf记录。
- 修改方法签名,添加
- 结构体改造:
-
internal/infra/notify/smtp.go(notify.SMTPNotifier)- 结构体改造:
- 新增
selfCtx context.Context成员。
- 新增
- 构造函数改造 (
NewSMTPNotifier):- 修改函数签名,添加
ctx context.Context作为第一个参数。 - 在函数内部,为
smtpNotifier创建其专属的selfCtx:selfCtx := logs.AddCompName(ctx, "SMTPNotifier")。 - 将这个
selfCtx赋值给smtpNotifier结构体的selfCtx成员。
- 修改函数签名,添加
- 公共方法改造 (
Send):- 修改方法签名,添加
ctx context.Context作为第一个参数。 - 在方法入口处,使用
newCtx, logger := logs.Trace(ctx, s.selfCtx, "Send")获取新的context.Context和logger实例。 - 将所有内部的错误日志(例如
fmt.Errorf返回的错误)通过logger.Errorf记录。
- 修改方法签名,添加
- 结构体改造:
-
internal/infra/notify/wechat.go(notify.WechatNotifier)- 结构体改造:
- 新增
selfCtx context.Context成员。
- 新增
- 构造函数改造 (
NewWechatNotifier):- 修改函数签名,添加
ctx context.Context作为第一个参数。 - 在函数内部,为
wechatNotifier创建其专属的selfCtx:selfCtx := logs.AddCompName(ctx, "WechatNotifier")。 - 将这个
selfCtx赋值给wechatNotifier结构体的selfCtx成员。
- 修改函数签名,添加
- 公共方法改造 (
Send):- 修改方法签名,添加
ctx context.Context作为第一个参数。 - 在方法入口处,使用
newCtx, logger := logs.Trace(ctx, w.selfCtx, "Send")获取新的context.Context和logger实例。 - 将所有内部的错误日志(例如
fmt.Errorf返回的错误,以及getAccessToken中的错误)通过logger.Errorf记录。
- 修改方法签名,添加
- 内部辅助方法改造 (
getAccessToken):- 修改方法签名,添加
ctx context.Context作为第一个参数。 - 在方法入口处,使用
newCtx, logger := logs.Trace(ctx, w.selfCtx, "getAccessToken")获取新的context.Context和logger实例。 - 将所有内部的错误日志通过
logger.Errorf记录。
- 修改方法签名,添加
- 结构体改造:
-
internal/infra/transport/lora/chirp_stack.go(lora.ChirpStackTransport)- 结构体改造:
- 移除
ChirpStackTransport结构体中的logger *logs.Logger成员。 - 新增
selfCtx context.Context成员。
- 移除
- 构造函数改造 (
NewChirpStackTransport):- 修改函数签名,移除
logger *logs.Logger参数,改为接收ctx context.Context。 - 在函数内部,为
ChirpStackTransport创建其专属的selfCtx:selfCtx := logs.AddCompName(ctx, "ChirpStackTransport")。 - 将这个
selfCtx赋值给ChirpStackTransport结构体的selfCtx成员。
- 修改函数签名,移除
- 公共方法改造 (
Send):- 修改方法签名,添加
ctx context.Context作为第一个参数。 - 在方法入口处,使用
newCtx, logger := logs.Trace(ctx, c.selfCtx, "Send")获取新的context.Context和logger实例。 - 将所有对
c.logger.Errorf和c.logger.Infof的调用替换为logger.Errorf和logger.Infof。 - 在调用
c.client.DeviceService.DeviceServiceEnqueue时,确保将newCtx传递给params.WithContext(newCtx),以便 ChirpStack 客户端内部的 HTTP 请求也能携带上下文。
- 修改方法签名,添加
- 结构体改造:
-
internal/infra/transport/lora/lora_mesh_uart_passthrough_transport.go(lora.LoRaMeshUartPassthroughTransport)- 结构体改造:
- 移除
LoRaMeshUartPassthroughTransport结构体中的logger *logs.Logger成员。 - 新增
selfCtx context.Context成员。
- 移除
- 构造函数改造 (
NewLoRaMeshUartPassthroughTransport):- 修改函数签名,移除
logger *logs.Logger参数,改为接收ctx context.Context。 - 在函数内部,为
LoRaMeshUartPassthroughTransport创建其专属的selfCtx:selfCtx := logs.AddCompName(ctx, "LoRaMeshUartPassthroughTransport")。 - 将这个
selfCtx赋值给LoRaMeshUartPassthroughTransport结构体的selfCtx成员。
- 修改函数签名,移除
- 公共方法改造 (
Listen,Send,Stop):- 修改
Listen方法签名,添加ctx context.Context作为第一个参数。 - 修改
Send方法签名,添加ctx context.Context作为第一个参数。 - 修改
Stop方法签名,添加ctx context.Context作为第一个参数。 - 在方法入口处,使用
newCtx, logger := logs.Trace(ctx, t.selfCtx, "MethodName")获取新的context.Context和logger实例。 - 将所有对
t.logger.Info,t.logger.Errorf的调用替换为logger.Info,logger.Errorf。 - 在
Send方法中,确保t.sendChan <- req传递的req包含了newCtx。
- 修改
- 内部辅助方法改造 (
workerLoop,runIdleState,runReceivingState,executeSend,handleFrame,handleUpstreamMessage,recordSensorData):- 修改方法签名,添加
ctx context.Context作为第一个参数。 - 在每个方法入口处,使用
newCtx, logger := logs.Trace(ctx, t.selfCtx, "MethodName")获取新的context.Context和logger实例。 - 将所有对
t.logger.Info,t.logger.Errorf,t.logger.Warnf,t.logger.Infof,t.logger.Debugf的调用替换为logger.Info,logger.Errorf,logger.Warnf,logger.Infof,logger.Debugf。 - 确保所有对
t.port,t.areaControllerRepo,t.pendingCollectionRepo,t.deviceRepo,t.sensorDataRepo等依赖的调用都将newCtx作为第一个参数传递。
- 修改方法签名,添加
- 结构体改造:
-
internal/infra/transport/lora/placeholder_transport.go(lora.PlaceholderTransport)- 结构体改造:
- 移除
PlaceholderTransport结构体中的logger *logs.Logger成员。 - 新增
selfCtx context.Context成员。
- 移除
- 构造函数改造 (
NewPlaceholderTransport):- 修改函数签名,移除
logger *logs.Logger参数,改为接收ctx context.Context。 - 在函数内部,为
PlaceholderTransport创建其专属的selfCtx:selfCtx := logs.AddCompName(ctx, "PlaceholderTransport")。 - 将这个
selfCtx赋值给PlaceholderTransport结构体的selfCtx成员。 - 使用
newCtx, logger := logs.Trace(ctx, selfCtx, "NewPlaceholderTransport")获取logger实例,并替换logger.Info调用。
- 修改函数签名,移除
- 公共方法改造 (
Listen,Stop):- 修改方法签名,添加
ctx context.Context作为第一个参数。 - 在方法入口处,使用
newCtx, logger := logs.Trace(ctx, p.selfCtx, "MethodName")获取新的context.Context和logger实例。 - 将所有对
p.logger.Warnf的调用替换为logger.Warnf。
- 修改方法签名,添加
- 结构体改造: