Subversion Repositories SmartDukaan

Rev

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

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="com.google.appengine.api.datastore.DatastoreServiceFactory" %>
<%@ page import="com.google.appengine.api.datastore.DatastoreService" %>
<%@ page import="com.google.appengine.api.datastore.Query" %>
<%@ page import="com.google.appengine.api.datastore.Entity" %>
<%@ page import="com.google.appengine.api.datastore.PreparedQuery" %>
<%@     page import="com.google.appengine.api.datastore.Query.SortDirection"%>
<%@     page import="java.util.Calendar"%>
<%@ page import="java.util.Map"%>
<%@ page import="java.util.LinkedHashMap"%>
<%@     page import="java.util.Map.Entry"%>
<%@     page import="java.text.ParseException"%>
<%@     page import="java.util.TimeZone"%>
<%@     page import="java.util.Date"%>
<%@     page import="java.util.Set"%>
<%@     page import="java.util.Calendar"%>
<%@     page import="java.text.SimpleDateFormat"%>
<%@     page import="in.shop2020.model.Category"%>


<html>
<head>

<script>
var dataArray = [];
</script>
<script type="text/javascript" language="javascript" src="/DataTables/media/js/jquery.js"></script>
<script type="text/javascript" language="javascript" src="/DataTables/media/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" charset="utf-8" src="/DataTables/extras/TableTools/media/js/ZeroClipboard.js"></script>
<script type="text/javascript" charset="utf-8" src="/DataTables/extras/TableTools/media/js/TableTools.js"></script>
<script src="/js/flot/jquery.flot.js" ></script>
<script type="text/javascript" src = "/js/flot/jquery.flot.navigate.js"></script>

<link rel="stylesheet" href="/DataTables/media/css/demo_table.css" type="text/css" />
<link rel="stylesheet" href="/DataTables/extras/TableTools/media/css/TableTools.css" type="text/css" /> 
<title>Search Analysis</title>
</head>
<body>
<%
Date toDate = new Date();
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("IST"));
cal.add(Calendar.DAY_OF_MONTH, -2);
Date fromDate = cal.getTime();
SimpleDateFormat iSdf = new SimpleDateFormat("yyyyMMdd");
String toDateStr  = request.getParameter("toDate");
String fromDateStr = request.getParameter("fromDate");
if (fromDateStr == null || fromDateStr.isEmpty()) {
    fromDateStr = iSdf.format(fromDate);
}
if (toDateStr == null || toDateStr.isEmpty()) {
    toDateStr = iSdf.format(toDate);
}
String eventType = "PRODUCT_SEARCH";
String productQuery = request.getParameter("productQuery");
%>

<form id="searchfilter" name="searchfilter" method="post" action="/jsp/productSearch.jsp">
<label>From Date(YYYYMMDD) : </label> <input type="text" name="fromDate" id="fromDate" value="<%= fromDateStr %>"/>
<label>To Date(YYYYMMDD) : </label> <input type="text" name="toDate" id="toDate" value="<%= toDateStr %>"/>
<% if(productQuery!=null){
%>
        <input type="text" name="productQuery" style = "display:none "value="<%= productQuery %>"/>
<% } %>
<input type="Submit" id="Submit" name="Submit" value="Submit" />
</form>

<%
    try {
        if (fromDateStr != null) {
            fromDate = iSdf.parse(fromDateStr);
        }
        if (toDateStr != null) {
            toDate = iSdf.parse(toDateStr);
        }
    }
    catch (ParseException pe) {
%>
        <span>Invalid Date Format</span>
<%
    }
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    sdf.setTimeZone(TimeZone.getTimeZone("IST"));
    
    //Initializing Date variables for calculation of graph data
    Map<Long, Long> graphData = new LinkedHashMap<Long, Long>();
    long previousDate = fromDate.getTime();
    graphData.put(previousDate, new Long(0));
    Calendar currentRecordDate = Calendar.getInstance();
    currentRecordDate.setTimeInMillis(fromDate.getTime());
    Calendar previousrecordDate = Calendar.getInstance();
    previousrecordDate.setTimeInMillis(fromDate.getTime());
    
    DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    Query query = new Query("DataLog");
    query.addFilter("eventType", Query.FilterOperator.EQUAL, "PRODUCT_SEARCH");
    query.addFilter("date", Query.FilterOperator.GREATER_THAN_OR_EQUAL, fromDate);
    query.addFilter("date", Query.FilterOperator.LESS_THAN_OR_EQUAL, toDate);
    if(productQuery!=null){
        query.addFilter("query",Query.FilterOperator.EQUAL,productQuery);       
    }
    PreparedQuery pq = datastore.prepare(query);
