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 )