Код Middle Ошибки и логирование обновлено

Статистика по access-логу: коды и p95

Условие

Строки access-лога вида 2026-10-01T12:00:00Z GET /api/users 200 35ms. Напиши logStats(lines), которая возвращает:

  • total: число корректных строк;
  • byClass: объект с количеством ответов по классам 2xx, 3xx, 4xx, 5xx (только встретившиеся классы);
  • p95: 95-й перцентиль времени ответа в мс по методу nearest rank: отсортировать по возрастанию, взять элемент с номером ceil(0.95 * n) (нумерация с 1); null, если строк нет;
  • errorRate: доля 5xx, округлённая до 3 знаков (Math.round(x * 1000) / 1000), 0 при пустом логе.

Битые строки (меньше 5 полей, статус не трёхзначное число, время не в формате <число>ms) пропускать.

Примеры

logStats(["t GET /a 200 10ms", "t GET /b 500 30ms", "t POST /c 201 20ms"]) // {"total":3,"byClass":{"2xx":2,"5xx":1},"p95":30,"errorRate":0.333}
logStats([]) // {"total":0,"byClass":{},"p95":null,"errorRate":0}
logStats(["bad line", "t GET /a 2OO 5ms", "t GET /a 200 fast", "t GET /a 404 7ms"]) // {"total":1,"byClass":{"4xx":1},"p95":7,"errorRate":0}

Как подойти

Подсказки: 2
  1. Разбей строку по пробелам и проверь поля регулярками.
  2. Номер элемента для p95: Math.ceil(0.95 * n), индекс на единицу меньше.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.