Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion api/src/org/labkey/api/assay/AssayFileWriter.java
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,11 @@ public Map<String, FileLike> savePostedFiles(ContextType context, @NotNull Set<S
event.setProvidedFileName(fileName);
event.setFile(file.getName());
event.setDirectory(dir.toURI().getPath());
AuditLogService.get().addEvent(context.getUser(), event);
List<FileSystemAuditProvider.FileSystemAuditEvent> pending = context.getPendingFileAuditEvents();
if (pending != null)
pending.add(event);
else
AuditLogService.get().addEvent(context.getUser(), event);
}
if (!isAfterFirstFile) // first file gets stored with multipartFile's name
{
Expand Down
13 changes: 13 additions & 0 deletions api/src/org/labkey/api/assay/AssayRunUploadContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.apache.logging.log4j.Logger;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.labkey.api.audit.provider.FileSystemAuditProvider;
import org.labkey.api.collections.CollectionUtils;
import org.labkey.api.data.Container;
import org.labkey.api.data.ExpDataFileConverter;
Expand All @@ -37,6 +38,7 @@
import org.labkey.api.writer.ContainerUser;
import org.labkey.vfs.FileLike;

import java.util.List;
import java.util.Map;
import java.util.Set;

Expand Down Expand Up @@ -188,6 +190,17 @@ default void setPreparedTransform(@Nullable PreparedTransform prepared)
throw new UnsupportedOperationException(getClass().getName() + " can't carry a prepared transform");
}

/** File audit events held until the import transaction opens, or null to add them as they're created. */
default @Nullable List<FileSystemAuditProvider.FileSystemAuditEvent> getPendingFileAuditEvents()
{
return null;
}

default void setPendingFileAuditEvents(@Nullable List<FileSystemAuditProvider.FileSystemAuditEvent> events)
{
throw new UnsupportedOperationException(getClass().getName() + " can't hold file audit events");
}

/** The RowId for the run that is being deleted and reuploaded, or null if this is a new run */
Long getReRunId();

Expand Down
14 changes: 14 additions & 0 deletions api/src/org/labkey/api/assay/AssayRunUploadContextImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import org.labkey.api.assay.transform.DefaultTransformResult;
import org.labkey.api.assay.transform.PreparedTransform;
import org.labkey.api.assay.transform.TransformResult;
import org.labkey.api.audit.provider.FileSystemAuditProvider;
import org.labkey.api.security.User;
import org.labkey.api.util.URIUtil;
import org.labkey.api.view.ActionURL;
Expand Down Expand Up @@ -95,6 +96,7 @@ public class AssayRunUploadContextImpl<ProviderType extends AssayProvider> imple
// Mutable fields
private TransformResult _transformResult;
private @Nullable PreparedTransform _preparedTransform;
private @Nullable List<FileSystemAuditProvider.FileSystemAuditEvent> _pendingFileAuditEvents;

// async fields
protected String _jobDescription;
Expand Down Expand Up @@ -453,6 +455,18 @@ public void setPreparedTransform(@Nullable PreparedTransform prepared)
_preparedTransform = prepared;
}

@Override
public @Nullable List<FileSystemAuditProvider.FileSystemAuditEvent> getPendingFileAuditEvents()
{
return _pendingFileAuditEvents;
}

@Override
public void setPendingFileAuditEvents(@Nullable List<FileSystemAuditProvider.FileSystemAuditEvent> events)
{
_pendingFileAuditEvents = events;
}

