package com.neverwinterdp.sparkngin.http; import io.netty.handler.codec.http.HttpRequest; import io.netty.handler.codec.http.QueryStringDecoder; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.regex.Pattern; import com.neverwinterdp.util.text.StringUtil; /** * Formats data to be sent to Sparkngin * @author Tuan Ngyuen and Richard Duarte */ public class RequestLog { private String id ; private String trackerName; private String site ; private String uri ; private String method ; private Map<String, String> requestHeaders ; public RequestLog() { } /** * Constructor * @param httpReq HttpRequest object to be sent to Sparkngin */ public RequestLog(HttpRequest httpReq, Pattern[] headerMatcher) { QueryStringDecoder decoder = new QueryStringDecoder(httpReq.getUri()); String path = decoder.path() ; List<String> segments = StringUtil.split(path, '/') ; this.trackerName = segments.get(1) ; this.site = segments.get(2) ; this.uri = httpReq.getUri() ; this.method = httpReq.getMethod().name() ; requestHeaders = new HashMap<String, String>() ; Iterator<Entry<String, String>> i = httpReq.headers().iterator() ; while(i.hasNext()) { Entry<String, String> entry =i.next(); String key = entry.getKey() ; if(extractHeader(key, headerMatcher)) { requestHeaders.put(key, entry.getValue()) ; } } } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getTrackerName() { return trackerName; } public void setTrackerName(String trackerName) { this.trackerName = trackerName; } public String getSite() { return site; } public void setSite(String site) { this.site = site; } public String getUri() { return uri; } public void setUri(String uri) { this.uri = uri; } public String getMethod() { return method; } public void setMethod(String method) { this.method = method; } public Map<String, String> getRequestHeaders() { return requestHeaders; } public void setRequestHeaders(Map<String, String> requestHeaders) { this.requestHeaders = requestHeaders; } private boolean extractHeader(String name, Pattern[] headerMatcher) { if(headerMatcher == null) return true ; for(Pattern sel : headerMatcher) { if(sel.matcher(name).matches()) return true; } return false ; } }