package org.araqne.logparser.krsyslog.ictis; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.araqne.log.api.FieldDefinition; import org.araqne.log.api.V1LogParser; public class IWallParser extends V1LogParser { private final org.slf4j.Logger slog = org.slf4j.LoggerFactory.getLogger(IWallParser.class); private final static String[] auditFields = { "log_time", "user", "user_ip", "authority", "main_category", "sub_category", "action", "result" }; private static final List<FieldDefinition> fields; static { fields = new ArrayList<FieldDefinition>(); for (String auditField : auditFields) { addField(auditField, "string"); } } private static void addField(String name, String type) { fields.add(new FieldDefinition(name, type)); } @Override public List<FieldDefinition> getFieldDefinitions() { return fields; } @Override public Map<String, Object> parse(Map<String, Object> params) { String line = (String) params.get("line"); if (line == null) return params; try { Map<String, Object> m = new HashMap<String, Object>(); int beginIndex = 0; int endIndex = 19; m.put("time", line.substring(beginIndex, endIndex)); beginIndex = endIndex + 1; endIndex = line.indexOf(' ', beginIndex); m.put("machine_name", line.substring(beginIndex, endIndex)); beginIndex = endIndex + 1; endIndex = line.indexOf(':', beginIndex); m.put("system_name", line.substring(beginIndex, endIndex)); beginIndex = endIndex + 9; // ": prefix=".length endIndex = line.indexOf(' ', beginIndex); m.put("prefix", line.substring(beginIndex, endIndex)); beginIndex = endIndex + 6; // " type=".length endIndex = line.indexOf(' ', beginIndex); String type = line.substring(beginIndex, endIndex); m.put("type", type); if (type.equals("audit")) { beginIndex = endIndex + 6; // " msg=\"".length endIndex = line.indexOf('\"', beginIndex); String msg = line.substring(beginIndex, endIndex); m.put("msg", msg); beginIndex = 0; for (String fields : auditFields) { endIndex = msg.indexOf(';', beginIndex); if (endIndex < 0) endIndex = msg.length(); m.put(fields, msg.substring(beginIndex, endIndex)); beginIndex = endIndex + 1; } } else { int pos = endIndex + 1; int exPos = pos; String key = ""; while (++pos < line.length()) { if (line.charAt(pos) == '=') { key = line.substring(exPos, pos); exPos = pos + 1; } else if (line.charAt(pos) == ' ') { m.put(key, line.substring(exPos, pos)); exPos = pos + 1; } } m.put(key, line.substring(exPos)); } return m; } catch (Throwable t) { if (slog.isDebugEnabled()) { slog.debug("araqne log api: cannot parse ICTIS iWall - line [{}]", line); slog.debug("detail", t); } return params; } } }