package org.araqne.logparser.krsyslog.kornicglory; import java.util.HashMap; import java.util.Map; import org.araqne.log.api.V1LogParser; public class TessParser extends V1LogParser { private static Map<String, String> COLUMNS = new HashMap<String, String>(); static { COLUMNS.put("EventName", "event_name"); COLUMNS.put("SigIndex", "sig_index"); COLUMNS.put("AttackerIP", "attacker_ip"); COLUMNS.put("AttackerPort", "attacker_port"); COLUMNS.put("VictimIP", "victim_ip"); COLUMNS.put("VictimPort", "victim_port"); COLUMNS.put("PktCount", "pkt_count"); COLUMNS.put("SensorIp", "sensor_ip"); COLUMNS.put("ManagerName", "manager_name"); COLUMNS.put("ManagerIp", "manager_ip"); COLUMNS.put("EventLogSaveCnt", "event_log_save_cnt"); COLUMNS.put("TrafficLogSaveCnt", "traffic_log_save_cnt"); COLUMNS.put("SensorName", "sensor_name"); COLUMNS.put("EventPerSecond", "event_per_second"); COLUMNS.put("SessionPerSecond", "session_per_second"); COLUMNS.put("PacketLossRate", "packet_loss_rate"); COLUMNS.put("TotalTraffic", "total_traffic"); COLUMNS.put("MaliciousTraffic", "malicious_traffic"); COLUMNS.put("TotalTrafficPps", "total_pps"); COLUMNS.put("MaliciousTrafficPps", "mal_pps"); } @Override public Map<String, Object> parse(Map<String, Object> log) { String line = (String) log.get("line"); if (line == null) return log; try { Map<String, Object> m = new HashMap<String, Object>(); int begin = 0; int end; if (line.startsWith("Health info ")) begin = 12/* "Health info ".length */; while (begin != -1 && begin < line.length()) { end = line.indexOf("=", begin); String key = line.substring(begin, end).trim(); if (COLUMNS.containsKey(key)) key = COLUMNS.get(key); begin = end + 1; if (line.charAt(begin) == '"') { int vbegin = ++begin; while (true) { end = line.indexOf("\"", vbegin); if (end == -1) { begin--; end = line.length(); break; } int i; for (i = 1; i < end; i++) { if (line.charAt(end - i) != '\\') { break; } } if (i % 2 == 1) break; else { vbegin = end + 1; continue; } } } else { end = line.indexOf(" ", begin); } String value = line.substring(begin, end); m.put(key.toLowerCase(), value); begin = end + 1; } return m; } catch (Throwable t) { return log; } } }