Subversion Repositories SmartDukaan

Rev

Rev 3193 | Rev 3532 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2620 vikas 1
package in.shop2020.web;
2
 
3
import java.util.ArrayList;
3193 vikas 4
import java.util.Calendar;
2620 vikas 5
import java.util.Date;
6
import java.util.List;
3193 vikas 7
import java.util.TimeZone;
3526 vikas 8
import java.util.logging.Logger;
2620 vikas 9
 
10
import javax.servlet.http.HttpServlet;
11
import javax.servlet.http.HttpServletRequest;
12
import javax.servlet.http.HttpServletResponse;
13
 
14
import org.json.JSONArray;
15
import org.json.JSONException;
16
import org.json.JSONObject;
17
 
18
import com.google.appengine.api.datastore.DatastoreService;
19
import com.google.appengine.api.datastore.DatastoreServiceFactory;
20
import com.google.appengine.api.datastore.Entity;
21
 
22
public class AddDataLogServlet extends HttpServlet {
23
    private static final long serialVersionUID = -8236918415987438049L;
3526 vikas 24
    private static Logger logger = Logger.getLogger(AddDataLogServlet.class.getName());
25
 
26
    private static final int BATCH_SIZE = 200;
27
    private List<Entity> entityList =  new ArrayList<Entity>(); // TO store entities in batches for performance
28
 
2620 vikas 29
    public void doPost(HttpServletRequest req, HttpServletResponse resp) {
30
        Entity entity = new Entity("DataLog");
31
        entity.setProperty("logTime", new Date());
32
 
33
        setTime(req, entity);
34
        setEventType(req, entity);
35
        setSessionId(req, entity);
36
        setUserId(req, entity);
37
        setEmail(req, entity);
38
        setLogData(req, entity);
39
 
3526 vikas 40
        entityList.add(entity);
41
        if(entityList.size() >= BATCH_SIZE) {
42
            logger.warning("Pushing events to datastore : " + entityList.size());
43
            synchronized(entityList) {
44
                DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
45
                ds.put(entityList);
46
                entityList.clear();
47
            }
48
        }
2620 vikas 49
    }
50
 
51
    public void doGet(HttpServletRequest req, HttpServletResponse resp) {
52
        doPost(req, resp);
53
    }
54
 
55
    private void setTime(HttpServletRequest req, Entity entity) {
3193 vikas 56
        Date date = new Date(Long.valueOf(req.getParameter("time")));
57
        entity.setProperty("date", date);
58
 
59
        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("IST"));
60
        cal.setTime(date);
61
        cal.set(Calendar.HOUR_OF_DAY, 0);
62
        cal.set(Calendar.MINUTE, 0);  
63
        cal.set(Calendar.SECOND, 0);  
64
        cal.set(Calendar.MILLISECOND, 0);
65
        entity.setProperty("shortdate", cal.getTime());
2620 vikas 66
    }
67
 
68
    private void setEventType(HttpServletRequest req, Entity entity) {
69
        entity.setProperty("eventType", req.getParameter("eventType"));
70
    }
71
 
72
    private void setSessionId(HttpServletRequest req, Entity entity) {
73
        entity.setProperty("sessionId", req.getParameter("sessionId"));
74
    }
75
 
76
    private void setUserId(HttpServletRequest req, Entity entity) {
77
        Integer userId = 0;
78
        try {
79
            userId = Integer.valueOf(req.getParameter("userId"));
80
        }
81
        catch (NumberFormatException e) {
82
        }
83
        entity.setProperty("userId", userId);
84
    }
85
 
86
    private void setEmail(HttpServletRequest req, Entity entity) {
87
        entity.setProperty("email", req.getParameter("email"));
88
    }
89
 
90
    private void setLogData(HttpServletRequest req, Entity entity) {
91
        try {
92
            String jsonLogData = req.getParameter("jsonLogData");
93
            if (jsonLogData == null) {
94
                return;
95
            }
96
            JSONObject logDataJson = new JSONObject(req.getParameter("jsonLogData"));
97
            for (String key : JSONObject.getNames(logDataJson)) {
98
                if (key.endsWith("_long_list")) {
99
                    JSONArray vals = logDataJson.getJSONArray(key);
100
                    List<Long> lVals = new ArrayList<Long>();
101
                    for (int i = 0; i<vals.length(); i++) {
102
                        lVals.add(vals.getLong(i));
103
                    }
104
                    entity.setProperty(key.replace("_long_list", ""), lVals);
105
                } else if (key.endsWith("_long")) {
106
                    entity.setProperty(key.replace("_long", ""), logDataJson.getLong(key));
107
                }
108
                else {
109
                    entity.setProperty(key, logDataJson.getString(key));
110
                }
111
            }
112
        } catch (JSONException e) {
113
            e.printStackTrace();
114
        }
115
    }
3526 vikas 116
 
117
    @Override
118
    public void destroy() {
119
        logger.warning("Pushing events to datastore in destroy() : " + entityList.size());
120
        synchronized(entityList) {
121
            DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
122
            ds.put(entityList);
123
            entityList.clear();
124
        }
125
        super.destroy();
126
    }
2620 vikas 127
}