fetchTargets: function fetchTargets()

in packages/core/lib/middleware/sampling/service_connector.js [66:107]


  fetchTargets: function fetchTargets(rules, callback) {
    const body = JSON.stringify(constructStatisticsDocs(rules));
    const options = getOptions(this.samplingTargetsPath, body.length);
    const httpReq = this.httpClient.__request ? this.httpClient.__request : this.httpClient.request;

    const req = httpReq(options, res => {
      var data = '';
      res.on('data', d => {
        data += d;
      });

      res.on('error', error => {
        callback(error);
      });

      res.on('end', () => {
        var dataObj;
        try {
          dataObj = JSON.parse(data);
        } catch (err) {
          callback(err);
          return;
        }

        if (!dataObj || typeof dataObj['LastRuleModification'] != 'number') {
          callback(new Error('AWS X-Ray SamplingTargets API returned invalid response'));
          return;
        }

        var targetsMapping = assembleTargets(dataObj);
        var ruleFreshness = dateToEpoch(dataObj['LastRuleModification']);
        callback(null, targetsMapping, ruleFreshness);
      });
    });

    req.on('error', () => {
      callback(new Error(`Failed to connect to X-Ray daemon at ${options.hostname}:${options.port} to get sampling targets.`));
    });

    req.write(body);
    req.end();
  }