Skip to content
This repository has been archived by the owner on Jun 14, 2021. It is now read-only.

希望更详细一点的 Workers & Fetcher 配置描述 #12

Closed
monsterxcn opened this issue May 2, 2020 · 11 comments
Closed

希望更详细一点的 Workers & Fetcher 配置描述 #12

monsterxcn opened this issue May 2, 2020 · 11 comments
Labels
good first issue Good for newcomers

Comments

@monsterxcn
Copy link

monsterxcn commented May 2, 2020

折腾了一天将全套系统部署完了,fetch 了 OneJAV 的几部影片到本地后成功 move 到 rclone 挂载的 Google Drive ,网页登陆也可以看到云端硬盘中的文件,可 WebUI 显示有一个硬盘但是没有视频。

不知道是因为我用的是云端共享硬盘还是因为配置错了 QAQ 。fetcher lemp core 全部使用 Docker 部署,以下是我的部分配置过程:

core

关于 core 中说要用到 client_id client_secret access_token refresh_token ,但是我并不知道是在哪里用的... rclone 在服务器挂载硬盘时倒是有需要 client_id client_secret ,然后点链接授权之后返回了 access_token refresh_token 。之后本地挂载和文件 move 都正常。

然后在数据库导入 drives 表数据时说明是这样的:

