package com.cloudera.flume.core;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Preconditions;
abstract public class Event {
static final Logger LOG = LoggerFactory.getLogger(Event.class);
public final static String A_SERVICE = "service";
public enum Priority {
FATAL, ERROR, WARN, INFO, DEBUG, TRACE
};
abstract public byte[]
get(String attr);
abstract public void set(String attr,
byte[] v)
throws IllegalArgumentException;
abstract public Map<String,
byte[]>
getAttrs();
abstract public void merge(Event e);
final public static String TAG_REGEX = "\\%(\\w|\\%)|\\%\\{([\\w\\.-]+)\\}";
final public static Pattern tagPattern = Pattern.compile(TAG_REGEX);
return tagPattern.matcher(in).find();
}
switch (c) {
case 'a':
return "weekday_short";
case 'A':
return "weekday_full";
case 'b':
return "monthname_short";
case 'B':
return "monthname_full";
case 'c':
return "datetime";
case 'd':
return "day_of_month_xx";
case 'D':
return "date_short";
case 'H':
return "hour_24_xx";
case 'I':
return "hour_12_xx";
case 'j':
return "day_of_year_xxx";
case 'k':
return "hour_24";
case 'l':
return "hour_12";
case 'm':
return "month_xx";
case 'M':
return "minute_xx";
case 'p':
return "am_pm";
case 's':
return "unix_seconds";
case 'S':
return "seconds_xx";
case 't':
return "unix_millis";
case 'y':
return "year_xx";
case 'Y':
return "year_xxxx";
case 'z':
return "timezone_delta";
default:
LOG.warn("Unrecognized escape in event format string: %" + c);
return "" + c;
}
}
String formatString = "";
switch (c) {
case '%':
return "%";
case 'a':
formatString = "EEE";
break;
case 'A':
formatString = "EEEE";
break;
case 'b':
formatString = "MMM";
break;
case 'B':
formatString = "MMMM";
break;
case 'c':
formatString = "EEE MMM d HH:mm:ss yyyy";
break;
case 'd':
formatString = "dd";
break;
case 'D':
formatString = "MM/dd/yy";
break;
case 'H':
formatString = "HH";
break;
case 'I':
formatString = "hh";
break;
case 'j':
formatString = "DDD";
break;
case 'k':
formatString = "H";
break;
case 'l':
formatString = "h";
break;
case 'm':
formatString = "MM";
break;
case 'M':
formatString = "mm";
break;
case 'p':
formatString = "a";
break;
case 's':
return "" + getTimestamp() / 1000;
case 'S':
formatString = "ss";
break;
case 't':
return Long.valueOf(getTimestamp()).toString();
case 'y':
formatString = "yy";
break;
case 'Y':
formatString = "yyyy";
break;
case 'z':
formatString = "ZZZ";
break;
default:
LOG.warn("Unrecognized escape in event format string: %" + c);
return "";
}
SimpleDateFormat format = new SimpleDateFormat(formatString);
Date date = new Date(getTimestamp());
return format.format(date);
}
if (tag.equals("hostname") || tag.equals("host")) {
return getHost();
}
if (tag.equals("nanos")) {
return "" + getNanos();
}
if (tag.equals("priority")) {
return getPriority().toString();
}
if (tag.equals("body")) {
return new String(getBody());
}
byte[] attr = get(tag);
if (attr != null) {
return new String(attr);
}
return null;
}
Matcher matcher = tagPattern.matcher(in);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
String replacement = "";
if (matcher.group(2) != null) {
replacement = mapTagToString(matcher.group(2));
if (replacement == null) {
replacement = "";
LOG.warn("Tag " + matcher.group(2) + " not found");
}
} else {
Preconditions.checkState(matcher.group(1) != null
&& matcher.group(1).length() == 1,
"Expected to match single character tag in string " + in);
replacement = replaceShorthand(matcher.group(1).charAt(0));
}
matcher.appendReplacement(sb, replacement);
}
matcher.appendTail(sb);
return sb.toString();
}
Map<String, String> mapping = new HashMap<String, String>();
Matcher matcher = tagPattern.matcher(in);
while (matcher.find()) {
String replacement = "";
if (matcher.group(2) != null) {
replacement = mapTagToString(matcher.group(2));
if (replacement == null) {
replacement = "";
LOG.warn("Tag " + matcher.group(2) + " not found");
}
mapping.put(matcher.group(2), replacement);
} else {
Preconditions.checkState(matcher.group(1) != null
&& matcher.group(1).length() == 1,
"Expected to match single character tag in string " + in);
char c = matcher.group(1).charAt(0);
replacement = replaceShorthand(c);
mapping.put(expandShorthand(c), replacement);
}
}
return mapping;
}
}