Changed geoip to using MaxMind geodb. Fixes #8
This commit is contained in:
parent
6fc61c22a4
commit
febeb64422
1 changed files with 29 additions and 4 deletions
33
tautulli.py
33
tautulli.py
|
@ -1,5 +1,10 @@
|
||||||
# Do not edit this script. Edit configuration.py
|
# Do not edit this script. Edit configuration.py
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
import tarfile
|
||||||
import requests
|
import requests
|
||||||
|
import urllib.request
|
||||||
|
import geoip2.database
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
from influxdb import InfluxDBClient
|
from influxdb import InfluxDBClient
|
||||||
|
|
||||||
|
@ -11,6 +16,27 @@ activity = requests.get('{}/api/v2'.format(configuration.tautulli_url), params=p
|
||||||
|
|
||||||
sessions = {d['session_id']: d for d in activity['sessions']}
|
sessions = {d['session_id']: d for d in activity['sessions']}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
reader = geoip2.database.Reader(dbfile)
|
||||||
|
geodata = reader.city(ipaddress)
|
||||||
|
|
||||||
|
return geodata
|
||||||
|
|
||||||
|
|
||||||
influx_payload = [
|
influx_payload = [
|
||||||
{
|
{
|
||||||
"measurement": "Tautulli",
|
"measurement": "Tautulli",
|
||||||
|
@ -25,7 +51,7 @@ influx_payload = [
|
||||||
]
|
]
|
||||||
|
|
||||||
for session in sessions.keys():
|
for session in sessions.keys():
|
||||||
lookup = requests.get('http://freegeoip.net/json/{}'.format(sessions[session]['ip_address_public'])).json()
|
geodata = GeoLite2db(sessions[session]['ip_address_public'])
|
||||||
decision = sessions[session]['transcode_decision']
|
decision = sessions[session]['transcode_decision']
|
||||||
if decision == 'copy':
|
if decision == 'copy':
|
||||||
decision = 'direct stream'
|
decision = 'direct stream'
|
||||||
|
@ -34,7 +60,7 @@ for session in sessions.keys():
|
||||||
"measurement": "Tautulli",
|
"measurement": "Tautulli",
|
||||||
"tags": {
|
"tags": {
|
||||||
"type": "Session",
|
"type": "Session",
|
||||||
"region_code": lookup['region_code'],
|
"region_code": geodata.city.geoname_id,
|
||||||
"name": sessions[session]['friendly_name']
|
"name": sessions[session]['friendly_name']
|
||||||
},
|
},
|
||||||
"time": current_time,
|
"time": current_time,
|
||||||
|
@ -44,7 +70,7 @@ for session in sessions.keys():
|
||||||
"quality": '{}p'.format(sessions[session]['video_resolution']),
|
"quality": '{}p'.format(sessions[session]['video_resolution']),
|
||||||
"transcode_decision": decision.title(),
|
"transcode_decision": decision.title(),
|
||||||
"quality_profile": sessions[session]['quality_profile'],
|
"quality_profile": sessions[session]['quality_profile'],
|
||||||
"location": lookup['city'],
|
"location": geodata.city.name,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -52,4 +78,3 @@ for session in sessions.keys():
|
||||||
influx = InfluxDBClient(configuration.grafana_url, configuration.grafana_port, configuration.grafana_username,
|
influx = InfluxDBClient(configuration.grafana_url, configuration.grafana_port, configuration.grafana_username,
|
||||||
configuration.grafana_password, configuration.tautulli_grafana_db_name)
|
configuration.grafana_password, configuration.tautulli_grafana_db_name)
|
||||||
influx.write_points(influx_payload)
|
influx.write_points(influx_payload)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue