GrowthForecast
view release on metacpan or search on metacpan
lib/GrowthForecast/Web.pm view on Meta::CPAN
'graphonly' => {
default => 0,
rule => [
[['CHOICE',qw/0 1/],'invalid only flag'],
],
},
'logarithmic' => {
default => 0,
rule => [
[['CHOICE',qw/0 1/],'invalid logarithmic flag'],
],
},
'background_color' => {
default => 'f3f3f3',
rule => [
[sub{ $_[1] =~ m!^[0-9A-F]{6}$!i || $_[1] =~ m!^[0-9A-F]{8}$!i }, 'invalid background color'],
],
},
'canvas_color' => {
default => 'ffffff',
rule => [
[sub{ $_[1] =~ m!^[0-9A-F]{6}$!i || $_[1] =~ m!^[0-9A-F]{8}$!i }, 'invalid canvas color'],
],
},
'font_color' => {
default => '000000',
rule => [
[sub{ $_[1] =~ m!^[0-9A-F]{6}$!i || $_[1] =~ m!^[0-9A-F]{8}$!i }, 'invalid font color'],
],
},
'frame_color' => {
default => '000000',
rule => [
[sub{ $_[1] =~ m!^[0-9A-F]{6}$!i || $_[1] =~ m!^[0-9A-F]{8}$!i }, 'invalid frame color'],
],
},
'axis_color' => {
default => '000000',
rule => [
[sub{ $_[1] =~ m!^[0-9A-F]{6}$!i || $_[1] =~ m!^[0-9A-F]{8}$!i }, 'invalid axis color'],
],
},
'shadea_color' => {
default => 'cfcfcf',
rule => [
[sub{ $_[1] =~ m!^[0-9A-F]{6}$!i || $_[1] =~ m!^[0-9A-F]{8}$!i }, 'invalid shadea color'],
],
},
'shadeb_color' => {
default => '9e9e9e',
rule => [
[sub{ $_[1] =~ m!^[0-9A-F]{6}$!i || $_[1] =~ m!^[0-9A-F]{8}$!i }, 'invalid shadeb color'],
],
},
'border' => {
default => 3,
rule => [
['UINT','invalid border width'],
],
},
'legend' => {
default => 1,
rule => [
[['CHOICE',qw/0 1/],'invalid legend flag'],
],
},
'notitle' => {
default => 0,
rule => [
[['CHOICE',qw/0 1/],'invalid title flag'],
],
},
'xgrid' => {
default => '',
rule => [],
},
'ygrid' => {
default => '',
rule => [],
},
'upper_limit' => {
default => '',
rule => [],
},
'lower_limit' => {
default => '',
rule => [],
},
'rigid' => {
default => '0',
rule => [
[['CHOICE',qw/0 1/],'invalid rigid flag'],
],
},
'sumup' => {
default => 0,
rule => [
[['CHOICE',qw/0 1/],'invalid sumup flag'],
],
},
'step' => {
default => '',
rule => [
['NATURAL', 'invalid step size'],
],
},
'cf' => {
default => 'AVERAGE',
rule => [
[['CHOICE', qw/AVERAGE MAX/], 'invalid consolidation function'],
],
},
'vrule_legend' => {
default => 1,
rule => [
[['CHOICE',qw/0 1/],'invalid vrule_legend flag'],
],
},
];
}
get '/complex/{method:(?:xport|graph|summary)}/:service_name/:section_name/:graph_name' => sub {
my ( $self, $c ) = @_;
my $result = $c->req->validator($self->graph_validator);
my $complex = $self->data->get_complex(
$c->args->{service_name}, $c->args->{section_name}, $c->args->{graph_name},
);
$c->halt(404) unless $complex;
my @data;
$data[0] = $self->data->get_by_id($complex->{'path-1'});
$data[0]->{c_type} = $complex->{'type-1'};
$data[0]->{c_gmode} = $complex->{'gmode-1'};
$data[0]->{stack} = 0;
for my $row (@{$complex->{data_rows}}){
my $data = $row->{graph};
$data->{c_type} = $row->{type};
$data->{c_gmode} = $row->{gmode};
$data->{stack} = $row->{stack};
push @data, $data;
}
if ( $c->args->{method} eq 'graph' ) {
my ($img,$data) = $self->rrd->graph(
\@data, $result->valid->as_hashref
);
$c->res->content_type('image/png');
$c->res->body($img);
}
elsif ( $c->args->{method} eq 'summary' ) {
my ($img,$data) = $self->rrd->graph(
\@data, $result->valid->as_hashref
);
$c->render_json($data);
}
else {
my $data = $self->rrd->export(
\@data, $result->valid->as_hashref
);
$c->render_json($data);
}
return $c->res;
};
get '/{method:(?:xport|graph|summary)}/:complex' => sub {
my ( $self, $c ) = @_;
my $result = $c->req->validator($self->graph_validator);
my @complex = split /:/, $c->args->{complex};
my @data;
for ( my $i=0; $i < @complex; $i = $i+4 ) {
my $type = $complex[$i];
my $id = $complex[$i+1];
my $gmode = $complex[$i+2];
my $stack = $complex[$i+3];
my $data = $self->data->get_by_id($id);
( run in 0.802 second using v1.01-cache-2.11-cpan-39bf76dae61 )