Ошибка журнала Watson Assistant "Превышен предел скорости" - PullRequest
0 голосов
/ 28 мая 2019

Мне нужна ваша помощь в получении логов Watson Assistant.Я получаю сообщение об ошибке «Превышен лимит тарифов».В соответствии с API-документами, мы можем указать курсор в параметре.Когда курсор указан, мы можем сделать 120 запросов / мин.Если курсор не указан, мы можем сделать только 40 запросов / 30 минут.Я передал атрибут курсора в объекте «param» как пустую строку, когда он сначала инициируется, а затем я обновил значение курсора до значения next_cursor, которое было возвращено Уотсоном (атрибут пагинации как токен).Тем не менее, он все еще делает 40 запросов и соединение закрывается на 30 минут.Не могли бы вы сказать мне, что я делаю не так?Я могу получить 40 журналов в текстовом файле.Я использую Node JS.Я с нетерпением жду ответа от вас.

Ниже приведена небольшая примерная функция, которую я создал:

const getLogs = () => {
           const params = {
             workspace_id: '50f6598a-a369-45df-9cfb-20bdfe617066',
             cursor: ""
           }
           service.listLogs(params)
           .then(res => {
             if(res.pagination.next_cursor) {
               fs.writeFile("temp.txt", JSON.stringify(res, null, 2), err => {
                 if (err) console.log(err);
                 console.log("Successfully Written to File.");
               });
               params.cursor = res.pagination.next_cursor;
               getLogs()
             } else {
               console.log('no more logs')
             }
           })
           .catch(err => console.log(JSON.stringify(err, null, 2)));
         }
         getLogs();

{
  "name": "Too Many Requests",
  "code": 429,
  "message": "Rate limit exceeded",
  "body": "{\"error\":\"Rate limit exceeded\",\"code\":429}",
  "headers": {
    "x-backside-transport": "FAIL FAIL",
    "content-type": "application/json; charset=utf-8",
    "access-control-allow-origin": "*",
    "access-control-allow-methods": "GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS",
    "access-control-allow-headers": "Content-Type, Content-Length, Authorization, X-Watson-Authorization-Token, X-WDC-PL-OPT-OUT, X-Watson-UserInfo, X-Watson-Learning-Opt-Out, X-Watson-Metadata",
    "access-control-max-age": "3600",
    "content-security-policy": "default-src 'none'",
    "x-dns-prefetch-control": "off",
    "x-frame-options": "SAMEORIGIN",
    "strict-transport-security": "max-age=31536000;",
    "x-download-options": "noopen",
    "x-content-type-options": "nosniff",
    "x-xss-protection": "1; mode=block",
    "x-ratelimit-limit": "40",
    "x-ratelimit-reset": "1559060571",
    "x-ratelimit-remaining": "0",
    "retry-after": "1143.36",
    "x-global-transaction-id": "7ecac92c5ced5be3440b2991",
    "x-dp-watson-tran-id": "gateway01-1141582225",
    "x-dp-transit-id": "gateway01-1141582225",
    "content-length": "42",
    "x-edgeconnect-midmile-rtt": "256",
    "x-edgeconnect-origin-mex-latency": "210",
    "date": "Tue, 28 May 2019 16:03:47 GMT",
    "connection": "close"
  }
}

1 Ответ

1 голос
/ 29 мая 2019

Я думаю, что это может быть связано с рекурсией, и что params.cursor устанавливается в "" в начале каждой рекурсии. Что вам нужно сделать, это объединить рекурсию с закрытием. Таким образом, ваш код будет выглядеть примерно так:

 const getLogs = () => {
   const params = {
        workspace_id: '50f6598a-a369-45df-9cfb-20bdfe617066',
        cursor: ""
    }
   function doGetLogs() {
     service.listLogs(params)
     .then(res => {
        if(res.pagination.next_cursor) {
                ...
                params.cursor = res.pagination.next_cursor;
                doGetLogs()
              } 
              ...
            })
           ...
   }
   return doGetLogs();
 }

 getLogs();
...