Subversion Repositories SmartDukaan

Rev

Rev 4932 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4638 amar.kumar 1
<%@ page language="java" contentType="text/html; charset=UTF-8"
2
    pageEncoding="UTF-8"%>
3
<%@ page import="com.google.appengine.api.datastore.DatastoreServiceFactory" %>
4
<%@ page import="com.google.appengine.api.datastore.DatastoreService" %>
5
<%@ page import="com.google.appengine.api.datastore.Query" %>
6
<%@ page import="com.google.appengine.api.datastore.Entity" %>
7
<%@ page import="com.google.appengine.api.datastore.PreparedQuery" %>
8
<%@	page import="com.google.appengine.api.datastore.Query.SortDirection"%>
9
<%@	page import="java.util.Calendar"%>
10
<%@ page import="java.util.Map"%>
4816 amar.kumar 11
<%@ page import="java.util.LinkedHashMap"%>
4638 amar.kumar 12
<%@	page import="java.util.Map.Entry"%>
13
<%@	page import="java.text.ParseException"%>
14
<%@	page import="java.util.TimeZone"%>
15
<%@	page import="java.util.Date"%>
4816 amar.kumar 16
<%@	page import="java.util.Set"%>
17
<%@	page import="java.util.Calendar"%>
4638 amar.kumar 18
<%@	page import="java.text.SimpleDateFormat"%>
19
<%@	page import="in.shop2020.model.Category"%>
20
 
21
 
22
<html>
23
<head>
4816 amar.kumar 24
 
25
<script>
26
var dataArray = [];
27
</script>
28
<script type="text/javascript" language="javascript" src="/DataTables/media/js/jquery.js"></script>
29
<script type="text/javascript" language="javascript" src="/DataTables/media/js/jquery.dataTables.min.js"></script>
30
<script type="text/javascript" charset="utf-8" src="/DataTables/extras/TableTools/media/js/ZeroClipboard.js"></script>
31
<script type="text/javascript" charset="utf-8" src="/DataTables/extras/TableTools/media/js/TableTools.js"></script>
32
<script src="/js/flot/jquery.flot.js" ></script>
33
<script type="text/javascript" src = "/js/flot/jquery.flot.navigate.js"></script>
34
 
4638 amar.kumar 35
<link rel="stylesheet" href="/DataTables/media/css/demo_table.css" type="text/css" />
36
<link rel="stylesheet" href="/DataTables/extras/TableTools/media/css/TableTools.css" type="text/css" /> 
37
<title>Search Analysis</title>
38
</head>
39
<body>
40
<%
41
Date toDate = new Date();
42
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("IST"));
43
cal.add(Calendar.DAY_OF_MONTH, -2);
44
Date fromDate = cal.getTime();
45
SimpleDateFormat iSdf = new SimpleDateFormat("yyyyMMdd");
46
String toDateStr  = request.getParameter("toDate");
47
String fromDateStr = request.getParameter("fromDate");
48
if (fromDateStr == null || fromDateStr.isEmpty()) {
49
    fromDateStr = iSdf.format(fromDate);
50
}
51
if (toDateStr == null || toDateStr.isEmpty()) {
52
    toDateStr = iSdf.format(toDate);
53
}
54
String eventType = "PRODUCT_SEARCH";
55
String productQuery = request.getParameter("productQuery");
56
%>
57
 
58
<form id="searchfilter" name="searchfilter" method="post" action="/jsp/productSearch.jsp">
59
<label>From Date(YYYYMMDD) : </label> <input type="text" name="fromDate" id="fromDate" value="<%= fromDateStr %>"/>
60
<label>To Date(YYYYMMDD) : </label> <input type="text" name="toDate" id="toDate" value="<%= toDateStr %>"/>
4932 amar.kumar 61
<% if(productQuery!=null){
62
%>
63
	<input type="text" name="productQuery" style = "display:none "value="<%= productQuery %>"/>
64
<% } %>
4638 amar.kumar 65
<input type="Submit" id="Submit" name="Submit" value="Submit" />
66
</form>
67
 
68
<%
69
    try {
70
        if (fromDateStr != null) {
71
            fromDate = iSdf.parse(fromDateStr);
72
        }
73
        if (toDateStr != null) {
74
            toDate = iSdf.parse(toDateStr);
75
        }
76
    }
77
    catch (ParseException pe) {
78
%>
79
        <span>Invalid Date Format</span>
80
<%
81
    }
82
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
83
    sdf.setTimeZone(TimeZone.getTimeZone("IST"));
4816 amar.kumar 84
 
85
    //Initializing Date variables for calculation of graph data
86
    Map<Long, Long> graphData = new LinkedHashMap<Long, Long>();
87
    long previousDate = fromDate.getTime();
88
    graphData.put(previousDate, new Long(0));
89
    Calendar currentRecordDate = Calendar.getInstance();
90
    currentRecordDate.setTimeInMillis(fromDate.getTime());
91
    Calendar previousrecordDate = Calendar.getInstance();
92
    previousrecordDate.setTimeInMillis(fromDate.getTime());
93
 
4638 amar.kumar 94
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
95
    Query query = new Query("DataLog");
96
    query.addFilter("eventType", Query.FilterOperator.EQUAL, "PRODUCT_SEARCH");
97
    query.addFilter("date", Query.FilterOperator.GREATER_THAN_OR_EQUAL, fromDate);
98
    query.addFilter("date", Query.FilterOperator.LESS_THAN_OR_EQUAL, toDate);
