diff --git a/util/analytics.py b/util/analytics.py new file mode 100644 index 000000000..f86329671 --- /dev/null +++ b/util/analytics.py @@ -0,0 +1,45 @@ +import json +import logging + +from multiprocessing import Process, Queue +from mixpanel import Consumer, Mixpanel + + +logger = logging.getLogger(__name__) + + +class MixpanelQueingConsumer(object): + def __init__(self, request_queue): + self._mp_queue = request_queue + + def send(self, endpoint, json_message): + logger.debug('Queing mixpanel request.') + self._mp_queue.put(json.dumps([endpoint, json_message])) + + +class SendToMixpanel(Process): + def __init__(self, request_queue): + Process.__init__(self) + + self._mp_queue = request_queue + self._consumer = Consumer() + self.daemon = True + + def run(self): + logger.debug('Starting sender process.') + while True: + mp_request = self._mp_queue.get() + logger.debug('Got queued mixpanel reqeust.') + self._consumer.send(*json.loads(mp_request)) + + +def init_app(app): + logger.debug('Initializing mixpanel with key: %s' % + app.config['MIXPANEL_KEY']) + + request_queue = Queue() + mixpanel = Mixpanel(app.config['MIXPANEL_KEY'], + MixpanelQueingConsumer(request_queue)) + SendToMixpanel(request_queue).start() + + return mixpanel