def get(self): last_metric_at = InstallMetric.gql("ORDER BY updated_at DESC").get() if last_metric_at == None: last_metric_at = "[Never]" else: last_metric_at = last_metric_at.updated_at h.output(self, '<html><head><link href="/public/css/admin/admin.css" type="text/css" rel="stylesheet" /></head><body><div id="loading-msg">Loading...</div><div id="auto-fetch-install-metrics"></div><div>Install Metric Re-Calculation Status: <span id="status">Last Run at: '+str(last_metric_at)+'</span> <a id="calculate-install-metrics-button" href="#">RE-CALCULATE NOW!</a></div><div>Total Users: <span id="total-users">...</span></div><div>Users From Ads: <span id="total-from-ads">...</span></div><div>Users From Newsfeeds: <span id="total-from-newsfeeds">...</span></div><div>Users From Unknown: <span id="total-from-unknown">...</span></div><script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script><script src="/public/js/admin/install-metrics.js" type="text/javascript"></script></body></html>')
def post(self): query = User.all() query.order('-created_at') cursor = self.request.get('cursor') if cursor != None: query.with_cursor(cursor) users = query.fetch(25) for user in users: page_view_with_user = PageView.gql("WHERE user = :1 ORDER BY created_at ASC", user).get() if page_view_with_user == None: logging.error("Couldn't find PageView for User(key=%s,fb_user_id=%s)" % (str(user.key()), str(user.fb_user_id))) page_view_with_user = PageView() # Fake it till we make it if page_view_with_user.session_id != None and len(page_view_with_user.session_id) > 0: page_view_with_session_id = PageView.gql("WHERE session_id = :1 ORDER BY created_at ASC", page_view_with_user.session_id).get() else: page_view_with_session_id = page_view_with_user referring_page_view = page_view_with_session_id if not referring_page_view.is_saved(): referring_page_view = None installed_at = user.created_at if page_view_with_session_id.referrer == None or len(page_view_with_session_id.referrer) < 10: url_to_parse = page_view_with_session_id.url else: url_to_parse = page_view_with_session_id.referrer if url_to_parse == None: url_to_parse = '' parsed_referral_url = urlparse(url_to_parse) params = cgi.parse_qs(parsed_referral_url.query) if 'suid' in params and params['suid'] != None and len(params['suid'][0]) > 0: installed_via_newsfeed = True referring_user = User.gql("WHERE fb_user_id = :1", params['suid'][0]).get() newsfeed_search_term = '|'.join(params['q']) newsfeed_verb = '|'.join(params['v']) ad_name = None installed_via_ad = False installed_via_unknown = False elif 'q' in params and params['q'] != None and len(params['q'][0]) > 0: installed_via_newsfeed = False referring_user = None newsfeed_search_term = None newsfeed_verb = None ad_name = '|'.join(params['q']) installed_via_ad = True installed_via_unknown = False else: installed_via_newsfeed = False referring_user = None newsfeed_search_term = None newsfeed_verb = None ad_name = None installed_via_ad = False installed_via_unknown = True install_metric = InstallMetric.gql("WHERE user = :1", user).get() if install_metric == None: install_metric = InstallMetric( fb_user_id = user.fb_user_id, user = user, installed_at = installed_at, installed_via_ad = installed_via_ad, ad_name = ad_name, installed_via_newsfeed = installed_via_newsfeed, referring_user = referring_user, newsfeed_search_term = newsfeed_search_term, newsfeed_verb = newsfeed_verb, installed_via_unknown = installed_via_unknown, referring_page_view = referring_page_view ) else: install_metric.fb_user_id = user.fb_user_id install_metric.user = user install_metric.installed_at = installed_at install_metric.installed_via_ad = installed_via_ad install_metric.ad_name = ad_name install_metric.installed_via_newsfeed = installed_via_newsfeed install_metric.referring_user = referring_user install_metric.newsfeed_search_term = newsfeed_search_term install_metric.newsfeed_verb = newsfeed_verb install_metric.installed_via_unknown = installed_via_unknown install_metric.referring_page_view = referring_page_view install_metric.put() self.response.out.write(simplejson.dumps({'status': 'ok', 'cursor': str(query.cursor()), 'count': len(users) }))