The proposed implementation of the audit service is to use the existing eventing system, Camel workflow engine, and external triplestore.
The first phase of implementation will be to use the existing event system to emit messages about audit events, process those events with Camel, and creating RDF for events in an external triplestore. The primary goal of this phase is to satisfy the audit service requirements with minimal impact on the repository.
The second phase of the implementation will be to create an optional component for persisting audit information in the repository. The primary goal of this phase is to improve the durability of the audit persistence using the repository.
Following the Audit Service PROV-O vs PREMIS guidelines, a typical event encoded in RDF would look like this:
@prefix audit: <http://fedora.info/definitions/v4/audit#> . @prefix fedora: <http://fedora.info/definitions/v4/repository#> . @prefix foaf: <http://xmlns.com/foaf/0.1/> . @prefix premis: <http://www.loc.gov/premis/rdf/v1#> . @prefix prov: <http://www.w3.org/ns/prov#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . <event1> a prov:InstantaneousEvent, premis:Event, audit:InternalEvent ; premis:hasEventRelatedAgent "jquser"^^xsd:string, "Client Software v1.2.3"^^xsd:string . premis:hasEventType <http://id.loc.gov/vocabulary/preservationEvents/cre> ; premis:hasEventRelatedObject <http://localhost:8080/rest/55/59/ec/05/5559ec05-6ab1-4d61-905a-a5f3da360b23> ; premis:hasEventDateTime "2012-04-30T20:40:40"^^xsd:dateTime . |
External events (either directly added to a triplestore or created using the REST API in phase 2), should include the rdf:type audit:ExternalEvent to differentiate them from internal events.
Fixity events will also include the checksum generated:
<event1> premis:hasFixity <event1#fixity1> ; premis:EventOutcomeInformation "SUCCESS" . <event1#fixity1> a premis:Fixity ; premis:hasMessageDigest "cf23df2207d99a74fbe169e3eba035e633b65d94"^^xsd:string ; premis:hasMessageDigestAlgorithm "SHA1"^^xsd:string . |
<event1> a prov:InstantaneousEvent, premis:Event ; premis:hasEventRelatedAgent <agent1> ; <agent1> a premis:Agent ; premis:agentType <http://id.loc.gov/vocabulary/preservation/agentType/sof> ; foaf:name "Client Software v1.2.3"^^xsd:String ; prov:actedOnBehalfOf <agent2> . <agent2> a premis:Agent ; premis:agentType <http://id.loc.gov/vocabulary/preservation/agentType/per> ; foaf:nick "jquser"^^xsd:String . |