Varken/varken/radarr.py

129 lines
4.3 KiB
Python
Raw Normal View History

import logging
2018-12-04 08:45:18 -08:00
from requests import Session, Request
from datetime import datetime, timezone
from varken.helpers import hashit, connection_handler
from varken.structures import Movie, Queue
class RadarrAPI(object):
def __init__(self, server, dbmanager):
self.now = datetime.now(timezone.utc).astimezone().isoformat()
self.dbmanager = dbmanager
self.server = server
# Create session to reduce server web thread load, and globally define pageSize for all requests
self.session = Session()
self.session.headers = {'X-Api-Key': self.server.api_key}
self.logger = logging.getLogger()
2018-12-04 08:45:18 -08:00
def __repr__(self):
return "<radarr-{}>".format(self.server.id)
2018-12-04 08:45:18 -08:00
def get_missing(self):
endpoint = '/api/movie'
self.now = datetime.now(timezone.utc).astimezone().isoformat()
influx_payload = []
missing = []
req = self.session.prepare_request(Request('GET', self.server.url + endpoint))
get = connection_handler(self.session, req, self.server.verify_ssl)
if not get:
return
try:
movies = [Movie(**movie) for movie in get]
except TypeError as e:
2018-12-06 10:04:02 -08:00
self.logger.error('TypeError has occurred : %s while creating Movie structure', e)
return
2018-12-04 08:45:18 -08:00
for movie in movies:
if not movie.downloaded:
if movie.isAvailable:
ma = 0
2018-12-04 08:45:18 -08:00
else:
ma = 1
2018-12-04 08:45:18 -08:00
movie_name = '{} ({})'.format(movie.title, movie.year)
missing.append((movie_name, ma, movie.tmdbId))
for title, ma, mid in missing:
hash_id = hashit('{}{}{}'.format(self.server.id, title, mid))
influx_payload.append(
{
"measurement": "Radarr",
"tags": {
"Missing": True,
"Missing_Available": ma,
"tmdbId": mid,
"server": self.server.id,
"name": title
},
"time": self.now,
"fields": {
"hash": hash_id
}
}
)
self.dbmanager.write_points(influx_payload)
def get_queue(self):
endpoint = '/api/queue'
self.now = datetime.now(timezone.utc).astimezone().isoformat()
influx_payload = []
queue = []
req = self.session.prepare_request(Request('GET', self.server.url + endpoint))
get = connection_handler(self.session, req, self.server.verify_ssl)
if not get:
return
for movie in get:
try:
movie['movie'] = Movie(**movie['movie'])
except TypeError as e:
2018-12-06 10:04:02 -08:00
self.logger.error('TypeError has occurred : %s while creating Movie structure', e)
return
try:
download_queue = [Queue(**movie) for movie in get]
except TypeError as e:
2018-12-06 10:04:02 -08:00
self.logger.error('TypeError has occurred : %s while creating Queue structure', e)
return
2018-12-04 08:45:18 -08:00
for queue_item in download_queue:
2018-12-06 10:04:02 -08:00
movie = queue_item.movie
name = '{} ({})'.format(movie.title, movie.year)
2018-12-04 08:45:18 -08:00
if queue_item.protocol.upper() == 'USENET':
protocol_id = 1
else:
protocol_id = 0
queue.append((name, queue_item.quality['quality']['name'], queue_item.protocol.upper(),
protocol_id, queue_item.id))
2018-12-06 10:04:02 -08:00
for name, quality, protocol, protocol_id, qid in queue:
hash_id = hashit('{}{}{}'.format(self.server.id, name, quality))
2018-12-04 08:45:18 -08:00
influx_payload.append(
{
"measurement": "Radarr",
"tags": {
"type": "Queue",
"tmdbId": qid,
"server": self.server.id,
2018-12-06 10:04:02 -08:00
"name": name,
2018-12-04 08:45:18 -08:00
"quality": quality,
"protocol": protocol,
"protocol_id": protocol_id
},
"time": self.now,
"fields": {
"hash": hash_id
}
}
)
self.dbmanager.write_points(influx_payload)