in source/services/api/event/lib/event.js [84:150]
async _getEventsPage(deviceId, lastevalkey, eventType, length) {
let _keyConditionExpression = 'deviceId = :did';
let _expressionAttributeValues = {
':did': deviceId,
};
let _expressionAttributeNames = '';
/**
* DynamoDB FilterExpression
* If there are query parameters, add the value to the filter expression.
*/
let _filterExpression = '';
// Filters with event type
if (eventType !== undefined
&& eventType.trim() !== '') {
_filterExpression = '#type = :eventType';
_expressionAttributeValues[':eventType'] = eventType.trim();
_expressionAttributeNames = {
'#type': 'type'
};
}
let params = this.commonUtils.generateDynamoDBQueryParams(
process.env.EVENTS_TBL,
_keyConditionExpression,
_expressionAttributeValues,
_expressionAttributeNames,
_filterExpression,
'deviceId-timestamp-index',
false,
lastevalkey
);
let events = [];
let docClient = new AWS.DynamoDB.DocumentClient(this.dynamoConfig);
try {
let result = await docClient.query(params).promise();
events = result.Items;
length += events.length;
// In case the result is less than 20 in total due to FilterExpression, call the method again with LastEvaluatedKey.
if (length < 20
&& result.LastEvaluatedKey) {
lastevalkey = result.LastEvaluatedKey;
try {
let data = await this._getEventsPage(deviceId, lastevalkey, eventType, length);
events = [...events, ...data.Items];
result.LastEvaluatedKey = data.LastEvaluatedKey;
} catch (err) {
return Promise.reject(err);
}
}
result.Items = events;
result.eventType = eventType;
return Promise.resolve(result);
} catch (err) {
Logger.error(Logger.levels.INFO, err);
return Promise.reject({
code: 500,
error: 'EventQueryFailure',
message: `Error occurred while attempting to retrieve events for device "${deviceId}".`
});
}
}