2016-07-08 4 views
2

私はJelastic APIから統計情報を取得するために以下のスクリプトを作成しました。最終目標は、データをスプレッドシートに記録することです。Jelastic API間欠セッション認証エラーが「認証されていません(別のセッションキー)」

以下は、認証してからGetSumStatsにリクエストを送信する私のコードです。

コードを実行すると、結果が返されるまでに時間がかかることがあります。

{ 
    iops_used: 0, 
    duration: 3600, 
    cpumhz: 7, 
    start: '', 
    disk: 7857, 
    mem: 725212, 
    cpu: 24002, 
    capacity: 9, 
    net: { in_int: 96004, out_int: 96004, in_ext: 9181, out_ext: 9395 }, 
    chanksused: 7, 
    nodeid: 'sum' 
} 

ただし、エラーが発生してもリクエストは失敗します。

{ result: 702, 
    source: 'JEL', 
    error: 'not authenticated (different session key)', 
    stats: [] } 

これはタイミングの問題ですか、それとも既知の問題ですか?スクリプトが速すぎるかもしれないし、APIがまだセッションIDについて知りませんか?だから、私はsetTimeoutを導入しました。

var sites    = require('./sites.json').sites, 
    credentials   = require('./credentials.json'), 
    Client    = require('node-rest-client').Client, 
    util    = require('./util.js'); 

(function() { 
    "use strict"; 

    var client = new Client(); 
    var session; 

    login(); 

    function login() { 
     var args = { 
      parameters: { 
       appid: sites[2].appId, 
       login: credentials.email, 
       password: credentials.password 
      } 
     }; 

     client.registerMethod("login", "https://app.j.hostapi.co.uk/1.0/users/authentication/rest/signin", "GET"); 

     client.methods.login(args, function (data, response) { 

      // parsed response body as js object 
      data = util.parseResponse(data); 

      session = data.session; 
      console.log(session); 

      // Tried to pause here in case it was too quick 
      setTimeout(function() { 
       getSumStats(); 
      }, 3000); 


     }); 
    } 

    function logout() { 
     var args = { 
      parameters: { 
       appid: sites[2].appId, 
       session: session 
      } 
     }; 

     client.registerMethod("logout", "https://app.j.hostapi.co.uk/1.0/users/authentication/rest/signout", "GET"); 

     client.methods.logout(args, function (data, response) { 

      // parsed response body as js object 
      data = util.parseResponse(data); 

      console.log(data); 
      // raw response 
      //console.log(response); 
     }); 
    } 

    // Failure here 
    function getSumStats() { 
     var args = { 
      parameters: { 
       domain: sites[2].domain, 
       session: session, 
       duration: 3600 
      } 
     }; 

     client.registerMethod("getSumStats", "https://app.j.hostapi.co.uk/1.0/environment/control/rest/getsumstat", "GET"); 

     client.methods.getSumStats(args, function (data, response) { 

      // parsed response body as js object 
      data = util.parseResponse(data); 
      console.log(data.stats); 
      logout(); 
     }); 
    } 



})(); 

答えて

3

1つの同時ログインセッションに制限されています。ログインはIP/User Agentによって固定されます。

複数の同時ログインセッションを作成する必要がある場合は、セッションごとに一意のUAを使用して競合を回避できます。

+0

リクエストを作成するときにユーザーエージェントを追加して問題を解決しました。ありがとうございます。 – dlearious

関連する問題