/** * Composes an {@link Package.Events#INGEST_FAIL INGEST_FAIL} event, setting the event outcome to the first line of * the supplied {@code Exception}, and putting the full stack trace of the {@code Exception} in the event detail. * The target of the event is set to the {@code depositId}. * <p/> * This method does <em>not</em> add the event to the ingest state. * * @param depositId the id of the deposit that failed * @param state the ingest state associated with the deposit, used to create the failure event * @param t the exception that caused the deposit to fail * @return the failure event, with the date, outcome, and detail populated */ private DcsEvent failureEvent(String depositId, IngestWorkflowState state, Throwable t) { final DcsEvent failureEvent = state.getEventManager().newEvent(Package.Events.INGEST_FAIL); failureEvent.setOutcome("Ingest " + depositId + " failed: " + t.getMessage()); ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintStream ps = new PrintStream(baos); t.printStackTrace(ps); failureEvent.setDetail(new String(baos.toByteArray())); failureEvent.addTargets(new DcsEntityReference(depositId)); return failureEvent; }
/** * Creates a {@link org.dataconservancy.packaging.ingest.api.Package.Events#FILE_EXTRACTION} event, representing all of the files that were extracted from * the Package, and adds it to the ingest state. * * @param depositId the deposit (transaction) identifier * @param archiveFileName the original name of the package file that was uploaded * @param extractedFiles a list of files extracted from the package * @param state the ingest state * @throws IOException */ void addExtractionEvent(String depositId, String archiveFileName, List<File> extractedFiles, IngestWorkflowState state) throws IOException { final PackageSerialization ser = state.getPackage().getSerialization(); DcsEvent extractionEvent = state.getEventManager().newEvent(Package.Events.FILE_EXTRACTION); extractionEvent.setOutcome(String.valueOf(extractedFiles.size())); extractionEvent.setDetail("Extracted " + extractedFiles.size() + " files from " + archiveFileName + " to " + new File(ser.getExtractDir(), ser.getBaseDir().getPath()).getAbsolutePath() + "(" + depositId + ")"); for (File f : extractedFiles) { extractionEvent.addTargets(new DcsEntityReference(f.getCanonicalPath())); } state.getEventManager().addEvent(depositId, extractionEvent); }
eventComplete.addTargets(new DcsEntityReference(archive_id)); String archiveId = e.getValue(); DcsEvent identifierAssignment = em.newEvent("identifier.assignment"); identifierAssignment.addTargets(new DcsEntityReference(archiveId)); identifierAssignment.setOutcome(originalId + " to " + archiveId); identifierAssignment.setDetail("Assigned archive id " + archiveId + " to " + originalId);
eventComplete.addTargets(new DcsEntityReference(archive_id)); String archiveId = e.getValue(); DcsEvent identifierAssignment = em.newEvent("identifier.assignment"); identifierAssignment.addTargets(new DcsEntityReference(archiveId)); identifierAssignment.setOutcome(originalId + " to " + archiveId); identifierAssignment.setDetail("Assigned archive id " + archiveId + " to " + originalId);
private String addIngestEvent(Dcp sip, String ingestId) { DcsEvent event = eventManager.newEvent(Events.DEPOSIT); event.setDetail(ingestId); for (DcsCollection c : sip.getCollections()) { event.addTargets(new DcsEntityReference(c.getId())); } for (DcsEntity du : sip.getDeliverableUnits()) { event.addTargets(new DcsEntityReference(du.getId())); } for (DcsManifestation m : sip.getManifestations()) { event.addTargets(new DcsEntityReference(m.getId())); } for (DcsFile f : sip.getFiles()) { event.addTargets(new DcsEntityReference(f.getId())); } for (DcsEvent e : sip.getEvents()) { event.addTargets(new DcsEntityReference(e.getId())); } eventManager.addEvent(ingestId, event); return ingestId; }
private void sendEvent(EventManager manager, String id, String outcome, String details, MetadataFile file) { // Send the event, using the outcome and any error/warning messages. DcsEvent event = manager.newEvent(Package.Events.METADATA_FILE_VALIDATED); event.setOutcome(outcome); event.setDetail(details); event.addTargets(new DcsEntityReference(file.getId())); manager.addEvent(id, event); } }
private void sendEvent(EventManager manager, String id, String outcome, String details, MetadataFile file) { // Send the event, using the outcome and any error/warning messages. DcsEvent event = manager.newEvent(Package.Events.METADATA_FILE_VALIDATED); event.setOutcome(outcome); event.setDetail(details); event.addTargets(new DcsEntityReference(file.getId())); manager.addEvent(id, event); } }
event.setDetail("One or more asserted formats for file " + file.getPath().substring(baseDir.getPath().length()) + " was successfully verified against detected formats: " + detectedFormatURIs); event.addTargets(currentRef); state.getEventManager().addEvent(depositId, event); failureEvent.setDetail("One or more asserted formats for file " + file.getPath().substring(baseDir.getPath().length()) + " was not amongst detected formats: " + detectedFormatURIs); failureEvent.addTargets(currentRef); state.getEventManager().addEvent(depositId, failureEvent);
/** * Composes and adds a phase complete event to the state. * * @param depositId the deposit id * @param state the state associated with the deposit */ private void addPhaseComplete(long start, String depositId, IngestWorkflowState state, List<Class<? extends StatefulIngestService>> completedServices) { DcsEvent e = state.getEventManager().newEvent(Package.Events.INGEST_PHASE_COMPLETE); // outcome e.setOutcome(String.valueOf(state.getIngestPhase().getPhaseNumber())); // detail e.setDetail("Completed ingest phase " + state.getIngestPhase().getPhaseNumber() + " for deposit id " + depositId); // target for (Class<? extends StatefulIngestService> service : completedServices) { e.addTargets(new DcsEntityReference(service.getName())); } state.getEventManager().addEvent(depositId, e); log.info("Ingest phase {} (of {}) for deposit id {} completed in {} ms", new Object[]{state.getIngestPhase().getPhaseNumber(), ingestServicesMap.keySet().size(), depositId, (System.currentTimeMillis() - start)}); }
/** * Creates a {@link org.dataconservancy.packaging.ingest.api.Package.Events#DEPOSIT} event, representing the receipt of the Package, and adds it to the * ingest state. * * @param metadata map of metadata using HTTP header conventions * @param depositId the deposit (transaction) identifier * @param state the ingest state */ void addDepositEvent(Map<String, String> metadata, String depositId, IngestWorkflowState state) { DcsEvent depositEvent = state.getEventManager().newEvent(org.dataconservancy.packaging.ingest.api.Package.Events.DEPOSIT); depositEvent.setOutcome(depositId); depositEvent.addTargets(new DcsEntityReference(filenameFromHeader(metadata))); depositEvent.setDetail("Accepted package named " + filenameFromHeader(metadata) + " on " + depositEvent.getDate() + " deposited by " + metadata.get(Http.Header.X_DCS_AUTHENTICATED_USER)); state.getEventManager().addEvent(depositId, depositEvent); }
DcsEvent unresumableIngestEvent = state.getEventManager().newEvent(Package.Events.UNRESUMABLE_INGEST); unresumableIngestEvent.setOutcome("Unable resume ingest on " + DateTime.now().toString()); unresumableIngestEvent.addTargets(new DcsEntityReference(deposit_id)); state.getEventManager().addEvent(deposit_id, unresumableIngestEvent);
/** * Composes an {@link Package.Events#INGEST_START} event and adds it to the workflow state. * * @param depositId the deposit ID of the ingest being started * @param state the ingest state associated with the deposit ID */ private void addStartEvent(String depositId, IngestWorkflowState state) { DcsEvent ingestStart = state.getEventManager().newEvent(Package.Events.INGEST_START); ingestStart.setOutcome(depositId); ingestStart.setDetail("Ingest " + depositId + " started"); for (File file : state.getPackage().getSerialization().getFiles()) { ingestStart.addTargets(new DcsEntityReference(file.getPath())); } state.getEventManager().addEvent(depositId, ingestStart); }
/** * Composes and adds a phase start event to the state. * * @param depositId the deposit id * @param state the state associated with the deposit */ private void addPhaseStartEvent(String depositId, IngestWorkflowState state) { DcsEvent e = state.getEventManager().newEvent(Package.Events.INGEST_PHASE_START); // outcome e.setOutcome(String.valueOf(state.getIngestPhase().getPhaseNumber())); // detail e.setDetail("Started ingest phase " + state.getIngestPhase().getPhaseNumber() + " for deposit id " + depositId); // target for (StatefulIngestService service : ingestServicesMap.get(state.getIngestPhase())) { e.addTargets(new DcsEntityReference(service.getName())); } state.getEventManager().addEvent(depositId, e); }
@Override public void execute(String depositId, IngestWorkflowState state) throws StatefulIngestServiceException { for (DcsEvent event : state.getEventManager().getEvents(depositId, Package.Events.METADATA_FILE_VALIDATED)) { if (!event.getTargets().isEmpty()) { if (event.getOutcome().equals(Package.Outcomes.SUCCESS)) { MetadataFile file = (MetadataFile)state.getBusinessObjectManager().get(event.getTargets().iterator().next().getRef()); MetadataResult result = metadataBizService.extractMetadata(file); String outcome = Package.Outcomes.SUCCESS; String extractionMessages = ""; if (!result.getMetadataExtractionErrors().isEmpty()) { outcome = Package.Outcomes.FAILURE; for (MetadataEventMessage error : result.getMetadataExtractionErrors()) { extractionMessages += error.getMessage() + "<\br>"; } } // Send the event, using the outcome and any error/warning messages. DcsEvent extractionEvent = state.getEventManager().newEvent(Package.Events.METADATA_FILE_EXTRACTION); extractionEvent.setOutcome(outcome); extractionEvent.setDetail(extractionMessages); extractionEvent.addTargets(new DcsEntityReference(file.getId())); state.getEventManager().addEvent(depositId, extractionEvent); } } } } }
@Override public void execute(String depositId, IngestWorkflowState state) throws StatefulIngestServiceException { for (DcsEvent event : state.getEventManager().getEvents(depositId, Package.Events.METADATA_FILE_VALIDATED)) { if (!event.getTargets().isEmpty()) { if (event.getOutcome().equals(Package.Outcomes.SUCCESS)) { MetadataFile file = (MetadataFile)state.getBusinessObjectManager().get(event.getTargets().iterator().next().getRef()); MetadataResult result = metadataBizService.extractMetadata(file); String outcome = Package.Outcomes.SUCCESS; String extractionMessages = ""; if (!result.getMetadataExtractionErrors().isEmpty()) { outcome = Package.Outcomes.FAILURE; for (MetadataEventMessage error : result.getMetadataExtractionErrors()) { extractionMessages += error.getMessage() + "<\br>"; } } // Send the event, using the outcome and any error/warning messages. DcsEvent extractionEvent = state.getEventManager().newEvent(Package.Events.METADATA_FILE_EXTRACTION); extractionEvent.setOutcome(outcome); extractionEvent.setDetail(extractionMessages); extractionEvent.addTargets(new DcsEntityReference(file.getId())); state.getEventManager().addEvent(depositId, extractionEvent); } } } } }
final String ref = reader.getAttribute(A_REF); if (!isEmptyOrNull(ref)) { event.addTargets(new DcsEntityReference(ref));
final String ref = reader.getAttribute(A_REF); if (!isEmptyOrNull(ref)) { event.addTargets(new DcsEntityReference(ref));
DcsEvent event = state.getEventManager().newEvent(Package.Events.FILE_SIZE_MISMATCH); event.setDetail("File size does not match user supplied size: " + localId); event.addTargets(new DcsEntityReference(df.getId()));