2016-07-08 4 views
2

J'ai créé le script ci-dessous pour extraire les statistiques de l'API Jelastic afin de pouvoir rassembler les statistiques des ressources sur une période donnée. L'objectif final est de consigner les données dans une feuille de calcul.Erreur d'authentification de session intermittente Jelastic API "non authentifiée (clé de session différente)"

Ci-dessous est mon code qui gère l'authentification, puis faire la demande à GetSumStats.

Si je cours le code, une partie du temps les résultats sont attendus.

{ 
    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' 
} 

Mais d'autres fois, la requête échoue avec l'erreur.

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

Est-ce un problème de synchronisation ou un problème connu? Peut-être que le script est trop rapide et l'API ne connaît pas encore l'identifiant de session? C'est pourquoi j'ai introduit le 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(); 
     }); 
    } 



})(); 

Répondre

3

Vous êtes limité à 1 session de connexion simultanée. Le login est épinglé par IP/User Agent.

Si vous devez créer plusieurs sessions de connexion simultanées, vous pouvez essayer d'utiliser un UA unique par session pour éviter les conflits.

+0

En faisant les demandes j'ai ajouté l'agent d'utilisateur et il a résolu le problème, merci. – dlearious