in src/main/java/com/googlesource/gerrit/plugins/auditsl4j/TransformLogsCommand.java [109:148]
private void transformLogs(
String currentDateString,
String fileType,
Function<String, Optional<? extends TransformableLog>> createTransformable) {
// Log format example: httpd_log.2019-01-19.gz
String logFileName = sitePaths.logs_dir + "/" + fileType + "." + currentDateString + ".gz";
String auditLogFileName = sitePaths.logs_dir + "/audit_log." + currentDateString + ".log";
stdout.print("Transforming: " + logFileName + " => " + auditLogFileName + " ...\n");
stdout.flush();
try {
GZIPInputStream gzis = new GZIPInputStream(new FileInputStream(logFileName));
BufferedReader input = new BufferedReader(new InputStreamReader(gzis));
PrintWriter pw =
new PrintWriter(
Files.newBufferedWriter(
Paths.get(auditLogFileName),
StandardOpenOption.CREATE,
StandardOpenOption.WRITE,
StandardOpenOption.APPEND));
input
.lines()
.map(createTransformable)
.map(
maybeTransformableLog ->
maybeTransformableLog.flatMap(
transformableLog -> transformableLog.toAuditLog(loggerAudit)))
.filter(Optional::isPresent)
.map(Optional::get)
.forEach(pw::println);
pw.flush();
} catch (FileNotFoundException fnfe) {
stderr.print("Cannot find '" + logFileName + "'. Skipping!\n");
} catch (IOException e) {
stderr.print("Error: " + e.getMessage() + "!\n");
}
}