| 2528 |
vikas |
1 |
package in.shop2020.utils;
|
|
|
2 |
|
|
|
3 |
import in.shop2020.datalogger.EventType;
|
| 2777 |
varun.gupt |
4 |
import in.shop2020.datalogger.SocialEventType;
|
| 2528 |
vikas |
5 |
import in.shop2020.datalogger.event.Event;
|
| 2777 |
varun.gupt |
6 |
import in.shop2020.datalogger.socialevent.SocialEvent;
|
| 2528 |
vikas |
7 |
|
|
|
8 |
import java.io.BufferedReader;
|
|
|
9 |
import java.io.InputStreamReader;
|
|
|
10 |
import java.io.OutputStreamWriter;
|
|
|
11 |
import java.net.URL;
|
|
|
12 |
import java.net.URLConnection;
|
|
|
13 |
import java.net.URLEncoder;
|
|
|
14 |
import java.util.Date;
|
|
|
15 |
import java.util.ResourceBundle;
|
|
|
16 |
import java.util.concurrent.ExecutorService;
|
|
|
17 |
import java.util.concurrent.Executors;
|
|
|
18 |
|
|
|
19 |
import org.apache.commons.lang.StringUtils;
|
|
|
20 |
import org.apache.log4j.Logger;
|
|
|
21 |
import org.json.JSONObject;
|
|
|
22 |
|
|
|
23 |
public class DataLogger {
|
| 3073 |
vikas |
24 |
/**
|
|
|
25 |
* If it fails to log the data to google app engine, we log the event locally to data.log using log4j.
|
|
|
26 |
*/
|
| 2528 |
vikas |
27 |
private static Logger log = Logger.getLogger(DataLogger.class);
|
| 3073 |
vikas |
28 |
|
|
|
29 |
/**
|
|
|
30 |
* RootLogger to be used internal logging of this class.
|
|
|
31 |
*/
|
| 2965 |
chandransh |
32 |
private static Logger rootLogger = Logger.getRootLogger();
|
| 3073 |
vikas |
33 |
|
|
|
34 |
/**
|
|
|
35 |
* Logger to post data to google app engine.
|
|
|
36 |
*/
|
| 2528 |
vikas |
37 |
private static ExecutorService asyncDataLogger = Executors.newSingleThreadExecutor();
|
| 2777 |
varun.gupt |
38 |
private static ExecutorService asyncSocialDataLogger = Executors.newSingleThreadExecutor();
|
| 2528 |
vikas |
39 |
private static ResourceBundle properties = ResourceBundle.getBundle(DataLogger.class.getName());
|
|
|
40 |
private static String googleAppUrl = properties.getString("googleappurl");
|
| 2777 |
varun.gupt |
41 |
|
| 2528 |
vikas |
42 |
public static void logData(final EventType eType, final String sessionId, final long userId, final String email, final String... logData) {
|
|
|
43 |
final String strToWrite = StringUtils.join(logData, ", ");
|
|
|
44 |
final Long time = (new Date()).getTime();
|
|
|
45 |
asyncDataLogger.execute(new Runnable() {
|
|
|
46 |
@Override
|
|
|
47 |
public void run() {
|
|
|
48 |
Event event = Event.createEvent(eType, sessionId, userId, email, logData);
|
|
|
49 |
JSONObject logDataInJson = event.getLogDataInJson();
|
|
|
50 |
try {
|
|
|
51 |
// Construct data
|
|
|
52 |
String data = URLEncoder.encode("time", "UTF-8") + "=" + URLEncoder.encode(time.toString(), "UTF-8");
|
|
|
53 |
data += "&" + URLEncoder.encode("eventType", "UTF-8") + "=" + URLEncoder.encode(eType.name(), "UTF-8");
|
|
|
54 |
data += "&" + URLEncoder.encode("sessionId", "UTF-8") + "=" + URLEncoder.encode(sessionId, "UTF-8");
|
|
|
55 |
data += "&" + URLEncoder.encode("userId", "UTF-8") + "=" + URLEncoder.encode(Long.toString(userId), "UTF-8");
|
|
|
56 |
data += "&" + URLEncoder.encode("email", "UTF-8") + "=" + URLEncoder.encode(email, "UTF-8");
|
|
|
57 |
if (logDataInJson != null) {
|
|
|
58 |
data += "&" + URLEncoder.encode("jsonLogData", "UTF-8")
|
|
|
59 |
+ "=" + URLEncoder.encode(logDataInJson.toString(), "UTF-8");
|
|
|
60 |
}
|
|
|
61 |
|
|
|
62 |
// Send data
|
|
|
63 |
URL url = new URL("http://" + googleAppUrl + "/add-data-log");
|
|
|
64 |
URLConnection conn = url.openConnection();
|
|
|
65 |
conn.setDoOutput(true);
|
|
|
66 |
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
|
|
|
67 |
wr.write(data);
|
|
|
68 |
wr.close();
|
|
|
69 |
|
| 3073 |
vikas |
70 |
conn.getInputStream().close();
|
| 2528 |
vikas |
71 |
} catch (Exception e) {
|
| 2965 |
chandransh |
72 |
rootLogger.error("Unable to post data to web data log", e);
|
| 2889 |
vikas |
73 |
log.info(eType.name() + ", " + sessionId + ", " + Long.toString(userId) + ", " + email + ", " + strToWrite);
|
| 2528 |
vikas |
74 |
}
|
| 2777 |
varun.gupt |
75 |
}
|
|
|
76 |
});
|
|
|
77 |
}
|
|
|
78 |
|
|
|
79 |
public static void logSocialData(final SocialEventType eType, final String userId, final String... logData) {
|
|
|
80 |
final String strToWrite = StringUtils.join(logData, ", ");
|
|
|
81 |
final Long time = (new Date()).getTime();
|
|
|
82 |
asyncSocialDataLogger.execute(new Runnable() {
|
|
|
83 |
@Override
|
|
|
84 |
public void run() {
|
|
|
85 |
log.info(eType.name() + ", " + userId + ", " + strToWrite);
|
|
|
86 |
SocialEvent event = SocialEvent.createEvent(eType, userId, logData);
|
|
|
87 |
JSONObject logDataInJson = event.getLogDataInJson();
|
|
|
88 |
|
|
|
89 |
try {
|
|
|
90 |
String data = URLEncoder.encode("time", "UTF-8") + "=" + URLEncoder.encode(time.toString(), "UTF-8");
|
|
|
91 |
data += "&" + URLEncoder.encode("eventType", "UTF-8") + "=" + URLEncoder.encode(eType.name(), "UTF-8");
|
|
|
92 |
data += "&" + URLEncoder.encode("userId", "UTF-8") + "=" + URLEncoder.encode(userId, "UTF-8");
|
|
|
93 |
|
|
|
94 |
if (logDataInJson != null) {
|
|
|
95 |
data += "&" + URLEncoder.encode("jsonLogData", "UTF-8") + "=" + URLEncoder.encode(logDataInJson.toString(), "UTF-8");
|
|
|
96 |
}
|
| 2528 |
vikas |
97 |
|
| 2777 |
varun.gupt |
98 |
// Send data
|
|
|
99 |
URL url = new URL("http://" + googleAppUrl + "/add-social-data-log");
|
|
|
100 |
URLConnection conn = url.openConnection();
|
|
|
101 |
conn.setDoOutput(true);
|
|
|
102 |
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
|
|
|
103 |
wr.write(data);
|
|
|
104 |
wr.close();
|
|
|
105 |
|
|
|
106 |
BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
|
|
|
107 |
while (in.readLine() != null);
|
|
|
108 |
in.close();
|
|
|
109 |
|
|
|
110 |
} catch (Exception e) {
|
|
|
111 |
Logger.getRootLogger().warn(e);
|
|
|
112 |
}
|
| 2528 |
vikas |
113 |
}
|
|
|
114 |
});
|
|
|
115 |
}
|
| 3073 |
vikas |
116 |
|
|
|
117 |
public static void main(String[] args) {
|
|
|
118 |
DataLogger.logData(EventType.NEW_SESSION, "FDTWSYTW", 12, "vmalik@gmail.com", "Test");
|
|
|
119 |
}
|
| 2777 |
varun.gupt |
120 |
}
|