%>

<table cellpadding="0" cellspacing="0" border="0" class="display" id="searchData">
        <thead>
                <tr>
                        <th>Date</th>
                        <th>UserId</th> 
                        <th>Session</th>
                        <th>Query String</th>
                        <th>Category</th>
                        <th>Number of Results</th>
                </tr>
        </thead>
        <tbody>
<%
        for (Entity result : pq.asIterable()) {
                
                currentRecordDate.setTime((Date)(result.getProperty("date")));
                
                if((currentRecordDate.getTimeInMillis() - previousDate) >= 86400000)    {
                        
                        long dayDiff = (currentRecordDate.getTimeInMillis() - previousrecordDate.getTimeInMillis()) / 86400000;
                        
                        for(int i = 1; i <= dayDiff; i ++)      {
                                        previousDate = previousDate + 86400000;
                                        previousrecordDate.add(Calendar.DAY_OF_MONTH, 1);
                                        graphData.put(previousDate, new Long(0));
                        }
                        graphData.put(previousDate, new Long(1));
                } else  {
                        graphData.put(previousDate, graphData.get(previousDate) + 1);
                }
%>                      
                        <tr>
                                <td><%=sdf.format((Date) (result.getProperty("date")))%></td>
                                <td><a href="/jsp/user-activity.jsp?email=<%=result.getProperty("email").toString()%>"><%= result.getProperty("email").toString() %></a></td>
                <td><a href="/jsp/session-activity.jsp?sessionId=<%=result.getProperty("sessionId").toString()%>">View Session</a></td>
                <td><%=(result.getProperty("query")) %></td>
                                <td><%=Category.findByValue(Integer.parseInt(result.getProperty("categoryId").toString())) %></td>
                                <td><%=(result.getProperty("totalResults")) %></td>     
            </tr>    
            <%}%>
                        
        </tbody>
</table>
<br/>
<br/>
<br/>
<div id = "zoombuttonholder"></div>

<%Set<Long> dateSet = graphData.keySet();
        for(Long date : dateSet){%>
        <script>
                //Putting Graph data in javascript array
                dataArray.push([<%=date%>,<%=graphData.get(date)%>]);   
        </script>
<%} %>
<div id="placeholder" style="position:relative;width:950px;height:300px"></div>
<br>

<h3><a href= "/jsp/productSearchFrequency.jsp?toDate=<%=toDateStr%>&fromDate=<%=fromDateStr%>">Go back to Product Search Frequencies</a></h3>

    
    <script type="text/javascript" charset="utf-8">
            
        $(document).ready(function() {
            $('#searchData').dataTable({
                "sPaginationType": "full_numbers",
                "bProcessing": true,
                "bStateSave": true,
                "sDom": 'T<"clear">lfrtip',
                "bFilter": false,
                "oTableTools": {
                    "sSwfPath": "/DataTables/extras/TableTools/media/swf/copy_cvs_xls_pdf.swf"
                },
                "aoColumns": [ 
                          null,
                          null,
                          null,
                          null,
                          null,
                          null
                ] 
            });
            var options = {
                        legend: {
                                show: true,
                                margin: 10,
                                backgroundOpacity: 0.5
                        },
                        points: {
                                show: true,
                        },
                        lines: {
                                show: true,
                                lineWidth: 1,
                                fill: true,
                                fillColor: { colors: [ "#87CEFA",{ opacity: 0.05 } ] }
                        },
                        xaxis: {
                                mode:"time",
                                timeformat: "%y/%m/%d",
                                panRange: [<%=fromDate.getTime()%>,<%=toDate.getTime()%>]
                        },
                        yaxis: {
                                panRange: [0,5000]
                        },
                        fill: true,
                        zoom: {
                        interactive: true
                    },
                    pan: {
                        interactive: true
                    },
                };

            var data = [
                {
                                label: "Product Search Frequency",
                                data: dataArray,
                }
            ];
            //Generating the graph with specified "data" & "options" in div "placeholder"
            var plot = $.plot($("#placeholder"),data,options);
                
                // add zoom out button 
            $('<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) {
                   e.preventDefault();
                     plot.zoomOut();
                   });
        } );
    </script>
</body>
</html>