]> source.dussan.org Git - archiva.git/blob
e627f0f55edf94c4b4d6782ec62286f51dd1947f
[archiva.git] /
1 package org.apache.archiva.repository.scanner;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *  http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import org.apache.archiva.admin.model.beans.ManagedRepository;
23 import org.apache.commons.collections.CollectionUtils;
24
25 import javax.xml.bind.annotation.XmlRootElement;
26 import java.text.SimpleDateFormat;
27 import java.util.Date;
28 import java.util.List;
29 import java.util.Map;
30
31 /**
32  * RepositoryScanStatistics - extension to the RepositoryContentStatistics model.
33  *
34  * @version $Id$
35  */
36 @XmlRootElement( name = "repositoryScanStatistics" )
37 public class RepositoryScanStatistics
38 {
39     private transient List<String> knownConsumers;
40
41     private transient List<String> invalidConsumers;
42
43     private transient long startTimestamp;
44
45     private SimpleDateFormat df = new SimpleDateFormat();
46
47     /**
48      * Field repositoryId
49      */
50     private String repositoryId;
51
52     /**
53      * Field whenGathered
54      */
55     private Date whenGathered;
56
57     /**
58      * Field duration
59      */
60     private long duration = 0;
61
62     /**
63      * Field totalFileCount
64      */
65     private long totalFileCount = 0;
66
67     /**
68      * Field newFileCount
69      */
70     private long newFileCount = 0;
71
72     /**
73      * Field totalSize
74      */
75     private long totalSize = 0;
76
77     private Map<String, Long> consumerCounts;
78
79     private Map<String, Long> consumerTimings;
80
81     public void triggerStart()
82     {
83         startTimestamp = System.currentTimeMillis();
84     }
85
86     public java.util.Date getWhenGathered()
87     {
88         return whenGathered;
89     }
90
91     public void triggerFinished()
92     {
93         long finished = System.currentTimeMillis();
94         this.duration = finished - startTimestamp;
95         this.whenGathered = new java.util.Date( finished );
96     }
97
98     public void increaseFileCount()
99     {
100         long count = getTotalFileCount();
101         this.totalFileCount = ++count;
102     }
103
104     public void increaseNewFileCount()
105     {
106         long count = getNewFileCount();
107         this.newFileCount = ++count;
108     }
109
110     public void setKnownConsumers( List<String> consumers )
111     {
112         knownConsumers = consumers;
113     }
114
115     public void setInvalidConsumers( List<String> consumers )
116     {
117         invalidConsumers = consumers;
118     }
119
120     public String toDump( ManagedRepository repo )
121     {
122         StringBuffer buf = new StringBuffer();
123
124         buf.append( "\n.\\ Scan of " ).append( this.getRepositoryId() );
125         buf.append( " \\.__________________________________________" );
126
127         buf.append( "\n  Repository Dir    : " ).append( repo.getLocation() );
128         buf.append( "\n  Repository Name   : " ).append( repo.getName() );
129         buf.append( "\n  Repository Layout : " ).append( repo.getLayout() );
130
131         buf.append( "\n  Known Consumers   : " );
132         if ( CollectionUtils.isNotEmpty( knownConsumers ) )
133         {
134             buf.append( "(" ).append( knownConsumers.size() ).append( " configured)" );
135             for ( String id : knownConsumers )
136             {
137                 buf.append( "\n                      " ).append( id );
138                 if ( consumerTimings.containsKey( id ) )
139                 {
140                     long time = consumerTimings.get( id );
141                     buf.append( " (Total: " ).append( time ).append( "ms" );
142                     if ( consumerCounts.containsKey( id ) )
143                     {
144                         long total = consumerCounts.get( id );
145                         buf.append( "; Avg.: " + ( time / total ) + "; Count: " + total );
146                     }
147                     buf.append( ")" );
148                 }
149             }
150         }
151         else
152         {
153             buf.append( "<none>" );
154         }
155
156         buf.append( "\n  Invalid Consumers : " );
157         if ( CollectionUtils.isNotEmpty( invalidConsumers ) )
158         {
159             buf.append( "(" ).append( invalidConsumers.size() ).append( " configured)" );
160             for ( String id : invalidConsumers )
161             {
162                 buf.append( "\n                      " ).append( id );
163                 if ( consumerTimings.containsKey( id ) )
164                 {
165                     long time = consumerTimings.get( id );
166                     buf.append( " (Total: " ).append( time ).append( "ms" );
167                     if ( consumerCounts.containsKey( id ) )
168                     {
169                         long total = consumerCounts.get( id );
170                         buf.append( "; Avg.: " + ( time / total ) + "ms; Count: " + total );
171                     }
172                     buf.append( ")" );
173                 }
174             }
175         }
176         else
177         {
178             buf.append( "<none>" );
179         }
180
181         buf.append( "\n  Duration          : " );
182         buf.append( org.apache.archiva.common.utils.DateUtil.getDuration( this.getDuration() ) );
183         buf.append( "\n  When Gathered     : " );
184         if ( this.getWhenGathered() == null )
185         {
186             buf.append( "<null>" );
187         }
188         else
189         {
190             buf.append( df.format( this.getWhenGathered() ) );
191         }
192
193         buf.append( "\n  Total File Count  : " ).append( this.getTotalFileCount() );
194
195         long averageMsPerFile = 0;
196
197         if ( getTotalFileCount() != 0 )
198         {
199             averageMsPerFile = ( this.getDuration() / this.getTotalFileCount() );
200         }
201
202         buf.append( "\n  Avg Time Per File : " );
203         buf.append( org.apache.archiva.common.utils.DateUtil.getDuration( averageMsPerFile ) );
204         buf.append( "\n______________________________________________________________" );
205
206         return buf.toString();
207     }
208
209     public void setRepositoryId( String repositoryId )
210     {
211         this.repositoryId = repositoryId;
212     }
213
214     public String getRepositoryId()
215     {
216         return repositoryId;
217     }
218
219     public long getDuration()
220     {
221         return duration;
222     }
223
224     public long getTotalFileCount()
225     {
226         return totalFileCount;
227     }
228
229     public long getNewFileCount()
230     {
231         return newFileCount;
232     }
233
234     public long getTotalSize()
235     {
236         return totalSize;
237     }
238
239     public void setConsumerCounts( Map<String, Long> consumerCounts )
240     {
241         this.consumerCounts = consumerCounts;
242     }
243
244     public void setConsumerTimings( Map<String, Long> consumerTimings )
245     {
246         this.consumerTimings = consumerTimings;
247     }
248 }