# 🐞 НС ΡˆΡ‚ΠΎΡ€ΠΌΠΈΡ‚ΡŒ ERROR ΠΏΡ€ΠΈ нСдоступном qBittorrent ΠΈ ΡΡΠΊΠ°Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ устойчивый сбой Ρ‚ΠΈΠΊΠ° - **Π’ΠΈΠΏ:** fix - **ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ:** Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° - **Π—Π°Ρ‡Π΅ΠΌ:** ΠžΡΡ‚Π°Ρ‚ΠΎΠΊ Π·Π°Π΄Π°Ρ‡ΠΈ логирования: ext.* ERROR-ΡˆΡ‚ΠΎΡ€ΠΌ ΠΏΡ€ΠΈ нСдоступном qBittorrent + эскалация устойчивого сбоя Ρ‚ΠΈΠΊΠ° _(Ρ€Π΅Π²ΡŒΡŽ Fable)_ - **Π’Π΅Π³ΠΈ:** goal:operational-resilience ΠžΡΡ‚Π°Ρ‚ΠΎΠΊ ΠΎΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ «классификация Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹Ρ… ошибок + ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΈ логирования» (основноС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ, см. Π½ΠΈΠΆΠ΅). Π—Π΄Π΅ΡΡŒ β€” Π΄Π²Π° смСТных ΠΏΡƒΠ½ΠΊΡ‚Π° ΠΏΡ€ΠΎ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ сбоСв Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ нСбольшого Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π°Π²ΠΊΠΈ. ## Π§Ρ‚ΠΎ ΡƒΠΆΠ΅ сдСлано (Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ) ΠšΠΎΠΌΠΌΠΈΡ‚ `f8fb4fa` (Tier A) + ΠΊΠΎΠΌΠΌΠΈΡ‚ этой Π·Π°Π΄Π°Ρ‡ΠΈ Π·Π°ΠΊΡ€Ρ‹Π»ΠΈ: - **ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹Ρ… ошибок:** sentinel `worker.ErrInvalidInput`β†’400; ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΈ `ErrConflict` Π² Cancel/Retry/Defer/Undo; `layout.ErrCollision`β†’409 Π² `classifyErr` ΠΈ Π²Π΅Ρ‚ΠΊΠ° Π² tgbot; `logCmd` относит Π½ΠΎΠ²Ρ‹Π΅ классы Π² DEBUG. - **ΠšΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΈ:** `logging.md` β€” ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π²ΠΎΡ€ΠΊΠ΅Ρ€Π° = домСнная Π³Ρ€Π°Π½ΠΈΡ†Π°, Ρ‚Π°Π±Π»ΠΈΡ†Π° ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΡ‚ΠΊΠ°Π·ΠΎΠ² (Π³Ρ€Π°Π½ΠΈΡ†Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ vs асинхронная стадия), ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΏΡ€ΠΎ `*url.Error`/сСкрСты Π² URL, ΠΊΠ°Π½ΠΎΠ½ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ `state transition` (ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ cancel/retry/relink/recovery). `errors.md` β€” Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° ΠΎΡˆΠΈΠ±ΠΊΠ°β†’ΡΡ‚Π°Ρ‚ΡƒΡ, Ρ€Π°Π·Π²ΠΈΠ»ΠΊΠ° Β«Ρ‚Ρ€Π°Π½Π·ΠΈΠ΅Π½Ρ‚Π½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ vs пСрсистСнтная диагностика» Ρ€Π΅ΡˆΠ΅Π½Π° ΠΊΠ°ΠΊ (Π°): `error_msg`/`reasons` β€” опСраторская ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° (сырой тСкст ΠΎΠΊ, сСкрСты Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹; Π°ΡƒΠ΄ΠΈΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Π», Ρ‡Ρ‚ΠΎ сСкрСты Ρ‚ΡƒΠ΄Π° Π½Π΅ Ρ‚Π΅ΠΊΡƒΡ‚). - **ΠœΠ΅Π»ΠΎΡ‡ΠΈ:** reason-ΠΊΠΎΠ΄Ρ‹ const-Π±Π»ΠΎΠΊ; Π»ΠΎΠ³-поля `id`β†’`download_id`; preview WARN; ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Ρƒ `parseIgnored`. ## ΠžΡΡ‚Π°Ρ‚ΠΎΠΊ ### ERROR-ΡˆΡ‚ΠΎΡ€ΠΌ ΠΏΡ€ΠΈ нСдоступном qBittorrent ΠšΠ»ΠΈΠ΅Π½Ρ‚ `qbt` Π»ΠΎΠ³ΠΈΡ€ΡƒΠ΅Ρ‚ `ext.*` `Failure` β†’ **ERROR** Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ‚ΠΈΠΊΠ΅ ΠΏΠΎΠ»Π»ΠΈΠ½Π³Π° (`torrents/info`, `internal/qbt/qbt.go`), ΠΏΠΎΠΊΠ° qBittorrent нСдоступСн (рСстарт Π΄Π΅ΠΌΠΎΠ½Π°, ΡΠ΅Ρ‚ΡŒ). Π”ΠΎΠΌΠ΅Π½ ΡƒΠΆΠ΅ ΠΏΠΈΡˆΠ΅Ρ‚ `poll failed` = WARN (ΠΏΠΎ Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΈ), Π½ΠΎ транспортная `ext.*`-запись остаётся ERROR ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ ext-ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΈ («сСрвис нСдоступСн β†’ ERRORΒ»). ΠŸΡ€ΠΈ частом ΠΏΠΎΠ»Π»ΠΈΠ½Π³Π΅ это ΡˆΡƒΠΌΠΈΡ‚. Π Π°Π·Π²ΠΈΠ»ΠΊΠ° (Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π΄ΠΎ ΠΏΡ€Π°Π²ΠΊΠΈ): - (Π°) ВвСсти Ρƒ `logging.ExtCall` Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с ΠΏΠΎΠ½ΠΈΠΆΠ΅Π½Π½Ρ‹ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ для Ρ€ΡƒΡ‚ΠΈΠ½Π½ΠΎ-частых Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² (симмСтрично `SuccessDebug`) β€” ΠΏΠΎΠ»Π»ΠΈΠ½Π³-Π²Ρ‹Π·ΠΎΠ²Ρ‹ (`torrents/info`) Π½Π° Ρ‚Ρ€Π°Π½Π·ΠΈΠ΅Π½Ρ‚Π½ΠΎΠΌ сбоС ΠΏΠΈΡˆΡƒΡ‚ WARN, Π½Π΅ ERROR; - (Π±) Π”Π΅Π΄ΡƒΠΏ/circuit-breaker: ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ERROR, дальшС Ρ‚ΠΈΡˆΠΈΠ½Π° Π΄ΠΎ восстановлСния; - (Π²) ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ, ΠΏΡ€ΠΈΠ·Π½Π°Π² `ext.*` ERROR Π»Π΅Π³ΠΈΡ‚ΠΈΠΌΠ½Ρ‹ΠΌ сигналом Β«Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π»Π΅ΠΆΠΈΡ‚Β» (Ρ‚ΠΎΠ³Π΄Π° ΡˆΡƒΠΌ Π³Π°ΡΠΈΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΌ сбора, Π° Π½Π΅ ΠΊΠΎΠ΄ΠΎΠΌ). ### Эскалация устойчивого сбоя Ρ‚ΠΈΠΊΠ° БСйчас Ρ‚Ρ€Π°Π½Π·ΠΈΠ΅Π½Ρ‚Π½Ρ‹ΠΉ сбой Ρ‚ΠΈΠΊΠ° = WARN всСгда. Π”ΠΎΠ³ΠΎΠ²ΠΎΡ€Ρ‘Π½Π½ΠΎΡΡ‚ΡŒ Π½Π° Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ (`logging.md`): устойчивый сбой N Ρ‚ΠΈΠΊΠΎΠ² подряд ΡΡΠΊΠ°Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² ERROR (Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ дСградация, Π° Π½Π΅ Ρ€Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠΌΠ°Ρ…). НС Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ β€” Π½ΡƒΠΆΠ΅Π½ счётчик подряд-сбоСв ΠΏΠΎ Ρ†ΠΈΠΊΠ»Ρƒ ΠΈ ΠΏΠΎΡ€ΠΎΠ³ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³Π΅. Π’Π΅Ρ€Π΄ΠΈΠΊΡ‚: мСлкая надёТностная ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ°, Π½Π΅ Π±Π»ΠΎΠΊΠ΅Ρ€. Π”Π΅Π»Π°Ρ‚ΡŒ вмСстС (ΠΎΠ±Π΅ ΠΏΡ€ΠΎ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ сбоСв Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ²) ΠΈΠ»ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ строкой.