Rev 3445 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020.utils;import in.shop2020.datalogger.EventType;import in.shop2020.datalogger.SocialEventType;import in.shop2020.datalogger.event.Event;import in.shop2020.datalogger.socialevent.SocialEvent;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.UnsupportedEncodingException;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import java.net.URLEncoder;import java.util.Date;import java.util.ResourceBundle;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import org.apache.commons.lang.StringUtils;import org.apache.log4j.Logger;import org.json.JSONObject;public class DataLogger {/*** If it fails to log the data to google app engine, we log the event locally to data.log using log4j.*/private static Logger log = Logger.getLogger(DataLogger.class);/*** RootLogger to be used internal logging of this class.*/private static Logger rootLogger = Logger.getRootLogger();/*** Logger to post data to google app engine.*/private static ExecutorService asyncDataLogger = Executors.newSingleThreadExecutor();private static ExecutorService asyncSocialDataLogger = Executors.newSingleThreadExecutor();private static ResourceBundle properties = ResourceBundle.getBundle(DataLogger.class.getName());private static String googleAppUrl = properties.getString("googleappurl");public static void logData(final EventType eType, final String sessionId, final long userId, final String email, final String... logData) {final String strToWrite = StringUtils.join(logData, ", ");final Long time = (new Date()).getTime();asyncDataLogger.execute(new Runnable() {@Overridepublic void run() {Event event = Event.createEvent(eType, sessionId, userId, email, logData);JSONObject logDataInJson = event.getLogDataInJson();try {// Construct dataString data = URLEncoder.encode("time", "UTF-8") + "=" + URLEncoder.encode(time.toString(), "UTF-8");data += "&" + URLEncoder.encode("eventType", "UTF-8") + "=" + URLEncoder.encode(eType.name(), "UTF-8");data += "&" + URLEncoder.encode("sessionId", "UTF-8") + "=" + URLEncoder.encode(sessionId, "UTF-8");data += "&" + URLEncoder.encode("userId", "UTF-8") + "=" + URLEncoder.encode(Long.toString(userId), "UTF-8");data += "&" + URLEncoder.encode("email", "UTF-8") + "=" + URLEncoder.encode(email, "UTF-8");if (logDataInJson != null) {data += "&" + URLEncoder.encode("jsonLogData", "UTF-8")+ "=" + URLEncoder.encode(logDataInJson.toString(), "UTF-8");}// Send dataURL url = new URL("http://" + googleAppUrl + "/add-data-log");URLConnection conn = url.openConnection();conn.setDoOutput(true);OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());wr.write(data);wr.close();conn.getInputStream().close();} catch (UnsupportedEncodingException e) {rootLogger.error("Unsupported Encoding Exception: " + eType.name() + " " + sessionId + " " + userId + " " + email);log.error(eType.name() + ", " + sessionId + ", " + Long.toString(userId) + ", " + email + ", " + strToWrite);} catch (MalformedURLException e) {rootLogger.error("Malformed URL Exception: " + eType.name() + " " + sessionId + " " + userId + " " + email);log.error(eType.name() + ", " + sessionId + ", " + Long.toString(userId) + ", " + email + ", " + strToWrite);} catch (IOException e) {rootLogger.error("IO Exception: " + eType.name() + " " + sessionId + " " + userId + " " + email);log.error(eType.name() + ", " + sessionId + ", " + Long.toString(userId) + ", " + email + ", " + strToWrite);}}});}public static void logSocialData(final SocialEventType eType, final String userId, final String... logData) {final String strToWrite = StringUtils.join(logData, ", ");final Long time = (new Date()).getTime();asyncSocialDataLogger.execute(new Runnable() {@Overridepublic void run() {log.info(eType.name() + ", " + userId + ", " + strToWrite);SocialEvent event = SocialEvent.createEvent(eType, userId, logData);JSONObject logDataInJson = event.getLogDataInJson();try {String data = URLEncoder.encode("time", "UTF-8") + "=" + URLEncoder.encode(time.toString(), "UTF-8");data += "&" + URLEncoder.encode("eventType", "UTF-8") + "=" + URLEncoder.encode(eType.name(), "UTF-8");data += "&" + URLEncoder.encode("userId", "UTF-8") + "=" + URLEncoder.encode(userId, "UTF-8");if (logDataInJson != null) {data += "&" + URLEncoder.encode("jsonLogData", "UTF-8") + "=" + URLEncoder.encode(logDataInJson.toString(), "UTF-8");}// Send dataURL url = new URL("http://" + googleAppUrl + "/add-social-data-log");URLConnection conn = url.openConnection();conn.setDoOutput(true);OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());wr.write(data);wr.close();BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));while (in.readLine() != null);in.close();} catch (Exception e) {Logger.getRootLogger().warn(e);}}});}public static void main(String[] args) {DataLogger.logData(EventType.NEW_SESSION, "FDTWSYTW", 12, "vmalik@gmail.com", "Test");}}