package org.apache.archiva.metadata.repository.stats; /* * 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.metadata.model.MetadataFacet; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.TimeZone; public class RepositoryStatistics implements MetadataFacet { private Date scanEndTime; private Date scanStartTime; private long totalArtifactCount; private long totalArtifactFileSize; private long totalFileCount; private long totalGroupCount; private long totalProjectCount; private long newFileCount; public static String FACET_ID = "org.apache.archiva.metadata.repository.stats"; static final String SCAN_TIMESTAMP_FORMAT = "yyyy/MM/dd/HHmmss.SSS"; private Map<String, Long> totalCountForType = new ZeroForNullHashMap<String, Long>(); private static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone( "UTC" ); private String repositoryId; public Date getScanEndTime() { return scanEndTime; } public void setScanEndTime( Date scanEndTime ) { this.scanEndTime = scanEndTime; } public Date getScanStartTime() { return scanStartTime; } public void setScanStartTime( Date scanStartTime ) { this.scanStartTime = scanStartTime; } public long getTotalArtifactCount() { return totalArtifactCount; } public void setTotalArtifactCount( long totalArtifactCount ) { this.totalArtifactCount = totalArtifactCount; } public long getTotalArtifactFileSize() { return totalArtifactFileSize; } public void setTotalArtifactFileSize( long totalArtifactFileSize ) { this.totalArtifactFileSize = totalArtifactFileSize; } public long getTotalFileCount() { return totalFileCount; } public void setTotalFileCount( long totalFileCount ) { this.totalFileCount = totalFileCount; } public long getTotalGroupCount() { return totalGroupCount; } public void setTotalGroupCount( long totalGroupCount ) { this.totalGroupCount = totalGroupCount; } public long getTotalProjectCount() { return totalProjectCount; } public void setTotalProjectCount( long totalProjectCount ) { this.totalProjectCount = totalProjectCount; } public void setNewFileCount( long newFileCount ) { this.newFileCount = newFileCount; } public long getNewFileCount() { return newFileCount; } public long getDuration() { return scanEndTime.getTime() - scanStartTime.getTime(); } public String getRepositoryId() { return repositoryId; } public void setRepositoryId( String repositoryId ) { this.repositoryId = repositoryId; } @Override public String getFacetId() { return FACET_ID; } @Override public String getName() { return createNameFormat().format( scanStartTime ); } private static SimpleDateFormat createNameFormat() { SimpleDateFormat fmt = new SimpleDateFormat( SCAN_TIMESTAMP_FORMAT ); fmt.setTimeZone( UTC_TIME_ZONE ); return fmt; } @Override public Map<String, String> toProperties() { Map<String, String> properties = new HashMap<>(); properties.put( "scanEndTime", String.valueOf( scanEndTime.getTime() ) ); properties.put( "scanStartTime", String.valueOf( scanStartTime.getTime() ) ); properties.put( "totalArtifactCount", String.valueOf( totalArtifactCount ) ); properties.put( "totalArtifactFileSize", String.valueOf( totalArtifactFileSize ) ); properties.put( "totalFileCount", String.valueOf( totalFileCount ) ); properties.put( "totalGroupCount", String.valueOf( totalGroupCount ) ); properties.put( "totalProjectCount", String.valueOf( totalProjectCount ) ); properties.put( "newFileCount", String.valueOf( newFileCount ) ); properties.put( "repositoryId", repositoryId ); for ( Map.Entry<String, Long> entry : totalCountForType.entrySet() ) { properties.put( "count-" + entry.getKey(), String.valueOf( entry.getValue() ) ); } return properties; } @Override public void fromProperties( Map<String, String> properties ) { scanEndTime = new Date( Long.parseLong( properties.get( "scanEndTime" ) ) ); scanStartTime = new Date( Long.parseLong( properties.get( "scanStartTime" ) ) ); totalArtifactCount = Long.parseLong( properties.get( "totalArtifactCount" ) ); totalArtifactFileSize = Long.parseLong( properties.get( "totalArtifactFileSize" ) ); totalFileCount = Long.parseLong( properties.get( "totalFileCount" ) ); totalGroupCount = Long.parseLong( properties.get( "totalGroupCount" ) ); totalProjectCount = Long.parseLong( properties.get( "totalProjectCount" ) ); newFileCount = Long.parseLong( properties.get( "newFileCount" ) ); repositoryId = properties.get( "repositoryId" ); totalCountForType.clear(); for ( Map.Entry<String, String> entry : properties.entrySet() ) { if ( entry.getKey().startsWith( "count-" ) ) { totalCountForType.put( entry.getKey().substring( 6 ), Long.valueOf( entry.getValue() ) ); } } } @Override public boolean equals( Object o ) { if ( this == o ) { return true; } if ( o == null || getClass() != o.getClass() ) { return false; } RepositoryStatistics that = (RepositoryStatistics) o; if ( newFileCount != that.newFileCount ) { return false; } if ( totalArtifactCount != that.totalArtifactCount ) { return false; } if ( totalArtifactFileSize != that.totalArtifactFileSize ) { return false; } if ( totalFileCount != that.totalFileCount ) { return false; } if ( totalGroupCount != that.totalGroupCount ) { return false; } if ( totalProjectCount != that.totalProjectCount ) { return false; } if ( !scanEndTime.equals( that.scanEndTime ) ) { return false; } if ( !scanStartTime.equals( that.scanStartTime ) ) { return false; } if ( !totalCountForType.equals( that.totalCountForType ) ) { return false; } if ( !repositoryId.equals( that.repositoryId ) ) { return false; } return true; } @Override public int hashCode() { int result = scanEndTime.hashCode(); result = 31 * result + scanStartTime.hashCode(); result = 31 * result + (int) ( totalArtifactCount ^ ( totalArtifactCount >>> 32 ) ); result = 31 * result + (int) ( totalArtifactFileSize ^ ( totalArtifactFileSize >>> 32 ) ); result = 31 * result + (int) ( totalFileCount ^ ( totalFileCount >>> 32 ) ); result = 31 * result + (int) ( totalGroupCount ^ ( totalGroupCount >>> 32 ) ); result = 31 * result + (int) ( totalProjectCount ^ ( totalProjectCount >>> 32 ) ); result = 31 * result + (int) ( newFileCount ^ ( newFileCount >>> 32 ) ); result = 31 * result + totalCountForType.hashCode(); result = 31 * result + repositoryId.hashCode(); return result; } @Override public String toString() { return "RepositoryStatistics{" + "scanEndTime=" + scanEndTime + ", scanStartTime=" + scanStartTime + ", totalArtifactCount=" + totalArtifactCount + ", totalArtifactFileSize=" + totalArtifactFileSize + ", totalFileCount=" + totalFileCount + ", totalGroupCount=" + totalGroupCount + ", totalProjectCount=" + totalProjectCount + ", newFileCount=" + newFileCount + ", totalCountForType=" + totalCountForType + ", " + "repositoryId=" + repositoryId + '}'; } public Map<String, Long> getTotalCountForType() { return totalCountForType; } public long getTotalCountForType( String type ) { return totalCountForType.get( type ); } public void setTotalCountForType( String type, long count ) { totalCountForType.put( type.replaceAll( "-", "_" ).replaceAll( "\\.", "_" ), count ); } private static final class ZeroForNullHashMap<K, V extends Long> extends HashMap<K, V> { @Override public V get(Object key) { V value = super.get( key ); return value != null ? value : ( V ) Long.valueOf( 0L ); } } }