package kr.ac.kaist.resl.lilliput.adaptor;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.ac.kaist.resl.lilliput.utility.StatsdHelper;
import kr.ac.kaist.resl.lilliput.utility.TitanHelper;
import org.apache.commons.configuration.BaseConfiguration;
import org.apache.commons.configuration.Configuration;
import org.mortbay.util.ajax.JSON;
import com.thinkaurelius.titan.core.TitanFactory;
import com.thinkaurelius.titan.core.TitanGraph;
import com.tinkerpop.blueprints.Vertex;
/**
* Servlet implementation class MobileAdaptor
*/
public class MobileAdaptor extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MobileAdaptor() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
StringBuilder sb = new StringBuilder();
BufferedReader reader = request.getReader();
try {
String line;
while ((line = reader.readLine()) != null) {
sb.append(line).append('\n');
}
} finally {
reader.close();
}
System.out.println(" [MobileAdaptor] : " + sb.toString());
// Send to Statsd
StatsdHelper statsdHelper = new StatsdHelper("localhost", 8125);
Map<String, Object> map = (Map)JSON.parse(sb.toString());
String android_id = map.get("android_id").toString();
Iterator<String> iter = map.keySet().iterator();
while( iter.hasNext() )
{
String key = iter.next();
Object value = map.get(key);
if( value instanceof Double || value instanceof Float || value instanceof Integer || value instanceof Long)
{
String namespace = android_id+"."+key;
double gauge_value = Double.parseDouble(value.toString());
statsdHelper.gauge(namespace, gauge_value);
}
}
// Make Graph
Configuration conf = new BaseConfiguration();
conf.setProperty("storage.backend", "cassandra");
conf.setProperty("storage.hostname", "127.0.0.1");
TitanGraph g = TitanFactory.open(conf);
Vertex v = TitanHelper.getVertex(g, "android_id", android_id);
if( v == null ){
//System.out.println("[MobileAdaptor] Create New Vertex : " + android_id );
v = g.addVertex(null);
v.setProperty("android_id", android_id);
v.setProperty("ltype", "Object");
}
else
{
//System.out.println("[MobileAdaptor] Existing Vertex : " + android_id );
}
iter = map.keySet().iterator();
while( iter.hasNext() )
{
String key = iter.next();
Object value = map.get(key);
v.setProperty(key, value);
}
g.commit();
g.shutdown();
}
}