Add analytics on push and pull repo events in the backend.

This commit is contained in:
yackob03 2013-10-03 16:19:01 -04:00
parent e5d100842d
commit 00b8244661
5 changed files with 32 additions and 35 deletions

10
app.py
View file

@ -6,16 +6,24 @@ from flask import Flask
from flask.ext.principal import Principal from flask.ext.principal import Principal
from flask.ext.login import LoginManager from flask.ext.login import LoginManager
from flask.ext.mail import Mail from flask.ext.mail import Mail
from config import ProductionConfig, DebugConfig, LocalHostedConfig from config import ProductionConfig, DebugConfig, LocalHostedConfig
from util import analytics
app = Flask(__name__) app = Flask(__name__)
logger = logging.getLogger(__name__)
stack = os.environ.get('STACK', '').strip().lower() stack = os.environ.get('STACK', '').strip().lower()
if stack.startswith('prod'): if stack.startswith('prod'):
logger.info('Running with production config.')
config = ProductionConfig() config = ProductionConfig()
elif stack.startswith('localhosted'): elif stack.startswith('localhosted'):
logger.info('Running with debug config on production data.')
config = LocalHostedConfig() config = LocalHostedConfig()
else: else:
logger.info('Running with debug config.')
config = DebugConfig() config = DebugConfig()
app.config.from_object(config) app.config.from_object(config)
@ -32,3 +40,5 @@ mail = Mail()
mail.init_app(app) mail.init_app(app)
stripe.api_key = app.config['STRIPE_SECRET_KEY'] stripe.api_key = app.config['STRIPE_SECRET_KEY']
mixpanel = analytics.init_app(app)

View file

@ -64,8 +64,16 @@ class StripeLiveConfig(object):
STRIPE_PUBLISHABLE_KEY = 'pk_live_P5wLU0vGdHnZGyKnXlFG4oiu' STRIPE_PUBLISHABLE_KEY = 'pk_live_P5wLU0vGdHnZGyKnXlFG4oiu'
class MixpanelTestConfig(object):
MIXPANEL_KEY = '38014a0f27e7bdc3ff8cc7cc29c869f9'
class MixpanelProdConfig(object):
MIXPANEL_KEY = '50ff2b2569faa3a51c8f5724922ffb7e'
class DebugConfig(FlaskConfig, MailConfig, LocalStorage, SQLiteDB, class DebugConfig(FlaskConfig, MailConfig, LocalStorage, SQLiteDB,
StripeTestConfig): StripeTestConfig, MixpanelTestConfig):
REGISTRY_SERVER = 'localhost:5000' REGISTRY_SERVER = 'localhost:5000'
LOGGING_CONFIG = { LOGGING_CONFIG = {
'level': logging.DEBUG, 'level': logging.DEBUG,
@ -74,7 +82,7 @@ class DebugConfig(FlaskConfig, MailConfig, LocalStorage, SQLiteDB,
class LocalHostedConfig(FlaskConfig, MailConfig, S3Storage, RDSMySQL, class LocalHostedConfig(FlaskConfig, MailConfig, S3Storage, RDSMySQL,
StripeLiveConfig): StripeLiveConfig, MixpanelTestConfig):
REGISTRY_SERVER = 'localhost:5000' REGISTRY_SERVER = 'localhost:5000'
LOGGING_CONFIG = { LOGGING_CONFIG = {
'level': logging.DEBUG, 'level': logging.DEBUG,
@ -83,7 +91,7 @@ class LocalHostedConfig(FlaskConfig, MailConfig, S3Storage, RDSMySQL,
class ProductionConfig(FlaskConfig, MailConfig, S3Storage, RDSMySQL, class ProductionConfig(FlaskConfig, MailConfig, S3Storage, RDSMySQL,
StripeLiveConfig): StripeLiveConfig, MixpanelProdConfig):
REGISTRY_SERVER = 'quay.io' REGISTRY_SERVER = 'quay.io'
LOGGING_CONFIG = { LOGGING_CONFIG = {
'stream': sys.stderr, 'stream': sys.stderr,

View file

@ -7,7 +7,7 @@ from flask import request, make_response, jsonify, abort
from functools import wraps from functools import wraps
from data import model from data import model
from app import app from app import app, mixpanel
from auth.auth import (process_auth, get_authenticated_user, from auth.auth import (process_auth, get_authenticated_user,
get_validated_token) get_validated_token)
from util.names import parse_namespace_repository, parse_repository_name from util.names import parse_namespace_repository, parse_repository_name
@ -132,6 +132,9 @@ def create_repository(namespace, repository):
image = model.create_image(image_description['id'], repo) image = model.create_image(image_description['id'], repo)
response = make_response('Created', 201) response = make_response('Created', 201)
mixpanel.track(get_authenticated_user().username, 'push_repo')
return response return response
@ -177,6 +180,8 @@ def get_repository_images(namespace, repository):
resp = make_response(json.dumps(all_images), 200) resp = make_response(json.dumps(all_images), 200)
resp.mimetype = 'application/json' resp.mimetype = 'application/json'
mixpanel.track(get_authenticated_user().username, 'pull_repo')
return resp return resp
abort(403) abort(403)

View file

@ -10,3 +10,4 @@ pymysql
stripe stripe
gunicorn gunicorn
eventlet eventlet
mixpanel-py

View file

@ -1,51 +1,24 @@
Cheetah==2.4.4
Flask==0.10.1 Flask==0.10.1
Flask-Login==0.2.7 Flask-Login==0.2.7
Flask-Mail==0.9.0 Flask-Mail==0.9.0
Flask-Principal==0.4.0 Flask-Principal==0.4.0
Jinja2==2.7.1 Jinja2==2.7.1
Landscape-Client==12.12
M2Crypto==0.21.1
MarkupSafe==0.18 MarkupSafe==0.18
PAM==0.4.2
PyMySQL==0.5 PyMySQL==0.5
PyYAML==3.10
Twisted-Core==12.3.0
Twisted-Names==12.3.0
Twisted-Web==12.3.0
Werkzeug==0.9.4 Werkzeug==0.9.4
apt-xapian-index==0.45
argparse==1.2.1 argparse==1.2.1
blinker==1.3 blinker==1.3
boto==2.3.0 boto==2.13.3
chardet==2.0.1
cloud-init==0.7.2
configobj==4.7.2
distribute==0.6.34 distribute==0.6.34
distro-info==0.10
euca2ools==2.1.1
eventlet==0.14.0 eventlet==0.14.0
greenlet==0.4.1 greenlet==0.4.1
gunicorn==18.0 gunicorn==18.0
itsdangerous==0.23 itsdangerous==0.23
oauth==1.0.1 mixpanel-py==3.0.0
paramiko==1.7.7.1
peewee==2.1.4 peewee==2.1.4
prettytable==0.6.1
py-bcrypt==0.4 py-bcrypt==0.4
pyOpenSSL==0.13
pycrypto==2.6
pycurl==7.19.0
pygobject==3.8.0
pyserial==2.6
python-apt==0.8.8ubuntu6
python-dateutil==2.1 python-dateutil==2.1
python-debian==0.1.21-nmu2ubuntu1 requests==2.0.0
requests==1.1.0 six==1.4.1
six==1.2.0
ssh-import-id==3.14
stripe==1.9.5 stripe==1.9.5
urllib3==1.5
virtualenv==1.9.1
wsgiref==0.1.2 wsgiref==0.1.2
zope.interface==4.0.5