Audit queries

- Any combination of application (e.g. RM, repo, etc), user and time
 - TODO: Extend queries to support finding audit entries by arbitrary audited values
 - TODO: Full map retrieval in single query


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@16086 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Derek Hulley
2009-09-04 00:34:28 +00:00
parent 4f60e2608d
commit 034027961d
26 changed files with 843 additions and 212 deletions

View File

@@ -34,6 +34,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.repo.audit.extractor.DataExtractor;
import org.alfresco.repo.audit.generator.DataGenerator;
import org.alfresco.repo.audit.model.AuditApplication;
@@ -49,6 +50,7 @@ import org.alfresco.service.Auditable;
import org.alfresco.service.NotAuditable;
import org.alfresco.service.PublicService;
import org.alfresco.service.cmr.audit.AuditInfo;
import org.alfresco.service.cmr.audit.AuditService.AuditQueryCallback;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
@@ -883,30 +885,16 @@ public class AuditComponentImpl implements AuditComponent
final Serializable data;
try
{
data = extractor.convert(value);
data = extractor.extractData(value);
}
catch (Throwable e)
{
Log extractorLogger = LogFactory.getLog(extractor.getClass());
if (extractorLogger.isDebugEnabled())
{
extractorLogger.debug(
"Failed to extract audit data: \n" +
" Path: " + path + "\n" +
" Raw value: " + value + "\n" +
" Extractor: " + extractor,
e);
}
else
{
extractorLogger.warn(
"Failed to extract audit data (turn on DEBUG for full stack): \n" +
" Path: " + path + "\n" +
" Raw value: " + value + "\n" +
" Extractor: " + extractor + "\n" +
" Error: " + e.getMessage());
}
continue;
throw new AlfrescoRuntimeException(
"Failed to extract audit data: \n" +
" Path: " + path + "\n" +
" Raw value: " + value + "\n" +
" Extractor: " + extractor,
e);
}
// Add it to the map
newData.put(extractorPath, data);
@@ -943,24 +931,11 @@ public class AuditComponentImpl implements AuditComponent
}
catch (Throwable e)
{
Log generatorLogger = LogFactory.getLog(generator.getClass());
if (generatorLogger.isDebugEnabled())
{
generatorLogger.debug(
"Failed to generate audit data: \n" +
" Path: " + path + "\n" +
" Generator: " + generator,
e);
}
else
{
generatorLogger.warn(
"Failed to generate audit data (turn on DEBUG for full stack): \n" +
" Path: " + path + "\n" +
" Generator: " + generator + "\n" +
" Error: " + e.getMessage());
}
continue;
throw new AlfrescoRuntimeException(
"Failed to generate audit data: \n" +
" Path: " + path + "\n" +
" Generator: " + generator,
e);
}
// Add it to the map
newData.put(path, data);
@@ -968,4 +943,27 @@ public class AuditComponentImpl implements AuditComponent
// Done
return newData;
}
/**
* {@inheritDoc}
*/
public void auditQuery(
AuditQueryCallback callback,
String applicationName,
String user,
Long from,
Long to,
int maxResults)
{
ParameterCheck.mandatory("callback", callback);
// Shortcuts
if (from != null && to != null && from.compareTo(to) > 0)
{
// Time range can't yield results
return;
}
auditDAO.findAuditEntries(callback, applicationName, user, from, to, maxResults);
}
}