johnspade / logins-analyzer

test task

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

logins-analyzer

Требования

Имеется CSV файл с информацией о фактах логина пользователя в систему. Для каждого факта известно имя пользователя, IP адрес с которого осуществлялся вход, и время входа.

На основе данного файла требуется найти все IP адреса, с которых происходило больше одного входа за заданное временное окно (например – 1 час).

Результатом должен служить файл в формате CSV со следующими полями:

  • IP address – адрес, для которого обнаружен факт множественного входа
  • Start – время первого множественного входа в серии
  • Stop – время последнего множественного входа в серии
  • Users – список имён пользователей и времени входа. Элементы списка разделены запятыми,имя пользователя и время входа разделено двоеточием (':')

Результат должен содержать все обнаруженные серии множественных входов.

Сборка и запуск

Сборка производится с помощью sbt

sbt assembly

Параметры запуска

  • --input – путь к входному файлу (по умолчанию logins0.csv в директории программы)
  • --output – путь к файлу с результатами (по умолчанию result.csv в директории программы)
  • --window – размер временного окна в формате scala.concurrent.duration.Duration (по умолчанию 1 час)

Запуск

java -jar logins-analyzer-assembly-0.1.jar --input=logins.csv --output=result.csv --window=1.hour

Алгоритм работы

Предполагается, что входной файл может не поместиться в память целиком. При определенных размерах временного окна результаты анализа также могут не поместиться в памяти. Поэтому входной файл читается построчно. Так как факты логина уже упорядочены по времени (за исключением логинов с IP 0.0.0.0, они обрабатываются отдельно), программа на каждом шаге (шаг – чтение очередного логина из файла) записывает найденные завершенные серии логинов в выходной файл.

About

test task


Languages

Language:Scala 100.0%