package org.araqne.logparser.krsyslog.samsung; import java.util.HashMap; import java.util.Map; import org.araqne.log.api.V1LogParser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ExshieldCsvParser extends V1LogParser { private final Logger slog = LoggerFactory.getLogger(ExshieldCsvParser.class); private final String[] ADMITTED_FIELDS = new String[] { "priority", "e_time", "rule_id", "src_ip", "src_port", "dst_ip", "dst_port", "protocol", "recv_byte", "send_byte", "duration", "s_time", "direction" }; // 0 string, 1 int, 2 long private final int[] ADMITTED_TYPES = new int[] { 0, 0, 0, 0, 1, 0, 1, 0, 2, 2, 1, 0, 0 }; private final String[] DENIED_FIELDS = new String[] { "priority", "timestamp", "rule_id", "src_ip", "src_port", "dst_ip", "dst_port", "protocol", "action", "sig_no", "deny_cnt", "direction" }; private final int[] DENIED_TYPES = new int[] { 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0 }; @Override public Map<String, Object> parse(Map<String, Object> params) { String line = null; try { line = (String) params.get("line"); if (line == null) return params; Map<String, Object> m = new HashMap<String, Object>(); int b = line.indexOf('['); int e = line.indexOf(']', b); if (b < 0 || e < 0) return params; String t = line.substring(b + 1, e); if (t.equals("LOG_ADMITTED")) { m.put("type", "admitted"); e++; for (int i = 0; i < ADMITTED_FIELDS.length; i++) { b = e + 1; if (i == ADMITTED_FIELDS.length - 1) e = line.indexOf('\n', b); else e = line.indexOf(',', b); if (e < 0) e = line.length(); String field = ADMITTED_FIELDS[i]; String value = line.substring(b, e); switch (ADMITTED_TYPES[i]) { case 0: m.put(field, value); break; case 1: if (value.isEmpty() || value.equals("-")) m.put(field, null); else m.put(field, Integer.valueOf(value)); break; case 2: if (value.isEmpty() || value.equals("-")) m.put(field, null); else m.put(field, Long.valueOf(value)); break; } } } else if (t.equals("LOG_DENIED")) { m.put("type", "denied"); e++; for (int i = 0; i < DENIED_FIELDS.length; i++) { b = e + 1; if (i == DENIED_FIELDS.length - 1) e = line.indexOf('\n', b); else e = line.indexOf(',', b); if (e < 0) e = line.length(); String field = DENIED_FIELDS[i]; String value = line.substring(b, e); switch (DENIED_TYPES[i]) { case 0: m.put(field, value); break; case 1: if (value.isEmpty() || value.equals("-")) m.put(field, null); else m.put(field, Integer.valueOf(value)); break; case 2: if (value.isEmpty() || value.equals("-")) m.put(field, null); else m.put(field, Long.valueOf(value)); break; } } } else { return params; } return m; } catch (Throwable t) { if (slog.isDebugEnabled()) slog.debug("araqne krsyslog parser: cannot parse exshield csv log - " + line, t); return params; } } }