From 79e4864eb291a8fed4b9ad5dd49e230bd9338f57 Mon Sep 17 00:00:00 2001 From: Joseph Schorr Date: Thu, 30 Oct 2014 12:49:51 -0400 Subject: [PATCH] Move the the track_and_log code into its own module. This breaks a dependency chain between index -> common -> api -> subscribe -> common again. --- endpoints/common.py | 45 ++---------------------------------- endpoints/index.py | 2 +- endpoints/trackhelper.py | 48 +++++++++++++++++++++++++++++++++++++++ endpoints/verbs.py | 2 +- test/data/test.db | Bin 667648 -> 667648 bytes 5 files changed, 52 insertions(+), 45 deletions(-) create mode 100644 endpoints/trackhelper.py diff --git a/endpoints/common.py b/endpoints/common.py index a7f31b204..0a88b3900 100644 --- a/endpoints/common.py +++ b/endpoints/common.py @@ -11,10 +11,9 @@ from random import SystemRandom from data import model from data.database import db -from app import analytics, app, login_manager, dockerfile_build_queue, notification_queue +from app import app, login_manager, dockerfile_build_queue, notification_queue from auth.permissions import QuayDeferredPermissionUser from auth import scopes -from auth.auth_context import get_authenticated_user, get_validated_token, get_validated_oauth_token from endpoints.api.discovery import swagger_route_data from werkzeug.routing import BaseConverter from functools import wraps @@ -274,44 +273,4 @@ def start_build(repository, dockerfile_id, tags, build_name, subdir, manual, spawn_notification(repository, 'build_queued', event_data, subpage='build?current=%s' % build_request.uuid, pathargs=['build', build_request.uuid]) - return build_request - - -def track_and_log(event_name, repo, **kwargs): - repository = repo.name - namespace = repo.namespace_user.username - metadata = { - 'repo': repository, - 'namespace': namespace, - } - metadata.update(kwargs) - - analytics_id = 'anonymous' - - profile.debug('Logging the %s to Mixpanel and the log system', event_name) - if get_validated_oauth_token(): - oauth_token = get_validated_oauth_token() - metadata['oauth_token_id'] = oauth_token.id - metadata['oauth_token_application_id'] = oauth_token.application.client_id - metadata['oauth_token_application'] = oauth_token.application.name - analytics_id = 'oauth:' + oauth_token.id - elif get_authenticated_user(): - metadata['username'] = get_authenticated_user().username - analytics_id = get_authenticated_user().username - elif get_validated_token(): - metadata['token'] = get_validated_token().friendly_name - metadata['token_code'] = get_validated_token().code - analytics_id = 'token:' + get_validated_token().code - else: - metadata['public'] = True - analytics_id = 'anonymous' - - extra_params = { - 'repository': '%s/%s' % (namespace, repository), - } - - analytics.track(analytics_id, event_name, extra_params) - model.log_action(event_name, namespace, - performer=get_authenticated_user(), - ip=request.remote_addr, metadata=metadata, - repository=repo) \ No newline at end of file + return build_request \ No newline at end of file diff --git a/endpoints/index.py b/endpoints/index.py index a0df57375..1c8e551a0 100644 --- a/endpoints/index.py +++ b/endpoints/index.py @@ -17,7 +17,7 @@ from auth.permissions import (ModifyRepositoryPermission, UserAdminPermission, ReadRepositoryPermission, CreateRepositoryPermission) from util.http import abort -from endpoints.common import track_and_log +from endpoints.trackhelper import track_and_log from endpoints.notificationhelper import spawn_notification import features diff --git a/endpoints/trackhelper.py b/endpoints/trackhelper.py new file mode 100644 index 000000000..df8af5aae --- /dev/null +++ b/endpoints/trackhelper.py @@ -0,0 +1,48 @@ +import logging + +from app import analytics, app +from data import model +from flask import request +from auth.auth_context import get_authenticated_user, get_validated_token, get_validated_oauth_token + +logger = logging.getLogger(__name__) +profile = logging.getLogger('application.profiler') + +def track_and_log(event_name, repo, **kwargs): + repository = repo.name + namespace = repo.namespace_user.username + metadata = { + 'repo': repository, + 'namespace': namespace, + } + metadata.update(kwargs) + + analytics_id = 'anonymous' + + profile.debug('Logging the %s to Mixpanel and the log system', event_name) + if get_validated_oauth_token(): + oauth_token = get_validated_oauth_token() + metadata['oauth_token_id'] = oauth_token.id + metadata['oauth_token_application_id'] = oauth_token.application.client_id + metadata['oauth_token_application'] = oauth_token.application.name + analytics_id = 'oauth:' + oauth_token.id + elif get_authenticated_user(): + metadata['username'] = get_authenticated_user().username + analytics_id = get_authenticated_user().username + elif get_validated_token(): + metadata['token'] = get_validated_token().friendly_name + metadata['token_code'] = get_validated_token().code + analytics_id = 'token:' + get_validated_token().code + else: + metadata['public'] = True + analytics_id = 'anonymous' + + extra_params = { + 'repository': '%s/%s' % (namespace, repository), + } + + analytics.track(analytics_id, event_name, extra_params) + model.log_action(event_name, namespace, + performer=get_authenticated_user(), + ip=request.remote_addr, metadata=metadata, + repository=repo) \ No newline at end of file diff --git a/endpoints/verbs.py b/endpoints/verbs.py index e3d5da37d..b410251d3 100644 --- a/endpoints/verbs.py +++ b/endpoints/verbs.py @@ -10,7 +10,7 @@ from auth.auth_context import get_authenticated_user from auth.permissions import ReadRepositoryPermission from data import model from data import database -from endpoints.common import track_and_log +from endpoints.trackhelper import track_and_log from storage import Storage from util.queuefile import QueueFile diff --git a/test/data/test.db b/test/data/test.db index 66abd92f7e98dc7935a8c00bf6c3099eafe249e0..dc7950361663c7d96be75047aa8357581e0e9ba4 100644 GIT binary patch delta 7250 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