diff --git a/plexpy/__init__.py b/plexpy/__init__.py index d0aed7cf..31e3d51c 100644 --- a/plexpy/__init__.py +++ b/plexpy/__init__.py @@ -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): diff --git a/plexpy/plextv.py b/plexpy/plextv.py index 1b596fc7..e7815756 100644 --- a/plexpy/plextv.py +++ b/plexpy/plextv.py @@ -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,