added connection_handler for bad requests

This commit is contained in:
Nicholas St. Germain 2018-12-03 22:56:12 -06:00
parent 8907e9c8ed
commit 7277ee14f9
6 changed files with 111 additions and 20 deletions

View file

@ -4,7 +4,9 @@ import tarfile
import hashlib import hashlib
import geoip2.database import geoip2.database
from typing import NamedTuple from typing import NamedTuple
from json.decoder import JSONDecodeError
from os.path import abspath, join from os.path import abspath, join
from requests.exceptions import InvalidSchema, SSLError
from urllib.request import urlretrieve from urllib.request import urlretrieve
@ -371,3 +373,31 @@ def hashit(string):
hashed = hashlib.md5(encoded).hexdigest() hashed = hashlib.md5(encoded).hexdigest()
return hashed return hashed
def connection_handler(session, request, verify):
s = session
r = request
v = verify
return_json = False
try:
get = s.send(r, verify=v)
if get.status_code == 401:
print("Your api key is incorrect for {}".format(r.url))
elif get.status_code == 404:
print("This url doesnt even resolve: {}".format(r.url))
elif get.status_code == 200:
try:
return_json = get.json()
except JSONDecodeError:
print("No JSON response... BORKED! Let us know in discord")
except InvalidSchema:
print("You added http(s):// in the config file. Don't do that.")
except SSLError as e:
print("Either your host is unreachable or you have an ssl issue.")
print("The issue was: {}".format(e))
return return_json

View file

@ -60,6 +60,8 @@ class INIParser(object):
apikey = self.config.get(sonarr_section, 'apikey') apikey = self.config.get(sonarr_section, 'apikey')
scheme = 'https://' if self.config.getboolean(sonarr_section, 'ssl') else 'http://' scheme = 'https://' if self.config.getboolean(sonarr_section, 'ssl') else 'http://'
verify_ssl = self.config.getboolean(sonarr_section, 'verify_ssl') verify_ssl = self.config.getboolean(sonarr_section, 'verify_ssl')
if scheme != 'https://':
verify_ssl = False
queue = self.config.getboolean(sonarr_section, 'queue') queue = self.config.getboolean(sonarr_section, 'queue')
missing_days = self.config.getint(sonarr_section, 'missing_days') missing_days = self.config.getint(sonarr_section, 'missing_days')
future_days = self.config.getint(sonarr_section, 'future_days') future_days = self.config.getint(sonarr_section, 'future_days')
@ -90,6 +92,8 @@ class INIParser(object):
apikey = self.config.get(radarr_section, 'apikey') apikey = self.config.get(radarr_section, 'apikey')
scheme = 'https://' if self.config.getboolean(radarr_section, 'ssl') else 'http://' scheme = 'https://' if self.config.getboolean(radarr_section, 'ssl') else 'http://'
verify_ssl = self.config.getboolean(radarr_section, 'verify_ssl') verify_ssl = self.config.getboolean(radarr_section, 'verify_ssl')
if scheme != 'https://':
verify_ssl = False
queue = self.config.getboolean(radarr_section, 'queue') queue = self.config.getboolean(radarr_section, 'queue')
queue_run_seconds = self.config.getint(radarr_section, 'queue_run_seconds') queue_run_seconds = self.config.getint(radarr_section, 'queue_run_seconds')
get_missing = self.config.getboolean(radarr_section, 'get_missing') get_missing = self.config.getboolean(radarr_section, 'get_missing')
@ -118,6 +122,8 @@ class INIParser(object):
apikey = self.config.get(tautulli_section, 'apikey') apikey = self.config.get(tautulli_section, 'apikey')
scheme = 'https://' if self.config.getboolean(tautulli_section, 'ssl') else 'http://' scheme = 'https://' if self.config.getboolean(tautulli_section, 'ssl') else 'http://'
verify_ssl = self.config.getboolean(tautulli_section, 'verify_ssl') verify_ssl = self.config.getboolean(tautulli_section, 'verify_ssl')
if scheme != 'https://':
verify_ssl = False
get_activity = self.config.getboolean(tautulli_section, 'get_activity') get_activity = self.config.getboolean(tautulli_section, 'get_activity')
get_activity_run_seconds = self.config.getint(tautulli_section, 'get_activity_run_seconds') get_activity_run_seconds = self.config.getint(tautulli_section, 'get_activity_run_seconds')
get_sessions = self.config.getboolean(tautulli_section, 'get_sessions') get_sessions = self.config.getboolean(tautulli_section, 'get_sessions')
@ -144,6 +150,8 @@ class INIParser(object):
apikey = self.config.get(ombi_section, 'apikey') apikey = self.config.get(ombi_section, 'apikey')
scheme = 'https://' if self.config.getboolean(ombi_section, 'ssl') else 'http://' scheme = 'https://' if self.config.getboolean(ombi_section, 'ssl') else 'http://'
verify_ssl = self.config.getboolean(ombi_section, 'verify_ssl') verify_ssl = self.config.getboolean(ombi_section, 'verify_ssl')
if scheme != 'https://':
verify_ssl = False
request_type_counts = self.config.getboolean(ombi_section, 'get_request_type_counts') request_type_counts = self.config.getboolean(ombi_section, 'get_request_type_counts')
request_type_run_seconds = self.config.getint(ombi_section, 'request_type_run_seconds') request_type_run_seconds = self.config.getint(ombi_section, 'request_type_run_seconds')
request_total_counts = self.config.getboolean(ombi_section, 'get_request_total_counts') request_total_counts = self.config.getboolean(ombi_section, 'get_request_total_counts')
@ -161,6 +169,8 @@ class INIParser(object):
password = self.config.get('asa', 'password') password = self.config.get('asa', 'password')
scheme = 'https://' if self.config.getboolean('asa', 'ssl') else 'http://' scheme = 'https://' if self.config.getboolean('asa', 'ssl') else 'http://'
verify_ssl = self.config.getboolean('asa', 'verify_ssl') verify_ssl = self.config.getboolean('asa', 'verify_ssl')
if scheme != 'https://':
verify_ssl = False
db_name = self.config.get('asa', 'influx_db') db_name = self.config.get('asa', 'influx_db')
self.asa = (scheme + url, username, password, verify_ssl, db_name) self.asa = (scheme + url, username, password, verify_ssl, db_name)

