2018-02-12 16:31:38 -08:00
|
|
|
# Do not edit this script. Edit configuration.py
|
2018-04-24 08:23:38 -07:00
|
|
|
import os
|
|
|
|
import shutil
|
|
|
|
import tarfile
|
2018-02-09 22:40:32 -08:00
|
|
|
import requests
|
2018-04-24 08:23:38 -07:00
|
|
|
import urllib.request
|
|
|
|
import geoip2.database
|
2018-02-09 22:40:32 -08:00
|
|
|
from datetime import datetime, timezone
|
|
|
|
from influxdb import InfluxDBClient
|
|
|
|
|
2018-02-12 16:31:38 -08:00
|
|
|
import configuration
|
2018-02-09 22:40:32 -08:00
|
|
|
|
|
|
|
current_time = datetime.now(timezone.utc).astimezone().isoformat()
|
2018-02-12 16:31:38 -08:00
|
|
|
payload = {'apikey': configuration.tautulli_api_key, 'cmd': 'get_activity'}
|
|
|
|
activity = requests.get('{}/api/v2'.format(configuration.tautulli_url), params=payload).json()['response']['data']
|
2018-02-09 22:40:32 -08:00
|
|
|
|
|
|
|
sessions = {d['session_id']: d for d in activity['sessions']}
|
|
|
|
|
2018-04-24 08:23:38 -07:00
|
|
|
|
|
|
|
|
|
|
|
def GeoLite2db(ipaddress):
|
|
|
|
dbfile = 'GeoLite2-City.mmdb'
|
|
|
|
|
|
|
|
if not os.path.isfile('GeoLite2-City.mmdb'):
|
|
|
|
urllib.request.urlretrieve('http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz', 'GeoLite2-City.tar.gz')
|
|
|
|
tar = tarfile.open('GeoLite2-City.tar.gz', "r:gz")
|
|
|
|
tar.extractall()
|
|
|
|
tar.close()
|
|
|
|
tempfolder = next(d for d in os.listdir(os.getcwd()) if 'GeoLite2' in d)
|
|
|
|
tempfullpath = os.path.join(tempfolder, dbfile)
|
|
|
|
os.rename(tempfullpath, dbfile)
|
|
|
|
shutil.rmtree(tempfolder)
|
2018-08-06 01:08:49 -07:00
|
|
|
|
2018-04-24 08:23:38 -07:00
|
|
|
reader = geoip2.database.Reader(dbfile)
|
|
|
|
geodata = reader.city(ipaddress)
|
2018-08-06 01:08:49 -07:00
|
|
|
|
2018-04-24 08:23:38 -07:00
|
|
|
return geodata
|
2018-08-06 01:08:49 -07:00
|
|
|
|
2018-04-24 08:23:38 -07:00
|
|
|
|
2018-02-09 22:40:32 -08:00
|
|
|
influx_payload = [
|
|
|
|
{
|
2018-02-09 23:46:58 -08:00
|
|
|
"measurement": "Tautulli",
|
2018-02-09 22:40:32 -08:00
|
|
|
"tags": {
|
2018-02-09 23:46:58 -08:00
|
|
|
"type": "stream_count"
|
2018-02-09 22:40:32 -08:00
|
|
|
},
|
|
|
|
"time": current_time,
|
|
|
|
"fields": {
|
2018-02-09 23:46:58 -08:00
|
|
|
"current_streams": int(activity['stream_count'])
|
2018-02-09 22:40:32 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
]
|
|
|
|
|
|
|
|
for session in sessions.keys():
|
2018-08-06 01:08:49 -07:00
|
|
|
try:
|
|
|
|
geodata = GeoLite2db(sessions[session]['ip_address_public'])
|
|
|
|
except ValueError:
|
|
|
|
if configuration.tautulli_failback_ip:
|
|
|
|
geodata =GeoLite2db(configuration.tautulli_failback_ip)
|
|
|
|
else:
|
|
|
|
geodata = GeoLite2db(requests.get('http://ip.42.pl/raw').text)
|
|
|
|
|
2018-02-28 00:09:09 -08:00
|
|
|
decision = sessions[session]['transcode_decision']
|
|
|
|
if decision == 'copy':
|
|
|
|
decision = 'direct stream'
|
2018-08-06 01:08:49 -07:00
|
|
|
|
2018-02-09 22:40:32 -08:00
|
|
|
influx_payload.append(
|
|
|
|
{
|
2018-02-09 23:46:58 -08:00
|
|
|
"measurement": "Tautulli",
|
2018-02-09 22:40:32 -08:00
|
|
|
"tags": {
|
|
|
|
"type": "Session",
|
2018-07-23 17:30:45 -07:00
|
|
|
"region_code": geodata.subdivisions.most_specific.iso_code,
|
2018-02-09 23:46:58 -08:00
|
|
|
"name": sessions[session]['friendly_name']
|
2018-02-09 22:40:32 -08:00
|
|
|
},
|
|
|
|
"time": current_time,
|
|
|
|
"fields": {
|
|
|
|
"name": sessions[session]['friendly_name'],
|
|
|
|
"title": sessions[session]['full_title'],
|
|
|
|
"quality": '{}p'.format(sessions[session]['video_resolution']),
|
2018-08-06 01:08:49 -07:00
|
|
|
"video_decision": sessions[session]['stream_video_decision'],
|
2018-02-28 00:09:09 -08:00
|
|
|
"transcode_decision": decision.title(),
|
2018-08-06 01:08:49 -07:00
|
|
|
"product_version": sessions[session]['product_version'],
|
2018-02-28 00:09:09 -08:00
|
|
|
"quality_profile": sessions[session]['quality_profile'],
|
2018-04-24 08:23:38 -07:00
|
|
|
"location": geodata.city.name,
|
2018-02-09 22:40:32 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
2018-08-06 01:08:49 -07:00
|
|
|
influx = InfluxDBClient(configuration.influxdb_url, configuration.influxdb_port, configuration.influxdb_username,
|
|
|
|
configuration.influxdb_password, configuration.tautulli_influxdb_db_name)
|
2018-02-09 22:40:32 -08:00
|
|
|
influx.write_points(influx_payload)
|