[
https://issues.apache.org/jira/browse/DRILL-3423?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14649894#comment-14649894
]
Niels Basjes commented on DRILL-3423:
-------------------------------------
I took a quick stab at the addAsParseTarget method (didn't even run it or test
this) to show you how to use the casting options that the parser has built in.
Effectively I would move the mappings out into a property file and then do{code}
EnumSet<Casts> casts = parser.getCasts(path);
if (casts.contains(Casts.DOUBLE)) {
add(parser, path,
writer.rootAsMap().map(mapping.key()).float8(mapping.value()));
} else if (casts.contains(Casts.LONG)) {
add(parser, path,
writer.rootAsMap().map(mapping.key()).bigInt(mapping.value()));
} else {
add(parser, path,
writer.rootAsMap().map(mapping.key()).varChar(mapping.value()));
}
{code}
Here is the entire snippet I hacked at
{code} private void addParseTargetMapping(Map<String,Pair<String,String>>
mappings, String path, String map, String name){
mappings.put(path, new Pair<String,String>(map, name));
}
public void addAsParseTarget(Parser<ComplexWriterFacade> parser) {
try {
Map<String,Pair<String,String>> mappings = new HashMap<>();
// TODO: Move this to a property file
addParseTargetMapping(mappings, "NUMBER:connection.keepalivecount",
"client","keepalivecount");
addParseTargetMapping(mappings, "NUMBER:connection.client.logname"
,"request","logname");
addParseTargetMapping(mappings, "STRING:request.errorlogid"
,"request","errorlogid");
addParseTargetMapping(mappings, "HTTP.METHOD:request.method"
,"request","method");
addParseTargetMapping(mappings, "PORT:request.server.port.canonical"
,"server","canonical_port");
addParseTargetMapping(mappings,
"PORT:connection.server.port.canonical" ,"server","canonical_port");
addParseTargetMapping(mappings, "PORT:connection.client.port"
,"client","port");
addParseTargetMapping(mappings,
"NUMBER:connection.server.child.processid" ,"server","process_id");
addParseTargetMapping(mappings,
"NUMBER:connection.server.child.threadid" ,"server","thread_id");
addParseTargetMapping(mappings,
"STRING:connection.server.child.hexthreadid" ,"connection","hex_thread_id");
addParseTargetMapping(mappings,
"HTTP.QUERYSTRING:request.querystring" ,"","");
addParseTargetMapping(mappings, "HTTP.FIRSTLINE:request.firstline"
,"","");
addParseTargetMapping(mappings, "STRING:request.handler"
,"request","handler");
addParseTargetMapping(mappings, "STRING:request.status.original"
,"request","status_original");
addParseTargetMapping(mappings, "STRING:request.status.last"
,"request","status_last");
addParseTargetMapping(mappings, "TIME.STAMP:request.receive.time"
,"request","timestamp");
addParseTargetMapping(mappings,
"TIME.EPOCH:request.receive.time.begin.msec" ,"request","begin_msec");
addParseTargetMapping(mappings,
"TIME.EPOCH:request.receive.time.end.msec" ,"request","end_msec");
addParseTargetMapping(mappings,
"TIME.EPOCH.USEC:request.receive.time.begin.usec" ,"request","begin_usec");
addParseTargetMapping(mappings,
"TIME.EPOCH.USEC:request.receive.time.end.usec" ,"request","end_usec");
addParseTargetMapping(mappings,
"TIME.EPOCH:request.receive.time.begin.msec_frac" ,"request","begin_msec_frac");
addParseTargetMapping(mappings,
"TIME.EPOCH:request.receive.time.end.msec_frac" ,"request","end_msec_frac");
addParseTargetMapping(mappings,
"TIME.EPOCH.USEC_FRAC:request.receive.time.begin.usec_frac"
,"request","begin_usec_frac");
addParseTargetMapping(mappings,
"TIME.EPOCH.USEC_FRAC:request.receive.time.end.usec_frac"
,"request","end_usec_frac");
addParseTargetMapping(mappings,
"SECONDS:response.server.processing.time" ,"response","processing_time");
addParseTargetMapping(mappings, "STRING:connection.client.user"
,"client","user");
addParseTargetMapping(mappings, "URI:request.urlpath"
,"request","url");
addParseTargetMapping(mappings,
"STRING:connection.server.name.canonical" ,"server","canonical_name");
addParseTargetMapping(mappings, "STRING:connection.server.name"
,"server","name");
addParseTargetMapping(mappings,
"HTTP.CONNECTSTATUS:response.connection.status"
,"response","connection_status");
addParseTargetMapping(mappings, "BYTES:request.bytes"
,"request","bytes");
addParseTargetMapping(mappings, "BYTES:response.bytes"
,"response","bytes");
addParseTargetMapping(mappings, "HTTP.COOKIES:request.cookies"
,"request","cookies");
addParseTargetMapping(mappings, "HTTP.SETCOOKIES:response.cookies"
,"response","cookies");
addParseTargetMapping(mappings, "HTTP.USERAGENT:request.user-agent"
,"request","useragent");
addParseTargetMapping(mappings, "HTTP.URI:request.referer"
,"request","referer");
addParseTargetMapping(mappings, "HTTP.METHOD:method"
,"request","method");
addParseTargetMapping(mappings, "HTTP.URI:uri" ,"request","uri");
addParseTargetMapping(mappings, "HTTP.PROTOCOL:protocol"
,"request","protocol");
addParseTargetMapping(mappings,
"HTTP.PROTOCOL.VERSION:protocol.version" ,"request","protocol_version");
addParseTargetMapping(mappings,
"HTTP.METHOD:request.firstline.method" ,"request","method");
addParseTargetMapping(mappings, "HTTP.URI:request.firstline.uri"
,"request","uri");
addParseTargetMapping(mappings,
"HTTP.PROTOCOL:request.firstline.protocol" ,"request","protocol");
addParseTargetMapping(mappings,
"HTTP.PROTOCOL.VERSION:request.firstline.protocol.version"
,"request","protocol_version");
for (final String path : parser.getPossiblePaths()) {
EnumSet<Casts> casts = parser.getCasts(path);
Pair<String, String> mapping = mappings.get(path);
if (mapping == null) {
final String noPeriodPath = path.replace(".", "_");
if (casts.contains(Casts.DOUBLE)) {
add(parser, path, writer.rootAsMap().float8(noPeriodPath));
} else if (casts.contains(Casts.LONG)) {
add(parser, path, writer.rootAsMap().bigInt(noPeriodPath));
} else {
add(parser, path, writer.rootAsMap().varChar(noPeriodPath));
}
} else {
if (casts.contains(Casts.DOUBLE)) {
add(parser, path,
writer.rootAsMap().map(mapping.key()).float8(mapping.value()));
} else if (casts.contains(Casts.LONG)) {
add(parser, path,
writer.rootAsMap().map(mapping.key()).bigInt(mapping.value()));
} else {
add(parser, path,
writer.rootAsMap().map(mapping.key()).varChar(mapping.value()));
}
}
}
} catch (MissingDissectorsException | SecurityException |
NoSuchMethodException | InvalidDissectorException e) {
throw handleAndGenerate("Failure while setting up log mappings.", e);
}
}
}
}
{code}
> Add New HTTPD format plugin
> ---------------------------
>
> Key: DRILL-3423
> URL: https://issues.apache.org/jira/browse/DRILL-3423
> Project: Apache Drill
> Issue Type: New Feature
> Components: Storage - Other
> Reporter: Jacques Nadeau
> Assignee: Jacques Nadeau
> Fix For: 1.2.0
>
>
> Add an HTTPD logparser based format plugin. The author has been kind enough
> to move the logparser project to be released under the Apache License. Can
> find it here:
> <dependency>
> <groupId>nl.basjes.parse.httpdlog</groupId>
> <artifactId>httpdlog-parser</artifactId>
> <version>2.0</version>
> </dependency>
>
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)