/** * Copyright 2014 tgrape Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package ph.fingra.statisticsweb.controller; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import ph.fingra.statisticsweb.domain.App; import ph.fingra.statisticsweb.domain.DashBoardSearchParam; import ph.fingra.statisticsweb.domain.Figures; import ph.fingra.statisticsweb.domain.FingraphSearchParam; import ph.fingra.statisticsweb.domain.FrequencyData; import ph.fingra.statisticsweb.domain.SessionLengthData; import ph.fingra.statisticsweb.domain.TimeSeriesData; import ph.fingra.statisticsweb.security.ActiveUser; import ph.fingra.statisticsweb.security.FingraphUser; import ph.fingra.statisticsweb.service.DashBoardService; import ph.fingra.statisticsweb.service.PerformanceService; import com.google.gson.Gson; @Controller @RequestMapping("/performance/*") public class PerformanceController extends BaseController { @Autowired private PerformanceService performanceService; @Autowired private DashBoardService dashBoardService; private App performanceSectionInfo(DashBoardSearchParam param){ App app = dashBoardService.getPerformanceSectionInfo(param); //logger.info("==================>:"+param.getAppkey()); app.setAppkey(param.getAppkey()); return app; } /** newUsers * @param model * @param appkey * @param period * @param param * @return */ @RequestMapping(method = RequestMethod.GET, value = "/newUsers/{appkey}") public String newUsers(Model model, @PathVariable("appkey") String appkey, @RequestParam(required=false,defaultValue="1w",value="period") String period, DashBoardSearchParam param, @ActiveUser FingraphUser activeUser) { param.setPeriod(period); model.addAttribute("app",performanceSectionInfo(param)); return "performance/newUsers"; } /** newUsers - Ajax * @param searchParam * @return */ @RequestMapping(value = "/getNewUsersAjax", method = RequestMethod.POST,produces="text/plain;charset=UTF-8") public @ResponseBody String getNewUsersAjax(@ModelAttribute("fingraphSearchParam") FingraphSearchParam searchParam) { Map<String,Object> paramMap = new HashMap<String,Object>(); Figures figures = new Figures(); List<TimeSeriesData> list = new ArrayList<>(); if("daily".equals(searchParam.getTerm())){ figures = performanceService.getNewUsersDailyFigures(searchParam); list = performanceService.getNewUsersDailyInfoList(searchParam); }else if("weekly".equals(searchParam.getTerm())){ figures = performanceService.getNewUsersWeeklyFigures(searchParam); list = performanceService.getNewUsersWeeklyInfoList(searchParam); }else if("monthly".equals(searchParam.getTerm())){ figures = performanceService.getNewUsersMonthlyFigures(searchParam); list = performanceService.getNewUsersMonthlyInfoList(searchParam); } paramMap.put("figures", figures); paramMap.put("list", list); return (new Gson()).toJson(paramMap); } /** activeUsers * @param model * @param appkey * @param period * @param param * @return */ @RequestMapping(method = RequestMethod.GET, value = "/activeUsers/{appkey}") public String activeUsers(Model model, @PathVariable("appkey") String appkey, @RequestParam(required=false,defaultValue="1w",value="period") String period, DashBoardSearchParam param, @ActiveUser FingraphUser activeUser) { param.setPeriod(period); model.addAttribute("app",performanceSectionInfo(param)); return "performance/activeUsers"; } /** activeUsers - Ajax * @param searchParam * @return */ @RequestMapping(value = "/getActiveUsersAjax", method = RequestMethod.POST,produces="text/plain;charset=UTF-8") public @ResponseBody String getActiveUsersAjax(@ModelAttribute("fingraphSearchParam") FingraphSearchParam searchParam) { Map<String,Object> paramMap = new HashMap<String,Object>(); Figures figures = new Figures(); List<TimeSeriesData> list = new ArrayList<>(); if("daily".equals(searchParam.getTerm())){ figures = performanceService.getActiveUsersDailyFigures(searchParam); list = performanceService.getActiveUsersDailyInfoList(searchParam); }else if("weekly".equals(searchParam.getTerm())){ figures = performanceService.getActiveUsersWeeklyFigures(searchParam); list = performanceService.getActiveUsersWeeklyInfoList(searchParam); }else if("monthly".equals(searchParam.getTerm())){ figures = performanceService.getActiveUsersMonthlyFigures(searchParam); list = performanceService.getActiveUsersMonthlyInfoList(searchParam); } paramMap.put("result", true); paramMap.put("figures", figures); paramMap.put("list", list); return (new Gson()).toJson(paramMap); } /** sessionLength * @param model * @param appkey * @param period * @param param * @return */ @RequestMapping(method = RequestMethod.GET, value = "/sessionLength/{appkey}") public String sessionLength(Model model, @PathVariable("appkey") String appkey, @RequestParam(required=false, defaultValue="1w", value="period") String period, DashBoardSearchParam param, @ActiveUser FingraphUser activeUser) { param.setPeriod(period); model.addAttribute("app",performanceSectionInfo(param)); return "performance/sessionLength"; } /** sessionLength - Ajax * @param searchParam * @return */ @RequestMapping(value = "/getSessionLengthAjax", method = RequestMethod.POST,produces="text/plain;charset=UTF-8") public @ResponseBody String sessionLengthAjax(@ModelAttribute("fingraphSearchParam") FingraphSearchParam searchParam) { Map<String,Object> paramMap = new HashMap<String,Object>(); Figures figures = new Figures(); List<TimeSeriesData> list = new ArrayList<>(); List<SessionLengthData> slist = new ArrayList<>(); SessionLengthData total = new SessionLengthData(); if("daily".equals(searchParam.getTerm())){ total = performanceService.getSessionLengthDailyTotal(searchParam); if("total".equals(searchParam.getSegment())){//areachart slist = performanceService.getSessionLengthDailySectionList(searchParam); }else if("median".equals(searchParam.getSegment())){//linechart list = performanceService.getSessionLengthDailyMedianList(searchParam); } figures = performanceService.getSessionLengthDailyFigures(searchParam); }else if("weekly".equals(searchParam.getTerm())){ total = performanceService.getSessionLengthWeeklyTotal(searchParam); if("total".equals(searchParam.getSegment())){//areachart slist = performanceService.getSessionLengthWeeklySectionList(searchParam); }else if("median".equals(searchParam.getSegment())){ list = performanceService.getSessionLengthWeeklyMedianList(searchParam); } figures = performanceService.getSessionLengthWeeklyFigures(searchParam); }else if("monthly".equals(searchParam.getTerm())){ total = performanceService.getSessionLengthMonthlyTotal(searchParam); if("total".equals(searchParam.getSegment())){//areachart slist = performanceService.getSessionLengthMonthlySectionList(searchParam); }else if("median".equals(searchParam.getSegment())){ list = performanceService.getSessionLengthMonthlyMedianList(searchParam); } figures = performanceService.getSessionLengthMonthlyFigures(searchParam); } paramMap.put("result", true); paramMap.put("total", total); paramMap.put("slist", slist); paramMap.put("list", list); paramMap.put("figures", figures); return (new Gson()).toJson(paramMap); } /** Sessions * @param model * @param appkey * @param period * @param param * @return */ @RequestMapping(method = RequestMethod.GET, value = "/sessions/{appkey}") public String sessions(Model model, @PathVariable("appkey") String appkey, @RequestParam(required=false,defaultValue="1w",value="period") String period, DashBoardSearchParam param, @ActiveUser FingraphUser activeUser) { param.setPeriod(period); model.addAttribute("app",performanceSectionInfo(param)); return "performance/sessions"; } /** Sessions - Ajax * @param searchParam * @return */ @RequestMapping(value = "/getSessionsAjax", method = RequestMethod.POST,produces="text/plain;charset=UTF-8") public @ResponseBody String getSessionsAjax(@ModelAttribute("fingraphSearchParam") FingraphSearchParam searchParam) { Map<String,Object> paramMap = new HashMap<String,Object>(); Figures figures = performanceService.getSessionsFigures(searchParam); // basis on daily List<TimeSeriesData> list = new ArrayList<>(); if ("daily".equals(searchParam.getTerm())) { FrequencyData total = performanceService.getFrequenceyDailyRanges(searchParam); paramMap.put("total", total); if("timeSeries".equals(searchParam.getSegment())){ List<FrequencyData> slist = performanceService.getTimeSeriesSessionsDailyList(searchParam); paramMap.put("slist", slist); }else if("total".equals(searchParam.getSegment())){ list = performanceService.getSessionsDailyList(searchParam); paramMap.put("list", list); } } else if("weekly".equals(searchParam.getTerm())) { FrequencyData total = performanceService.getFrequenceyWeeklyRanges(searchParam); paramMap.put("total", total); if("timeSeries".equals(searchParam.getSegment())){ List<FrequencyData> slist = performanceService.getTimeSeriesSessionsWeeklyList(searchParam); paramMap.put("slist", slist); }else if("total".equals(searchParam.getSegment())){ list = performanceService.getSessionsWeeklyList(searchParam); paramMap.put("list", list); } } else if("monthly".equals(searchParam.getTerm())) { FrequencyData total = performanceService.getFrequenceyMonthlyRanges(searchParam); paramMap.put("total", total); if ("timeSeries".equals(searchParam.getSegment())) { List<FrequencyData> slist = performanceService.getTimeSeriesSessionsMonthlyList(searchParam); paramMap.put("slist", slist); } else if("total".equals(searchParam.getSegment())) { list = performanceService.getSessionsMonthlyList(searchParam); paramMap.put("list", list); } } paramMap.put("figures", figures); return (new Gson()).toJson(paramMap); } /** pageViews * @param model * @param appkey * @param period * @param param * @return */ @RequestMapping(method = RequestMethod.GET, value = "/pageViews/{appkey}") public String pageViews(Model model, @PathVariable("appkey") String appkey, @RequestParam(required=false, defaultValue="1w", value="period") String period, DashBoardSearchParam param, @ActiveUser FingraphUser activeUser) { param.setPeriod(period); model.addAttribute("app",performanceSectionInfo(param)); return "performance/pageViews"; } /** pageViews - Ajax * @param searchParam * @return */ @RequestMapping(value = "/getPageViewsAjax", method = RequestMethod.POST,produces="text/plain;charset=UTF-8") public @ResponseBody String getPageViewsAjax(@ModelAttribute("fingraphSearchParam") FingraphSearchParam searchParam) { Map<String,Object> paramMap = new HashMap<String,Object>(); Figures figures = new Figures(); List<TimeSeriesData> list = new ArrayList<>(); if("daily".equals(searchParam.getTerm())){ figures = performanceService.getPageViewsDailyFigures(searchParam); list = performanceService.getPageViewsDailyInfoList(searchParam); }else if("weekly".equals(searchParam.getTerm())){ figures = performanceService.getPageViewsWeeklyFigures(searchParam); list = performanceService.getPageViewsWeeklyInfoList(searchParam); }else if("monthly".equals(searchParam.getTerm())){ figures = performanceService.getPageViewsMonthlyFigures(searchParam); list = performanceService.getPageViewsMonthlyInfoList(searchParam); } paramMap.put("result", true); paramMap.put("figures", figures); paramMap.put("list", list); return (new Gson()).toJson(paramMap); } @RequestMapping(method = RequestMethod.GET, value = "/include/section") public String includeSection(Model model, @RequestParam("appkey") String appkey, @RequestParam(required=false, defaultValue="1w", value="period") String period, DashBoardSearchParam param) { return "include/performanceSection"; } }