Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.06.09;
Скачать: CL | DM;

Вниз

Прием для логирования/информирования   Найти похожие ветки 

 
O'ShinW ©   (2013-02-01 11:13) [0]

Пока писал, придумал :)
Но все равно, вдруг что посоветуете. (на случай если Кулибин был в предках / все украдено до нас)

класс для логирования/информирования об ошибках в программах(информирования себя, по почте или смс).
Основа - Список из записей
 PErrorItem = ^TErrorItem;
 TErrorItem = record
   ErType: string;
   ErText: string;
   IncCountBetweenErrors: integer;
   NextCountForSignal: Integer;
   IncTimeBetweenErrors: TDateTime;
   NextTimeForSignal: TDateTime;
   LastTimeCall: TDateTime;
   LastCountCall: Integer;
   CountAll: Integer;
   Count: Integer;
   Time: TDateTime;
 end;

Методы
   procedure AddError(const ErText: string); overload;
   procedure AddError(const ErType, ErText: string); overload;
   procedure SetTimeRule(const ErType, ErText: string; IncTimeBetweenErrors: TDateTime); overload;
и т.п.

Допустим, Ошибка. Не важно какая.
пишем
EM.AddError("Не важно какая");
В списке создалась ошибка типа "NONE", с текстом "Не важно какая"

Если она опять случится EM.AddError("Не важно какая");,
тогда у записи инкриминируется счетчик Count, а при достижении NextCountForSignal дернется уведомление (пока не написал, может TErrorItem будет класс, пока не знаю)

Это ладно.

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

Хотелось бы получить уведомление по первой, и следующее через час, если там все еще не наладилось
Тут метод SetTimeRule, который для всех ошибок по типу (ErType) или по тексту(ErText) (или и по тому и по др.) выставит соответствующее    
IncTimeBetweenErrors: TDateTime;
или NextTimeForSignal: TDateTime;

Допустим, хочется выставить правила для ошибок, которых еще нет.
Тогда по SetTimeRule создаём ошибку, с Count = 0

И тут засада.
Создав ошибку по типу(SOmeType1), в поле текста имеем NONE
и наоборот.

Далее, случается так, что
добавляется следующая ошибка того же типа, но другого текста
EM.AddError(SomeType1, SomeText);
По идее, для SomeType1 уже задали правило, и к этой ошибке должно оно применяться тоже.

Но Как об этом узнать?

=====
Что придумал

Вместо >> создаём ошибку, с Count = 0
при юзании SetXXXXRule, создается другой, второй список, с практически аналогичными полями, где коллекционируются ошибки-правила.
Потом, при добавлении ошибки, она, сначала инициализируется всеми своими полями по совпадению из списка правил, не меняя в этом списке правил ничего, а потом добавляется.


 
Игорь Шевченко ©   (2013-02-01 12:48) [1]

ничего не понял



Страницы: 1 вся ветка

Текущий архив: 2013.06.09;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.006 c
4-1265370495
brahman
2010-02-05 14:48
2013.06.09
проблема с OpenStream


3-1289558383
dest81
2010-11-12 13:39
2013.06.09
Поиск по несуществующему полю


2-1352118969
AlphaHuman
2012-11-05 16:36
2013.06.09
нужен ли try..exept


15-1359009539
O'ShinW
2013-01-24 10:38
2013.06.09
Почему в снайперских винтовках обычно маленький магазин?


15-1359634342
Дельфист
2013-01-31 16:12
2013.06.09
Источник бесперебойного питания