Program: 105102
Project: 105102
Buggy source:
private HashMap<String,VmStatsEntry> getVmStats(List<String> vmNames) throws Exception {
  VmwareHypervisorHost hyperHost=getHyperHost(getServiceContext());
  HashMap<String,VmStatsEntry> vmResponseMap=new HashMap<String,VmStatsEntry>();
  ManagedObjectReference perfMgr=getServiceContext().getServiceContent().getPerfManager();
  VimPortType service=getServiceContext().getService();
  PerfCounterInfo rxPerfCounterInfo=null;
  PerfCounterInfo txPerfCounterInfo=null;
  List<PerfCounterInfo> cInfo=getServiceContext().getVimClient().getDynamicProperty(perfMgr,"String_Node_Str");
  for (  PerfCounterInfo info : cInfo) {
    if ("String_Node_Str".equalsIgnoreCase(info.getGroupInfo().getKey())) {
      if ("String_Node_Str".equalsIgnoreCase(info.getNameInfo().getKey())) {
        txPerfCounterInfo=info;
      }
      if ("String_Node_Str".equalsIgnoreCase(info.getNameInfo().getKey())) {
        rxPerfCounterInfo=info;
      }
    }
  }
  int key=((HostMO)hyperHost).getCustomFieldKey("String_Node_Str",CustomFieldConstants.CLOUD_VM_INTERNAL_NAME);
  if (key == 0) {
    s_logger.warn("String_Node_Str" + CustomFieldConstants.CLOUD_VM_INTERNAL_NAME + "String_Node_Str");
  }
  String instanceNameCustomField="String_Node_Str" + key + "String_Node_Str";
  final String numCpuStr="String_Node_Str";
  final String cpuUseStr="String_Node_Str";
  final String guestMemUseStr="String_Node_Str";
  final String memLimitStr="String_Node_Str";
  final String memMbStr="String_Node_Str";
  ObjectContent[] ocs=hyperHost.getVmPropertiesOnHyperHost(new String[]{"String_Node_Str",numCpuStr,cpuUseStr,guestMemUseStr,memLimitStr,memMbStr,instanceNameCustomField});
  if (ocs != null && ocs.length > 0) {
    for (    ObjectContent oc : ocs) {
      List<DynamicProperty> objProps=oc.getPropSet();
      if (objProps != null) {
        String name=null;
        String numberCPUs=null;
        String maxCpuUsage=null;
        String memlimit=null;
        String memkb=null;
        String guestMemusage=null;
        String vmNameOnVcenter=null;
        String vmInternalCSName=null;
        for (        DynamicProperty objProp : objProps) {
          if (objProp.getName().equals("String_Node_Str")) {
            vmNameOnVcenter=objProp.getVal().toString();
          }
 else           if (objProp.getName().contains(instanceNameCustomField)) {
            if (objProp.getVal() != null)             vmInternalCSName=((CustomFieldStringValue)objProp.getVal()).getValue();
          }
 else           if (objProp.getName().equals(guestMemusage)) {
            guestMemusage=objProp.getVal().toString();
          }
 else           if (objProp.getName().equals(numCpuStr)) {
            numberCPUs=objProp.getVal().toString();
          }
 else           if (objProp.getName().equals(cpuUseStr)) {
            maxCpuUsage=objProp.getVal().toString();
          }
 else           if (objProp.getName().equals(memLimitStr)) {
            memlimit=objProp.getVal().toString();
          }
 else           if (objProp.getName().equals(memMbStr)) {
            memkb=objProp.getVal().toString();
          }
        }
        new VirtualMachineMO(hyperHost.getContext(),oc.getObj());
        if (vmInternalCSName != null) {
          name=vmInternalCSName;
        }
 else {
          name=vmNameOnVcenter;
        }
        if (!vmNames.contains(name)) {
          continue;
        }
        ManagedObjectReference vmMor=hyperHost.findVmOnHyperHost(name).getMor();
        assert(vmMor != null);
        ArrayList<PerfMetricId> vmNetworkMetrics=new ArrayList<PerfMetricId>();
        List<PerfMetricId> perfMetrics=service.queryAvailablePerfMetric(perfMgr,vmMor,null,null,null);
        if (perfMetrics != null) {
          for (int index=0; index < perfMetrics.size(); ++index) {
            if (((rxPerfCounterInfo != null) && (perfMetrics.get(index).getCounterId() == rxPerfCounterInfo.getKey())) || ((txPerfCounterInfo != null) && (perfMetrics.get(index).getCounterId() == txPerfCounterInfo.getKey()))) {
              vmNetworkMetrics.add(perfMetrics.get(index));
            }
          }
        }
        double networkReadKBs=0;
        double networkWriteKBs=0;
        long sampleDuration=0;
        if (vmNetworkMetrics.size() != 0) {
          PerfQuerySpec qSpec=new PerfQuerySpec();
          qSpec.setEntity(vmMor);
          PerfMetricId[] availableMetricIds=vmNetworkMetrics.toArray(new PerfMetricId[0]);
          qSpec.getMetricId().addAll(Arrays.asList(availableMetricIds));
          List<PerfQuerySpec> qSpecs=new ArrayList<PerfQuerySpec>();
          qSpecs.add(qSpec);
          List<PerfEntityMetricBase> values=service.queryPerf(perfMgr,qSpecs);
          for (int i=0; i < values.size(); ++i) {
            List<PerfSampleInfo> infos=((PerfEntityMetric)values.get(i)).getSampleInfo();
            if (infos != null && infos.size() > 0) {
              int endMs=infos.get(infos.size() - 1).getTimestamp().getSecond() * 1000 + infos.get(infos.size() - 1).getTimestamp().getMillisecond();
              int beginMs=infos.get(0).getTimestamp().getSecond() * 1000 + infos.get(0).getTimestamp().getMillisecond();
              sampleDuration=(endMs - beginMs) / 1000;
              List<PerfMetricSeries> vals=((PerfEntityMetric)values.get(i)).getValue();
              for (int vi=0; ((vals != null) && (vi < vals.size())); ++vi) {
                if (vals.get(vi) instanceof PerfMetricIntSeries) {
                  PerfMetricIntSeries val=(PerfMetricIntSeries)vals.get(vi);
                  List<Long> perfValues=val.getValue();
                  Long sumRate=0L;
                  for (int j=0; j < infos.size(); j++) {
                    sumRate+=perfValues.get(j);
                  }
                  Long averageRate=sumRate / infos.size();
                  if (vals.get(vi).getId().getCounterId() == rxPerfCounterInfo.getKey()) {
                    networkReadKBs=sampleDuration * averageRate;
                  }
                  if (vals.get(vi).getId().getCounterId() == txPerfCounterInfo.getKey()) {
                    networkWriteKBs=sampleDuration * averageRate;
                  }
                }
              }
            }
          }
        }
        vmResponseMap.put(name,new VmStatsEntry(NumberUtils.toDouble(memkb) * 1024,NumberUtils.toDouble(guestMemusage) * 1024,NumberUtils.toDouble(memlimit) * 1024,NumberUtils.toDouble(maxCpuUsage),networkReadKBs,networkWriteKBs,NumberUtils.toInt(numberCPUs),"String_Node_Str"));
      }
    }
  }
  return vmResponseMap;
}

