handler: function()

in backend/src/cwEvents/processAcmeBotsStatusEvents.js [14:74]


    handler: function(event, context, cb) {
        var now = new Date();
        var delay = now - new Date(event.detail.recorded_at);

        // Update the dynamoDB item
        var ddbParams = {
            TableName: process.env.THINGS_TABLE,
            Key: {
                "thingName": {
                    S: event.detail.botId
                }
            },
            UpdateExpression: "SET #S = :s, #L = :l",
            ExpressionAttributeNames: {
                "#S": "status", 
                "#L": "lastSeenAt"
            }, 
            ExpressionAttributeValues: {
                ":s": {
                    S: event.detail.status
                },
                ":l": {
                    N: `${now.getTime()}`
                },
                ":tn": {
                    S: event.detail.botId
                }
            },
            ConditionExpression: "thingName = :tn",
        };
        ddb.updateItem(ddbParams, function(err, data) {
            if (err) {
                if( err.code == 'ConditionalCheckFailedException') {
                    data = {thingName: event.botId, exists: false}
                    cb(null, data)
                } else {
                    cb(err, null);
                }
            } else {
                cb(err, data);
            }
        });

        // Send cw custom metric
        var params = {
            MetricData: [
                {
                    MetricName: Constants.EVENTS_DELAY_METRIC,
                    StorageResolution: 1,
                    Timestamp: now,
                    Unit: 'Milliseconds',
                    Value: delay
                }
            ],
            Namespace: Constants.METRICS_NAMESPACE
        };
        cw.putMetricData(params, function(err, data) {
            if (err) console.log(err, err.stack);
        });

    }