Считает статистику по записям в файле access_log.
Анализирует ~ 350 000 записей в минуту на Core i5.
php parser.php access_log
{
"views": 16,
"urls": 5,
"traffic": 187990,
"crawlers": {
"Googlebot": 2
},
"statusCodes": {
"200": 14,
"301": 2
}
}
./vendor/bin/phpunit tests
Для идентификации запросов от поисковиков используется CrawlerDetect, который умеет определять более 1000 различных ботов. Поэтому формат выходных данных в примере из задания немного нарушен, чтобы была возможность определять большее количество ботов.
Мое решение в первую очередь старается быть простым и расширяемым. Если говорить о производительности:
- Вместо PHP лучше использовать, например, C++ или Go.
- Инкрементальный анализ: можно обрабатывать записи по мере их появления в логе, а не все разом.
- Снизить количество определяемых поисковиков, например, до четырех.