JBOPS/utility/get_serial_transcoders.py
Landon Abney 2be0e376f8
Massive style cleanup
Adds a basic `setup.cfg` file with configurations for flake8 and pylama, 
fixes some basic issues with essentially every file including:
* Many, many, whitespace line cleanups
* Several unused variables and imports
* Missing coding and shabang lines
* Minor style fixes to more closely align with PEP8
* Turn `print` into function calls for Python 2/3 compat
* A few minor bugs
  * Things like using an undefined `i` in `stream_limiter_ban_email.py`
2019-06-20 23:55:11 -07:00

64 lines
2.0 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Get a list of "Serial Transcoders".
Author: DirtyCajunRice
Requires: requests, plexapi, python3.6+
"""
from requests import Session
from plexapi.server import CONFIG
from datetime import date, timedelta
from json.decoder import JSONDecodeError
TAUTULLI_URL = ''
TAUTULLI_API_KEY = ''
PAST_DAYS = 7
THRESHOLD_PERCENT = 50
# Do not edit past this line #
TAUTULLI_URL = TAUTULLI_URL or CONFIG.data['auth'].get('tautulli_baseurl')
TAUTULLI_API_KEY = TAUTULLI_API_KEY or CONFIG.data['auth'].get('tautulli_apikey')
TODAY = date.today()
START_DATE = TODAY - timedelta(days=PAST_DAYS)
SESSION = Session()
SESSION.params = {'apikey': TAUTULLI_API_KEY}
FORMATTED_URL = f'{TAUTULLI_URL}/api/v2'
PARAMS = {'cmd': 'get_history', 'grouping': 1, 'order_column': 'date', 'length': 1000}
REQUEST = None
try:
REQUEST = SESSION.get(FORMATTED_URL, params=PARAMS).json()['response']['data']['data']
except JSONDecodeError:
exit("Error talking to Tautulli API, please check your TAUTULLI_URL")
HISTORY = [play for play in REQUEST if date.fromtimestamp(play['started']) >= START_DATE]
USERS = {}
for play in HISTORY:
if not USERS.get(play['user_id']):
USERS.update(
{
play['user_id']: {
'direct play': 0,
'copy': 0,
'transcode': 0
}
}
)
USERS[play['user_id']][play['transcode_decision']] += 1
PARAMS = {'cmd': 'get_user', 'user_id': 0}
for user, counts in USERS.items():
TOTAL_PLAYS = counts['transcode'] + counts['direct play'] + counts['copy']
TRANSCODE_PERCENT = round(counts['transcode'] * 100 / TOTAL_PLAYS, 2)
if TRANSCODE_PERCENT >= THRESHOLD_PERCENT:
PARAMS['user_id'] = user
NAUGHTY = SESSION.get(FORMATTED_URL, params=PARAMS).json()['response']['data']
print(f"{NAUGHTY['friendly_name']} is a serial transocde offender above the threshold at {TRANSCODE_PERCENT}%")