def register_event(page): tracker = Tracker(GA_TRACKER, DOMAIN) visitor = Visitor() visitor.extract_from_server_meta(request.environ) session = Session() page = Page(page) tracker.track_pageview(page, session, visitor)
def test_request(self): from pyga.requests import Tracker, Visitor, Session, Page from mock import Mock mocked = six.moves.urllib.request.urlopen = Mock() meta = dict( REMOTE_ADDR='134.321.0.1', HTTP_USER_AGENT='Test User Agent 1.0', HTTP_ACCEPT_LANGUAGE='en-US,en;q=0.8,ru;q=0.6', ) tracker = Tracker('UA-0000-0000', 'test.com') visitor = Visitor() visitor.extract_from_server_meta(meta) self.assertEqual(visitor.ip_address, '134.321.0.1') self.assertEqual(visitor.locale, 'en_US') self.assertEqual(visitor.user_agent, 'Test User Agent 1.0') session = Session() page = Page('/test_path') tracker.track_pageview(page, session, visitor) (request, ), _ = mocked.call_args_list.pop() self.assertEqual(request.headers.get('X-forwarded-for'), '134.321.0.1') self.assertEqual(request.headers.get('User-agent'), 'Test User Agent 1.0') # Assert that &ua and &uip are passed along, and that &uip is properly # anonymized. qs = six.moves.urllib.parse.urlparse(request.get_full_url()).query params = six.moves.urllib.parse.parse_qs(qs) self.assertEqual(params['uip'][0], '134.321.0.0') self.assertEqual(params['ua'][0], 'Test User Agent 1.0')
def test_request(self, mocked): from pyga.requests import Tracker, Visitor, Session, Page meta = dict( REMOTE_ADDR="134.321.0.1", HTTP_USER_AGENT="Test User Agent 1.0", HTTP_ACCEPT_LANGUAGE="en-US,en;q=0.8,ru;q=0.6", ) tracker = Tracker("UA-0000-0000", "test.com") visitor = Visitor() visitor.extract_from_server_meta(meta) self.assertEqual(visitor.ip_address, "134.321.0.1") self.assertEqual(visitor.locale, "en_US") self.assertEqual(visitor.user_agent, "Test User Agent 1.0") session = Session() page = Page("/test_path") tracker.track_pageview(page, session, visitor) (request, ), _ = mocked.call_args_list.pop() self.assertEqual(request.headers.get("X-forwarded-for"), "134.321.0.1") self.assertEqual(request.headers.get("User-agent"), "Test User Agent 1.0") # Assert that &ua and &uip are passed along, and that &uip is properly # anonymized. qs = urlparse(request.get_full_url()).query params = parse_qs(qs) self.assertEqual(params["uip"][0], "134.321.0.0") self.assertEqual(params["ua"][0], "Test User Agent 1.0")
def test_request(self, mocked): from pyga.requests import Tracker, Visitor, Session, Page meta = dict( REMOTE_ADDR="134.321.0.1", HTTP_USER_AGENT="Test User Agent 1.0", HTTP_ACCEPT_LANGUAGE="en-US,en;q=0.8,ru;q=0.6", ) tracker = Tracker("UA-0000-0000", "test.com") visitor = Visitor() visitor.extract_from_server_meta(meta) self.assertEqual(visitor.ip_address, "134.321.0.1") self.assertEqual(visitor.locale, "en_US") self.assertEqual(visitor.user_agent, "Test User Agent 1.0") session = Session() page = Page("/test_path") tracker.track_pageview(page, session, visitor) (request,), _ = mocked.call_args_list.pop() self.assertEqual(request.headers.get("X-forwarded-for"), "134.321.0.1") self.assertEqual( request.headers.get("User-agent"), "Test User Agent 1.0" ) # Assert that &ua and &uip are passed along, and that &uip is properly # anonymized. qs = urlparse(request.get_full_url()).query params = parse_qs(qs) self.assertEqual(params["uip"][0], "134.321.0.0") self.assertEqual(params["ua"][0], "Test User Agent 1.0")
def test_request(self): from pyga.requests import Tracker, Visitor, Session, Page from mock import Mock import urllib2 mocked = urllib2.urlopen = Mock() meta = dict( REMOTE_ADDR='134.321.0.1', HTTP_USER_AGENT='Test User Agent 1.0', HTTP_ACCEPT_LANGUAGE='en-US,en;q=0.8,ru;q=0.6', ) tracker = Tracker('UA-0000-0000', 'test.com') visitor = Visitor() visitor.extract_from_server_meta(meta) self.assertEqual(visitor.ip_address, '134.321.0.1') self.assertEqual(visitor.locale, 'en_US') self.assertEqual(visitor.user_agent, 'Test User Agent 1.0') session = Session() page = Page('/test_path') tracker.track_pageview(page, session, visitor) (request, ), _ = mocked.call_args_list.pop() self.assertEqual(request.headers.get('X-forwarded-for'), '134.321.0.1') self.assertEqual(request.headers.get('User-agent'), 'Test User Agent 1.0')
def test_request(self): from pyga.requests import Tracker, Visitor, Session, Page from mock import Mock from urlparse import urlparse, parse_qs import urllib2 mocked = urllib2.urlopen = Mock() meta = dict( REMOTE_ADDR='134.321.0.1', HTTP_USER_AGENT='Test User Agent 1.0', HTTP_ACCEPT_LANGUAGE='en-US,en;q=0.8,ru;q=0.6', ) tracker = Tracker('UA-0000-0000', 'test.com') visitor = Visitor() visitor.extract_from_server_meta(meta) self.assertEqual(visitor.ip_address, '134.321.0.1') self.assertEqual(visitor.locale, 'en_US') self.assertEqual(visitor.user_agent, 'Test User Agent 1.0') session = Session() page = Page('/test_path') tracker.track_pageview(page, session, visitor) (request, ), _ = mocked.call_args_list.pop() self.assertEqual(request.headers.get('X-forwarded-for'), '134.321.0.1') self.assertEqual(request.headers.get('User-agent'), 'Test User Agent 1.0') # Assert that &ua and &uip are passed along, and that &uip is properly # anonymized. qs = urlparse(request.get_full_url()).query params = parse_qs(qs) self.assertEqual(params['uip'][0], '134.321.0.0') self.assertEqual(params['ua'][0], 'Test User Agent 1.0')
def get(self, request, path=None, **resources): """ Proxy request to GA. """ tracker = Tracker(self._meta.account_id, self._meta.domain or request.META.get("SERVER_NAME")) visitor = Visitor() visitor.extract_from_server_meta(request.META) session = Session() page = Page(path) tracker.track_pageview(page, session, visitor)
def get(self, request, path=None, **resources): """ Proxy request to GA. """ tracker = Tracker(self._meta.account_id, self._meta.domain or request.META.get('SERVER_NAME')) visitor = Visitor() visitor.extract_from_server_meta(request.META) session = Session() page = Page(path) tracker.track_pageview(page, session, visitor)
def send(self, identity, properties, aliases, events, request_meta): host_name = (request_meta.get('HTTP_HOST') or Site.objects.get_current().domain) tracker = Tracker(self.web_id, host_name) visitor = Visitor() visitor.unique_id = abs(hash(identity)) >> 33 visitor.extract_from_server_meta(request_meta) session = Session() for event_name, event_properties in events: event = Event(category=self.event_category, action=event_name) tracker.track_event(event, session, visitor)
def ga_track(self, settings, event={}): _req_list = [] no_tracking = self.get_argument('no_tracking', None) is_prod = settings.ga_is_prod if not no_tracking and is_prod and settings.ga_account: _req = self.request remote_ip = _req.headers.get("X-Real-Ip", _req.headers.get("X-Forwarded-For", _req.remote_ip)) user_agent = _req.headers.get("User-Agent", None) visitor = Visitor() visitor.ip_address = remote_ip visitor.user_agent = user_agent #get visitor.locale visitor.extract_from_server_meta( {"HTTP_ACCEPT_LANGUAGE": _req.headers.get("Accept-Language", None)} ) session = Session() page = Page(_req.path) tracker = Tracker(settings.ga_account, settings.ga_tracker_url) # tracker.track_pageview(page, session, visitor) #this is non-async request pvr = PageViewRequest(config=tracker.config, tracker=tracker, visitor=visitor, session=session, page=page) r = pvr.build_http_request() _req_list.append(HTTPRequest(r.get_full_url(), "POST" if (r.data) else "GET", headers=r.headers, body=r.data)) if event: evt = Event(**event) #tracker.track_event(evt, session, visitor) #this is non-async request er = EventRequest(config=tracker.config, tracker=tracker, visitor=visitor, session=session, event=evt) r = er.build_http_request() _req_list.append(HTTPRequest(r.get_full_url(), "POST" if (r.data) else "GET", headers=r.headers, body=r.data)) #now send actual async requests http_client = AsyncHTTPClient() for _req in _req_list: http_client.fetch(_req)
def ga_track(self, event={}): _req_list = [] no_tracking = self.get_argument('no_tracking', None) is_prod = getattr(config, 'RUN_IN_PROD', False) if not no_tracking and is_prod and hasattr(config, "GA_ACCOUNT"): _req = self.request remote_ip = _req.headers.get("X-Real-Ip", _req.headers.get("X-Forwarded-For", _req.remote_ip)) user_agent = _req.headers.get("User-Agent", None) visitor = Visitor() visitor.ip_address = remote_ip visitor.user_agent = user_agent #get visitor.locale visitor.extract_from_server_meta( {"HTTP_ACCEPT_LANGUAGE": _req.headers.get("Accept-Language", None)} ) session = Session() page = Page(_req.path) tracker = Tracker(config.GA_ACCOUNT, 'MyVariant.info') # tracker.track_pageview(page, session, visitor) #this is non-async request pvr = PageViewRequest(config=tracker.config, tracker=tracker, visitor=visitor, session=session, page=page) r = pvr.build_http_request() _req_list.append(HTTPRequest(r.get_full_url(), "POST" if (r.data) else "GET", headers=r.headers, body=r.data)) if event: evt = Event(**event) #tracker.track_event(evt, session, visitor) #this is non-async request er = EventRequest(config=tracker.config, tracker=tracker, visitor=visitor, session=session, event=evt) r = er.build_http_request() _req_list.append(HTTPRequest(r.get_full_url(), "POST" if (r.data) else "GET", headers=r.headers, body=r.data)) #now send actual async requests http_client = AsyncHTTPClient() for _req in _req_list: http_client.fetch(_req)
def on_order_paid(order, payment, request, **kwargs): if not request: return ga_data = order.data.get("google_analytics", {}) tracker = Tracker(settings.GOOGLE_ANALYTICS_ID, request.get_host()) # create visitor visitor = Visitor() try: visitor.extract_from_utma(ga_data.get("utma", "")) except ValueError: return # utma cookie value is invalid visitor.extract_from_server_meta(ga_data.get("meta", {})) # create session session = Session() try: session.extract_from_utmb(ga_data.get("utmb", "")) except ValueError: return # utmb cookie value is invalid # create transaction transaction = Transaction() transaction.order_id = order.order_id transaction.total = order.subtotal transaction.tax = order.tax transaction.shipping = order.shipping transaction.city = order.billing_city.encode("utf8") transaction.country = ("%s" % order.billing_country).encode("utf8") transaction.currency = order.currency for item in order.items.all(): i = Item() i.sku = item.sku i.name = item.name.encode("utf8") i.price = item.unit_price i.quantity = item.quantity transaction.add_item(i) # tracker.setcurrencyCode tracker.track_transaction(transaction, session, visitor) order.data["google_analytics"]["tracked"] = now() order.save()