package org.apache.archiva.repository.scanner;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.commons.collections.CollectionUtils;
import javax.xml.bind.annotation.XmlRootElement;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* RepositoryScanStatistics - extension to the RepositoryContentStatistics model.
*
*
*/
@XmlRootElement( name = "repositoryScanStatistics" )
public class RepositoryScanStatistics
{
private transient List<String> knownConsumers;
private transient List<String> invalidConsumers;
private transient long startTimestamp;
private SimpleDateFormat df = new SimpleDateFormat();
/**
* Field repositoryId
*/
private String repositoryId;
/**
* Field whenGathered
*/
private Date whenGathered;
/**
* Field duration
*/
private long duration = 0;
/**
* Field totalFileCount
*/
private long totalFileCount = 0;
/**
* Field newFileCount
*/
private long newFileCount = 0;
/**
* Field totalSize
*/
private long totalSize = 0;
private Map<String, Long> consumerCounts;
private Map<String, Long> consumerTimings;
public void triggerStart()
{
startTimestamp = System.currentTimeMillis();
}
public java.util.Date getWhenGathered()
{
return whenGathered;
}
public void triggerFinished()
{
long finished = System.currentTimeMillis();
this.duration = finished - startTimestamp;
this.whenGathered = new java.util.Date( finished );
}
public void increaseFileCount()
{
this.totalFileCount += 1;
}
public void increaseNewFileCount()
{
this.newFileCount += 1;
}
public void setKnownConsumers( List<String> consumers )
{
knownConsumers = consumers;
}
public void setInvalidConsumers( List<String> consumers )
{
invalidConsumers = consumers;
}
public String toDump( ManagedRepository repo )
{
StringBuilder buf = new StringBuilder();
buf.append( "\n.\\ Scan of " ).append( this.getRepositoryId() );
buf.append( " \\.__________________________________________" );
buf.append( "\n Repository Dir : " ).append( repo.getLocation() );
buf.append( "\n Repository Name : " ).append( repo.getName() );
buf.append( "\n Repository Layout : " ).append( repo.getLayout() );
buf.append( "\n Known Consumers : " );
if ( CollectionUtils.isNotEmpty( knownConsumers ) )
{
buf.append( "(" ).append( knownConsumers.size() ).append( " configured)" );
for ( String id : knownConsumers )
{
buf.append( "\n " ).append( id );
if ( consumerTimings.containsKey( id ) )
{
long time = consumerTimings.get( id );
buf.append( " (Total: " ).append( time ).append( "ms" );
if ( consumerCounts.containsKey( id ) )
{
long total = consumerCounts.get( id );
buf.append( "; Avg.: " + ( time / total ) + "; Count: " + total );
}
buf.append( ")" );
}
}
}
else
{
buf.append( "<none>" );
}
buf.append( "\n Invalid Consumers : " );
if ( CollectionUtils.isNotEmpty( invalidConsumers ) )
{
buf.append( "(" ).append( invalidConsumers.size() ).append( " configured)" );
for ( String id : invalidConsumers )
{
buf.append( "\n " ).append( id );
if ( consumerTimings.containsKey( id ) )
{
long time = consumerTimings.get( id );
buf.append( " (Total: " ).append( time ).append( "ms" );
if ( consumerCounts.containsKey( id ) )
{
long total = consumerCounts.get( id );
buf.append( "; Avg.: " + ( time / total ) + "ms; Count: " + total );
}
buf.append( ")" );
}
}
}
else
{
buf.append( "<none>" );
}
buf.append( "\n Duration : " );
buf.append( org.apache.archiva.common.utils.DateUtil.getDuration( this.getDuration() ) );
buf.append( "\n When Gathered : " );
if ( this.getWhenGathered() == null )
{
buf.append( "<null>" );
}
else
{
buf.append( df.format( this.getWhenGathered() ) );
}
buf.append( "\n Total File Count : " ).append( this.getTotalFileCount() );
long averageMsPerFile = 0;
if ( getTotalFileCount() != 0 )
{
averageMsPerFile = ( this.getDuration() / this.getTotalFileCount() );
}
buf.append( "\n Avg Time Per File : " );
buf.append( org.apache.archiva.common.utils.DateUtil.getDuration( averageMsPerFile ) );
buf.append( "\n______________________________________________________________" );
return buf.toString();
}
public void setRepositoryId( String repositoryId )
{
this.repositoryId = repositoryId;
}
public String getRepositoryId()
{
return repositoryId;
}
public long getDuration()
{
return duration;
}
public long getTotalFileCount()
{
return totalFileCount;
}
public long getNewFileCount()
{
return newFileCount;
}
public long getTotalSize()
{
return totalSize;
}
public void setConsumerCounts( Map<String, Long> consumerCounts )
{
this.consumerCounts = consumerCounts;
}
public void setConsumerTimings( Map<String, Long> consumerTimings )
{
this.consumerTimings = consumerTimings;
}
}