def ajax_error_save(request): try: if request.method == 'POST' and 'epoch' in request.POST and request.POST['epoch']: epoch = int(request.POST['epoch']) simple_traceback = request.POST['simple_traceback'].replace("\\n", "\n\n") create_caught_error(request, epoch, simple_traceback) except: print exception_string() return HttpResponse(simplejson.dumps({"success": True}))
def ajax_error_save(request): try: if request.method == 'POST' and 'epoch' in request.POST and request.POST[ 'epoch']: epoch = int(request.POST['epoch']) simple_traceback = request.POST['simple_traceback'].replace( "\\n", "\n\n") create_caught_error(request, epoch, simple_traceback) except: print exception_string() return HttpResponse(simplejson.dumps({"success": True}))
def save_traceback_to_epoch_file(self, request, exc_info): try: resp = technical_500_response(request, *exc_info) if BETTER_500_LOG_DIR: epoch = int(time.mktime(datetime.datetime.now().timetuple())) epoch_file = "%s.html" % (epoch,) folder = os.path.join(BETTER_500_LOG_DIR, BETTER_500_UNCAUGHT_DIR) debug_log_file = os.path.join(folder, epoch_file) if not os.path.exists(folder): os.makedirs(folder) try: default_storage.save(debug_log_file, ContentFile(resp._container[0])) except: f = open(debug_log_file,"a") f.write(resp._container[0]) f.close() return epoch except: try: log = logging.getLogger("better500s") log.error(exception_string()) except: pass pass return None
def save_traceback_to_epoch_file(self, request, exc_info): try: resp = technical_500_response(request, *exc_info) if BETTER_500_LOG_DIR: epoch = int(time.mktime(datetime.datetime.now().timetuple())) epoch_file = "%s.html" % (epoch, ) folder = os.path.join(BETTER_500_LOG_DIR, BETTER_500_UNCAUGHT_DIR) debug_log_file = os.path.join(folder, epoch_file) if not os.path.exists(folder): os.makedirs(folder) try: default_storage.save(debug_log_file, ContentFile(resp._container[0])) except: f = open(debug_log_file, "a") f.write(resp._container[0]) f.close() return epoch except: try: log = logging.getLogger("better500s") log.error(exception_string()) except: pass pass return None
def create_caught_error(request, epoch, traceback, subject_prefix=""): error_obj = CaughtError.objects.create( epoch_time=epoch, user=request.user, error_time=datetime.datetime.now(), simple_traceback=traceback ) try: detail_page_url = request.build_absolute_uri(error_obj.view_url) subject = "%s500 - %s" % (subject_prefix, error_obj) body = render_to_string("better500s/admin_email.txt", locals(), context_instance=RequestContext(request)) mail_admins(subject, body, fail_silently=True) except: log = logging.getLogger("better500s") log.error(exception_string()) pass
def create_caught_error(request, epoch, traceback, subject_prefix=""): error_obj = CaughtError.objects.create( epoch_time=epoch, user=request.user, error_time=datetime.datetime.now(), simple_traceback=traceback ) try: detail_page_url = request.build_absolute_uri(error_obj.view_url) subject = "%s500 - %s" % (subject_prefix, error_obj) body = render_to_string("better500s/admin_email.txt", locals(), context_instance=RequestContext(request)) mail_admins(subject, body, fail_silently=True) if telegram and getattr(settings, 'BETTER_500_NOTIFICATION_CHANNEL', False): telegram.broadcast(settings.BETTER_500_NOTIFICATION_CHANNEL, subject, detail_page_url, add_to_queue=False) except: log = logging.getLogger("better500s") log.error(exception_string()) pass
def process_exception(self, request, exception): if isinstance(exception, Http404): return None if hasattr(settings, "DEBUG") and settings.DEBUG == False and type( exception) != PermissionDenied: exc_info = sys.exc_info() try: context = {} epoch = self.save_traceback_to_epoch_file(request, exc_info) context['epoch'] = epoch context['MEDIA_URL'] = getattr(settings, "MEDIA_URL", None) context['STATIC_URL'] = getattr(settings, "STATIC_URL", None) context['ajax_url'] = reverse(BETTER_500_AJAX_URL) context['post_url'] = reverse(BETTER_500_POST_URL) try: exception_value = smart_unicode(exc_info[1]) if exception_value != u"": context['exception_value'] = exception_value except: pass try: context['simple_traceback'] = "\\n".join( traceback.format_exception(*exc_info)) except: context['simple_traceback'] = "" html = render_to_string("better500s/500_handler.html", context, context_instance=Context()) return HttpResponseServerError(html, mimetype='text/html') except: try: log = logging.getLogger("better500s") log.error(exception_string()) except: pass return None
def process_exception(self, request, exception): if isinstance(exception, Http404): return None if hasattr(settings,"DEBUG") and settings.DEBUG == False and type(exception) != PermissionDenied: exc_info = sys.exc_info() try: context = {} epoch = self.save_traceback_to_epoch_file(request, exc_info) context['epoch'] = epoch context['MEDIA_URL'] = getattr(settings, "MEDIA_URL", None) context['STATIC_URL'] = getattr(settings, "STATIC_URL", None) context['ajax_url'] = reverse(BETTER_500_AJAX_URL) context['post_url'] = reverse(BETTER_500_POST_URL) try: exception_value = smart_unicode(exc_info[1]) if exception_value != u"": context['exception_value'] = exception_value except: pass try: context['simple_traceback'] = "\\n".join( traceback.format_exception(*exc_info)) except: context['simple_traceback'] = "" html = render_to_string("better500s/500_handler.html", context, context_instance=Context()) return HttpResponseServerError(html, mimetype='text/html') except: try: log = logging.getLogger("better500s") log.error(exception_string()) except: pass return None
def create_caught_error(request, epoch, traceback, subject_prefix=""): error_obj = CaughtError.objects.create(epoch_time=epoch, user=request.user, error_time=datetime.datetime.now(), simple_traceback=traceback) try: detail_page_url = request.build_absolute_uri(error_obj.view_url) subject = "%s500 - %s" % (subject_prefix, error_obj) body = render_to_string("better500s/admin_email.txt", locals(), context_instance=RequestContext(request)) mail_admins(subject, body, fail_silently=True) if telegram and getattr(settings, 'BETTER_500_NOTIFICATION_CHANNEL', False): telegram.broadcast(settings.BETTER_500_NOTIFICATION_CHANNEL, subject, detail_page_url, add_to_queue=False) except: log = logging.getLogger("better500s") log.error(exception_string()) pass
def process_exception(self, request, exception): if hasattr(settings,"DEBUG") and settings.DEBUG == False and type(exception) != PermissionDenied: exc_info = sys.exc_info() try: from django.template import Context from django.utils.encoding import smart_unicode from django.template.loader import render_to_string from django.http import HttpResponseServerError, HttpResponseNotFound from django.http import Http404 epoch = self.save_traceback_to_epoch_file(request, exc_info) context = {} if epoch: try: context = {} context['epoch'] = epoch context['MEDIA_URL'] = getattr(settings, "MEDIA_URL", None) context['STATIC_URL'] = getattr(settings, "STATIC_URL", None) context['ajax_url'] = BETTER_500_AJAX_URL context['post_url'] = BETTER_500_POST_URL context['simple_traceback'] = "" try: exception_value = smart_unicode(exc_info[1]) if exception_value != u"": context['exception_value'] = exception_value except: pass try: context['simple_traceback'] = "\\n".join(traceback.format_exception(*exc_info)) except: pass from django.core.urlresolvers import reverse context['ajax_url'] = reverse("better_500_response",) context['post_url'] = reverse("better_500_saved",) except: try: log = logging.getLogger("better500s") log.error(exception_string()) except: pass html = render_to_string("better500s/500_handler.html", context, context_instance=Context()) if type(exception) == type(Http404): return HttpResponseNotFound(html, mimetype='text/html') else: return HttpResponseServerError(html, mimetype='text/html') except: try: log = logging.getLogger("better500s") log.error(exception_string()) except: pass return None