Difference between revisions of "Execution engine"
(→Security context) |
|||
(39 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
+ | == CEP (Complex Event Processing — now called Event Stream Processing) == | ||
+ | AMTech execution engine is an implementation of a [https://en.wikipedia.org/wiki/Complex_event_processing CEP]; it encapsulates CEP's complexity in the [[IoT_Domain_Application_Protocol|DAP]] design. | ||
+ | |||
== Execution feedback and/or errors == | == Execution feedback and/or errors == | ||
When an activity is being executed by the execution engine an observationlifecycle type is sent to the ''activity_lifecycle'' topic. Some events are reported through the property '''event''', among this events: | When an activity is being executed by the execution engine an observationlifecycle type is sent to the ''activity_lifecycle'' topic. Some events are reported through the property '''event''', among this events: | ||
Line 23: | Line 26: | ||
== Security context == | == Security context == | ||
− | + | Reasoners are executed with the security info (user and tenant) of the user that sent the observation that triggered the reasoner | |
− | + | * The observer is executed with these credentials so the things returned will be the ones accessible to it (things that belong to the user/tenant or that are shared with it) | |
− | * | + | * Actions are executed with these credentials |
− | * | + | ** Access to types is checked using the user's actors |
− | + | ** Access to instances is checked using the user's tenant | |
− | + | * Actions that create resources (things, observations, notifications, etc) will initialize the security properties of the resource being created with the security info of the observation (ex. guest tenants, guest users) | |
− | + | ||
== Extension module == | == Extension module == | ||
===EPC=== | ===EPC=== | ||
+ | [https://en.wikipedia.org/wiki/Electronic_Product_Code Electronic product code] | ||
+ | Tag Data Translation implemented according to the GS1 EPC Tag Data Translation 1.6 specification (http://www.gs1.org/epc/tag-data-translation-standard) | ||
+ | Exposed as 2 JavaScript functions available for reasoner's JavaScript binding: | ||
+ | * epcEncode | ||
+ | * epcDecode | ||
+ | |||
+ | They support the following codings: | ||
+ | *SGTIN-96, SGTIN-198, SSCC-96, SGLN-96, SGLN-195, GRAI-96, GRAI-170, GSRN-96, GSRNP-96, GDTI-96, GDTI-174, GID-96. | ||
+ | |||
===Debug=== | ===Debug=== | ||
+ | [[Debug_%26_check_a_reasoner#Debug|(See check reasoner)]] | ||
+ | |||
+ | ===Geospatial libraries=== | ||
+ | A couple of libraries are available in JavaScript bindings: | ||
+ | * [https://www.npmjs.com/package/geolib geolib] | ||
+ | * [https://www.npmjs.com/package/terraformer terraformer] | ||
+ | |||
+ | You can make use of these libraries using the variables geolib and terraformer that are initialized as follows: | ||
+ | <syntaxhighlight lang="javascript"> | ||
+ | var geolib = require('geolib'); | ||
+ | var terraformer = require('terraformer'); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Example binding location property to a new created geofence thing, using the location from observation and calculating a circle with 300 radius | ||
+ | <syntaxhighlight lang="javascript"> | ||
+ | function(observation) | ||
+ | { | ||
+ | var location; | ||
+ | //get wkt json | ||
+ | var loc = JSON.parse(observation.location); | ||
+ | //parse longitude and latitude from wkt text | ||
+ | var point = terraformer.WKT.parse(loc.wkt); | ||
+ | //create a circle with 100 metres radius | ||
+ | var circle = new terraformer.Circle([point.coordinates[0], point.coordinates[1]], 100, 64); | ||
+ | //create location wkt | ||
+ | location = terraformer.WKT.convert(circle.geometry); | ||
+ | //wkt poligon location bind to created geofence thing | ||
+ | return location; | ||
+ | } | ||
+ | </syntaxhighlight> |
Latest revision as of 10:08, 30 July 2018
Contents
CEP (Complex Event Processing — now called Event Stream Processing)
AMTech execution engine is an implementation of a CEP; it encapsulates CEP's complexity in the DAP design.
Execution feedback and/or errors
When an activity is being executed by the execution engine an observationlifecycle type is sent to the activity_lifecycle topic. Some events are reported through the property event, among this events:
- Start of a reasoner (BEGIN)
- End of a reasoner (END)
- Execution errors (ERROR)
The following example illustrates activity "producer": "thingsInBoardroom" reporting action "resourceuri": "/amtech/activities/thingsInBoardroom/reasoners/createThingInBoardroomFromEddystoneBeacon/actions/ReportThingInBoardroom" started "event": "BEGIN"
{
"topic": "/activity_lifecycle/thingsInBoardroom",
"guesttenants": [
"_ALL"
],
"event": "BEGIN",
"@type": "/amtech/linkeddata/types/composite/observation/observationlifecycle",
"producer": "thingsInBoardroom",
"resourceuri": "/amtech/activities/thingsInBoardroom/reasoners/createThingInBoardroomFromEddystoneBeacon/actions/ReportThingInBoardroom",
"detectiontime": "Tue Apr 26 21:41:09 UTC 2016",
"@id": "/amtech/things/observations/983c488f-c3d4-44ec-85f2-795428d12d83",
"occurrencetime": "Tue Apr 26 21:41:08 UTC 2016"
}
- This is a strong mechanism you can use to trace the execution of your activities if, at a given moment, you think they are not working as expected.
Security context
Reasoners are executed with the security info (user and tenant) of the user that sent the observation that triggered the reasoner
- The observer is executed with these credentials so the things returned will be the ones accessible to it (things that belong to the user/tenant or that are shared with it)
- Actions are executed with these credentials
- Access to types is checked using the user's actors
- Access to instances is checked using the user's tenant
- Actions that create resources (things, observations, notifications, etc) will initialize the security properties of the resource being created with the security info of the observation (ex. guest tenants, guest users)
Extension module
EPC
Electronic product code Tag Data Translation implemented according to the GS1 EPC Tag Data Translation 1.6 specification (http://www.gs1.org/epc/tag-data-translation-standard) Exposed as 2 JavaScript functions available for reasoner's JavaScript binding:
* epcEncode * epcDecode
They support the following codings:
- SGTIN-96, SGTIN-198, SSCC-96, SGLN-96, SGLN-195, GRAI-96, GRAI-170, GSRN-96, GSRNP-96, GDTI-96, GDTI-174, GID-96.
Debug
Geospatial libraries
A couple of libraries are available in JavaScript bindings:
You can make use of these libraries using the variables geolib and terraformer that are initialized as follows:
var geolib = require('geolib');
var terraformer = require('terraformer');
Example binding location property to a new created geofence thing, using the location from observation and calculating a circle with 300 radius
function(observation)
{
var location;
//get wkt json
var loc = JSON.parse(observation.location);
//parse longitude and latitude from wkt text
var point = terraformer.WKT.parse(loc.wkt);
//create a circle with 100 metres radius
var circle = new terraformer.Circle([point.coordinates[0], point.coordinates[1]], 100, 64);
//create location wkt
location = terraformer.WKT.convert(circle.geometry);
//wkt poligon location bind to created geofence thing
return location;
}