Peltas.io logo

Overview Edit

Peltas can process different Alfresco sources and output the data to a normalised structure.

Peltas is a “No ETL” tool for Alfresco. It is based on robust and known frameworks such as Spring Boot, Spring Batch and Spring Integrations. We offer an innovative way of processing Alfresco Audit entries and Alfresco live nodes, in order to write them to a database, a flat file, eleastic search, a custom REST API or any other target.

Peltas is made to work with the out of the box Alfresco audit (alfresco-access) application and is easily configurable to work with any custom Alfresco audit applications if required.

With us you can easily and rapidly gain insights in your Alfresco data.

Alfresco (Audit or Live workspace) data sources are configured with the same configuration. However, only one source can be processed at once. This means that one source can be accessed with one Peltas instance and that you would need to run several Peltas instances in order to access two or more different sources. For its safe execution, Peltas needs a database and therfore it requires a JDBC connection.

Getting Started Edit

Peltas for Alfresco can be configured to process Alfresco Audit data or Alfresco live workspace data sources.

Alfresco Audit nodes extraction

Alfresco live workspace data processing and extraction

Custom Alfresco audit applications processing

Write results to any JDBC database or any other custom target such as Elastic Search, flat files or REST APIs.

Peltas entry points are “evaluators”, which triggers the processing of an entry. After the trigger has been recognized we process the mapped properties and store them to the target storage with different executions.

 peltas
   documentcreated
     evaluator: /alfresco-access/transaction/action=CREATE
     mapper
       property
       action.data: /alfresco-access/transaction/action
       user.data: /alfresco-access/transaction/user
     execution: batch_bi_case
     executions
       batch_bi_case
         insert: insert into batch_bi_case (creator, created, ...) values(:user, :audit.time, ...)
 peltas.documentcreated.evaluator=/alfresco-access/transaction/action=CREATE
 peltas.documentcreated.mapper.property.action.data=/alfresco-access/transaction/action
 peltas.documentcreated.mapper.property.user.data=/alfresco-access/transaction/user	   
 peltas.documentcreated.execution=batch_bi_case
 peltas.documentcreated.executions.batch_bi_case.insert=insert into batch_bi_case (creator, created, ...) values(:user, :audit.time, ...)
peltas.datasource.url= jdbc:...
peltas.datasource.driverClassName= ..
peltas.datasource.username= ...
peltas.datasource.password= ...

Authentication Edit

Standard Basic HTTP Authtentication.

HTTPS => Basic HTTP over SSL.

Kerberos Authentication

X.509 Certificate Authentication.

For Alfresco Audit audit, we use the same authentication that you already have in your Alfresco autehntication chain. And for Alfresco live workspace data, we use the authentication mechanism you have in place between SOLR and Alfresco.

peltas.auth.type=basicauth|x509
 peltas.auth.basic.username=YOUR_username
 peltas.auth.basic.password=YOUR_password
 peltas.ssl.keystoreType=JCEKS
 peltas.ssl.trustStore=PATH...
 peltas.ssl.trustStorePass=xxxx
 peltas.ssl.hostVerify=false
 TBD
 peltas.auth.x509.keyStore=PATH...
 peltas.auth.x509.keyStorePass=xxxx
 peltas.auth.x509.keystoreType=JCEKS

Transactions Edit

Transactions are handled by batch job chunks. Peltas handles in a safe manner where the last job has left and once Peltas is restarted the new job will continue its processing from the correct entry.

peltas.chunksize=10

Action evaluator Edit

An evaluator is used in order to check if an entry should be processed.

Once the condition is satisfied the extraction will start in Peltas and all the mapping properties will be processed.

Evaluators could be combined with an “|” (pipe charachter) operator, which represents an “AND”.