Fixed version (ground truth):
private HashMap<String,VmStatsEntry> getVmStats(List<String> vmNames) throws Exception {
  VmwareHypervisorHost hyperHost=getHyperHost(getServiceContext());
  HashMap<String,VmStatsEntry> vmResponseMap=new HashMap<String,VmStatsEntry>();
  ManagedObjectReference perfMgr=getServiceContext().getServiceContent().getPerfManager();
  VimPortType service=getServiceContext().getService();
  PerfCounterInfo rxPerfCounterInfo=null;
  PerfCounterInfo txPerfCounterInfo=null;
  List<PerfCounterInfo> cInfo=getServiceContext().getVimClient().getDynamicProperty(perfMgr,"String_Node_Str");
  for (  PerfCounterInfo info : cInfo) {
    if ("String_Node_Str".equalsIgnoreCase(info.getGroupInfo().getKey())) {
      if ("String_Node_Str".equalsIgnoreCase(info.getNameInfo().getKey())) {
        txPerfCounterInfo=info;
      }
      if ("String_Node_Str".equalsIgnoreCase(info.getNameInfo().getKey())) {
        rxPerfCounterInfo=info;
      }
    }
  }
  int key=((HostMO)hyperHost).getCustomFieldKey("String_Node_Str",CustomFieldConstants.CLOUD_VM_INTERNAL_NAME);
  if (key == 0) {
    s_logger.warn("String_Node_Str" + CustomFieldConstants.CLOUD_VM_INTERNAL_NAME + "String_Node_Str");
  }
  String instanceNameCustomField="String_Node_Str" + key + "String_Node_Str";
  final String numCpuStr="String_Node_Str";
  final String cpuUseStr="String_Node_Str";
  final String guestMemUseStr="String_Node_Str";
  final String memLimitStr="String_Node_Str";
  final String memMbStr="String_Node_Str";
  final String allocatedCpuStr="String_Node_Str";
  ObjectContent[] ocs=hyperHost.getVmPropertiesOnHyperHost(new String[]{"String_Node_Str",numCpuStr,cpuUseStr,guestMemUseStr,memLimitStr,memMbStr,allocatedCpuStr,instanceNameCustomField});
  if (ocs != null && ocs.length > 0) {
    for (    ObjectContent oc : ocs) {
      List<DynamicProperty> objProps=oc.getPropSet();
      if (objProps != null) {
        String name=null;
        String numberCPUs=null;
        double maxCpuUsage=0;
        String memlimit=null;
        String memkb=null;
        String guestMemusage=null;
        String vmNameOnVcenter=null;
        String vmInternalCSName=null;
        double allocatedCpu=0;
        for (        DynamicProperty objProp : objProps) {
          if (objProp.getName().equals("String_Node_Str")) {
            vmNameOnVcenter=objProp.getVal().toString();
          }
 else           if (objProp.getName().contains(instanceNameCustomField)) {
            if (objProp.getVal() != null)             vmInternalCSName=((CustomFieldStringValue)objProp.getVal()).getValue();
          }
 else           if (objProp.getName().equals(guestMemusage)) {
            guestMemusage=objProp.getVal().toString();
          }
 else           if (objProp.getName().equals(numCpuStr)) {
            numberCPUs=objProp.getVal().toString();
          }
 else           if (objProp.getName().equals(cpuUseStr)) {
            maxCpuUsage=NumberUtils.toDouble(objProp.getVal().toString());
          }
 else           if (objProp.getName().equals(memLimitStr)) {
            memlimit=objProp.getVal().toString();
          }
 else           if (objProp.getName().equals(memMbStr)) {
            memkb=objProp.getVal().toString();
          }
 else           if (objProp.getName().equals(allocatedCpuStr)) {
            allocatedCpu=NumberUtils.toDouble(objProp.getVal().toString());
          }
        }
        maxCpuUsage=(maxCpuUsage / allocatedCpu) * 100;
        new VirtualMachineMO(hyperHost.getContext(),oc.getObj());
        if (vmInternalCSName != null) {
          name=vmInternalCSName;
        }
 else {
          name=vmNameOnVcenter;
        }
        if (!vmNames.contains(name)) {
          continue;
        }
        ManagedObjectReference vmMor=hyperHost.findVmOnHyperHost(name).getMor();
        assert(vmMor != null);
        ArrayList<PerfMetricId> vmNetworkMetrics=new ArrayList<PerfMetricId>();
        List<PerfMetricId> perfMetrics=service.queryAvailablePerfMetric(perfMgr,vmMor,null,null,null);
        if (perfMetrics != null) {
          for (int index=0; index < perfMetrics.size(); ++index) {
            if (((rxPerfCounterInfo != null) && (perfMetrics.get(index).getCounterId() == rxPerfCounterInfo.getKey())) || ((txPerfCounterInfo != null) && (perfMetrics.get(index).getCounterId() == txPerfCounterInfo.getKey()))) {
              vmNetworkMetrics.add(perfMetrics.get(index));
            }
          }
        }
        double networkReadKBs=0;
        double networkWriteKBs=0;
        long sampleDuration=0;
        if (vmNetworkMetrics.size() != 0) {
          PerfQuerySpec qSpec=new PerfQuerySpec();
          qSpec.setEntity(vmMor);
          PerfMetricId[] availableMetricIds=vmNetworkMetrics.toArray(new PerfMetricId[0]);
          qSpec.getMetricId().addAll(Arrays.asList(availableMetricIds));
          List<PerfQuerySpec> qSpecs=new ArrayList<PerfQuerySpec>();
          qSpecs.add(qSpec);
          List<PerfEntityMetricBase> values=service.queryPerf(perfMgr,qSpecs);
          for (int i=0; i < values.size(); ++i) {
            List<PerfSampleInfo> infos=((PerfEntityMetric)values.get(i)).getSampleInfo();
            if (infos != null && infos.size() > 0) {
              int endMs=infos.get(infos.size() - 1).getTimestamp().getSecond() * 1000 + infos.get(infos.size() - 1).getTimestamp().getMillisecond();
              int beginMs=infos.get(0).getTimestamp().getSecond() * 1000 + infos.get(0).getTimestamp().getMillisecond();
              sampleDuration=(endMs - beginMs) / 1000;
              List<PerfMetricSeries> vals=((PerfEntityMetric)values.get(i)).getValue();
              for (int vi=0; ((vals != null) && (vi < vals.size())); ++vi) {
                if (vals.get(vi) instanceof PerfMetricIntSeries) {
                  PerfMetricIntSeries val=(PerfMetricIntSeries)vals.get(vi);
                  List<Long> perfValues=val.getValue();
                  Long sumRate=0L;
                  for (int j=0; j < infos.size(); j++) {
                    sumRate+=perfValues.get(j);
                  }
                  Long averageRate=sumRate / infos.size();
                  if (vals.get(vi).getId().getCounterId() == rxPerfCounterInfo.getKey()) {
                    networkReadKBs=sampleDuration * averageRate;
                  }
                  if (vals.get(vi).getId().getCounterId() == txPerfCounterInfo.getKey()) {
                    networkWriteKBs=sampleDuration * averageRate;
                  }
                }
              }
            }
          }
        }
        vmResponseMap.put(name,new VmStatsEntry(NumberUtils.toDouble(memkb) * 1024,NumberUtils.toDouble(guestMemusage) * 1024,NumberUtils.toDouble(memlimit) * 1024,maxCpuUsage,networkReadKBs,networkWriteKBs,NumberUtils.toInt(numberCPUs),"String_Node_Str"));
      }
    }
  }
  return vmResponseMap;
}