def create_hit(request, item, extra_info=None): """ Given a Django ``request`` object, create an entry in the DB for the hit. If the ``item`` is a string, then we assume it is a static item and use the dictionary above to look up its "primary key". """ ip_address = get_IP_address(request) ua_string = request.META.get('HTTP_USER_AGENT', '') if extra_info is None: extra_info = request.META.get('HTTP_REFERER', None) try: page_hit = models.PageHit(ip_address=ip_address, ua_string=ua_string, item=item._meta.module_name, item_pk=item.pk, extra_info=extra_info) except AttributeError: page_hit = models.PageHit(ip_address=ip_address, ua_string=ua_string, item=item, item_pk=static_items.get(item, 0), extra_info=extra_info) page_hit.save()
def page_500_error(request): """ Override Django's 500 handler, because we want to log this also. """ ip = get_IP_address(request) logger.error('500 from %s for request "%s"' % (ip, request.path)) t = get_template('500.html') html = t.render(RequestContext(request)) return HttpResponse(html, status=500)
def csrf_failure(request, reason=''): """ Provides a better output to the user when they don't have cookies enabled on their computer. """ ip = get_IP_address(request) logger.info('CSRF failure from %s for request "%s", coming from "%s"' %\ (ip, request.path, request.META.get('HTTP_REFERER', '??'))) return render_to_response('pages/please-enable-cookies.html', {}, context_instance=RequestContext(request))
def not_implemented_yet(request, issue_number=None): """ Track how often users uncover items that haven't been implemented, so we can prioritize them """ ip = get_IP_address(request) logger.info('Not implemented yet [%s] for request "%s" and issue=%s' %\ (ip, request.path, str(issue_number))) return render_to_response('pages/not-implemented-yet.html', {'issue_number': issue_number}, context_instance=RequestContext(request))
def page_404_error(request, extra_info=''): """ Override Django's 404 handler, because we want to log this also. """ ip = get_IP_address(request) logger.info('404 from %s for request "%s"; extra info=%s' %\ (ip, request.path, str(extra_info))) t = get_template('404.html') c = RequestContext(request) c.update({'extra_info': extra_info}) html = t.render(c) return HttpResponse(html, status=404)
def search(request): """ Calls Haystack, but allows us to first log the search query """ if request.GET['q'].strip() == '': return redirect(front_page) # Avoid duplicate logging if search request results in more than 1 page if 'page' not in request.GET: create_hit(request, 'haystack_search', request.GET['q']) logger.info('SEARCH [%s]: %s' % (get_IP_address(request), request.GET['q'])) return SearchView().__call__(request)
def search(request): """ Calls Haystack, but allows us to first log the search query """ if request.GET.get('q', '').strip() == '': return redirect(front_page) # Avoid duplicate logging if search request results in more than 1 page if 'page' not in request.GET: create_hit(request, 'haystack_search', request.GET['q']) logger.info('SEARCH [%s]: %s' % (get_IP_address(request), request.GET['q'])) return SearchView().__call__(request)