All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.duracloud.mill.audit.AuditLogWritingProcessor Maven / Gradle / Ivy

There is a newer version: 5.1.1
Show newest version
/*
 * The contents of this file are subject to the license and copyright
 * detailed in the LICENSE and NOTICE files at the root of the source
 * tree and available online at
 *
 *     http://duracloud.org/license/
 */
package org.duracloud.mill.audit;

import java.util.Date;
import java.util.Map;

import org.duracloud.audit.task.AuditTask;
import org.duracloud.mill.auditor.AuditLogStore;
import org.duracloud.mill.workman.TaskExecutionFailedException;
import org.duracloud.mill.workman.TaskProcessorBase;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.transaction.TransactionSystemException;

/**
 * As a processor of audit tasks as the name suggests, this class creates an
 * audit log entry and subsequently updates the content index.
 * 
 * @author Daniel Bernstein 
 *         Date: Mar 20, 2014
 */
public class AuditLogWritingProcessor extends TaskProcessorBase {
    private final Logger log = LoggerFactory.getLogger(AuditLogWritingProcessor.class);

    private AuditLogStore auditLogStore;
    private AuditTask task;

    public AuditLogWritingProcessor(AuditTask task,
            AuditLogStore auditLogStore) {
        super(task);
        this.auditLogStore = auditLogStore;
        this.task = task;
    }

    /* (non-Javadoc)
     * @see org.duracloud.mill.workman.TaskProcessorBase#executeImpl()
     */
    @Override
    protected void executeImpl() throws TaskExecutionFailedException {



        try {
            String account = task.getAccount();
            String storeId = task.getStoreId();
            String spaceId = task.getSpaceId();
            String contentId = task.getContentId();
            String action = task.getAction();
            Map props = task.getContentProperties();
            String acls = task.getSpaceACLs();
            Date timestamp = new Date(Long.valueOf(task.getDateTime()));
            
            auditLogStore.write(account, 
                                storeId, 
                                spaceId, 
                                contentId,
                                task.getContentChecksum(), 
                                task.getContentMimetype(),
                                task.getContentSize(), 
                                task.getUserId(), 
                                action,
                                props != null ? AuditLogStoreUtil.serialize(props) : null, 
                                acls,
                                task.getSourceSpaceId(), 
                                task.getSourceContentId(),
                                timestamp);

            log.debug("audit task successfully processed: {}", task);
        } catch(TransactionSystemException e){
            log.error("failed to write item  ( account={} storeId={} spaceId={} contentId={} timestamp={} ) " +
            	     "to the database due to a transactional error. Likely cause: duplicate entry. Details: {}. Ignoring...",
                     task.getAccount(),
                     task.getStoreId(),
                     task.getSpaceId(),
                     task.getContentId(),
                     new Date(Long.valueOf(task.getDateTime())),
                     e.getMessage());
        } catch (Exception e) {
            String message = "Failed to execute " + task + ": "
                    + e.getMessage();
            log.debug(message, e);
            throw new TaskExecutionFailedException(message, e);
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy