diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/audit/parser/common/DatabaseHelper.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/audit/parser/common/DatabaseHelper.java index a7282b24ebe4..a215a9ea52c9 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/audit/parser/common/DatabaseHelper.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/audit/parser/common/DatabaseHelper.java @@ -16,17 +16,30 @@ */ package org.apache.hadoop.ozone.audit.parser.common; -import org.apache.commons.lang3.StringUtils; -import org.apache.hadoop.ozone.audit.parser.model.AuditEntry; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.*; -import java.sql.*; +import static java.nio.charset.StandardCharsets.UTF_8; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.Statement; import java.util.ArrayList; import java.util.Map; import java.util.Properties; import java.util.stream.Collectors; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + +import org.apache.commons.lang3.StringUtils; +import org.apache.hadoop.ozone.audit.parser.model.AuditEntry; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Database helper for ozone audit parser tool. @@ -42,28 +55,17 @@ private DatabaseHelper() { LoggerFactory.getLogger(DatabaseHelper.class); private static Map properties; - public static boolean setup(String dbName, String logs) { - //loadProperties(); - if(createAuditTable(dbName)) { + public static boolean setup(String dbName, String logs) throws Exception { + if (createAuditTable(dbName)) { return insertAudits(dbName, logs); } else { return false; } } - private static Connection getConnection(String dbName) { - - Connection connection = null; - try{ - Class.forName(ParserConsts.DRIVER); - connection = DriverManager.getConnection( - ParserConsts.CONNECTION_PREFIX + dbName); - } catch (ClassNotFoundException e) { - LOG.error(e.getMessage()); - } catch (SQLException e) { - LOG.error(e.getMessage()); - } - return connection; + private static Connection getConnection(String dbName) throws Exception { + Class.forName(ParserConsts.DRIVER); + return DriverManager.getConnection(ParserConsts.CONNECTION_PREFIX + dbName); } private static void loadProperties() { @@ -89,32 +91,25 @@ private static void loadProperties() { } - private static boolean createAuditTable(String dbName) { - - try(Connection connection = getConnection(dbName); - Statement st = connection.createStatement()) { - + private static boolean createAuditTable(String dbName) throws Exception { + try (Connection connection = getConnection(dbName); + Statement st = connection.createStatement()) { st.executeUpdate(properties.get(ParserConsts.CREATE_AUDIT_TABLE)); - } catch (SQLException e) { - LOG.error(e.getMessage()); - return false; } return true; } - private static boolean insertAudits(String dbName, String logs) { - - try(Connection connection = getConnection(dbName); - PreparedStatement preparedStatement = connection.prepareStatement( - properties.get(ParserConsts.INSERT_AUDITS))) { - + @SuppressFBWarnings("REC_CATCH_EXCEPTION") + private static boolean insertAudits(String dbName, String logs) + throws Exception { + try (Connection connection = getConnection(dbName); + PreparedStatement preparedStatement = connection.prepareStatement( + properties.get(ParserConsts.INSERT_AUDITS))) { ArrayList auditEntries = parseAuditLogs(logs); - final int batchSize = 1000; int count = 0; - //Insert list to db - for(AuditEntry audit : auditEntries) { + for (AuditEntry audit : auditEntries) { preparedStatement.setString(1, audit.getTimestamp()); preparedStatement.setString(2, audit.getLevel()); preparedStatement.setString(3, audit.getLogger()); @@ -124,45 +119,39 @@ private static boolean insertAudits(String dbName, String logs) { preparedStatement.setString(7, audit.getParams()); preparedStatement.setString(8, audit.getResult()); preparedStatement.setString(9, audit.getException()); - preparedStatement.addBatch(); - - if(++count % batchSize == 0) { + if (++count % batchSize == 0) { preparedStatement.executeBatch(); } } - if(auditEntries.size() > 0) { + if (!auditEntries.isEmpty()) { preparedStatement.executeBatch(); // insert remaining records } - } catch (Exception e) { - LOG.error(e.getMessage()); - return false; } return true; } + @SuppressWarnings("squid:S3776") private static ArrayList parseAuditLogs(String filePath) - throws Exception { - ArrayList listResult = new ArrayList(); - try(FileInputStream fis = new FileInputStream(filePath); - InputStreamReader isr = new InputStreamReader(fis, "UTF-8"); + throws IOException { + ArrayList listResult = new ArrayList<>(); + try (FileInputStream fis = new FileInputStream(filePath); + InputStreamReader isr = new InputStreamReader(fis, UTF_8); BufferedReader bReader = new BufferedReader(isr)) { - String currentLine = null; - String[] entry = null; + String currentLine = bReader.readLine(); + String nextLine = bReader.readLine(); + String[] entry; AuditEntry tempEntry = null; - String nextLine = null; - currentLine = bReader.readLine(); - nextLine = bReader.readLine(); - while(true) { - if(tempEntry == null){ + while (true) { + if (tempEntry == null){ tempEntry = new AuditEntry(); } - if(currentLine == null) { + if (currentLine == null) { break; } else { - if(!currentLine.matches(ParserConsts.DATE_REGEX)){ + if (!currentLine.matches(ParserConsts.DATE_REGEX)){ tempEntry.appendException(currentLine); } else { entry = StringUtils.stripAll(currentLine.split("\\|")); @@ -178,11 +167,11 @@ private static ArrayList parseAuditLogs(String filePath) .setParams(ops[1]) .setResult(entry[6].substring(entry[6].indexOf('=') + 1)) .build(); - if(entry.length == 8){ + if (entry.length == 8){ tempEntry.setException(entry[7]); } } - if(nextLine == null || nextLine.matches(ParserConsts.DATE_REGEX)){ + if (nextLine == null || nextLine.matches(ParserConsts.DATE_REGEX)){ listResult.add(tempEntry); tempEntry = null; } @@ -190,50 +179,38 @@ private static ArrayList parseAuditLogs(String filePath) nextLine = bReader.readLine(); } } - } catch (RuntimeException rx) { - throw rx; - } catch (Exception ex) { - throw ex; } return listResult; } public static String executeCustomQuery(String dbName, String query) - throws SQLException { + throws Exception { return executeStatement(dbName, query); } public static String executeTemplate(String dbName, String template) - throws SQLException { - return executeStatement(dbName, - properties.get(template)); + throws Exception { + return executeStatement(dbName, properties.get(template)); } private static String executeStatement(String dbName, String sql) - throws SQLException { + throws Exception { StringBuilder result = new StringBuilder(); - ResultSet rs = null; - Statement st = null; - ResultSetMetaData rsm = null; - try(Connection connection = getConnection(dbName)) { - //loadProperties(); - - if(connection != null){ - st = connection.createStatement(); - rs = st.executeQuery(sql); - if(rs != null) { - rsm = rs.getMetaData(); - int cols = rsm.getColumnCount(); - while(rs.next()){ - for(int index =1; index<=cols; index++){ - result.append(rs.getObject(index) + "\t"); - } - result.append("\n"); + ResultSetMetaData rsm; + try (Connection connection = getConnection(dbName); + Statement st = connection.createStatement(); + ResultSet rs = st.executeQuery(sql)) { + if (rs != null) { + rsm = rs.getMetaData(); + int cols = rsm.getColumnCount(); + while (rs.next()){ + for (int index = 1; index <= cols; index++){ + result.append(rs.getObject(index)); + result.append("\t"); } + result.append("\n"); } - st.close(); - rs.close(); } } return result.toString(); diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/audit/parser/handler/LoadCommandHandler.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/audit/parser/handler/LoadCommandHandler.java index ec67bad19d56..c5e28a4b4d6f 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/audit/parser/handler/LoadCommandHandler.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/audit/parser/handler/LoadCommandHandler.java @@ -16,14 +16,15 @@ */ package org.apache.hadoop.ozone.audit.parser.handler; +import java.util.concurrent.Callable; + import org.apache.hadoop.hdds.cli.HddsVersionProvider; import org.apache.hadoop.ozone.audit.parser.AuditParser; import org.apache.hadoop.ozone.audit.parser.common.DatabaseHelper; -import picocli.CommandLine.*; + import picocli.CommandLine.Command; import picocli.CommandLine.Parameters; - -import java.util.concurrent.Callable; +import picocli.CommandLine.ParentCommand; /** * Load command handler for ozone audit parser. @@ -41,8 +42,8 @@ public class LoadCommandHandler implements Callable { @ParentCommand private AuditParser auditParser; - public Void call() { - if(DatabaseHelper.setup(auditParser.getDatabase(), logs)) { + public Void call() throws Exception { + if (DatabaseHelper.setup(auditParser.getDatabase(), logs)) { System.out.println(logs + " has been loaded successfully"); } else { System.out.println("Failed to load " + logs); diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/audit/parser/handler/QueryCommandHandler.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/audit/parser/handler/QueryCommandHandler.java index fe083ca6eb50..461026e884e3 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/audit/parser/handler/QueryCommandHandler.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/audit/parser/handler/QueryCommandHandler.java @@ -16,15 +16,16 @@ */ package org.apache.hadoop.ozone.audit.parser.handler; +import java.sql.SQLException; +import java.util.concurrent.Callable; + import org.apache.hadoop.hdds.cli.HddsVersionProvider; import org.apache.hadoop.ozone.audit.parser.AuditParser; import org.apache.hadoop.ozone.audit.parser.common.DatabaseHelper; -import picocli.CommandLine.*; + import picocli.CommandLine.Command; import picocli.CommandLine.Parameters; - -import java.sql.SQLException; -import java.util.concurrent.Callable; +import picocli.CommandLine.ParentCommand; /** * Custom query command handler for ozone audit parser. @@ -44,7 +45,7 @@ public class QueryCommandHandler implements Callable { @ParentCommand private AuditParser auditParser; - public Void call() { + public Void call() throws Exception { try { System.out.println( DatabaseHelper.executeCustomQuery(auditParser.getDatabase(), query) diff --git a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/audit/parser/handler/TemplateCommandHandler.java b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/audit/parser/handler/TemplateCommandHandler.java index 9b97ee94d033..4e726ecd2642 100644 --- a/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/audit/parser/handler/TemplateCommandHandler.java +++ b/hadoop-ozone/tools/src/main/java/org/apache/hadoop/ozone/audit/parser/handler/TemplateCommandHandler.java @@ -16,15 +16,16 @@ */ package org.apache.hadoop.ozone.audit.parser.handler; +import java.sql.SQLException; +import java.util.concurrent.Callable; + import org.apache.hadoop.hdds.cli.HddsVersionProvider; import org.apache.hadoop.ozone.audit.parser.AuditParser; import org.apache.hadoop.ozone.audit.parser.common.DatabaseHelper; -import picocli.CommandLine.*; + import picocli.CommandLine.Command; import picocli.CommandLine.Parameters; - -import java.sql.SQLException; -import java.util.concurrent.Callable; +import picocli.CommandLine.ParentCommand; /** * Template command handler for ozone audit parser. @@ -42,7 +43,7 @@ public class TemplateCommandHandler implements Callable { @ParentCommand private AuditParser auditParser; - public Void call() { + public Void call() throws Exception { try { if(DatabaseHelper.validateTemplate(template)) { System.out.println(