function getDataPerNode()

in lib/perf-top/metrics/util/generate-data.js [168:210]


function getDataPerNode (rawData) {
  var jsonData = {};
  try {
    jsonData = JSON.parse(rawData);
    if (Object.keys(jsonData).length === 1 && 'error' in jsonData) {
      console.error(`Failed to retrieve data for metrics. HTTP(S) response was:
        ${rawData}`);
      return {};
    }
  } catch (e) {
    console.error(`HTTP(S) Response for per-node data was not in JSON format:
      ${rawData}`);
    return {};
  }

  var allData = {};
  for (var nodeName in jsonData) {
    var nodeDimensions = [];
    var nodeData = [];
    if (!('data' in jsonData[nodeName])) {
      console.error(`Data returned for nodeName=${nodeName} was in an unexpected format:
        ${JSON.stringify(jsonData[nodeName])}`);
      continue;
    }
    if (!('fields' in jsonData[nodeName].data) && !('records' in jsonData[nodeName].data)) {
      console.error(`Data returned for nodeName=${nodeName} was in an unexpected format:
        ${JSON.stringify(jsonData[nodeName])}`);
      continue;
    }
    jsonData[nodeName].data.fields.forEach(function (field) {
      if (field.name === null) {
        field.name = 'N/A';
      }
      nodeDimensions.push(field.name);
    });
    jsonData[nodeName].data.records.forEach(function (record) {
      nodeData.push(record.map(helper.parseNumberData));
    });

    allData[nodeName] = { fields: nodeDimensions, data: nodeData, timestamp: jsonData[nodeName].timestamp };
  }
  return allData;
}