Ejemplo n.º 1
0
def mp_track_event(request, event_name, properties=None, **kwargs):
    import re
    from mixpanel.tasks import EventTracker
    if not settings.MIXPANEL_ENABLED:
        return

    if properties == None:
        properties = {}
    
    if 'distinct_id' not in properties:
        properties['distinct_id'] = request.COOKIES.get('mpDistinctID', None)
    
    properties['campaign'] = request.COOKIES.get('campaign', 'None')
 
    if hasattr(settings, 'ANALYTICS_EXCLUSION_TOKEN'):
        utmv = request.COOKIES.get('__utmv', None)
        pattern = re.compile(".*?" + settings.ANALYTICS_EXCLUSION_TOKEN + "*") 
        if utmv and pattern.match(utmv):
            return

    try:
        et = EventTracker()
        args = (event_name, properties)
        et.delay(*args, **kwargs)
    except Exception, err:
        pass
Ejemplo n.º 2
0
 def test_run_priority_true(self):
     mp_settings.MIXPANEL_TEST_PRIORITY = False
     result = EventTracker().run('event_foo', test=True)
     self.assertTrue(result)
     query = self.get_querystring_dict()
     assert 'test' in query
     self.assertEqual(query['test'], '1')
Ejemplo n.º 3
0
    def test_failed_request(self):
        mp_settings.MIXPANEL_TRACKING_ENDPOINT = 'brokenurl'

        et = EventTracker()
        self.assertRaises(RetryTaskError,
                          et.run,
                          'event_foo',
                          throw_retry_error=True)
Ejemplo n.º 4
0
    def test_old_run(self):
        """non-recorded events should return False"""
        et = EventTracker()
        # Times older than 3 hours don't get recorded according to: http://mixpanel.com/api/docs/specification
        # equests will be rejected that are 3 hours older than present time
        result = et.run('event_foo', {'time': 1245613885})

        self.assertFalse(result)
Ejemplo n.º 5
0
    def test_handle_properties_given(self):
        et = EventTracker()

        properties = et._handle_properties({'token': 'bar'}, None)
        self.assertEqual('bar', properties['token'])

        properties = et._handle_properties({'token': 'bar'}, 'foo')
        self.assertEqual('bar', properties['token'])
Ejemplo n.º 6
0
    def test_failed_socket_request(self):
        mp_settings.MIXPANEL_API_SERVER = '127.0.0.1:60000'

        et = EventTracker()
        self.assertRaises(RetryTaskError,
                          et.run,
                          'event_foo',
                          throw_retry_error=True)
Ejemplo n.º 7
0
 def test_run_properties_empty(self):
     result = EventTracker().run('event_foo', {})
     self.assertTrue(result)
     self.assertParams({
         'event': 'event_foo',
         'properties': {
             'token': 'testtesttest'
         }
     })
Ejemplo n.º 8
0
 def test_run_token(self):
     result = EventTracker().run('event_foo', token='xxx')
     self.assertTrue(result)
     self.assertParams({
         'event': 'event_foo',
         'properties': {
             'token': 'xxx'
         }
     })
Ejemplo n.º 9
0
    def test_disable(self):
        et = EventTracker()
        mp_settings.MIXPANEL_DISABLE = True

        def _fake_get_connection():
            assert False, "Should bail out before trying to get a connection."

        et._get_connection = _fake_get_connection

        et('foo')
Ejemplo n.º 10
0
 def test_run_properties_foo(self):
     result = EventTracker().run('event_foo', {'foo': 'bar'})
     self.assertTrue(result)
     self.assertParams({
         'event': 'event_foo',
         'properties': {
             'token': 'testtesttest',
             'foo': 'bar',
         }
     })
Ejemplo n.º 11
0
    def test_is_test(self):
        et = EventTracker()

        self.assertEqual(et._is_test(None), 1)
        self.assertEqual(et._is_test(False), 0)
        self.assertEqual(et._is_test(True), 1)

        mp_settings.MIXPANEL_TEST_ONLY = False
        self.assertEqual(et._is_test(None), 0)
        self.assertEqual(et._is_test(False), 0)
        self.assertEqual(et._is_test(True), 1)
