my ($list, $obj, $server_ctx) = @_; my @objList = @{ $list }; my (@counter_arr,$objName,@perf_cnt_data,%perfhash); my $gen_time_arr = 1; my $gen_hash_hdr = 1; my $obj_i = 0; my ($rec,$tmpHDR,$tmpVAL); if ($obj eq "system") { $obj = "host"; } $perfhash{"Time"} = ""; foreach my $perf_out ( @objList ){ my $instance = $perf_out->child_get("perf-instances"); my @instances = $instance->children_get("perf-instance-counter-data"); foreach $rec (@instances){ my $obj_id = $rec->child_get_string("object-id"); my $IterStart = NaElement->new("$obj" . "-list-info-iter-start"); $IterStart->child_add_string("object-name-or-id","$obj_id"); my $output = $server_ctx->invoke_elem($IterStart); if ( $output -> results_status()=~/failed/ ) { print "\n\n\tFailed to get list of $obj: Error: ".$output->results_reason(). "\n\n"; } else { my $records = $output->child_get_int("records"); my $tag = $output->child_get_string("tag"); $output = $server_ctx->invoke("$obj" . "-list-info-iter-next", "maximum", $records, "tag", $tag); if ( $output -> results_status()=~/failed/ ) { print "\n\n\tFailed to iterate list of $obj : Error: ".$output->results_reason(). "\n\n"; } } my $aggregates = $output->child_get("$obj" . "s"); my @aggregateArr = $aggregates->children_get(); foreach my $aggr (@aggregateArr) { $objName = $aggr->child_get_string("$obj" . "-name"); $objName =~ s/\///g; } my $counters = $rec->child_get("counters"); @perf_cnt_data = $counters->children_get("perf-counter-data"); my $rec1; # TODO If the counter is aggregate:pa_max_disk_busy and returns nothing get the max of disk:disk_busy for the aggregate foreach $rec1 (@perf_cnt_data) { my $counter_name = $rec1->child_get_string("counter-name"); my $counter_str = $rec1->child_get_string("counter-data"); my @counter_arr = split (',', $counter_str); my $colName = $objName . ":" . $counter_name; chomp($colName); $tmpHDR = $perfhash{"Time"}; $perfhash{"Time"} = join( ',' , $tmpHDR , $colName); for (@counter_arr) { my ($time,$value) = split(':',$_); my @timestamp = ( localtime($time) )[0..5]; $time = POSIX::strftime( '%F %H:%M:%S', @timestamp); if ($gen_time_arr == 1) { $perfhash{$time} = join('' , "," , $value); $gen_time_arr = 0; }else { if ($perfhash{$time}) { $tmpVAL = $perfhash{$time}; } else { $tmpVAL = ""; } $perfhash{$time} = join( ',' , $tmpVAL , $value); } } } } } return(\%perfhash); }