This document outlines the changes to the BitBrew platform and management API that will be released Aug 5, 2019. Changes should be carefully read and understood.
Table of Contents
New formatting option for data delivered to Amazon DynamoDB
Rules are now editable
Destination testing
New Formatting Option for Data Delivered to AWS DynamoDB
Overview
When creating or editing a DynamoDB destination, users now have two options for formatting the way data will be written to the Dynamo table:
Document
Columns
The first option preserves current formatting, which has a number of static columns, including a column called message
which contains all of the event information.
The second option 'flattens' the event being written to the database, so that every key in the JSON of the event is a column. Column names reflect the nesting of the event with concatenated, period-delimited keys.
API Calls
POST /v1/tenants/{tenantId}destinations/dynamodb
Request Body
{
"name”: “bitbrew-demo",
"awsClientId”: “ALBQTAJ3VZIGZFWVA ",
"awsClientSecret”: “4YrGdIZ9WIa1ndVvIMw1fKDBf9H34atqvZ0LbA6VVm ",
"awsRegion": "us-east-2",
"tableName": "VinsByDeviceId",
"format": "Columns"
}
Response 200
{
"id": "3fa6450a-3379-407c-a765-79297cd521e5",
"type": "dynamodb",
"name": "bitbrew-demo",
"messagesPendingDelivery": 0,
"awsClientId": "ALBQTAJ3VZIGZFWVA ",
"awsRegion": "us-east-2",
"tableName": "VinsByDeviceId",
"format": "Columns"
}
See more on our API documentation.
What Does It Mean?
Because of the way BitBrew previously wrote data into DynamoDB, users could not create secondary indexes on attributes in their event data because it was nested in a JSON document. With the new column option, every key in the event body or header is an option for indexing.
Rules Are Now Editable
You can now edit an existing rule with the following method:
PUT v1/tenants/{tenantId}/rules/{ruleName}
Request Body
{
"enabled": false,
"text": "rule <ruleId> using my_Map= {body = body } where true with amqp(json(bindings.my_Map))"
}
Response 200
{
"createdAt": "2019-03-27T19:07:30.315Z",
"enabled": false,
"name": "AllEvents",
"text": "rule AllEvents\nusing my_Map = {\n body = body\n}\nwhere true\nwith amqp(json(bindings.my_Map))"
}
Editing the rule text will result in a straight replace of the former text with the submitted text.
Destination Testing
If you want to test that a destination is set up properly, you can now send a test event directly to a destination through the platform's management API.
Testing a Queue
To send a test event to a queue, use the method below. The queue name is required, but the payload is optional. If you do not include the payload
key, a default payload will be provided.
POST v1/tenants/{tenantId}/test/destination/amqp
Request Body
{
"queue": "GpsEvents",
}
Response 200
{
"queue": "GpsEvents",
"payload": {
"timestamp": "2019-08-06T13:40:18.761Z",
"type": "bbTestMessage"
}
}
If you were to consume the message that appeared in the queue, it would match the value of the payload
exactly:
{
"timestamp": "2019-08-06T13:40:18.761Z",
"type": "bbTestMessage"
}
Testing a DynamoDB Table
To send a test event to a DynamoDB table, use the method below. The destination ID is required, but the payload is optional. If you do not include the payload
key, a default payload will be provided.
POST v1/tenants/{tenantId}/test/destination/dynamodb
Request Body
{
"destinationId": "cf78f959-e5da-4fc9-8cc3-aa948866a7f6",
}
Response 200
{
"destinationId": "cf78f959-e5da-4fc9-8cc3-aa948866a7f6",
"deviceId": "0000000000",
"eventId": "df78f959-e5da-4fc9-8cc3-aa948866a7f6",
"payload": {
"timestamp": "2019-08-06T13:40:18.761Z",
"type": "bbTestMessage"
}
}
Testing a Google Bigtable
To send a test event to a DynamoDB table, use the method below. The destination ID is required, but the payload is optional. If you do not include the payload
key, a default payload will be provided.
POST v1/tenants/{tenantId}/test/destination/bigtable
Request Body
{
"destinationId": "46fb5ec1-b82a-4bea-952b-48f5c7292901",
}
Response 200
{
"destinationId": "46fb5ec1-b82a-4bea-952b-48f5c7292901",
"deviceId": "0000000000",
"eventId": "cf78f959-e5da-4fc9-8cc3-aa948866a7f6",
"payload": {
"timestamp": "2019-08-06T13:40:18.761Z",
"type": "bbTestMessage"
}
}
Testing a Webhook
To send a test event to a webhook table, use the method below. The uri is required, but the payload is optional. If you do not include the payload
key, a default payload will be provided.
POST v1/tenants/{tenantId}/test/destination/webhook
Request Body
{
"uri": "http://request.bin/lksdjf",
}
Response 200
{
"uri": "http://request.bin/lksdjf",
"payload": {
"timestamp": "2019-08-06T13:40:18.761Z",
"type": "bbTestMessage"
}
}