package org.orienteer.logger.server.rest; import java.io.IOException; import java.io.StringWriter; import java.util.Date; import javax.servlet.http.HttpServletRequest; import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.request.http.WebRequest; import org.apache.wicket.request.resource.AbstractResource; import org.apache.wicket.request.resource.SharedResourceReference; import org.apache.wicket.util.io.IOUtils; import org.orienteer.core.OrienteerWebApplication; import org.orienteer.logger.server.OLoggerModule; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.orientechnologies.orient.core.db.document.ODatabaseDocument; import com.orientechnologies.orient.core.record.impl.ODocument; import ru.ydn.wicket.wicketorientdb.utils.DBClosure; /** * REST entry point of OLogger events */ public class OLoggerReceiverResource extends AbstractResource { /** * */ private static final long serialVersionUID = 1L; public static final String MOUNT_PATH = "/rest/ologger"; public static final String REGISTRATION_RES_KEY=OLoggerReceiverResource.class.getSimpleName(); private static final Logger LOG = LoggerFactory.getLogger(OLoggerReceiverResource.class); @Override protected ResourceResponse newResourceResponse(Attributes attributes) { final WebRequest request = (WebRequest) attributes.getRequest(); final HttpServletRequest httpRequest = (HttpServletRequest) request.getContainerRequest(); final ResourceResponse response = new ResourceResponse(); response.setContentType("text/plain"); if(response.dataNeedsToBeWritten(attributes)) { String out="OK"; try { if(httpRequest.getMethod().equalsIgnoreCase("GET") //for debug || httpRequest.getMethod().equalsIgnoreCase("POST") ) { String content = IOUtils.toString(httpRequest.getInputStream()); ODocument log = OLoggerModule.storeOLoggerEvent(content); out = log.toJSON(); } } catch (Throwable e) { LOG.error("Error", e); String message = e.getMessage(); if(message==null) message = "Error"; out = message; } final String finalOut = out; response.setWriteCallback(new WriteCallback() { @Override public void writeData(Attributes attributes) throws IOException { attributes.getResponse().write(finalOut); } }); } return response; } public static void mount(WebApplication app) { OLoggerReceiverResource resource = ((OrienteerWebApplication) app).getServiceInstance(OLoggerReceiverResource.class); app.getSharedResources().add(REGISTRATION_RES_KEY, resource); app.mountResource(MOUNT_PATH, new SharedResourceReference(REGISTRATION_RES_KEY)); } public static void unmount(WebApplication app) { app.unmount(MOUNT_PATH); } }