Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.32 KB | None | 0 0
  1. const delay = require('delay');
  2.  
  3. const callAwsPaginatedMethod = (service, method, methodParams, maxRPS = 0) => {
  4. const getPagingToken = ({
  5. PaginationToken, position, NextToken, NextContinuationToken,
  6. }) => (
  7. (PaginationToken && { PaginationToken })
  8. || (position && { position })
  9. || (NextToken && { NextToken })
  10. || (NextContinuationToken && { ContinuationToken: NextContinuationToken })
  11. );
  12.  
  13. const retrievedData = [];
  14. const getResults = async (params) => {
  15. try {
  16. const preRunTime = Date.now();
  17. const data = await service[method](params).promise();
  18. retrievedData.push(data);
  19.  
  20. // don't submit too many requests - put in a delay if passed as a param and more results to fetch.
  21. if (maxRPS && getPagingToken(data)) {
  22. await delay((preRunTime - Date.now() + 1000 / maxRPS));
  23. }
  24.  
  25. if (getPagingToken(data)) {
  26. return getResults(Object.assign(params, getPagingToken(data)));
  27. }
  28. } catch (e) {
  29. console.log(`Error: calling AWS cli ${JSON.stringify(e)}`);
  30. return Promise.reject(e);
  31. }
  32.  
  33. return Promise.resolve(retrievedData);
  34. };
  35.  
  36. return getResults(methodParams);
  37. };
  38.  
  39. const flattenAwsMethodResults = (dataArr, element) => [].concat(...dataArr.map(data => data[element]));
  40.  
  41. module.exports = {
  42. callAwsPaginatedMethod,
  43. flattenAwsMethodResults,
  44. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement