РЕДАКТИРОВАТЬ Добавленная информация
Первоначально это было просто об общем алгоритме и не зависит от языка / платформы.Однако я собираюсь ответить на этот вопрос сам, и ответ на самом деле зависит от используемых инструментов.
Это для обнаружения событий на мэйнфрейме IBM в z / OS с использованием средства автоматизации Ops / MVSзапуск сценария REXX.
Таким образом, опубликованные ответы могут быть применимы в Python, Perl, bash, Java и т. д .;просто продукт, который используется в данном конкретном случае, имеет особую функцию, которая делает свое дело.
Конец добавленной информации
Мой вопрос очень похож на этот:
Как рассчитать частоту непрерывных гладких событий на основе времени события?
, и это будет ответом:
Это можно реализоватьс скользящей средней.Возьмите последние N событий, где N - размер окна усреднения.Вычислите разницу во времени между первым и последним из этих N событий.Если вы измеряете в секундах и хотите получить скорость в событии в минуту, то вы поделите 60 секунд на разницу во времени, выраженную в секундах, и умножите на N-1.
, за исключением того, что я хотел быИзбегайте хранения информации о предыдущих событиях.Меня также интересует только, превышает ли скользящее среднее значение пороговое значение, поэтому меня не интересует сохранение тренда курса.
Так, например, я хочу знать, получаю ли я больше 3 событий / мин.,Это был мой первый подход:
- Когда приходит первое событие, я создаю счетчик 1 и записываю время начала.
- Когда приходит другое событие, я увеличиваю счети вычислите скорость из подсчета и истекшего времени
- Если скорость превысит допустимое значение, сгенерируйте предупреждение.
Я понял, что это не сработает, потому что если у вас было событие в неделюназад, а затем ничего до 10 событий в последнюю минуту, средняя «скорость» равна 11 в неделю, то есть 3,6 / день, а не текущая скорость 10 / мин.
Так что я думаю о попыткеследующее:
- Когда приходит первое событие, я создаю счет 1 и записываю время начала.
- Когда приходит другое событие, если время с момента предыдущего событияпревышает интервал, в течение которого я хочу измерить скорость (1 мин в моем примере), я фактически отбрасываю предыдущее событие и записываю счетчик 1 и текущее время как новое время начала (потому что, если оно прошло более 1 мин с моментаPrevioСША, скорость не может превышать х / мин, верно?).
- Если время, прошедшее с момента предыдущего события, не превысило интервал мониторинга, увеличьте счет и рассчитайте скорость на основе подсчета и прошедшего времени.время
- Если скорость превысит допустимое значение, создайте оповещение.
Это кажется простым, но другие сообщения о SO (в частности, этот вопрос: Оценка скорости возникновения события с экспоненциальнойсглаживание и нерегулярные события и принятый ответ: https://stackoverflow.com/a/23617678/1430420), похоже, подразумевает, что в этом гораздо больше, чем я думаю.