import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) throws Exception {
// Читаем все строки из файла
List<String> lines = Files.readAllLines(Path.of("server.log"));
// Преобразуем правильные строки в LogEntry
List<LogEntry> validLogs = lines.stream()
.map(LogAnalyzer::parseLogLine)
.flatMap(Optional::stream)
.collect(Collectors.toList());
// Считаем количество успешно распарсенных логов
System.out.println("Успешно распарсено логов: " + validLogs.size());
// Группируем логи по уровню и считаем их количество
Map<String, Long> stats = validLogs.stream()
.collect(Collectors.groupingBy(
LogEntry::level,
Collectors.counting()
));
System.out.println("Статистика по уровням: " + stats);
// Оставляем только ERROR и получаем их IP
List<String> errorIps = validLogs.stream()
.filter(log -> log.level().equals("ERROR"))
.map(LogEntry::ip)
.collect(Collectors.toList());
System.out.println("IP с ошибками: " + errorIps);
}
}