This project has retired. For details please refer to its
Attic page.
DefaultReportRepositoriesService xref
1 package org.apache.archiva.rest.services;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 import org.apache.archiva.metadata.model.facets.RepositoryProblemFacet;
22 import org.apache.archiva.metadata.repository.MetadataRepository;
23 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
24 import org.apache.archiva.metadata.repository.RepositorySession;
25 import org.apache.archiva.metadata.repository.stats.model.RepositoryStatistics;
26 import org.apache.archiva.metadata.repository.stats.model.RepositoryStatisticsManager;
27 import org.apache.archiva.rest.api.services.ArchivaRestServiceException;
28 import org.apache.archiva.rest.api.services.ReportRepositoriesService;
29 import org.apache.commons.lang3.StringUtils;
30 import org.springframework.stereotype.Service;
31
32 import javax.inject.Inject;
33 import java.util.ArrayList;
34 import java.util.Collections;
35 import java.util.Date;
36 import java.util.List;
37
38
39
40
41
42
43
44 @Service( "reportRepositoriesService#rest" )
45 public class DefaultReportRepositoriesService
46 extends AbstractRestService
47 implements ReportRepositoriesService
48 {
49
50 private static final String ALL_REPOSITORIES = "all";
51
52 @Inject
53 private RepositoryStatisticsManager repositoryStatisticsManager;
54
55 @Override
56 public List<RepositoryStatistics> getStatisticsReport( List<String> repositoriesId, int rowCount, Date startDate,
57 Date endDate )
58 throws ArchivaRestServiceException
59 {
60 switch ( repositoriesId.size() )
61 {
62 case 0:
63 throw new ArchivaRestServiceException( "report.statistics.report.missing-repositories", null );
64 case 1:
65 return getUniqueRepositoryReport( repositoriesId.get( 0 ), rowCount, startDate, endDate );
66 default:
67 return getMultipleRepositoriesReport( repositoriesId, rowCount );
68 }
69 }
70
71 private List<RepositoryStatistics> getMultipleRepositoriesReport( List<String> repositoriesId, int rowCount )
72 {
73 RepositorySession repositorySession = null;
74 try
75 {
76 repositorySession = repositorySessionFactory.createSession();
77 }
78 catch ( MetadataRepositoryException e )
79 {
80 e.printStackTrace( );
81 }
82 try
83 {
84 MetadataRepository metadataRepository = repositorySession.getRepository();
85 List<RepositoryStatistics> stats = new ArrayList<>();
86 for ( String repo : repositoriesId )
87 {
88 try
89 {
90 stats.add( repositoryStatisticsManager.getLastStatistics( repo ) );
91 }
92 catch ( MetadataRepositoryException e )
93 {
94 log.warn( "Unable to retrieve stats, assuming is empty: {}", e.getMessage(), e );
95 }
96 }
97
98 return stats.subList( 0, stats.size() > rowCount ? rowCount : stats.size() );
99 }
100 finally
101 {
102 repositorySession.close();
103 }
104 }
105
106 private List<RepositoryStatistics> getUniqueRepositoryReport( String repositoryId, int rowCount, Date startDate,
107 Date endDate )
108 {
109 RepositorySession repositorySession = null;
110 try
111 {
112 repositorySession = repositorySessionFactory.createSession();
113 }
114 catch ( MetadataRepositoryException e )
115 {
116 e.printStackTrace( );
117 }
118 try
119 {
120 MetadataRepository metadataRepository = repositorySession.getRepository();
121 List<RepositoryStatistics> stats = null;
122 try
123 {
124 stats = repositoryStatisticsManager.getStatisticsInRange( repositoryId, startDate,
125 endDate );
126 }
127 catch ( MetadataRepositoryException e )
128 {
129 log.warn( "Unable to retrieve stats, assuming is empty: {}", e.getMessage(), e );
130 }
131 if ( stats == null || stats.isEmpty() )
132 {
133 return Collections.<RepositoryStatistics>emptyList();
134 }
135
136 return stats.subList( 0, stats.size() > rowCount ? rowCount : stats.size() );
137 }
138 finally
139 {
140 repositorySession.close();
141 }
142 }
143
144 @Override
145 public List<RepositoryProblemFacet> getHealthReport( String repository, String groupId, int rowCount )
146 throws ArchivaRestServiceException
147 {
148 RepositorySession repositorySession = null;
149 try
150 {
151 repositorySession = repositorySessionFactory.createSession();
152 }
153 catch ( MetadataRepositoryException e )
154 {
155 e.printStackTrace( );
156 }
157 try
158 {
159 List<String> observableRepositories = getObservableRepos();
160 if ( !ALL_REPOSITORIES.equals( repository ) && !observableRepositories.contains( repository ) )
161 {
162 throw new ArchivaRestServiceException(
163 "${$.i18n.prop('report.repository.illegal-access', " + repository + ")}", "repositoryId",
164 new IllegalAccessException() );
165 }
166
167 if ( !ALL_REPOSITORIES.equals( repository ) )
168 {
169 observableRepositories = Collections.singletonList( repository );
170 }
171
172 List<RepositoryProblemFacet> problemArtifacts = new ArrayList<>();
173 MetadataRepository metadataRepository = repositorySession.getRepository();
174 for ( String repoId : observableRepositories )
175 {
176 for ( String name : metadataRepository.getMetadataFacets(repositorySession , repoId, RepositoryProblemFacet.FACET_ID ) )
177 {
178 RepositoryProblemFacet metadataFacet =
179 (RepositoryProblemFacet) metadataRepository.getMetadataFacet(repositorySession ,
180 repoId,
181 RepositoryProblemFacet.FACET_ID, name );
182 if ( StringUtils.isEmpty( groupId ) || groupId.equals( metadataFacet.getNamespace() ) )
183 {
184 problemArtifacts.add( metadataFacet );
185 }
186 }
187 }
188
189 return problemArtifacts;
190 }
191 catch ( MetadataRepositoryException e )
192 {
193 throw new ArchivaRestServiceException( e.getMessage(), e );
194 }
195 finally
196 {
197 repositorySession.close();
198 }
199 }
200 }