99
    if(productQuery!=null){
100
    	query.addFilter("query",Query.FilterOperator.EQUAL,productQuery);	
101
    }
102
    PreparedQuery pq = datastore.prepare(query);
103
%>
104
 
105
<table cellpadding="0" cellspacing="0" border="0" class="display" id="searchData">
106
	<thead>
107
		<tr>
108
			<th>Date</th>
109
			<th>UserId</th>	
110
			<th>Session</th>
111
			<th>Query String</th>
112
			<th>Category</th>
113
			<th>Number of Results</th>
114
		</tr>
115
	</thead>
116
	<tbody>
117
<%
118
        for (Entity result : pq.asIterable()) {
4816 amar.kumar 119
 
120
        	currentRecordDate.setTime((Date)(result.getProperty("date")));
121
 
122
        	if((currentRecordDate.getTimeInMillis() - previousDate) >= 86400000)	{
123
 
124
        		long dayDiff = (currentRecordDate.getTimeInMillis() - previousrecordDate.getTimeInMillis()) / 86400000;
125
 
126
        		for(int i = 1; i <= dayDiff; i ++)	{
127
					previousDate = previousDate + 86400000;
128
					previousrecordDate.add(Calendar.DAY_OF_MONTH, 1);
129
					graphData.put(previousDate, new Long(0));
130
        		}
4935 amar.kumar 131
    			graphData.put(previousDate, new Long(1));
132
        	} else	{
4816 amar.kumar 133
    			graphData.put(previousDate, graphData.get(previousDate) + 1);
134
        	}
4638 amar.kumar 135
%>			
136
			<tr>
137
				<td><%=sdf.format((Date) (result.getProperty("date")))%></td>
138
				<td><a href="/jsp/user-activity.jsp?email=<%=result.getProperty("email").toString()%>"><%= result.getProperty("email").toString() %></a></td>
139
            	<td><a href="/jsp/session-activity.jsp?sessionId=<%=result.getProperty("sessionId").toString()%>">View Session</a></td>
140
                <td><%=(result.getProperty("query")) %></td>
141
				<td><%=Category.findByValue(Integer.parseInt(result.getProperty("categoryId").toString())) %></td>
142
				<td><%=(result.getProperty("totalResults")) %></td>	
143
            </tr>    
144
            <%}%>
145
 
146
	</tbody>
147
</table>
4816 amar.kumar 148
<br/>
149
<br/>
150
<br/>
151
<div id = "zoombuttonholder"></div>
4638 amar.kumar 152
 
4816 amar.kumar 153
<%Set<Long> dateSet = graphData.keySet();
154
	for(Long date : dateSet){%>
155
	<script>
156
		//Putting Graph data in javascript array
157
		dataArray.push([<%=date%>,<%=graphData.get(date)%>]);	
158
	</script>
159
<%} %>
160
<div id="placeholder" style="position:relative;width:950px;height:300px"></div>
161
<br>
4638 amar.kumar 162
 
4816 amar.kumar 163
<h3><a href= "/jsp/productSearchFrequency.jsp?toDate=<%=toDateStr%>&fromDate=<%=fromDateStr%>">Go back to Product Search Frequencies</a></h3>
164
 
165
 
4638 amar.kumar 166
    <script type="text/javascript" charset="utf-8">
4816 amar.kumar 167
 
4638 amar.kumar 168
        $(document).ready(function() {
169
            $('#searchData').dataTable({
170
            	"sPaginationType": "full_numbers",
171
            	"bProcessing": true,
172
                "bStateSave": true,
173
            	"sDom": 'T<"clear">lfrtip',
174
            	"bFilter": false,
175
                "oTableTools": {
176
                    "sSwfPath": "/DataTables/extras/TableTools/media/swf/copy_cvs_xls_pdf.swf"
177
                },
178
                "aoColumns": [ 
179
                          null,
180
                          null,
181
                          null,
182
                          null,
183
                          null,
184
                          null
185
                ] 
186
            });
4816 amar.kumar 187
            var options = {
188
            		legend: {
189
            			show: true,
190
            			margin: 10,
191
            			backgroundOpacity: 0.5
192
            		},
193
            		points: {
194
            			show: true,
195
            		},
196
            		lines: {
197
            			show: true,
198
            			lineWidth: 1,
199
            			fill: true,
200
            			fillColor: { colors: [ "#87CEFA",{ opacity: 0.05 } ] }
201
            		},
202
            		xaxis: {
203
            			mode:"time",
204
            			timeformat: "%y/%m/%d",
205
            			panRange: [<%=fromDate.getTime()%>,<%=toDate.getTime()%>]
206
            		},
207
            		yaxis: {
208
            			panRange: [0,5000]
209
            		},
210
            		fill: true,
211
            		zoom: {
212
                        interactive: true
213
                    },
214
                    pan: {
215
                        interactive: true
216
                    },
217
            	};
218
 
219
            var data = [
220
            	{
221
            			label: "Product Search Frequency",
222
            			data: dataArray,
223
            	}
224
            ];
225
            //Generating the graph with specified "data" & "options" in div "placeholder"
226
            var plot = $.plot($("#placeholder"),data,options);
227
 
228
           	// add zoom out button 
229
            $('<div class="button" style="width:75px;color:#999;left:800px;cursor:pointer;background-color:#eee;padding:2px">zoom out</div>').appendTo($('#zoombuttonholder')).click(function (e) {
230
                   e.preventDefault();
231
                     plot.zoomOut();
232
                   });
4638 amar.kumar 233
        } );
234
    </script>
235
</body>
236
</html>