You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by ar...@apache.org on 2017/03/30 21:55:14 UTC

svn commit: r1789590 - /vcl/trunk/managementnode/lib/VCL/utils.pm

Author: arkurth
Date: Thu Mar 30 21:55:14 2017
New Revision: 1789590

URL: http://svn.apache.org/viewvc?rev=1789590&view=rev
Log:
VCL-1032
Removed /s from 2 regex's in utils.pm causing very slow text processing.

Other
Added utils.pm::format_array_reference. It's currently only used for generating output to help development.

Modified:
    vcl/trunk/managementnode/lib/VCL/utils.pm

Modified: vcl/trunk/managementnode/lib/VCL/utils.pm
URL: http://svn.apache.org/viewvc/vcl/trunk/managementnode/lib/VCL/utils.pm?rev=1789590&r1=1789589&r2=1789590&view=diff
==============================================================================
--- vcl/trunk/managementnode/lib/VCL/utils.pm (original)
+++ vcl/trunk/managementnode/lib/VCL/utils.pm Thu Mar 30 21:55:14 2017
@@ -113,6 +113,7 @@ our @EXPORT = qw(
 	delete_vcld_semaphore
 	determine_remote_connection_target
 	escape_file_path
+	format_array_reference
 	format_data
 	format_hash_keys
 	format_number
@@ -4404,8 +4405,8 @@ sub run_ssh_command {
 		$ssh_output =~ s/Offending key.*//ig;
 		$ssh_output =~ s/Matching host key in.*//ig;
 		$ssh_output =~ s/.*POSSIBLE BREAK-IN ATTEMPT.*//ig;
-		$ssh_output =~ s/.*ssh-askpass:[^\n]*//igs;
-		$ssh_output =~ s/.*bad permissions:[^\n]*//igs;
+		$ssh_output =~ s/.*ssh-askpass:[^\n]*//ig;
+		$ssh_output =~ s/.*bad permissions:[^\n]*//ig;
 		
 		# Remove any spaces from the beginning and end of the output
 		$ssh_output =~ s/(^\s+)|(\s+$)//g;
@@ -8764,14 +8765,14 @@ sub format_data {
 
 =head2 format_hash_keys
 
- Parameters  : $hash_ref, $level (optional), $parent_keys (optional)
+ Parameters  : $hash_ref, $display_parent_keys, $display_values_hashref, $parents
  Returns     : hash reference
  Description : 
 
 =cut
 
 sub format_hash_keys {
-	my ($hash_ref, $display_parent_keys, $display_values_hashref, $parent_keys) = @_;
+	my ($hash_ref, $parents) = @_;
 	if (!$hash_ref) {
 		notify($ERRORS{'WARNING'}, 0, "hash reference argument was not supplied");
 		return;
@@ -8781,6 +8782,8 @@ sub format_hash_keys {
 		return;
 	}
 	
+	my $indent_character = ' ';
+	
 	my $return_string;
 	if ($return_string) {
 		$return_string .= "\n";
@@ -8789,54 +8792,103 @@ sub format_hash_keys {
 		$return_string = '';
 	}
 	
-	if (!defined($parent_keys)) {
-		$parent_keys = [];
+	if (!defined($parents)) {
+		$return_string .= "{\n";
+		$return_string .= format_hash_keys($hash_ref, ['']);
+		$return_string .= "}";
+		return $return_string;
 	}
 	
-	my $level = scalar(@$parent_keys);
-	
-	# Add specific values specified in $display_values_hashref to the return string
-	if (@$parent_keys && $display_values_hashref) {
-		my $parent_key = @$parent_keys[-1];
-		for my $key (sort { lc($a) cmp lc($b) } keys %$hash_ref) {
-			my $value = $hash_ref->{$key} || '<NULL>';
-			next if ref($value);
-			for my $display_parent_key (sort { lc($a) cmp lc($b) } keys %$display_values_hashref) {
-				my $display_key = $display_values_hashref->{$display_parent_key};
-				next if ($parent_key ne $display_parent_key || $key ne $display_key);
-				$return_string .= '-' x ($level * 3);
-				$return_string .= join('', map { "{$_}" } @$parent_keys) if ($display_parent_keys);
-				$return_string .= "{$key} => '$value'";
-				$return_string .= "\n";
-			}
-		}
-	}
+	my $level = scalar(@$parents);
 	
 	for my $key (sort { lc($a) cmp lc($b) } keys %$hash_ref) {
 		my $value = $hash_ref->{$key};
 		my $type = ref($value);
-		if (!$type) {
-			next;
-		}
 		
-		$return_string .= '-' x ($level * 3);
+		$return_string .= $indent_character x ($level * 3);
 		
 		if ($type eq 'HASH') {
-			$return_string .= join('', map { "{$_}" } @$parent_keys) if ($display_parent_keys);
-			$return_string .= "{$key}";
-			$return_string .= "\n";
-			
-			push @$parent_keys, $key;
-			$return_string .= format_hash_keys($value, $display_parent_keys, $display_values_hashref, $parent_keys);
-			pop @$parent_keys;
+			push @$parents, $key;
+			
+			$return_string .= "$key = {\n";
+			$return_string .= format_hash_keys($value, $parents);
+			$return_string .= $indent_character x ($level * 3);
+			$return_string .= "},\n";
+			
+			pop @$parents;
 		}
 		elsif ($type eq 'ARRAY') {
-			$return_string .= "[$key]\n";
+			$return_string .= "$key => [],\n";
 		}
-		else {
+		elsif ($type) {
 			$return_string .= "<$type: $key>\n";
 		}
+		else {
+			$return_string .= "$key = '',\n";
+		}
+	}
+	
+	return $return_string;
+}
+
+#/////////////////////////////////////////////////////////////////////////////
+
+=head2 format_array_reference
+
+ Parameters  : $data, $max_depth, $parents
+ Returns     : none
+ Description : 
+
+=cut
+
+sub format_array_reference {
+	my ($data, $max_depth, $parents) = @_;
+	
+	$parents = [] unless $parents;
+	
+	my $indent_character = ' ';
+	my $indent_count = 3;
+	
+	my $data_type = ref($data);
+	if ($data_type !~ /(ARRAY|HASH)/) {
+		return "'',\n";
+	}
+	
+	
+	
+
+	my $hash_ref;
+	my $opening_char;
+	my $closing_char;
+	if ($data_type eq 'ARRAY') {
+		$opening_char = '[';
+		$closing_char = ']';
+		for (my $index = 0; $index < scalar(@$data); $index++) {
+			$hash_ref->{"[$index]"}	= $data->[$index];
+		}
+	}
+	elsif ($data_type eq 'HASH') {
+		$opening_char = '{';
+		$closing_char = '}';
+		$hash_ref = $data;
+	}
+	
+	
+	
+	my $return_string = "$opening_char";
+	
+	if (!$max_depth || scalar(@$parents) < $max_depth) {
+		$return_string .= "\n";
+		for my $key (sort keys %$hash_ref) {
+			my $value = $hash_ref->{$key};
+			push @$parents, $key;
+			$return_string .= $indent_character x (scalar(@$parents) * $indent_count);
+			$return_string .= "$key = " . format_array_reference($value, $max_depth, $parents);
+			pop @$parents;
+		}
+		$return_string .= $indent_character x (scalar(@$parents) * $indent_count);
 	}
+	$return_string .= "$closing_char,\n";
 	
 	return $return_string;
 }