Современные анализаторы журналов перед решением задач анализа обычно агрегируют информацию из различных источников в одной базе данных. Предположим, что несколько веб-серверов сохраняют информацию о своей посещаемости в файлах-журналах, при этом, в результате ежедневной ротации, количество журналов на каждый сервер может быть произвольным. Каждая строка журнала содержит стандартизованный набор информации, которую, перед анализом, надо агрегировать в отдельном целевом файле. Если задача выполняется на многопроцессорной системе, программа-агрегатор имеет возможность значительно ускорить свою работу, распараллелив обработку исходных журналов.
Задача заключается в разработке программы-агрегатора, которая в качестве параметров командной строки получает имя целевого файла и имя файла журнала. Программа изменяет содержимое целевого файла на основании содержимого файла журнала. Программа должна учитывать возможность параллельной работы аналогичных агрегаторов, фиксирующих свои результаты в том-же самом целевом файле.
Для параллельного запуска множества экземпляров агрегатора можно воспользовать вспомогательным bash-скриптом. Способ запуска скрипта:
alog.sh агрегатор файл_журнала_1 файл_журнала_2 ... файл_журнала_NСкрипт обеспечит предварительное создание или очистку файла с именем result.agr (целевой файл), а затем - параллельный запуск N копий агрегатора следующим образом:
агрегатор result.agr файл_журнала_X
Для обеспечения эксклюзивного доступа к целевому файлу result.agr в агрегаторе следует использовать любые известные файловые блокировки (flock, lockf)
Формат файла журнала:
дата_посещения1 время_посещения1 посещенная_вебстраница1
дата_посещения2 время_посещения2 посещенная_вебстраница2
....
дата_посещенияN время_посещенияN посещенная_вебстраницаN
Пример содержимого файла журнала:
2020-11-06 00:00:01 https://shgpi.edu.ru/forum/viewtopic.php?p=5965
2020-11-06 00:00:08 http://files.shgpi.edu.ru/files/faculties/f12/news/2018/05/grajd_obschestvo_v_licah_2_min.jpg
2020-11-06 00:00:25 https://lib.shgpi.edu.ru/forum/ucp.php?mode=privacy&sid=bc5751cfee2deed80c32429b28e4fab1
...
Формат целевого файла
уникальное_имя_сервера1 суммарное_количество_посещений1
уникальное_имя_сервера2 суммарное_количество_посещений2
...
уникальное_имя_сервераN суммарное_количество_посещенийN
Пример содержимого целевого файла:
shgpi.edu.ru 1321
lib.shgpi.edu.ru 23
eos.shspu.ru 4532
vt.shgpi.edu.ru 48
...