Subversion Repositories SmartDukaan

Rev

Rev 4639 | Rev 4932 | Go to most recent revision | 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 %>"/>
61
<input type="Submit" id="Submit" name="Submit" value="Submit" />
62
</form>
63
 
64
<%
65
    try {
66
        if (fromDateStr != null) {
67
            fromDate = iSdf.parse(fromDateStr);
68
        }
69
        if (toDateStr != null) {
70
            toDate = iSdf.parse(toDateStr);
71
        }
72
    }
73
    catch (ParseException pe) {
74
%>
75
        <span>Invalid Date Format</span>
76
<%
77
    }
78
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
79
    sdf.setTimeZone(TimeZone.getTimeZone("IST"));
4816 amar.kumar 80
 
81
    //Initializing Date variables for calculation of graph data
82
    Map<Long, Long> graphData = new LinkedHashMap<Long, Long>();
83
    long previousDate = fromDate.getTime();
84
    graphData.put(previousDate, new Long(0));
85
    Calendar currentRecordDate = Calendar.getInstance();
86
    currentRecordDate.setTimeInMillis(fromDate.getTime());
87
    Calendar previousrecordDate = Calendar.getInstance();
88
    previousrecordDate.setTimeInMillis(fromDate.getTime());
89
 
4638 amar.kumar 90
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
91
    Query query = new Query("DataLog");
92
    query.addFilter("eventType", Query.FilterOperator.EQUAL, "PRODUCT_SEARCH");
93
    query.addFilter("date", Query.FilterOperator.GREATER_THAN_OR_EQUAL, fromDate);
94
    query.addFilter("date", Query.FilterOperator.LESS_THAN_OR_EQUAL, toDate);
95
    if(productQuery!=null){
96
    	query.addFilter("query",Query.FilterOperator.EQUAL,productQuery);	
97
    }
98
    PreparedQuery pq = datastore.prepare(query);
99
%>
100
 
101
<table cellpadding="0" cellspacing="0" border="0" class="display" id="searchData">
102
	<thead>
103
		<tr>
104
			<th>Date</th>
105
			<th>UserId</th>	
106
			<th>Session</th>
107
			<th>Query String</th>
108
			<th>Category</th>
109
			<th>Number of Results</th>
110
		</tr>
111
	</thead>
112
	<tbody>
113
<%
114
        for (Entity result : pq.asIterable()) {
4816 amar.kumar 115
 
116
        	currentRecordDate.setTime((Date)(result.getProperty("date")));
117
 
118
        	if((currentRecordDate.getTimeInMillis() - previousDate) >= 86400000)	{
119
 
120
        		long dayDiff = (currentRecordDate.getTimeInMillis() - previousrecordDate.getTimeInMillis()) / 86400000;
121
 
122
        		for(int i = 1; i <= dayDiff; i ++)	{
123
					previousDate = previousDate + 86400000;
124
					previousrecordDate.add(Calendar.DAY_OF_MONTH, 1);
125
					graphData.put(previousDate, new Long(0));
126
        		}
127
				graphData.put(previousDate, new Long(1));
128
        	} else	{
129
    			graphData.put(previousDate, graphData.get(previousDate) + 1);
130
        	}
4638 amar.kumar 131
%>			
132
			<tr>
133
				<td><%=sdf.format((Date) (result.getProperty("date")))%></td>
134
				<td><a href="/jsp/user-activity.jsp?email=<%=result.getProperty("email").toString()%>"><%= result.getProperty("email").toString() %></a></td>
135
            	<td><a href="/jsp/session-activity.jsp?sessionId=<%=result.getProperty("sessionId").toString()%>">View Session</a></td>
136
                <td><%=(result.getProperty("query")) %></td>
137
				<td><%=Category.findByValue(Integer.parseInt(result.getProperty("categoryId").toString())) %></td>
138
				<td><%=(result.getProperty("totalResults")) %></td>	
139
            </tr>    
140
            <%}%>
141
 
142
	</tbody>
143
</table>
4816 amar.kumar 144
<br/>
145
<br/>
146
<br/>
147
<div id = "zoombuttonholder"></div>
4638 amar.kumar 148
 
4816 amar.kumar 149
<%Set<Long> dateSet = graphData.keySet();
150
	for(Long date : dateSet){%>
151
	<script>
152
		//Putting Graph data in javascript array
153
		dataArray.push([<%=date%>,<%=graphData.get(date)%>]);	
154
	</script>
155
<%} %>
156
<div id="placeholder" style="position:relative;width:950px;height:300px"></div>
157
<br>
4638 amar.kumar 158
 
4816 amar.kumar 159
<h3><a href= "/jsp/productSearchFrequency.jsp?toDate=<%=toDateStr%>&fromDate=<%=fromDateStr%>">Go back to Product Search Frequencies</a></h3>
160
 
161
 
4638 amar.kumar 162
    <script type="text/javascript" charset="utf-8">
4816 amar.kumar 163
 
4638 amar.kumar 164
        $(document).ready(function() {
165
            $('#searchData').dataTable({
166
            	"sPaginationType": "full_numbers",
167
            	"bProcessing": true,
168
                "bStateSave": true,
169
            	"sDom": 'T<"clear">lfrtip',
170
            	"bFilter": false,
171
                "oTableTools": {
172
                    "sSwfPath": "/DataTables/extras/TableTools/media/swf/copy_cvs_xls_pdf.swf"
173
                },
174
                "aoColumns": [ 
175
                          null,
176
                          null,
177
                          null,
178
                          null,
179
                          null,
180
                          null
181
                ] 
182
            });
4816 amar.kumar 183
            var options = {
184
            		legend: {
185
            			show: true,
186
            			margin: 10,
187
            			backgroundOpacity: 0.5
188
            		},
189
            		points: {
190
            			show: true,
191
            		},
192
            		lines: {
193
            			show: true,
194
            			lineWidth: 1,
195
            			fill: true,
196
            			fillColor: { colors: [ "#87CEFA",{ opacity: 0.05 } ] }
197
            		},
198
            		xaxis: {
199
            			mode:"time",
200
            			timeformat: "%y/%m/%d",
201
            			panRange: [<%=fromDate.getTime()%>,<%=toDate.getTime()%>]
202
            		},
203
            		yaxis: {
204
            			panRange: [0,5000]
205
            		},
206
            		fill: true,
207
            		zoom: {
208
                        interactive: true
209
                    },
210
                    pan: {
211
                        interactive: true
212
                    },
213
            	};
214
 
215
            var data = [
216
            	{
217
            			label: "Product Search Frequency",
218
            			data: dataArray,
219
            	}
220
            ];
221
            //Generating the graph with specified "data" & "options" in div "placeholder"
222
            var plot = $.plot($("#placeholder"),data,options);
223
 
224
           	// add zoom out button 
225
            $('<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) {
226
                   e.preventDefault();
227
                     plot.zoomOut();
228
                   });
4638 amar.kumar 229
        } );
230
    </script>
231
</body>
232
</html>