Email Alert API Usage
If there is a suspicious amount of API usage, send an email notification to an admin. This is a custom scripted service that uses a 'TransactionHistory' table to count the number of API calls in the last 5 minutes. An email alert will be sent to the specified email address if the number of API calls exceeds a specific threshold. For this example we are monitoring the usage of the API for the past 5 minutes and setting a threshold of 1,000 API calls. To modify these values to fit your project just change the 'timelapse' and 'threshold' values.
Note: This script can also be scheduled to run periodically using DreamFactory's built in Scheduling feature.
function twoDigits(d) {
if (0 <= d && d < 10) return "0" + d.toString();
if (-10 < d && d < 0) return "-0" + (-1 * d).toString();
return d.toString();
}
var toMysqlFormat = function (x) {
return x.getUTCFullYear() + "-" + twoDigits(1 + x.getUTCMonth()) + "-" + twoDigits(x.getUTCDate()) + " " + twoDigits(x.getUTCHours()) + ":" + twoDigits(x.getUTCMinutes()) + ":" + twoDigits(x.getUTCSeconds());
};
var timelapse = 5; // How many minutes to count
var threshold = 1000; // How many API calls are allowed
var query = "timestamp%3c" + toMysqlFormat(new Date(Date.now() - timelapse * 60000));
result = platform.api.get("db/_table/TransactionHistory?filter=(" + query + ")");
if (result.content.resource.length >= threshold) {
var email = {
"to": [
{
"name": "John Doe",
"email": "[email protected]"
}
],
"subject": "Usage alert",
"body_text": "API usage has exceeded the alert threshold.",
"from_name": "John Doe",
"from_email": "[email protected]",
"reply_to_name": "John Doe",
"reply_to_email": "[email protected]"
};
platform.api.post("email", email);
}