Merge branch 'hotfix/metric_throttling'

This commit is contained in:
sfaulds 2016-11-02 09:28:00 +11:00
commit 4551000d70
5 changed files with 23 additions and 18 deletions

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.emby" <addon id="plugin.video.emby"
name="Emby" name="Emby"
version="2.3.2" version="2.3.4"
provider-name="Emby.media"> provider-name="Emby.media">
<requires> <requires>
<import addon="xbmc.python" version="2.19.0"/> <import addon="xbmc.python" version="2.19.0"/>

View file

@ -1,3 +1,9 @@
version 2.3.4
- add throttling for error event logging
version 2.3.3
- minor fix to exception handling
version 2.3.1 version 2.3.1
- minor fixes - minor fixes

View file

@ -8,6 +8,7 @@ import md5
import xbmc import xbmc
import platform import platform
import xbmcgui import xbmcgui
import time
from utils import window, settings, language as lang from utils import window, settings, language as lang
log = logging.getLogger("EMBY."+__name__) log = logging.getLogger("EMBY."+__name__)
@ -15,6 +16,8 @@ log = logging.getLogger("EMBY."+__name__)
# for info on the metrics that can be sent to Google Analytics # for info on the metrics that can be sent to Google Analytics
# https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#events # https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#events
logEventHistory = {}
class GoogleAnalytics(): class GoogleAnalytics():
testing = False testing = False
@ -128,7 +131,18 @@ class GoogleAnalytics():
self.sendData(data) self.sendData(data)
def sendEventData(self, eventCategory, eventAction, eventLabel=None): def sendEventData(self, eventCategory, eventAction, eventLabel=None, throttle=False):
# if throttling is enabled then only log the same event every 5 min
if(throttle):
throttleKey = eventCategory + "-" + eventAction + "-" + str(eventLabel)
lastLogged = logEventHistory.get(throttleKey)
if(lastLogged != None):
timeSinceLastLog = time.time() - lastLogged
if(timeSinceLastLog < 300):
log.info("SKIPPING_LOG_EVENT : " + str(timeSinceLastLog) + " " + throttleKey)
return
logEventHistory[throttleKey] = time.time()
data = self.getBaseData() data = self.getBaseData()
data['t'] = 'event' # action type data['t'] = 'event' # action type

View file

@ -30,7 +30,7 @@ def catch_except(errors=(Exception, ), default_value=False):
return func(*args, **kwargs) return func(*args, **kwargs)
except errors as error: except errors as error:
errStrings = ga.formatException() errStrings = ga.formatException()
ga.sendEventData("Exception", errStrings[0], errStrings[1]) ga.sendEventData("Exception", errStrings[0], errStrings[1], True)
log.exception(error) log.exception(error)
log.error("function: %s \n args: %s \n kwargs: %s", log.error("function: %s \n args: %s \n kwargs: %s",
func.__name__, args, kwargs) func.__name__, args, kwargs)

View file

@ -307,21 +307,6 @@ def indent(elem, level=0):
if level and (not elem.tail or not elem.tail.strip()): if level and (not elem.tail or not elem.tail.strip()):
elem.tail = i elem.tail = i
def catch_except(errors=(Exception, ), default_value=False):
# Will wrap method with try/except and print parameters for easier debugging
def decorator(func):
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except errors as error:
log.exception(error)
log.error("function: %s \n args: %s \n kwargs: %s",
func.__name__, args, kwargs)
return default_value
return wrapper
return decorator
def profiling(sortby="cumulative"): def profiling(sortby="cumulative"):
# Will print results to Kodi log # Will print results to Kodi log
def decorator(func): def decorator(func):