Skip to content

Instantly share code, notes, and snippets.

@TheMeanCanEHdian
Last active April 21, 2023 12:47
Show Gist options
  • Save TheMeanCanEHdian/4daaa6b653862673e24f12f6231afa26 to your computer and use it in GitHub Desktop.
Save TheMeanCanEHdian/4daaa6b653862673e24f12f6231afa26 to your computer and use it in GitHub Desktop.
import requests
from pushover import Client
# Settings
# URL example: "https://sonarr.domain.com" or "192.168.1.1:8989"
sonarr_url = ""
sonarr_api = ""
radarr_url = ""
radarr_api = ""
pushover_user_key = ""
pushover_api_key = ""
# End of settings
def call_api_queue(program, params=None):
if program == "radarr":
headers = {'X-Api-Key': radarr_api}
r = requests.get(radarr_url + '/api/v3/queue', headers=headers, params=params)
elif program == "sonarr":
headers = {'X-Api-Key': sonarr_api}
r = requests.get(sonarr_url + '/api/v3/queue', headers=headers, params=params)
else:
print ("API Error")
return False
return r.json()
def send_pushover_message(message, title, html=1, timestamp=True, user_key=pushover_user_key, api_key=pushover_api_key):
if user_key and api_key:
payload = {"message": message, "user": user_key, "token": api_key, "title": title }
r = requests.post('https://api.pushover.net/1/messages.json', data=payload, headers={'User-Agent': 'Python'}, params={"html": 1})
return r
# Radarr
radarr_errors = []
radarr_failed = False
try:
if radarr_url and radarr_api:
queue = call_api_queue('radarr', params={'includeUnknownMovieItems': True})
for movie in queue['records']:
try:
if movie['trackedDownloadStatus'] == 'warning':
radarr_errors.append({
'title' : movie['title'],
'reason' : movie['statusMessages'][0]['messages'][0]
})
print (f"Title: {movie['title']}")
print (f"Reason: {movie['statusMessages'][0]['messages'][0]}\n")
except KeyError:
pass
except:
radarr_failed = True
send_pushover_message(message='Failed to check Radarr Queue', title="Radarr Queue Alert")
# Sonarr
sonarr_errors = []
sonarr_failed = False
try:
if sonarr_url and sonarr_api:
queue = call_api_queue('sonarr')
for episode in queue['records']:
try:
if episode['trackedDownloadStatus'] == 'warning':
sonarr_errors.append({
'title' : episode['title'],
# 'title_episode' : episode['episode']['title'],
'reason' : episode['statusMessages'][0]['title']
})
print (f"Title: {episode['title']}")
print (f"Reason: {episode['statusMessages'][0]['title']}\n")
except KeyError:
pass
except:
sonarr_failed = True
send_pushover_message(message='Failed to check Sonarr Queue', title="Sonarr Queue Alert")
# Send Pushover messages
if not sonarr_failed:
if sonarr_errors:
sonarr_message = ""
for item in sonarr_errors:
sonarr_message+=f"<b>Title:</b> {item['title']}\n<b>Reason:</b> {item['reason']}\n\n"
send_pushover_message(message=sonarr_message, title="Sonarr Queue Alert")
else:
print ("No Sonarr errors")
else:
print ("Failed to check Sonarr queue")
if not radarr_failed:
if radarr_errors:
radarr_message = ""
for item in radarr_errors:
radarr_message+=f"<b>Title:</b> {item['title']}\n<b>Reason:</b> {item['reason']}\n\n"
send_pushover_message(message=radarr_message, title="Radarr Queue Alert")
else:
print ("No Radarr errors")
else:
print ("Failed to check Radarr queue")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment