Changed geoip to using MaxMind geodb. Fixes #8

This commit is contained in:
Nicholas St. Germain 2018-04-24 10:23:38 -05:00 committed by GitHub
parent 6fc61c22a4
commit febeb64422

View file

@ -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)