Современные анализаторы журналов перед решением задач анализа обычно агрегируют информацию из различных источников в одной базе данных. Предположим, что веб-сервер сохраняет информацию о своей посещаемости в файлах-журналах, генерируя по одному файлу в сутки. Каждая строка журнала содержит стандартизованный набор информации, которую, перед анализом, надо агрегировать в отдельном целевом файле. Если задача выполняется на многопроцессорной системе, программа-агрегатор имеет возможность значительно ускорить свою работу, распараллелив обработку исходных журналов.
Задача заключается в разработке программы-агрегатора, которая в качестве параметров командной строки получает имя целевого файла и набор имен файлов журнала. Программа распараллеливает свою работу с использованием fork, обеспечивая обработку каждого файла журнала в отдельном процессе. Результат обработки каждый процесс конкурентно размещает в целевом файле, учитывая его предыдущее содержимое. Для обеспечения эксклюзивного доступа к целевому файлу в агрегаторе следует использовать любые известные файловые блокировки (flock, lockf)
Для обработки предлагается использовать набор журналов доступа к веб-порталу ШГПУ за 6 дней января 2021 года. Для изменения файла журнала можно воспользоваться "перемешивателем" shuffle.pas. Каждый журнал представлет собой csv-файл, первая строка которого содержит набор имен полей, например:
"id";"remote_host";"date_time";"method";"server_name";"port";"directory";"file_name";"query";"status";"recv_seconds";"recv_bytes";"user_agent" "1";"10.0.10.10";"2021-01-01 00:00:01";"GET";"files.shgpi.edu.ru";"80";"/files/rasp/faculty/f05/11_02_2013_17_02_2013/";"11_02_2013_17_02_2013.doc";;"404";"0";"261";"Googlebot/2.1 (+http://www.google.com/bot.html)" "2";"54.36.148.122";"2021-01-01 00:00:00";"GET";"shgpi.edu.ru";"80";"/special/struktura-universiteta/nauka/novosti-nauka/6ccc0a74381abde5d6e756edb95af498/";;"?L=556&tx_ttnews%5Bcat%5D=3&tx_ttnews%5Bpointer%5D=33";"200";"1";"100612";"Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/)" "3";"66.249.64.192";"2021-01-01 00:00:01";"GET";"shgpi.edu.ru";"80";"/files/rasp/faculty/f05/11_02_2013_17_02_2013/";"11_02_2013_17_02_2013.doc";;"404";"0";"261";"Googlebot/2.1 (+http://www.google.com/bot.html)" "4";"109.252.201.243";"2021-01-01 00:00:00";"GET";"lib.shgpi.edu.ru";"443";"/forum/img/besedka/gorockop/";"pic.php222.gif";;"200";"0";"415747";"Mozilla/5.0 (Linux; Android 10; SM-M315F Build/QP1A.190711.020; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/81.0.4044.138 Mobile Safari/537.36 YandexSearch/8.70 YandexSearchWebView/8.70" "5";"54.36.148.204";"2021-01-01 00:00:00";"GET";"shgpi.edu.ru";"80";"/en/studentu/novosti-studentu/voprosy-gumanitarnogo-obrazovanija-obsudili-v-khode-molodjozhnoi-konferencii/";;;"200";"0";"73195";"Mozilla/5.0 (compatible; AhrefsBot/7.0; +http://ahrefs.com/robot/)" ...Целевой файл должен содержать количество посещений для каждого уникального имени сервера веб-портала ШГПУ (повторение имен недопустимо), например:
shgpi.edu.ru 12345 lib.shgpi.edu.ru 234 vt.shgpi.edu.ru 567 files.shgpi.edu.ru 4321 ...Пример запуска программы:
./aggrlogs result.txt 2021_01_01_shgpi_edu_ru.csv 2021_01_02_shgpi_edu_ru.csv 2021_01_03_shgpi_edu_ru.csv 2021_01_04_shgpi_edu_ru.csvВ данном примере из текущего каталога запускается агрегатор aggrlog, результат обработки размещается в файле result.txt, обрабатываться файлы журналов 2021_01_02_shgpi_edu_ru.csv, 2021_01_03_shgpi_edu_ru.csv и 2021_01_04_shgpi_edu_ru.csv, каждый в отдельном процессе.