############################################################################### # #

アクセスログをグラフ表示します。

#
# {{accessgraph}}
# 
# ############################################################################### package plugin::access::AccessGraph; use strict; use List::Util qw/max min/; use Date::Calc qw/Date_to_Days Add_Delta_Days/; #============================================================================== # コンストラクタ #============================================================================== sub new { my $class = shift; my $self = {}; return bless $self,$class; } #============================================================================== # パラグラフ関数 #============================================================================== sub paragraph { my $self = shift; my $wiki = shift; my $gx = shift; my $gy = shift; if($gx > 1000){ $gx = 1000; } if($gy > 1000){ $gy = 1000; } if($gx eq ''){ $gx = 400; } if($gy eq ''){ $gy = 300; } if($gx*$gy > 300000){ $gx = 400; $gy = 300; } my ($line,%count); open(my $fh,'<',$wiki->config('log_dir')."/".$wiki->config('access_log_file')) or return ""; while (my $line=<$fh>) { chomp $line; my ($page,$date) = split(/ /,$line); $date =~ s|/0|/|g; $date = Date_to_Days(split(/\//,$date)); $count{$date}++; } close($fh); my @key = keys %count; my $xmax = max(@key); my $xmin = min(@key); my $xrange = $xmax - $xmin; my @value = values %count; my $ymax = max(@value); my $c = 0; while ($ymax > 10**($c+1)) { $c++; } $ymax = (int($ymax / (10**$c)) + 1) * (10**$c); my $yhalf = int($ymax / 2); my $x = ''; my $y = ''; foreach my $i (sort @key) { $x .= "," if ($x ne ''); $x .= sprintf("%d",int(($i-$xmin)/$xrange*100)); $y .= "," if ($y ne ''); $y .= sprintf("%d",int($count{$i}/$ymax*100)); } my $xhalf = sprintf("%d%02d%02d",Add_Delta_Days(1,1,1, int(($xmin + $xmax)/2) - 1)); $xmin = sprintf("%d%02d%02d",Add_Delta_Days(1,1,1, $xmin - 1)); $xmax = sprintf("%d%02d%02d",Add_Delta_Days(1,1,1, $xmax - 1)); my $ret = ""; return $ret; } 1;