1 package NDWeb::Controller::Graphs;
5 use parent 'Catalyst::Controller';
11 NDWeb::Controller::Graphs - Catalyst Controller
27 my ( $self, $c ) = @_;
29 $c->stash(width => 500);
30 $c->stash(height => 300);
31 $c->stash(settings => {
33 y_number_format => sub { prettyValue abs $_[0]},
34 legend_placement => 'BL',
38 axislabelclr => 'black',
39 use_axis => [2,1,2,2],
44 $c->stash(defaultgraph => 1);
47 sub planetranks : Local {
48 my ( $self, $c, $planet ) = @_;
53 $c->stash->{settings}->{y_max_value} = '0';
54 my $query = $dbh->prepare(q{SELECT tick,-scorerank AS score,-sizerank AS size
55 ,-valuerank AS value,-xprank AS xp
56 FROM planets NATUral JOIN planet_stats
57 WHERE pid = $1 ORDER BY tick ASC
59 $query->execute($planet);
60 $c->stash(query => $query);
63 sub planetstats : Local {
64 my ( $self, $c, $planet ) = @_;
69 $c->stash->{settings}->{y_min_value} = '0';
70 my $query = $dbh->prepare(q{SELECT tick,score,size,value,xp*60 AS "xp*60"
71 FROM planets NATURAL JOIN planet_stats
72 WHERE pid = $1 ORDER BY tick ASC
74 $query->execute($planet);
75 $c->stash(query => $query);
79 sub galaxyranks : Local {
80 my ( $self, $c, $x,$y ) = @_;
85 $c->stash->{settings}->{title} = "Ranks : $x:$y";
86 $c->stash->{settings}->{y_max_value} = '0';
87 my $query = $dbh->prepare(q{SELECT tick,-scorerank AS score,-sizerank AS size
88 ,-valuerank AS value,-xprank AS xp
89 FROM galaxies WHERE x = $1 AND y = $2
92 $query->execute($x,$y);
93 $c->stash(query => $query);
96 sub galaxystats : Local {
97 my ( $self, $c, $x,$y ) = @_;
100 $c->cache_page(3600);
102 $c->stash->{settings}->{title} = "Stats : $x:$y";
103 $c->stash->{settings}->{y_min_value} = '0';
104 my $query = $dbh->prepare(q{SELECT tick,score,size,value,xp*60 AS "xp*60"
105 FROM galaxies WHERE x = $1 AND y = $2
108 $query->execute($x,$y);
109 $c->stash(query => $query);
112 sub planetvsnd : Local {
113 my ( $self, $c, $planet ) = @_;
116 $c->cache_page(3600);
118 $c->stash->{settings}->{title} = 'You vs ND AVG';
119 $c->stash->{settings}->{use_axis} = [2,1,1,2];
120 $c->stash->{settings}->{y2_label} = 'score';
122 my $query = $dbh->prepare(q{SELECT a.tick,a.score/LEAST(members,60) AS NDscore
123 ,a.size/members as NDsize,memsize, memscore
124 FROM (SELECT tick,size AS memsize,score AS memscore
125 FROM planets p JOIN planet_stats ps USING (pid) WHERE pid = $1) p
126 JOIN alliance_stats a ON a.tick = p.tick
127 WHERE aid = 1 ORDER BY tick
129 $query->execute($planet);
130 $c->stash(query => $query);
134 sub alliancevsintel : Local {
135 my ( $self, $c, $alliance ) = @_;
138 $c->stash->{settings}->{title} = 'Alliance vs known members';
139 $c->stash->{settings}->{use_axis} = [2,1,1,2];
140 $c->stash->{settings}->{y2_label} = 'score';
142 my $query = $dbh->prepare(q{SELECT a.tick,a.score,a.size,memsize, memscore
143 FROM (SELECT tick,aid,SUM(size) AS memsize,SUM(score) AS memscore
145 JOIN planets p USING (alliance)
146 JOIN planet_stats ps USING (pid)
147 GROUP BY tick,aid ) p
148 JOIN alliance_stats a USING (aid,tick)
150 AND tick > (SELECT max(tick) - 50 FROM alliance_stats)
153 $query->execute($alliance);
154 $c->stash(query => $query);
157 sub avgalliancevsintel : Local {
158 my ( $self, $c, $alliance ) = @_;
161 $c->stash->{settings}->{title} = 'Average alliance vs known members';
162 $c->stash->{settings}->{use_axis} = [2,1,1,2];
163 $c->stash->{settings}->{y2_label} = 'score';
165 my $query = $dbh->prepare(q{SELECT a.tick,a.score/LEAST(members,60) AS score
166 ,a.size/members AS size,memsize, memscore
167 FROM (SELECT tick,aid,AVG(size) AS memsize,AVG(score) AS memscore
169 JOIN planets p USING (alliance)
170 JOIN planet_stats ps USING (pid)
172 JOIN alliance_stats a USING (aid,tick)
174 AND tick > (SELECT max(tick) - 50 FROM alliance_stats)
177 $query->execute($alliance);
178 $c->stash(query => $query);
182 sub end : ActionClass('RenderView') {
183 my ( $self, $c ) = @_;
184 $c->res->headers->content_type('image/png');
185 if ($c->stash->{defaultgraph}){
186 $c->stash(template => 'graphs/index.tt2');
188 my $query = $c->stash->{query};
189 my $fields = $query->{NUM_OF_FIELDS};
191 for (my $i = 0; $i < $fields; $i++){
194 while (my @result = $query->fetchrow){
195 for (my $i = 0; $i < $fields; $i++){
196 push @{$fields[$i]},$result[$i];
199 $c->stash->{settings}->{x_label_skip} = int(1+(scalar @{$fields[0]}) / 6);
200 my @legend = @{$query->{NAME}}[1..$fields];
201 $c->stash(legend => \@legend);
202 $c->stash(data => \@fields);
209 Michael Andreen (harv@ruin.nu)