This project has retired. For details please refer to its Attic page.
DefaultReportRepositoriesService xref
View Javadoc
1   package org.apache.archiva.rest.services;
2   /*
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *   http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing,
14   * software distributed under the License is distributed on an
15   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16   * KIND, either express or implied.  See the License for the
17   * specific language governing permissions and limitations
18   * under the License.
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   * DefaultReportRepositoriesService
40   *
41   * @author Adrien Lecharpentier <adrien.lecharpentier@zenika.com>
42   * @since 1.4-M3
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 }