mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-16 02:02:58 -07:00
Migrate to Google Analytics 4
This commit is contained in:
parent
42eeb90532
commit
af3e5574f5
2 changed files with 42 additions and 32 deletions
|
@ -36,7 +36,7 @@ except ImportError:
|
|||
|
||||
from apscheduler.schedulers.background import BackgroundScheduler
|
||||
from apscheduler.triggers.interval import IntervalTrigger
|
||||
from UniversalAnalytics import Tracker
|
||||
from ga4mp import GtagMP
|
||||
import pytz
|
||||
|
||||
PYTHON2 = sys.version_info[0] == 2
|
||||
|
@ -578,12 +578,12 @@ def start():
|
|||
|
||||
# Send system analytics events
|
||||
if not CONFIG.FIRST_RUN_COMPLETE:
|
||||
analytics_event(category='system', action='install')
|
||||
analytics_event(name='install')
|
||||
|
||||
elif _UPDATE:
|
||||
analytics_event(category='system', action='update')
|
||||
analytics_event(name='update')
|
||||
|
||||
analytics_event(category='system', action='start')
|
||||
analytics_event(name='start')
|
||||
|
||||
_STARTED = True
|
||||
|
||||
|
@ -2843,44 +2843,46 @@ def generate_uuid():
|
|||
|
||||
|
||||
def initialize_tracker():
|
||||
data = {
|
||||
'dataSource': 'server',
|
||||
'appName': common.PRODUCT,
|
||||
'appVersion': common.RELEASE,
|
||||
'appId': INSTALL_TYPE,
|
||||
'appInstallerId': CONFIG.GIT_BRANCH,
|
||||
'dimension1': '{} {}'.format(common.PLATFORM, common.PLATFORM_RELEASE), # App Platform
|
||||
'dimension2': common.PLATFORM_LINUX_DISTRO, # Linux Distro
|
||||
'dimension3': common.PYTHON_VERSION,
|
||||
'userLanguage': SYS_LANGUAGE,
|
||||
'documentEncoding': SYS_ENCODING,
|
||||
'noninteractive': True
|
||||
}
|
||||
|
||||
tracker = Tracker.create('UA-111522699-2', client_id=CONFIG.PMS_UUID, hash_client_id=True,
|
||||
user_agent=common.USER_AGENT)
|
||||
tracker.set(data)
|
||||
|
||||
tracker = GtagMP(
|
||||
api_secret='Cl_LjAKUT26AS22YZwqaPw',
|
||||
measurement_id='G-NH1M4BYM2P',
|
||||
client_id=CONFIG.PMS_UUID
|
||||
)
|
||||
return tracker
|
||||
|
||||
|
||||
def analytics_event(category, action, label=None, value=None, **kwargs):
|
||||
data = {'category': category, 'action': action}
|
||||
def analytics_event(name, **kwargs):
|
||||
event = TRACKER.create_new_event(name=name)
|
||||
event.set_event_param('name', common.PRODUCT)
|
||||
event.set_event_param('version', common.RELEASE)
|
||||
event.set_event_param('install', INSTALL_TYPE)
|
||||
event.set_event_param('branch', CONFIG.GIT_BRANCH)
|
||||
event.set_event_param('platform', common.PLATFORM)
|
||||
event.set_event_param('platformRelease', common.PLATFORM_RELEASE)
|
||||
event.set_event_param('platformVersion', common.PLATFORM_VERSION)
|
||||
event.set_event_param('linuxDistro', common.PLATFORM_LINUX_DISTRO)
|
||||
event.set_event_param('pythonVersion', common.PYTHON_VERSION)
|
||||
event.set_event_param('language', SYS_LANGUAGE)
|
||||
event.set_event_param('encoding', SYS_ENCODING)
|
||||
event.set_event_param('timezone', str(SYS_TIMEZONE))
|
||||
event.set_event_param('timezoneUTCOffset', f'UTC{SYS_UTC_OFFSET}')
|
||||
|
||||
if label is not None:
|
||||
data['label'] = label
|
||||
for key, value in kwargs.items():
|
||||
event.set_event_param(key, value)
|
||||
|
||||
if value is not None:
|
||||
data['value'] = value
|
||||
plex_tv = plextv.PlexTV()
|
||||
ip_address = plex_tv.get_public_ip(output_format='text')
|
||||
geolocation = plex_tv.get_geoip_lookup(ip_address) or {}
|
||||
|
||||
if kwargs:
|
||||
data.update(kwargs)
|
||||
event.set_event_param('country', geolocation.get('country', 'Unknown'))
|
||||
event.set_event_param('countryCode', geolocation.get('code', 'Unknown'))
|
||||
|
||||
if TRACKER:
|
||||
try:
|
||||
TRACKER.send('event', data)
|
||||
TRACKER.send(events=[event])
|
||||
pass
|
||||
except Exception as e:
|
||||
logger.warn("Failed to send analytics event for category '%s', action '%s': %s" % (category, action, e))
|
||||
logger.warn("Failed to send analytics event for name '%s': %s" % (name, e))
|
||||
|
||||
|
||||
def check_folder_writable(folder, fallback, name):
|
||||
|
|
|
@ -331,6 +331,14 @@ class PlexTV(object):
|
|||
|
||||
return request
|
||||
|
||||
def get_public_ip(self, output_format=''):
|
||||
uri = '/:/ip'
|
||||
request = self.request_handler.make_request(uri=uri,
|
||||
request_type='GET',
|
||||
output_format=output_format)
|
||||
|
||||
return request
|
||||
|
||||
def get_plextv_geoip(self, ip_address='', output_format=''):
|
||||
uri = '/api/v2/geoip?ip_address=%s' % ip_address
|
||||
request = self.request_handler.make_request(uri=uri,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue