Handling Returned Performance Data

The following code fragment prints out the returned performance data. This example uses CSV formatted data. The code fragment performs these tasks:

  • Loop through the list of PerfEntityMetricBase objects returned by the QueryPerf method (retrievedStats).
    • Cast the PerfEntityMetricBase object to a PerfEntityMetricCSV object to handle the CSV output specified in the PerfQuerySpec.
    • Retrieve the sampled values.
    • Retrieve the interval information (csvTimeInfoAboutStats). The sampleInfoCSV string (PerfEntityMetricCSV.sampleInfoCSV) is PerfSampleInfo data formatted as interval,time pairs separated by commas – interval-1,time-1,interval-2,time-2. The list of pairs embedded in the string corresponds to the list of sampled values (PerfEntityMetricCSV.value[]).
    • Print the time and interval information.
    • Loop through the sampled values (metricsValues).
      • Use the counter metadata to print out identifying information about the counter along with the returned sampled value for the counter.
      • Use the countersInfoMap to translate the counter ID returned in the PerfMetricSeriesCSV object into the corresponding PerfCounterInfo object.
/*
 * Cycle through the PerfEntityMetricBase objects. Each object contains
 * a set of statistics for a single ManagedEntity.
 */
for(PerfEntityMetricBase singleEntityPerfStats : retrievedStats) {

  /*
   * Cast the base type (PerfEntityMetricBase) to the csv-specific sub-class.
   */
  PerfEntityMetricCSV entityStatsCsv = (PerfEntityMetricCSV)singleEntityPerfStats;

  /* Retrieve the list of sampled values. */
  List<PerfMetricSeriesCSV> metricsValues = entityStatsCsv.getValue();

  if(metricsValues.isEmpty()) {
    System.out.println("No stats retrieved. " +
                       "Check whether the virtual machine is powered on.");
  		throw new Exception();
  }

  /*
   * Retrieve time interval information (PerfEntityMetricCSV.sampleInfoCSV).
   */
  String csvTimeInfoAboutStats = entityStatsCsv.getSampleInfoCSV();
                
  /* Print the time and interval information. */
  System.out.println("Collection: interval (seconds),time (yyyy-mm-ddThh:mm:ssZ)");
  System.out.println(csvTimeInfoAboutStats);

  /*
   * Cycle through the PerfMetricSeriesCSV objects. Each object contains
   * statistics for a single counter on the ManagedEntity.
   */
  for(PerfMetricSeriesCSV csv : metricsValues) {
    /*
     * Use the counterId to obtain the associated PerfCounterInfo object
     */
    PerfCounterInfo pci = countersInfoMap.get(csv.getId().getCounterId());

    /* Print out the metadata for the counter. */
    System.out.println("----------------------------------------");
    System.out.println(pci.getGroupInfo().getKey() + "."
                       + pci.getNameInfo().getKey() + "."
                       + pci.getRollupType() + " - "
                       + pci.getUnitInfo().getKey());
    System.out.println("Instance: "+csv.getId().getInstance());
    System.out.println("Values: " + csv.getValue());
  }
}