В Linux'е есть такая штука как LA, которая показывает нагрузку за последние 1, 5 и 15 минут. Хочеться иметь такое в своем приложении — то есть кол-во каких то операций за последнюю минуту.
На данный момент есть такие идеи к реализации.
— писать в базу все события, а потом sql запросов выбирать заданное событие за заданный период времени. То есть где то так
select count(*) from table_events where (event=заданный_event) and (now — event_date < 1min)
Но если событий много, а статистику часто запрашивают — будет нагрузка... да и базу подчищать нужно.
— писать в некий очередь (std::queue, массив, файл), время от времени подрезать хвост... в целом тот же предыдущий, но с дополнительными велосипедами...
— выдавать статистику за предыдущий последний интервал. То есть счетчик считает, когда интервал достигнут, значение счетчика выдается как результат, счетчик обнуляется и снова начинает инкрементиться. Производительность будет хорошей, но данные будут "устаревшими".