content: 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.repository.ManagedRepository;
  import org.apache.commons.collections4.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;
      }
  }
  