1
|
package eu.dnetlib.usagestats.services;
|
2
|
|
3
|
import eu.dnetlib.usagestats.portal.CountryRepositories;
|
4
|
import eu.dnetlib.usagestats.portal.CountryUsageStats;
|
5
|
import eu.dnetlib.usagestats.portal.CountryUsageStatsAll;
|
6
|
import eu.dnetlib.usagestats.portal.MonthlyUsageStats;
|
7
|
import eu.dnetlib.usagestats.portal.TotalStats;
|
8
|
import eu.dnetlib.usagestats.portal.TotalStatsReposViewsDownloads;
|
9
|
import eu.dnetlib.usagestats.portal.UsageStats;
|
10
|
import eu.dnetlib.usagestats.repositories.UsageStatsRepository;
|
11
|
import org.springframework.stereotype.Service;
|
12
|
|
13
|
import java.util.ArrayList;
|
14
|
import java.util.List;
|
15
|
|
16
|
@Service
|
17
|
public class UsageStatsServiceImpl implements UsageStatsService {
|
18
|
|
19
|
private final UsageStatsRepository usageStatsRepository;
|
20
|
|
21
|
public UsageStatsServiceImpl(UsageStatsRepository usageStatsRepository) {
|
22
|
this.usageStatsRepository = usageStatsRepository;
|
23
|
}
|
24
|
|
25
|
@Override
|
26
|
public UsageStats getDatasourceClicks(String id) {
|
27
|
String query = "SELECT 'views', sum(s.count), sum(s.openaire) FROM views_stats s where s.repository_id=? "
|
28
|
+ "UNION ALL SELECT 'downloads', sum(s.count), sum(s.openaire) FROM downloads_stats s where s.repository_id=? "
|
29
|
+ "UNION ALL SELECT 'pageviews', sum(s.count), '0' FROM pageviews_stats s, result_datasources rd where rd.id=s.result_id and rd.datasource=? ";
|
30
|
|
31
|
List<String> values = new ArrayList<>();
|
32
|
values.add(id);
|
33
|
values.add(id);
|
34
|
values.add(id);
|
35
|
|
36
|
return usageStatsRepository.executeUsageStats(query, values, "datasource");
|
37
|
}
|
38
|
|
39
|
/*
|
40
|
@Override
|
41
|
public UsageStats getOrganizationClicks(String organizationId) {
|
42
|
|
43
|
String query = "select sum(number_of_views) from organization_stats where id=?";
|
44
|
|
45
|
List<String> values = new ArrayList<>();
|
46
|
values.add(organizationId);
|
47
|
|
48
|
return usageStatsRepository.executeUsageStats(query, values, "organization");
|
49
|
|
50
|
}
|
51
|
*/
|
52
|
@Override
|
53
|
public UsageStats getProjectClicks(String projectId) {
|
54
|
String query = "SELECT 'views', sum(s.count), sum(s.openaire) FROM views_stats s, project_results pr where pr.result=s.result_id and pr.id=? "
|
55
|
+ "UNION ALL SELECT 'downloads', sum(s.count), sum(s.openaire) FROM downloads_stats s, project_results pr where pr.result=s.result_id and pr.id=? "
|
56
|
+ "UNION ALL SELECT 'pageviews', sum(s.count), '0' FROM pageviews_stats s, project_results pr where pr.result=s.result_id and pr.id=?;";
|
57
|
|
58
|
List<String> values = new ArrayList<>();
|
59
|
values.add(projectId);
|
60
|
values.add(projectId);
|
61
|
values.add(projectId);
|
62
|
|
63
|
return usageStatsRepository.executeUsageStats(query, values, "project");
|
64
|
}
|
65
|
|
66
|
@Override
|
67
|
public UsageStats getResultClicks(String id) {
|
68
|
String query = "SELECT 'views', s.repository_id, CASE WHEN s.source='OpenAIRE' THEN d.name ELSE d.name ||' - '|| s.source END, sum(count), sum(openaire) FROM views_stats s, datasource d WHERE s.repository_id=d.id AND s.result_id=? GROUP BY s.source, s.repository_id, d.name "
|
69
|
+ "UNION ALL SELECT 'downloads', s.repository_id, CASE WHEN s.source='OpenAIRE' THEN d.name ELSE d.name ||' - '|| s.source END, sum(count), sum(s.openaire) FROM downloads_stats s, datasource d WHERE s.repository_id=d.id AND s.result_id=? GROUP BY s.source, s.repository_id, d.name "
|
70
|
+ "UNION ALL SELECT 'pageviews', 'OpenAIRE id', 'OpenAIRE', sum(count), '0' FROM pageviews_stats s WHERE result_id=?;";
|
71
|
|
72
|
List<String> values = new ArrayList<>();
|
73
|
values.add(id);
|
74
|
values.add(id);
|
75
|
values.add(id);
|
76
|
|
77
|
return usageStatsRepository.executeUsageStats(query, values, "result");
|
78
|
}
|
79
|
|
80
|
@Override
|
81
|
public TotalStats getTotalStats() {
|
82
|
return usageStatsRepository.executeTotalStats();
|
83
|
}
|
84
|
|
85
|
@Override
|
86
|
public List<MonthlyUsageStats> getMonthlyUsageStats() {
|
87
|
String query = "select date, sum(downloads) as downloads, sum(views) as views from usage_stats group by date order by date asc";
|
88
|
return usageStatsRepository.executeMontlyUsageStats(query);
|
89
|
}
|
90
|
|
91
|
@Override
|
92
|
public List<MonthlyUsageStats> getMonthlyUsageStatsForRepo(String id) {
|
93
|
String query = "select date, sum(downloads) as downloads, sum(views) as views from usage_stats where repository_id=? group by date order by date asc";
|
94
|
return usageStatsRepository.executeMontlyUsageStatsForRepo(query,id);
|
95
|
}
|
96
|
|
97
|
/* @Override
|
98
|
public List<CountryUsageStats> getCountryUsageStats() {
|
99
|
String query = "select c.name, sum(views) as views, sum(downloads) as downloads from public.torganization t, public.organization_datasources o, public.country c, usage_stats where o.datasource=t.id\n" +
|
100
|
"and c.code=t.country and o.id=repository_id group by c.name ";
|
101
|
return usageStatsRepository.executeCountryUsageStats(query);
|
102
|
}*/
|
103
|
@Override
|
104
|
public CountryUsageStatsAll getCountryUsageStatsAll() {
|
105
|
String query = "select c.name, count(distinct repository_id) as total_repos, sum(views) as views, sum(downloads) as downloads from public.torganization t, public.organization_datasources o, public.country c, usage_stats where o.datasource=t.id\n" +
|
106
|
"and c.code=t.country and o.id=repository_id group by c.name ";
|
107
|
return usageStatsRepository.executeCountryUsageStats(query);
|
108
|
}
|
109
|
@Override
|
110
|
public CountryUsageStats getCountryUsageStats(String country) {
|
111
|
String query = "select count(distinct repository_id) as total_repos, sum(views) as views, sum(downloads) as downloads from public.torganization t, public.organization_datasources o, public.country c, usage_stats where o.datasource=t.id\n" +
|
112
|
"and c.code=t.country and o.id=repository_id and c.name=?";
|
113
|
return usageStatsRepository.executeCountryUsageStats(query, country);
|
114
|
}
|
115
|
|
116
|
|
117
|
@Override
|
118
|
public List<CountryRepositories> getCountryRepositories() {
|
119
|
String query = "select c.name, d.name from public.datasource d, public.torganization t, public.organization_datasources o, public.country c, usage_stats \n" +
|
120
|
"where o.datasource=t.id and c.code=t.country and o.id=repository_id and repository_id=d.id group by d.name, c.name order by c.name";
|
121
|
return usageStatsRepository.executeCountryRepositories(query);
|
122
|
}
|
123
|
|
124
|
@Override
|
125
|
public TotalStatsReposViewsDownloads getTotalStatsReposViewsDownloads() {
|
126
|
String query = "select count(distinct repository_id) as repositories, sum(views) as views, sum(downloads) as downloads from usage_stats";
|
127
|
|
128
|
return usageStatsRepository.executeTotalStatsReposViewsDownloads(query);
|
129
|
|
130
|
}
|
131
|
|
132
|
}
|