Node.js-如何继续描述Cloudwatch日志查询以获取特定查询的完成状态

时间:2019-05-01 20:39:16

标签: node.js amazon-cloudwatchlogs

因此,对于熟悉CW Logs的任何人..这都不是返回结果的典型数据库查询调用。 您发送API调用以启动查询,该查询返回查询ID。 然后,您发送不同的API调用以获取查询结果,并带有查询完成的“希望”,如果尚未完成,则表示您不走运。 那就是我现在的位置。

我有一个查询需要花费一些时间,我正在“猜测”处理该问题的方法是保持循环DescribeQueries调用,直到在返回的已完成查询数组中找到匹配项,然后继续其余代码。我无法做到这一点! rr!

我尝试了While和Do ..虽然循环完全不起作用。当找到匹配项时,我尝试设置转义条件值..但从未设置,并且Lambda函数超时。

function checkQueryStatus (logGroup, qID, callback) {

      var params = {
      logGroupName: logGroup, 
      maxResults: '3',
      status: 'Complete'
    };

let found = 0;

      do {
      cwlogs.describeQueries(params, function(err, data) {
        if (err) console.log(err, err.stack); // an error occurred
        else {
          // console.log(data.queries);           // successful response
            const qList = data.queries;
            if (qList.some(query => query.queryId === qID)) {  
              console.log('Query Done');
              callback(1);
              found = 1;
          } else {
            console.log('Query not done');
          }
        }
      });
      } while (found == 0); 
}

checkQueryStatus(logGroupName, queryID, function(qStatus) {
  console.log('Query Status: ', qStatus);

  if (qStatus == 1) { 
  console.log('Query Done');

  <do other code...>


我该怎么办?我现在正在调查Promises,以了解所有内容。 如果DescribeQueries找到匹配项,我想触发GetQueryResults API调用。

1 个答案:

答案 0 :(得分:0)

AWS Athena遇到了类似的问题。当我开始查询时,我会返回已经开始的响应,但是在完成时没有任何通知。我想出的最好的解决方案是使用setTimeout每隔100毫秒左右检查一次其状态,并在查询完成后继续。希望有帮助。