in s3-artifact-storage-agent/src/main/java/jetbrains/buildServer/artifacts/s3/publish/S3ArtifactsPublisher.java [111:165]
public int publishFilesWithDigests(@NotNull Map<File, String> map, @NotNull FlowLogger logger, @Nullable Consumer<ArtifactDigestInfo> digestConsumer)
throws ArtifactPublishingFailedException {
final Map<File, String> filteredMap = CollectionsUtil.filterMapByValues(map, s -> myHelper.isEnabled(this, s));
if (!filteredMap.isEmpty()) {
final AgentRunningBuild build = myTracker.getCurrentBuild();
final S3FileUploader fileUploader = getFileUploader(build, logger);
Collection<UploadStatistics> statistics;
try {
statistics = fileUploader.upload(filteredMap, () -> {
if (isPublishingStopped(build) && build.getInterruptReason() != null) {
return build.getInterruptReason().getUserDescription();
} else {
return null;
}
}, fileUploadInfo -> {
myArtifacts.add(ArtifactDataInstance.create(fileUploadInfo.getArtifactPath(), fileUploadInfo.getSize()));
if (digestConsumer != null) {
File uploadFile = new File(fileUploadInfo.getAbsolutePath());
try {
digestConsumer.accept(new ArtifactDigestInfo(uploadFile, filteredMap.get(uploadFile), fileUploadInfo.getDigest()));
} catch (Throwable t) {
LOG.warn("Failed to send artifact upload information to digest consumer", t);
}
}
});
} catch (RecoverableException e) {
throw new ArtifactPublishingFailedException(e.getMessage(), e.isRecoverable(), e);
}
publishArtifactsList(build);
if (statistics != null && !statistics.isEmpty()) {
final StatisticsLogger.SummaryStatistics stats = getSummaryStatistics(statistics);
myLensIntegrationService.generateUploadEvents(build, statistics, stats.getTotalDuration(), teamcityConnectionConfiguration(build));
if (statistics.size() > MAX_UPLOAD_LOG_MESSAGES) {
logger.debug(
String.format("In total %d files uploaded. Summary upload time: %s. Average upload time per file: %s. Number of errors: %d. Logging information for the first %d files",
stats.getFileCount(),
formatDuration(stats.getTotalDuration()),
formatDuration(stats.getAverageDuration()),
stats.getErrors().size(),
MAX_UPLOAD_LOG_MESSAGES
));
logStatisticsForEach(logger, new ArrayList<>(statistics).subList(0, MAX_UPLOAD_LOG_MESSAGES));
} else {
logStatisticsForEach(logger, statistics);
}
}
}
return filteredMap.size();
}