Skip to content

Instantly share code, notes, and snippets.

@hoffrocket
Created June 21, 2012 15:34
Show Gist options
  • Save hoffrocket/2966433 to your computer and use it in GitHub Desktop.
Save hoffrocket/2966433 to your computer and use it in GitHub Desktop.
tracelytics java api example
package jon.trace;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.concurrent.Executors;
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
import com.tracelytics.api.LogMethod;
import com.tracelytics.api.Trace;
import com.tracelytics.api.TraceEvent;
public class WebServer {
public static void main(String[] args) throws IOException {
int port = 8000;
InetSocketAddress addr = new InetSocketAddress(port);
HttpServer server = HttpServer.create(addr, 0);
server.createContext("/", new MyHandler());
server.setExecutor(Executors.newCachedThreadPool());
server.start();
System.out.println("Server is listening on port " + port);
}
}
class MyHandler implements HttpHandler {
@LogMethod(layer = "internal-ops")
public long expensiveOperation() {
return randomSleep();
}
private long randomSleep() {
long sleepTime = System.currentTimeMillis() % 100;
try {
Thread.sleep(sleepTime);
} catch (InterruptedException e) {
}
return sleepTime;
}
public long mongoQuery(String cluster) {
String eventName = "mongo." + cluster;
TraceEvent entryEvent = Trace.createEntryEvent(eventName);
entryEvent.addInfo("Query", "find({uid:672})",
"Flavor", "mongodb",
"Collection", cluster);
entryEvent.report();
long sleepTime = randomSleep();
Trace.createExitEvent(eventName).report();
return sleepTime;
}
public void handle(HttpExchange exchange) throws IOException {
String appLayerName = "java-app";
String requestMethod = exchange.getRequestMethod();
if (requestMethod.equalsIgnoreCase("GET")) {
Headers responseHeaders = exchange.getResponseHeaders();
responseHeaders.set("Content-Type", "text/plain");
exchange.sendResponseHeaders(200, 0);
OutputStream responseBody = exchange.getResponseBody();
PrintWriter pout = new PrintWriter(responseBody);
Headers requestHeaders = exchange.getRequestHeaders();
List<String> xtraceValues = requestHeaders.get("X-trace");
TraceEvent event = null;
String incomingXtrace = null;
if (xtraceValues != null && !xtraceValues.isEmpty()) {
incomingXtrace = xtraceValues.get(0);
pout.println("Continuing the trace: " + incomingXtrace);
event = Trace.continueTrace(appLayerName, incomingXtrace);
} else {
event = Trace.createEntryEvent(appLayerName);
}
event.addInfo("Controller", "catch-all", "Action", "foo");
event.report();
Set<String> keySet = requestHeaders.keySet();
Iterator<String> iter = keySet.iterator();
while (iter.hasNext()) {
String key = iter.next();
List values = requestHeaders.get(key);
pout.println(key + " = " + values);
}
pout.println("Checkins query took " + mongoQuery("checkins"));
pout.println("Expensive op took " + expensiveOperation());
pout.println("Users query took " + mongoQuery("users"));
Trace.createExitEvent(appLayerName).report();
if (incomingXtrace != null) {
Trace.endTrace(appLayerName);
}
pout.close();
responseBody.close();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment