毎秒更新されるバックボーン コレクションに保存したいくつかのメトリックをプロットしています。キュービズムに正しいメトリックがプロットされていません。メトリックごとに、プロットされた 1 つのメトリックのみ (正しくない) 値を取得します。これをデバッグする方法がよくわかりません。これが私のコードです:
var models = dataSet.models;
//aggregate 'metrics'. Each component has a 'metric' which contains its stats over time
for(model in models){
var attributes = models[model].attributes;
var metricData = metricCache.get(models[model].id);
var metrics = metricData['attributes']['metrics'];
if(!attributes['name'] || attributes['type']== "FLOW" || attributes['type'] == "SERVER"){
continue;
}
if(attributes['name'] == null){
continue;
}
var name = attributes['name'];
var type = attributes['type'];
var metName = name;
/* GETTING METRIC. Using js closure to pass correct values to metric call */
if(metricData != null){
//var curContext = getMetric(metName, metrics);
var curContext = (function(val1, val2){
return getMetric(val1, val2);
})(metName,metrics);
}
statsList.push(curContext);
}
「getMetric」は、メトリックの名前と「metrics」を受け取ります。これは、各オブジェクトがタイムスタンプと値を持つオブジェクトの配列です。各値を、対応するタイムスタンプとともに水平線グラフにプロットしようとしているだけです。「getMetric」のコードは次のとおりです。
function getMetric(name, metricData){
var format = d3.time.format("%I-%M-%S");
return context.metric(function(start, stop, step, callback){
var statValues = [];
var lookup = {},
i = start.getTime();
//console.log('startTime', i);
var curStat = null;
for(stat in metricData){
curStat = metricData[stat];
curStat.value = +curStat.value;
var curDate = new Date(curStat.timestamp);
curDate = format(curDate);
lookup[curDate] = curStat;
}
var lastValue;
while((i+=step) < stop){
var key = format(new Date(i));
var curVal = key in lookup ? lookup[key].value : NaN;
console.log(name,curVal);
statValues.push(curVal);
}
//console.log(statValues);
callback(null,statValues);
}, name);
}
これは、プロットされているもののスクリーンショットです。これは、各メトリックが同じ値をプロットしている (私が検証したデータは正しくない) ことです。