From db294901011c906c665ca5ed4d4c4451caabe325 Mon Sep 17 00:00:00 2001 From: RandomNinjaAtk Date: Sat, 8 Jul 2023 13:32:34 -0400 Subject: [PATCH] Create InvalidSeriesAutoCleaner.service --- sonarr/InvalidSeriesAutoCleaner.service | 96 +++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 sonarr/InvalidSeriesAutoCleaner.service diff --git a/sonarr/InvalidSeriesAutoCleaner.service b/sonarr/InvalidSeriesAutoCleaner.service new file mode 100644 index 0000000..60c1b67 --- /dev/null +++ b/sonarr/InvalidSeriesAutoCleaner.service @@ -0,0 +1,96 @@ +#!/usr/bin/env bash +scriptVersion="1.0" + +getArrAppInfo () { + # Get Arr App information + if [ -z "$arrUrl" ] || [ -z "$arrApiKey" ]; then + arrUrlBase="$(cat /config/config.xml | xq | jq -r .Config.UrlBase)" + if [ "$arrUrlBase" == "null" ]; then + arrUrlBase="" + else + arrUrlBase="/$(echo "$arrUrlBase" | sed "s/\///g")" + fi + arrName="$(cat /config/config.xml | xq | jq -r .Config.InstanceName)" + arrApiKey="$(cat /config/config.xml | xq | jq -r .Config.ApiKey)" + arrPort="$(cat /config/config.xml | xq | jq -r .Config.Port)" + arrUrl="http://127.0.0.1:${arrPort}${arrUrlBase}" + fi +} + +verifyApiAccess () { + until false + do + arrApiTest="" + arrApiVersion="" + if [ "$arrName" == "Sonarr" ] || [ "$arrName" == "Radarr" ]; then + arrApiVersion="v3" + elif [ "$arrName" == "Lidarr" ] || [ "$arrName" == "Readarr" ]; then + arrApiVersion="v1" + fi + arrApiTest=$(curl -s "$arrUrl/api/$arrApiVersion/system/status?apikey=$arrApiKey" | jq -r .instanceName) + if [ "$arrApiTest" == "$arrName" ]; then + break + else + log "$arrName is not ready, sleeping until valid response..." + sleep 1 + fi + done +} + + +log () { + m_time=`date "+%F %T"` + echo $m_time" :: InvalidSeriesAutoCleaner :: $scriptVersion :: "$1 +} + +InvalidSeriesAutoCleanerProcess () { + # auto-clean up log file to reduce space usage + if [ -f "/config/logs/SeriesAutoDelete.txt" ]; then + find /config/logs -type f -name "InvalidSeriesAutoCleaner.txt" -size +1024k -delete + fi + + if [ ! -f "/config/logs/InvalidSeriesAutoCleaner.txt" ]; then + touch "/config/logs/InvalidSeriesAutoCleaner.txt" + chmod 666 "/config/logs/InvalidSeriesAutoCleaner.txt" + fi + exec &> >(tee -a "/config/logs/InvalidSeriesAutoCleaner.txt") + + # Get invalid series tvdb id's + seriesTvdbId="$(curl -s --header "X-Api-Key:"$arrApiKey --request GET "$arrUrl/api/v3/health" | jq -r '.[] | select(.source=="RemovedSeriesCheck") | select(.type=="error")' | grep "message" | grep -o '[[:digit:]]*')" + + if [ -z "$seriesTvdbId" ]; then + log "No invalid series (tvdbid) reported by Sonarr health check, skipping..." + exit + fi + + # Process each invalid series tvdb id + for tvdbId in $(echo $seriesTvdbId); do + seriesData="$(curl -s --header "X-Api-Key:"$arrApiKey --request GET "$arrUrl/api/v3/series" | jq -r ".[] | select(.tvdbId==$tvdbId)")" + seriesId="$(echo "$seriesData" | jq -r .id)" + seriesTitle="$(echo "$seriesData" | jq -r .title)" + seriesPath="$(echo "$seriesData" | jq -r .path)" + + log "$seriesId :: $seriesTitle :: $seriesPath :: Removing and deleting invalid Series (tvdbId: $tvdbId) based on Sonarr Health Check error..." + + # Send command to Sonarr to delete series and files + arrCommand=$(curl -s --header "X-Api-Key:"$arrApiKey --request DELETE "$arrUrl/api/v3/series/$seriesId?deleteFiles=true") + + + # trigger a plex scan to rmeove the deleted series + folderToScan="$(dirname "$seriesPath")" + log "Using PlexNotify.bash to update Plex.... ($folderToScan)" + bash /config/extended/scripts/PlexNotify.bash "$folderToScan" "true" + done +} + +echo "Starting Script...." +for (( ; ; )); do + let i++ + getArrAppInfo + verifyApiAccess + InvalidSeriesAutoCleanerProcess + echo "Script sleeping for 2 hours..." + sleep 2h +done + +exit