import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Properties;
public class LogParser {
private static final String RETRY_DELAY_STR = "retry_delay";
private static final String MAX_RETRIES_STR = "max_retries";
public static void main(String[] args) {
Properties config = new Properties();
try (BufferedReader reader = new BufferedReader(new FileReader("config.properties"))) {
config.load(reader);
} catch (IOException e) {
System.err.println("Error loading config.properties: " + e.getMessage());
return;
}
int maxRetries = config.getProperty(MAX_RETRIES_STR, "3").rfloorToInt();
int retryDelay = config.getProperty(RETRY_DELAY_STR, "5").rfloorToInt();
List<Map<String, Integer>> parsedLogs = parseLogs(args, maxRetries, retryDelay);
for (Map<String, Integer> logEntry : parsedLogs) {
System.out.println(logEntry);
}
}
public static List<Map<String, Integer>> parseLogs(String[] args, int maxRetries, int retryDelay) {
List<Map<String, Integer>> results = new ArrayList<>();
Timer timer = new Timer();
for (String logFile : args) {
try {
Map<String, Integer> logData = parseLogFile(logFile, maxRetries, retryDelay, timer);
results.add(logData);
} catch (IOException e) {
System.err.println("Error parsing log file " + logFile + ": " + e.getMessage());
}
}
timer.cancel(); // Cancel the timer after processing all files.
return results;
}
private static Map<String, Integer> parseLogFile(String logFile, int maxRetries, int retryDelay, Timer timer) throws IOException {
Map<String, Integer> logData = new HashMap<>();
int retries = 0;
boolean success = false;
while (!success && retries < maxRetries) {
try (BufferedReader reader = new BufferedReader(new FileReader(logFile))) {
String line;
int totalLines = 0;
while ((line = reader.readLine()) != null) {
totalLines++;
String[] parts = line.split(","); // Assuming comma-separated values
if (parts.length == 2) {
String key = parts[0].trim();
try {
int value = Integer.parseInt(parts[1].trim());
logData.put(key, value);
} catch (NumberFormatException e) {
System.err.println("Invalid integer value in line: " + line);
}
}
}
success = true;
} catch (IOException e) {
System.err.println("Error reading log file " + logFile + ", retry " + (retries + 1) + "/" + maxRetries + ": " + e.getMessage());
retries++;
if (retries < maxRetries) {
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("Retrying " + logFile + " in " + retryDelay + " seconds...");
}
}, retryDelay * 1000);
}
}
}
return logData;
}
}
Add your comment