Skip to content

Commit

Permalink
Add error summary
Browse files Browse the repository at this point in the history
  • Loading branch information
sven1103 committed Apr 16, 2024
1 parent 9be9155 commit 6c2c6eb
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 13 deletions.
40 changes: 40 additions & 0 deletions src/main/java/life/qbic/data/processing/ErrorSummary.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package life.qbic.data.processing;

import java.util.HashMap;
import java.util.Map;

/**
* <b>Error Summary</b>
*
* <p>Provides the data submitter with some helpful contextual information about a
* registration failure</p>
*
* @since 1.0.0
*/
public record ErrorSummary(String taskId, String affectedDataset, String reason, String description,
Map<String, String> contextProperties) {

public static ErrorSummary create(String taskId, String affectedDataset, String reason,
String description, Map<String, String> contextProperties) {
return new ErrorSummary(taskId, affectedDataset, reason, description,
new HashMap<>(contextProperties));
}

public static ErrorSummary createSimple(String taskId, String affectedDataset, String reason,
String description) {
return new ErrorSummary(taskId, affectedDataset, reason, description, new HashMap<>());
}

@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("Task ID: ").append(taskId).append("\n");
sb.append("Affected Dataset: ").append(affectedDataset).append("\n");
sb.append("Reason: ").append(reason).append("\n");
sb.append("Description: ").append(description).append("\n");
for (Map.Entry<String, String> entry : contextProperties.entrySet()) {
sb.append(entry.getKey()).append(": ").append(entry.getValue()).append("\n");
}
return sb.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import java.util.regex.MatchResult;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import life.qbic.data.processing.ErrorSummary;
import life.qbic.data.processing.Provenance;
import life.qbic.data.processing.Provenance.ProvenanceException;
import org.apache.logging.log4j.Logger;
Expand Down Expand Up @@ -148,10 +149,12 @@ private void evaluateDirectory(File taskDir) {
moveToTargetDir(taskDir);
return;
}
String reason = "Missing measurement identifier: no known measurement id was found in the content of directory '%s'".formatted(
taskDir.getName());
LOG.error(reason);
moveBackToOrigin(taskDir, provenance, reason);
var errorMessage = ErrorSummary.createSimple(taskDir.getName(), dataset.getName(), "Missing QBiC measurement ID",
"For a successful registration please provide the pre-registered QBiC measurement ID");
LOG.error(
"Missing measurement identifier: no known measurement id was found in the content of directory '%s' in task '%s'".formatted(
dataset.getName(), taskDir.getName()));
moveBackToOrigin(taskDir, provenance, errorMessage.toString());
}

private Optional<File> findDataset(File taskDir) {
Expand All @@ -177,7 +180,8 @@ private void moveBackToOrigin(File taskDir, Provenance provenance, String reason
Files.writeString(errorFile.toPath(), reason);
Paths.get(provenance.userWorkDirectoryPath).resolve(usersErrorDirectory).toFile().mkdir();
Files.move(taskDir.toPath(),
Paths.get(provenance.userWorkDirectoryPath).resolve(usersErrorDirectory).resolve(taskDir.getName()));
Paths.get(provenance.userWorkDirectoryPath).resolve(usersErrorDirectory)
.resolve(taskDir.getName()));
} catch (IOException e) {
LOG.error("Cannot move task to user intervention: %s".formatted(provenance.originPath), e);
moveToSystemIntervention(taskDir, e.getMessage());
Expand Down
10 changes: 2 additions & 8 deletions src/main/java/life/qbic/data/processing/scanner/Scanner.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ public class Scanner extends Thread {
private final HashSet<Path> userProcessDirectories = new HashSet<>();
private final ConcurrentRegistrationQueue registrationQueue;
private final HashSet<RegistrationRequest> submittedRequests = new HashSet<>();
private final Path usersErrorDirectory;

public Scanner(ScannerConfiguration scannerConfiguration,
ConcurrentRegistrationQueue registrationQueue, GlobalConfig globalConfig) {
Expand All @@ -53,8 +52,7 @@ public Scanner(ScannerConfiguration scannerConfiguration,
}
this.scanInterval = scannerConfiguration.scanInterval();
this.registrationQueue = Objects.requireNonNull(registrationQueue,
"eventQueue must not be null");
this.usersErrorDirectory = globalConfig.usersErrorDirectory();
"registrationQueue must not be null");
}

@Override
Expand Down Expand Up @@ -97,15 +95,11 @@ private List<RegistrationRequest> detectDataForRegistration() {
Collection::stream).toList();
}

private boolean isNotErrorFolder(File folder) {
return !folder.getName().equals(usersErrorDirectory.getFileName());
}

private List<RegistrationRequest> createRequests(File[] files, Path userDirectory) {
if (files == null || files.length == 0) {
return new ArrayList<>();
}
return Arrays.stream(files).filter(file -> !file.isHidden()).filter(this::isNotErrorFolder)
return Arrays.stream(files).filter(file -> !file.isHidden())
.map(file -> createRequest(file, userDirectory)).toList();
}

Expand Down

0 comments on commit 6c2c6eb

Please sign in to comment.