INSERT INTO `drivers` (`id`, `name`, `driverType`, `driverData`, `isEnable`, `createTime`, `updateTime`) VALUES
(1, '1', 'gd', 
'{\"oAuth\":
    {\"client_id\":\"【your_client_here】\",
    \"client_secret\":\"【your_client_secret_here】\",
    \"redirect_uri\":\"urn:ietf:wg:oauth:2.0:oob\",
    \"token\":
        {\"access_token\":\"【your_access_token_here_optional】\", 
        \"refresh_token\":\"【your_refresh_token_here】\",
        \"scope\":\"https://www.googleapis.com/auth/drive\",
        \"token_type\":\"Bearer\",
        \"expiry_date\":1583679345619}},
    \"drive\":{\"driveId\":\"【your_drive_or_folder_id_here】\"},
    \"encryption\":
        {\"secret\":\"【path_ase_secret】\",
        \"server\":\"【your_gd_proxy_server_here】"}}',
1, '【timestanp_in_ms_here】', '【timestanp_in_ms_here】');

嗯,好的,我按照 rclone 挂载时的 client_id client_secret access_token refresh_token 填好了,后面的 driveId 我填的是 https://drive.google.com/drive/folders/【id】 这里后面的文件夹 id 。

然后 secret 我就不知道是什么了 QAQ 。我将部署 google drive workers 时要填的 aes_password 填了进去。

workers

workers 里面的 gd-config.js 中要填 aes_password client_id client_secret refresh_token ,后三个我将 rclone 挂载的时候那几个对应 client_id client_secret refresh_token 填进去了, aes_password emmm... 不知道是啥,我就把 access_token 填了进去,webpack 构建完后部署到 workers.dev 了。

以上就是我认为可能出错的地方了,如果还有什么要补充的细节请提。霖大有时间的话救救孩子!蟹蟹了


我尝试将 AES 加密的密码填在 workers gd-config.js 的 aes_password ,修改 drivers 数据表中的 【path_ase_secret】 为 AES 加密后的谷歌盘文件夹 id ,然后更新 core 容器编排,但是好像也不对 QAQ

@LynMoe
Copy link
Contributor

LynMoe commented May 2, 2020

首先感谢能花费那么多时间来踩坑

  • 没有视频显示
    在 core 的配置中有没有设定定时任务呢?(就是 importer 中 cron那项

  • secret 和 aes_password
    这里可能的确有点误导,这两个是同一个东西,后续会考虑统一说法

别的步骤看起来都没有什么问题,如果还有什么问题可以把 log level 开到 debug 将错误日志附上来

@monsterxcn
Copy link
Author

monsterxcn commented May 2, 2020

core 的 dev.json 是按照默认的:

"cron": [
    {
        "driveId": 1,
        "interval": 36000000,
        "doFull": true
    }
]

文件我都是手动 rclone move 到谷歌盘,不知道这个自动任务是怎么用 ...

docker loglevel 一直是 debug ,日志写了一大堆 233 ,core 的日志:

{"log":"\u001b[36m[2020-05-02T16:44:23.094] [DEBUG] Module: Cache - \u001b[39m[api_checktoken_sjdkfgho9we84yt98w7yhtguierhbgu93oh578gwijhgnwo5] Cache missed, creating one\n","stream":"stdout","time":"2020-05-02T08:44:23.095020795Z"}
{"log":"\u001b[36m[2020-05-02T16:44:23.095] [DEBUG] Module: User - \u001b[39mChecking token sjdkfgho9we84yt98w7yhtguierhbgu93oh578gwijhgnwo5\n","stream":"stdout","time":"2020-05-02T08:44:23.153415678Z"}
{"log":"\u001b[36m[2020-05-02T16:44:23.099] [DEBUG] Module: Cache - \u001b[39m[api_checktoken_sjdkfgho9we84yt98w7yhtguierhbgu93oh578gwijhgnwo5] Cache missed, creating one\n","stream":"stdout","time":"2020-05-02T08:44:23.153443417Z"}
{"log":"\u001b[36m[2020-05-02T16:44:23.099] [DEBUG] Module: User - \u001b[39mChecking token sjdkfgho9we84yt98w7yhtguierhbgu93oh578gwijhgnwo5\n","stream":"stdout","time":"2020-05-02T08:44:23.153447963Z"}
{"log":"\u001b[36m[2020-05-02T16:44:23.136] [DEBUG] Module: Cache - \u001b[39m[api_checktoken_sjdkfgho9we84yt98w7yhtguierhbgu93oh578gwijhgnwo5] Cache missed, creating one\n","stream":"stdout","time":"2020-05-02T08:44:23.15345172Z"}
{"log":"\u001b[36m[2020-05-02T16:44:23.136] [DEBUG] Module: User - \u001b[39mChecking token sjdkfgho9we84yt98w7yhtguierhbgu93oh578gwijhgnwo5\n","stream":"stdout","time":"2020-05-02T08:44:23.153455416Z"}
{"log":"\u001b[36m[2020-05-02T16:44:23.541] [DEBUG] Module: Cache - \u001b[39m[api_checktoken_sjdkfgho9we84yt98w7yhtguierhbgu93oh578gwijhgnwo5] Cache missed, creating one\n","stream":"stdout","time":"2020-05-02T08:44:23.541665679Z"}
{"log":"\u001b[36m[2020-05-02T16:44:23.541] [DEBUG] Module: User - \u001b[39mChecking token sjdkfgho9we84yt98w7yhtguierhbgu93oh578gwijhgnwo5\n","stream":"stdout","time":"2020-05-02T08:44:23.541793979Z"}
{"log":"\u001b[36m[2020-05-02T16:44:23.542] [DEBUG] Module: Cache - \u001b[39m[api_checktoken_sjdkfgho9we84yt98w7yhtguierhbgu93oh578gwijhgnwo5] Cache missed, creating one\n","stream":"stdout","time":"2020-05-02T08:44:23.543192844Z"}
{"log":"\u001b[36m[2020-05-02T16:44:23.543] [DEBUG] Module: User - \u001b[39mChecking token sjdkfgho9we84yt98w7yhtguierhbgu93oh578gwijhgnwo5\n","stream":"stdout","time":"2020-05-02T08:44:23.543218593Z"}
{"log":"\u001b[36m[2020-05-02T16:44:23.658] [DEBUG] API: Main - \u001b[39m[UID: 1] GET /api/statistic/getData\n","stream":"stdout","time":"2020-05-02T08:44:23.65903812Z"}
{"log":"\u001b[36m[2020-05-02T16:44:23.659] [DEBUG] Module: Cache - \u001b[39m[api_statistic] Cache missed, creating one\n","stream":"stdout","time":"2020-05-02T08:44:23.659307678Z"}
{"log":"\u001b[36m[2020-05-02T16:44:23.661] [DEBUG] API: Main - \u001b[39m[UID: 1] GET /api/metadata/getList/1/20\n","stream":"stdout","time":"2020-05-02T08:44:23.661275559Z"}
{"log":"\u001b[36m[2020-05-02T16:44:23.661] [DEBUG] API: Metadata - \u001b[39mPage 1, size 20\n","stream":"stdout","time":"2020-05-02T08:44:23.66155576Z"}
{"log":"\u001b[36m[2020-05-02T16:44:23.661] [DEBUG] Module: Cache - \u001b[39m[api_metadata_list_1_20] Cache missed, creating one\n","stream":"stdout","time":"2020-05-02T08:44:23.661648199Z"}
{"log":"\u001b[36m[2020-05-02T16:44:23.665] [DEBUG] API: Main - \u001b[39m[UID: 1] GET /api/auth/check\n","stream":"stdout","time":"2020-05-02T08:44:23.666047909Z"}
{"log":"\u001b[36m[2020-05-02T16:44:23.671] [DEBUG] API: Main - \u001b[39m[UID: 1] GET /api/statistic/getData\n","stream":"stdout","time":"2020-05-02T08:44:23.671827449Z"}
{"log":"\u001b[36m[2020-05-02T16:44:23.671] [DEBUG] Module: Cache - \u001b[39m[api_statistic] Cache missed, creating one\n","stream":"stdout","time":"2020-05-02T08:44:23.67198189Z"}
{"log":"\u001b[36m[2020-05-02T16:44:23.677] [DEBUG] API: Main - \u001b[39m[UID: 1] GET /api/auth/check\n","stream":"stdout","time":"2020-05-02T08:44:23.677995665Z"}
{"log":"\u001b[36m[2020-05-02T16:44:30.051] [DEBUG] API: Main - \u001b[39m[UID: 1] GET /api/metadata/getMetaList/series/1/50\n","stream":"stdout","time":"2020-05-02T08:44:30.051452161Z"}
{"log":"\u001b[36m[2020-05-02T16:44:30.051] [DEBUG] API: Metadata - \u001b[39mType series, page 1, size 50\n","stream":"stdout","time":"2020-05-02T08:44:30.051640628Z"}
{"log":"\u001b[36m[2020-05-02T16:44:30.051] [DEBUG] Module: Cache - \u001b[39m[api_meta_list_series_1_50] Cache missed, creating one\n","stream":"stdout","time":"2020-05-02T08:44:30.05172411Z"}
{"log":"\u001b[36m[2020-05-02T16:44:32.825] [DEBUG] API: Main - \u001b[39m[UID: 1] GET /api/metadata/getMetaList/star/1/50\n","stream":"stdout","time":"2020-05-02T08:44:32.825485242Z"}
{"log":"\u001b[36m[2020-05-02T16:44:32.825] [DEBUG] API: Metadata - \u001b[39mType star, page 1, size 50\n","stream":"stdout","time":"2020-05-02T08:44:32.825633323Z"}
{"log":"\u001b[36m[2020-05-02T16:44:32.825] [DEBUG] Module: Cache - \u001b[39m[api_meta_list_stars_1_50] Cache missed, creating one\n","stream":"stdout","time":"2020-05-02T08:44:32.825786876Z"}
{"log":"\u001b[36m[2020-05-02T16:44:33.723] [DEBUG] API: Main - \u001b[39m[UID: 1] GET /api/metadata/getMetaList/tag/1/50\n","stream":"stdout","time":"2020-05-02T08:44:33.723378189Z"}
{"log":"\u001b[36m[2020-05-02T16:44:33.723] [DEBUG] API: Metadata - \u001b[39mType tag, page 1, size 50\n","stream":"stdout","time":"2020-05-02T08:44:33.723482056Z"}
{"log":"\u001b[36m[2020-05-02T16:44:33.723] [DEBUG] Module: Cache - \u001b[39m[api_meta_list_tags_1_50] Cache missed, creating one\n","stream":"stdout","time":"2020-05-02T08:44:33.72349004Z"}
{"log":"\u001b[36m[2020-05-02T16:44:34.403] [DEBUG] API: Main - \u001b[39m[UID: 1] GET /api/bookmark/getList\n","stream":"stdout","time":"2020-05-02T08:44:34.40339052Z"}
{"log":"\u001b[36m[2020-05-02T16:44:35.017] [DEBUG] API: Main - \u001b[39m[UID: 1] GET /api/metadata/getList/1/20\n","stream":"stdout","time":"2020-05-02T08:44:35.01784188Z"}
{"log":"\u001b[36m[2020-05-02T16:44:35.017] [DEBUG] API: Metadata - \u001b[39mPage 1, size 20\n","stream":"stdout","time":"2020-05-02T08:44:35.017994494Z"}
{"log":"\u001b[36m[2020-05-02T16:44:40.257] [DEBUG] API: Main - \u001b[39m[UID: 1] GET /api/statistic/getData\n","stream":"stdout","time":"2020-05-02T08:44:40.258310593Z"}
{"log":"\u001b[36m[2020-05-02T16:44:40.258] [DEBUG] Module: Cache - \u001b[39m[api_statistic] Cache missed, creating one\n","stream":"stdout","time":"2020-05-02T08:44:40.258436294Z"}
{"log":"\u001b[36m[2020-05-02T16:44:58.041] [DEBUG] Module: Cache - \u001b[39mExpired cache api_statistic cleared\n","stream":"stdout","time":"2020-05-02T08:44:58.042538495Z"}
{"log":"\u001b[36m[2020-05-02T16:45:58.043] [DEBUG] Module: Cache - \u001b[39mExpired cache api_checktoken_sjdkfgho9we84yt98w7yhtguierhbgu93oh578gwijhgnwo5 cleared\n","stream":"stdout","time":"2020-05-02T08:45:58.047838368Z"}
{"log":"\u001b[36m[2020-05-02T16:45:58.047] [DEBUG] Module: Cache - \u001b[39mExpired cache api_metadata_list_1_20 cleared\n","stream":"stdout","time":"2020-05-02T08:45:58.048441297Z"}
{"log":"\u001b[36m[2020-05-02T16:45:58.048] [DEBUG] Module: Cache - \u001b[39mExpired cache api_meta_list_series_1_50 cleared\n","stream":"stdout","time":"2020-05-02T08:45:58.048505121Z"}
{"log":"\u001b[36m[2020-05-02T16:45:58.048] [DEBUG] Module: Cache - \u001b[39mExpired cache api_meta_list_stars_1_50 cleared\n","stream":"stdout","time":"2020-05-02T08:45:58.048747348Z"}
{"log":"\u001b[36m[2020-05-02T16:45:58.048] [DEBUG] Module: Cache - \u001b[39mExpired cache api_meta_list_tags_1_50 cleared\n","stream":"stdout","time":"2020-05-02T08:45:58.048795901Z"}

说起看日志我想起来 fetcher 一直在不停的 restart ,我删掉了 mt rss 的源只留了 OneJAV 的源,毕竟 mt 账号看起来... fetcher 配置这块是这样写的,其他地方没有修改:

    "remote": [
        {
            "driver": "OneJAV",
            "url": "https://onejav.com/new/"
        },{
            "driver": "OneJAV",
            "url": "https://onejav.com/popular/"
        },{
            "driver": "OneJAV",
            "url": "https://onejav.com/random/"
        }
    ]

qBittorrent WebUI 正常,自动抓取 OneJAV 好像失败了,我在 8585 端口的面板上手动添加 .torrent 地址下载。附上 fetcher 的日志:

{"log":"    ^\n","stream":"stderr","time":"2020-05-02T09:33:52.742082913Z"}
{"log":"\n","stream":"stderr","time":"2020-05-02T09:33:52.742087279Z"}
{"log":"Error: Configuration property \"system.logLevel\" is not defined\n","stream":"stderr","time":"2020-05-02T09:33:52.742091512Z"}
{"log":"    at Config.get (/usr/app/node_modules/config/lib/config.js:182:11)\n","stream":"stderr","time":"2020-05-02T09:33:52.742096032Z"}
{"log":"    at module.exports (/usr/app/src/module/logger.js:6:27)\n","stream":"stderr","time":"2020-05-02T09:33:52.742100539Z"}
{"log":"    at Object.\u003canonymous\u003e (/usr/app/src/module/qbittorrent.js:2:35)\n","stream":"stderr","time":"2020-05-02T09:33:52.742104866Z"}
{"log":"    at Module._compile (internal/modules/cjs/loader.js:1151:30)\n","stream":"stderr","time":"2020-05-02T09:33:52.742109839Z"}
{"log":"    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1171:10)\n","stream":"stderr","time":"2020-05-02T09:33:52.74211435Z"}
{"log":"    at Module.load (internal/modules/cjs/loader.js:1000:32)\n","stream":"stderr","time":"2020-05-02T09:33:52.74211899Z"}
{"log":"    at Function.Module._load (internal/modules/cjs/loader.js:899:14)\n","stream":"stderr","time":"2020-05-02T09:33:52.742123395Z"}
{"log":"    at Module.require (internal/modules/cjs/loader.js:1040:19)\n","stream":"stderr","time":"2020-05-02T09:33:52.742127799Z"}
{"log":"    at require (internal/modules/cjs/helpers.js:72:18)\n","stream":"stderr","time":"2020-05-02T09:33:52.742132051Z"}
{"log":"    at Object.\u003canonymous\u003e (/usr/app/src/handle/init.js:5:12)\n","stream":"stderr","time":"2020-05-02T09:33:52.742136205Z"}
{"log":"WARNING: NODE_ENV value of 'dev' did not match any deployment config file names.\n","stream":"stderr","time":"2020-05-02T09:34:54.2248761Z"}
{"log":"WARNING: See https://github.com/lorenwest/node-config/wiki/Strict-Mode\n","stream":"stderr","time":"2020-05-02T09:34:54.225272509Z"}
{"log":"WARNING: No configurations found in configuration directory:/usr/app/config/\n","stream":"stderr","time":"2020-05-02T09:34:54.225369699Z"}
{"log":"WARNING: To disable this warning set SUPPRESS_NO_CONFIG_WARNING in the environment.\n","stream":"stderr","time":"2020-05-02T09:34:54.225377256Z"}
{"log":"/usr/app/node_modules/config/lib/config.js:182\n","stream":"stderr","time":"2020-05-02T09:34:54.322909029Z"}
{"log":"    throw new Error('Configuration property \"' + property + '\" is not defined');\n","stream":"stderr","time":"2020-05-02T09:34:54.322951291Z"}
{"log":"    ^\n","stream":"stderr","time":"2020-05-02T09:34:54.322955051Z"}
{"log":"\n","stream":"stderr","time":"2020-05-02T09:34:54.322957721Z"}
{"log":"Error: Configuration property \"system.logLevel\" is not defined\n","stream":"stderr","time":"2020-05-02T09:34:54.322960108Z"}
{"log":"    at Config.get (/usr/app/node_modules/config/lib/config.js:182:11)\n","stream":"stderr","time":"2020-05-02T09:34:54.32296269Z"}
{"log":"    at module.exports (/usr/app/src/module/logger.js:6:27)\n","stream":"stderr","time":"2020-05-02T09:34:54.322965293Z"}
{"log":"    at Object.\u003canonymous\u003e (/usr/app/src/module/qbittorrent.js:2:35)\n","stream":"stderr","time":"2020-05-02T09:34:54.322978267Z"}
{"log":"    at Module._compile (internal/modules/cjs/loader.js:1151:30)\n","stream":"stderr","time":"2020-05-02T09:34:54.322981421Z"}
{"log":"    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1171:10)\n","stream":"stderr","time":"2020-05-02T09:34:54.322983868Z"}
{"log":"    at Module.load (internal/modules/cjs/loader.js:1000:32)\n","stream":"stderr","time":"2020-05-02T09:34:54.322993614Z"}
{"log":"    at Function.Module._load (internal/modules/cjs/loader.js:899:14)\n","stream":"stderr","time":"2020-05-02T09:34:54.322998876Z"}
{"log":"    at Module.require (internal/modules/cjs/loader.js:1040:19)\n","stream":"stderr","time":"2020-05-02T09:34:54.323002249Z"}
{"log":"    at require (internal/modules/cjs/helpers.js:72:18)\n","stream":"stderr","time":"2020-05-02T09:34:54.323004759Z"}
{"log":"    at Object.\u003canonymous\u003e (/usr/app/src/handle/init.js:5:12)\n","stream":"stderr","time":"2020-05-02T09:34:54.32300726Z"}

日志很多都是重复的我就截取了重复的部分,应该没有遗漏什么

@LynMoe
Copy link
Contributor

LynMoe commented May 2, 2020

core的日志你截取的都是网站的访问日志而不是importer的日志,可以试试加上 grep Importer 试试,可以先关闭再启动并等待一分钟左右即可看到相关日志

然后fetcher不启动的原因看起来是找不到配置文件,可以检查一下是否已经改名成dev.json并在启动语句前加上 NODE_ENV=dev来让程序寻找到dev.json

关于定时任务的作用就是从Google Drive中读取视频信息并导入到core的数据库中

另外想问一句你上传到网盘的数据有没有经过fetcher处理.... (毕竟看你fetcher都没正常运行
core导入的一定是要fetcher处理过的才行,不是随便一个视频都可以的

@monsterxcn
Copy link
Author

monsterxcn commented May 2, 2020

啊,那原来是我没有 fetcher 处理就上传到网盘了(逃...

fetcher 找不到那个可能是我按照教程复制 dev.json 文件的位置错了吗我看看,docker fetcher 的说明:

cp config/dev.example.json dev.json

我试试在 config 文件夹创建 dev.json

不太熟悉 Docker,emmm... Importer 日志像这样,这是没连接上数据库🐎:

root@msvultr2020:~/JAVClub_core# docker logs e928dcbda9fa | grep Importer
This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason:
Error: ER_BAD_DB_ERROR: Unknown database 'javclub'
    at Handshake.Sequence._packetToError (/usr/app/node_modules/mysql/lib/protocol/sequences/Sequence.js:47:14)
    at Handshake.ErrorPacket (/usr/app/node_modules/mysql/lib/protocol/sequences/Handshake.js:123:18)
    at Protocol._parsePacket (/usr/app/node_modules/mysql/lib/protocol/Protocol.js:291:23)
    at Parser._parsePacket (/usr/app/node_modules/mysql/lib/protocol/Parser.js:433:10)
    at Parser.write (/usr/app/node_modules/mysql/lib/protocol/Parser.js:43:10)
    at Protocol.write (/usr/app/node_modules/mysql/lib/protocol/Protocol.js:38:16)
    at Socket.<anonymous> (/usr/app/node_modules/mysql/lib/Connection.js:88:28)
    at Socket.<anonymous> (/usr/app/node_modules/mysql/lib/Connection.js:526:10)
    at Socket.emit (events.js:321:20)
    at Socket.EventEmitter.emit (domain.js:485:12)
    --------------------
    at Protocol._enqueue (/usr/app/node_modules/mysql/lib/protocol/Protocol.js:144:48)
    at Protocol.handshake (/usr/app/node_modules/mysql/lib/protocol/Protocol.js:51:23)
    at Connection.connect (/usr/app/node_modules/mysql/lib/Connection.js:116:18)
    at /usr/app/node_modules/knex/lib/dialects/mysql/index.js:68:18
[2020-05-02T11:41:57.960] [DEBUG] Importer: Main - Config: [ { driveId: 1, interval: 36000000, doFull: true } ]
    at new Promise (<anonymous>)
    at Client_MySQL.acquireRawConnection (/usr/app/node_modules/knex/lib/dialects/mysql/index.js:63:12)
    at create (/usr/app/node_modules/knex/lib/client.js:289:39)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)

我去试了下,好像还真是 dev.json 位置不对,教程把 dev.json 复制到 fetcher 根目录去了 233

现在 fetcher 日志:

[2020-05-02T10:43:46.494] [DEBUG] Handle: Init - [Check torrent status] Starting job
[2020-05-02T10:43:46.494] [INFO] Module: Qbittorrent - Getting torrent list
[2020-05-02T10:43:46.494] [DEBUG] Module: Qbittorrent - GET /api/v2/torrents/info?limit=5&category=JAVClub&filter=paused&sort=completion_on&reverse=true
[2020-05-02T10:43:46.494] [DEBUG] Module: Qbittorrent - GET data:  {
  method: 'GET',
  headers: { Cookie: 'SID=DbuXc2TO8HDajgFE2edemARvVJ48G7W8' }
}
[2020-05-02T10:43:46.499] [DEBUG] Module: Qbittorrent - POST response body Response {
  size: 0,
  timeout: 0,
  [Symbol(Body internals)]: {
    body: PassThrough {
      _readableState: [ReadableState],
      readable: true,
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      _writableState: [WritableState],
      writable: false,
      allowHalfOpen: true,
      _transformState: [Object],
      [Symbol(kCapture)]: false
    },
    disturbed: false,
    error: null
  },
  [Symbol(Response internals)]: {
    url: 'http://qbittorrent:8585/api/v2/torrents/createCategory',
    status: 409,
    statusText: 'Conflict',
    headers: Headers { [Symbol(map)]: [Object: null prototype] },
    counter: 0
  }
}
[2020-05-02T10:43:46.499] [INFO] Pull: Init - [Download queue] Job finished, setting timer
[2020-05-02T10:43:46.500] [DEBUG] Module: Qbittorrent - GET response body []
[2020-05-02T10:43:46.500] [INFO] Handle: Init - [Check torrent status] Job finished, setting timer

core 日志:

[2020-05-02T18:13:11.480] [INFO] Stack - Stack created
[2020-05-02T18:13:11.500] [DEBUG] Importer: Main - Config: [ { driveId: 1, interval: 36000000, doFull: true } ]
[2020-05-02T18:13:11.500] [INFO] Stack - Creating Instance 1
[2020-05-02T18:13:11.502] [INFO] API: Main - JAVClub core is listening on port 3000!
[2020-05-02T18:13:11.604] [DEBUG] Stack - RowDataPacket {
  id: 1,
  name: '1',
  driverType: 'gd',
  driverData: '{"oAuth":{"client_id":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","client_secret":"xxxxxxxxxxxxxxxxxxxxx","redirect_uri":"urn:ietf:wg:oauth:2.0:oob","token":{"access_token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","refresh_token":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","scope":"https://www.googleapis.com/auth/drive","token_type":"Bearer","expiry_date":1583679345619}},"drive":{"driveId":"xxxxxxxxxxx"},"encryption":{"secret":"xxxxxxxxxxxxxx","server":"https://mv-gd.msx.workers.dev"}}',
  isEnable: 1,
  createTime: '1588363401',
  updateTime: '1588363401'
}
[2020-05-02T18:13:11.606] [DEBUG] Driver[1]: Google Drive - Token expiry date 1583679345619
[2020-05-02T18:13:11.606] [INFO] Driver[1]: Google Drive - Refreshing access token
(node:1) [google-auth-library:DEP007] DeprecationWarning: The `refreshAccessToken` method has been deprecated, and will be removed in the 3.0 release of google-auth-library. Please use the `getRequestHeaders` method instead.
[2020-05-02T18:13:11.765] [INFO] Driver[1]: Google Drive - Got access token
[2020-05-02T18:13:11.766] [DEBUG] Driver[1]: Google Drive - {
  access_token: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  scope: 'https://www.googleapis.com/auth/drive',
  token_type: 'Bearer',
  expiry_date: 1588417990765,
  refresh_token: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
}
[2020-05-02T18:13:11.766] [INFO] Importer: GD 1 - Got drive instance
[2020-05-02T18:13:11.774] [INFO] Importer: Main - [1] Ready in 32 seconds
[2020-05-02T18:13:43.777] [INFO] Importer: Main - [1] Starting first time import process
[2020-05-02T18:13:43.778] [INFO] Importer: GD 1 - Starting process of import, full = true
[2020-05-02T18:13:43.778] [INFO] Driver[1]: Google Drive - Getting full file list of keyword name='info.json'
[2020-05-02T18:13:43.779] [DEBUG] Driver[1]: Google Drive - Getting page 1
[2020-05-02T18:13:44.102] [INFO] Driver[1]: Google Drive - Got 0 files' metadatas
[2020-05-02T18:13:44.102] [INFO] Importer: GD 1 - Got info.json file list
[2020-05-02T18:13:44.102] [INFO] Importer: GD 1 - All Promise settled
[2020-05-02T18:13:44.102] [INFO] Importer: Main - [1] First time import process fininshed
[2020-05-02T18:13:44.102] [DEBUG] Importer: Main - [1] Cron set, 36000000ms
[2020-05-02T18:18:52.141] [DEBUG] Module: Cache - [api_checktoken_sjdkfgho9we84yt98w7yhtguierhbgu93oh578gwijhgnwo5] Cache missed, creating one
[2020-05-02T18:18:52.142] [DEBUG] Module: User - Checking token sjdkfgho9we84yt98w7yhtguierhbgu93oh578gwijhgnwo5
[2020-05-02T18:18:52.166] [DEBUG] API: Main - [UID: 1] GET /api/auth/check
[2020-05-02T18:18:52.310] [DEBUG] API: Main - [UID: 1] GET /api/statistic/getData
[2020-05-02T18:18:52.311] [DEBUG] Module: Cache - [api_statistic] Cache missed, creating one
[2020-05-02T18:19:10.566] [DEBUG] Module: Cache - Expired cache api_statistic cleared
[2020-05-02T18:20:10.567] [DEBUG] Module: Cache - Expired cache api_checktoken_sjdkfgho9we84yt98w7yhtguierhbgu93oh578gwijhgnwo5 cleared

我觉得我需要等几天再看有没有数据了

@monsterxcn monsterxcn changed the title 希望更详细一点的 Workers & GoogleDrive 配置描述 希望更详细一点的 Workers & Fetcher 配置描述 May 2, 2020
@LynMoe
Copy link
Contributor

LynMoe commented May 2, 2020

Unknown database 'javclub' 写得挺明白了的吧...

数据的话你就等fetcher处理完第一个种子然后把sync目录里面的所有东西上传到网盘里就可以了

@monsterxcn
Copy link
Author

monsterxcn commented May 4, 2020

数据库的问题我已经检查了,那个找不到数据库应该是之前启动的时候没有先启动 lemp ,日志也记录了我没删。后来我清空日志重新编排了容器,core 日志中没有数据库的报错了。现在数据库是没问题的了,但 fetcher 对 http://qbittorrent:8585/api/v2/torrents/createCategory 发起请求的响应一直都是 409 错误。fetcher/tmp 的 downloads sync 目录下无内容。fetcher 的日志内容如下:

2020-05-04T03:14:33.511655019Z [2020-05-04T03:14:33.511] [DEBUG] Handle: Init - [Check torrent status] Starting job
2020-05-04T03:14:33.511721393Z [2020-05-04T03:14:33.511] [INFO] Module: Qbittorrent - Getting torrent list
2020-05-04T03:14:33.511946559Z [2020-05-04T03:14:33.511] [DEBUG] Module: Qbittorrent - GET /api/v2/torrents/info?limit=5&category=JAVClub&filter=paused&sort=completion_on&reverse=true
2020-05-04T03:14:33.512026522Z [2020-05-04T03:14:33.511] [DEBUG] Module: Qbittorrent - GET data:  {
2020-05-04T03:14:33.512043878Z   method: 'GET',
2020-05-04T03:14:33.512048181Z   headers: { Cookie: 'SID=RLNLgyGTTFfwgbhrwK1mxm/WD8o520p1' }
2020-05-04T03:14:33.512051822Z }
2020-05-04T03:14:33.512673306Z [2020-05-04T03:14:33.512] [DEBUG] Pull: Init - [Download queue] Starting job
2020-05-04T03:14:33.512932456Z [2020-05-04T03:14:33.512] [INFO] Module: Qbittorrent - Adding category JAVClub
2020-05-04T03:14:33.512945841Z [2020-05-04T03:14:33.512] [DEBUG] Module: Qbittorrent - POST /api/v2/torrents/createCategory
2020-05-04T03:14:33.512949872Z [2020-05-04T03:14:33.512] [DEBUG] Module: Qbittorrent - POST data:  {
2020-05-04T03:14:33.512953383Z   method: 'POST',
2020-05-04T03:14:33.512956633Z   body: URLSearchParams { 'category' => 'JAVClub', 'savePath' => 'JAVClub' },
2020-05-04T03:14:33.512960156Z   headers: { Cookie: 'SID=RLNLgyGTTFfwgbhrwK1mxm/WD8o520p1' }
2020-05-04T03:14:33.512963567Z }
2020-05-04T03:14:33.514702086Z [2020-05-04T03:14:33.514] [DEBUG] Module: Qbittorrent - GET response body []
2020-05-04T03:14:33.514733031Z [2020-05-04T03:14:33.514] [INFO] Handle: Init - [Check torrent status] Job finished, setting timer
2020-05-04T03:14:33.515114865Z [2020-05-04T03:14:33.514] [DEBUG] Module: Qbittorrent - POST response body Response {
2020-05-04T03:14:33.515130150Z   size: 0,
2020-05-04T03:14:33.515133741Z   timeout: 0,
2020-05-04T03:14:33.515136768Z   [Symbol(Body internals)]: {
2020-05-04T03:14:33.515139857Z     body: PassThrough {
2020-05-04T03:14:33.515143100Z       _readableState: [ReadableState],
2020-05-04T03:14:33.515146238Z       readable: true,
2020-05-04T03:14:33.515149235Z       _events: [Object: null prototype],
2020-05-04T03:14:33.515152063Z       _eventsCount: 2,
2020-05-04T03:14:33.515155032Z       _maxListeners: undefined,
2020-05-04T03:14:33.515157889Z       _writableState: [WritableState],
2020-05-04T03:14:33.515160789Z       writable: false,
2020-05-04T03:14:33.515163850Z       allowHalfOpen: true,
2020-05-04T03:14:33.515166993Z       _transformState: [Object],
2020-05-04T03:14:33.515183965Z       [Symbol(kCapture)]: false
2020-05-04T03:14:33.515186803Z     },
2020-05-04T03:14:33.515189282Z     disturbed: false,
2020-05-04T03:14:33.515191784Z     error: null
2020-05-04T03:14:33.515194301Z   },
2020-05-04T03:14:33.515196867Z   [Symbol(Response internals)]: {
2020-05-04T03:14:33.515199464Z     url: 'http://qbittorrent:8585/api/v2/torrents/createCategory',
2020-05-04T03:14:33.515202315Z     status: 409,
2020-05-04T03:14:33.515204848Z     statusText: 'Conflict',
2020-05-04T03:14:33.515207521Z     headers: Headers { [Symbol(map)]: [Object: null prototype] },
2020-05-04T03:14:33.515210292Z     counter: 0
2020-05-04T03:14:33.515212858Z   }
2020-05-04T03:14:33.515215354Z }
2020-05-04T03:14:33.515219700Z [2020-05-04T03:14:33.515] [INFO] Pull: Init - [Download queue] Job finished, setting timer

不知道是否和我的容器网络桥接有关,此时我的 fetcher 和 qbittorrent 同时存在于 javclub_lemp_defaultjavclub_fetcher_default 网络中, docker network 如下:

root@msvultr2020:~# docker network ls
NETWORK ID          NAME                      DRIVER              SCOPE
a5eb30cf6dee        bridge                    bridge              local
732bcdad4481        host                      host                local
4f07216d6714        javclub_fetcher_default   bridge              local
e67609173e19        javclub_lemp_default      bridge              local
3a4e5788bcb4        none                      null                local
root@msvultr2020:~# docker network inspect javclub_fetcher_default
[
    {
        "Name": "javclub_fetcher_default",
        "Id": "4f07216d671467e46919eb16d5b21981e38afc0d8d070c7ea92ee6c7f7b80f4d",
        "Created": "2020-05-01T11:51:27.505918288Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "186de75ba4d8ad8be838c7abfa1635ffd870928ab25196ea9aec7b4f358c54f9": {
                "Name": "fetcher",
                "EndpointID": "aba7bd94f378ef481043ac75b2acede8b1109e50767aa448f7ef54b02959522f",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            },
            "8829e3f2dcc97a77fd415a9fbe892ce25ca0b5302b4292754a026bae2607a769": {
                "Name": "qbittorrent",
                "EndpointID": "d6b9e07b5e440d4ad1f9a5636f8b57d61f9f52734b5a40febf90fc0b3e520df7",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]
root@msvultr2020:~# docker network inspect javclub_lemp_default
[
    {
        "Name": "javclub_lemp_default",
        "Id": "e67609173e191ed009190f3692c1eb9ec2377492c009fe3440fc709df97fed3a",
        "Created": "2020-05-01T12:25:23.425133701Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.19.0.0/16",
                    "Gateway": "172.19.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "0920253567cad31a1a4538b3f392813d2385daaf75b0c7af2596963e79895f4a": {
                "Name": "javclub_lemp_php-fpm_1",
                "EndpointID": "e3e28dbc001c1e2223374fdf24c034aed5ad944d350a0551c1e97dd914d91266",
                "MacAddress": "02:42:ac:13:00:06",
                "IPv4Address": "172.19.0.6/16",
                "IPv6Address": ""
            },
            "186de75ba4d8ad8be838c7abfa1635ffd870928ab25196ea9aec7b4f358c54f9": {
                "Name": "fetcher",
                "EndpointID": "e66fdb9adcadc36b7d93b0a08b78403d6dd210c80a8658470a663c66692a19ba",
                "MacAddress": "02:42:ac:13:00:02",
                "IPv4Address": "172.19.0.2/16",
                "IPv6Address": ""
            },
            "41556a6d0a3e53e37c0923f6089f42088e6892fb58f940f179641ba49b63cdef": {
                "Name": "javclub_lemp_nginx_1",
                "EndpointID": "abf62e1f5ffeb53363814fd7a9cb988eb01b715d2dfb63c0fd8b65bf7b9e8445",
                "MacAddress": "02:42:ac:13:00:07",
                "IPv4Address": "172.19.0.7/16",
                "IPv6Address": ""
            },
            "607adedbb599b34c4c678a1e02bbd8efb051cd571d605c1a85d71205acfb9bfa": {
                "Name": "javclub_lemp_redis_1",
                "EndpointID": "a0d97fe555af900c1debcc51992b15fb5d3b9215b0b8fec2c9d3687282eddc86",
                "MacAddress": "02:42:ac:13:00:08",
                "IPv4Address": "172.19.0.8/16",
                "IPv6Address": ""
            },
            "8829e3f2dcc97a77fd415a9fbe892ce25ca0b5302b4292754a026bae2607a769": {
                "Name": "qbittorrent",
                "EndpointID": "bd5dc1e32df48cb046d52ce9d726a616c406011e09fdc900cc643bab3c5eb1e2",
                "MacAddress": "02:42:ac:13:00:04",
                "IPv4Address": "172.19.0.4/16",
                "IPv6Address": ""
            },
            "962e1c888897ac6bef0327203875820a2ab2e2e091ecc839a5146c28d338ae9a": {
                "Name": "javclub_lemp_mysql_1",
                "EndpointID": "9ae7b1f317bfabbe7b4afcfbaa534de54b6af7e9f51ae3d7a4ec614b68fca93f",
                "MacAddress": "02:42:ac:13:00:05",
                "IPv4Address": "172.19.0.5/16",
                "IPv6Address": ""
            },
            "c45050da45070bebea7d089812db4ebef6290dd7f15642876fbd7e0902febe5d": {
                "Name": "javclub_lemp_phpmyadmin_1",
                "EndpointID": "eeeb39627228ebfcb1826d21c4a98f1a39084fa21f9a5e27c3b8ab22c37c013b",
                "MacAddress": "02:42:ac:13:00:09",
                "IPv4Address": "172.19.0.9/16",
                "IPv6Address": ""
            },
            "e928dcbda9fad17296a33ba54c6c1a697a01631fd10a788765158c76cc0f6b50": {
                "Name": "javclub_core_core_1",
                "EndpointID": "6d1934faa8bf7677ac072f90768f7c116a277c3b820146b247d8470a1bad9ec8",
                "MacAddress": "02:42:ac:13:00:03",
                "IPv4Address": "172.19.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "javclub_lemp",
            "com.docker.compose.version": "1.25.4"
        }
    }
]

我尝试将 fetcher 和 qbittorrent 容器从 javclub_lemp_default 网络中剥离,让他俩只存在于 javclub_fetcher_default 网络中,但是依旧失败,刚开始日志报了一个 409 ,后来都是 403 响应,fetcher 日志如下:

[2020-05-04T03:34:32.528] [DEBUG] Handle: Init - [Check torrent status] Starting job
[2020-05-04T03:34:32.534] [INFO] Module: Qbittorrent - Getting torrent list
[2020-05-04T03:34:32.534] [DEBUG] Module: Qbittorrent - GET /api/v2/torrents/info?limit=5&category=JAVClub&filter=paused&sort=completion_on&reverse=true
[2020-05-04T03:34:32.575] [DEBUG] Pull: Init - [Download queue] Starting job
[2020-05-04T03:34:32.576] [INFO] Module: Qbittorrent - Adding category JAVClub
[2020-05-04T03:34:32.577] [DEBUG] Module: Qbittorrent - POST /api/v2/torrents/createCategory
[2020-05-04T03:34:32.630] [DEBUG] Pull: Init - Remote list [
  { driver: 'OneJAV', url: 'https://onejav.com/new/' },
  { driver: 'OneJAV', url: 'https://onejav.com/popular/' },
  { driver: 'OneJAV', url: 'https://onejav.com/random/' }
]
[2020-05-04T03:34:32.859] [DEBUG] Module: Qbittorrent - Auth body: Ok.
[2020-05-04T03:34:32.860] [INFO] Module: Qbittorrent - Cookie: SID=Ys3jgOC0uEuC/Kzgz3mtVbQt4Rr0HQkP
[2020-05-04T03:34:32.860] [DEBUG] Module: Qbittorrent - GET data:  {
  method: 'GET',
  headers: { Cookie: 'SID=Ys3jgOC0uEuC/Kzgz3mtVbQt4Rr0HQkP' }
}
[2020-05-04T03:34:32.862] [DEBUG] Module: Qbittorrent - Auth body: Ok.
[2020-05-04T03:34:32.863] [INFO] Module: Qbittorrent - Cookie: SID=TOhsOgyGUOfPB+Ra0qvdyw57AKuuIW01
[2020-05-04T03:34:32.863] [DEBUG] Module: Qbittorrent - POST data:  {
  method: 'POST',
  body: URLSearchParams { 'category' => 'JAVClub', 'savePath' => 'JAVClub' },
  headers: { Cookie: 'SID=TOhsOgyGUOfPB+Ra0qvdyw57AKuuIW01' }
}
[2020-05-04T03:34:32.867] [DEBUG] Module: Qbittorrent - GET response body []
[2020-05-04T03:34:32.868] [INFO] Handle: Init - [Check torrent status] Job finished, setting timer
[2020-05-04T03:34:32.869] [DEBUG] Module: Qbittorrent - POST response body Response {
  size: 0,
  timeout: 0,
  [Symbol(Body internals)]: {
    body: PassThrough {
      _readableState: [ReadableState],
      readable: true,
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      _writableState: [WritableState],
      writable: false,
      allowHalfOpen: true,
      _transformState: [Object],
      [Symbol(kCapture)]: false
    },
    disturbed: false,
    error: null
  },
  [Symbol(Response internals)]: {
    url: 'http://qbittorrent:8585/api/v2/torrents/createCategory',
    status: 409,
    statusText: 'Conflict',
    headers: Headers { [Symbol(map)]: [Object: null prototype] },
    counter: 0
  }
}
[2020-05-04T03:34:32.870] [INFO] Pull: Init - [Download queue] Job finished, setting timer
[2020-05-04T03:35:32.915] [DEBUG] Handle: Init - [Check torrent status] Starting job
[2020-05-04T03:35:32.915] [INFO] Module: Qbittorrent - Getting torrent list
[2020-05-04T03:35:32.915] [DEBUG] Module: Qbittorrent - GET /api/v2/torrents/info?limit=5&category=JAVClub&filter=paused&sort=completion_on&reverse=true
[2020-05-04T03:35:32.916] [DEBUG] Module: Qbittorrent - GET data:  {
  method: 'GET',
  headers: { Cookie: 'SID=TOhsOgyGUOfPB+Ra0qvdyw57AKuuIW01' }
}
[2020-05-04T03:35:32.917] [DEBUG] Pull: Init - [Download queue] Starting job
[2020-05-04T03:35:32.917] [INFO] Module: Qbittorrent - Adding category JAVClub
[2020-05-04T03:35:32.917] [DEBUG] Module: Qbittorrent - POST /api/v2/torrents/createCategory
[2020-05-04T03:35:32.917] [DEBUG] Module: Qbittorrent - POST data:  {
  method: 'POST',
  body: URLSearchParams { 'category' => 'JAVClub', 'savePath' => 'JAVClub' },
  headers: { Cookie: 'SID=TOhsOgyGUOfPB+Ra0qvdyw57AKuuIW01' }
}
[2020-05-04T03:35:32.921] [ERROR] Handle: Init - [Check torrent status] Job threw an error FetchError: invalid json response body at http://qbittorrent:8585/api/v2/torrents/info?limit=5&category=JAVClub&filter=paused&sort=completion_on&reverse=true reason: Unexpected end of JSON input
    at /usr/app/node_modules/node-fetch/lib/index.js:272:32
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
    at async Qbittorrent.sendRequest (/usr/app/src/module/qbittorrent.js:57:31)
    at async Qbittorrent.getTorrentList (/usr/app/src/module/qbittorrent.js:69:24)
    at async process (/usr/app/src/handle/init.js:25:25)
    at async /usr/app/src/handle/init.js:128:5
    at async runAndSetInterval (/usr/app/src/handle/init.js:13:9) {
  message: 'invalid json response body at http://qbittorrent:8585/api/v2/torrents/info?limit=5&category=JAVClub&filter=paused&sort=completion_on&reverse=true reason: Unexpected end of JSON input',
  type: 'invalid-json'
}
[2020-05-04T03:35:32.922] [INFO] Handle: Init - [Check torrent status] Job finished, setting timer
[2020-05-04T03:35:32.915] [DEBUG] Handle: Init - [Check torrent status] Starting job
[2020-05-04T03:35:32.915] [INFO] Module: Qbittorrent - Getting torrent list
[2020-05-04T03:35:32.915] [DEBUG] Module: Qbittorrent - GET /api/v2/torrents/info?limit=5&category=JAVClub&filter=paused&sort=completion_on&reverse=true
[2020-05-04T03:35:32.916] [DEBUG] Module: Qbittorrent - GET data:  {
  method: 'GET',
  headers: { Cookie: 'SID=TOhsOgyGUOfPB+Ra0qvdyw57AKuuIW01' }
}
[2020-05-04T03:35:32.917] [DEBUG] Pull: Init - [Download queue] Starting job
[2020-05-04T03:35:32.917] [INFO] Module: Qbittorrent - Adding category JAVClub
[2020-05-04T03:35:32.917] [DEBUG] Module: Qbittorrent - POST /api/v2/torrents/createCategory
[2020-05-04T03:35:32.917] [DEBUG] Module: Qbittorrent - POST data:  {
  method: 'POST',
  body: URLSearchParams { 'category' => 'JAVClub', 'savePath' => 'JAVClub' },
  headers: { Cookie: 'SID=TOhsOgyGUOfPB+Ra0qvdyw57AKuuIW01' }
}
[2020-05-04T03:35:32.921] [ERROR] Handle: Init - [Check torrent status] Job threw an error FetchError: invalid json response body at http://qbittorrent:8585/api/v2/torrents/info?limit=5&category=JAVClub&filter=paused&sort=completion_on&reverse=true reason: Unexpected end of JSON input
    at /usr/app/node_modules/node-fetch/lib/index.js:272:32
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
    at async Qbittorrent.sendRequest (/usr/app/src/module/qbittorrent.js:57:31)
    at async Qbittorrent.getTorrentList (/usr/app/src/module/qbittorrent.js:69:24)
    at async process (/usr/app/src/handle/init.js:25:25)
    at async /usr/app/src/handle/init.js:128:5
    at async runAndSetInterval (/usr/app/src/handle/init.js:13:9) {
  message: 'invalid json response body at http://qbittorrent:8585/api/v2/torrents/info?limit=5&category=JAVClub&filter=paused&sort=completion_on&reverse=true reason: Unexpected end of JSON input',
  type: 'invalid-json'
}
[2020-05-04T03:35:32.922] [INFO] Handle: Init - [Check torrent status] Job finished, setting timer
[2020-05-04T03:35:32.922] [DEBUG] Module: Qbittorrent - POST response body Response {
  size: 0,
  timeout: 0,
  [Symbol(Body internals)]: {
    body: PassThrough {
      _readableState: [ReadableState],
      readable: true,
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      _writableState: [WritableState],
      writable: false,
      allowHalfOpen: true,
      _transformState: [Object],
      [Symbol(kCapture)]: false
    },
    disturbed: false,
    error: null
  },
  [Symbol(Response internals)]: {
    url: 'http://qbittorrent:8585/api/v2/torrents/createCategory',
    status: 403,
    statusText: 'Forbidden',
    headers: Headers { [Symbol(map)]: [Object: null prototype] },
    counter: 0
  }
}
[2020-05-04T03:35:32.923] [INFO] Pull: Init - [Download queue] Job finished, setting timer

不知道是哪里的问题...

@monsterxcn monsterxcn reopened this May 4, 2020
@LynMoe
Copy link
Contributor

LynMoe commented May 4, 2020

因为没法判断是否已存在分类 JAVClub 所以每次都会尝试创建一个分类, 如果已存在就会返回 409, 这个不用在意
以及 fetcher/qBittorrent 和 core 是完全没有关系的, 可以当两个东西来看, 不需要放在同一个网络里面

看日志的话应该是 qBittorrent 端的相应不符合预期, 可以检查一下 qBittorrent 里面是否存在 JAVClub 这个分类以及贴一下你拉取的 qBittorrent 版本吗


发现文档中漏了一个很重要的东西, 可以加上再试试

{
            "driver": "RSS",
            "type": "MT",
            "url": "https://pt.m-team.cc/torrentrss.php?https=1&rows=30&cat410=1&isize=1&search=-&search_mode=1&linktype=dl&passkey=",
            "interval": 300
}

interval 是轮询延时, 以秒为单位

@LynMoe
Copy link
Contributor

LynMoe commented May 4, 2020

参照 JAVClub/fetcher@2aa57c0

因为 qBittorrent 还在快速迭代期, 所以 API 在疯狂变动, 为了避免麻烦这里钦定 4.2.1 版本(即 web API 版本为 2.4 的版本), 请升/降级到指定版本使用

如果使用 Docker 部署可以拉取最新的 docker-compose.yaml

@monsterxcn
Copy link
Author

之前拉取的是 qbittorrent 是最新版本的。

root@msvultr2020:~# docker image ls
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
linuxserver/qbittorrent   latest              c77db2e3af22        5 days ago          333MB

检查一下 qBittorrent 里面是否存在 JAVClub 这个分类

这个分类如果是个叫 JAVClub 的文件夹的话,那没有


nice! 换了版本现在看起来没什么问题了。fetcher 日志中只有 409 了。

@LynMoe
Copy link
Contributor

LynMoe commented May 4, 2020

好的,要是成功部署的话还请发个喜报(不是)让我知道这玩意儿能用hhhh

@monsterxcn
Copy link
Author

会的 嘿嘿 (怎么会不能用呢

@LynMoe LynMoe added the good first issue Good for newcomers label Jul 25, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

2 participants