Closed EffeF closed 6 months ago
Puรฒ essere legato a questo? Togliendo il monitorato da alcune serie con molti episodi da Sonarr, รจ tornato a funzionare.
Per caso il numero di episodi che a sonarr risultano
missing
, compresi anime e non, superano i 1000? Perchรจ avevo messo questo limite pensando di ottimizzare il numero di richieste, ma a quanto pare il limite รจ troppo basso ๐
Originally posted by @MainKronos in https://github.com/MainKronos/Sonarr-AnimeDownloader/issues/122#issuecomment-1760082897
Se devo essere sincero รจ la prima volta che vedo questo errore.... Ma il docker si blocca? Mi puoi allegare anche il docker-compose che hai usato?
No, il docker continua a funzionare perfettamente, solo continua mostrare l'errore senza scaricare niente ne fare altro.
Ecco il docker-compose:
Controlla se riesci a ottenere una risposta da:
http://{IP}:{PORT}/api/v3/wanted/missing?includeSeries=true
sostituendo IP
e PORT
con l'indirizzo ip e la porta di sonarr
inoltre prova la versione dev
e dimmi se cambia qualcosa.
Da questo no...
http://{IP}:{PORT}/api/v3/wanted/missing?includeSeries=true
ma da questo si
http://{IP}:{PORT}/api/v3/wanted/missing?includeSeries=true&apikey={API_KEY}
Comunque anche con la versione dev
avevo lo stesso problema (avevo provato ad aggiornare dopo aver letto l'issue #122)... al momento pero funziona la versione latest
, รจ bastato togliere il monitoraggio da alcune serie.
al momento pero funziona la versione
latest
, รจ bastato togliere il monitoraggio da alcune serie.
Ho appena provato a rimettere il monitoraggio ad alcuni anime portando il numero degli episodi mancanti sopra 1000, ed il problema si ripresenta, quindi credo che effettivamente il problema sia quello.
prova a passare alla versione dev
, l'ho appena aggiornata
prova a passare alla versione
dev
, l'ho appena aggiornata
Con tutti gli anime monitorati su Sonarr, non mostra piรน l'errore, ma comunque non funziona
Ho fatto alcune prove togliendo e mettendo il monitorato su Sonarr... riabbassando il numero di episodi mancanti sotto 1000 (da risposta API riportata sopra: "totalRecords": 957
) funziona perfettamente (come pure latest
del resto), ma sopra 1000 (da API: "totalRecords": 1976
), pur non mostrando l'errore ๐
ด๐๐๐
พ๐ timed out
, comunque non funziona, quindi evidentemente il problema c'รจ in entrambe le versioni.
Se puรฒ servire, dai log che vedo su Portainer, sono presenti questi errori:
Infatti c'รจ un problema con la richiesta api/wanted/missing
, il server Sonarr ci mette molto tempo a rispondere che fร scattare il timeout. Il timeout non รจ neanche troppo stretto, dovrebbe essere 5 secondi...
Prova a verificare, se riesci, che quando sonarr ha un numero superiore a 1000 episodi mancanti la risposta all'endpoint api/wanted/missing
supera i 5 secondi.
Nel mentre io provo a rendere meno restrittivo il timeout
Prova a verificare, se riesci, che quando sonarr ha un numero superiore a 1000 episodi mancanti la risposta all'endpoint
api/wanted/missing
supera i 5 secondi.
@MainKronos va bene verificato cosรฌ? Ci sono aggiornamenti sull'issue?
Si si, va benissimo. Scusami se non ti ho risposto ma in questo periodo sono un po' pieno di scadenze.
Comunque non sono ancora riuscito a capire come sia possibile che venga sollevato un timeout solo quando ci sono piรน di 1000 episodi mancanti. Attualmente il codice che scarica gli episodi mancanti da Sonarr รจ praticamente identico a quello che c'era prima della v2.0.0...
Non sono ancora riuscito a replicare il problema perchรฉ avere piรน di 1000 episodi mancanti รจ un po' complicato.
Quindi stavo aspettando se anche qualcun altro a avesse lo stesso problema
avere piรน di 1000 episodi mancanti รจ un po' complicato
Basta aggiungere One Piece o Detective Conan ๐
stavo aspettando se anche qualcun altro a avesse lo stesso problema
Nell'attesa, se serve, resto a disposizione per altre prove
Hai ragione, bastava aggiungere One Piece che sono piรน di mille episodi ๐. Comunque ho fatto dei test, sia con One Piece che Detective Conan, ma non sono riuscito a replicare il problema. Sei sicuro che si verifica sempre quando il numero di episodi รจ molto alto o รจ stato un caso? Anche se fosse un caso andrebbe analizzato il motivo, ma almeno avrei un idea....
Sei sicuro che si verifica sempre quando il numero di episodi รจ molto alto o รจ stato un caso?
La serie che mi faceva superare i 1000 episodi era One Piece, tolto il monitorato da essa funzionava, e visto anche che c'era un altro issue legato ai 1000 episodi ho dato per scontato fosse quello il problema... ma mi hai fatto venire il dubbio ed ho fatto delle prove.
Ho provato ad aggiungere altri anime a caso, al momento, senza One Piece, su Sonarr ho 3192 episodi mancanti, ben sopra i 1000, e funziona tutto perfettamente... ma appena rimetto il monitorato a One Piece ottengo di nuovo l'errore di time out.
Quindi a quanto pare il problema รจ One Piece ๐ค
Non so perchรฉ, ne quali altre prove potrei fare.
Questo รจ il codice (python) che scarica le informazioni relative agli episodi mancanti
from itertools import count
import requests
########################################################
SONARR_URL = "http://127.0.0.1:8080"
API_KEY = "abcdefghijklmnopqrs"
########################################################
missing = []
for page in count(1):
res = requests.get(f"{SONARR_URL}/api/v3/wanted/missing", params={
"includeSeries": True,
"pageSize": 20,
"page": page,
"sortKey": "airDateUtc",
"apikey": API_KEY
})
res.raise_for_status()
data = res.json()
if len(data["records"]) == 0: break
missing.extend(data['records'])
print(missing)
prova ad eseguirlo avendo anche One Piece monitorato su Sonarr. Vediamo se esplode o no.
[!NOTE]
Se non hai installata la libreriarequests
basta eseguire questo comandopip install requests
Vediamo se esplode o no.
Esplodere non esplode, arriva alla fine senza errori, ma sicuramente รจ molto lento.
mhhhhhh, allora non รจ che forse รจ httpx ad avere un problema....
riprova lo stesso script ma con la libreria httpx
from itertools import count
import httpx
########################################################
SONARR_URL = "http://127.0.0.1:8080"
API_KEY = "abcdefghijklmnopqrs"
########################################################
missing = []
for page in count(1):
res = httpx.get(f"{SONARR_URL}/api/v3/wanted/missing", params={
"includeSeries": True,
"pageSize": 20,
"page": page,
"sortKey": "airDateUtc",
"apikey": API_KEY
})
res.raise_for_status()
data = res.json()
if len(data["records"]) == 0: break
missing.extend(data['records'])
print(missing)
Con httpx
ottengo l'errore httpx.ReadTimeout: timed out
Se puรฒ servire, non so se รจ quella la causa del problema, la lentezza รจ data da "sortKey": "airDateUtc"
.
Giusto per mia curiositร ho modificato lo script iniziale con requests
per monitorarne la durata visto che ci metteva un sacco, senza quel parametro ci mette in totale 22.4822 secondi per ottenere i dati di 1961 episodi... con il parametro la bellezza di 653.0066 secondi ๐
La cosa strana รจ che ad ogni pagina la durata della singola richiesta aumenta, anche 10 secondi a richiesta... vedi sotto.
Comunque se devi recuperare tutti gli episodi mancanti credo non serva che siano in ordine di data, no?
Il parametro sortKey
era importante per il fatto che andava a condizionare l'ordine di download. Esempio pratico: Voglio scaricare tutto l'anime di Attack on Titan; senza l'ordinamento degli episodi essi verranno scaricati nell'ordine di come sonarr me li ha forniti, quindi prima di vedere il primo episodio dovrรฒ aspettare molto.
Perรฒ, visto che il tempo della risposta di sonarr aumenta di 2 ordini di grandezza, credo sia il caso di spostare l'ordinamento direttamente nel programma ๐
comunque proviamo a riscrivere il codice in questo modo:
import time
from itertools import count
import httpx
########################################################
SONARR_URL = "http://127.0.0.1:8080"
API_KEY = "abcdefghijklmnopqrs"
########################################################
start = time.perf_counter()
missing = []
for page in count(1):
res = httpx.get(f"{SONARR_URL}/api/v3/wanted/missing", params={
"includeSeries": True,
"pageSize": 20,
"page": page,
"apikey": API_KEY
}, timeout=None)
res.raise_for_status()
data = res.json()
if len(data["records"]) == 0: break
missing.extend(data['records'])
end = time.perf_counter() - start
print(f"{len(missing)} missing episodes")
print(f"{end:0.4f} seconds")
Dimmi se viene sollevata di nuovo l'eccezione, e visto che ci sei quanto tempo ci mette ๐
L'output รจ:
1961 missing episodes
67.2522 seconds
ok, quindi simo riusciti ad arrivare ad un risultato apprezzabile. La cosa interessante sarebbe riuscire a trovare un timeout per cui non esploda
Se hai un po'di tempo libero prova ad eseguire questo codice e dimmi che valore di t
esce fuori
from itertools import count
import httpx
########################################################
SONARR_URL = "http://127.0.0.1:8080"
API_KEY = "abcdefghijklmnopqrs"
########################################################
for t in count(3,2):
try:
missing = []
for page in count(1):
res = httpx.get(f"{SONARR_URL}/api/v3/wanted/missing", params={
"includeSeries": True,
"pageSize": 20,
"page": page,
"apikey": API_KEY
}, timeout=t)
res.raise_for_status()
data = res.json()
if len(data["records"]) == 0: break
missing.extend(data['records'])
except Exception:
continue
else:
print(f'timeout: {t}')
break
Se hai un po'di tempo libero prova ad eseguire questo codice e dimmi che valore di
t
esce fuori
timeout: 3
magnifico, allora ho messo un timeout di 5 secondi per avere un margine di tolleranza.
La versione dev
dovrebbe aver risolto il problema.
La versione
dev
dovrebbe aver risolto il problema.
Ho aggiornato, ed ho questo errore:
Sei sicuro di aver aggiornato l'immagine del docker?
docker pull ghcr.io/mainkronos/anime_downloader:dev
Si, ho dato esattamente quel comando, ho anche riprovato adesso a ricreare l'immagine, e confermo l'errore riportato nel precedente messaggio
hahahaha, questa cosa รจ davvero incomprensibile ๐. Non capisco cosa c'รจ che non funziona. Ripartiamo da questo frammento di codice (che รจ letteralmente il codice sorgente). Dimmi se funziona
import httpx
import time
from itertools import count
########################################################
SONARR_URL = "http://127.0.0.1:8080"
API_KEY = "abcdefghijklmnopqrs"
########################################################
class Sonarr:
def __init__(self, url:str, api_key:str) -> None:
self.url = url
self.api_key = api_key
self.client = httpx.Client(
base_url=f"{url}/api/v3",
headers={
'X-Api-Key':api_key
},
timeout=5
)
def wantedMissing(self, n:int=20, page:int=1) -> httpx.Response:
return self.client.get("/wanted/missing", params={
"includeSeries": True,
"pageSize": n,
"page": page,
})
sonarr = Sonarr(SONARR_URL, API_KEY)
missing = []
for page in count(1):
res = sonarr.wantedMissing(page=page)
res.raise_for_status()
data = res.json()
if len(data["records"]) == 0: break
missing.extend(data['records'])
print(f"{len(missing)} missing episodes")
Inizio a pensare che la libreria httpx abbia qualche problema
Dimmi se funziona
Funziona, restituisce il giusto numero di episodi mancanti senza alcun errore.
Dovrei aver risolto il problema (spero) con la nuova versione dev
Sembra risolto, adesso con tutti gli anime monitorati funziona tutto senza errori!
Livello di Errore:
๐ ด๐๐๐ พ๐
Messaggio di Errore
๐ ด๐๐๐ พ๐
timed outDescrizione
Dopo aver installato da zero non ha piรน funzionato, l'unica cosa che mostra la console di log รจ l'errore sopra riportato.
Log
Details
``` INFO [0;34mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ[28 Oct 2023 18:22:36]โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ[0m INFO [0;34mโ _ _____ _ _ โ[0m INFO [0;34mโ /\ (_) | __ \ | | | | โ[0m INFO [0;34mโ / \ _ __ _ _ __ ___ ___| | | | _____ ___ __ | | ___ __ _ __| | ___ _ __ โ[0m INFO [0;34mโ / /\ \ | '_ \| | '_ ` _ \ / _ \ | | |/ _ \ \ /\ / / '_ \| |/ _ \ / _` |/ _` |/ _ \ '__| โ[0m INFO [0;34mโ / ____ \| | | | | | | | | | __/ |__| | (_) \ V V /| | | | | (_) | (_| | (_| | __/ | โ[0m INFO [0;34mโ /_/ \_\_| |_|_|_| |_| |_|\___|_____/ \___/ \_/\_/ |_| |_|_|\___/ \__,_|\__,_|\___|_| โ[0m INFO [0;34mโ โ[0m INFO [0;34mโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ2.0.0โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ[0m INFO INFO Globals INFO โโโ ctx.SONARR_URL = โโโโโโโโโโโโโโโโโโโโโโโโโ INFO โโโ ctx.API_KEY = โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ DEBUG โโโ ctx.DOWNLOAD_FOLDER = /downloads DEBUG โโโ ctx.DATABASE_FOLDER = /src/database DEBUG โโโ ctx.SCRIPT_FOLDER = /src/script INFO โโโ ctx.VERSION = 2.0.0 INFO INFO Settings INFO โโโ TagsMode = BLACKLIST INFO โโโ ScanDelay = 30 INFO โโโ RenameEp = True INFO โโโ MoveEp = True INFO โโโ LogLevel = DEBUG INFO โโโ AutoBind = False INFO DEBUG Tags DEBUG โโโ 2 - tv (๐ข) DEBUG โโโ 8 - anime (๐ด) DEBUG โโโ 5 - aniplanrr (๐ด) DEBUG DEBUG Connections DEBUG โโโ Pushover - pushover.sh (๐ข) DEBUG INFO INFO ]โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ[ INFO INFO โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโใ28 Oct 2023 18:22:37ใโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ INFO ERROR [0;31m๐ ด๐๐๐ พ๐: timed out[0m INFO โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโใ28 Oct 2023 18:52:37ใโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ INFO ```