From 5a2d8fe1ebb634e3bd09456b47090e6a2692d552 Mon Sep 17 00:00:00 2001 From: Dimitris Date: Mon, 22 Feb 2021 19:39:27 +0200 Subject: [PATCH] Commit 22022021 --- pom.xml | 9 +- .../eu/dnetlib/usagestats/UsageStatsApi.java | 3 +- .../config/DataSourceConfiguration.java | 44 +- .../config/SpringRedisConfiguration.java | 5 +- .../controllers/SushiLiteController.java | 53 +- .../repositories/UsageStatsRepository.java | 2158 ++++++++++------- .../usagestats/services/SushiLiteService.java | 28 +- .../services/SushiLiteServiceImpl.java | 663 +++-- src/main/resources/usageStatsAPI.properties | 7 +- 9 files changed, 1816 insertions(+), 1154 deletions(-) diff --git a/pom.xml b/pom.xml index da4478f..26961b5 100755 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ org.springframework.boot spring-boot-starter-parent - 1.5.15.RELEASE + 2.0.0.RELEASE @@ -158,7 +158,12 @@ javax.servlet javax.servlet-api 3.1.0 - + + + javax.xml.bind + jaxb-api + 2.3.0 + diff --git a/src/main/java/eu/dnetlib/usagestats/UsageStatsApi.java b/src/main/java/eu/dnetlib/usagestats/UsageStatsApi.java index 7eabe86..cfc01eb 100644 --- a/src/main/java/eu/dnetlib/usagestats/UsageStatsApi.java +++ b/src/main/java/eu/dnetlib/usagestats/UsageStatsApi.java @@ -2,7 +2,6 @@ package eu.dnetlib.usagestats; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.support.SpringBootServletInitializer; import org.springframework.context.annotation.PropertySource; import org.springframework.context.annotation.PropertySources; import org.springframework.retry.annotation.EnableRetry; @@ -13,7 +12,7 @@ import org.springframework.retry.annotation.EnableRetry; ) @EnableRetry @SpringBootApplication -public class UsageStatsApi extends SpringBootServletInitializer { +public class UsageStatsApi { public static void main(String[] args) { SpringApplication.run(UsageStatsApi.class, args); diff --git a/src/main/java/eu/dnetlib/usagestats/config/DataSourceConfiguration.java b/src/main/java/eu/dnetlib/usagestats/config/DataSourceConfiguration.java index 2d3eabf..a85aa70 100644 --- a/src/main/java/eu/dnetlib/usagestats/config/DataSourceConfiguration.java +++ b/src/main/java/eu/dnetlib/usagestats/config/DataSourceConfiguration.java @@ -1,42 +1,56 @@ package eu.dnetlib.usagestats.config; //import org.springframework.boot.jdbc.DataSourceBuilder; -import org.springframework.boot.context.properties.ConfigurationProperties; +import com.zaxxer.hikari.HikariConfig; +import com.zaxxer.hikari.HikariDataSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import javax.sql.DataSource; import org.apache.log4j.Logger; -import org.apache.tomcat.jdbc.pool.PoolProperties; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; /** - * Created by tsampikos on 8/3/2017. + * Created by dpie on 25/01/2021. */ @Configuration public class DataSourceConfiguration { private final Logger log = Logger.getLogger(this.getClass()); - @Value("${usagestats.driverClassName}") - private String driverClassName; + //@Value("${usagestats.driverClassName}") + //private String driverClassName; @Value("${usagestats.url}") private String dbURL; - @ConfigurationProperties(prefix = "usagestats") + //@ConfigurationProperties(prefix = "usagestats") @Bean @Primary public DataSource getDataSource() { - PoolProperties poolProperties = new PoolProperties(); - poolProperties.setUrl(dbURL); - poolProperties.setDriverClassName(driverClassName); +// PoolProperties poolProperties = new PoolProperties(); +// poolProperties.setUrl(dbURL); +// poolProperties.setDriverClassName(driverClassName); +// log.info("dbURL " + dbURL); +// log.info("driverClassName " + driverClassName); +// +// poolProperties.setTestOnBorrow(true); +// poolProperties.setValidationQuery("SELECT 1"); +// poolProperties.setValidationInterval(0); +// DataSource ds = new org.apache.tomcat.jdbc.pool.DataSource(poolProperties); +// return ds; + HikariConfig hikariConfig = new HikariConfig(); + //hikariConfig.setDriverClassName("com.cloudera.impala.jdbc41.Driver"); + hikariConfig.setJdbcUrl(dbURL); log.info("dbURL " + dbURL); - log.info("driverClassName " + driverClassName); + //log.info("driverClassName " + driverClassName); +// +// hikariConfig.setMaximumPoolSize(5); + hikariConfig.setConnectionTestQuery("SELECT 1"); + hikariConfig.setPoolName("UsageStats_HikariCP"); - poolProperties.setTestOnBorrow(true); - poolProperties.setValidationQuery("SELECT 1"); - poolProperties.setValidationInterval(0); - DataSource ds = new org.apache.tomcat.jdbc.pool.DataSource(poolProperties); - return ds; + HikariDataSource dataSource = new HikariDataSource(hikariConfig); + + return dataSource; } } diff --git a/src/main/java/eu/dnetlib/usagestats/config/SpringRedisConfiguration.java b/src/main/java/eu/dnetlib/usagestats/config/SpringRedisConfiguration.java index 4e2a3d2..9c52dfb 100644 --- a/src/main/java/eu/dnetlib/usagestats/config/SpringRedisConfiguration.java +++ b/src/main/java/eu/dnetlib/usagestats/config/SpringRedisConfiguration.java @@ -3,6 +3,8 @@ package eu.dnetlib.usagestats.config; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; @@ -12,7 +14,8 @@ import org.springframework.data.redis.serializer.StringRedisSerializer; /** * Created by tsampikos on 20/4/2017. */ -@Configuration +@ConfigurationProperties(prefix = "usagestats") +@EnableConfigurationProperties public class SpringRedisConfiguration { private final Logger log = Logger.getLogger(this.getClass()); diff --git a/src/main/java/eu/dnetlib/usagestats/controllers/SushiLiteController.java b/src/main/java/eu/dnetlib/usagestats/controllers/SushiLiteController.java index bf14eb9..6bcf9aa 100755 --- a/src/main/java/eu/dnetlib/usagestats/controllers/SushiLiteController.java +++ b/src/main/java/eu/dnetlib/usagestats/controllers/SushiLiteController.java @@ -22,25 +22,25 @@ class SushiLiteController { this.sushiLiteService = sushiLiteService; } - @RequestMapping(value = "/sushilite/r5/GetReport/", method = RequestMethod.GET) - public String getReport( - @RequestParam(value = "Report", defaultValue = "") String reportP, - @RequestParam(value = "Release", defaultValue = "4") String release, - @RequestParam(value = "RequestorID", defaultValue = "anonymous") String requestorId, - @RequestParam(value = "BeginDate", defaultValue = "") String beginDate, - @RequestParam(value = "EndDate", defaultValue = "") String endDate, - @RequestParam(value = "RepositoryIdentifier", defaultValue = "") String repositoryIdentifier, - @RequestParam(value = "ItemIdentifier", defaultValue = "") String itemIdentifier, - @RequestParam(value = "ItemDataType", defaultValue = "") String itemDataType, - @RequestParam(value = "hasDOI", defaultValue = "") String hasDoi, - @RequestParam(value = "Granularity", defaultValue = "Monthly") String granularity, - @RequestParam(value = "Callback", defaultValue = "") String callback, - @RequestParam(value = "Pretty", defaultValue = "") String pretty) { - log.info("Sushi Report request: " + reportP + " from " + requestorId); - log.info("repository identifier: " + repositoryIdentifier + " - item identifier: " + itemIdentifier); - - return sushiLiteService.displayReport(reportP, release, requestorId, beginDate, endDate, repositoryIdentifier, itemIdentifier, itemDataType, hasDoi, granularity, callback, pretty); - } +// @RequestMapping(value = "/sushilite/r5/GetReport/", method = RequestMethod.GET) +// public String getReport( +// @RequestParam(value = "Report", defaultValue = "") String reportP, +// @RequestParam(value = "Release", defaultValue = "4") String release, +// @RequestParam(value = "RequestorID", defaultValue = "anonymous") String requestorId, +// @RequestParam(value = "BeginDate", defaultValue = "") String beginDate, +// @RequestParam(value = "EndDate", defaultValue = "") String endDate, +// @RequestParam(value = "RepositoryIdentifier", defaultValue = "") String repositoryIdentifier, +// @RequestParam(value = "ItemIdentifier", defaultValue = "") String itemIdentifier, +// @RequestParam(value = "ItemDataType", defaultValue = "") String itemDataType, +// @RequestParam(value = "hasDOI", defaultValue = "") String hasDoi, +// @RequestParam(value = "Granularity", defaultValue = "Monthly") String granularity, +// @RequestParam(value = "Callback", defaultValue = "") String callback, +// @RequestParam(value = "Pretty", defaultValue = "") String pretty) { +// log.info("Sushi Report request: " + reportP + " from " + requestorId); +// log.info("repository identifier: " + repositoryIdentifier + " - item identifier: " + itemIdentifier); +// +// return sushiLiteService.displayReport(reportP, release, requestorId, beginDate, endDate, repositoryIdentifier, itemIdentifier, itemDataType, hasDoi, granularity, callback, pretty); +// } @RequestMapping(value = "/sushilite/r5/status", method = RequestMethod.GET) public String getReportStatus() { @@ -57,33 +57,36 @@ class SushiLiteController { @RequestMapping(value = "/sushilite/r5/reports/pr", method = RequestMethod.GET) public String getReportPR( @RequestParam(value = "RepositoryIdentifier", defaultValue = "") String repositoryIdentifier, + @RequestParam(value = "RequestorID", defaultValue = "anonymous") String requestorId, @RequestParam(value = "BeginDate", defaultValue = "") String beginDate, @RequestParam(value = "EndDate", defaultValue = "") String endDate, @RequestParam(value = "MetricType", defaultValue = "") String metricType, @RequestParam(value = "DataType", defaultValue = "") String dataType, @RequestParam(value = "Granularity", defaultValue = "Monthly") String granularity) { log.info("COUNTER PR Report request for repository " + repositoryIdentifier); - return sushiLiteService.displayReportPR(repositoryIdentifier, beginDate, endDate, metricType, dataType, granularity); + return sushiLiteService.displayReportPR(requestorId,repositoryIdentifier, beginDate, endDate, metricType, dataType, granularity); } @RequestMapping(value = "/sushilite/r5/reports/pr_p1", method = RequestMethod.GET) public String getReportPR_P1( @RequestParam(value = "RepositoryIdentifier", defaultValue = "") String repositoryIdentifier, + @RequestParam(value = "RequestorID", defaultValue = "anonymous") String requestorId, @RequestParam(value = "BeginDate", defaultValue = "") String beginDate, @RequestParam(value = "EndDate", defaultValue = "") String endDate) { log.info("COUNTER PR_P1 Report request for repository " + repositoryIdentifier); - return sushiLiteService.displayReportPR_P1(repositoryIdentifier, beginDate, endDate); + return sushiLiteService.displayReportPR_P1(requestorId, repositoryIdentifier, beginDate, endDate); } - @RequestMapping(value = "/sushilite/r5/reports/tr", method = RequestMethod.GET) - public String getReportPR( + @RequestMapping(value = "/sushilite/r5/reports/ir", method = RequestMethod.GET) + public String getReportTR( @RequestParam(value = "RepositoryIdentifier", defaultValue = "") String repositoryIdentifier, @RequestParam(value = "ItemIdentifier", defaultValue = "") String itemIdentifier, + @RequestParam(value = "RequestorID", defaultValue = "anonymous") String requestorId, @RequestParam(value = "BeginDate", defaultValue = "") String beginDate, @RequestParam(value = "EndDate", defaultValue = "") String endDate, @RequestParam(value = "MetricType", defaultValue = "") String metricType, @RequestParam(value = "DataType", defaultValue = "") String dataType, @RequestParam(value = "Granularity", defaultValue = "Monthly") String granularity) { - log.info("COUNTER PR Report request for repository " + repositoryIdentifier); - return sushiLiteService.displayReportTR(repositoryIdentifier, itemIdentifier, beginDate, endDate, metricType, dataType, granularity); + log.info("COUNTER TR Report request for repository " + repositoryIdentifier +" and for item "+ itemIdentifier); + return sushiLiteService.displayReportIR(requestorId, repositoryIdentifier, itemIdentifier, beginDate, endDate, metricType, dataType, granularity); } } diff --git a/src/main/java/eu/dnetlib/usagestats/repositories/UsageStatsRepository.java b/src/main/java/eu/dnetlib/usagestats/repositories/UsageStatsRepository.java index 322f813..2e5c450 100755 --- a/src/main/java/eu/dnetlib/usagestats/repositories/UsageStatsRepository.java +++ b/src/main/java/eu/dnetlib/usagestats/repositories/UsageStatsRepository.java @@ -17,8 +17,8 @@ import eu.dnetlib.usagestats.portal.TotalStats; import eu.dnetlib.usagestats.portal.TotalStatsReposViewsDownloads; import eu.dnetlib.usagestats.portal.UsageStats; import eu.dnetlib.usagestats.portal.YearlyStats; -import eu.dnetlib.usagestats.sushilite.domain.ItemIdentifier; import eu.dnetlib.usagestats.sushilite.domain.COUNTER_Item_Performance; +import eu.dnetlib.usagestats.sushilite.domain.COUNTER_Item_Usage; import eu.dnetlib.usagestats.sushilite.domain.COUNTER_Platform_Usage; import org.apache.commons.dbutils.DbUtils; @@ -656,851 +656,845 @@ public class UsageStatsRepository { return "-1"; } - public void executeItem(List reportItems, String itemIdentifier, - String repositoryIdentifier, String itemDataType, Date beginDate, - Date endDate, String granularity) { - String[] split = itemIdentifier.split(":"); - switch (split[0].toLowerCase()) { - case "oid": - executeOid(reportItems, itemIdentifier.replaceFirst(split[0] + ":", ""), repositoryIdentifier, itemDataType, beginDate, endDate, granularity); - break; - case "doi": - executeDoi(reportItems, itemIdentifier.replaceFirst(split[0] + ":", ""), repositoryIdentifier, itemDataType, beginDate, endDate, granularity); - break; - case "openaire": - executeOpenaire(reportItems, itemIdentifier.replaceFirst(split[0] + ":", ""), repositoryIdentifier, itemDataType, beginDate, endDate, granularity); - break; - default: - } - } - - private void executeOid(List reportItems, String oid, - String repositoryIdentifier, String itemDataType, Date beginDate, - Date endDate, String granularity) { - Connection connection = null; - PreparedStatement st = null; - ResultSet rs = null; - try { - connection = usageStatsDB.getConnection(); - //st = connection.prepareStatement("SELECT DISTINCT roid.id FROM public.result_oids roid, public.downloads_stats s WHERE s.result_id=roid.id AND roid.orid=? UNION SELECT DISTINCT roid.id FROM public.result_oids roid, public.views_stats s WHERE s.result_id=roid.id AND roid.orid=?"); - st = connection.prepareStatement("SELECT DISTINCT roid.id FROM " + statsDB + ".result_oids roid, " + usagestatsImpalaDB + ".usage_stats us WHERE us.result_id=roid.id AND roid.oid=?"); - st.setString(1, oid); - //st.setString(2, oid); - - rs = st.executeQuery(); - - while (rs.next()) { - executeOpenaire(reportItems, rs.getString(1), repositoryIdentifier, itemDataType, beginDate, endDate, granularity); - } - connection.close(); - } catch (Exception e) { - log.error("Oid to OpenAIRE id failed: ", e); - } finally { - DbUtils.closeQuietly(rs); - DbUtils.closeQuietly(st); - DbUtils.closeQuietly(connection); - } - } - - private void executeDoi(List reportItems, String doi, - String repositoryIdentifier, String itemDataType, Date beginDate, - Date endDate, String granularity) { - Connection connection = null; - PreparedStatement st = null; - ResultSet rs = null; - try { - connection = usageStatsDB.getConnection(); - //st = connection.prepareStatement("SELECT DISTINCT poid.id FROM public.result_pids poid, public.downloads_stats s WHERE s.result_id=poid.id AND poid.type='doi' AND poid.pid=? UNION SELECT DISTINCT poid.id FROM public.result_pids poid, public.views_stats s WHERE s.result_id=poid.id AND poid.type='doi' AND poid.pid=?"); - st = connection.prepareStatement("SELECT DISTINCT poid.id FROM " + statsDB + ".result_pids poid, " + usageStatsDB + ".usage_stats us WHERE us.result_id=poid.id AND poid.type='Digital Object Identifier' AND poid.pid=?"); - st.setString(1, doi); - //st.setString(2, doi); - - rs = st.executeQuery(); - - while (rs.next()) { - executeOpenaire(reportItems, rs.getString(1), repositoryIdentifier, itemDataType, beginDate, endDate, granularity); - } - } catch (Exception e) { - log.error("Doi to OpenAIRE id failed: ", e); - } finally { - DbUtils.closeQuietly(rs); - DbUtils.closeQuietly(st); - DbUtils.closeQuietly(connection); - } - } - - private void executeOpenaire(List reportItems, String openaire, - String repositoryIdentifier, String itemDataType, Date beginDate, - Date endDate, String granularity) { - SimpleDateFormat report_dateFormat = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat postgresFormat = new SimpleDateFormat("yyyy/MM"); - String beginDateStr = postgresFormat.format(beginDate); - String endDateStr = postgresFormat.format(endDate); - - Connection connection = null; - PreparedStatement st = null; - ResultSet rs = null; - - /* - Calendar startCalendar = Calendar.getInstance(); - startCalendar.setTime(beginDate); - Calendar endCalendar = Calendar.getInstance(); - endCalendar.setTime(endDate); - int diffYear = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR); - int diffMonth = diffYear * 12 + endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH); - */ - try { - connection = usageStatsDB.getConnection(); - if (repositoryIdentifier.equals("")) { - if (itemDataType.equals("")) { - //st = connection.prepareStatement("SELECT res.repository_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.ddate, oids.orid, res.downloads, res.views FROM (SELECT coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.result_id, vs.result_id) AS result_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.downloads_stats s WHERE s.date>=? AND s.date<=? AND s.result_id=? GROUP BY s.repository_id, s.result_id, s.date) AS ds FULL OUTER JOIN (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.views_stats s WHERE s.date>=? AND s.date<=? AND s.result_id=? GROUP BY s.repository_id, s.result_id, s.date) AS vs ON ds.result_id=vs.result_id AND ds.date=vs.date) AS res JOIN public.result r ON res.result_id=r.id JOIN public.datasource d ON d.id=res.repository_id JOIN public.result_classifications rc ON rc.id=r.id LEFT JOIN (SELECT pids.id, string_agg(pids.pid, '#!#') AS pid FROM public.result_pids pids WHERE pids.id=? AND type='doi' GROUP BY pids.id) AS pids ON pids.id=r.id LEFT JOIN (SELECT oids.id, string_agg(oids.orid, '#!#') AS orid FROM public.result_oids oids WHERE oids.id=? GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.repository_id, res.ddate;"); - //st = connection.prepareStatement("SELECT res.repository_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.date, oids.orid, res.downloads, res.views FROM (SELECT us.repository_id, us.result_id, us.date, us.downloads, us.views FROM usage_stats us WHERE us.date>=? AND us.date<=? AND us.result_id=?) AS res JOIN public.result r ON res.result_id=r.id JOIN public.datasource d ON d.id=res.repository_id JOIN public.result_classifications rc ON rc.id=r.id LEFT JOIN (SELECT pids.id, string_agg(pids.pid, '#!#') AS pid FROM public.result_pids pids WHERE pids.id=? AND type='doi' GROUP BY pids.id) AS pids ON pids.id=r.id LEFT JOIN (SELECT oids.id, string_agg(oids.orid, '#!#') AS orid FROM public.result_oids oids WHERE oids.id=? GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.repository_id, res.date;"); - st = connection.prepareStatement("SELECT distinct res.repository_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.`date`, oids.oid, res.downloads, res.views " - + "FROM (SELECT us.repository_id, us.result_id, us.`date`, us.downloads, us.views FROM " + usagestatsImpalaDB + ".usage_stats us " - + "WHERE us.`date`>=? AND us.`date`<=? AND us.result_id=?) AS res " - + "JOIN " + statsDB + ".result r ON res.result_id=r.id " - + "JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " - + "JOIN (select id, group_concat(type,',') as type FROM " + statsDB + ".result_classifications where id=? " - + "GROUP by id) rc ON rc.id=r.id " - + "LEFT JOIN (SELECT pids.id, group_concat(pids.pid, '#!#') AS pid FROM " + statsDB + ".result_pids pids " - + "WHERE pids.id=? AND type='Digital Object Identifier' GROUP BY pids.id) AS pids ON pids.id=r.id " - + "LEFT JOIN (SELECT id, group_concat(oids.oid, '#!#') AS oid FROM " + statsDB + ".result_oids oids " - + "WHERE oids.id=? GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.repository_id, res.`date`;"); - st.setString(1, beginDateStr); - st.setString(2, endDateStr); - st.setString(3, openaire); - //st.setString(4, beginDateStr); - //st.setString(5, endDateStr); - //st.setString(6, openaire); - st.setString(4, openaire); - st.setString(5, openaire); - st.setString(6, openaire); - } else { - //st = connection.prepareStatement("SELECT res.repository_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.ddate, oids.orid, res.downloads, res.views FROM (SELECT coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.result_id, vs.result_id) AS result_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.downloads_stats s WHERE s.date>=? AND s.date<=? AND s.result_id=? GROUP BY s.repository_id, s.result_id, s.date) AS ds FULL OUTER JOIN (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.views_stats s WHERE s.date>=? AND s.date<=? AND s.result_id=? GROUP BY s.repository_id, s.result_id, s.date) AS vs ON ds.result_id=vs.result_id AND ds.date=vs.date) AS res JOIN public.result r ON res.result_id=r.id JOIN public.datasource d ON d.id=res.repository_id JOIN public.result_classifications rc ON rc.id=r.id AND rc.type=? LEFT JOIN (SELECT pids.id, string_agg(pids.pid, '#!#') AS pid FROM public.result_pids pids WHERE pids.id=? AND type='doi' GROUP BY pids.id) AS pids ON pids.id=r.id LEFT JOIN (SELECT oids.id, string_agg(oids.orid, '#!#') AS orid FROM public.result_oids oids WHERE oids.id=? GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.repository_id, res.ddate;"); - st = connection.prepareStatement("SELECT distinct res.repository_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.`date`, oids.oid, res.downloads, " - + "res.views FROM (SELECT us.repository_id, us.result_id, us.`date`, us.downloads, us.views FROM " + usagestatsImpalaDB + ".usage_stats us " - + "WHERE us.`date`>=? AND us.`date`<=? AND us.result_id=?) AS res " - + "JOIN " + statsDB + ".result r ON res.result_id=r.id " - + "JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " - + "JOIN " + statsDB + ".result_classifications rc ON rc.id=r.id AND rc.type=? " - + "LEFT JOIN (SELECT pids.id, group_concat(pids.pid, '#!#') AS pid " - + "FROM " + statsDB + ".result_pids pids WHERE pids.id=? " - + "AND type='Digital Object Identifier' GROUP BY pids.id) AS pids ON pids.id=r.id " - + "LEFT JOIN (SELECT oids.id, group_concat(oids.oid, '#!#') AS oid " - + "FROM " + statsDB + ".result_oids oids WHERE oids.id=? " - + "GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.repository_id, res.`date`;"); - st.setString(1, beginDateStr); - st.setString(2, endDateStr); - st.setString(3, openaire); - //st.setString(4, beginDateStr); - //st.setString(5, endDateStr); - //st.setString(6, openaire); - st.setString(4, itemDataType); - st.setString(5, openaire); - st.setString(6, openaire); - } - } else { - if (itemDataType.equals("")) { - //st = connection.prepareStatement("SELECT res.repository_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.ddate, oids.orid, res.downloads, res.views FROM (SELECT coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.result_id, vs.result_id) AS result_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.downloads_stats s WHERE s.date>=? AND s.date<=? AND s.result_id=? AND s.repository_id=? GROUP BY s.repository_id, s.result_id, s.date) AS ds FULL OUTER JOIN (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.views_stats s WHERE s.date>=? AND s.date<=? AND s.result_id=? AND s.repository_id=? GROUP BY s.repository_id, s.result_id, s.date) AS vs ON ds.result_id=vs.result_id AND ds.date=vs.date) AS res JOIN public.result r ON res.result_id=r.id JOIN public.datasource d ON d.id=res.repository_id JOIN public.result_classifications rc ON rc.id=r.id LEFT JOIN (SELECT pids.id, string_agg(pids.pid, '#!#') AS pid FROM public.result_pids pids WHERE pids.id=? AND type='doi' GROUP BY pids.id) AS pids ON pids.id=r.id LEFT JOIN (SELECT oids.id, string_agg(oids.orid, '#!#') AS orid FROM public.result_oids oids WHERE oids.id=? GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.repository_id, res.ddate;"); - st = connection.prepareStatement("SELECT distinct res.repository_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.`date`, oids.oid, res.downloads, res.views " - + "FROM (SELECT us.repository_id, us.result_id, us.`date`, us.downloads, us.views " - + "FROM " + usagestatsImpalaDB + ".usage_stats us WHERE us.`date`>=? AND us.`date`<=? AND us.result_id=? AND us.repository_id=?) AS res " - + "JOIN " + statsDB + ".result r ON res.result_id=r.id JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " - + "JOIN (select id, group_concat(type,',') as type from " + statsDB + ".result_classifications where id=? group by id) rc ON rc.id=r.id " - + "LEFT JOIN (SELECT pids.id, group_concat(pids.pid, '#!#') AS pid FROM " + statsDB + ".result_pids pids " - + "WHERE pids.id=? AND type='Digital Object Identifier' GROUP BY pids.id) AS pids ON pids.id=r.id " - + "LEFT JOIN (SELECT oids.id, group_concat(oids.oid, '#!#') AS oid FROM " + statsDB + ".result_oids oids " - + "WHERE oids.id=? GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.repository_id, res.`date`;"); - st.setString(1, beginDateStr); - st.setString(2, endDateStr); - st.setString(3, openaire); - st.setString(4, repositoryIdentifier); - //st.setString(5, beginDateStr); - //st.setString(6, endDateStr); - //st.setString(7, openaire); - //st.setString(8, repositoryIdentifier); - st.setString(5, openaire); - st.setString(6, openaire); - st.setString(7, openaire); - } else { - //st = connection.prepareStatement("SELECT res.repository_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.ddate, oids.orid, res.downloads, res.views FROM (SELECT coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.result_id, vs.result_id) AS result_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.downloads_stats s WHERE s.date>=? AND s.date<=? AND s.result_id=? AND s.repository_id=? GROUP BY s.repository_id, s.result_id, s.date) AS ds FULL OUTER JOIN (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.views_stats s WHERE s.date>=? AND s.date<=? AND s.result_id=? AND s.repository_id=? GROUP BY s.repository_id, s.result_id, s.date) AS vs ON ds.result_id=vs.result_id AND ds.date=vs.date) AS res JOIN public.result r ON res.result_id=r.id JOIN public.datasource d ON d.id=res.repository_id JOIN public.result_classifications rc ON rc.id=r.id AND rc.type=? LEFT JOIN (SELECT pids.id, string_agg(pids.pid, '#!#') AS pid FROM public.result_pids pids WHERE pids.id=? AND type='doi' GROUP BY pids.id) AS pids ON pids.id=r.id LEFT JOIN (SELECT oids.id, string_agg(oids.orid, '#!#') AS orid FROM public.result_oids oids WHERE oids.id=? GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.repository_id, res.ddate;"); - st = connection.prepareStatement("SELECT distinct res.repository_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.`date`, oids.oid, res.downloads,res.views " - + "FROM (SELECT us.repository_id, us.result_id, us.`date`, us.downloads, us.views FROM " + usagestatsImpalaDB + ".usage_stats us " - + "WHERE us.`date`>=? AND us.`date`<=? AND us.result_id=? AND us.repository_id=?) AS res " - + "JOIN " + statsDB + ".result r ON res.result_id=r.id JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " - + "JOIN " + statsDB + ".result_classifications rc ON rc.id=r.id AND rc.type=?' " - + "LEFT JOIN (SELECT pids.id, group_concat(pids.pid, '#!#') AS pid FROM " + statsDB + ".result_pids pids " - + "WHERE pids.id=? AND type='Digital Object Identifier' GROUP BY pids.id) AS pids ON pids.id=r.id " - + "LEFT JOIN (SELECT oids.id, group_concat(oids.oid, '#!#') AS oid " - + "FROM " + statsDB + ".result_oids oids WHERE oids.id=? " - + "GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.repository_id, res.`date`;"); - st.setString(1, beginDateStr); - st.setString(2, endDateStr); - st.setString(3, openaire); - st.setString(4, repositoryIdentifier); - //st.setString(5, beginDateStr); - //st.setString(6, endDateStr); - //st.setString(7, openaire); - //st.setString(8, repositoryIdentifier); - st.setString(5, itemDataType); - st.setString(6, openaire); - st.setString(7, openaire); - } - } - - rs = st.executeQuery(); - String repository = ""; - String lastDate = ""; - COUNTER_Platform_Usage reportItem = null; - int ft_total = 0; - int abstr = 0; - - if (granularity.equalsIgnoreCase("totals")) { - while (rs.next()) { - if (!rs.getString(1).equals(repository)) { - if (reportItem != null) { - reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), Integer.toString(ft_total), Integer.toString(abstr))); - reportItems.add(reportItem); - } - repository = rs.getString(1); - reportItem = new COUNTER_Platform_Usage(rs.getString(3), rs.getString(7), rs.getString(5), rs.getString(2), ""); - reportItem.addIdentifier(new ItemIdentifier("OpenAIRE", openaire)); - reportItem.addIdentifier(new ItemIdentifier("URLs", rs.getString(4))); - if (rs.getString(9) != null && !rs.getString(9).equals("")) { - if (rs.getString(9).contains("#!#")) { - reportItem.addIdentifier(new ItemIdentifier("OAI", rs.getString(9).substring(0, rs.getString(9).indexOf("#!#")))); - } else { - reportItem.addIdentifier(new ItemIdentifier("OAI", rs.getString(9))); - } - } - if (rs.getString(6) != null && !rs.getString(6).equals("")) { - if (rs.getString(6).contains("#!#")) { - reportItem.addIdentifier(new ItemIdentifier("DOI", rs.getString(6).substring(0, rs.getString(6).indexOf("#!#")))); - } else { - reportItem.addIdentifier(new ItemIdentifier("DOI", rs.getString(6))); - } - } - ft_total = 0; - abstr = 0; - } - ft_total += rs.getInt(10); - abstr += rs.getInt(11); - } - if (reportItem != null) { - reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), Integer.toString(ft_total), Integer.toString(abstr))); - reportItems.add(reportItem); - } - } else if (granularity.equalsIgnoreCase("monthly")) { - Calendar endCal = Calendar.getInstance(); - endCal.setTime(postgresFormat.parse(endDateStr)); - endCal.add(Calendar.MONTH, 1); - Date endDateForZeros = endCal.getTime(); - while (rs.next()) { - if (!rs.getString(1).equals(repository)) { - if (reportItem != null) { - fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); - reportItems.add(reportItem); - } - repository = rs.getString(1); - lastDate = beginDateStr; - reportItem = new COUNTER_Platform_Usage(rs.getString(3), rs.getString(7), rs.getString(5), rs.getString(2), ""); - reportItem.addIdentifier(new ItemIdentifier("OpenAIRE", openaire)); - reportItem.addIdentifier(new ItemIdentifier("URLs", rs.getString(4))); - if (rs.getString(9) != null && !rs.getString(9).equals("")) { - if (rs.getString(9).contains("#!#")) { - String allOAIs = rs.getString(9); - String[] oaiArray = allOAIs.split("#!#"); - for (int i = 0; i < oaiArray.length; i++) { - reportItem.addIdentifier(new ItemIdentifier("OAI", oaiArray[i])); - } - //reportItem.addIdentifier(new ItemIdentifier("OAI", rs.getString(9).substring(0, rs.getString(9).indexOf("#!#")))); - - //reportItem.addIdentifier(new ItemIdentifier("OAI", rs.getString(9).substring(0, rs.getString(9).indexOf("#!#")))); - } else { - reportItem.addIdentifier(new ItemIdentifier("OAI", rs.getString(9))); - } - } - if (rs.getString(6) != null && !rs.getString(6).equals("")) { - if (rs.getString(6).contains("#!#")) { - reportItem.addIdentifier(new ItemIdentifier("DOI", rs.getString(6).substring(0, rs.getString(6).indexOf("#!#")))); - } else { - reportItem.addIdentifier(new ItemIdentifier("DOI", rs.getString(6))); - } - } - } - fillWithZeros(postgresFormat.parse(lastDate), postgresFormat.parse(rs.getString(8)), reportItem); - Calendar endC = Calendar.getInstance(); - endC.setTime(postgresFormat.parse(rs.getString(8))); - endC.set(Calendar.DATE, endC.getActualMaximum(Calendar.DATE)); - if (reportItem != null) { - reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(8))), report_dateFormat.format(endC.getTime()), rs.getString(10), rs.getString(11))); - } - endC.setTime(postgresFormat.parse(rs.getString(8))); - endC.add(Calendar.MONTH, 1); - lastDate = postgresFormat.format(endC.getTime()); - } - if (reportItem != null) { - fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); - reportItems.add(reportItem); - } - } - } catch (Exception e) { - log.error("Single Item Report failed: ", e); - } finally { - DbUtils.closeQuietly(rs); - DbUtils.closeQuietly(st); - DbUtils.closeQuietly(connection); - } - } - - public void executeRepo(List reportItems, - String repositoryIdentifier, String itemDataType, Date beginDate, - Date endDate, String granularity) { - SimpleDateFormat report_dateFormat = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat postgresFormat = new SimpleDateFormat("yyyy/MM"); - String beginDateStr = postgresFormat.format(beginDate); - String endDateStr = postgresFormat.format(endDate); - - Connection connection = null; - PreparedStatement st = null; - ResultSet rs = null; - - try { - connection = usageStatsDB.getConnection(); - - if (repositoryIdentifier.equals("")) { - if (itemDataType.equals("")) { - //st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.orid, res.ddate, res.downloads, res.views FROM (SELECT coalesce(ds.source, vs.source), coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.downloads_stats s WHERE s.date>=? AND s.date<=? GROUP BY s.source, s.repository_id, s.date) AS ds FULL OUTER JOIN (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.views_stats s WHERE s.date>=? AND s.date<=? GROUP BY s.source, s.repository_id, s.date) AS vs ON ds.source=vs.source AND ds.repository_id=vs.repository_id AND ds.date=vs.date) AS res JOIN public.datasource d ON d.id=res.repository_id JOIN public.datasource_oids dois ON d.id=dois.id WHERE dois.orid LIKE 'opendoar%' ORDER BY d.id, d.name, res.ddate ASC;"); - st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.oid, res.`date`, res.downloads, res.views " - + "FROM (SELECT us.source, us.repository_id, us.`date`, sum(us.downloads) AS downloads, sum(us.views) AS views " - + "FROM " + usagestatsImpalaDB + ".usage_stats us WHERE us.`date`>=? AND us.`date`<=? GROUP BY us.source, us.repository_id, us.`date`) " - + "AS res JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " - + "JOIN " + statsDB + ".datasource_oids dois ON d.id=dois.id WHERE dois.oid " - + "LIKE 'opendoar%' ORDER BY d.id, d.name, res.`date` ASC;"); - st.setString(1, beginDateStr); - st.setString(2, endDateStr); - //st.setString(3, beginDateStr); - //st.setString(4, endDateStr); - } else { - //st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.orid, res.ddate, res.downloads, res.views FROM (SELECT coalesce(ds.source, vs.source), coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.downloads_stats s, result_classifications rc WHERE rc.id=s.result_id AND s.date>=? AND s.date<=? AND rc.type=? GROUP BY s.source, s.repository_id, s.date) AS ds FULL OUTER JOIN (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.views_stats s, public.result_classifications rc WHERE rc.id=s.result_id AND s.date>=? AND s.date<=? AND rc.type=? GROUP BY s.source, s.repository_id, s.date) AS vs ON ds.source=vs.source AND ds.repository_id=vs.repository_id AND ds.date=vs.date) AS res JOIN public.datasource d ON d.id=res.repository_id JOIN public.datasource_oids dois ON d.id=dois.id WHERE dois.orid LIKE 'opendoar%' ORDER BY d.id, d.name, res.ddate ASC;"); - st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.oid, res.`date`, res.downloads, res.views " - + "FROM (SELECT us.source, us.repository_id, us.`date`, sum(us.downloads) AS downloads, sum(us.views) AS views " - + "FROM " + usagestatsImpalaDB + ".usage_stats us, " + statsDB + ".result_classifications rc " - + "WHERE rc.id=us.result_id AND us.`date`>=? AND us.`date`<=? AND rc.type=? " - + "GROUP BY us.source, us.repository_id, us.`date`) AS res " - + "JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " - + "JOIN " + statsDB + ".datasource_oids dois ON d.id=dois.id WHERE dois.oid LIKE 'opendoar%' " - + "ORDER BY d.id, d.name, res.`date` ASC;"); - st.setString(1, beginDateStr); - st.setString(2, endDateStr); - st.setString(3, itemDataType); - //st.setString(4, beginDateStr); - //st.setString(5, endDateStr); - //st.setString(6, itemDataType); - } - } else { - if (itemDataType.equals("")) { - //st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.orid, res.ddate, res.downloads, res.views FROM (SELECT coalesce(ds.source, vs.source), coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.downloads_stats s WHERE s.date>=? AND s.date<=? AND s.repository_id=? GROUP BY s.source, s.repository_id, s.date) AS ds FULL OUTER JOIN (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.views_stats s WHERE s.date>=? AND s.date<=? AND s.repository_id=? GROUP BY s.source, s.repository_id, s.date) AS vs ON ds.source=vs.source AND ds.repository_id=vs.repository_id AND ds.date=vs.date) AS res JOIN public.datasource d ON d.id=res.repository_id JOIN public.datasource_oids dois ON d.id=dois.id WHERE dois.orid LIKE 'opendoar%' ORDER BY d.id, d.name, res.ddate ASC;"); - st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.oid, res.`date`, res.downloads, res.views " - + "FROM (SELECT us.source, us.repository_id, us.`date`, sum(us.downloads) AS downloads, sum(us.views) AS views " - + "FROM " + usagestatsImpalaDB + ".usage_stats us WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? " - + "GROUP BY us.source, us.repository_id, us.`date`) AS res " - + "JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " - + "JOIN " + statsDB + ".datasource_oids dois ON d.id=dois.id " - + "WHERE dois.oid LIKE 'opendoar%' ORDER BY d.id, d.name, res.`date` ASC;"); - st.setString(1, beginDateStr); - st.setString(2, endDateStr); - st.setString(3, repositoryIdentifier); - //st.setString(4, beginDateStr); - //st.setString(5, endDateStr); - //st.setString(6, repositoryIdentifier); - } else { - //st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.orid, res.ddate, res.downloads, res.views FROM (SELECT coalesce(ds.source, vs.source), coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.downloads_stats s, public.result_classifications rc WHERE rc.id=s.result_id AND s.date>=? AND s.date<=? AND rc.type=? AND s.repository_id=? GROUP BY s.source, s.repository_id, s.date) AS ds FULL OUTER JOIN (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.views_stats s, public.result_classifications rc WHERE rc.id=s.result_id AND s.date>=? AND s.date<=? AND rc.type=? AND s.repository_id=? GROUP BY s.source, s.repository_id, s.date) AS vs ON ds.source=vs.source AND ds.repository_id=vs.repository_id AND ds.date=vs.date) AS res JOIN public.datasource d ON d.id=res.repository_id JOIN public.datasource_oids dois ON d.id=dois.id WHERE dois.orid LIKE 'opendoar%' ORDER BY d.id, d.name, res.ddate ASC;"); - st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.oid, res.`date`, res.downloads, res.views " - + "FROM (SELECT us.source, us.repository_id, us.`date`, sum(us.downloads) AS downloads, sum(us.views) AS views " - + "FROM " + usagestatsImpalaDB + ".usage_stats us, " + statsDB + ".result_classifications rc " - + "WHERE rc.id=us.result_id AND us.`date`>=? AND us.`date`<=? AND rc.type=? " - + "AND us.repository_id=? GROUP BY us.source, us.repository_id, us.`date`) AS res " - + "JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " - + "JOIN " + statsDB + ".datasource_oids dois ON d.id=dois.id " - + "WHERE dois.oid LIKE 'opendoar%' ORDER BY d.id, d.name, res.`date` ASC;"); - st.setString(1, beginDateStr); - st.setString(2, endDateStr); - st.setString(3, itemDataType); - st.setString(4, repositoryIdentifier); - //st.setString(5, beginDateStr); - //st.setString(6, endDateStr); - //st.setString(7, itemDataType); - //st.setString(8, repositoryIdentifier); - } - } - //log.error("RR STATEMENT: " + st); - - /* - String redis_key = MD5(st.toString()); - - if (jedis.hasKey(redis_key, "result")) { - reportItems.addAll(reportItemsFromJson((String) jedis.get(redis_key, "result"))); - st.close(); - connection.close(); - return; - } - */ - rs = st.executeQuery(); - String repository = ""; - String lastDate = ""; - COUNTER_Platform_Usage reportItem = null; - - /* - Calendar startCalendar = Calendar.getInstance(); - startCalendar.setTime(beginDate); - Calendar endCalendar = Calendar.getInstance(); - endCalendar.setTime(endDate); - */ - int ft_total = 0; - int abstr = 0; - if (granularity.equalsIgnoreCase("totals")) { - while (rs.next()) { - if (!rs.getString(1).equals(repository)) { - if (reportItem != null) { - reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), Integer.toString(ft_total), Integer.toString(abstr))); - reportItems.add(reportItem); - } - repository = rs.getString(1); - reportItem = new COUNTER_Platform_Usage(null, rs.getString(2), "Platform", null, ""); - reportItem.addIdentifier(new ItemIdentifier("OpenAIRE", rs.getString(1))); - reportItem.addIdentifier(new ItemIdentifier("OpenDOAR", rs.getString(4).substring(rs.getString(4).lastIndexOf(":") + 1))); - reportItem.addIdentifier(new ItemIdentifier("URL", rs.getString(3))); - ft_total = 0; - abstr = 0; - } - ft_total += rs.getInt(6); - abstr += rs.getInt(7); - } - if (reportItem != null) { - reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), Integer.toString(ft_total), Integer.toString(abstr))); - reportItems.add(reportItem); - } - } else if (granularity.equalsIgnoreCase("monthly")) { - Calendar endCal = Calendar.getInstance(); - endCal.setTime(postgresFormat.parse(endDateStr)); - endCal.add(Calendar.MONTH, 1); - Date endDateForZeros = endCal.getTime(); - while (rs.next()) { - if (!rs.getString(1).equals(repository)) { - if (reportItem != null) { - fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); - reportItems.add(reportItem); - } - repository = rs.getString(1); - lastDate = beginDateStr; - reportItem = new COUNTER_Platform_Usage(null, rs.getString(2), "Platform", null, ""); - reportItem.addIdentifier(new ItemIdentifier("OpenAIRE", rs.getString(1))); - reportItem.addIdentifier(new ItemIdentifier("OpenDOAR", rs.getString(4).substring(rs.getString(4).lastIndexOf(":") + 1))); - reportItem.addIdentifier(new ItemIdentifier("URL", rs.getString(3))); - } - fillWithZeros(postgresFormat.parse(lastDate), postgresFormat.parse(rs.getString(5)), reportItem); - Calendar endC = Calendar.getInstance(); - endC.setTime(postgresFormat.parse(rs.getString(5))); - endC.set(Calendar.DATE, endC.getActualMaximum(Calendar.DATE)); - if (reportItem != null) { - reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(5))), report_dateFormat.format(endC.getTime()), rs.getString(6), rs.getString(7))); - } - endC.setTime(postgresFormat.parse(rs.getString(5))); - endC.add(Calendar.MONTH, 1); - lastDate = postgresFormat.format(endC.getTime()); - } - if (reportItem != null) { - fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); - reportItems.add(reportItem); - } - } - - /* - jedis.put(redis_key, "persistent", "false"); - jedis.put(redis_key, "query", st.toString()); - jedis.put(redis_key, "result", toJson(reportItems)); - jedis.put(redis_key, "fetchMode", "3"); - */ - rs.close(); - st.close(); - connection.close(); - } catch (Exception e) { - log.error("Repository Report failed: ", e); - } finally { - DbUtils.closeQuietly(rs); - DbUtils.closeQuietly(st); - DbUtils.closeQuietly(connection); - } - } - - public void executeJournal(List reportItems, - String repositoryIdentifier, String itemDataType, Date beginDate, - Date endDate, String granularity) { - SimpleDateFormat report_dateFormat = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat postgresFormat = new SimpleDateFormat("yyyy/MM"); - String beginDateStr = postgresFormat.format(beginDate); - String endDateStr = postgresFormat.format(endDate); - - Connection connection = null; - PreparedStatement st = null; - ResultSet rs = null; - - try { - connection = usageStatsDB.getConnection(); - - if (repositoryIdentifier.equals("")) { - if (itemDataType.equals("")) { - //st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.orid, res.ddate, res.downloads, res.views FROM (SELECT coalesce(ds.source, vs.source), coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.downloads_stats s WHERE s.date>=? AND s.date<=? GROUP BY s.source, s.repository_id, s.date) AS ds FULL OUTER JOIN (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.views_stats s WHERE s.date>=? AND s.date<=? GROUP BY s.source, s.repository_id, s.date) AS vs ON ds.source=vs.source AND ds.repository_id=vs.repository_id AND ds.date=vs.date) AS res JOIN public.datasource d ON d.id=res.repository_id JOIN public.datasource_oids dois ON d.id=dois.id WHERE (d.type='Journal' OR d.type='Journal Aggregator/Publisher') ORDER BY d.id, d.name, res.ddate ASC;"); - st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.oid, res.`date`, res.downloads, res.views " - + "FROM (SELECT us.source, us.repository_id, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views " - + "FROM " + usagestatsImpalaDB + ".usage_stats us WHERE us.`date`>=? AND us.`date`<=? GROUP BY us.source, us.repository_id, us.`date`) AS res " - + "JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " - + "JOIN " + statsDB + ".datasource_oids dois ON d.id=dois.id " - + "WHERE (d.type='Journal' OR d.type='Journal Aggregator/Publisher') ORDER BY d.id, d.name, res.`date` ASC;"); - st.setString(1, beginDateStr); - st.setString(2, endDateStr); - //st.setString(3, beginDateStr); - //st.setString(4, endDateStr); - } else { - //st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.orid, res.ddate, res.downloads, res.views FROM (SELECT coalesce(ds.source, vs.source), coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.downloads_stats s, public.result_classifications rc WHERE rc.id=s.result_id AND s.date>=? AND s.date<=? AND rc.type=? GROUP BY s.source, s.repository_id, s.date) AS ds FULL OUTER JOIN (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.views_stats s, public.result_classifications rc WHERE rc.id=s.result_id AND s.date>=? AND s.date<=? AND rc.type=? GROUP BY s.source, s.repository_id, s.date) AS vs ON ds.source=vs.source AND ds.repository_id=vs.repository_id AND ds.date=vs.date) AS res JOIN public.datasource d ON d.id=res.repository_id JOIN public.datasource_oids dois ON d.id=dois.id WHERE (d.type='Journal' OR d.type='Journal Aggregator/Publisher') ORDER BY d.id, d.name, res.ddate ASC;"); - st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.oid, res.`date`, res.downloads, res.views " - + "FROM (SELECT us.source, us.repository_id, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views " - + "FROM " + usagestatsImpalaDB + ".usage_stats us, " + statsDB + ".result_classifications rc " - + "WHERE rc.id=us.result_id AND us.`date`>=? AND us.`date`<=? AND rc.type=? " - + "GROUP BY us.source, us.repository_id, us.`date`) AS res " - + "JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " - + "JOIN " + statsDB + ".datasource_oids dois ON d.id=dois.id " - + "WHERE (d.type='Journal' OR d.type='Journal Aggregator/Publisher') ORDER BY d.id, d.name, res.`date` ASC;"); - st.setString(1, beginDateStr); - st.setString(2, endDateStr); - st.setString(3, itemDataType); - //st.setString(4, beginDateStr); - //st.setString(5, endDateStr); - //st.setString(6, itemDataType); - } - } else { - if (itemDataType.equals("")) { - //st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.orid, res.ddate, res.downloads, res.views FROM (SELECT coalesce(ds.source, vs.source), coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.downloads_stats s WHERE s.date>=? AND s.date<=? AND s.repository_id=? GROUP BY s.source, s.repository_id, s.date) AS ds FULL OUTER JOIN (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.views_stats s WHERE s.date>=? AND s.date<=? AND s.repository_id=? GROUP BY s.source, s.repository_id, s.date) AS vs ON ds.source=vs.source AND ds.repository_id=vs.repository_id AND ds.date=vs.date) AS res JOIN public.datasource d ON d.id=res.repository_id JOIN public.datasource_oids dois ON d.id=dois.id WHERE (d.type='Journal' OR d.type='Journal Aggregator/Publisher') ORDER BY d.id, d.name, res.ddate ASC;"); - st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.oid, res.`date`, res.downloads, res.views " - + "FROM (SELECT us.source, us.repository_id, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views " - + "FROM " + usagestatsImpalaDB + ".usage_stats us WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? " - + "GROUP BY us.source, us.repository_id, us.`date`) AS res JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " - + "JOIN " + statsDB + ".datasource_oids dois ON d.id=dois.id " - + "WHERE (d.type='Journal' OR d.type='Journal Aggregator/Publisher') ORDER BY d.id, d.name, res.`date` ASC;"); - st.setString(1, beginDateStr); - st.setString(2, endDateStr); - st.setString(3, repositoryIdentifier); - //st.setString(4, beginDateStr); - //st.setString(5, endDateStr); - //st.setString(6, repositoryIdentifier); - } else { - //st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.orid, res.ddate, res.downloads, res.views FROM (SELECT coalesce(ds.source, vs.source), coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.downloads_stats s, public.result_classifications rc WHERE rc.id=s.result_id AND s.date>=? AND s.date<=? AND rc.type=? AND s.repository_id=? GROUP BY s.source, s.repository_id, s.date) AS ds FULL OUTER JOIN (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.views_stats s, public.result_classifications rc WHERE rc.id=s.result_id AND s.date>=? AND s.date<=? AND rc.type=? AND s.repository_id=? GROUP BY s.source, s.repository_id, s.date) AS vs ON ds.source=vs.source AND ds.repository_id=vs.repository_id AND ds.date=vs.date) AS res JOIN public.datasource d ON d.id=res.repository_id JOIN public.datasource_oids dois ON d.id=dois.id WHERE (d.type='Journal' OR d.type='Journal Aggregator/Publisher') ORDER BY d.id, d.name, res.ddate ASC;"); - st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.oid, res.`date`, res.downloads, res.views " - + "FROM (SELECT us.source, us.repository_id, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views " - + "FROM " + usagestatsImpalaDB + ".usage_stats us, " + statsDB + ".result_classifications rc WHERE rc.id=us.result_id " - + "AND us.`date`>=?' AND us.`date`<=? AND rc.type=? AND us.repository_id=? " - + "GROUP BY us.source, us.repository_id, us.`date`) AS res " - + "JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " - + "JOIN " + statsDB + ".datasource_oids dois ON d.id=dois.id " - + "WHERE (d.type='Journal' OR d.type='Journal Aggregator/Publisher') ORDER BY d.id, d.name, res.`date` ASC;"); - st.setString(1, beginDateStr); - st.setString(2, endDateStr); - st.setString(3, itemDataType); - st.setString(4, repositoryIdentifier); - //st.setString(5, beginDateStr); - //st.setString(6, endDateStr); - //st.setString(7, itemDataType); - //st.setString(8, repositoryIdentifier); - } - } - //log.error("RR STATEMENT: " + st); - - /* - String redis_key = MD5(st.toString()); - - if (jedis.hasKey(redis_key, "result")) { - reportItems.addAll(reportItemsFromJson((String) jedis.get(redis_key, "result"))); - st.close(); - connection.close(); - return; - } - */ - rs = st.executeQuery(); - String repository = ""; - String lastDate = ""; - COUNTER_Platform_Usage reportItem = null; - - /* - Calendar startCalendar = Calendar.getInstance(); - startCalendar.setTime(beginDate); - Calendar endCalendar = Calendar.getInstance(); - endCalendar.setTime(endDate); - */ - int ft_total = 0; - int abstr = 0; - if (granularity.equalsIgnoreCase("totals")) { - while (rs.next()) { - if (!rs.getString(1).equals(repository)) { - if (reportItem != null) { - reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), Integer.toString(ft_total), Integer.toString(abstr))); - reportItems.add(reportItem); - } - repository = rs.getString(1); - reportItem = new COUNTER_Platform_Usage(null, rs.getString(2), "Platform", null, ""); - reportItem.addIdentifier(new ItemIdentifier("OpenAIRE", rs.getString(1))); - reportItem.addIdentifier(new ItemIdentifier("ISSN", rs.getString(4).substring(rs.getString(4).lastIndexOf(":") + 1))); - if (rs.getString(3) != null) { - reportItem.addIdentifier(new ItemIdentifier("URL", rs.getString(3))); - } - ft_total = 0; - abstr = 0; - } - ft_total += rs.getInt(6); - abstr += rs.getInt(7); - } - if (reportItem != null) { - reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), Integer.toString(ft_total), Integer.toString(abstr))); - reportItems.add(reportItem); - } - } else if (granularity.equalsIgnoreCase("monthly")) { - Calendar endCal = Calendar.getInstance(); - endCal.setTime(postgresFormat.parse(endDateStr)); - endCal.add(Calendar.MONTH, 1); - Date endDateForZeros = endCal.getTime(); - while (rs.next()) { - if (!rs.getString(1).equals(repository)) { - if (reportItem != null) { - fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); - reportItems.add(reportItem); - } - repository = rs.getString(1); - lastDate = beginDateStr; - reportItem = new COUNTER_Platform_Usage(null, rs.getString(2), "Platform", null, ""); - reportItem.addIdentifier(new ItemIdentifier("OpenAIRE", rs.getString(1))); - reportItem.addIdentifier(new ItemIdentifier("ISSN", rs.getString(4).substring(rs.getString(4).lastIndexOf(":") + 1))); - if (rs.getString(3) != null) { - reportItem.addIdentifier(new ItemIdentifier("URL", rs.getString(3))); - } - } - fillWithZeros(postgresFormat.parse(lastDate), postgresFormat.parse(rs.getString(5)), reportItem); - Calendar endC = Calendar.getInstance(); - endC.setTime(postgresFormat.parse(rs.getString(5))); - endC.set(Calendar.DATE, endC.getActualMaximum(Calendar.DATE)); - if (reportItem != null) { - reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(5))), report_dateFormat.format(endC.getTime()), rs.getString(6), rs.getString(7))); - } - endC.setTime(postgresFormat.parse(rs.getString(5))); - endC.add(Calendar.MONTH, 1); - lastDate = postgresFormat.format(endC.getTime()); - } - if (reportItem != null) { - fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); - reportItems.add(reportItem); - } - } - - /* - jedis.put(redis_key, "persistent", "false"); - jedis.put(redis_key, "query", st.toString()); - jedis.put(redis_key, "result", toJson(reportItems)); - jedis.put(redis_key, "fetchMode", "3"); - */ - rs.close(); - st.close(); - connection.close(); - } catch (Exception e) { - log.error("Repository Report failed: ", e); - } finally { - DbUtils.closeQuietly(rs); - DbUtils.closeQuietly(st); - DbUtils.closeQuietly(connection); - } - } - - public void executeBatchItems(List reportItems, - String repositoryIdentifier, String itemDataType, Date beginDate, - Date endDate, String granularity) { - SimpleDateFormat report_dateFormat = new SimpleDateFormat("yyyy-MM-dd"); - SimpleDateFormat postgresFormat = new SimpleDateFormat("yyyy/MM"); - String beginDateStr = postgresFormat.format(beginDate); - String endDateStr = postgresFormat.format(endDate); - - Connection connection = null; - PreparedStatement st = null; - ResultSet rs = null; - - try { - connection = usageStatsDB.getConnection(); - - if (itemDataType.equals("")) { - //st = connection.prepareStatement("SELECT res.result_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.ddate, oids.orid, res.downloads, res.views FROM (SELECT coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.result_id, vs.result_id) AS result_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.downloads_stats s WHERE s.date>=? AND s.date<=? AND s.repository_id=? GROUP BY s.repository_id, s.result_id, s.date) AS ds FULL OUTER JOIN (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.views_stats s WHERE s.date>=? AND s.date<=? AND s.repository_id=? GROUP BY s.repository_id, s.result_id, s.date) AS vs ON ds.result_id=vs.result_id AND ds.date=vs.date) AS res JOIN public.result r ON res.result_id=r.id JOIN public.datasource d ON d.id=res.repository_id JOIN public.result_classifications rc ON rc.id=r.id LEFT JOIN (SELECT pids.id, string_agg(pids.pid, '#!#') AS pid FROM public.result_pids pids, public.result_datasources rd WHERE rd.id=pids.id AND type='doi' AND rd.datasource=? GROUP BY pids.id) AS pids ON pids.id=r.id LEFT JOIN (SELECT oids.id, string_agg(oids.orid, '#!#') AS orid FROM public.result_oids oids, public.result_datasources rd WHERE rd.id=oids.id AND rd.datasource=? GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.result_id, res.ddate;"); - //st = connection.prepareStatement("SELECT res.result_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.date, oids.orid, res.downloads, res.views FROM (SELECT us.repository_id, us.result_id, us.date, sum(us.downloads) as downloads, sum(us.views) as views FROM public.usage_stats us WHERE us.date>=? AND us.date<=? AND us.repository_id=? GROUP BY us.repository_id, us.result_id, us.date) AS res JOIN public.result r ON res.result_id=r.id JOIN public.datasource d ON d.id=res.repository_id JOIN public.result_classifications rc ON rc.id=r.id LEFT JOIN (SELECT pids.id, string_agg(pids.pid, '#!#') AS pid FROM public.result_pids pids, public.result_datasources rd WHERE rd.id=pids.id AND type='doi' AND rd.datasource=? GROUP BY pids.id) AS pids ON pids.id=r.id LEFT JOIN (SELECT oids.id, string_agg(oids.orid, '#!#') AS orid FROM public.result_oids oids, public.result_datasources rd WHERE rd.id=oids.id AND rd.datasource=? GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.result_id, res.date;"); - st = connection.prepareStatement("SELECT distinct res.result_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.`date`, oids.oid, res.downloads, res.views " - + "FROM (SELECT us.repository_id, us.result_id, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views FROM " + usagestatsImpalaDB + ".usage_stats us " - + "WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? " - + "GROUP BY us.repository_id, us.result_id, us.`date`) AS res JOIN " + statsDB + ".result r ON res.result_id=r.id " - + "JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " - + "JOIN " + statsDB + ".result_classifications rc ON rc.id=r.id " - + "LEFT JOIN (SELECT pids.id, group_concat(pids.pid, '#!#') AS pid " - + "FROM " + statsDB + ".result_pids pids, " + statsDB + ".result_datasources rd " - + "WHERE rd.id=pids.id AND type='Digital Object Identifier' AND rd.datasource=? " - + "GROUP BY pids.id) AS pids ON pids.id=r.id " - + "LEFT JOIN (SELECT oids.id, group_concat(oids.oid, '#!#') AS oid " - + "FROM " + statsDB + ".result_oids oids, " + statsDB + ".result_datasources rd " - + "WHERE rd.id=oids.id AND rd.datasource=? GROUP BY oids.id) " - + "AS oids ON oids.id=r.id ORDER BY res.result_id, res.`date`;"); - st.setString(1, beginDateStr); - st.setString(2, endDateStr); - st.setString(3, repositoryIdentifier); - //st.setString(4, beginDateStr); - //st.setString(5, endDateStr); - //st.setString(6, repositoryIdentifier); - st.setString(4, repositoryIdentifier); - st.setString(5, repositoryIdentifier); - } else { - //st = connection.prepareStatement("SELECT res.result_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.ddate, oids.orid, res.downloads, res.views FROM (SELECT coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.result_id, vs.result_id) AS result_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.downloads_stats s WHERE s.date>=? AND s.date<=? AND s.repository_id=? GROUP BY s.repository_id, s.result_id, s.date) AS ds FULL OUTER JOIN (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.views_stats s WHERE s.date>=? AND s.date<=? AND s.repository_id=? GROUP BY s.repository_id, s.result_id, s.date) AS vs ON ds.result_id=vs.result_id AND ds.date=vs.date) AS res JOIN public.result r ON res.result_id=r.id JOIN public.datasource d ON d.id=res.repository_id JOIN public.result_classifications rc ON rc.id=r.id LEFT JOIN (SELECT pids.id, string_agg(pids.pid, '#!#') AS pid FROM public.result_pids pids, result_datasources rd WHERE rd.id=pids.id AND type='doi' AND rd.datasource=? GROUP BY pids.id) AS pids ON pids.id=r.id LEFT JOIN (SELECT oids.id, string_agg(oids.orid, '#!#') AS orid FROM public.result_oids oids, public.result_datasources rd WHERE rd.id=oids.id AND rd.datasource=? GROUP BY oids.id) AS oids ON oids.id=r.id WHERE rc.type=? ORDER BY res.result_id, res.ddate;"); - st = connection.prepareStatement("SELECT distinct res.result_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.`date`, oids.oid, res.downloads, res.views " - + "FROM (SELECT us.repository_id, us.result_id, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views " - + "FROM " + usagestatsImpalaDB + ".usage_stats us WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? " - + "GROUP BY us.repository_id, us.result_id, us.`date`) AS res " - + "JOIN " + statsDB + ".result r ON res.result_id=r.id JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " - + "JOIN " + statsDB + ".result_classifications rc ON rc.id=r.id " - + "LEFT JOIN (SELECT pids.id, group_concat(pids.pid, '#!#') AS pid " - + "FROM " + statsDB + ".result_pids pids, " + statsDB + ".result_datasources rd " - + "WHERE rd.id=pids.id AND type='Digital Object Identifier' " - + "AND rd.datasource=? GROUP BY pids.id) AS pids ON pids.id=r.id " - + "LEFT JOIN (SELECT oids.id, group_concat(oids.oid, '#!#') AS oid " - + "FROM " + statsDB + ".result_oids oids, " + statsDB + ".result_datasources rd " - + "WHERE rd.id=oids.id AND rd.datasource=? GROUP BY oids.id) AS oids ON oids.id=r.id " - + "WHERE rc.type=? ORDER BY res.result_id, res.`date`;"); - st.setString(1, beginDateStr); - st.setString(2, endDateStr); - st.setString(3, repositoryIdentifier); - //st.setString(4, beginDateStr); - //st.setString(5, endDateStr); - //st.setString(6, repositoryIdentifier); - st.setString(4, repositoryIdentifier); - st.setString(5, repositoryIdentifier); - st.setString(6, itemDataType); - } - //log.error("IR STATEMENT: " + st); - - /* - String redis_key = MD5(st.toString()); - - if (jedis.hasKey(redis_key, "result")) { - reportItems.addAll(reportItemsFromJson((String) jedis.get(redis_key, "result"))); - st.close(); - connection.close(); - return; - } - */ - rs = st.executeQuery(); - String result = ""; - String lastDate = ""; - COUNTER_Platform_Usage reportItem = null; - - int ft_total = 0; - int abstr = 0; - if (granularity.equalsIgnoreCase("totals")) { - while (rs.next()) { - if (!rs.getString(1).equals(result)) { - if (reportItem != null) { - reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), Integer.toString(ft_total), Integer.toString(abstr))); - reportItems.add(reportItem); - } - result = rs.getString(1); - reportItem = new COUNTER_Platform_Usage(rs.getString(3), rs.getString(7), rs.getString(5), rs.getString(2), ""); - reportItem.addIdentifier(new ItemIdentifier("OpenAIRE", rs.getString(1))); - reportItem.addIdentifier(new ItemIdentifier("URLs", rs.getString(4))); - if (rs.getString(9) != null && !rs.getString(9).equals("")) { - if (rs.getString(9).contains("#!#")) { - reportItem.addIdentifier(new ItemIdentifier("OAI", rs.getString(9).substring(0, rs.getString(9).indexOf("#!#")))); - } else { - reportItem.addIdentifier(new ItemIdentifier("OAI", rs.getString(9))); - } - } - if (rs.getString(6) != null && !rs.getString(6).equals("")) { - if (rs.getString(6).contains("#!#")) { - reportItem.addIdentifier(new ItemIdentifier("DOI", rs.getString(6).substring(0, rs.getString(6).indexOf("#!#")))); - } else { - reportItem.addIdentifier(new ItemIdentifier("DOI", rs.getString(6))); - } - } - ft_total = 0; - abstr = 0; - } - ft_total += rs.getInt(10); - abstr += rs.getInt(11); - } - if (reportItem != null) { - reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), Integer.toString(ft_total), Integer.toString(abstr))); - reportItems.add(reportItem); - } - } else if (granularity.equalsIgnoreCase("monthly")) { - Calendar endCal = Calendar.getInstance(); - endCal.setTime(postgresFormat.parse(endDateStr)); - endCal.add(Calendar.MONTH, 1); - Date endDateForZeros = endCal.getTime(); - while (rs.next()) { - if (!rs.getString(1).equals(result)) { - if (reportItem != null) { - fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); - reportItems.add(reportItem); - } - result = rs.getString(1); - lastDate = beginDateStr; - reportItem = new COUNTER_Platform_Usage(rs.getString(3), rs.getString(7), rs.getString(5), rs.getString(2), ""); - reportItem.addIdentifier(new ItemIdentifier("OpenAIRE", rs.getString(1))); - reportItem.addIdentifier(new ItemIdentifier("URLs", rs.getString(4))); - if (rs.getString(9) != null && !rs.getString(9).equals("")) { - if (rs.getString(9).contains("#!#")) { - reportItem.addIdentifier(new ItemIdentifier("OAI", rs.getString(9).substring(0, rs.getString(9).indexOf("#!#")))); - } else { - reportItem.addIdentifier(new ItemIdentifier("OAI", rs.getString(9))); - } - } - if (rs.getString(6) != null && !rs.getString(6).equals("")) { - if (rs.getString(6).contains("#!#")) { - reportItem.addIdentifier(new ItemIdentifier("DOI", rs.getString(6).substring(0, rs.getString(6).indexOf("#!#")))); - } else { - reportItem.addIdentifier(new ItemIdentifier("DOI", rs.getString(6))); - } - } - } - fillWithZeros(postgresFormat.parse(lastDate), postgresFormat.parse(rs.getString(8)), reportItem); - Calendar endC = Calendar.getInstance(); - endC.setTime(postgresFormat.parse(rs.getString(8))); - endC.set(Calendar.DATE, endC.getActualMaximum(Calendar.DATE)); - if (reportItem != null) { - reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(8))), report_dateFormat.format(endC.getTime()), rs.getString(10), rs.getString(11))); - } - endC.setTime(postgresFormat.parse(rs.getString(8))); - endC.add(Calendar.MONTH, 1); - lastDate = postgresFormat.format(endC.getTime()); - } - if (reportItem != null) { - fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); - reportItems.add(reportItem); - } - } - - /* - jedis.put(redis_key, "persistent", "false"); - jedis.put(redis_key, "query", st.toString()); - jedis.put(redis_key, "result", toJson(reportItems)); - jedis.put(redis_key, "fetchMode", "3"); - */ - } catch (Exception e) { - log.error("Batch Item Report failed: ", e); - } finally { - DbUtils.closeQuietly(rs); - DbUtils.closeQuietly(st); - DbUtils.closeQuietly(connection); - } - } - +// public void executeItem(List reportItems, String itemIdentifier, +// String repositoryIdentifier, String itemDataType, Date beginDate, +// Date endDate, String granularity) { +// String[] split = itemIdentifier.split(":"); +// switch (split[0].toLowerCase()) { +// case "oid": +// executeOid(reportItems, itemIdentifier.replaceFirst(split[0] + ":", ""), repositoryIdentifier, itemDataType, beginDate, endDate, granularity); +// break; +// case "doi": +// executeDoi(reportItems, itemIdentifier.replaceFirst(split[0] + ":", ""), repositoryIdentifier, itemDataType, beginDate, endDate, granularity); +// break; +//// case "openaire": +//// executeOpenaire(reportItems, itemIdentifier.replaceFirst(split[0] + ":", ""), repositoryIdentifier, itemDataType, beginDate, endDate, granularity); +//// break; +// default: +// } +// } +// private void executeOid(List reportItems, String oid, +// String repositoryIdentifier, String itemDataType, Date beginDate, +// Date endDate, String granularity) { +// Connection connection = null; +// PreparedStatement st = null; +// ResultSet rs = null; +// try { +// connection = usageStatsDB.getConnection(); +// //st = connection.prepareStatement("SELECT DISTINCT roid.id FROM public.result_oids roid, public.downloads_stats s WHERE s.result_id=roid.id AND roid.orid=? UNION SELECT DISTINCT roid.id FROM public.result_oids roid, public.views_stats s WHERE s.result_id=roid.id AND roid.orid=?"); +// st = connection.prepareStatement("SELECT DISTINCT roid.id FROM " + statsDB + ".result_oids roid, " + usagestatsImpalaDB + ".usage_stats us WHERE us.result_id=roid.id AND roid.oid=?"); +// st.setString(1, oid); +// //st.setString(2, oid); +// +// rs = st.executeQuery(); +// +// while (rs.next()) { +// executeOpenaire(reportItems, rs.getString(1), repositoryIdentifier, itemDataType, beginDate, endDate, granularity); +// } +// connection.close(); +// } catch (Exception e) { +// log.error("Oid to OpenAIRE id failed: ", e); +// } finally { +// DbUtils.closeQuietly(rs); +// DbUtils.closeQuietly(st); +// DbUtils.closeQuietly(connection); +// } +// } +// private void executeDoi(List reportItems, String doi, +// String repositoryIdentifier, String itemDataType, Date beginDate, +// Date endDate, String granularity) { +// Connection connection = null; +// PreparedStatement st = null; +// ResultSet rs = null; +// try { +// connection = usageStatsDB.getConnection(); +// //st = connection.prepareStatement("SELECT DISTINCT poid.id FROM public.result_pids poid, public.downloads_stats s WHERE s.result_id=poid.id AND poid.type='doi' AND poid.pid=? UNION SELECT DISTINCT poid.id FROM public.result_pids poid, public.views_stats s WHERE s.result_id=poid.id AND poid.type='doi' AND poid.pid=?"); +// st = connection.prepareStatement("SELECT DISTINCT poid.id FROM " + statsDB + ".result_pids poid, " + usageStatsDB + ".usage_stats us WHERE us.result_id=poid.id AND poid.type='Digital Object Identifier' AND poid.pid=?"); +// st.setString(1, doi); +// //st.setString(2, doi); +// +// rs = st.executeQuery(); +// +// while (rs.next()) { +// executeOpenaire(reportItems, rs.getString(1), repositoryIdentifier, itemDataType, beginDate, endDate, granularity); +// } +// } catch (Exception e) { +// log.error("Doi to OpenAIRE id failed: ", e); +// } finally { +// DbUtils.closeQuietly(rs); +// DbUtils.closeQuietly(st); +// DbUtils.closeQuietly(connection); +// } +// } +// +// private void executeOpenaire(List reportItems, String openaire, +// String repositoryIdentifier, String itemDataType, Date beginDate, +// Date endDate, String granularity) { +// SimpleDateFormat report_dateFormat = new SimpleDateFormat("yyyy-MM-dd"); +// SimpleDateFormat postgresFormat = new SimpleDateFormat("yyyy/MM"); +// String beginDateStr = postgresFormat.format(beginDate); +// String endDateStr = postgresFormat.format(endDate); +// +// Connection connection = null; +// PreparedStatement st = null; +// ResultSet rs = null; +// +// /* +// Calendar startCalendar = Calendar.getInstance(); +// startCalendar.setTime(beginDate); +// Calendar endCalendar = Calendar.getInstance(); +// endCalendar.setTime(endDate); +// int diffYear = endCalendar.get(Calendar.YEAR) - startCalendar.get(Calendar.YEAR); +// int diffMonth = diffYear * 12 + endCalendar.get(Calendar.MONTH) - startCalendar.get(Calendar.MONTH); +// */ +// try { +// connection = usageStatsDB.getConnection(); +// if (repositoryIdentifier.equals("")) { +// if (itemDataType.equals("")) { +// //st = connection.prepareStatement("SELECT res.repository_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.ddate, oids.orid, res.downloads, res.views FROM (SELECT coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.result_id, vs.result_id) AS result_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.downloads_stats s WHERE s.date>=? AND s.date<=? AND s.result_id=? GROUP BY s.repository_id, s.result_id, s.date) AS ds FULL OUTER JOIN (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.views_stats s WHERE s.date>=? AND s.date<=? AND s.result_id=? GROUP BY s.repository_id, s.result_id, s.date) AS vs ON ds.result_id=vs.result_id AND ds.date=vs.date) AS res JOIN public.result r ON res.result_id=r.id JOIN public.datasource d ON d.id=res.repository_id JOIN public.result_classifications rc ON rc.id=r.id LEFT JOIN (SELECT pids.id, string_agg(pids.pid, '#!#') AS pid FROM public.result_pids pids WHERE pids.id=? AND type='doi' GROUP BY pids.id) AS pids ON pids.id=r.id LEFT JOIN (SELECT oids.id, string_agg(oids.orid, '#!#') AS orid FROM public.result_oids oids WHERE oids.id=? GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.repository_id, res.ddate;"); +// //st = connection.prepareStatement("SELECT res.repository_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.date, oids.orid, res.downloads, res.views FROM (SELECT us.repository_id, us.result_id, us.date, us.downloads, us.views FROM usage_stats us WHERE us.date>=? AND us.date<=? AND us.result_id=?) AS res JOIN public.result r ON res.result_id=r.id JOIN public.datasource d ON d.id=res.repository_id JOIN public.result_classifications rc ON rc.id=r.id LEFT JOIN (SELECT pids.id, string_agg(pids.pid, '#!#') AS pid FROM public.result_pids pids WHERE pids.id=? AND type='doi' GROUP BY pids.id) AS pids ON pids.id=r.id LEFT JOIN (SELECT oids.id, string_agg(oids.orid, '#!#') AS orid FROM public.result_oids oids WHERE oids.id=? GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.repository_id, res.date;"); +// st = connection.prepareStatement("SELECT distinct res.repository_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.`date`, oids.oid, res.downloads, res.views " +// + "FROM (SELECT us.repository_id, us.result_id, us.`date`, us.downloads, us.views FROM " + usagestatsImpalaDB + ".usage_stats us " +// + "WHERE us.`date`>=? AND us.`date`<=? AND us.result_id=?) AS res " +// + "JOIN " + statsDB + ".result r ON res.result_id=r.id " +// + "JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " +// + "JOIN (select id, group_concat(type,',') as type FROM " + statsDB + ".result_classifications where id=? " +// + "GROUP by id) rc ON rc.id=r.id " +// + "LEFT JOIN (SELECT pids.id, group_concat(pids.pid, '#!#') AS pid FROM " + statsDB + ".result_pids pids " +// + "WHERE pids.id=? AND type='Digital Object Identifier' GROUP BY pids.id) AS pids ON pids.id=r.id " +// + "LEFT JOIN (SELECT id, group_concat(oids.oid, '#!#') AS oid FROM " + statsDB + ".result_oids oids " +// + "WHERE oids.id=? GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.repository_id, res.`date`;"); +// st.setString(1, beginDateStr); +// st.setString(2, endDateStr); +// st.setString(3, openaire); +// //st.setString(4, beginDateStr); +// //st.setString(5, endDateStr); +// //st.setString(6, openaire); +// st.setString(4, openaire); +// st.setString(5, openaire); +// st.setString(6, openaire); +// } else { +// //st = connection.prepareStatement("SELECT res.repository_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.ddate, oids.orid, res.downloads, res.views FROM (SELECT coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.result_id, vs.result_id) AS result_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.downloads_stats s WHERE s.date>=? AND s.date<=? AND s.result_id=? GROUP BY s.repository_id, s.result_id, s.date) AS ds FULL OUTER JOIN (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.views_stats s WHERE s.date>=? AND s.date<=? AND s.result_id=? GROUP BY s.repository_id, s.result_id, s.date) AS vs ON ds.result_id=vs.result_id AND ds.date=vs.date) AS res JOIN public.result r ON res.result_id=r.id JOIN public.datasource d ON d.id=res.repository_id JOIN public.result_classifications rc ON rc.id=r.id AND rc.type=? LEFT JOIN (SELECT pids.id, string_agg(pids.pid, '#!#') AS pid FROM public.result_pids pids WHERE pids.id=? AND type='doi' GROUP BY pids.id) AS pids ON pids.id=r.id LEFT JOIN (SELECT oids.id, string_agg(oids.orid, '#!#') AS orid FROM public.result_oids oids WHERE oids.id=? GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.repository_id, res.ddate;"); +// st = connection.prepareStatement("SELECT distinct res.repository_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.`date`, oids.oid, res.downloads, " +// + "res.views FROM (SELECT us.repository_id, us.result_id, us.`date`, us.downloads, us.views FROM " + usagestatsImpalaDB + ".usage_stats us " +// + "WHERE us.`date`>=? AND us.`date`<=? AND us.result_id=?) AS res " +// + "JOIN " + statsDB + ".result r ON res.result_id=r.id " +// + "JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " +// + "JOIN " + statsDB + ".result_classifications rc ON rc.id=r.id AND rc.type=? " +// + "LEFT JOIN (SELECT pids.id, group_concat(pids.pid, '#!#') AS pid " +// + "FROM " + statsDB + ".result_pids pids WHERE pids.id=? " +// + "AND type='Digital Object Identifier' GROUP BY pids.id) AS pids ON pids.id=r.id " +// + "LEFT JOIN (SELECT oids.id, group_concat(oids.oid, '#!#') AS oid " +// + "FROM " + statsDB + ".result_oids oids WHERE oids.id=? " +// + "GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.repository_id, res.`date`;"); +// st.setString(1, beginDateStr); +// st.setString(2, endDateStr); +// st.setString(3, openaire); +// //st.setString(4, beginDateStr); +// //st.setString(5, endDateStr); +// //st.setString(6, openaire); +// st.setString(4, itemDataType); +// st.setString(5, openaire); +// st.setString(6, openaire); +// } +// } else { +// if (itemDataType.equals("")) { +// //st = connection.prepareStatement("SELECT res.repository_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.ddate, oids.orid, res.downloads, res.views FROM (SELECT coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.result_id, vs.result_id) AS result_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.downloads_stats s WHERE s.date>=? AND s.date<=? AND s.result_id=? AND s.repository_id=? GROUP BY s.repository_id, s.result_id, s.date) AS ds FULL OUTER JOIN (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.views_stats s WHERE s.date>=? AND s.date<=? AND s.result_id=? AND s.repository_id=? GROUP BY s.repository_id, s.result_id, s.date) AS vs ON ds.result_id=vs.result_id AND ds.date=vs.date) AS res JOIN public.result r ON res.result_id=r.id JOIN public.datasource d ON d.id=res.repository_id JOIN public.result_classifications rc ON rc.id=r.id LEFT JOIN (SELECT pids.id, string_agg(pids.pid, '#!#') AS pid FROM public.result_pids pids WHERE pids.id=? AND type='doi' GROUP BY pids.id) AS pids ON pids.id=r.id LEFT JOIN (SELECT oids.id, string_agg(oids.orid, '#!#') AS orid FROM public.result_oids oids WHERE oids.id=? GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.repository_id, res.ddate;"); +// st = connection.prepareStatement("SELECT distinct res.repository_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.`date`, oids.oid, res.downloads, res.views " +// + "FROM (SELECT us.repository_id, us.result_id, us.`date`, us.downloads, us.views " +// + "FROM " + usagestatsImpalaDB + ".usage_stats us WHERE us.`date`>=? AND us.`date`<=? AND us.result_id=? AND us.repository_id=?) AS res " +// + "JOIN " + statsDB + ".result r ON res.result_id=r.id JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " +// + "JOIN (select id, group_concat(type,',') as type from " + statsDB + ".result_classifications where id=? group by id) rc ON rc.id=r.id " +// + "LEFT JOIN (SELECT pids.id, group_concat(pids.pid, '#!#') AS pid FROM " + statsDB + ".result_pids pids " +// + "WHERE pids.id=? AND type='Digital Object Identifier' GROUP BY pids.id) AS pids ON pids.id=r.id " +// + "LEFT JOIN (SELECT oids.id, group_concat(oids.oid, '#!#') AS oid FROM " + statsDB + ".result_oids oids " +// + "WHERE oids.id=? GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.repository_id, res.`date`;"); +// st.setString(1, beginDateStr); +// st.setString(2, endDateStr); +// st.setString(3, openaire); +// st.setString(4, repositoryIdentifier); +// //st.setString(5, beginDateStr); +// //st.setString(6, endDateStr); +// //st.setString(7, openaire); +// //st.setString(8, repositoryIdentifier); +// st.setString(5, openaire); +// st.setString(6, openaire); +// st.setString(7, openaire); +// } else { +// //st = connection.prepareStatement("SELECT res.repository_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.ddate, oids.orid, res.downloads, res.views FROM (SELECT coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.result_id, vs.result_id) AS result_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.downloads_stats s WHERE s.date>=? AND s.date<=? AND s.result_id=? AND s.repository_id=? GROUP BY s.repository_id, s.result_id, s.date) AS ds FULL OUTER JOIN (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.views_stats s WHERE s.date>=? AND s.date<=? AND s.result_id=? AND s.repository_id=? GROUP BY s.repository_id, s.result_id, s.date) AS vs ON ds.result_id=vs.result_id AND ds.date=vs.date) AS res JOIN public.result r ON res.result_id=r.id JOIN public.datasource d ON d.id=res.repository_id JOIN public.result_classifications rc ON rc.id=r.id AND rc.type=? LEFT JOIN (SELECT pids.id, string_agg(pids.pid, '#!#') AS pid FROM public.result_pids pids WHERE pids.id=? AND type='doi' GROUP BY pids.id) AS pids ON pids.id=r.id LEFT JOIN (SELECT oids.id, string_agg(oids.orid, '#!#') AS orid FROM public.result_oids oids WHERE oids.id=? GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.repository_id, res.ddate;"); +// st = connection.prepareStatement("SELECT distinct res.repository_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.`date`, oids.oid, res.downloads,res.views " +// + "FROM (SELECT us.repository_id, us.result_id, us.`date`, us.downloads, us.views FROM " + usagestatsImpalaDB + ".usage_stats us " +// + "WHERE us.`date`>=? AND us.`date`<=? AND us.result_id=? AND us.repository_id=?) AS res " +// + "JOIN " + statsDB + ".result r ON res.result_id=r.id JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " +// + "JOIN " + statsDB + ".result_classifications rc ON rc.id=r.id AND rc.type=?' " +// + "LEFT JOIN (SELECT pids.id, group_concat(pids.pid, '#!#') AS pid FROM " + statsDB + ".result_pids pids " +// + "WHERE pids.id=? AND type='Digital Object Identifier' GROUP BY pids.id) AS pids ON pids.id=r.id " +// + "LEFT JOIN (SELECT oids.id, group_concat(oids.oid, '#!#') AS oid " +// + "FROM " + statsDB + ".result_oids oids WHERE oids.id=? " +// + "GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.repository_id, res.`date`;"); +// st.setString(1, beginDateStr); +// st.setString(2, endDateStr); +// st.setString(3, openaire); +// st.setString(4, repositoryIdentifier); +// //st.setString(5, beginDateStr); +// //st.setString(6, endDateStr); +// //st.setString(7, openaire); +// //st.setString(8, repositoryIdentifier); +// st.setString(5, itemDataType); +// st.setString(6, openaire); +// st.setString(7, openaire); +// } +// } +// +// rs = st.executeQuery(); +// String repository = ""; +// String lastDate = ""; +// COUNTER_Platform_Usage reportItem = null; +// int ft_total = 0; +// int abstr = 0; +// +// if (granularity.equalsIgnoreCase("totals")) { +// while (rs.next()) { +// if (!rs.getString(1).equals(repository)) { +// if (reportItem != null) { +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), Integer.toString(ft_total), Integer.toString(abstr))); +// reportItems.add(reportItem); +// } +// repository = rs.getString(1); +// reportItem = new COUNTER_Platform_Usage(rs.getString(3), rs.getString(7), rs.getString(5), rs.getString(2), ""); +// reportItem.addIdentifier(new COUNTER_Item_Identifier("OpenAIRE", openaire)); +// reportItem.addIdentifier(new COUNTER_Item_Identifier("URLs", rs.getString(4))); +// if (rs.getString(9) != null && !rs.getString(9).equals("")) { +// if (rs.getString(9).contains("#!#")) { +// reportItem.addIdentifier(new COUNTER_Item_Identifier("OAI", rs.getString(9).substring(0, rs.getString(9).indexOf("#!#")))); +// } else { +// reportItem.addIdentifier(new COUNTER_Item_Identifier("OAI", rs.getString(9))); +// } +// } +// if (rs.getString(6) != null && !rs.getString(6).equals("")) { +// if (rs.getString(6).contains("#!#")) { +// reportItem.addIdentifier(new COUNTER_Item_Identifier("DOI", rs.getString(6).substring(0, rs.getString(6).indexOf("#!#")))); +// } else { +// reportItem.addIdentifier(new COUNTER_Item_Identifier("DOI", rs.getString(6))); +// } +// } +// ft_total = 0; +// abstr = 0; +// } +// ft_total += rs.getInt(10); +// abstr += rs.getInt(11); +// } +// if (reportItem != null) { +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), Integer.toString(ft_total), Integer.toString(abstr))); +// reportItems.add(reportItem); +// } +// } else if (granularity.equalsIgnoreCase("monthly")) { +// Calendar endCal = Calendar.getInstance(); +// endCal.setTime(postgresFormat.parse(endDateStr)); +// endCal.add(Calendar.MONTH, 1); +// Date endDateForZeros = endCal.getTime(); +// while (rs.next()) { +// if (!rs.getString(1).equals(repository)) { +// if (reportItem != null) { +// fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); +// reportItems.add(reportItem); +// } +// repository = rs.getString(1); +// lastDate = beginDateStr; +// reportItem = new COUNTER_Platform_Usage(rs.getString(3), rs.getString(7), rs.getString(5), rs.getString(2), ""); +// reportItem.addIdentifier(new COUNTER_Item_Identifier("OpenAIRE", openaire)); +// reportItem.addIdentifier(new COUNTER_Item_Identifier("URLs", rs.getString(4))); +// if (rs.getString(9) != null && !rs.getString(9).equals("")) { +// if (rs.getString(9).contains("#!#")) { +// String allOAIs = rs.getString(9); +// String[] oaiArray = allOAIs.split("#!#"); +// for (int i = 0; i < oaiArray.length; i++) { +// reportItem.addIdentifier(new COUNTER_Item_Identifier("OAI", oaiArray[i])); +// } +// //reportItem.addIdentifier(new COUNTER_Item_Identifier("OAI", rs.getString(9).substring(0, rs.getString(9).indexOf("#!#")))); +// +// //reportItem.addIdentifier(new COUNTER_Item_Identifier("OAI", rs.getString(9).substring(0, rs.getString(9).indexOf("#!#")))); +// } else { +// reportItem.addIdentifier(new COUNTER_Item_Identifier("OAI", rs.getString(9))); +// } +// } +// if (rs.getString(6) != null && !rs.getString(6).equals("")) { +// if (rs.getString(6).contains("#!#")) { +// reportItem.addIdentifier(new COUNTER_Item_Identifier("DOI", rs.getString(6).substring(0, rs.getString(6).indexOf("#!#")))); +// } else { +// reportItem.addIdentifier(new COUNTER_Item_Identifier("DOI", rs.getString(6))); +// } +// } +// } +// fillWithZeros(postgresFormat.parse(lastDate), postgresFormat.parse(rs.getString(8)), reportItem); +// Calendar endC = Calendar.getInstance(); +// endC.setTime(postgresFormat.parse(rs.getString(8))); +// endC.set(Calendar.DATE, endC.getActualMaximum(Calendar.DATE)); +// if (reportItem != null) { +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(8))), report_dateFormat.format(endC.getTime()), rs.getString(10), rs.getString(11))); +// } +// endC.setTime(postgresFormat.parse(rs.getString(8))); +// endC.add(Calendar.MONTH, 1); +// lastDate = postgresFormat.format(endC.getTime()); +// } +// if (reportItem != null) { +// fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); +// reportItems.add(reportItem); +// } +// } +// } catch (Exception e) { +// log.error("Single Item Report failed: ", e); +// } finally { +// DbUtils.closeQuietly(rs); +// DbUtils.closeQuietly(st); +// DbUtils.closeQuietly(connection); +// } +// } +// public void executeRepo(List reportItems, +// String repositoryIdentifier, String itemDataType, Date beginDate, +// Date endDate, String granularity) { +// SimpleDateFormat report_dateFormat = new SimpleDateFormat("yyyy-MM-dd"); +// SimpleDateFormat postgresFormat = new SimpleDateFormat("yyyy/MM"); +// String beginDateStr = postgresFormat.format(beginDate); +// String endDateStr = postgresFormat.format(endDate); +// +// Connection connection = null; +// PreparedStatement st = null; +// ResultSet rs = null; +// +// try { +// connection = usageStatsDB.getConnection(); +// +// if (repositoryIdentifier.equals("")) { +// if (itemDataType.equals("")) { +// //st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.orid, res.ddate, res.downloads, res.views FROM (SELECT coalesce(ds.source, vs.source), coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.downloads_stats s WHERE s.date>=? AND s.date<=? GROUP BY s.source, s.repository_id, s.date) AS ds FULL OUTER JOIN (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.views_stats s WHERE s.date>=? AND s.date<=? GROUP BY s.source, s.repository_id, s.date) AS vs ON ds.source=vs.source AND ds.repository_id=vs.repository_id AND ds.date=vs.date) AS res JOIN public.datasource d ON d.id=res.repository_id JOIN public.datasource_oids dois ON d.id=dois.id WHERE dois.orid LIKE 'opendoar%' ORDER BY d.id, d.name, res.ddate ASC;"); +// st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.oid, res.`date`, res.downloads, res.views " +// + "FROM (SELECT us.source, us.repository_id, us.`date`, sum(us.downloads) AS downloads, sum(us.views) AS views " +// + "FROM " + usagestatsImpalaDB + ".usage_stats us WHERE us.`date`>=? AND us.`date`<=? GROUP BY us.source, us.repository_id, us.`date`) " +// + "AS res JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " +// + "JOIN " + statsDB + ".datasource_oids dois ON d.id=dois.id WHERE dois.oid " +// + "LIKE 'opendoar%' ORDER BY d.id, d.name, res.`date` ASC;"); +// st.setString(1, beginDateStr); +// st.setString(2, endDateStr); +// //st.setString(3, beginDateStr); +// //st.setString(4, endDateStr); +// } else { +// //st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.orid, res.ddate, res.downloads, res.views FROM (SELECT coalesce(ds.source, vs.source), coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.downloads_stats s, result_classifications rc WHERE rc.id=s.result_id AND s.date>=? AND s.date<=? AND rc.type=? GROUP BY s.source, s.repository_id, s.date) AS ds FULL OUTER JOIN (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.views_stats s, public.result_classifications rc WHERE rc.id=s.result_id AND s.date>=? AND s.date<=? AND rc.type=? GROUP BY s.source, s.repository_id, s.date) AS vs ON ds.source=vs.source AND ds.repository_id=vs.repository_id AND ds.date=vs.date) AS res JOIN public.datasource d ON d.id=res.repository_id JOIN public.datasource_oids dois ON d.id=dois.id WHERE dois.orid LIKE 'opendoar%' ORDER BY d.id, d.name, res.ddate ASC;"); +// st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.oid, res.`date`, res.downloads, res.views " +// + "FROM (SELECT us.source, us.repository_id, us.`date`, sum(us.downloads) AS downloads, sum(us.views) AS views " +// + "FROM " + usagestatsImpalaDB + ".usage_stats us, " + statsDB + ".result_classifications rc " +// + "WHERE rc.id=us.result_id AND us.`date`>=? AND us.`date`<=? AND rc.type=? " +// + "GROUP BY us.source, us.repository_id, us.`date`) AS res " +// + "JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " +// + "JOIN " + statsDB + ".datasource_oids dois ON d.id=dois.id WHERE dois.oid LIKE 'opendoar%' " +// + "ORDER BY d.id, d.name, res.`date` ASC;"); +// st.setString(1, beginDateStr); +// st.setString(2, endDateStr); +// st.setString(3, itemDataType); +// //st.setString(4, beginDateStr); +// //st.setString(5, endDateStr); +// //st.setString(6, itemDataType); +// } +// } else { +// if (itemDataType.equals("")) { +// //st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.orid, res.ddate, res.downloads, res.views FROM (SELECT coalesce(ds.source, vs.source), coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.downloads_stats s WHERE s.date>=? AND s.date<=? AND s.repository_id=? GROUP BY s.source, s.repository_id, s.date) AS ds FULL OUTER JOIN (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.views_stats s WHERE s.date>=? AND s.date<=? AND s.repository_id=? GROUP BY s.source, s.repository_id, s.date) AS vs ON ds.source=vs.source AND ds.repository_id=vs.repository_id AND ds.date=vs.date) AS res JOIN public.datasource d ON d.id=res.repository_id JOIN public.datasource_oids dois ON d.id=dois.id WHERE dois.orid LIKE 'opendoar%' ORDER BY d.id, d.name, res.ddate ASC;"); +// st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.oid, res.`date`, res.downloads, res.views " +// + "FROM (SELECT us.source, us.repository_id, us.`date`, sum(us.downloads) AS downloads, sum(us.views) AS views " +// + "FROM " + usagestatsImpalaDB + ".usage_stats us WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? " +// + "GROUP BY us.source, us.repository_id, us.`date`) AS res " +// + "JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " +// + "JOIN " + statsDB + ".datasource_oids dois ON d.id=dois.id " +// + "WHERE dois.oid LIKE 'opendoar%' ORDER BY d.id, d.name, res.`date` ASC;"); +// st.setString(1, beginDateStr); +// st.setString(2, endDateStr); +// st.setString(3, repositoryIdentifier); +// //st.setString(4, beginDateStr); +// //st.setString(5, endDateStr); +// //st.setString(6, repositoryIdentifier); +// } else { +// //st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.orid, res.ddate, res.downloads, res.views FROM (SELECT coalesce(ds.source, vs.source), coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.downloads_stats s, public.result_classifications rc WHERE rc.id=s.result_id AND s.date>=? AND s.date<=? AND rc.type=? AND s.repository_id=? GROUP BY s.source, s.repository_id, s.date) AS ds FULL OUTER JOIN (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.views_stats s, public.result_classifications rc WHERE rc.id=s.result_id AND s.date>=? AND s.date<=? AND rc.type=? AND s.repository_id=? GROUP BY s.source, s.repository_id, s.date) AS vs ON ds.source=vs.source AND ds.repository_id=vs.repository_id AND ds.date=vs.date) AS res JOIN public.datasource d ON d.id=res.repository_id JOIN public.datasource_oids dois ON d.id=dois.id WHERE dois.orid LIKE 'opendoar%' ORDER BY d.id, d.name, res.ddate ASC;"); +// st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.oid, res.`date`, res.downloads, res.views " +// + "FROM (SELECT us.source, us.repository_id, us.`date`, sum(us.downloads) AS downloads, sum(us.views) AS views " +// + "FROM " + usagestatsImpalaDB + ".usage_stats us, " + statsDB + ".result_classifications rc " +// + "WHERE rc.id=us.result_id AND us.`date`>=? AND us.`date`<=? AND rc.type=? " +// + "AND us.repository_id=? GROUP BY us.source, us.repository_id, us.`date`) AS res " +// + "JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " +// + "JOIN " + statsDB + ".datasource_oids dois ON d.id=dois.id " +// + "WHERE dois.oid LIKE 'opendoar%' ORDER BY d.id, d.name, res.`date` ASC;"); +// st.setString(1, beginDateStr); +// st.setString(2, endDateStr); +// st.setString(3, itemDataType); +// st.setString(4, repositoryIdentifier); +// //st.setString(5, beginDateStr); +// //st.setString(6, endDateStr); +// //st.setString(7, itemDataType); +// //st.setString(8, repositoryIdentifier); +// } +// } +// //log.error("RR STATEMENT: " + st); +// +// /* +// String redis_key = MD5(st.toString()); +// +// if (jedis.hasKey(redis_key, "result")) { +// reportItems.addAll(reportItemsFromJson((String) jedis.get(redis_key, "result"))); +// st.close(); +// connection.close(); +// return; +// } +// */ +// rs = st.executeQuery(); +// String repository = ""; +// String lastDate = ""; +// COUNTER_Platform_Usage reportItem = null; +// +// /* +// Calendar startCalendar = Calendar.getInstance(); +// startCalendar.setTime(beginDate); +// Calendar endCalendar = Calendar.getInstance(); +// endCalendar.setTime(endDate); +// */ +// int ft_total = 0; +// int abstr = 0; +// if (granularity.equalsIgnoreCase("totals")) { +// while (rs.next()) { +// if (!rs.getString(1).equals(repository)) { +// if (reportItem != null) { +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), Integer.toString(ft_total), Integer.toString(abstr))); +// reportItems.add(reportItem); +// } +// repository = rs.getString(1); +// reportItem = new COUNTER_Platform_Usage(null, rs.getString(2), "Platform", null, ""); +// reportItem.addIdentifier(new COUNTER_Item_Identifier("OpenAIRE", rs.getString(1))); +// reportItem.addIdentifier(new COUNTER_Item_Identifier("OpenDOAR", rs.getString(4).substring(rs.getString(4).lastIndexOf(":") + 1))); +// reportItem.addIdentifier(new COUNTER_Item_Identifier("URL", rs.getString(3))); +// ft_total = 0; +// abstr = 0; +// } +// ft_total += rs.getInt(6); +// abstr += rs.getInt(7); +// } +// if (reportItem != null) { +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), Integer.toString(ft_total), Integer.toString(abstr))); +// reportItems.add(reportItem); +// } +// } else if (granularity.equalsIgnoreCase("monthly")) { +// Calendar endCal = Calendar.getInstance(); +// endCal.setTime(postgresFormat.parse(endDateStr)); +// endCal.add(Calendar.MONTH, 1); +// Date endDateForZeros = endCal.getTime(); +// while (rs.next()) { +// if (!rs.getString(1).equals(repository)) { +// if (reportItem != null) { +// fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); +// reportItems.add(reportItem); +// } +// repository = rs.getString(1); +// lastDate = beginDateStr; +// reportItem = new COUNTER_Platform_Usage(null, rs.getString(2), "Platform", null, ""); +// reportItem.addIdentifier(new COUNTER_Item_Identifier("OpenAIRE", rs.getString(1))); +// reportItem.addIdentifier(new COUNTER_Item_Identifier("OpenDOAR", rs.getString(4).substring(rs.getString(4).lastIndexOf(":") + 1))); +// reportItem.addIdentifier(new COUNTER_Item_Identifier("URL", rs.getString(3))); +// } +// fillWithZeros(postgresFormat.parse(lastDate), postgresFormat.parse(rs.getString(5)), reportItem); +// Calendar endC = Calendar.getInstance(); +// endC.setTime(postgresFormat.parse(rs.getString(5))); +// endC.set(Calendar.DATE, endC.getActualMaximum(Calendar.DATE)); +// if (reportItem != null) { +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(5))), report_dateFormat.format(endC.getTime()), rs.getString(6), rs.getString(7))); +// } +// endC.setTime(postgresFormat.parse(rs.getString(5))); +// endC.add(Calendar.MONTH, 1); +// lastDate = postgresFormat.format(endC.getTime()); +// } +// if (reportItem != null) { +// fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); +// reportItems.add(reportItem); +// } +// } +// +// /* +// jedis.put(redis_key, "persistent", "false"); +// jedis.put(redis_key, "query", st.toString()); +// jedis.put(redis_key, "result", toJson(reportItems)); +// jedis.put(redis_key, "fetchMode", "3"); +// */ +// rs.close(); +// st.close(); +// connection.close(); +// } catch (Exception e) { +// log.error("Repository Report failed: ", e); +// } finally { +// DbUtils.closeQuietly(rs); +// DbUtils.closeQuietly(st); +// DbUtils.closeQuietly(connection); +// } +// } +// public void executeJournal(List reportItems, +// String repositoryIdentifier, String itemDataType, Date beginDate, +// Date endDate, String granularity) { +// SimpleDateFormat report_dateFormat = new SimpleDateFormat("yyyy-MM-dd"); +// SimpleDateFormat postgresFormat = new SimpleDateFormat("yyyy/MM"); +// String beginDateStr = postgresFormat.format(beginDate); +// String endDateStr = postgresFormat.format(endDate); +// +// Connection connection = null; +// PreparedStatement st = null; +// ResultSet rs = null; +// +// try { +// connection = usageStatsDB.getConnection(); +// +// if (repositoryIdentifier.equals("")) { +// if (itemDataType.equals("")) { +// //st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.orid, res.ddate, res.downloads, res.views FROM (SELECT coalesce(ds.source, vs.source), coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.downloads_stats s WHERE s.date>=? AND s.date<=? GROUP BY s.source, s.repository_id, s.date) AS ds FULL OUTER JOIN (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.views_stats s WHERE s.date>=? AND s.date<=? GROUP BY s.source, s.repository_id, s.date) AS vs ON ds.source=vs.source AND ds.repository_id=vs.repository_id AND ds.date=vs.date) AS res JOIN public.datasource d ON d.id=res.repository_id JOIN public.datasource_oids dois ON d.id=dois.id WHERE (d.type='Journal' OR d.type='Journal Aggregator/Publisher') ORDER BY d.id, d.name, res.ddate ASC;"); +// st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.oid, res.`date`, res.downloads, res.views " +// + "FROM (SELECT us.source, us.repository_id, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views " +// + "FROM " + usagestatsImpalaDB + ".usage_stats us WHERE us.`date`>=? AND us.`date`<=? GROUP BY us.source, us.repository_id, us.`date`) AS res " +// + "JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " +// + "JOIN " + statsDB + ".datasource_oids dois ON d.id=dois.id " +// + "WHERE (d.type='Journal' OR d.type='Journal Aggregator/Publisher') ORDER BY d.id, d.name, res.`date` ASC;"); +// st.setString(1, beginDateStr); +// st.setString(2, endDateStr); +// //st.setString(3, beginDateStr); +// //st.setString(4, endDateStr); +// } else { +// //st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.orid, res.ddate, res.downloads, res.views FROM (SELECT coalesce(ds.source, vs.source), coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.downloads_stats s, public.result_classifications rc WHERE rc.id=s.result_id AND s.date>=? AND s.date<=? AND rc.type=? GROUP BY s.source, s.repository_id, s.date) AS ds FULL OUTER JOIN (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.views_stats s, public.result_classifications rc WHERE rc.id=s.result_id AND s.date>=? AND s.date<=? AND rc.type=? GROUP BY s.source, s.repository_id, s.date) AS vs ON ds.source=vs.source AND ds.repository_id=vs.repository_id AND ds.date=vs.date) AS res JOIN public.datasource d ON d.id=res.repository_id JOIN public.datasource_oids dois ON d.id=dois.id WHERE (d.type='Journal' OR d.type='Journal Aggregator/Publisher') ORDER BY d.id, d.name, res.ddate ASC;"); +// st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.oid, res.`date`, res.downloads, res.views " +// + "FROM (SELECT us.source, us.repository_id, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views " +// + "FROM " + usagestatsImpalaDB + ".usage_stats us, " + statsDB + ".result_classifications rc " +// + "WHERE rc.id=us.result_id AND us.`date`>=? AND us.`date`<=? AND rc.type=? " +// + "GROUP BY us.source, us.repository_id, us.`date`) AS res " +// + "JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " +// + "JOIN " + statsDB + ".datasource_oids dois ON d.id=dois.id " +// + "WHERE (d.type='Journal' OR d.type='Journal Aggregator/Publisher') ORDER BY d.id, d.name, res.`date` ASC;"); +// st.setString(1, beginDateStr); +// st.setString(2, endDateStr); +// st.setString(3, itemDataType); +// //st.setString(4, beginDateStr); +// //st.setString(5, endDateStr); +// //st.setString(6, itemDataType); +// } +// } else { +// if (itemDataType.equals("")) { +// //st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.orid, res.ddate, res.downloads, res.views FROM (SELECT coalesce(ds.source, vs.source), coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.downloads_stats s WHERE s.date>=? AND s.date<=? AND s.repository_id=? GROUP BY s.source, s.repository_id, s.date) AS ds FULL OUTER JOIN (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.views_stats s WHERE s.date>=? AND s.date<=? AND s.repository_id=? GROUP BY s.source, s.repository_id, s.date) AS vs ON ds.source=vs.source AND ds.repository_id=vs.repository_id AND ds.date=vs.date) AS res JOIN public.datasource d ON d.id=res.repository_id JOIN public.datasource_oids dois ON d.id=dois.id WHERE (d.type='Journal' OR d.type='Journal Aggregator/Publisher') ORDER BY d.id, d.name, res.ddate ASC;"); +// st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.oid, res.`date`, res.downloads, res.views " +// + "FROM (SELECT us.source, us.repository_id, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views " +// + "FROM " + usagestatsImpalaDB + ".usage_stats us WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? " +// + "GROUP BY us.source, us.repository_id, us.`date`) AS res JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " +// + "JOIN " + statsDB + ".datasource_oids dois ON d.id=dois.id " +// + "WHERE (d.type='Journal' OR d.type='Journal Aggregator/Publisher') ORDER BY d.id, d.name, res.`date` ASC;"); +// st.setString(1, beginDateStr); +// st.setString(2, endDateStr); +// st.setString(3, repositoryIdentifier); +// //st.setString(4, beginDateStr); +// //st.setString(5, endDateStr); +// //st.setString(6, repositoryIdentifier); +// } else { +// //st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.orid, res.ddate, res.downloads, res.views FROM (SELECT coalesce(ds.source, vs.source), coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.downloads_stats s, public.result_classifications rc WHERE rc.id=s.result_id AND s.date>=? AND s.date<=? AND rc.type=? AND s.repository_id=? GROUP BY s.source, s.repository_id, s.date) AS ds FULL OUTER JOIN (SELECT s.source, s.repository_id, s.date, sum(s.count) FROM public.views_stats s, public.result_classifications rc WHERE rc.id=s.result_id AND s.date>=? AND s.date<=? AND rc.type=? AND s.repository_id=? GROUP BY s.source, s.repository_id, s.date) AS vs ON ds.source=vs.source AND ds.repository_id=vs.repository_id AND ds.date=vs.date) AS res JOIN public.datasource d ON d.id=res.repository_id JOIN public.datasource_oids dois ON d.id=dois.id WHERE (d.type='Journal' OR d.type='Journal Aggregator/Publisher') ORDER BY d.id, d.name, res.ddate ASC;"); +// st = connection.prepareStatement("SELECT d.id, d.name, d.websiteurl, dois.oid, res.`date`, res.downloads, res.views " +// + "FROM (SELECT us.source, us.repository_id, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views " +// + "FROM " + usagestatsImpalaDB + ".usage_stats us, " + statsDB + ".result_classifications rc WHERE rc.id=us.result_id " +// + "AND us.`date`>=?' AND us.`date`<=? AND rc.type=? AND us.repository_id=? " +// + "GROUP BY us.source, us.repository_id, us.`date`) AS res " +// + "JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " +// + "JOIN " + statsDB + ".datasource_oids dois ON d.id=dois.id " +// + "WHERE (d.type='Journal' OR d.type='Journal Aggregator/Publisher') ORDER BY d.id, d.name, res.`date` ASC;"); +// st.setString(1, beginDateStr); +// st.setString(2, endDateStr); +// st.setString(3, itemDataType); +// st.setString(4, repositoryIdentifier); +// //st.setString(5, beginDateStr); +// //st.setString(6, endDateStr); +// //st.setString(7, itemDataType); +// //st.setString(8, repositoryIdentifier); +// } +// } +// //log.error("RR STATEMENT: " + st); +// +// /* +// String redis_key = MD5(st.toString()); +// +// if (jedis.hasKey(redis_key, "result")) { +// reportItems.addAll(reportItemsFromJson((String) jedis.get(redis_key, "result"))); +// st.close(); +// connection.close(); +// return; +// } +// */ +// rs = st.executeQuery(); +// String repository = ""; +// String lastDate = ""; +// COUNTER_Platform_Usage reportItem = null; +// +// /* +// Calendar startCalendar = Calendar.getInstance(); +// startCalendar.setTime(beginDate); +// Calendar endCalendar = Calendar.getInstance(); +// endCalendar.setTime(endDate); +// */ +// int ft_total = 0; +// int abstr = 0; +// if (granularity.equalsIgnoreCase("totals")) { +// while (rs.next()) { +// if (!rs.getString(1).equals(repository)) { +// if (reportItem != null) { +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), Integer.toString(ft_total), Integer.toString(abstr))); +// reportItems.add(reportItem); +// } +// repository = rs.getString(1); +// reportItem = new COUNTER_Platform_Usage(null, rs.getString(2), "Platform", null, ""); +// reportItem.addIdentifier(new COUNTER_Item_Identifier("OpenAIRE", rs.getString(1))); +// reportItem.addIdentifier(new COUNTER_Item_Identifier("ISSN", rs.getString(4).substring(rs.getString(4).lastIndexOf(":") + 1))); +// if (rs.getString(3) != null) { +// reportItem.addIdentifier(new COUNTER_Item_Identifier("URL", rs.getString(3))); +// } +// ft_total = 0; +// abstr = 0; +// } +// ft_total += rs.getInt(6); +// abstr += rs.getInt(7); +// } +// if (reportItem != null) { +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), Integer.toString(ft_total), Integer.toString(abstr))); +// reportItems.add(reportItem); +// } +// } else if (granularity.equalsIgnoreCase("monthly")) { +// Calendar endCal = Calendar.getInstance(); +// endCal.setTime(postgresFormat.parse(endDateStr)); +// endCal.add(Calendar.MONTH, 1); +// Date endDateForZeros = endCal.getTime(); +// while (rs.next()) { +// if (!rs.getString(1).equals(repository)) { +// if (reportItem != null) { +// fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); +// reportItems.add(reportItem); +// } +// repository = rs.getString(1); +// lastDate = beginDateStr; +// reportItem = new COUNTER_Platform_Usage(null, rs.getString(2), "Platform", null, ""); +// reportItem.addIdentifier(new COUNTER_Item_Identifier("OpenAIRE", rs.getString(1))); +// reportItem.addIdentifier(new COUNTER_Item_Identifier("ISSN", rs.getString(4).substring(rs.getString(4).lastIndexOf(":") + 1))); +// if (rs.getString(3) != null) { +// reportItem.addIdentifier(new COUNTER_Item_Identifier("URL", rs.getString(3))); +// } +// } +// fillWithZeros(postgresFormat.parse(lastDate), postgresFormat.parse(rs.getString(5)), reportItem); +// Calendar endC = Calendar.getInstance(); +// endC.setTime(postgresFormat.parse(rs.getString(5))); +// endC.set(Calendar.DATE, endC.getActualMaximum(Calendar.DATE)); +// if (reportItem != null) { +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(5))), report_dateFormat.format(endC.getTime()), rs.getString(6), rs.getString(7))); +// } +// endC.setTime(postgresFormat.parse(rs.getString(5))); +// endC.add(Calendar.MONTH, 1); +// lastDate = postgresFormat.format(endC.getTime()); +// } +// if (reportItem != null) { +// fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); +// reportItems.add(reportItem); +// } +// } +// +// /* +// jedis.put(redis_key, "persistent", "false"); +// jedis.put(redis_key, "query", st.toString()); +// jedis.put(redis_key, "result", toJson(reportItems)); +// jedis.put(redis_key, "fetchMode", "3"); +// */ +// rs.close(); +// st.close(); +// connection.close(); +// } catch (Exception e) { +// log.error("Repository Report failed: ", e); +// } finally { +// DbUtils.closeQuietly(rs); +// DbUtils.closeQuietly(st); +// DbUtils.closeQuietly(connection); +// } +// } +// public void executeBatchItems(List reportItems, +// String repositoryIdentifier, String itemDataType, Date beginDate, +// Date endDate, String granularity) { +// SimpleDateFormat report_dateFormat = new SimpleDateFormat("yyyy-MM-dd"); +// SimpleDateFormat postgresFormat = new SimpleDateFormat("yyyy/MM"); +// String beginDateStr = postgresFormat.format(beginDate); +// String endDateStr = postgresFormat.format(endDate); +// +// Connection connection = null; +// PreparedStatement st = null; +// ResultSet rs = null; +// +// try { +// connection = usageStatsDB.getConnection(); +// +// if (itemDataType.equals("")) { +// //st = connection.prepareStatement("SELECT res.result_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.ddate, oids.orid, res.downloads, res.views FROM (SELECT coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.result_id, vs.result_id) AS result_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.downloads_stats s WHERE s.date>=? AND s.date<=? AND s.repository_id=? GROUP BY s.repository_id, s.result_id, s.date) AS ds FULL OUTER JOIN (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.views_stats s WHERE s.date>=? AND s.date<=? AND s.repository_id=? GROUP BY s.repository_id, s.result_id, s.date) AS vs ON ds.result_id=vs.result_id AND ds.date=vs.date) AS res JOIN public.result r ON res.result_id=r.id JOIN public.datasource d ON d.id=res.repository_id JOIN public.result_classifications rc ON rc.id=r.id LEFT JOIN (SELECT pids.id, string_agg(pids.pid, '#!#') AS pid FROM public.result_pids pids, public.result_datasources rd WHERE rd.id=pids.id AND type='doi' AND rd.datasource=? GROUP BY pids.id) AS pids ON pids.id=r.id LEFT JOIN (SELECT oids.id, string_agg(oids.orid, '#!#') AS orid FROM public.result_oids oids, public.result_datasources rd WHERE rd.id=oids.id AND rd.datasource=? GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.result_id, res.ddate;"); +// //st = connection.prepareStatement("SELECT res.result_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.date, oids.orid, res.downloads, res.views FROM (SELECT us.repository_id, us.result_id, us.date, sum(us.downloads) as downloads, sum(us.views) as views FROM public.usage_stats us WHERE us.date>=? AND us.date<=? AND us.repository_id=? GROUP BY us.repository_id, us.result_id, us.date) AS res JOIN public.result r ON res.result_id=r.id JOIN public.datasource d ON d.id=res.repository_id JOIN public.result_classifications rc ON rc.id=r.id LEFT JOIN (SELECT pids.id, string_agg(pids.pid, '#!#') AS pid FROM public.result_pids pids, public.result_datasources rd WHERE rd.id=pids.id AND type='doi' AND rd.datasource=? GROUP BY pids.id) AS pids ON pids.id=r.id LEFT JOIN (SELECT oids.id, string_agg(oids.orid, '#!#') AS orid FROM public.result_oids oids, public.result_datasources rd WHERE rd.id=oids.id AND rd.datasource=? GROUP BY oids.id) AS oids ON oids.id=r.id ORDER BY res.result_id, res.date;"); +// st = connection.prepareStatement("SELECT distinct res.result_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.`date`, oids.oid, res.downloads, res.views " +// + "FROM (SELECT us.repository_id, us.result_id, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views FROM " + usagestatsImpalaDB + ".usage_stats us " +// + "WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? " +// + "GROUP BY us.repository_id, us.result_id, us.`date`) AS res JOIN " + statsDB + ".result r ON res.result_id=r.id " +// + "JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " +// + "JOIN " + statsDB + ".result_classifications rc ON rc.id=r.id " +// + "LEFT JOIN (SELECT pids.id, group_concat(pids.pid, '#!#') AS pid " +// + "FROM " + statsDB + ".result_pids pids, " + statsDB + ".result_datasources rd " +// + "WHERE rd.id=pids.id AND type='Digital Object Identifier' AND rd.datasource=? " +// + "GROUP BY pids.id) AS pids ON pids.id=r.id " +// + "LEFT JOIN (SELECT oids.id, group_concat(oids.oid, '#!#') AS oid " +// + "FROM " + statsDB + ".result_oids oids, " + statsDB + ".result_datasources rd " +// + "WHERE rd.id=oids.id AND rd.datasource=? GROUP BY oids.id) " +// + "AS oids ON oids.id=r.id ORDER BY res.result_id, res.`date`;"); +// st.setString(1, beginDateStr); +// st.setString(2, endDateStr); +// st.setString(3, repositoryIdentifier); +// //st.setString(4, beginDateStr); +// //st.setString(5, endDateStr); +// //st.setString(6, repositoryIdentifier); +// st.setString(4, repositoryIdentifier); +// st.setString(5, repositoryIdentifier); +// } else { +// //st = connection.prepareStatement("SELECT res.result_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.ddate, oids.orid, res.downloads, res.views FROM (SELECT coalesce(ds.repository_id, vs.repository_id) AS repository_id, coalesce(ds.result_id, vs.result_id) AS result_id, coalesce(ds.date, vs.date) AS ddate, coalesce(ds.sum, 0) AS downloads, coalesce(vs.sum,0) AS views FROM (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.downloads_stats s WHERE s.date>=? AND s.date<=? AND s.repository_id=? GROUP BY s.repository_id, s.result_id, s.date) AS ds FULL OUTER JOIN (SELECT s.repository_id, s.result_id, s.date, sum(s.count) FROM public.views_stats s WHERE s.date>=? AND s.date<=? AND s.repository_id=? GROUP BY s.repository_id, s.result_id, s.date) AS vs ON ds.result_id=vs.result_id AND ds.date=vs.date) AS res JOIN public.result r ON res.result_id=r.id JOIN public.datasource d ON d.id=res.repository_id JOIN public.result_classifications rc ON rc.id=r.id LEFT JOIN (SELECT pids.id, string_agg(pids.pid, '#!#') AS pid FROM public.result_pids pids, result_datasources rd WHERE rd.id=pids.id AND type='doi' AND rd.datasource=? GROUP BY pids.id) AS pids ON pids.id=r.id LEFT JOIN (SELECT oids.id, string_agg(oids.orid, '#!#') AS orid FROM public.result_oids oids, public.result_datasources rd WHERE rd.id=oids.id AND rd.datasource=? GROUP BY oids.id) AS oids ON oids.id=r.id WHERE rc.type=? ORDER BY res.result_id, res.ddate;"); +// st = connection.prepareStatement("SELECT distinct res.result_id, r.title, r.publisher, r.source, rc.type, pids.pid, d.name, res.`date`, oids.oid, res.downloads, res.views " +// + "FROM (SELECT us.repository_id, us.result_id, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views " +// + "FROM " + usagestatsImpalaDB + ".usage_stats us WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? " +// + "GROUP BY us.repository_id, us.result_id, us.`date`) AS res " +// + "JOIN " + statsDB + ".result r ON res.result_id=r.id JOIN " + statsDB + ".datasource d ON d.id=res.repository_id " +// + "JOIN " + statsDB + ".result_classifications rc ON rc.id=r.id " +// + "LEFT JOIN (SELECT pids.id, group_concat(pids.pid, '#!#') AS pid " +// + "FROM " + statsDB + ".result_pids pids, " + statsDB + ".result_datasources rd " +// + "WHERE rd.id=pids.id AND type='Digital Object Identifier' " +// + "AND rd.datasource=? GROUP BY pids.id) AS pids ON pids.id=r.id " +// + "LEFT JOIN (SELECT oids.id, group_concat(oids.oid, '#!#') AS oid " +// + "FROM " + statsDB + ".result_oids oids, " + statsDB + ".result_datasources rd " +// + "WHERE rd.id=oids.id AND rd.datasource=? GROUP BY oids.id) AS oids ON oids.id=r.id " +// + "WHERE rc.type=? ORDER BY res.result_id, res.`date`;"); +// st.setString(1, beginDateStr); +// st.setString(2, endDateStr); +// st.setString(3, repositoryIdentifier); +// //st.setString(4, beginDateStr); +// //st.setString(5, endDateStr); +// //st.setString(6, repositoryIdentifier); +// st.setString(4, repositoryIdentifier); +// st.setString(5, repositoryIdentifier); +// st.setString(6, itemDataType); +// } +// //log.error("IR STATEMENT: " + st); +// +// /* +// String redis_key = MD5(st.toString()); +// +// if (jedis.hasKey(redis_key, "result")) { +// reportItems.addAll(reportItemsFromJson((String) jedis.get(redis_key, "result"))); +// st.close(); +// connection.close(); +// return; +// } +// */ +// rs = st.executeQuery(); +// String result = ""; +// String lastDate = ""; +// COUNTER_Platform_Usage reportItem = null; +// +// int ft_total = 0; +// int abstr = 0; +// if (granularity.equalsIgnoreCase("totals")) { +// while (rs.next()) { +// if (!rs.getString(1).equals(result)) { +// if (reportItem != null) { +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), Integer.toString(ft_total), Integer.toString(abstr))); +// reportItems.add(reportItem); +// } +// result = rs.getString(1); +// reportItem = new COUNTER_Platform_Usage(rs.getString(3), rs.getString(7), rs.getString(5), rs.getString(2), ""); +// reportItem.addIdentifier(new COUNTER_Item_Identifier("OpenAIRE", rs.getString(1))); +// reportItem.addIdentifier(new COUNTER_Item_Identifier("URLs", rs.getString(4))); +// if (rs.getString(9) != null && !rs.getString(9).equals("")) { +// if (rs.getString(9).contains("#!#")) { +// reportItem.addIdentifier(new COUNTER_Item_Identifier("OAI", rs.getString(9).substring(0, rs.getString(9).indexOf("#!#")))); +// } else { +// reportItem.addIdentifier(new COUNTER_Item_Identifier("OAI", rs.getString(9))); +// } +// } +// if (rs.getString(6) != null && !rs.getString(6).equals("")) { +// if (rs.getString(6).contains("#!#")) { +// reportItem.addIdentifier(new COUNTER_Item_Identifier("DOI", rs.getString(6).substring(0, rs.getString(6).indexOf("#!#")))); +// } else { +// reportItem.addIdentifier(new COUNTER_Item_Identifier("DOI", rs.getString(6))); +// } +// } +// ft_total = 0; +// abstr = 0; +// } +// ft_total += rs.getInt(10); +// abstr += rs.getInt(11); +// } +// if (reportItem != null) { +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), Integer.toString(ft_total), Integer.toString(abstr))); +// reportItems.add(reportItem); +// } +// } else if (granularity.equalsIgnoreCase("monthly")) { +// Calendar endCal = Calendar.getInstance(); +// endCal.setTime(postgresFormat.parse(endDateStr)); +// endCal.add(Calendar.MONTH, 1); +// Date endDateForZeros = endCal.getTime(); +// while (rs.next()) { +// if (!rs.getString(1).equals(result)) { +// if (reportItem != null) { +// fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); +// reportItems.add(reportItem); +// } +// result = rs.getString(1); +// lastDate = beginDateStr; +// reportItem = new COUNTER_Platform_Usage(rs.getString(3), rs.getString(7), rs.getString(5), rs.getString(2), ""); +// reportItem.addIdentifier(new COUNTER_Item_Identifier("OpenAIRE", rs.getString(1))); +// reportItem.addIdentifier(new COUNTER_Item_Identifier("URLs", rs.getString(4))); +// if (rs.getString(9) != null && !rs.getString(9).equals("")) { +// if (rs.getString(9).contains("#!#")) { +// reportItem.addIdentifier(new COUNTER_Item_Identifier("OAI", rs.getString(9).substring(0, rs.getString(9).indexOf("#!#")))); +// } else { +// reportItem.addIdentifier(new COUNTER_Item_Identifier("OAI", rs.getString(9))); +// } +// } +// if (rs.getString(6) != null && !rs.getString(6).equals("")) { +// if (rs.getString(6).contains("#!#")) { +// reportItem.addIdentifier(new COUNTER_Item_Identifier("DOI", rs.getString(6).substring(0, rs.getString(6).indexOf("#!#")))); +// } else { +// reportItem.addIdentifier(new COUNTER_Item_Identifier("DOI", rs.getString(6))); +// } +// } +// } +// fillWithZeros(postgresFormat.parse(lastDate), postgresFormat.parse(rs.getString(8)), reportItem); +// Calendar endC = Calendar.getInstance(); +// endC.setTime(postgresFormat.parse(rs.getString(8))); +// endC.set(Calendar.DATE, endC.getActualMaximum(Calendar.DATE)); +// if (reportItem != null) { +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(8))), report_dateFormat.format(endC.getTime()), rs.getString(10), rs.getString(11))); +// } +// endC.setTime(postgresFormat.parse(rs.getString(8))); +// endC.add(Calendar.MONTH, 1); +// lastDate = postgresFormat.format(endC.getTime()); +// } +// if (reportItem != null) { +// fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); +// reportItems.add(reportItem); +// } +// } +// +// /* +// jedis.put(redis_key, "persistent", "false"); +// jedis.put(redis_key, "query", st.toString()); +// jedis.put(redis_key, "result", toJson(reportItems)); +// jedis.put(redis_key, "fetchMode", "3"); +// */ +// } catch (Exception e) { +// log.error("Batch Item Report failed: ", e); +// } finally { +// DbUtils.closeQuietly(rs); +// DbUtils.closeQuietly(st); +// DbUtils.closeQuietly(connection); +// } +// } public void executeBatchItemsPR(List reportItems, String repositoryIdentifier, Date beginDate, Date endDate, String metricType, String dataType, String granularity) { @@ -1512,12 +1506,14 @@ public class UsageStatsRepository { Connection connection = null; PreparedStatement st = null; ResultSet rs = null; + String platform = getInstitutionName(repositoryIdentifier); + log.info("Platform " + platform); try { connection = usageStatsDB.getConnection(); if (granularity.equalsIgnoreCase("totals")) { if (dataType.equals("")) { - st = connection.prepareStatement("SELECT rc.type, sum(us.downloads) as downloads, sum(us.views) as views FROM " + usagestatsImpalaDB + ".usage_stats us, " + st = connection.prepareStatement("SELECT rc_id, rc.type, sum(us.downloads) as downloads, sum(us.views) as views FROM " + usagestatsImpalaDB + ".usage_stats us, " + statsDB + ".result_classifications rc WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND rc.id=us.result_id GROUP BY rc.type order by rc.type ASC;"); st.setString(1, beginDateStr); @@ -1530,21 +1526,21 @@ public class UsageStatsRepository { switch (metricType) { case (""): while (rs.next()) { - reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); + reportItem = new COUNTER_Platform_Usage(platform, rs.getString(1), "Regular"); reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), rs.getString(3))); reportItems.add(reportItem); } break; case ("Total_Items_Investigations"): while (rs.next()) { - reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); + reportItem = new COUNTER_Platform_Usage(platform, rs.getString(1), "Regular"); reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), null, rs.getString(3))); reportItems.add(reportItem); } break; case ("Total_Items_Requests"): while (rs.next()) { - reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); + reportItem = new COUNTER_Platform_Usage(platform, rs.getString(1), "Regular"); reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), null)); reportItems.add(reportItem); } @@ -1565,28 +1561,27 @@ public class UsageStatsRepository { switch (metricType) { case (""): while (rs.next()) { - reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); + reportItem = new COUNTER_Platform_Usage(platform, rs.getString(1), "Regular"); reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), rs.getString(3))); reportItems.add(reportItem); } break; case ("Total_Items_Investigations"): while (rs.next()) { - reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); + reportItem = new COUNTER_Platform_Usage(platform, rs.getString(1), "Regular"); reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), null, rs.getString(3))); reportItems.add(reportItem); } break; case ("Total_Items_Requests"): while (rs.next()) { - reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); + reportItem = new COUNTER_Platform_Usage(platform, rs.getString(1), "Regular"); reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), null)); reportItems.add(reportItem); } break; } } - } else if (granularity.equalsIgnoreCase("monthly")) { if (dataType.equals("")) { st = connection.prepareStatement("SELECT rc.type, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views FROM " + usagestatsImpalaDB + ".usage_stats us, " @@ -1620,7 +1615,7 @@ public class UsageStatsRepository { if (reportItem != null) { reportItems.add(reportItem); } - reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); + reportItem = new COUNTER_Platform_Usage(platform, rs.getString(1), "Regular"); datatype = rs.getString(1); } if (reportItem != null) { @@ -1681,7 +1676,7 @@ public class UsageStatsRepository { if (reportItem != null) { reportItems.add(reportItem); } - reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); + reportItem = new COUNTER_Platform_Usage(platform, rs.getString(1), "Regular"); datatype = rs.getString(1); } if (reportItem != null) { @@ -1712,7 +1707,6 @@ public class UsageStatsRepository { } } - /* jedis.put(redis_key, "persistent", "false"); jedis.put(redis_key, "query", st.toString()); @@ -1735,7 +1729,7 @@ public class UsageStatsRepository { SimpleDateFormat postgresFormat = new SimpleDateFormat("yyyy/MM"); String beginDateStr = postgresFormat.format(beginDate); String endDateStr = postgresFormat.format(endDate); - + String platform = getInstitutionName(repositoryIdentifier); Connection connection = null; PreparedStatement st = null; ResultSet rs = null; @@ -1765,7 +1759,7 @@ public class UsageStatsRepository { lastDate = beginDateStr; String datatype = ""; - reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", null, "Regular", ""); + reportItem = new COUNTER_Platform_Usage(platform, null, "Regular"); while (rs.next()) { Calendar endC = Calendar.getInstance(); @@ -1798,6 +1792,452 @@ public class UsageStatsRepository { } } + public void executeBatchItemsIR(List reportItems, + String repositoryIdentifier, String itemIdentifier, Date beginDate, + Date endDate, String metricType, String dataType, String granularity) { + SimpleDateFormat report_dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat postgresFormat = new SimpleDateFormat("yyyy/MM"); + String beginDateStr = postgresFormat.format(beginDate); + String endDateStr = postgresFormat.format(endDate); + + Connection connection = null; + PreparedStatement st = null; + ResultSet rs = null; + String platform = getInstitutionName(repositoryIdentifier); + + if (itemIdentifier.equals("")) { + try { + connection = usageStatsDB.getConnection(); + + if (granularity.equalsIgnoreCase("totals")) { + if (dataType.equals("")) { + st = connection.prepareStatement("SELECT rc.type, sum(us.downloads) as downloads, sum(us.views) as views FROM " + usagestatsImpalaDB + ".usage_stats us, " + + statsDB + ".result_classifications rc WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND rc.id=us.result_id GROUP BY rc.type order by rc.type ASC;"); + + st.setString(1, beginDateStr); + st.setString(2, endDateStr); + st.setString(3, repositoryIdentifier); + + rs = st.executeQuery(); + COUNTER_Item_Usage reportItem = null; + + switch (metricType) { + case (""): + while (rs.next()) { + reportItem = new COUNTER_Item_Usage(null, "OpenAIRE", platform, rs.getString(1), null, "Regular", "Total_Items_Investigations|Total_Items_Requests"); + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), rs.getString(3))); + reportItems.add(reportItem); + } + break; + case ("Total_Items_Investigations"): + while (rs.next()) { + reportItem = new COUNTER_Item_Usage(null, "OpenAIRE", platform, rs.getString(1), null, "Regular", metricType); + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), null, rs.getString(3))); + reportItems.add(reportItem); + } + break; + case ("Total_Items_Requests"): + while (rs.next()) { + reportItem = new COUNTER_Item_Usage(null, "OpenAIRE", platform, rs.getString(1), null, "Regular", metricType); + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), null)); + reportItems.add(reportItem); + } + break; + } + } else { + st = connection.prepareStatement("SELECT rc.type, sum(us.downloads) as downloads, sum(us.views) as views FROM " + usagestatsImpalaDB + ".usage_stats us, " + + statsDB + ".result_classifications rc WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND rc.type=? AND rc.id=us.result_id GROUP BY rc.type order by rc.type ASC;"); + + st.setString(1, beginDateStr); + st.setString(2, endDateStr); + st.setString(3, repositoryIdentifier); + st.setString(4, dataType); + + rs = st.executeQuery(); + COUNTER_Item_Usage reportItem = null; + + switch (metricType) { + case (""): + while (rs.next()) { + reportItem = new COUNTER_Item_Usage(null, "OpenAIRE", platform, rs.getString(1), null, "Regular", metricType); + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), rs.getString(3))); + reportItems.add(reportItem); + } + break; + case ("Total_Items_Investigations"): + while (rs.next()) { + reportItem = new COUNTER_Item_Usage(null, "OpenAIRE", platform, rs.getString(1), null, "Regular", metricType); + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), null, rs.getString(3))); + reportItems.add(reportItem); + } + break; + case ("Total_Items_Requests"): + while (rs.next()) { + reportItem = new COUNTER_Item_Usage(null, "OpenAIRE", platform, rs.getString(1), null, "Regular", metricType); + reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), null)); + reportItems.add(reportItem); + } + break; + } + } + + } +// else if (granularity.equalsIgnoreCase("monthly")) { +// if (dataType.equals("")) { +// st = connection.prepareStatement("SELECT rc.type, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views FROM " + usagestatsImpalaDB + ".usage_stats us, " +// + statsDB + ".result_classifications rc WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND rc.id=us.result_id GROUP BY rc.type, us.`date` order by rc.type, us.`date` ASC;"); +// +// st.setString(1, beginDateStr); +// st.setString(2, endDateStr); +// st.setString(3, repositoryIdentifier); +// +// rs = st.executeQuery(); +// String result = ""; +// String lastDate = ""; +// COUNTER_Platform_Usage reportItem = null; +// +// int ft_total = 0; +// int abstr = 0; +// +// Calendar endCal = Calendar.getInstance(); +// endCal.setTime(postgresFormat.parse(endDateStr)); +// endCal.add(Calendar.MONTH, 1); +// Date endDateForZeros = endCal.getTime(); +// +// lastDate = beginDateStr; +// String datatype = ""; +// while (rs.next()) { +// Calendar endC = Calendar.getInstance(); +// endC.setTime(postgresFormat.parse(rs.getString(2))); +// endC.set(Calendar.DATE, endC.getActualMaximum(Calendar.DATE)); +// //iterate on data types +// if (!datatype.equals(rs.getString(1))) { +// if (reportItem != null) { +// reportItems.add(reportItem); +// } +// reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); +// datatype = rs.getString(1); +// } +// if (reportItem != null) { +// switch (metricType) { +// case (""): +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), rs.getString(3), rs.getString(4))); +// break; +// +// case ("Total_Items_Investigations"): +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), null, rs.getString(4))); +// break; +// +// case ("Total_Items_Requests"): +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), rs.getString(3), null)); +// break; +// +// } +// +// } +// endC.setTime(postgresFormat.parse(rs.getString(2))); +// endC.add(Calendar.MONTH, 1); +// lastDate = postgresFormat.format(endC.getTime()); +// //if (reportItem != null) { +// //fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); +// } +// //add last report item +// reportItems.add(reportItem); +// } else { +// st = connection.prepareStatement("SELECT rc.type, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views FROM " + usagestatsImpalaDB + ".usage_stats us, " +// + statsDB + ".result_classifications rc WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND rc.type=? AND rc.id=us.result_id GROUP BY rc.type, us.`date` order by rc.type, us.`date` ASC;"); +// +// st.setString(1, beginDateStr); +// st.setString(2, endDateStr); +// st.setString(3, repositoryIdentifier); +// st.setString(4, dataType); +// +// rs = st.executeQuery(); +// String result = ""; +// String lastDate = ""; +// COUNTER_Platform_Usage reportItem = null; +// +// int ft_total = 0; +// int abstr = 0; +// +// Calendar endCal = Calendar.getInstance(); +// endCal.setTime(postgresFormat.parse(endDateStr)); +// endCal.add(Calendar.MONTH, 1); +// Date endDateForZeros = endCal.getTime(); +// +// lastDate = beginDateStr; +// String datatype = ""; +// while (rs.next()) { +// Calendar endC = Calendar.getInstance(); +// endC.setTime(postgresFormat.parse(rs.getString(2))); +// endC.set(Calendar.DATE, endC.getActualMaximum(Calendar.DATE)); +// //iterate on data types +// if (!datatype.equals(rs.getString(1))) { +// if (reportItem != null) { +// reportItems.add(reportItem); +// } +// reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); +// datatype = rs.getString(1); +// } +// if (reportItem != null) { +// switch (metricType) { +// case (""): +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), rs.getString(3), rs.getString(4))); +// break; +// +// case ("Total_Items_Investigations"): +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), null, rs.getString(4))); +// break; +// +// case ("Total_Items_Requests"): +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), rs.getString(3), null)); +// break; +// +// } +// +// } +// endC.setTime(postgresFormat.parse(rs.getString(2))); +// endC.add(Calendar.MONTH, 1); +// lastDate = postgresFormat.format(endC.getTime()); +// //if (reportItem != null) { +// //fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); +// } +// //add last report item +// reportItems.add(reportItem); +// } +// +// } + + /* + jedis.put(redis_key, "persistent", "false"); + jedis.put(redis_key, "query", st.toString()); + jedis.put(redis_key, "result", toJson(reportItems)); + jedis.put(redis_key, "fetchMode", "3"); + */ + } catch (Exception e) { + log.error("Batch Item Report failed: ", e); + } finally { + DbUtils.closeQuietly(rs); + DbUtils.closeQuietly(st); + DbUtils.closeQuietly(connection); + } +// } else { +// try { +// connection = usageStatsDB.getConnection(); +// +// if (granularity.equalsIgnoreCase("totals")) { +// if (dataType.equals("")) { +// st = connection.prepareStatement("SELECT rc.type, sum(us.downloads) as downloads, sum(us.views) as views FROM " + usagestatsImpalaDB + ".usage_stats us, " +// + statsDB + ".result_classifications rc WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND rc.id=us.result_id GROUP BY rc.type order by rc.type ASC;"); +// +// st.setString(1, beginDateStr); +// st.setString(2, endDateStr); +// st.setString(3, repositoryIdentifier); +// +// rs = st.executeQuery(); +// COUNTER_Platform_Usage reportItem = null; +// +// switch (metricType) { +// case (""): +// while (rs.next()) { +// reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), rs.getString(3))); +// reportItems.add(reportItem); +// } +// break; +// case ("Total_Items_Investigations"): +// while (rs.next()) { +// reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), null, rs.getString(3))); +// reportItems.add(reportItem); +// } +// break; +// case ("Total_Items_Requests"): +// while (rs.next()) { +// reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), null)); +// reportItems.add(reportItem); +// } +// break; +// } +// } else { +// st = connection.prepareStatement("SELECT rc.type, sum(us.downloads) as downloads, sum(us.views) as views FROM " + usagestatsImpalaDB + ".usage_stats us, " +// + statsDB + ".result_classifications rc WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND rc.type=? AND rc.id=us.result_id GROUP BY rc.type order by rc.type ASC;"); +// +// st.setString(1, beginDateStr); +// st.setString(2, endDateStr); +// st.setString(3, repositoryIdentifier); +// st.setString(4, dataType); +// +// rs = st.executeQuery(); +// COUNTER_Platform_Usage reportItem = null; +// +// switch (metricType) { +// case (""): +// while (rs.next()) { +// reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), rs.getString(3))); +// reportItems.add(reportItem); +// } +// break; +// case ("Total_Items_Investigations"): +// while (rs.next()) { +// reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), null, rs.getString(3))); +// reportItems.add(reportItem); +// } +// break; +// case ("Total_Items_Requests"): +// while (rs.next()) { +// reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(beginDate), report_dateFormat.format(endDate), rs.getString(2), null)); +// reportItems.add(reportItem); +// } +// break; +// } +// } +// +// } else if (granularity.equalsIgnoreCase("monthly")) { +// if (dataType.equals("")) { +// st = connection.prepareStatement("SELECT rc.type, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views FROM " + usagestatsImpalaDB + ".usage_stats us, " +// + statsDB + ".result_classifications rc WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND rc.id=us.result_id GROUP BY rc.type, us.`date` order by rc.type, us.`date` ASC;"); +// +// st.setString(1, beginDateStr); +// st.setString(2, endDateStr); +// st.setString(3, repositoryIdentifier); +// +// rs = st.executeQuery(); +// String result = ""; +// String lastDate = ""; +// COUNTER_Platform_Usage reportItem = null; +// +// int ft_total = 0; +// int abstr = 0; +// +// Calendar endCal = Calendar.getInstance(); +// endCal.setTime(postgresFormat.parse(endDateStr)); +// endCal.add(Calendar.MONTH, 1); +// Date endDateForZeros = endCal.getTime(); +// +// lastDate = beginDateStr; +// String datatype = ""; +// while (rs.next()) { +// Calendar endC = Calendar.getInstance(); +// endC.setTime(postgresFormat.parse(rs.getString(2))); +// endC.set(Calendar.DATE, endC.getActualMaximum(Calendar.DATE)); +// //iterate on data types +// if (!datatype.equals(rs.getString(1))) { +// if (reportItem != null) { +// reportItems.add(reportItem); +// } +// reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); +// datatype = rs.getString(1); +// } +// if (reportItem != null) { +// switch (metricType) { +// case (""): +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), rs.getString(3), rs.getString(4))); +// break; +// +// case ("Total_Items_Investigations"): +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), null, rs.getString(4))); +// break; +// +// case ("Total_Items_Requests"): +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), rs.getString(3), null)); +// break; +// +// } +// +// } +// endC.setTime(postgresFormat.parse(rs.getString(2))); +// endC.add(Calendar.MONTH, 1); +// lastDate = postgresFormat.format(endC.getTime()); +// //if (reportItem != null) { +// //fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); +// } +// //add last report item +// reportItems.add(reportItem); +// } else { +// st = connection.prepareStatement("SELECT rc.type, us.`date`, sum(us.downloads) as downloads, sum(us.views) as views FROM " + usagestatsImpalaDB + ".usage_stats us, " +// + statsDB + ".result_classifications rc WHERE us.`date`>=? AND us.`date`<=? AND us.repository_id=? AND rc.type=? AND rc.id=us.result_id GROUP BY rc.type, us.`date` order by rc.type, us.`date` ASC;"); +// +// st.setString(1, beginDateStr); +// st.setString(2, endDateStr); +// st.setString(3, repositoryIdentifier); +// st.setString(4, dataType); +// +// rs = st.executeQuery(); +// String result = ""; +// String lastDate = ""; +// COUNTER_Platform_Usage reportItem = null; +// +// int ft_total = 0; +// int abstr = 0; +// +// Calendar endCal = Calendar.getInstance(); +// endCal.setTime(postgresFormat.parse(endDateStr)); +// endCal.add(Calendar.MONTH, 1); +// Date endDateForZeros = endCal.getTime(); +// +// lastDate = beginDateStr; +// String datatype = ""; +// while (rs.next()) { +// Calendar endC = Calendar.getInstance(); +// endC.setTime(postgresFormat.parse(rs.getString(2))); +// endC.set(Calendar.DATE, endC.getActualMaximum(Calendar.DATE)); +// //iterate on data types +// if (!datatype.equals(rs.getString(1))) { +// if (reportItem != null) { +// reportItems.add(reportItem); +// } +// reportItem = new COUNTER_Platform_Usage("", "OpenAIRE", rs.getString(1), "Regular", ""); +// datatype = rs.getString(1); +// } +// if (reportItem != null) { +// switch (metricType) { +// case (""): +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), rs.getString(3), rs.getString(4))); +// break; +// +// case ("Total_Items_Investigations"): +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), null, rs.getString(4))); +// break; +// +// case ("Total_Items_Requests"): +// reportItem.addPerformance(new COUNTER_Item_Performance(report_dateFormat.format(postgresFormat.parse(rs.getString(2))), report_dateFormat.format(endC.getTime()), rs.getString(3), null)); +// break; +// +// } +// +// } +// endC.setTime(postgresFormat.parse(rs.getString(2))); +// endC.add(Calendar.MONTH, 1); +// lastDate = postgresFormat.format(endC.getTime()); +// //if (reportItem != null) { +// //fillWithZeros(postgresFormat.parse(lastDate), endDateForZeros, reportItem); +// } +// //add last report item +// reportItems.add(reportItem); +// } + + //} + + /* + jedis.put(redis_key, "persistent", "false"); + jedis.put(redis_key, "query", st.toString()); + jedis.put(redis_key, "result", toJson(reportItems)); + jedis.put(redis_key, "fetchMode", "3"); + */ +// } catch (Exception e) { +// log.error("Batch Item Report failed: ", e); +// } +// + } + } + //} + //} + private void fillWithZeros(Date from, Date to, COUNTER_Platform_Usage reportItem) { SimpleDateFormat report_dateFormat = new SimpleDateFormat("yyyy-MM-dd"); diff --git a/src/main/java/eu/dnetlib/usagestats/services/SushiLiteService.java b/src/main/java/eu/dnetlib/usagestats/services/SushiLiteService.java index b18819b..f8bdb4c 100755 --- a/src/main/java/eu/dnetlib/usagestats/services/SushiLiteService.java +++ b/src/main/java/eu/dnetlib/usagestats/services/SushiLiteService.java @@ -1,19 +1,21 @@ package eu.dnetlib.usagestats.services; +import eu.dnetlib.usagestats.sushilite.domain.COUNTER_Item_Report; import eu.dnetlib.usagestats.sushilite.domain.COUNTER_Platform_Report; +import eu.dnetlib.usagestats.sushilite.domain.COUNTER_Title_Report; import eu.dnetlib.usagestats.sushilite.domain.ReportResponseWrapper; import eu.dnetlib.usagestats.sushilite.domain.ReportStatus; import java.util.ArrayList; public interface SushiLiteService { - ReportResponseWrapper buildReport(String reportName, String release, String requestorId, String beginDate, - String endDate, String repositoryIdentifier, String itemIdentifier, - String itemDataType, String hasDoi, String granularity, String callback); - - String displayReport(String reportName, String release, String requestorId, String beginDate, - String endDate, String repositoryIdentifier, String itemIdentifier, - String itemDataType, String hasDoi, String granularity, String callback, String pretty); +// ReportResponseWrapper buildReport(String reportName, String release, String requestorId, String beginDate, +// String endDate, String repositoryIdentifier, String itemIdentifier, +// String itemDataType, String hasDoi, String granularity, String callback); +// +// String displayReport(String reportName, String release, String requestorId, String beginDate, +// String endDate, String repositoryIdentifier, String itemIdentifier, +// String itemDataType, String hasDoi, String granularity, String callback, String pretty); ReportStatus buildReportStatus(); String displayReportStatus(); @@ -21,13 +23,13 @@ public interface SushiLiteService { ArrayList buildReportSupported(); String displayReportsSupported(); - COUNTER_Platform_Report buildReportPR(String repositoryIdentifier, String beginDate,String endDate, String metricType, String dataType,String granularity); - String displayReportPR(String repositoryIdentifier, String beginDate,String endDate, String metricType, String dataType,String granularity); + COUNTER_Platform_Report buildReportPR(String customerID, String repositoryIdentifier, String beginDate,String endDate, String metricType, String dataType,String granularity); + String displayReportPR(String customerID, String repositoryIdentifier, String beginDate,String endDate, String metricType, String dataType,String granularity); - COUNTER_Platform_Report buildReportPR_P1(String repositoryIdentifier, String beginDate,String endDate); - String displayReportPR_P1(String repositoryIdentifier, String beginDate, String endDate); + COUNTER_Platform_Report buildReportPR_P1(String customerID, String repositoryIdentifier, String beginDate,String endDate); + String displayReportPR_P1(String customerID, String repositoryIdentifier, String beginDate, String endDate); - COUNTER_Platform_Report buildReportTR(String repositoryIdentifier, String itemIdentifier, String beginDate,String endDate, String metricType, String dataType,String granularity); - String displayReportTR(String repositoryIdentifier, String itemIdentifier, String beginDate,String endDate, String metricType, String dataType,String granularity); + COUNTER_Item_Report buildReportIR(String customerID, String repositoryIdentifier, String itemIdentifier, String beginDate,String endDate, String metricType, String dataType,String granularity); + String displayReportIR(String customerID, String repositoryIdentifier, String itemIdentifier, String beginDate,String endDate, String metricType, String dataType,String granularity); } diff --git a/src/main/java/eu/dnetlib/usagestats/services/SushiLiteServiceImpl.java b/src/main/java/eu/dnetlib/usagestats/services/SushiLiteServiceImpl.java index 22b909d..7f76102 100755 --- a/src/main/java/eu/dnetlib/usagestats/services/SushiLiteServiceImpl.java +++ b/src/main/java/eu/dnetlib/usagestats/services/SushiLiteServiceImpl.java @@ -4,11 +4,14 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import eu.dnetlib.usagestats.repositories.UsageStatsRepository; import eu.dnetlib.usagestats.sushilite.domain.Alert; +import eu.dnetlib.usagestats.sushilite.domain.COUNTER_Item_Report; +import eu.dnetlib.usagestats.sushilite.domain.COUNTER_Item_Usage; import eu.dnetlib.usagestats.sushilite.domain.Filter; import eu.dnetlib.usagestats.sushilite.domain.SUSHI_Org_Identifiers; import eu.dnetlib.usagestats.sushilite.domain.COUNTER_Platform_Usage; import eu.dnetlib.usagestats.sushilite.domain.SUSHI_Error_Model; import eu.dnetlib.usagestats.sushilite.domain.COUNTER_Platform_Report; +import eu.dnetlib.usagestats.sushilite.domain.COUNTER_Title_Report; import eu.dnetlib.usagestats.sushilite.domain.ReportResponse; import eu.dnetlib.usagestats.sushilite.domain.ReportResponseWrapper; import eu.dnetlib.usagestats.sushilite.domain.ReportStatus; @@ -36,204 +39,202 @@ public class SushiLiteServiceImpl implements SushiLiteService { this.usageStatsRepository = usageStatsRepository; } - @Override - public ReportResponseWrapper buildReport(String reportName, String release, - String requestorId, String beginDate, - String endDate, String repositoryIdentifier, String itemIdentifier, - String itemDataType, String hasDoi, String granularity, - String callback) { - - List reportItems = new ArrayList<>(); - List reportExceptions = new ArrayList<>(); - - if (!granularity.equalsIgnoreCase("totals") && !granularity.equalsIgnoreCase("monthly")) { - reportExceptions.add(new SUSHI_Error_Model("3062", "Warning", "Invalid ReportAttribute Value", "usagecounts.openaire.eu", "Granularity: \'" + granularity + "\' unknown. Defaulting to Monthly")); - granularity = "Monthly"; - } - - Date beginDateParsed; - if (!beginDate.equals("")) { - beginDateParsed = tryParse(beginDate); - if (beginDateParsed != null && (granularity.toLowerCase().equals("monthly") || beginDate.length() == 7)) { - Calendar temp = Calendar.getInstance(); - temp.setTime(beginDateParsed); - temp.set(Calendar.DAY_OF_MONTH, temp.getActualMinimum(Calendar.DAY_OF_MONTH)); - beginDateParsed = temp.getTime(); - } - } else { - Calendar temp = Calendar.getInstance(); - temp.add(Calendar.MONTH, -1); - temp.set(Calendar.DAY_OF_MONTH, temp.getActualMinimum(Calendar.DAY_OF_MONTH)); - beginDateParsed = temp.getTime(); - reportExceptions.add(new SUSHI_Error_Model("3021", "Warning", "Unspecified Date Arguments", "usagecounts.openaire.eu","Begin Date set to default: " + new SimpleDateFormat("yyyy-MM-dd").format(beginDateParsed))); - } - - Date endDateParsed; - if (!endDate.equals("")) { - endDateParsed = tryParse(endDate); - if (endDateParsed != null && (granularity.toLowerCase().equals("monthly") || endDate.length() == 7)) { - Calendar temp = Calendar.getInstance(); - temp.setTime(endDateParsed); - temp.set(Calendar.DAY_OF_MONTH, temp.getActualMaximum(Calendar.DAY_OF_MONTH)); - endDateParsed = temp.getTime(); - } - } else { - Calendar temp = Calendar.getInstance(); - temp.add(Calendar.MONTH, -1); - temp.set(Calendar.DAY_OF_MONTH, temp.getActualMaximum(Calendar.DAY_OF_MONTH)); - endDateParsed = temp.getTime(); - reportExceptions.add(new SUSHI_Error_Model("3021", "Warning", "Unspecified Date Arguments", "usagecounts.openaire.eu", "End Date set to default: " + new SimpleDateFormat("yyyy-MM-dd").format(endDateParsed))); - } - //log.error("dates: " + beginDateParsed.toString() + " - " + endDateParsed.toString()); - - if (beginDateParsed == null) { - reportExceptions.add(new SUSHI_Error_Model("3020", "Error", "Invalid Date Arguments", "usagecounts.openaire.eu", "Begin Date: " + beginDate + " is not a valid date")); - } - if (endDateParsed == null) { - reportExceptions.add(new SUSHI_Error_Model("3020", "Error", "Invalid Date Arguments", "usagecounts.openaire.eu", "End Date: " + endDate + " is not a valid date")); - } - if (beginDateParsed != null && endDateParsed != null && !beginDateParsed.before(endDateParsed)) { - reportExceptions.add(new SUSHI_Error_Model("3020", "Error", "Invalid Date Arguments", "usagecounts.openaire.eu", "BeginDate \'" + new SimpleDateFormat("yyyy-MM-dd").format(beginDateParsed) + "\' is greater than EndDate \'" + new SimpleDateFormat("yyyy-MM-dd").format(endDateParsed) + "\'")); - } - - String repoid = ""; - if (!repositoryIdentifier.equals("")) { - repoid = usageStatsRepository.executeRepoId(repositoryIdentifier, reportName.toLowerCase()); - if (repoid.equals("-1")) { - reportExceptions.add(new SUSHI_Error_Model("3060", "Error", "Invalid Filter Value", "usagecounts.openaire.eu", "RepositoryIdentifier: " + repositoryIdentifier + " is not valid")); - } - } - String itemid = ""; - if (!itemIdentifier.equals("")) { - String[] split = itemIdentifier.split(":"); - switch (split[0].toLowerCase()) { - case "oid": - itemid = itemIdentifier; - break; - case "doi": - itemid = itemIdentifier; - break; - case "openaire": - itemid = itemIdentifier; - break; - default: - reportExceptions.add(new SUSHI_Error_Model("3060", "Error", "Invalid Filter Value", "usagecounts.openaire.eu", "ItemIdentifier: " + itemIdentifier + " is not valid")); - itemid = "-1"; - } - } - if (itemid.equals("") && repoid.equals("") && !reportName.equalsIgnoreCase("rr1") && !reportName.equalsIgnoreCase("jr1")) { - reportExceptions.add(new SUSHI_Error_Model("3070", "Error", "Required Filter Missing", "usagecounts.openaire.eu", "ItemIdentifier or RepositoryIdentifier must be supplied")); - } - if (reportName.equalsIgnoreCase("ar1")) { - if (!itemid.equals("-1") && !repoid.equals("-1") && beginDateParsed != null && endDateParsed != null && beginDateParsed.before(endDateParsed)) { - if (!itemid.equals("")) { - if (itemDataType.equalsIgnoreCase("") || itemDataType.equalsIgnoreCase("article")) { - usageStatsRepository.executeItem(reportItems, itemIdentifier, repoid, "Article", beginDateParsed, endDateParsed, granularity); - if (reportItems.isEmpty()) { - reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); - } - } else { - reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); - } - } else if (!repoid.equals("")) { - usageStatsRepository.executeBatchItems(reportItems, repoid, "Article", beginDateParsed, endDateParsed, granularity); - if (reportItems.isEmpty()) { - reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); - } - } - } - } else if (reportName.equalsIgnoreCase("br1")) { - if (!itemid.equals("-1") && !repoid.equals("-1") && beginDateParsed != null && endDateParsed != null && beginDateParsed.before(endDateParsed)) { - if (!itemid.equals("")) { - if (itemDataType.equalsIgnoreCase("") || itemDataType.equalsIgnoreCase("book")) { - usageStatsRepository.executeItem(reportItems, itemIdentifier, repoid, "Book", beginDateParsed, endDateParsed, granularity); - if (reportItems.isEmpty()) { - reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); - } - } else { - reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); - } - } else if (!repoid.equals("")) { - usageStatsRepository.executeBatchItems(reportItems, repoid, "Book", beginDateParsed, endDateParsed, granularity); - if (reportItems.isEmpty()) { - reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); - } - } - } - } else if (reportName.equalsIgnoreCase("br2")) { - if (!itemid.equals("-1") && !repoid.equals("-1") && beginDateParsed != null && endDateParsed != null && beginDateParsed.before(endDateParsed)) { - if (!itemid.equals("")) { - if (itemDataType.equalsIgnoreCase("") || itemDataType.equalsIgnoreCase("part of book or chapter of book")) { - usageStatsRepository.executeItem(reportItems, itemIdentifier, repoid, "Part of book or chapter of book", beginDateParsed, endDateParsed, granularity); - if (reportItems.isEmpty()) { - reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); - } - } else { - reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); - } - } else if (!repoid.equals("")) { - usageStatsRepository.executeBatchItems(reportItems, repoid, "Part of book or chapter of book", beginDateParsed, endDateParsed, granularity); - if (reportItems.isEmpty()) { - reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); - } - } - } - } else if (reportName.equalsIgnoreCase("ir1")) { - if (!itemid.equals("-1") && !repoid.equals("-1") && beginDateParsed != null && endDateParsed != null && beginDateParsed.before(endDateParsed)) { - if (!itemid.equals("")) { - usageStatsRepository.executeItem(reportItems, itemIdentifier, repoid, itemDataType, beginDateParsed, endDateParsed, granularity); - } else if (!repoid.equals("")) { - usageStatsRepository.executeBatchItems(reportItems, repoid, itemDataType, beginDateParsed, endDateParsed, granularity); - } - if (reportItems.isEmpty()) { - reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); - } - } - } else if (reportName.equalsIgnoreCase("rr1")) { - if (!repoid.equals("-1") && beginDateParsed != null && endDateParsed != null && beginDateParsed.before(endDateParsed)) { - usageStatsRepository.executeRepo(reportItems, repoid, itemDataType, beginDateParsed, endDateParsed, granularity); - } - if (reportItems.isEmpty()) { - reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); - } - } else if (reportName.equalsIgnoreCase("jr1")) { - if (!repoid.equals("-1") && beginDateParsed != null && endDateParsed != null && beginDateParsed.before(endDateParsed)) { - usageStatsRepository.executeJournal(reportItems, repoid, itemDataType, beginDateParsed, endDateParsed, granularity); - } - if (reportItems.isEmpty()) { - reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); - } - } else if (reportName.equals("")) { - reportExceptions.add(new SUSHI_Error_Model("3050", "Error", "usagecounts.openaire.eu", "Report argument is missing", "You must supply a Report argument")); - } else { - reportExceptions.add(new SUSHI_Error_Model("3000", "Error", "usagecounts.openaire.eu", "Report " + reportName + " not supported", "Supported reports: AR1, IR1, RR1, BR1, BR2")); - } - - ReportResponse reportResponse = new ReportResponse(reportName, release, requestorId, beginDate, endDate, - repositoryIdentifier, itemIdentifier, itemDataType, hasDoi, granularity, callback, reportItems, reportExceptions); - - return new ReportResponseWrapper(reportResponse); - } - - @Override - public String displayReport(String reportName, String release, - String requestorId, String beginDate, String endDate, - String repositoryIdentifier, String itemIdentifier, - String itemDataType, String hasDoi, String granularity, - String callback, String pretty) { - ObjectMapper objectMapper = new ObjectMapper(); - try { - if (pretty.equalsIgnoreCase("pretty")) { - return "
" + objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(buildReport(reportName, release, requestorId, beginDate, endDate, repositoryIdentifier, itemIdentifier, itemDataType, hasDoi, granularity, callback)).replaceAll("/", "\\\\/") + "
"; - } - return objectMapper.writeValueAsString(buildReport(reportName, release, requestorId, beginDate, endDate, repositoryIdentifier, itemIdentifier, itemDataType, hasDoi, granularity, callback)).replaceAll("/", "\\\\/"); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - //return report.getReport(reportP, release, requestorId, beginDate, endDate, repositoryIdentifier, itemIdentifier, itemDataType, hasDoi, granularity, callback, pretty); - } - +// @Override +// public ReportResponseWrapper buildReport(String reportName, String release, +// String requestorId, String beginDate, +// String endDate, String repositoryIdentifier, String itemIdentifier, +// String itemDataType, String hasDoi, String granularity, +// String callback) { +// +// List reportItems = new ArrayList<>(); +// List reportExceptions = new ArrayList<>(); +// +// if (!granularity.equalsIgnoreCase("totals") && !granularity.equalsIgnoreCase("monthly")) { +// reportExceptions.add(new SUSHI_Error_Model("3062", "Warning", "Invalid ReportAttribute Value", "usagecounts.openaire.eu", "Granularity: \'" + granularity + "\' unknown. Defaulting to Monthly")); +// granularity = "Monthly"; +// } +// +// Date beginDateParsed; +// if (!beginDate.equals("")) { +// beginDateParsed = tryParse(beginDate); +// if (beginDateParsed != null && (granularity.toLowerCase().equals("monthly") || beginDate.length() == 7)) { +// Calendar temp = Calendar.getInstance(); +// temp.setTime(beginDateParsed); +// temp.set(Calendar.DAY_OF_MONTH, temp.getActualMinimum(Calendar.DAY_OF_MONTH)); +// beginDateParsed = temp.getTime(); +// } +// } else { +// Calendar temp = Calendar.getInstance(); +// temp.add(Calendar.MONTH, -1); +// temp.set(Calendar.DAY_OF_MONTH, temp.getActualMinimum(Calendar.DAY_OF_MONTH)); +// beginDateParsed = temp.getTime(); +// reportExceptions.add(new SUSHI_Error_Model("3021", "Warning", "Unspecified Date Arguments", "usagecounts.openaire.eu", "Begin Date set to default: " + new SimpleDateFormat("yyyy-MM-dd").format(beginDateParsed))); +// } +// +// Date endDateParsed; +// if (!endDate.equals("")) { +// endDateParsed = tryParse(endDate); +// if (endDateParsed != null && (granularity.toLowerCase().equals("monthly") || endDate.length() == 7)) { +// Calendar temp = Calendar.getInstance(); +// temp.setTime(endDateParsed); +// temp.set(Calendar.DAY_OF_MONTH, temp.getActualMaximum(Calendar.DAY_OF_MONTH)); +// endDateParsed = temp.getTime(); +// } +// } else { +// Calendar temp = Calendar.getInstance(); +// temp.add(Calendar.MONTH, -1); +// temp.set(Calendar.DAY_OF_MONTH, temp.getActualMaximum(Calendar.DAY_OF_MONTH)); +// endDateParsed = temp.getTime(); +// reportExceptions.add(new SUSHI_Error_Model("3021", "Warning", "Unspecified Date Arguments", "usagecounts.openaire.eu", "End Date set to default: " + new SimpleDateFormat("yyyy-MM-dd").format(endDateParsed))); +// } +// //log.error("dates: " + beginDateParsed.toString() + " - " + endDateParsed.toString()); +// +// if (beginDateParsed == null) { +// reportExceptions.add(new SUSHI_Error_Model("3020", "Error", "Invalid Date Arguments", "usagecounts.openaire.eu", "Begin Date: " + beginDate + " is not a valid date")); +// } +// if (endDateParsed == null) { +// reportExceptions.add(new SUSHI_Error_Model("3020", "Error", "Invalid Date Arguments", "usagecounts.openaire.eu", "End Date: " + endDate + " is not a valid date")); +// } +// if (beginDateParsed != null && endDateParsed != null && !beginDateParsed.before(endDateParsed)) { +// reportExceptions.add(new SUSHI_Error_Model("3020", "Error", "Invalid Date Arguments", "usagecounts.openaire.eu", "BeginDate \'" + new SimpleDateFormat("yyyy-MM-dd").format(beginDateParsed) + "\' is greater than EndDate \'" + new SimpleDateFormat("yyyy-MM-dd").format(endDateParsed) + "\'")); +// } +// +// String repoid = ""; +// if (!repositoryIdentifier.equals("")) { +// repoid = usageStatsRepository.executeRepoId(repositoryIdentifier, reportName.toLowerCase()); +// if (repoid.equals("-1")) { +// reportExceptions.add(new SUSHI_Error_Model("3060", "Error", "Invalid Filter Value", "usagecounts.openaire.eu", "RepositoryIdentifier: " + repositoryIdentifier + " is not valid")); +// } +// } +// String itemid = ""; +// if (!itemIdentifier.equals("")) { +// String[] split = itemIdentifier.split(":"); +// switch (split[0].toLowerCase()) { +// case "oid": +// itemid = itemIdentifier; +// break; +// case "doi": +// itemid = itemIdentifier; +// break; +// case "openaire": +// itemid = itemIdentifier; +// break; +// default: +// reportExceptions.add(new SUSHI_Error_Model("3060", "Error", "Invalid Filter Value", "usagecounts.openaire.eu", "ItemIdentifier: " + itemIdentifier + " is not valid")); +// itemid = "-1"; +// } +// } +// if (itemid.equals("") && repoid.equals("") && !reportName.equalsIgnoreCase("rr1") && !reportName.equalsIgnoreCase("jr1")) { +// reportExceptions.add(new SUSHI_Error_Model("3070", "Error", "Required Filter Missing", "usagecounts.openaire.eu", "ItemIdentifier or RepositoryIdentifier must be supplied")); +// } +// if (reportName.equalsIgnoreCase("ar1")) { +// if (!itemid.equals("-1") && !repoid.equals("-1") && beginDateParsed != null && endDateParsed != null && beginDateParsed.before(endDateParsed)) { +// if (!itemid.equals("")) { +// if (itemDataType.equalsIgnoreCase("") || itemDataType.equalsIgnoreCase("article")) { +// usageStatsRepository.executeItem(reportItems, itemIdentifier, repoid, "Article", beginDateParsed, endDateParsed, granularity); +// if (reportItems.isEmpty()) { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// } else { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// } else if (!repoid.equals("")) { +// usageStatsRepository.executeBatchItems(reportItems, repoid, "Article", beginDateParsed, endDateParsed, granularity); +// if (reportItems.isEmpty()) { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// } +// } +// } else if (reportName.equalsIgnoreCase("br1")) { +// if (!itemid.equals("-1") && !repoid.equals("-1") && beginDateParsed != null && endDateParsed != null && beginDateParsed.before(endDateParsed)) { +// if (!itemid.equals("")) { +// if (itemDataType.equalsIgnoreCase("") || itemDataType.equalsIgnoreCase("book")) { +// usageStatsRepository.executeItem(reportItems, itemIdentifier, repoid, "Book", beginDateParsed, endDateParsed, granularity); +// if (reportItems.isEmpty()) { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// } else { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// } else if (!repoid.equals("")) { +// usageStatsRepository.executeBatchItems(reportItems, repoid, "Book", beginDateParsed, endDateParsed, granularity); +// if (reportItems.isEmpty()) { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// } +// } +// } else if (reportName.equalsIgnoreCase("br2")) { +// if (!itemid.equals("-1") && !repoid.equals("-1") && beginDateParsed != null && endDateParsed != null && beginDateParsed.before(endDateParsed)) { +// if (!itemid.equals("")) { +// if (itemDataType.equalsIgnoreCase("") || itemDataType.equalsIgnoreCase("part of book or chapter of book")) { +// usageStatsRepository.executeItem(reportItems, itemIdentifier, repoid, "Part of book or chapter of book", beginDateParsed, endDateParsed, granularity); +// if (reportItems.isEmpty()) { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// } else { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// } else if (!repoid.equals("")) { +// usageStatsRepository.executeBatchItems(reportItems, repoid, "Part of book or chapter of book", beginDateParsed, endDateParsed, granularity); +// if (reportItems.isEmpty()) { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// } +// } +// } else if (reportName.equalsIgnoreCase("ir1")) { +// if (!itemid.equals("-1") && !repoid.equals("-1") && beginDateParsed != null && endDateParsed != null && beginDateParsed.before(endDateParsed)) { +// if (!itemid.equals("")) { +// usageStatsRepository.executeItem(reportItems, itemIdentifier, repoid, itemDataType, beginDateParsed, endDateParsed, granularity); +// } else if (!repoid.equals("")) { +// usageStatsRepository.executeBatchItems(reportItems, repoid, itemDataType, beginDateParsed, endDateParsed, granularity); +// } +// if (reportItems.isEmpty()) { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// } +// } else if (reportName.equalsIgnoreCase("rr1")) { +// if (!repoid.equals("-1") && beginDateParsed != null && endDateParsed != null && beginDateParsed.before(endDateParsed)) { +// usageStatsRepository.executeRepo(reportItems, repoid, itemDataType, beginDateParsed, endDateParsed, granularity); +// } +// if (reportItems.isEmpty()) { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// } else if (reportName.equalsIgnoreCase("jr1")) { +// if (!repoid.equals("-1") && beginDateParsed != null && endDateParsed != null && beginDateParsed.before(endDateParsed)) { +// usageStatsRepository.executeJournal(reportItems, repoid, itemDataType, beginDateParsed, endDateParsed, granularity); +// } +// if (reportItems.isEmpty()) { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// } else if (reportName.equals("")) { +// reportExceptions.add(new SUSHI_Error_Model("3050", "Error", "usagecounts.openaire.eu", "Report argument is missing", "You must supply a Report argument")); +// } else { +// reportExceptions.add(new SUSHI_Error_Model("3000", "Error", "usagecounts.openaire.eu", "Report " + reportName + " not supported", "Supported reports: AR1, IR1, RR1, BR1, BR2")); +// } +// +// ReportResponse reportResponse = new ReportResponse(reportName, release, requestorId, beginDate, endDate, +// repositoryIdentifier, itemIdentifier, itemDataType, hasDoi, granularity, callback, reportItems, reportExceptions); +// +// return new ReportResponseWrapper(reportResponse); +// } +// @Override +// public String displayReport(String reportName, String release, +// String requestorId, String beginDate, String endDate, +// String repositoryIdentifier, String itemIdentifier, +// String itemDataType, String hasDoi, String granularity, +// String callback, String pretty) { +// ObjectMapper objectMapper = new ObjectMapper(); +// try { +// if (pretty.equalsIgnoreCase("pretty")) { +// return "
" + objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(buildReport(reportName, release, requestorId, beginDate, endDate, repositoryIdentifier, itemIdentifier, itemDataType, hasDoi, granularity, callback)).replaceAll("/", "\\\\/") + "
"; +// } +// return objectMapper.writeValueAsString(buildReport(reportName, release, requestorId, beginDate, endDate, repositoryIdentifier, itemIdentifier, itemDataType, hasDoi, granularity, callback)).replaceAll("/", "\\\\/"); +// } catch (Exception e) { +// e.printStackTrace(); +// return null; +// } +// //return report.getReport(reportP, release, requestorId, beginDate, endDate, repositoryIdentifier, itemIdentifier, itemDataType, hasDoi, granularity, callback, pretty); +// } private Date tryParse(String dateString) { try { if (dateString.length() == 7) { @@ -299,7 +300,7 @@ public class SushiLiteServiceImpl implements SushiLiteService { } @Override - public COUNTER_Platform_Report buildReportPR(String repositoryIdentifier, String beginDate, + public COUNTER_Platform_Report buildReportPR(String customerID, String repositoryIdentifier, String beginDate, String endDate, String metricType, String dataType, String granularity) { List reportExceptions = new ArrayList<>(); ZonedDateTime dateTime = ZonedDateTime.now(); // Gets the current date and time, with your default time-zone @@ -358,8 +359,8 @@ public class SushiLiteServiceImpl implements SushiLiteService { reportFilters.add(new Filter("EndDate", endDate)); String reportID = "PR"; String reportName = "Platform Master Report"; - //String insitutionName = "Insititution Name " + repositoryIdentifier; - String insitutionName = usageStatsRepository.getInstitutionName(repositoryIdentifier); + //String institutionName = "Insititution Name " + repositoryIdentifier; + String institutionName = usageStatsRepository.getInstitutionName(repositoryIdentifier); List institutionIdD = new ArrayList(); institutionIdD.add(new SUSHI_Org_Identifiers("Openaire", repositoryIdentifier)); @@ -372,12 +373,12 @@ public class SushiLiteServiceImpl implements SushiLiteService { if (reportExceptions.size() == 0) { reportExceptions = null; } - COUNTER_Platform_Report reportPr = new COUNTER_Platform_Report(dateTime.format(formatter), repositoryIdentifier, reportID, reportName, insitutionName, institutionIdD, reportExceptions, reportFilters, reportItems); + COUNTER_Platform_Report reportPr = new COUNTER_Platform_Report(dateTime.format(formatter), customerID, reportID, reportName, institutionName, institutionIdD, reportExceptions, reportFilters, reportItems); return reportPr; } @Override - public COUNTER_Platform_Report buildReportPR_P1(String repositoryIdentifier, + public COUNTER_Platform_Report buildReportPR_P1(String customerID, String repositoryIdentifier, String beginDate, String endDate) { String granularity = "monthly"; @@ -439,8 +440,8 @@ public class SushiLiteServiceImpl implements SushiLiteService { reportFilters.add(new Filter("EndDate", endDate)); String reportID = "PR"; String reportName = "Platform Master Report"; - //String insitutionName = "Insititution Name " + repositoryIdentifier; - String insitutionName = usageStatsRepository.getInstitutionName(repositoryIdentifier); + //String institutionName = "Insititution Name " + repositoryIdentifier; + String institutionName = usageStatsRepository.getInstitutionName(repositoryIdentifier); List institutionIdD = new ArrayList(); institutionIdD.add(new SUSHI_Org_Identifiers("Openaire", repositoryIdentifier)); @@ -450,23 +451,37 @@ public class SushiLiteServiceImpl implements SushiLiteService { reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); } + if (reportExceptions.size() == 0) { reportExceptions = null; } - COUNTER_Platform_Report reportPr = new COUNTER_Platform_Report(dateTime.format(formatter), repositoryIdentifier, reportID, reportName, insitutionName, institutionIdD, reportExceptions, reportFilters, reportItems); + COUNTER_Platform_Report reportPr = new COUNTER_Platform_Report(dateTime.format(formatter), customerID, reportID, reportName, institutionName, institutionIdD, reportExceptions, reportFilters, reportItems); return reportPr; } @Override - public COUNTER_Platform_Report buildReportTR(String repositoryIdentifier, String itemIdentifier, String beginDate, + public COUNTER_Item_Report buildReportIR(String customerID, String repositoryIdentifier, String itemIdentifier, String beginDate, String endDate, String metricType, String dataType, String granularity) { - List reportExceptions = new ArrayList<>(); + ZonedDateTime dateTime = ZonedDateTime.now(); // Gets the current date and time, with your default time-zone DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'"); - //Display Report Created Day + + List reportItems = new ArrayList<>(); + List reportExceptions = new ArrayList<>(); + List reportFilters = new ArrayList(); + List orgIdentifiers = new ArrayList<>(); + reportFilters.add(new Filter("BeginDate", beginDate)); + reportFilters.add(new Filter("EndDate", endDate)); repositoryIdentifier = usageStatsRepository.getInstitutionID(repositoryIdentifier); + + orgIdentifiers.add(new SUSHI_Org_Identifiers("Openaire", repositoryIdentifier)); + + if (!granularity.equalsIgnoreCase("totals") && !granularity.equalsIgnoreCase("monthly")) { + reportExceptions.add(new SUSHI_Error_Model("3062", "Warning", "Invalid ReportAttribute Value", "usagecounts.openaire.eu", "Granularity: \'" + granularity + "\' unknown. Defaulting to Monthly")); + granularity = "Monthly"; + } Date beginDateParsed; if (!beginDate.equals("")) { @@ -482,7 +497,7 @@ public class SushiLiteServiceImpl implements SushiLiteService { temp.add(Calendar.MONTH, -1); temp.set(Calendar.DAY_OF_MONTH, temp.getActualMinimum(Calendar.DAY_OF_MONTH)); beginDateParsed = temp.getTime(); - reportExceptions.add(new SUSHI_Error_Model("3021", "Warning", "usagecounts.openaire.eu", "Unspecified Date Arguments", "Begin Date set to default: " + new SimpleDateFormat("yyyy-MM-dd").format(beginDateParsed))); + reportExceptions.add(new SUSHI_Error_Model("3021", "Warning", "Unspecified Date Arguments", "usagecounts.openaire.eu", "Begin Date set to default: " + new SimpleDateFormat("yyyy-MM-dd").format(beginDateParsed))); } Date endDateParsed; @@ -499,49 +514,230 @@ public class SushiLiteServiceImpl implements SushiLiteService { temp.add(Calendar.MONTH, -1); temp.set(Calendar.DAY_OF_MONTH, temp.getActualMaximum(Calendar.DAY_OF_MONTH)); endDateParsed = temp.getTime(); - reportExceptions.add(new SUSHI_Error_Model("3021", "Warning", "usagecounts.openaire.eu", "Unspecified Date Arguments", "End Date set to default: " + new SimpleDateFormat("yyyy-MM-dd").format(endDateParsed))); + reportExceptions.add(new SUSHI_Error_Model("3021", "Warning", "Unspecified Date Arguments", "usagecounts.openaire.eu", "End Date set to default: " + new SimpleDateFormat("yyyy-MM-dd").format(endDateParsed))); } //log.error("dates: " + beginDateParsed.toString() + " - " + endDateParsed.toString()); if (beginDateParsed == null) { - reportExceptions.add(new SUSHI_Error_Model("3020", "Error", "usagecounts.openaire.eu", "Invalid Date Arguments", "Begin Date: " + beginDate + " is not a valid date")); + reportExceptions.add(new SUSHI_Error_Model("3020", "Error", "Invalid Date Arguments", "usagecounts.openaire.eu", "Begin Date: " + beginDate + " is not a valid date")); } if (endDateParsed == null) { - reportExceptions.add(new SUSHI_Error_Model("3020", "Error", "usagecounts.openaire.eu", "Invalid Date Arguments", "End Date: " + endDate + " is not a valid date")); + reportExceptions.add(new SUSHI_Error_Model("3020", "Error", "Invalid Date Arguments", "usagecounts.openaire.eu", "End Date: " + endDate + " is not a valid date")); } if (beginDateParsed != null && endDateParsed != null && !beginDateParsed.before(endDateParsed)) { - reportExceptions.add(new SUSHI_Error_Model("3020", "Error", "usagecounts.openaire.eu", "Invalid Date Arguments", "BeginDate \'" + new SimpleDateFormat("yyyy-MM-dd").format(beginDateParsed) + "\' is greater than EndDate \'" + new SimpleDateFormat("yyyy-MM-dd").format(endDateParsed) + "\'")); + reportExceptions.add(new SUSHI_Error_Model("3020", "Error", "Invalid Date Arguments", "usagecounts.openaire.eu", "BeginDate \'" + new SimpleDateFormat("yyyy-MM-dd").format(beginDateParsed) + "\' is greater than EndDate \'" + new SimpleDateFormat("yyyy-MM-dd").format(endDateParsed) + "\'")); } - List reportFilters = new ArrayList(); - reportFilters.add(new Filter("BeginDate", beginDate)); - reportFilters.add(new Filter("EndDate", endDate)); - String reportID = "ΤR"; - String reportName = "Title Master Report"; - String insitutionName = usageStatsRepository.getInstitutionName(repositoryIdentifier); - List institutionIdD = new ArrayList(); - institutionIdD.add(new SUSHI_Org_Identifiers("Openaire", repositoryIdentifier)); + String repoid = repositoryIdentifier; + String institutionName = usageStatsRepository.getInstitutionName(repositoryIdentifier); + + //if (!repositoryIdentifier.equals("")) { + // repoid = usageStatsRepository.getInstitutionID(repositoryIdentifier); + if (repoid.equals("-1")) { + reportExceptions.add(new SUSHI_Error_Model("3060", "Error", "Invalid Filter Value", "usagecounts.openaire.eu", "RepositoryIdentifier: " + repositoryIdentifier + " is not valid")); + } + //} + String itemid = ""; + if (!itemIdentifier.equals("")) { + String[] split = itemIdentifier.split(":"); + switch (split[0].toLowerCase()) { + case "oid": + itemid = itemIdentifier; + break; + case "doi": + itemid = itemIdentifier; + break; +// case "openaire": +// itemid = itemIdentifier; +// break; + default: + reportExceptions.add(new SUSHI_Error_Model("3060", "Error", "Invalid Filter Value", "usagecounts.openaire.eu", "ItemIdentifier: " + itemIdentifier + " is not valid")); + itemid = "-1"; + } + } + if (itemid.equals("") && repoid.equals("")) { + reportExceptions.add(new SUSHI_Error_Model("3070", "Error", "Required Filter Missing", "usagecounts.openaire.eu", "ItemIdentifier or RepositoryIdentifier must be supplied")); + } + //if (reportName.equalsIgnoreCase("ar1")) { + if (!itemid.equals("-1") && !repoid.equals("-1") && beginDateParsed != null && endDateParsed != null && beginDateParsed.before(endDateParsed)) { +// if (!itemid.equals("")) { +// if (dataType.equalsIgnoreCase("") || dataType.equalsIgnoreCase("article")) { +// usageStatsRepository.executeItem(reportItems, itemIdentifier, repoid, "Article", beginDateParsed, endDateParsed, granularity); +// if (reportItems.isEmpty()) { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// } else { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// } else if (!repoid.equals("")) { + usageStatsRepository.executeBatchItemsIR(reportItems, repoid, itemIdentifier, beginDateParsed, endDateParsed, metricType, "Article", granularity); + + if (reportItems.isEmpty()) { + reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); + } + } +// } +// //} else if (reportName.equalsIgnoreCase("br1")) { +// if (!itemid.equals("-1") && !repoid.equals("-1") && beginDateParsed != null && endDateParsed != null && beginDateParsed.before(endDateParsed)) { +// if (!itemid.equals("")) { +// if (dataType.equalsIgnoreCase("") || dataType.equalsIgnoreCase("book")) { +// usageStatsRepository.executeItem(reportItems, itemIdentifier, repoid, "Book", beginDateParsed, endDateParsed, granularity); +// if (reportItems.isEmpty()) { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// } else { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// } else if (!repoid.equals("")) { +// usageStatsRepository.executeBatchItems(reportItems, repoid, "Book", beginDateParsed, endDateParsed, granularity); +// if (reportItems.isEmpty()) { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// } +// } +// //} +// if (!itemid.equals("-1") && !repoid.equals("-1") && beginDateParsed != null && endDateParsed != null && beginDateParsed.before(endDateParsed)) { +// if (!itemid.equals("")) { +// if (dataType.equalsIgnoreCase("") || dataType.equalsIgnoreCase("part of book or chapter of book")) { +// usageStatsRepository.executeItem(reportItems, itemIdentifier, repoid, "Part of book or chapter of book", beginDateParsed, endDateParsed, granularity); +// if (reportItems.isEmpty()) { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// } else { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// } else if (!repoid.equals("")) { +// usageStatsRepository.executeBatchItems(reportItems, repoid, "Part of book or chapter of book", beginDateParsed, endDateParsed, granularity); +// if (reportItems.isEmpty()) { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// } +// } +// //else if (reportName.equalsIgnoreCase("ir1")) { +// if (!itemid.equals("-1") && !repoid.equals("-1") && beginDateParsed != null && endDateParsed != null && beginDateParsed.before(endDateParsed)) { +// if (!itemid.equals("")) { +// usageStatsRepository.executeItem(reportItems, itemIdentifier, repoid, dataType, beginDateParsed, endDateParsed, granularity); +// } else if (!repoid.equals("")) { +// usageStatsRepository.executeBatchItems(reportItems, repoid, dataType, beginDateParsed, endDateParsed, granularity); +// } +// if (reportItems.isEmpty()) { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// } +// //} else if (reportName.equalsIgnoreCase("rr1")) { +// if (!repoid.equals("-1") && beginDateParsed != null && endDateParsed != null && beginDateParsed.before(endDateParsed)) { +// usageStatsRepository.executeRepo(reportItems, repoid, dataType, beginDateParsed, endDateParsed, granularity); +// } +// if (reportItems.isEmpty()) { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// //} else if (reportName.equalsIgnoreCase("jr1")) { +// if (!repoid.equals("-1") && beginDateParsed != null && endDateParsed != null && beginDateParsed.before(endDateParsed)) { +// usageStatsRepository.executeJournal(reportItems, repoid, dataType, beginDateParsed, endDateParsed, granularity); +// } - List reportItems = new ArrayList(); - usageStatsRepository.executeBatchItemsPR(reportItems, repositoryIdentifier, beginDateParsed, endDateParsed, metricType, dataType, granularity); if (reportItems.isEmpty()) { reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); } - + //} else if (reportName.equals("")) { + // reportExceptions.add(new SUSHI_Error_Model("3050", "Error", "usagecounts.openaire.eu", "Report argument is missing", "You must supply a Report argument")); + //} else { + // reportExceptions.add(new SUSHI_Error_Model("3000", "Error", "usagecounts.openaire.eu", "Report " + reportName + " not supported", "Supported reports: AR1, IR1, RR1, BR1, BR2")); + //} + if (reportExceptions.size() == 0) { reportExceptions = null; } - COUNTER_Platform_Report reportPr = new COUNTER_Platform_Report(dateTime.format(formatter), repositoryIdentifier, reportID, reportName, insitutionName, institutionIdD, reportExceptions, reportFilters, reportItems); - return reportPr; + COUNTER_Item_Report reportResponse = new COUNTER_Item_Report(dateTime.format(formatter), customerID, "IR", "Item Report", institutionName, orgIdentifiers, + reportExceptions, reportFilters, reportItems); + + return reportResponse; } +// @Override +// public COUNTER_Title_Report buildReportIR(String customerID, String repositoryIdentifier, String itemIdentifier, String beginDate, +// String endDate, String metricType, String dataType, String granularity) { +// List reportExceptions = new ArrayList<>(); +// ZonedDateTime dateTime = ZonedDateTime.now(); // Gets the current date and time, with your default time-zone +// DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'"); +// //Display Report Created Day +// +// repositoryIdentifier = usageStatsRepository.getInstitutionID(repositoryIdentifier); +// +// Date beginDateParsed; +// if (!beginDate.equals("")) { +// beginDateParsed = tryParse(beginDate); +// if (beginDateParsed != null && (granularity.toLowerCase().equals("monthly") || beginDate.length() == 7)) { +// Calendar temp = Calendar.getInstance(); +// temp.setTime(beginDateParsed); +// temp.set(Calendar.DAY_OF_MONTH, temp.getActualMinimum(Calendar.DAY_OF_MONTH)); +// beginDateParsed = temp.getTime(); +// } +// } else { +// Calendar temp = Calendar.getInstance(); +// temp.add(Calendar.MONTH, -1); +// temp.set(Calendar.DAY_OF_MONTH, temp.getActualMinimum(Calendar.DAY_OF_MONTH)); +// beginDateParsed = temp.getTime(); +// reportExceptions.add(new SUSHI_Error_Model("3021", "Warning", "usagecounts.openaire.eu", "Unspecified Date Arguments", "Begin Date set to default: " + new SimpleDateFormat("yyyy-MM-dd").format(beginDateParsed))); +// } +// +// Date endDateParsed; +// if (!endDate.equals("")) { +// endDateParsed = tryParse(endDate); +// if (endDateParsed != null && (granularity.toLowerCase().equals("monthly") || endDate.length() == 7)) { +// Calendar temp = Calendar.getInstance(); +// temp.setTime(endDateParsed); +// temp.set(Calendar.DAY_OF_MONTH, temp.getActualMaximum(Calendar.DAY_OF_MONTH)); +// endDateParsed = temp.getTime(); +// } +// } else { +// Calendar temp = Calendar.getInstance(); +// temp.add(Calendar.MONTH, -1); +// temp.set(Calendar.DAY_OF_MONTH, temp.getActualMaximum(Calendar.DAY_OF_MONTH)); +// endDateParsed = temp.getTime(); +// reportExceptions.add(new SUSHI_Error_Model("3021", "Warning", "usagecounts.openaire.eu", "Unspecified Date Arguments", "End Date set to default: " + new SimpleDateFormat("yyyy-MM-dd").format(endDateParsed))); +// } +// //log.error("dates: " + beginDateParsed.toString() + " - " + endDateParsed.toString()); +// +// if (beginDateParsed == null) { +// reportExceptions.add(new SUSHI_Error_Model("3020", "Error", "usagecounts.openaire.eu", "Invalid Date Arguments", "Begin Date: " + beginDate + " is not a valid date")); +// } +// if (endDateParsed == null) { +// reportExceptions.add(new SUSHI_Error_Model("3020", "Error", "usagecounts.openaire.eu", "Invalid Date Arguments", "End Date: " + endDate + " is not a valid date")); +// } +// if (beginDateParsed != null && endDateParsed != null && !beginDateParsed.before(endDateParsed)) { +// reportExceptions.add(new SUSHI_Error_Model("3020", "Error", "usagecounts.openaire.eu", "Invalid Date Arguments", "BeginDate \'" + new SimpleDateFormat("yyyy-MM-dd").format(beginDateParsed) + "\' is greater than EndDate \'" + new SimpleDateFormat("yyyy-MM-dd").format(endDateParsed) + "\'")); +// } +// +// List reportFilters = new ArrayList(); +// reportFilters.add(new Filter("BeginDate", beginDate)); +// reportFilters.add(new Filter("EndDate", endDate)); +// String reportID = "ΤR"; +// String reportName = "Title Master Report"; +// String institutionName = usageStatsRepository.getInstitutionName(repositoryIdentifier); +// List institutionIdD = new ArrayList(); +// institutionIdD.add(new SUSHI_Org_Identifiers("Openaire", repositoryIdentifier)); +// +// List reportItems = new ArrayList(); +// usageStatsRepository.executeBatchItemsTR(reportItems, repositoryIdentifier, itemIdentifier,beginDateParsed, endDateParsed, metricType, dataType, granularity); +// +// if (reportItems.isEmpty()) { +// reportExceptions.add(new SUSHI_Error_Model("3030", "Error", "usagecounts.openaire.eu", "No Usage Available for Requested Dates", "Service did not find any data")); +// } +// +// if (reportExceptions.size() == 0) { +// reportExceptions = null; +// } +// COUNTER_Title_Report reportTR = new COUNTER_Title_Report(dateTime.format(formatter), customerID, reportID, reportName, institutionName, institutionIdD, reportExceptions, reportFilters, reportItems); +// return reportTR; +// } @Override - public String displayReportPR(String repositoryIdentifier, String beginDate, + public String displayReportPR(String customerID, String repositoryIdentifier, String beginDate, String endDate, String metricType, String dataType, String granularity) { ObjectMapper objectMapper = new ObjectMapper(); log.info((beginDate + " " + endDate)); try { - return "
" + objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(buildReportPR(repositoryIdentifier, beginDate, endDate, metricType, dataType, granularity)) + "
"; + return "
" + objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(buildReportPR(customerID, repositoryIdentifier, beginDate, endDate, metricType, dataType, granularity)) + "
"; } catch (JsonProcessingException ex) { java.util.logging.Logger.getLogger(SushiLiteServiceImpl.class.getName()).log(Level.SEVERE, null, ex); } @@ -549,26 +745,27 @@ public class SushiLiteServiceImpl implements SushiLiteService { } @Override - public String displayReportPR_P1(String repositoryIdentifier, + public String displayReportPR_P1(String customerID, String repositoryIdentifier, String beginDate, String endDate) { ObjectMapper objectMapper = new ObjectMapper(); log.info((beginDate + " " + endDate)); try { - return "
" + objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(buildReportPR_P1(repositoryIdentifier, beginDate, endDate)) + "
"; + return "
" + objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(buildReportPR_P1(customerID, repositoryIdentifier, beginDate, endDate)) + "
"; } catch (JsonProcessingException ex) { java.util.logging.Logger.getLogger(SushiLiteServiceImpl.class.getName()).log(Level.SEVERE, null, ex); } return null; } + @Override - public String displayReportTR(String repositoryIdentifier, String itemIdentifier,String beginDate, + public String displayReportIR(String customerID, String repositoryIdentifier, String itemIdentifier, String beginDate, String endDate, String metricType, String dataType, String granularity) { ObjectMapper objectMapper = new ObjectMapper(); log.info((beginDate + " " + endDate)); try { - return "
" + objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(buildReportPR(repositoryIdentifier, beginDate, endDate, metricType, dataType, granularity)) + "
"; + return "
" + objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(buildReportIR(customerID, repositoryIdentifier, itemIdentifier, beginDate, endDate, metricType, dataType, granularity)) + "
"; } catch (JsonProcessingException ex) { java.util.logging.Logger.getLogger(SushiLiteServiceImpl.class.getName()).log(Level.SEVERE, null, ex); } diff --git a/src/main/resources/usageStatsAPI.properties b/src/main/resources/usageStatsAPI.properties index 0e6c1ae..76d7a14 100644 --- a/src/main/resources/usageStatsAPI.properties +++ b/src/main/resources/usageStatsAPI.properties @@ -1,10 +1,9 @@ name=usageStatsAPI logging.config=log4j.properties -usagestats.driverClassName=com.cloudera.impala.jdbc41.Driver +#usagestats.driverClassName=com.cloudera.impala.jdbc41.Driver +spring.datasource.driverClassName=com.cloudera.impala.jdbc41.Driver spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.HSQLDialect usagestats.url=jdbc:impala://iis-cdh5-test-gw.ocean.icm.edu.pl:21050/;UseNativeQuery=1;AutoReconnect=1 -usagestats.username=sqoop -usagestats.password=sqoop usagestats.redis.hostname=localhost usagestats.redis.port=6379 spring.jackson.serialization.INDENT_OUTPUT=true @@ -13,7 +12,7 @@ prod.usagestatsImpalaDB=openaire_prod_usage_stats compression.max_number_of_records=100 download.folder=/Users/dpie/Desktop/DownloadSushiLite sushi-lite.server=http://localhost:8080/usagestats -server.context-path=/usagestats_r5 +server.servlet.context-path.=/usagestats_r5 server.port=8080 #spring.datasource.testWhileIdle = true #spring.datasource.timeBetweenEvictionRunsMillis = 60000