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(); } }