Было бы более эффективно поддерживать два отдельных списка, один для успехов и один для неудач. Новые записи всегда добавляются в конец списка (то есть сортируются по возрастанию временных меток).
Теперь, когда вы хотите получить количество успехов / неудач за последние n секунд, вы создаете временную метку для now() - n
и работаете со списками. Как только вы найдете временную метку, превышающую это значение, вы можете удалить все элементы до текущей. Длина списка дает число успешных или неудачных попыток.
Если вам нужно оптимизировать, посмотрите, эффективнее ли сортировать список, уменьшив временную метку (т.е. добавляя новые значения), и работайте со списком, пока не найдете элемент, у которого временная метка меньше значения сравнения. Откажитесь от этого и всех следующих участников.
Трудно сказать заранее, какой сценарий будет более эффективным, поэтому вам придется попробовать его. OTOH, если он работает достаточно хорошо, нет причин для оптимизации; -).