Usecase
I have function1 which calls API1 and giveS output like below
{ Buckets:
[ { Name: 'ONE',
CreationDate: 2018-09-12T11:32:04.000Z },
{ Name: 'SEVEN',
CreationDate: 2018-09-12T10:06:44.000Z },
{ Name: 'THREE',
CreationDate: 2018-09-12T10:06:56.000Z },
{ Name: 'FOUR',
CreationDate: 2018-09-12T10:07:06.000Z },
{ Name: 'FIVE',
CreationDate: 2018-09-12T10:07:18.000Z },
{ Name: 'SIX',
CreationDate: 2018-09-12T10:07:28.000Z },
{ Name: 'TWO',
CreationDate: 2018-09-12T10:07:39.000Z } ],
}
And function2 which will take the bucket names from function 1 and pass dynamically to params1 based on each iteration in for loop.
{"ResponseMetadata":{"RequestId":"a7c64a98-b735-11e"},"MetricDataResults":[{"Id":"m17","Label":"BucketSizeBytes","Timestamps":["2018-09-04T18:30:00.000Z"],"Values":[2048717],"StatusCode":"Complete","Messages":[]}]
{"ResponseMetadata":{"RequestId":"a7c64a98-b735-11e"},"MetricDataResults":[{"Id":"m17","Label":"BucketSizeBytes","Timestamps":["2018-09-04T18:30:00.000Z"],"Values":[2048718],"StatusCode":"Complete","Messages":[]}]
{"ResponseMetadata":{"RequestId":"a7c64a98-b735-11e"},"MetricDataResults":[{"Id":"m17","Label":"BucketSizeBytes","Timestamps":["2018-09-04T18:30:00.000Z"],"Values":[2048719],"StatusCode":"Complete","Messages":[]}]
{"ResponseMetadata":{"RequestId":"a7c64a98-b735-11e"},"MetricDataResults":[{"Id":"m17","Label":"BucketSizeBytes","Timestamps":["2018-09-04T18:30:00.000Z"],"Values":[2048720],"StatusCode":"Complete","Messages":[]}]
{"ResponseMetadata":{"RequestId":"a7c64a98-b735-11e"},"MetricDataResults":[{"Id":"m17","Label":"BucketSizeBytes","Timestamps":["2018-09-04T18:30:00.000Z"],"Values":[2048721],"StatusCode":"Complete","Messages":[]}]
{"ResponseMetadata":{"RequestId":"a7c64a98-b735-11e"},"MetricDataResults":[{"Id":"m17","Label":"BucketSizeBytes","Timestamps":["2018-09-04T18:30:00.000Z"],"Values":[2048722],"StatusCode":"Complete","Messages":[]}]
{"ResponseMetadata":{"RequestId":"a7c64a98-b735-11e"},"MetricDataResults":[{"Id":"m17","Label":"BucketSizeBytes","Timestamps":["2018-09-04T18:30:00.000Z"],"Values":[2048723],"StatusCode":"Complete","Messages":[]}]
Which means for every name in function 1 it will give a Response like above(i.e.7) . Rightnow i am merging these two jsons into one json which is like this
{"Name":"test-pics-folder-two","CreationDate":"2018-09-12T10:07:39.000Z","ResponseMetadata":{"RequestId":"fc77226d-b72c-11e8-ad06-0dea5c42ce8a"},"MetricDataResults":[{"Id":"m17","Label":"BucketSizeBytes","Timestamps":["2018-09-04T18:30:00.000Z"],"Values":[2048717],"StatusCode":"Complete","Messages":[]}]}
For achieving this i had written NODE.JS code like below
var AWS = require('aws-sdk');
// Set the region
AWS.config.update({
region: "ap-south-1"
});
// Create S3 service object
s3 = new AWS.S3();
var cloudwatch = new AWS.CloudWatch({apiVersion: '2010-08-01'});
var params= {};
s3.listBuckets(params, bucketList); -->Trigger function1
function bucketList(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else
{
var size = Object.keys(data.Buckets).length; -->Where data has the function 1 output like i mentioned above. And i am taking length of it(i.e.7)
for(var i = 0; i < size;i++){
var Json1 = data.Buckets[i]
console.log(Json1)
var BucketName = data.Buckets[i].Name
var params1 = {
EndTime: 1536128999, /* required */
MetricDataQueries: [ /* required */
{
Id: 'm17', /* required */
MetricStat: {
Metric: { /* required */
Dimensions: [
// {
// Name: 'BucketName', /* required */
// Value: 'test-pics-folder' /* required */
// },
{
Name: 'BucketName', /* required */
Value: BucketName /* required */
},
{
Name: 'StorageType', /* required */
Value: 'StandardStorage' /* required */
}
/* more items */
],
MetricName: 'BucketSizeBytes',
Namespace: 'AWS/S3'
},
Period: 86400, /* required */
Stat: 'Sum', /* required */
Unit: 'Bytes'
},
ReturnData: true
},
/* more items */
],
StartTime: 1536085800, /* required */
// ScanBy: TimestampDescending | TimestampAscending
};
cloudwatch.getMetricData(params1,metricAll) -->Trigger function2
function metricAll(err, data1) {
if (err) {
console.log(err, err.stack);
}
else
{
var Json2 = data1 -->The function2 output as in the above mentioned format
var obj = Object.assign(Json1, Json2);
console.log(JSON.stringify(obj))
}
};
}
}
}
I am getting output like this
{"Name":"TWO","CreationDate":"2018-09-12T10:07:39.000Z","ResponseMetadata":{"RequestId":"a7c64a98-b735-11e"},"MetricDataResults":[{"Id":"m17","Label":"BucketSizeBytes","Timestamps":["2018-09-04T18:30:00.000Z"],"Values":[2048717],"StatusCode":"Complete","Messages":[]}]
{"Name":"TWO","CreationDate":"2018-09-12T10:07:39.000Z","ResponseMetadata":{"RequestId":"a7c64a98-b735-11e"},"MetricDataResults":[{"Id":"m17","Label":"BucketSizeBytes","Timestamps":["2018-09-04T18:30:00.000Z"],"Values":[2048718],"StatusCode":"Complete","Messages":[]}]
{"Name":"TWO","CreationDate":"2018-09-12T10:07:39.000Z","ResponseMetadata":{"RequestId":"a7c64a98-b735-11e"},"MetricDataResults":[{"Id":"m17","Label":"BucketSizeBytes","Timestamps":["2018-09-04T18:30:00.000Z"],"Values":[2048719],"StatusCode":"Complete","Messages":[]}]
{"Name":"TWO","CreationDate":"2018-09-12T10:07:39.000Z","ResponseMetadata":{"RequestId":"a7c64a98-b735-11e"},"MetricDataResults":[{"Id":"m17","Label":"BucketSizeBytes","Timestamps":["2018-09-04T18:30:00.000Z"],"Values":[2048720],"StatusCode":"Complete","Messages":[]}]
{"Name":"TWO","CreationDate":"2018-09-12T10:07:39.000Z","ResponseMetadata":{"RequestId":"a7c64a98-b735-11e"},"MetricDataResults":[{"Id":"m17","Label":"BucketSizeBytes","Timestamps":["2018-09-04T18:30:00.000Z"],"Values":[2048721],"StatusCode":"Complete","Messages":[]}]
{"Name":"TWO","CreationDate":"2018-09-12T10:07:39.000Z","ResponseMetadata":{"RequestId":"a7c64a98-b735-11e"},"MetricDataResults":[{"Id":"m17","Label":"BucketSizeBytes","Timestamps":["2018-09-04T18:30:00.000Z"],"Values":[2048722],"StatusCode":"Complete","Messages":[]}]
{"Name":"TWO","CreationDate":"2018-09-12T10:07:39.000Z","ResponseMetadata":{"RequestId":"a7c64a98-b735-11e"},"MetricDataResults":[{"Id":"m17","Label":"BucketSizeBytes","Timestamps":["2018-09-04T18:30:00.000Z"],"Values":[2048723],"StatusCode":"Complete","Messages":[]}]
Where it is appending the last BucketName of function 1 and assigning it to all the results of function2. When kept the console.log(i) in
function metricAll(err, data1) {
if (err) {
console.log(err, err.stack);
}
else
{
console.log(i)
}
};
I got a weird output of [ 7 7 7 7 7 7 7] . Which means it is passing only the last value of the for loop into this. I dont know why ?
Any help is appreciated
Thanks
Aucun commentaire:
Enregistrer un commentaire