@Override protected Map<String, Object> toJsonMap(IAccessEvent event) { return new MapBuilder(timestampFormatter, customFieldNames, additionalFields, includes.size()) .addNumber("port", isIncluded(AccessAttribute.LOCAL_PORT), event::getLocalPort) .addNumber("contentLength", isIncluded(AccessAttribute.CONTENT_LENGTH), event::getContentLength) .addTimestamp("timestamp", isIncluded(AccessAttribute.TIMESTAMP), event.getTimeStamp()) .add("method", isIncluded(AccessAttribute.METHOD), event::getMethod) .add("protocol", isIncluded(AccessAttribute.PROTOCOL), event::getProtocol) .add("requestContent", isIncluded(AccessAttribute.REQUEST_CONTENT), event::getRequestContent) .add("remoteAddress", isIncluded(AccessAttribute.REMOTE_ADDRESS), event::getRemoteAddr) .add("remoteUser", isIncluded(AccessAttribute.REMOTE_USER), event::getRemoteUser) .addMap("headers", !requestHeaders.isEmpty(), () -> filterHeaders(event.getRequestHeaderMap(), requestHeaders)) .addMap("params", isIncluded(AccessAttribute.REQUEST_PARAMETERS), event::getRequestParameterMap) .addNumber("requestTime", isIncluded(AccessAttribute.REQUEST_TIME), event::getElapsedTime) .add("uri", isIncluded(AccessAttribute.REQUEST_URI), event::getRequestURI) .add("url", isIncluded(AccessAttribute.REQUEST_URL), event::getRequestURL) .add("pathQuery", isIncluded(AccessAttribute.PATH_QUERY), () -> event.getRequestURI() + event.getQueryString()) .add("remoteHost", isIncluded(AccessAttribute.REMOTE_HOST), event::getRemoteHost) .add("responseContent", isIncluded(AccessAttribute.RESPONSE_CONTENT), event::getResponseContent) .addMap("responseHeaders", !responseHeaders.isEmpty(), () -> filterHeaders(event.getResponseHeaderMap(), responseHeaders)) .add("serverName", isIncluded(AccessAttribute.SERVER_NAME), event::getServerName) .addNumber("status", isIncluded(AccessAttribute.STATUS_CODE), event::getStatusCode) .add("userAgent", isIncluded(AccessAttribute.USER_AGENT), () -> event.getRequestHeader(USER_AGENT)) .add("version", jsonProtocolVersion != null, jsonProtocolVersion) .build(); }
@Override public long getTimeStamp() { return event.getTimeStamp(); } };
@Override protected long getTimestampAsMillis(IAccessEvent event) { return event.getTimeStamp(); }
@Override protected long getTimestamp(IAccessEvent event) { return event.getTimeStamp(); }
@Override protected void serializeCommonFields(JsonGenerator gen, IAccessEvent event) throws IOException { gen.writeObjectField("@timestamp", getTimestamp(event.getTimeStamp())); } }
@Override public String convert(IAccessEvent accessEvent) { long timestamp = accessEvent.getTimeStamp(); return cachingDateFormatter.format(timestamp); } }
void addAccessEvent(PreparedStatement stmt, IAccessEvent event) throws SQLException { stmt.setLong(1, event.getTimeStamp()); stmt.setString(2, event.getRequestURI()); stmt.setString(3, event.getRequestURL()); stmt.setString(4, event.getRemoteHost()); stmt.setString(5, event.getRemoteUser()); stmt.setString(6, event.getRemoteAddr()); stmt.setString(7, event.getProtocol()); stmt.setString(8, event.getMethod()); stmt.setString(9, event.getServerName()); stmt.setString(10, event.getRequestContent()); }
/** * Verifies that the timestamp is in given range. * * @param start the start value of range (inclusive). * @param end the end value of range (inclusive). * @return this instance. * @see IAccessEvent#getTimeStamp() */ public S hasTimestamp(LocalDateTime start, LocalDateTime end) { long actualTimestampAsLong = actual.getTimeStamp(); LocalDateTime actualTimestamp = LocalDateTime.ofInstant( Instant.ofEpochMilli(actualTimestampAsLong), ZoneId.systemDefault()); Assertions.assertThat(actualTimestamp) .isAfterOrEqualTo(start) .isBeforeOrEqualTo(end); return myself; }
@Test public void testAppendAccessEvent() throws SQLException { setInsertHeadersAndStart(false); IAccessEvent event = createAccessEvent(); appender.append(event); Statement stmt = connectionSource.getConnection().createStatement(); ResultSet rs = null; rs = stmt.executeQuery("SELECT * FROM access_event where EVENT_ID = " + existingEventTableRowCount); if (rs.next()) { assertEquals(event.getTimeStamp(), rs.getLong(1)); assertEquals(event.getRequestURI(), rs.getString(2)); assertEquals(event.getRequestURL(), rs.getString(3)); assertEquals(event.getRemoteHost(), rs.getString(4)); assertEquals(event.getRemoteUser(), rs.getString(5)); assertEquals(event.getRemoteAddr(), rs.getString(6)); assertEquals(event.getProtocol(), rs.getString(7)); assertEquals(event.getMethod(), rs.getString(8)); assertEquals(event.getServerName(), rs.getString(9)); assertEquals(event.getRequestContent(), rs.getString(10)); } else { fail("No row was inserted in the database"); } rs.close(); stmt.close(); }
@Test public void testDateConverter() { DateConverter converter = new DateConverter(); converter.start(); String result = converter.convert(event); assertEquals(converter.cachingDateFormatter.format(event.getTimeStamp()), result); }