Ejemplo n.º 12
0
    def test_non_recorded(self):
        """non-recorded events should return False"""
        self.response.read.return_value = '0'

        et = EventTracker()
        # Times older than 3 hours don't get recorded according to:
        # http://mixpanel.com/api/docs/specification
        # requests will be rejected that are 3 hours older than present time
        # (though actually this is returnin False because of mocking network)
        result = et.run('event_foo', {'time': 1245613885})

        self.assertFalse(result)
Ejemplo n.º 13
0
    def test_build_params(self):
        et = EventTracker()

        event = 'foo_event'
        is_test = 1
        properties = {'token': 'testtoken'}
        params = {'event': event, 'properties': properties}

        url_params = et._build_params(event, properties, is_test)

        expected_params = urllib.urlencode({
            'data':
            base64.b64encode(simplejson.dumps(params)),
            'test':
            is_test,
        })

        self.assertEqual(expected_params, url_params)
Ejemplo n.º 14
0
    def test_build_and_encode_params(self):
        et = EventTracker()

        event = 'foo_event'
        test = True
        properties = {'token': 'testtoken'}
        params = {'event': event, 'properties': properties}

        params = et._build_params(event, properties)
        url_params = et._encode_params(params, test)

        expected_params = urllib.parse.urlencode({
            'data':
            base64.b64encode(json.dumps(params).encode('utf8')),
            'test':
            '1'
        })

        self.assertEqual(expected_params, url_params)
Ejemplo n.º 15
0
    def test_run(self):
        # "correct" result obtained from: http://mixpanel.com/api/docs/console
        et = EventTracker()
        result = et.run('event_foo', {})

        self.assertTrue(result)
Ejemplo n.º 16
0
    def test_debug_logger(self):
        et = EventTracker()
        result = et.run('event_foo', {}, loglevel=logging.DEBUG)

        self.assertTrue(result)
Ejemplo n.º 17
0
    def test_handle_properties_w_token(self):
        et = EventTracker()

        properties = et._handle_properties({}, 'foo')
        self.assertEqual('foo', properties['token'])
Ejemplo n.º 18
0
    def test_handle_properties_empty(self):
        et = EventTracker()
        mp_settings.MIXPANEL_API_TOKEN = 'bar'

        properties = et._handle_properties(None, None)
        self.assertEqual('bar', properties['token'])
Ejemplo n.º 19
0
 def test_run_priority_default_false(self):
     mp_settings.MIXPANEL_TEST_PRIORITY = False
     result = EventTracker().run('event_foo')
     self.assertTrue(result)
     query = self.get_querystring_dict()
     assert 'test' not in query
Ejemplo n.º 20
0
from guelphapi.api.utils.log import get_data

from tastypie.resources import Resource, ModelResource

from mixpanel.tasks import EventTracker

tracker = EventTracker()
track_event = lambda *a, **kw: tracker.run(*a, **kw)

class LoggingResource(Resource):
    def dispatch(self, request_type, request, **kwargs):
        # Let the "real" dispatch do its thing.
        # This includes checking a throttle, authentication, authorization, etc
        response = super(LoggingResource, self).dispatch(request_type, request, **kwargs)
        # Only log "good" requests for now
        # We know once we're down here, that things are fine
        data = get_data(request_type, request, kwargs)
        track_event('request-%s' % request.META.get('REQUEST_METHOD', request_type), data)
        return response

class LoggingModelResource(ModelResource):
    def dispatch(self, request_type, request, **kwargs):
        # Let the "real" dispatch do its thing.
        # This includes checking a throttle, authentication, authorization, etc.
        response = super(LoggingModelResource, self).dispatch(request_type, request, **kwargs)
        # Only log "good" requests for now
        # We know once we're down here, that things are fine
        data = get_data(request_type, request, kwargs)
        track_event('request-%s' % request.META.get('REQUEST_METHOD', request_type), data)
        return response
Ejemplo n.º 21
0
 def __init__(self, tracker=None, tracker_class=EventTracker):
     if tracker is None:
         tracker = EventTracker()
     self.tracker = tracker
     self.remote_addr = None
     self.identity = None