Имеется CSV файл с информацией о фактах логина пользователя в систему. Для каждого факта известно имя пользователя, IP адрес с которого осуществлялся вход, и время входа.
На основе данного файла требуется найти все IP адреса, с которых происходило больше одного входа за заданное временное окно (например – 1 час).
Результатом должен служить файл в формате CSV со следующими полями:
- IP address – адрес, для которого обнаружен факт множественного входа
- Start – время первого множественного входа в серии
- Stop – время последнего множественного входа в серии
- Users – список имён пользователей и времени входа. Элементы списка разделены запятыми,имя пользователя и время входа разделено двоеточием (':')
Результат должен содержать все обнаруженные серии множественных входов.
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, они обрабатываются отдельно), программа на каждом шаге (шаг – чтение очередного логина из файла) записывает найденные завершенные серии логинов в выходной файл.