use vars (qw($ColorCanvas $ColorFullBlue $ColorHalfBlue));
+use Collectd::Unixsock ();
use Carp (qw(confess cluck));
use CGI (':cgi');
use Exporter;
+use Collectd::Graph::Config (qw(gc_get_scalar));
$ColorCanvas = 'FFFFFF';
$ColorFullBlue = '0000FF';
get_timespan_selection
get_host_selection
get_plugin_selection
+ get_random_color
get_faded_color
sort_idents_by_type_instance
type_to_module_name
flush_files
));
-our $DataDir = '/var/lib/collectd/rrd';
+our $DefaultDataDir = '/var/lib/collectd/rrd';
return (1);
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);
sub ident_to_filename
{
my $ident = shift;
+ my $data_dir = gc_get_scalar ('DataDir', $DefaultDataDir);
my $ret = '';
}
else
{
- $ret .= "$DataDir/";
+ $ret .= "$data_dir/";
}
if (!$ident->{'hostname'})
my $recursive = @_ ? shift : 0;
my $dh;
my @directories = ();
+ my @files = ();
my $ret = [];
opendir ($dh, $dir) or die ("opendir ($dir): $!");
}
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)
my $temp = get_files_from_directory ($_, $recursive - 1);
if ($temp && @$temp)
{
- push (@$ret, @$temp);
+ push (@$ret, @$temp);
}
}
}
{
my $dh;
my @ret = ();
+ my $data_dir = gc_get_scalar ('DataDir', $DefaultDataDir);
- opendir ($dh, "$DataDir") or confess ("opendir ($DataDir): $!");
+ opendir ($dh, "$data_dir") or confess ("opendir ($data_dir): $!");
while (my $entry = readdir ($dh))
{
next if ($entry =~ m/^\./);
- next if (!-d "$DataDir/$entry");
+ next if (!-d "$data_dir/$entry");
+ next if (!-r "$data_dir/$entry" or !-x "$data_dir/$entry");
push (@ret, sanitize_hostname ($entry));
}
closedir ($dh);
my @hosts = @_;
my $ret = {};
my $dh;
+ my $data_dir = gc_get_scalar ('DataDir', $DefaultDataDir);
if (!@hosts)
{
for (@hosts)
{
my $host = $_;
- opendir ($dh, "$DataDir/$host") or next;
+ opendir ($dh, "$data_dir/$host") or next;
while (my $entry = readdir ($dh))
{
my $plugin;
my $plugin_instance = '';
next if ($entry =~ m/^\./);
- next if (!-d "$DataDir/$host/$entry");
+ next if (!-d "$data_dir/$host/$entry");
if ($entry =~ m#^([^-]+)-(.+)$#)
{
sub get_files_for_host
{
my $host = sanitize_hostname (shift);
- return (get_files_from_directory ("$DataDir/$host", 2));
+ my $data_dir = gc_get_scalar ('DataDir', $DefaultDataDir);
+ return (get_files_from_directory ("$data_dir/$host", 2));
} # get_files_for_host
sub _filter_ident
my $ident = shift;
my $all_files;
my @ret = ();
+ my $data_dir = gc_get_scalar ('DataDir', $DefaultDataDir);
#if ($ident->{'hostname'})
#{
#}
#else
#{
- $all_files = get_files_from_directory ($DataDir, 3);
+ $all_files = get_files_from_directory ($data_dir, 3);
#}
@ret = grep { _filter_ident ($ident, $_) == 0 } (@$all_files);
return (sprintf ('%02hx%02hx%02hx', map { int (255.0 * $_) } @{$_[0]}));
} # _color_to_string
+sub get_random_color
+{
+ my ($r, $g, $b) = (rand (), rand ());
+ my $min = 0.0;
+ my $max = 1.0;
+
+ if (($r + $g) < 1.0)
+ {
+ $min = 1.0 - ($r + $g);
+ }
+ else
+ {
+ $max = 2.0 - ($r + $g);
+ }
+
+ $b = $min + (rand () * ($max - $min));
+
+ return (_color_to_string ([$r, $g, $b]));
+} # get_random_color
+
sub get_faded_color
{
my $fg = shift;