View file

@ -1,8 +1,8 @@
from requests import Session from requests import Session, Request
from datetime import datetime, timezone from datetime import datetime, timezone
from Varken.helpers import OmbiRequestCounts
from Varken.logger import logging from Varken.logger import logging
from Varken.helpers import OmbiRequestCounts, connection_handler
class OmbiAPI(object): class OmbiAPI(object):
@ -19,8 +19,14 @@ class OmbiAPI(object):
self.now = datetime.now(timezone.utc).astimezone().isoformat() self.now = datetime.now(timezone.utc).astimezone().isoformat()
tv_endpoint = '/api/v1/Request/tv' tv_endpoint = '/api/v1/Request/tv'
movie_endpoint = "/api/v1/Request/movie" movie_endpoint = "/api/v1/Request/movie"
get_tv = self.session.get(self.server.url + tv_endpoint, verify=self.server.verify_ssl).json()
get_movie = self.session.get(self.server.url + movie_endpoint, verify=self.server.verify_ssl).json() tv_req = self.session.prepare_request(Request('GET', self.server.url + tv_endpoint))
movie_req = self.session.prepare_request(Request('GET', self.server.url + movie_endpoint))
get_tv = connection_handler(self.session, tv_req, self.server.verify_ssl)
get_movie = connection_handler(self.session, movie_req, self.server.verify_ssl)
if not all([get_tv, get_movie]):
return
movie_requests = len(get_movie) movie_requests = len(get_movie)
tv_requests = len(get_tv) tv_requests = len(get_tv)
@ -46,7 +52,13 @@ class OmbiAPI(object):
def get_request_counts(self): def get_request_counts(self):
self.now = datetime.now(timezone.utc).astimezone().isoformat() self.now = datetime.now(timezone.utc).astimezone().isoformat()
endpoint = '/api/v1/Request/count' endpoint = '/api/v1/Request/count'
get = self.session.get(self.server.url + endpoint, verify=self.server.verify_ssl).json()
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
requests = OmbiRequestCounts(**get) requests = OmbiRequestCounts(**get)
influx_payload = [ influx_payload = [
{ {

View file

@ -1,8 +1,8 @@
from requests import Session from requests import Session, Request
from datetime import datetime, timezone from datetime import datetime, timezone
from Varken.logger import logging from Varken.logger import logging
from Varken.helpers import Movie, Queue, hashit from Varken.helpers import Movie, Queue, hashit, connection_handler
class RadarrAPI(object): class RadarrAPI(object):
@ -21,7 +21,12 @@ class RadarrAPI(object):
influx_payload = [] influx_payload = []
missing = [] missing = []
get = self.session.get(self.server.url + endpoint, verify=self.server.verify_ssl).json() 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
movies = [Movie(**movie) for movie in get] movies = [Movie(**movie) for movie in get]
for movie in movies: for movie in movies:
@ -60,7 +65,13 @@ class RadarrAPI(object):
self.now = datetime.now(timezone.utc).astimezone().isoformat() self.now = datetime.now(timezone.utc).astimezone().isoformat()
influx_payload = [] influx_payload = []
queue = [] queue = []
get = self.session.get(self.server.url + endpoint, verify=self.server.verify_ssl).json()
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: for movie in get:
movie['movie'] = Movie(**movie['movie']) movie['movie'] = Movie(**movie['movie'])
download_queue = [Queue(**movie) for movie in get] download_queue = [Queue(**movie) for movie in get]

View file

@ -1,8 +1,8 @@
from requests import Session from requests import Session, Request
from datetime import datetime, timezone, date, timedelta from datetime import datetime, timezone, date, timedelta
from Varken.logger import logging from Varken.logger import logging
from Varken.helpers import TVShow, Queue, hashit from Varken.helpers import TVShow, Queue, hashit, connection_handler
class SonarrAPI(object): class SonarrAPI(object):
@ -26,7 +26,12 @@ class SonarrAPI(object):
influx_payload = [] influx_payload = []
missing = [] missing = []
get = self.session.get(self.server.url + endpoint, params=params, verify=self.server.verify_ssl).json() req = self.session.prepare_request(Request('GET', self.server.url + endpoint, params=params))
get = connection_handler(self.session, req, self.server.verify_ssl)
if not get:
return
# Iteratively create a list of TVShow Objects from response json # Iteratively create a list of TVShow Objects from response json
tv_shows = [TVShow(**show) for show in get] tv_shows = [TVShow(**show) for show in get]
@ -69,7 +74,12 @@ class SonarrAPI(object):
air_days = [] air_days = []
params = {'start': self.today, 'end': future} params = {'start': self.today, 'end': future}
get = self.session.get(self.server.url + endpoint, params=params, verify=self.server.verify_ssl).json() req = self.session.prepare_request(Request('GET', self.server.url + endpoint, params=params))
get = connection_handler(self.session, req, self.server.verify_ssl)
if not get:
return
tv_shows = [TVShow(**show) for show in get] tv_shows = [TVShow(**show) for show in get]
for show in tv_shows: for show in tv_shows:
@ -111,7 +121,12 @@ class SonarrAPI(object):
self.now = datetime.now(timezone.utc).astimezone().isoformat() self.now = datetime.now(timezone.utc).astimezone().isoformat()
queue = [] queue = []
get = self.session.get(self.server.url + endpoint, verify=self.server.verify_ssl).json() 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
download_queue = [Queue(**show) for show in get] download_queue = [Queue(**show) for show in get]
for show in download_queue: for show in download_queue:

View file

@ -1,9 +1,9 @@
from datetime import datetime, timezone from datetime import datetime, timezone
from geoip2.errors import AddressNotFoundError from geoip2.errors import AddressNotFoundError
from requests import Session from requests import Session, Request
from Varken.helpers import TautulliStream, geo_lookup, hashit
from Varken.logger import logging from Varken.logger import logging
from Varken.helpers import TautulliStream, geo_lookup, hashit, connection_handler
class TautulliAPI(object): class TautulliAPI(object):
@ -21,8 +21,14 @@ class TautulliAPI(object):
self.now = datetime.now(timezone.utc).astimezone().isoformat() self.now = datetime.now(timezone.utc).astimezone().isoformat()
params = {'cmd': 'get_activity'} params = {'cmd': 'get_activity'}
influx_payload = [] influx_payload = []
g = self.session.get(self.server.url + self.endpoint, params=params, verify=self.server.verify_ssl)
get = g.json()['response']['data'] req = self.session.prepare_request(Request('GET', self.server.url + self.endpoint, params=params))
g = connection_handler(self.session, req, self.server.verify_ssl)
if not g:
return
else:
get = g['response']['data']
influx_payload.append( influx_payload.append(
{ {
@ -51,8 +57,15 @@ class TautulliAPI(object):
self.now = datetime.now(timezone.utc).astimezone().isoformat() self.now = datetime.now(timezone.utc).astimezone().isoformat()
params = {'cmd': 'get_activity'} params = {'cmd': 'get_activity'}
influx_payload = [] influx_payload = []
g = self.session.get(self.server.url + self.endpoint, params=params, verify=self.server.verify_ssl)
get = g.json()['response']['data']['sessions'] req = self.session.prepare_request(Request('GET', self.server.url + self.endpoint, params=params))
g = connection_handler(self.session, req, self.server.verify_ssl)
if not g:
return
else:
get = g['response']['data']['sessions']
sessions = [TautulliStream(**session) for session in get] sessions = [TautulliStream(**session) for session in get]
for session in sessions: for session in sessions: