jellyfin-kodi/resources/lib/ga_client.py
sfaulds ab33ef5848 add screen app size to GA
only ping GA if playing
dont send an app stopped message
2016-10-14 14:35:34 +11:00

114 lines
No EOL
3.5 KiB
Python

import sys
import os
import traceback
import requests
import logging
import clientinfo
import md5
import xbmcgui
from utils import window, settings, language as lang
log = logging.getLogger("EMBY."+__name__)
# for info on the metrics that can be sent to Google Analytics
# https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#events
class GoogleAnalytics():
testing = False
def __init__(self):
client_info = clientinfo.ClientInfo()
self.version = client_info.get_version()
self.device_id = client_info.get_device_id()
self.userAgent = "Emby4Kodi/" + self.version + " (" + client_info.get_platform() + ")"
# Use set user name
self.user_name = settings('username') or settings('connectUsername') or 'None'
# use md5 for client and user for analytics
self.device_id = md5.new(self.device_id).hexdigest()
self.user_name = md5.new(self.user_name).hexdigest()
# resolution
self.height = xbmcgui.Window(10000).getHeight()
self.width = xbmcgui.Window(10000).getWidth()
def formatException(self):
exc_type, exc_obj, exc_tb = sys.exc_info()
stackFrames = traceback.extract_tb(exc_tb)
if(len(stackFrames) > 0):
stackFrames = traceback.extract_tb(exc_tb)[-1]
else:
stackFrames = None
log.error(str(stackFrames))
errorType = "NA"
errorFile = "NA"
if(stackFrames != None):
fileName = os.path.split(stackFrames[0])[1]
errorFile = "%s:%s(%s)(%s)" % (fileName, stackFrames[1], exc_obj.message, stackFrames[3].strip())
errorFile = errorFile[0:499]
errorType = "%s" % (exc_type.__name__)
del(exc_type, exc_obj, exc_tb)
log.error(errorType + " - " + errorFile)
return errorType, errorFile
def sendEventData(self, eventCategory, eventAction, eventLabel=None):
# all the data we can send to Google Analytics
data = {}
data['v'] = '1'
data['tid'] = 'UA-85356267-1' # tracking id, this is the account ID
data['ds'] = 'plugin' # data source
data['an'] = 'Kodi4Emby' # App Name
data['aid'] = '1' # App ID
data['av'] = self.version # App Version
#data['aiid'] = '1.1' # App installer ID
data['cid'] = self.device_id # Client ID
#data['uid'] = self.user_name # User ID
#data['ua'] = self.userAgent # user agent string
data['t'] = 'event' # action type
data['ec'] = eventCategory # Event Category
data['ea'] = eventAction # Event Action
# add width and height
data['sr'] = str(self.width) + "x" + str(self.height)
if(eventLabel != None):
data['el'] = eventLabel # Event Label
self.sendData(data)
def sendData(self, data):
log.info("GA: " + str(data))
if(settings('metricLogging') == "false"):
return
if(self.testing):
url = "https://www.google-analytics.com/debug/collect" # test URL
else:
url = "https://www.google-analytics.com/collect" # prod URL
try:
r = requests.post(url, data)
except Exception as error:
log.error(error)
if(self.testing):
log.info("GA: " + r.text.encode('utf-8'))