use of com.amazonaws.services.lambda.runtime.events.KinesisAnalyticsInputPreprocessingResponse in project aws-ingesting-click-logs-using-terraform by aws-samples.
the class ClickLoggerStreamHandler method handleRequest.
@Override
public KinesisAnalyticsInputPreprocessingResponse handleRequest(final KinesisFirehoseEvent event, final Context context) {
final LambdaLogger logger = context.getLogger();
final String success_response = new String("200 OK");
logger.log("EVENT: " + gson.toJson(event));
String env_table = System.getenv("DB_TABLE");
if (!StringUtils.isBlank(env_table)) {
dynamo_table_name = env_table;
}
// System.getenv("REGION");
String env_region = System.getenv("AWS_REGION");
logger.log("Environment region name - " + env_region);
if (!StringUtils.isBlank(env_region)) {
region = env_region;
}
List<Record> records = new ArrayList<>();
event.getRecords().forEach(kinesisRecord -> {
String clickJson = new String(kinesisRecord.getData().array());
logger.log("Individual record: " + kinesisRecord.getData());
Gson gson = new Gson();
try {
ClickLogRequest clickLogRequest = gson.fromJson(clickJson, ClickLogRequest.class);
String req = clickLogRequest.getRequestid() + " - " + clickLogRequest.getCallerid() + " - " + clickLogRequest.getComponent() + " - " + clickLogRequest.getType() + " - " + clickLogRequest.getAction() + " - " + clickLogRequest.getUser() + " - " + clickLogRequest.getClientip() + " - " + clickLogRequest.getCreatedtime();
Boolean valid_input = true;
logger.log("Incoming request variables - " + req);
if (clickLogRequest != null) {
logger.log("Validating inputs");
if (StringUtils.isBlank(clickLogRequest.getRequestid())) {
logger.log("error occurred - requestid missing");
valid_input = false;
}
if (StringUtils.isBlank(clickLogRequest.getContextid())) {
logger.log("error occurred - contextid missing");
valid_input = false;
}
if (StringUtils.isBlank(clickLogRequest.getCallerid())) {
logger.log("error occurred - caller missing");
valid_input = false;
}
if (StringUtils.isBlank(clickLogRequest.getType())) {
logger.log("error occurred - type missing");
valid_input = false;
}
if (StringUtils.isBlank(clickLogRequest.getAction())) {
logger.log("error occurred - action missing");
valid_input = false;
}
if (StringUtils.isBlank(clickLogRequest.getComponent())) {
logger.log("error occurred - component missing");
valid_input = false;
}
String user = "GUEST";
if (StringUtils.isBlank(clickLogRequest.getUser())) {
logger.log("setting default user");
clickLogRequest.setUser(user);
}
String clientip = "APIGWY";
if (StringUtils.isBlank(clickLogRequest.getClientip())) {
logger.log("setting default clientip");
clickLogRequest.setClientip(clientip);
}
String datetime = "";
if (StringUtils.isBlank(clickLogRequest.getCreatedtime())) {
logger.log("setting default createdtime");
Format f = new SimpleDateFormat("mm-dd-yyyy hh:mm:ss");
datetime = f.format(new Date());
clickLogRequest.setCreatedtime(datetime);
}
logger.log("Validated inputs");
}
req = clickLogRequest.getRequestid() + " - " + clickLogRequest.getCallerid() + " - " + clickLogRequest.getComponent() + " - " + clickLogRequest.getType() + " - " + clickLogRequest.getAction() + " - " + clickLogRequest.getUser() + " - " + clickLogRequest.getClientip() + " - " + clickLogRequest.getCreatedtime();
logger.log("Modified request variables - " + req);
logger.log("Valid Input - " + String.valueOf(valid_input));
System.out.println("Calling updateclicklogs method for the received clicklogrequest");
if (valid_input) {
updateClickLogs(clickLogRequest);
}
Record record = new Record();
record.setRecordId(kinesisRecord.getRecordId());
record.setData(kinesisRecord.getData());
Result result = KinesisAnalyticsInputPreprocessingResponse.Result.Ok;
record.setResult(result);
records.add(record);
} catch (JsonSyntaxException jsEx) {
System.out.println(jsEx);
}
});
KinesisAnalyticsInputPreprocessingResponse response = new KinesisAnalyticsInputPreprocessingResponse(records);
logger.log(success_response);
return response;
}
use of com.amazonaws.services.lambda.runtime.events.KinesisAnalyticsInputPreprocessingResponse in project Insights by CognizantOneDevOps.
the class LambdaFunctionHandler method handleRequest.
/**
* Get the Kinesis event, De-serialize the event and get event Body and URL
* @param KinesisFirehoseEvent
* @return transformedEvent
*/
@Override
public KinesisAnalyticsInputPreprocessingResponse handleRequest(KinesisFirehoseEvent event, Context context) {
KinesisAnalyticsInputPreprocessingResponse transformedEvent = new KinesisAnalyticsInputPreprocessingResponse();
List<Record> transRecords = new ArrayList<Record>();
int responseCode = 200;
for (com.amazonaws.services.lambda.runtime.events.KinesisFirehoseEvent.Record record : event.getRecords()) {
ByteBuffer bufferData = record.getData();
InputStream data = new ByteArrayInputStream(bufferData.array());
JsonElement element = parseReader(new InputStreamReader(data));
JsonObject json = element.getAsJsonObject();
String body = json.get("body").toString();
String tool = json.get("tool").getAsString();
String url = System.getenv(tool);
try {
if (responseCode == 200 && url != null && !MAINTENANCE_MODE) {
responseCode = 0;
URL insightsUrl = new URL(url);
HttpURLConnection con = (HttpURLConnection) insightsUrl.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json; utf-8");
con.setRequestProperty("Accept", "application/json");
con.setDoOutput(true);
con.setConnectTimeout(CONNECTION_TIMEOUT);
OutputStream os = con.getOutputStream();
os.write(body.getBytes());
os.flush();
os.close();
responseCode = con.getResponseCode();
if (responseCode == 200) {
Record transRecord = new Record(record.getRecordId(), Result.Dropped, bufferData);
transRecords.add(transRecord);
} else {
log.error("Error while conecting URL " + url + " return response code " + responseCode);
}
}
} catch (MalformedURLException e) {
log.error("Invalid URL fot the tool " + tool + " " + e.toString());
} catch (Exception e) {
log.error("Error connecting to URL " + url + " " + e.toString());
} finally {
if (responseCode != 200 || MAINTENANCE_MODE || url == null) {
if (url == null) {
log.error("Url Entry is null for the tool " + tool);
}
Record transRecord = new Record(record.getRecordId(), Result.Ok, bufferData);
transRecords.add(transRecord);
}
}
}
transformedEvent.setRecords(transRecords);
return transformedEvent;
}
use of com.amazonaws.services.lambda.runtime.events.KinesisAnalyticsInputPreprocessingResponse in project aws-ingesting-click-logs-using-terraform by aws-samples.
the class ClickLoggerStreamHanderTest method invokeTest.
@Test
void invokeTest() {
KinesisAnalyticsInputPreprocessingResponse response = new KinesisAnalyticsInputPreprocessingResponse();
response = clickLoggerSreamHandler.handleRequest(event, context);
Assert.assertNotNull(response);
// Assert.assertEquals(response.getRecords()., 1);
}
Aggregations