@Override
public void uploadComplete(ExpRun run)
{
Expand Down
18 changes: 18 additions & 0 deletions api/src/org/labkey/api/assay/DefaultAssayRunCreator.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@
import org.labkey.api.assay.transform.TransformDataHandler;
import org.labkey.api.assay.transform.TransformResult;
import org.labkey.api.collections.LongHashMap;
import org.labkey.api.audit.AuditLogService;
import org.labkey.api.audit.TransactionAuditProvider;
import org.labkey.api.audit.provider.FileSystemAuditProvider;
import org.labkey.api.data.ColumnInfo;
import org.labkey.api.data.Container;
import org.labkey.api.data.ContainerManager;
Expand Down Expand Up @@ -148,6 +150,8 @@ private PreparedTransform prepareTransformAfterInit(AssayRunUploadContext<Provid
Map<DomainProperty, String> allProperties = new HashMap<>(context.getRunProperties());
allProperties.putAll(context.getBatchProperties());

// Collecting the inputs saves the primary file, whose audit event belongs to the import transaction that isn't open yet
context.setPendingFileAuditEvents(new ArrayList<>());
Map<ExpData, String> inputDatas = new HashMap<>();
addRunDataInputs(context, null, findResolverType(allProperties), inputDatas);
PreparedTransform prepared = runTransformBeforeRun(context, inputDatas.keySet());
Expand Down Expand Up @@ -206,6 +210,19 @@ private PreparedTransform runTransformBeforeRun(AssayRunUploadContext<ProviderTy
return prepared;
}

private static void addPendingFileAuditEvents(AssayRunUploadContext<?> context, TransactionAuditProvider.TransactionAuditEvent auditEvent)
{
List<FileSystemAuditProvider.FileSystemAuditEvent> pending = context.getPendingFileAuditEvents();
if (pending == null)
return;
context.setPendingFileAuditEvents(null);
for (FileSystemAuditProvider.FileSystemAuditEvent event : pending)
{
event.setTransactionEvent(auditEvent, FileSystemAuditProvider.EVENT_TYPE);
AuditLogService.get().addEvent(context.getUser(), event);
}
}

/** Issue 26811: If we don't have a view, assume that we are on a background job thread already. */
public static boolean isBackgroundImport(AssayProvider provider, ExpProtocol protocol, boolean forceAsync)
{
Expand Down Expand Up @@ -263,6 +280,7 @@ public Pair<ExpExperiment, ExpRun> saveExperimentRun(
auditEvent = AbstractQueryUpdateService.createTransactionAuditEvent(context.getContainer(), context.getReRunId() == null ? QueryService.AuditAction.UPDATE : QueryService.AuditAction.INSERT, transactionDetails);
AbstractQueryUpdateService.addTransactionAuditEvent(transaction, context.getUser(), auditEvent);
}
addPendingFileAuditEvents(context, auditEvent);
if (!importInBackground)
{
if ((Object) context.getUploadedData().get(AssayDataCollector.PRIMARY_FILE) instanceof File errFile)
Expand Down
14 changes: 14 additions & 0 deletions api/src/org/labkey/api/assay/actions/AssayRunUploadForm.java
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
import org.labkey.api.assay.transform.DefaultTransformResult;
import org.labkey.api.assay.transform.PreparedTransform;
import org.labkey.api.assay.transform.TransformResult;
import org.labkey.api.audit.provider.FileSystemAuditProvider;
import org.labkey.api.qc.TsvDataExchangeHandler;
import org.labkey.api.query.DefaultSchema;
import org.labkey.api.query.PdLookupForeignKey;
Expand Down Expand Up @@ -108,6 +109,7 @@ public class AssayRunUploadForm<ProviderType extends AssayProvider> extends Prot
private List<AssayDataCollector> _collectors;
private TransformResult _transformResult = DefaultTransformResult.createEmptyResult();
private @Nullable PreparedTransform _preparedTransform;
private @Nullable List<FileSystemAuditProvider.FileSystemAuditEvent> _pendingFileAuditEvents;
private ExpRun _reRun;
private boolean _allowCrossRunFileInputs;

Expand Down Expand Up @@ -727,6 +729,18 @@ public void setPreparedTransform(@Nullable PreparedTransform prepared)
_preparedTransform = prepared;
}

@Override
public @Nullable List<FileSystemAuditProvider.FileSystemAuditEvent> getPendingFileAuditEvents()
{
return _pendingFileAuditEvents;
}

@Override
public void setPendingFileAuditEvents(@Nullable List<FileSystemAuditProvider.FileSystemAuditEvent> events)
{
_pendingFileAuditEvents = events;
}

@Override
public Long getReRunId()
{
Expand Down
15 changes: 15 additions & 0 deletions api/src/org/labkey/api/assay/pipeline/AssayRunAsyncContext.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import org.labkey.api.assay.transform.DefaultTransformResult;
import org.labkey.api.assay.transform.PreparedTransform;
import org.labkey.api.assay.transform.TransformResult;
import org.labkey.api.audit.provider.FileSystemAuditProvider;
import org.labkey.api.security.User;
import org.labkey.api.security.UserManager;
import org.labkey.api.view.ActionURL;
Expand All @@ -47,6 +48,7 @@
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

Expand Down Expand Up @@ -90,6 +92,7 @@ public class AssayRunAsyncContext<ProviderType extends AssayProvider> implements
private transient Set<Domain> _domains;
private transient TransformResult _transformResult;
private transient @Nullable PreparedTransform _preparedTransform;
private transient @Nullable List<FileSystemAuditProvider.FileSystemAuditEvent> _pendingFileAuditEvents;
private transient Logger _logger;

// async fields
Expand Down Expand Up @@ -404,6 +407,18 @@ public void setPreparedTransform(@Nullable PreparedTransform prepared)
_preparedTransform = prepared;
}

@Override
public @Nullable List<FileSystemAuditProvider.FileSystemAuditEvent> getPendingFileAuditEvents()
{
return _pendingFileAuditEvents;
}

@Override
public void setPendingFileAuditEvents(@Nullable List<FileSystemAuditProvider.FileSystemAuditEvent> events)
{
_pendingFileAuditEvents = events;
}

@Override
public Long getReRunId()
{
Expand Down
Loading