/*
* Copyright 2015-Present Entando Inc. (http://www.entando.com) All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.agiletec.plugins.jpstats.aps.system.services.stats;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesDataItem;
import com.agiletec.aps.system.exception.ApsSystemException;
import com.agiletec.aps.util.DateConverter;
import com.agiletec.plugins.jpstats.aps.ApsPluginBaseTestCase;
import com.agiletec.plugins.jpstats.aps.system.services.JpStatsSystemConstants;
import com.agiletec.plugins.jpstats.aps.util.CalendarConverter;
import com.agiletec.plugins.jpstats.aps.util.StatsDataBean;
import com.agiletec.plugins.jpstats.aps.util.TopContentsCDP;
import com.agiletec.plugins.jpstats.util.TestStatsUtils;
import de.laures.cewolf.DatasetProduceException;
public class TestStatsManager extends ApsPluginBaseTestCase {
public void testAddStatsRecord() throws Throwable {
String today = DateConverter.getFormattedDate(new Date(), "dd/MM/yyyy");
Calendar start = CalendarConverter.getCalendarDay(today, 0, 0, 0, 0);
Calendar end = Calendar.getInstance();
end.add(Calendar.DAY_OF_YEAR, 1);
try {
TimeSeries ts = _statsManager.getHitsByInterval(start, end);
TimeSeriesDataItem timeSeriesDataItem = (TimeSeriesDataItem) ts.getItems().get(0);
assertEquals(0, timeSeriesDataItem.getValue().intValue());
this._statsManager.addStatsRecord(this.createRecordForTest());
TestStatsUtils.waitStatsThread();
ts = _statsManager.getHitsByInterval(start, end);
timeSeriesDataItem = (TimeSeriesDataItem) ts.getItems().get(0);
assertEquals(1, timeSeriesDataItem.getValue().intValue());
} catch (Throwable t) {
throw t;
} finally {
this._statsManager.deleteStatsRecord(start.getTime(), end.getTime());
TimeSeries ts = _statsManager.getHitsByInterval(start, end);
TimeSeriesDataItem timeSeriesDataItem = (TimeSeriesDataItem) ts.getItems().get(0);
assertEquals(0, timeSeriesDataItem.getValue().intValue());
}
}
public void testGetHitsByInterval() throws Throwable {
Calendar start = CalendarConverter.getCalendarDay("06/03/2007", 0, 0, 0, 0);
Calendar end = CalendarConverter.getCalendarDay("07/03/2007", 23, 59, 59, 999);
TimeSeries ts = _statsManager.getHitsByInterval(start, end);
int days = ts.getItems().size();
assertEquals(2, days);
TimeSeriesDataItem timeSeriesDataItem = (TimeSeriesDataItem) ts.getItems().get(0);
assertEquals(14,timeSeriesDataItem.getValue().intValue());
}
public void testGetAverageTimeSite() throws ApsSystemException, SQLException {
Calendar start = CalendarConverter.getCalendarDay("10/03/2007", 0, 0, 0, 0);
Calendar end = CalendarConverter.getCalendarDay("10/03/2007", 23, 59, 59, 999);
String averageTimeSite = _statsManager.getAverageTimeSite(start, end);
assertTrue(averageTimeSite.startsWith("0 days 00:00:0")); //derby results differ by 1 second from postgres results
}
public void testGetAverageTimePage() throws ApsSystemException, SQLException {
Calendar start = CalendarConverter.getCalendarDay("10/03/2007", 0, 0, 0, 0);
Calendar end = CalendarConverter.getCalendarDay("10/03/2007", 23, 59, 59, 999);
String averageTimeSite = _statsManager.getAverageTimePage(start, end);
assertTrue(averageTimeSite.startsWith("0 days 00:00:0")); //derby results differ by 1 second from postgres results
}
public void testGetNumPageSession() throws ApsSystemException, SQLException {
Calendar start = CalendarConverter.getCalendarDay("06/03/2007", 0, 0, 0, 0);
Calendar end = CalendarConverter.getCalendarDay("10/03/2007", 23, 59, 59, 999);
int numPageSession = _statsManager.getNumPageSession(start, end);
assertEquals(3, numPageSession);
}
public void testGetPageVisitedAsc() throws ApsSystemException, SQLException {
Calendar start = CalendarConverter.getCalendarDay("06/03/2007", 0, 0, 0, 0);
Calendar end = CalendarConverter.getCalendarDay("10/03/2007", 23, 59, 59, 999);
Map<String, Integer> pageVisitedDesc = _statsManager.getTopPages(start, end);
assertEquals(3, pageVisitedDesc.size());
Object homepage = pageVisitedDesc.get("homepage");
assertEquals(Integer.parseInt(homepage.toString()), 50);
Object errorpage =pageVisitedDesc.get("errorpage");
assertEquals(Integer.parseInt(errorpage.toString()), 4);
Object risultati_della_ricerca =pageVisitedDesc.get("risultati_della_ricerca");
assertEquals(Integer.parseInt(risultati_della_ricerca.toString()), 2);
}
public void testGetTopContents() throws ApsSystemException, SQLException, DatasetProduceException {
Calendar start = CalendarConverter.getCalendarDay("06/03/2007", 0, 0, 0, 0);
Calendar end = CalendarConverter.getCalendarDay("10/03/2007", 23, 59, 59, 999);
Map<String, Integer> topContents = _statsManager.getTopContents(start, end);
assertNotNull(topContents);
start = CalendarConverter.getCalendarDay("06/03/2007", 0, 0, 0, 0);
end = CalendarConverter.getCalendarDay("18/03/2007", 23, 59, 59, 999);
topContents = _statsManager.getTopContents(start, end);
assertEquals(4, topContents.size());
assertEquals("17", topContents.get("una descrizione particolare").toString());
StatsDataBean bean = new StatsDataBean();
start = CalendarConverter.getCalendarDay("05/03/2007", 23, 59, 59, 999);
end = CalendarConverter.getCalendarDay("30/03/2007", 23, 59, 59, 999);
bean.setStart(start);
bean.setEnd(end);
TopContentsCDP topContentsCDP = new TopContentsCDP(_statsManager, bean);
Object produceDataset = topContentsCDP.produceDataset(null);
assertNotNull(produceDataset);
}
public void testCountIPByDateInterval() throws ApsSystemException, SQLException {
Calendar start = CalendarConverter.getCalendarDay("06/03/2007", 0, 0, 0, 0);
Calendar end = CalendarConverter.getCalendarDay("10/03/2007", 23, 59, 59, 999);
int countIp =_statsManager.getIPByDateInterval(start, end);
assertEquals(1, countIp);
}
public void testGetFirsrCalendarDay() {
Calendar firstCalendarDay = _statsManager.getFirstCalendarDay();
String now = DateConverter.getFormattedDate(firstCalendarDay.getTime(), JpStatsSystemConstants.DATE_FORMAT);
assertEquals("26/02/2007", now);
}
private StatsRecord createRecordForTest() {
StatsRecord statsRecord = new StatsRecord(Calendar.getInstance());
statsRecord.setIp("127.0.0.1");
statsRecord.setReferer("http://www.japsportal.org/japsportal/it/chi_siamo.wp");
statsRecord.setSessionId("A3EFA0BC2E5FB24436609B5BE786EDCA");
statsRecord.setRole("");
statsRecord.setPageCode("chi_siamo");
statsRecord.setLangcode("it");
statsRecord.setUseragent("Mozilla/5.0 (X11; U; Linux i686; it; rv:1.9.0.7) Gecko/2009030422 Ubuntu/8.10 (intrepid) Firefox/3.0.7");
statsRecord.setBrowserLang("it-it,it;q=0.8,en-us;q=0.5,en;q=0.3");
statsRecord.setContentId("ART124");
return statsRecord;
}
}