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

问题描述 投票:0回答:1

所以对于熟悉CW Logs的人来说,这不是典型的DB查询调用,它返回结果。您发送API调用以启动查询,该查询返回查询ID。然后,您发送一个不同的API调用来获取查询结果,“希望”查询已完成,如果没有,则表示运气不佳。这就是我现在所处的位置。

我有一个需要花费一些时间的查询,而我正在“猜测”处理这种情况的方法是继续循环DescribeQueries调用,直到找到返回的已完成查询数组之间的匹配,然后继续执行其余的码。我无法解决这个问题! GRRRR!

我尝试过While和Do..While循环完全不起作用。我发现找到匹配时尝试设置转义条件值但它永远不会被设置并且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调用。

node.js amazon-cloudwatchlogs
1个回答
0
投票

我遇到了与AWS Athena类似的问题。当我开始查询时,我会返回已启动的响应,但在完成时不会收到通知。我想出的最佳解决方案是使用setTimeout每100ms左右检查一次状态,并在查询完成后继续。希望有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.