public Object handleRequest()

in CostDataLake/src/main/java/com.awssample.costdatalake/TrustedAdvisorFunction.java [31:77]


    public Object handleRequest(final Object input, final Context context) {
        Date currentDate = new Date();
        Calendar cal = Calendar.getInstance();
        cal.setTime(currentDate);
        int year = cal.get(Calendar.YEAR);
        int month = cal.get(Calendar.MONTH) + 1;
        int date = cal.get(Calendar.DAY_OF_MONTH) ;
        long unixTimestamp = Instant.now().getEpochSecond();

        StringBuffer output_string = new StringBuffer("accountnumber,scandate,region,checkname,resourceid,type,metadata,currentcost\n");
        var s3key = "year=" + year + "/month=" + month + "/date=" + date + "/ta.csv";

        TAChecks taChecks = new TAChecks();
        List<TAChecks> avalable = taChecks.getAvailableChecks();
        avalable.forEach((tc) -> {
            String desc = tc.getDescription();
            DescribeTrustedAdvisorCheckResultResult describeTrustedAdvisorCheckResultResult = awsSupport.describeTrustedAdvisorCheckResult(new DescribeTrustedAdvisorCheckResultRequest().withCheckId(tc.getId()));
            describeTrustedAdvisorCheckResultResult.getResult().getFlaggedResources().forEach(resource -> {
                System.out.println("Cost-->"+resource.getMetadata().get(tc.getCostMetaDataPosition()));
                System.out.println("Converting to-->"+resource.getMetadata().get(tc.getCostMetaDataPosition()).substring(1, resource.getMetadata().get(tc.getCostMetaDataPosition()).length()));

                output_string.append(accountnumber).append(",")
                        .append(unixTimestamp).append(",")
                        .append(resource.getMetadata().get(tc.getRegionMetaDataPosition())).append(",")
                        .append(desc).append(",")
                        .append(resource.getMetadata().get(tc.getResourceidMetaDataPosition())).append(",")
                        .append(resource.getMetadata().get(tc.getTypeMetaDataPosition())).append(",")
                        .append(String.join(" ~ ", resource.getMetadata())).append(",")
                        .append(resource.getMetadata().get(tc.getCostMetaDataPosition()).substring(1, resource.getMetadata().get(tc.getCostMetaDataPosition()).length())).append("\n");

            });

        });

        //TODO : Figure out a way to stream in better way so as to avoid out of memory
        InputStream inputStream = new ByteArrayInputStream(output_string.toString().getBytes());
        AmazonS3 s3client = AmazonS3Client.builder().build();
        PutObjectRequest request = new PutObjectRequest(bucketName, s3key, inputStream, new ObjectMetadata());
        s3client.putObject(request);

        //Trigger a TA refresh. This will ensure that checks are ready for next run
        avalable.forEach((tc) -> {
            awsSupport.refreshTrustedAdvisorCheck(new RefreshTrustedAdvisorCheckRequest().withCheckId(tc.getId()));
        });

        return null;
    }