Нужно построить "панель инструментов" Python / Django, чтобы заменить системные письма администраторам - PullRequest
0 голосов
/ 24 ноября 2010

Для моего сайта на python / django мне нужно создать «панель управления», которая будет информировать меня о состоянии происходящих десятков ошибок / сердцебиений / неожиданных событий.

В настоящее время я отслеживаю несколько типов «событий», когда сайт Django отправляет электронные письма на учетные записи администраторов:
1) Что-то, что обычно должно происходить, идет не так. Мы синхронизируем файлы с различными службами и другими компьютерами каждые несколько часов, и я отправляю сообщения об ошибках, когда это идет не так.
2) Когда что-то должно произойти, на самом деле происходит. Иногда события в элементе # 1 терпят неудачу настолько ужасно, что они даже не отправляют электронные письма (попробуйте: кроме: вокруг события всегда должно работать, но вещи могут быть удалены из crontab, конфигурация системы может быть сбита с места, где вещи не будут запустить и т. д., где я даже не получу сообщение об ошибке, а отсутствие сообщения об успешном / сердцебиении даст мне знать, что должно было случиться, что не произошло.)
3) Когда происходит что-то неожиданное. Мы сделали много предположений о том, как будут выполняться серверные операции, и если какое-либо из этих предположений будет нарушено (например, мы найдем двух пользователей с одинаковым адресом электронной почты), мы хотим знать об этом. Эти события не обязательно являются ошибками, больше напоминают предупреждения для расследования.


Поэтому я хочу создать информационную панель, которую я могу легко обновить из python / django, чтобы я мог с высоты птичьего полета увидеть все эти виды деятельности, чтобы я мог перестать рассылать сотни электронных писем в неделю (что уже невозможно).

Ответы [ 2 ]

3 голосов
/ 24 ноября 2010

Звучит так, будто вы хотите создать базовую систему ведения журналов, которая выводит на веб-страницу.

Таким образом, вы можете написать что-то простое, например, приложение systemevents, которое создает запись Event каждый раз, когда что-тобывает на сайте.Вы бы добавили сигнальный хук, чтобы где-нибудь на остальной части сайта вы могли кодировать что-то вроде:

from systemevents.signals import record_event

...

try:
    # code goes here
except Exception, inst:
    record_event("Error occurred while taunting %s: %s" % (obj, inst,), type="Error")
else:
    record_event("Successfully taunted %s" % (obj, ), type="Success")

Тогда вы можете довольно легко создать представление, которое перечисляет эти события.

Однако имейте в виду, что это добавляет уровень сложности, который очень проблематичен.Что делать, если ошибка лежит в вашей базе данных?Затем каждый раз, когда вы пытаетесь записать событие ошибки, возникает другая ошибка!

Гораздо лучше использовать что-то вроде встроенной системы ведения журнала для создания текстового файла журнала, а затем создать что-то, что может импортировать этотекстовый файл и выложите его в несколько более удобочитаемом виде.

Еще один совет: чтобы изменить способ обработки исключений в Django, необходимо написать пользовательское представление для 500 ошибок .Если вы используете systemevents, вы напишите что-то вроде:

from django.views.defaults import server_error
def custom_error_view(request)
    try:
        import sys
        type, value, tb = sys.exc_info()    
        error_message = "" # create an error message from the values above
        record_event("Error occurred: %s" % (error_message,), type="Error")
    except Exception:
        pass
    return server_error(request)

Обратите внимание, что ни один из этого кода не был проверен на правильность.Это просто руководство.

2 голосов
/ 24 ноября 2010

Вы пробовали смотреть на Джанго-часового? http://dcramer.github.com/django-sentry/

...