i18n: logs in aria2/auth/cache/cluster/serializer

pull/1491/head
HFO4 2 years ago
parent 7366ff534e
commit 9bb4a5263c

@ -50,9 +50,9 @@ const (
var ( var (
// ErrNotEnabled 功能未开启错误 // ErrNotEnabled 功能未开启错误
ErrNotEnabled = serializer.NewError(serializer.CodeNoPermissionErr, "离线下载功能未开启", nil) ErrNotEnabled = serializer.NewError(serializer.CodeFeatureNotEnabled, "", nil)
// ErrUserNotFound 未找到下载任务创建者 // ErrUserNotFound 未找到下载任务创建者
ErrUserNotFound = serializer.NewError(serializer.CodeNotFound, "无法找到任务创建者", nil) ErrUserNotFound = serializer.NewError(serializer.CodeUserNotFound, "", nil)
) )
// DummyAria2 未开启Aria2功能时使用的默认处理器 // DummyAria2 未开启Aria2功能时使用的默认处理器

@ -45,7 +45,7 @@ func NewMonitor(task *model.Download, pool cluster.Pool, mqClient mq.MQ) {
monitor.notifier = mqClient.Subscribe(monitor.Task.GID, 0) monitor.notifier = mqClient.Subscribe(monitor.Task.GID, 0)
} else { } else {
monitor.setErrorStatus(errors.New("节点不可用")) monitor.setErrorStatus(errors.New("node not avaliable"))
} }
} }
@ -77,11 +77,12 @@ func (monitor *Monitor) Update() bool {
if err != nil { if err != nil {
monitor.retried++ monitor.retried++
util.Log().Warning("无法获取下载任务[%s]的状态,%s", monitor.Task.GID, err) util.Log().Warning("Cannot get status of download task %q: %s", monitor.Task.GID, err)
// 十次重试后认定为任务失败 // 十次重试后认定为任务失败
if monitor.retried > MAX_RETRY { if monitor.retried > MAX_RETRY {
util.Log().Warning("无法获取下载任务[%s]的状态,超过最大重试次数限制,%s", monitor.Task.GID, err) util.Log().Warning("Cannot get status of download task %qexceed maximum retry threshold: %s",
monitor.Task.GID, err)
monitor.setErrorStatus(err) monitor.setErrorStatus(err)
monitor.RemoveTempFolder() monitor.RemoveTempFolder()
return true return true
@ -93,7 +94,7 @@ func (monitor *Monitor) Update() bool {
// 磁力链下载需要跟随 // 磁力链下载需要跟随
if len(status.FollowedBy) > 0 { if len(status.FollowedBy) > 0 {
util.Log().Debug("离线下载[%s]重定向至[%s]", monitor.Task.GID, status.FollowedBy[0]) util.Log().Debug("Redirected download task from %q to %q.", monitor.Task.GID, status.FollowedBy[0])
monitor.Task.GID = status.FollowedBy[0] monitor.Task.GID = status.FollowedBy[0]
monitor.Task.Save() monitor.Task.Save()
return false return false
@ -101,13 +102,13 @@ func (monitor *Monitor) Update() bool {
// 更新任务信息 // 更新任务信息
if err := monitor.UpdateTaskInfo(status); err != nil { if err := monitor.UpdateTaskInfo(status); err != nil {
util.Log().Warning("无法更新下载任务[%s]的任务信息[%s]", monitor.Task.GID, err) util.Log().Warning("Failed to update status of download task %q: %s", monitor.Task.GID, err)
monitor.setErrorStatus(err) monitor.setErrorStatus(err)
monitor.RemoveTempFolder() monitor.RemoveTempFolder()
return true return true
} }
util.Log().Debug("离线下载[%s]更新状态[%s]", status.Gid, status.Status) util.Log().Debug("Remote download %q status updated to %q.", status.Gid, status.Status)
switch status.Status { switch status.Status {
case "complete": case "complete":
@ -122,7 +123,7 @@ func (monitor *Monitor) Update() bool {
monitor.RemoveTempFolder() monitor.RemoveTempFolder()
return true return true
default: default:
util.Log().Warning("下载任务[%s]返回未知状态信息[%s]", monitor.Task.GID, status.Status) util.Log().Warning("Download task %q returns unknown status %q.", monitor.Task.GID, status.Status)
return true return true
} }
} }

@ -17,10 +17,10 @@ import (
) )
var ( var (
ErrAuthFailed = serializer.NewError(serializer.CodeNoPermissionErr, "鉴权失败", nil) ErrAuthFailed = serializer.NewError(serializer.CodeInvalidSign, "invalid sign", nil)
ErrAuthHeaderMissing = serializer.NewError(serializer.CodeNoPermissionErr, "authorization header is missing", nil) ErrAuthHeaderMissing = serializer.NewError(serializer.CodeNoPermissionErr, "authorization header is missing", nil)
ErrExpiresMissing = serializer.NewError(serializer.CodeNoPermissionErr, "expire timestamp is missing", nil) ErrExpiresMissing = serializer.NewError(serializer.CodeNoPermissionErr, "expire timestamp is missing", nil)
ErrExpired = serializer.NewError(serializer.CodeSignExpired, "签名已过期", nil) ErrExpired = serializer.NewError(serializer.CodeSignExpired, "signature expired", nil)
) )
const CrHeaderPrefix = "X-Cr-" const CrHeaderPrefix = "X-Cr-"
@ -136,7 +136,7 @@ func Init() {
} else { } else {
secretKey = conf.SlaveConfig.Secret secretKey = conf.SlaveConfig.Secret
if secretKey == "" { if secretKey == "" {
util.Log().Panic("未指定 SlaveSecret请前往配置文件中指定") util.Log().Panic("SlaveSecret is not set, please specify it in config file.")
} }
} }
General = HMACAuth{ General = HMACAuth{

@ -24,7 +24,7 @@ func Init(isSlave bool) {
if isSlave { if isSlave {
err := Store.Sets(conf.OptionOverwrite, "setting_") err := Store.Sets(conf.OptionOverwrite, "setting_")
if err != nil { if err != nil {
util.Log().Warning("无法覆盖数据库设置: %s", err) util.Log().Warning("Failed to overwrite database setting: %s", err)
} }
} }
} }

2
pkg/cache/memo.go vendored

@ -53,7 +53,7 @@ func (store *MemoStore) GarbageCollect() {
store.Store.Range(func(key, value interface{}) bool { store.Store.Range(func(key, value interface{}) bool {
if item, ok := value.(itemWithTTL); ok { if item, ok := value.(itemWithTTL); ok {
if item.expires > 0 && item.expires < time.Now().Unix() { if item.expires > 0 && item.expires < time.Now().Unix() {
util.Log().Debug("回收垃圾[%s]", key.(string)) util.Log().Debug("Cache %q is garbage collected.", key.(string))
store.Store.Delete(key) store.Store.Delete(key)
} }
} }

@ -66,7 +66,7 @@ func NewRedisStore(size int, network, address, password, database string) *Redis
redis.DialPassword(password), redis.DialPassword(password),
) )
if err != nil { if err != nil {
util.Log().Warning("无法创建Redis连接%s", err) util.Log().Warning("Failed to create Redis connection: %s", err)
return nil, err return nil, err
} }
return c, nil return c, nil

@ -8,5 +8,5 @@ import (
var ( var (
ErrFeatureNotExist = errors.New("No nodes in nodepool match the feature specificed") ErrFeatureNotExist = errors.New("No nodes in nodepool match the feature specificed")
ErrIlegalPath = errors.New("path out of boundary of setting temp folder") ErrIlegalPath = errors.New("path out of boundary of setting temp folder")
ErrMasterNotFound = serializer.NewError(serializer.CodeMasterNotFound, "未知的主机节点", nil) ErrMasterNotFound = serializer.NewError(serializer.CodeMasterNotFound, "Unknown master node id", nil)
) )

@ -161,7 +161,7 @@ func (r *rpcService) Init() error {
// 解析RPC服务地址 // 解析RPC服务地址
server, err := url.Parse(r.parent.Model.Aria2OptionsSerialized.Server) server, err := url.Parse(r.parent.Model.Aria2OptionsSerialized.Server)
if err != nil { if err != nil {
util.Log().Warning("无法解析主机 Aria2 RPC 服务地址,%s", err) util.Log().Warning("Failed to parse Aria2 RPC server URL: %s", err)
return err return err
} }
server.Path = "/jsonrpc" server.Path = "/jsonrpc"
@ -171,7 +171,7 @@ func (r *rpcService) Init() error {
if r.parent.Model.Aria2OptionsSerialized.Options != "" { if r.parent.Model.Aria2OptionsSerialized.Options != "" {
err = json.Unmarshal([]byte(r.parent.Model.Aria2OptionsSerialized.Options), &globalOptions) err = json.Unmarshal([]byte(r.parent.Model.Aria2OptionsSerialized.Options), &globalOptions)
if err != nil { if err != nil {
util.Log().Warning("无法解析主机 Aria2 配置,%s", err) util.Log().Warning("Failed to parse aria2 options: %s", err)
return err return err
} }
} }
@ -221,7 +221,7 @@ func (r *rpcService) Status(task *model.Download) (rpc.StatusInfo, error) {
res, err := r.Caller.TellStatus(task.GID) res, err := r.Caller.TellStatus(task.GID)
if err != nil { if err != nil {
// 失败后重试 // 失败后重试
util.Log().Debug("无法获取离线下载状态,%s稍后重试", err) util.Log().Debug("Failed to get download task status, please retry later: %s", err)
time.Sleep(r.retryDuration) time.Sleep(r.retryDuration)
res, err = r.Caller.TellStatus(task.GID) res, err = r.Caller.TellStatus(task.GID)
} }
@ -233,7 +233,7 @@ func (r *rpcService) Cancel(task *model.Download) error {
// 取消下载任务 // 取消下载任务
_, err := r.Caller.Remove(task.GID) _, err := r.Caller.Remove(task.GID)
if err != nil { if err != nil {
util.Log().Warning("无法取消离线下载任务[%s], %s", task.GID, err) util.Log().Warning("Failed to cancel task %q: %s", task.GID, err)
} }
return err return err
@ -264,7 +264,7 @@ func (s *rpcService) DeleteTempFile(task *model.Download) error {
time.Sleep(d) time.Sleep(d)
err := os.RemoveAll(src) err := os.RemoveAll(src)
if err != nil { if err != nil {
util.Log().Warning("无法删除离线下载临时目录[%s], %s", src, err) util.Log().Warning("Failed to delete temp download folder: %q: %s", src, err)
} }
}(s.deletePaddingDuration, task.Parent) }(s.deletePaddingDuration, task.Parent)

@ -42,7 +42,7 @@ func Init() {
Default = &NodePool{} Default = &NodePool{}
Default.Init() Default.Init()
if err := Default.initFromDB(); err != nil { if err := Default.initFromDB(); err != nil {
util.Log().Warning("节点池初始化失败, %s", err) util.Log().Warning("Failed to initialize node pool: %s", err)
} }
} }
@ -83,7 +83,7 @@ func (pool *NodePool) GetNodeByID(id uint) Node {
} }
func (pool *NodePool) nodeStatusChange(isActive bool, id uint) { func (pool *NodePool) nodeStatusChange(isActive bool, id uint) {
util.Log().Debug("从机节点 [ID=%d] 状态变更 [Active=%t]", id, isActive) util.Log().Debug("Slave node [ID=%d] status changed to [Active=%t].", id, isActive)
var node Node var node Node
pool.lock.Lock() pool.lock.Lock()
if n, ok := pool.inactive[id]; ok { if n, ok := pool.inactive[id]; ok {

@ -172,7 +172,7 @@ func (node *SlaveNode) StartPingLoop() {
recoverDuration := time.Duration(model.GetIntSetting("slave_recover_interval", 600)) * time.Second recoverDuration := time.Duration(model.GetIntSetting("slave_recover_interval", 600)) * time.Second
pingTicker := time.Duration(0) pingTicker := time.Duration(0)
util.Log().Debug("从机节点 [%s] 启动心跳循环", node.Model.Name) util.Log().Debug("Slave node %q heartbeat loop started.", node.Model.Name)
retry := 0 retry := 0
recoverMode := false recoverMode := false
isFirstLoop := true isFirstLoop := true
@ -185,39 +185,39 @@ loop:
pingTicker = tickDuration pingTicker = tickDuration
} }
util.Log().Debug("从机节点 [%s] 发送Ping", node.Model.Name) util.Log().Debug("Slave node %q send ping.", node.Model.Name)
res, err := node.Ping(node.getHeartbeatContent(isFirstLoop)) res, err := node.Ping(node.getHeartbeatContent(isFirstLoop))
isFirstLoop = false isFirstLoop = false
if err != nil { if err != nil {
util.Log().Debug("Ping从机节点 [%s] 时发生错误: %s", node.Model.Name, err) util.Log().Debug("Error while ping slave node %q: %s", node.Model.Name, err)
retry++ retry++
if retry >= model.GetIntSetting("slave_node_retry", 3) { if retry >= model.GetIntSetting("slave_node_retry", 3) {
util.Log().Debug("从机节点 [%s] Ping 重试已达到最大限制,将从机节点标记为不可用", node.Model.Name) util.Log().Debug("Retry threshold for pinging slave node %q exceeded, mark it as offline.", node.Model.Name)
node.changeStatus(false) node.changeStatus(false)
if !recoverMode { if !recoverMode {
// 启动恢复监控循环 // 启动恢复监控循环
util.Log().Debug("从机节点 [%s] 进入恢复模式", node.Model.Name) util.Log().Debug("Slave node %q entered recovery mode.", node.Model.Name)
pingTicker = recoverDuration pingTicker = recoverDuration
recoverMode = true recoverMode = true
} }
} }
} else { } else {
if recoverMode { if recoverMode {
util.Log().Debug("从机节点 [%s] 复活", node.Model.Name) util.Log().Debug("Slave node %q recovered.", node.Model.Name)
pingTicker = tickDuration pingTicker = tickDuration
recoverMode = false recoverMode = false
isFirstLoop = true isFirstLoop = true
} }
util.Log().Debug("从机节点 [%s] 状态: %s", node.Model.Name, res) util.Log().Debug("Status of slave node %q: %s", node.Model.Name, res)
node.changeStatus(true) node.changeStatus(true)
retry = 0 retry = 0
} }
case <-node.close: case <-node.close:
util.Log().Debug("从机节点 [%s] 收到关闭信号", node.Model.Name) util.Log().Debug("Slave node %q received shutdown signal.", node.Model.Name)
break loop break loop
} }
} }
@ -421,7 +421,7 @@ func RemoteCallback(url string, body serializer.UploadCallback) error {
Data: body, Data: body,
}) })
if err != nil { if err != nil {
return serializer.NewError(serializer.CodeCallbackError, "无法编码回调正文", err) return serializer.NewError(serializer.CodeCallbackError, "Failed to encode callback content", err)
} }
resp := request.GeneralClient.Request( resp := request.GeneralClient.Request(
@ -433,13 +433,13 @@ func RemoteCallback(url string, body serializer.UploadCallback) error {
) )
if resp.Err != nil { if resp.Err != nil {
return serializer.NewError(serializer.CodeCallbackError, "从机无法发起回调请求", resp.Err) return serializer.NewError(serializer.CodeCallbackError, "Slave cannot send callback request", resp.Err)
} }
// 解析回调服务端响应 // 解析回调服务端响应
response, err := resp.DecodeResponse() response, err := resp.DecodeResponse()
if err != nil { if err != nil {
msg := fmt.Sprintf("从机无法解析主机返回的响应 (StatusCode=%d)", resp.Response.StatusCode) msg := fmt.Sprintf("Slave cannot parse callback response from master (StatusCode=%d).", resp.Response.StatusCode)
return serializer.NewError(serializer.CodeCallbackError, msg, err) return serializer.NewError(serializer.CodeCallbackError, msg, err)
} }

@ -190,6 +190,8 @@ const (
CodeIncorrectPassword = 40069 CodeIncorrectPassword = 40069
// 分享无法预览 // 分享无法预览
CodeDisabledSharePreview = 40070 CodeDisabledSharePreview = 40070
// 签名无效
CodeInvalidSign = 40071
// CodeDBError 数据库操作失败 // CodeDBError 数据库操作失败
CodeDBError = 50001 CodeDBError = 50001
// CodeEncryptError 加密失败 // CodeEncryptError 加密失败

Loading…
Cancel
Save