collection3: fix multiple hosts selection issue
[collectd.git] / contrib / collection3 / lib / Collectd / Graph / Common.pm
index b445c8e..c6e2508 100644 (file)
@@ -106,7 +106,9 @@ sub group_files_by_plugin_instance
   for (my $i = 0; $i < @files; $i++)
   {
     my $file = $files[$i];
-    my $key = $file->{'plugin_instance'} || '';
+    my $key1 = $file->{'hostname'} || '';
+    my $key2 = $file->{'plugin_instance'} || '';
+    my $key = "$key1-$key2";
 
     $data->{$key} ||= [];
     push (@{$data->{$key}}, $file);
@@ -216,6 +218,7 @@ sub get_files_from_directory
   my $recursive = @_ ? shift : 0;
   my $dh;
   my @directories = ();
+  my @files = ();
   my $ret = [];
 
   opendir ($dh, $dir) or die ("opendir ($dir): $!");
@@ -231,15 +234,13 @@ sub get_files_from_directory
     }
     elsif (-f $entry)
     {
-      my $ident = filename_to_ident ($entry);
-      if ($ident)
-      {
-       push (@$ret, $ident);
-      }
+      push (@files, $entry);
     }
   }
   closedir ($dh);
 
+  push (@$ret, map { filename_to_ident ($_) } sort (@files));
+
   if ($recursive > 0)
   {
     for (@directories)
@@ -247,7 +248,7 @@ sub get_files_from_directory
       my $temp = get_files_from_directory ($_, $recursive - 1);
       if ($temp && @$temp)
       {
-       push (@$ret, @$temp);
+        push (@$ret, @$temp);
       }
     }
   }
@@ -266,6 +267,7 @@ sub get_all_hosts
   {
     next if ($entry =~ m/^\./);
     next if (!-d "$data_dir/$entry");
+    next if (!-r "$data_dir/$entry" or !-x "$data_dir/$entry");
     push (@ret, sanitize_hostname ($entry));
   }
   closedir ($dh);