package com.ibm.nmon.data.transform;
import com.ibm.nmon.data.DataRecord;
import com.ibm.nmon.data.DataSet;
import com.ibm.nmon.data.DataType;
import com.ibm.nmon.data.SubDataType;
/**
* Post processor to add a <code>Network Interface (Total)</code> data type that aggregates data for
* all network interfaces.
*/
public final class WindowsNetworkPostProcessor implements DataPostProcessor {
@Override
public void addDataTypes(DataSet data) {
SubDataType total = null;
for (DataType type : data.getTypes()) {
if (type.getId().contains("Network Interface")) {
total = new SubDataType("Network Interface", "Total", "Network Interface", type.getFields().toArray(
new String[type.getFieldCount()]));
break;
}
}
if (total != null) {
data.addType(total);
}
}
@Override
public void postProcess(DataSet data, DataRecord record) {
DataType total = data.getType("Network Interface" + " (Total)");
if (total == null) {
return;
}
int totalFieldCount = total.getFieldCount();
double[] totalData = new double[totalFieldCount];
for (int i = 0; i < totalData.length; i++) {
totalData[i] = 0;
}
for (DataType type : data.getTypes()) {
if (type.getId().startsWith("Network Interface") && (type != total)) {
if (record.hasData(type)) {
double[] typeData = record.getData(type);
// assume ordering is the same for all types
for (int i = 0; i < totalFieldCount; i++) {
totalData[i] += typeData[i];
}
}
}
}
record.addData(total, totalData);
}
}