peltas.documentcreated.evaluator=/alfresco-access/transaction/action=CREATE
peltas.documentcreated.evaluator=/alfresco-access/transaction/action=CREATE|/alfresco-access/transaction/type=cm:content
peltas.documentcreated.evaluator=/alfresco-access/transaction/aspects/add=contains<>{http://www.alfresco.org/model/content/1.0}versionable
{
  "id": 77,
  "application": "alfresco-access",
  "user": "admin",
  "time": "2018-05-26T17:16:36.371+02:00",
  "values": 
  {
    "/alfresco-access/transaction/action": "CREATE",
    "/alfresco-access/transaction/type": "cm:content"
  }
}

Properties Edit

Property mapping

Any Alfresco property or aspect can be tracked and mapped. While a single valued property is easily understood, a property with a list of values would need extra configuration in order to map the data. Therefor, Peltas offers processing of data collections too.

This is how we can map/format an audit property and/or an Alfresco property. Also note, that a property could converted to another Java type, a Date for instance.

peltas.documentcreated.mapper.property.path.data=/alfresco-access/transaction/path
peltas.documentcreated.mapper.property.creator.data=/alfresco-access/transaction/properties/add@{http://www.alfresco.org/model/content/1.0}creator
peltas.documentcreated.mapper.property.author.data=/alfresco-access/transaction/properties/add@{http://www.alfresco.org/model/content/1.0}author
peltas.documentcreated.mapper.property.nodeRef.format=%s://%s/%s
peltas.documentcreated.mapper.property.nodeRef.data=/alfresco-access/transaction/properties/add@{http://www.alfresco.org/model/system/1.0}store-protocol,/alfresco-access/transaction/properties/add@{http://www.alfresco.org/model/system/1.0}store-identifier,/alfresco-access/transaction/properties/add@{http://www.alfresco.org/model/system/1.0}node-uuid
peltas.documentcreated.mapper.property.created.data=/alfresco-access/transaction/properties/add@{http://www.alfresco.org/model/content/1.0}created
peltas.documentcreated.mapper.property.created.type=java.util.Date
peltas.documentcreated.mapper.property.description.data=/alfresco-access/transaction/properties/add@{http://www.alfresco.org/model/content/1.0}description
peltas.documentcreated.mapper.property.description.type=java.util.HashMap
{
  "id": 77,
  "application": "alfresco-access",
  "user": "admin",
  "time": "2018-05-26T17:16:36.371+02:00",
  "values": 
  {
    "...": "...",
    "/alfresco-access/transaction/path":"/app:company_home/cm:Flow Reporting Data Spec.xlsx",
    "/alfresco-access/transaction/properties/add":"{{http://www.alfresco.org/model/content/1.0}creator=admin,{http://www.alfresco.org/model/content/1.0}created=Mon May 28 10:24:42 CEST 2018}"
  }
}
{
  "values": 
  {
    "...": "...",
    "/alfresco-access/transaction/path":"/app:company_home/cm:Flow Reporting Data Spec.xlsx",
    "/alfresco-access/transaction/properties/add":"{{http://www.alfresco.org/model/system/1.0}node-uuid=86b50e20-9bb1-4942-bd2d-96f83c4a7843, {http://www.alfresco.org/model/system/1.0}store-protocol=workspace, {http://www.alfresco.org/model/system/1.0}store-identifier=SpacesStore"
  }
}

Expressions Edit

Expression property mapping

Peltas expressions can be seen as virtual properties. Where an expression property always references a mapped property and provides a facility to change the format or convert the data value. The property has to be prefixed with prop: in oprder to be considered as an expression and it has to reference a preivously configured property.

peltas.documentcreated.mapper.property.createdFormatted.data=prop:created
peltas.documentcreated.mapper.property.createdFormatted.format=yyyyMMdd
peltas.documentcreated.mapper.property.createdFormatted.type=java.lang.String

Executions Edit

Execution configuration

An execution is a command that will be used to write the data to the target storage. Peltas supports different type of targets such as databases, SOLR, Elastic Search, CSV files, flat files, etc …

Each data writer consist of its own specific configuration

Executions could be chained and each previous execution data is available in the next one (i.e. for referential integrity).

Below you can see our database writer configuration sample.

peltas.documentcreated.execution=bi_case
peltas.documentcreated.executions.bi_case.insert=insert into bi_case (path, creator, created) values(:path, :user, :audit.time)
peltas.documentcreated.execution=bi_case,bi_case_action
peltas.documentcreated.executions.bi_case.insert=insert into bi_case (path, creator, created) values(:path, :user, :audit.time)
peltas.documentcreated.executions.bi_case_action.insert=insert into batch_bi_case_action (case_id, type, action, "user", "time") values(:bi_case.id, :type, :action, :audit.user, :audit.time)

Aspects Edit

Aspects and collection values mapping

List of aspects can be seen as any Alfresco multi valued property and that is how Peltas access such data. A collection is configurable from within an execution.

peltas.documentcreated.executions.bi_case_action.collections.aspect.key=/alfresco-access/transaction/aspects/add
peltas.documentcreated.executions.bi_case_action.collections.aspect.insert= insert into bi_case_action_aspect (action_id, aspect) values(:bi_case_action.id, :aspect)
peltas.documentcreated.executions.bi_case_action.collections.myMultiProperty.key=/alfresco-access/transaction/properties/add@{http://www.acme.org/model/1.0}multiValue
peltas.documentcreated.executions.bi_case_action.collections.myMultiProperty.insert= insert into bi_case_action_aspect (action_id, aspect) values(:bi_case_action.id, :myMultiProperty)