Skip to content

Penlk/OP_LAB_1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Open in Visual Studio Code

Лабораторная работа 1

Задача

Реализовать утилиту, производящую анализ access.log.

На основании данного лога утилита должна уметь:

  1. Выводить запросы, которые завершились ошибкой (с кодом 5XX).

  2. Находить промежуток времени, в который количество запросов к серверу было максимальным.

Аргументы программы

Утилита должна поддерживать следующие аргументы командной строки (опции):

Короткий аргумент Длинный аргумент Значение по умолчанию Описание
-o path --output=path Путь к файлу, в который будут записаны запросы с ошибками. Если файл не указан, анализ запросов с ошибками не выполняется.
-p --print Продублировать вывод запросов с ошибками в stdout (стандартный поток вывода / терминал)
-s n --stats=n 10 Вывести n самых частых запросов, завершившихся со статус кодом 5XX в порядке их частоты.
-w t --window=t 0 Найти и вывести промежуток (окно) времени длительностью t секунд, в которое количество запросов было максимально. Eсли t равно 0, расчет не производится.
-f --from=time Наименьшее время в логе Время в формате timestamp, начиная с которого происходит анализ данных.
--to=time Наибольшее время в логе Время в формате timestamp, до которого происходит анализ данных (включительно)

Название файла и опции передаются программе в виде аргументов командной строки в следующем формате:

AnalyzeLog [OPTIONS] logs_filename

Формат файла логов

В качестве примера файла логов, предлагается использовать логи сервера NASA.

Логи представляют из себя текстовый файл, где каждая строка содержит событие доступа к сереру в следующем формате:

<remote_addr> - - [<local_time>] "<request>" <status> <bytes_send>

Значение Описание
remote_addr Адрес, с которого был отправлен запрос.
local_time Время, в которое был получен запрос.
request URL запроса.
status Код ответа сервера.
bytes_send Количество переданных в ответе байт.

Пример строк из файла логов:

198.112.92.15 - - [03/Jul/2024:10:50:02 -0400] "GET /shuttle/countdown/HTTP/1.0" 200 3985
198.112.92.15 - - [03/Jul/2024:10:50:04 -0400] "GET /shuttle/nosuchpath/HTTP/1.0" 404 144

Примеры запуска программы:

AnalyzeLog access.log --output=result.txt
AnalyzeLog access.log --output=result.txt --print --stats 5
AnalyzeLog --stats=2 --window=60 --from=805821284 --to=807117284 access.log
AnalyzeLog -s 2 access.log
AnalyzeLog -w 10 access.log
AnalyzeLog access.log -w 10

Рекомендации

  • Стоит подумать, что размер файла может быть достаточно большим, и значительно превышать объем доступной оперативной памяти. Поэтому, потребление оперативной памяти не должно зависеть от размера файла.

  • Стоит подумать, каким образом можно разбить программу на логичные функции.

  • Не забывайте про кодстайл.

Дополнительная информация

Для реализации утилиты потребуется воспользоваться стандартной библиотекой ввода/вывода. Пример использования.

С примером того, как можно организовать парсинг аргументов командной строки, можно ознакомиться здесь.

Ограничения

Внешние библиотеки запрещены. Разрешается пользоваться только стандартной библиотекой С или С++.

Deadlines

  1. 01.10.23 24:00 - 0.8
  2. 08.10.23 24:00 - 0.65
  3. 15.10.23 24:00 - 0.5

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors