def _send_metric_data_and_requeue(self, account_id, campaign_id): """ If the WebSocket stream is still open then send the metric data and queue this method up again in the event loop. """ def _requeue(): tornado.ioloop.IOLoop.instance().add_timeout( datetime.timedelta(seconds=2), self.async_callback(self._send_metric_data_and_requeue, account_id, campaign_id) ) if self.paused: _requeue() else: multi_results = self.redis_client.mget( [ redis_keys.get_group_key(account_id, campaign_id, redis_keys.GROUP_CONTROL), redis_keys.get_group_key(account_id, campaign_id, redis_keys.GROUP_EXPERIMENT), redis_keys.get_total_sales_key(account_id, campaign_id, redis_keys.GROUP_CONTROL), redis_keys.get_total_sales_key(account_id, campaign_id, redis_keys.GROUP_EXPERIMENT), redis_keys.get_add_to_cart_key(account_id, campaign_id, redis_keys.GROUP_CONTROL), redis_keys.get_add_to_cart_key(account_id, campaign_id, redis_keys.GROUP_EXPERIMENT) ] ) rps_control, rps_experiment = self._get_session_value_values( account_id, campaign_id) aov_control, aov_experiment = self._get_order_value_values( account_id, campaign_id) group_control = multi_results[0] group_experiment = multi_results[1] add_to_cart_control, add_to_cart_experiment = self._get_add_to_cart_values( multi_results[4], multi_results[5], group_control, group_experiment) data = { 'group_control': group_control, 'group_experiment': group_experiment, 'total_sales_control': multi_results[2], 'total_sales_experiment': multi_results[3], 'order_value_control': aov_control, 'order_value_experiment': aov_experiment, 'add_to_cart_control': add_to_cart_control, 'add_to_cart_experiment': add_to_cart_experiment, 'session_control': rps_control, 'session_experiment': rps_experiment } if self.stream.closed(): pass else: self.write_message(data) _requeue()
def add_to_cart_update(self, account, cid, group, value): if value == '1': key = keys.get_add_to_cart_key(account, cid, group) redis.incr(key)