def _putInstance(exception): """Put an exception in the data store.""" backtraceText = exception.get('backtrace') or '' environment = exception.get('environment', 'Unknown') message = exception['message'] or '' project = exception['project'] server = exception['serverName'] timestamp = datetime.fromtimestamp(exception['timestamp']) exceptionType = exception.get('type') or '' logMessage = exception.get('logMessage') context = exception.get('context') errorLevel = exception.get('errorLevel') errorHash = generateHash(exceptionType, backtraceText) error = getAggregatedError(project, errorHash) exceptionType = exceptionType.replace('\n', ' ') if len(exceptionType) > 500: exceptionType = exceptionType[:500] exceptionType = exceptionType.replace('\n', ' ') needsAggregation = True if not error: error = LoggedError( project = getProject(project), backtrace = backtraceText, type = exceptionType, hash = errorHash, active = True, errorLevel = errorLevel, count = 1, firstOccurrence = timestamp, lastOccurrence = timestamp, lastMessage = message[:300], environments = [str(environment)], servers = [server]) error.put() needsAggregation = False instance = LoggedErrorInstance( project = error.project, error = error, environment = environment, type = exceptionType, errorLevel = errorLevel, date = timestamp, message = message, server = server, logMessage = logMessage) if context: instance.context = json.dumps(context) if 'userId' in context: try: instance.affectedUser = int(context['userId']) except (TypeError, ValueError): pass instance.put() if needsAggregation: queueAggregation(error, instance, backtraceText)
def _putInstance(exception): """Put an exception in the data store.""" backtraceText = exception.get("backtrace") or "" environment = exception.get("environment", "Unknown") message = exception["message"] or "" project = exception["project"] server = exception["serverName"] timestamp = datetime.fromtimestamp(exception["timestamp"]) exceptionType = exception.get("type") or "" logMessage = exception.get("logMessage") context = exception.get("context") errorLevel = exception.get("errorLevel") errorHash = generateHash(exceptionType, backtraceText) error = getAggregatedError(project, errorHash) exceptionType = exceptionType.replace("\n", " ") if len(exceptionType) > 500: exceptionType = exceptionType[:500] exceptionType = exceptionType.replace("\n", " ") needsAggregation = True if not error: error = LoggedError( project=getProject(project), backtrace=backtraceText, type=exceptionType, hash=errorHash, active=True, errorLevel=errorLevel, count=1, firstOccurrence=timestamp, lastOccurrence=timestamp, lastMessage=message[:300], environments=[str(environment)], servers=[server], ) error.put() needsAggregation = False instance = LoggedErrorInstance( project=error.project, error=error, environment=environment, type=exceptionType, errorLevel=errorLevel, date=timestamp, message=message, server=server, logMessage=logMessage, ) if context: instance.context = json.dumps(context) if "userId" in context: try: instance.affectedUser = int(context["userId"]) except (TypeError, ValueError): pass instance.put() if needsAggregation: queueAggregation(error, instance, backtraceText)