]> ruin.nu Git - ndwebbie.git/blob - lib/NDWeb/Controller/Graphs.pm
Converted the graphs
[ndwebbie.git] / lib / NDWeb / Controller / Graphs.pm
1 package NDWeb::Controller::Graphs;
2
3 use strict;
4 use warnings;
5 use parent 'Catalyst::Controller';
6
7 use ND::Include;
8
9 =head1 NAME
10
11 NDWeb::Controller::Graphs - Catalyst Controller
12
13 =head1 DESCRIPTION
14
15 Catalyst Controller.
16
17 =head1 METHODS
18
19 =cut
20
21
22 =head2 index 
23
24 =cut
25
26 sub begin : Private {
27         my ( $self, $c ) = @_;
28
29         $c->stash(width => 500);
30         $c->stash(height => 300);
31         $c->stash(settings => {
32                 line_width => 1,
33                 y_number_format => sub { prettyValue abs $_[0]},
34                 legend_placement => 'BL',
35                 #zero_axis => 1,
36                 box_axis => 0,
37                 boxclr => 'black',
38                 axislabelclr => 'black',
39                 use_axis => [2,1,2,2],
40                 y1_label => 'size',
41                 two_axes => 1,
42                 y2_label => 'rest',
43                 });
44         $c->stash(defaultgraph => 1);
45 }
46
47 sub planetranks : Local {
48         my ( $self, $c, $planet ) = @_;
49         my $dbh = $c->model;
50
51         $c->cache_page(3600);
52
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 id = $1 ORDER BY tick ASC
58                 });
59         $query->execute($planet);
60         $c->stash(query => $query);
61 }
62
63 sub planetstats : Local {
64         my ( $self, $c, $planet ) = @_;
65         my $dbh = $c->model;
66
67         $c->cache_page(3600);
68
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 id = $1 ORDER BY tick ASC
73                 });
74         $query->execute($planet);
75         $c->stash(query => $query);
76 }
77
78
79 sub galaxyranks : Local {
80         my ( $self, $c, $x,$y ) = @_;
81         my $dbh = $c->model;
82
83         $c->cache_page(3600);
84
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
90                 ORDER BY tick ASC
91                 });
92         $query->execute($x,$y);
93         $c->stash(query => $query);
94 }
95
96 sub galaxystats : Local {
97         my ( $self, $c, $x,$y ) = @_;
98         my $dbh = $c->model;
99
100         $c->cache_page(3600);
101
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
106                 ORDER BY tick ASC
107                 });
108         $query->execute($x,$y);
109         $c->stash(query => $query);
110 }
111
112 sub planetvsnd : Local {
113         my ( $self, $c, $planet ) = @_;
114         my $dbh = $c->model;
115
116         $c->cache_page(3600);
117
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';
121
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 (id) WHERE p.id = $1) p
126                 JOIN alliance_stats a ON a.tick = p.tick
127                 WHERE a.id = 1 ORDER BY tick
128                 });
129         $query->execute($planet);
130         $c->stash(query => $query);
131 }
132
133
134 sub alliancevsintel : Local {
135         my ( $self, $c, $alliance ) = @_;
136         my $dbh = $c->model;
137
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';
141
142         my $query = $dbh->prepare(q{SELECT a.tick,a.score,a.size,memsize, memscore
143                 FROM (SELECT tick,SUM(size) AS memsize,SUM(score) AS memscore
144                         FROM planets p JOIN planet_stats ps USING (id)
145                         WHERE p.alliance_id = $1 GROUP BY tick) p
146                         JOIN alliance_stats a ON a.tick = p.tick
147                 WHERE a.id = $1
148                         AND a.tick > (SELECT max(tick) - 50 FROM alliance_stats)
149                 ORDER BY tick
150                 });
151         $query->execute($alliance);
152         $c->stash(query => $query);
153 }
154
155 sub avgalliancevsintel : Local {
156         my ( $self, $c, $alliance ) = @_;
157         my $dbh = $c->model;
158
159         $c->stash->{settings}->{title} = 'Average alliance vs known members';
160         $c->stash->{settings}->{use_axis} = [2,1,1,2];
161         $c->stash->{settings}->{y2_label} = 'score';
162
163         my $query = $dbh->prepare(q{SELECT a.tick,a.score/LEAST(members,60) AS score
164                 ,a.size/members AS size,memsize, memscore
165                 FROM (SELECT tick,AVG(size) AS memsize,AVG(score) AS memscore
166                         FROM planets p JOIN planet_stats ps USING (id) WHERE p.alliance_id = $1
167                         GROUP BY tick) p
168                 JOIN alliance_stats a ON a.tick = p.tick
169                 WHERE a.id = $1
170                         AND a.tick > (SELECT max(tick) - 50 FROM alliance_stats)
171                 ORDER BY tick
172                 });
173         $query->execute($alliance);
174         $c->stash(query => $query);
175 }
176
177
178 sub end : ActionClass('RenderView') {
179         my ( $self, $c ) = @_;
180         $c->res->headers->content_type('image/png');
181         if ($c->stash->{defaultgraph}){
182                 $c->stash(template => 'graphs/index.tt2');
183
184                 my $query = $c->stash->{query};
185                 my $fields = $query->{NUM_OF_FIELDS};
186                 my @fields;
187                 for (my $i = 0; $i < $fields; $i++){
188                         push @fields,[];
189                 }
190                 while (my @result = $query->fetchrow){
191                         for (my $i = 0; $i < $fields; $i++){
192                                 push @{$fields[$i]},$result[$i];
193                         }
194                 }
195                 $c->stash->{settings}->{x_label_skip} = int(1+(scalar @{$fields[0]}) / 6);
196                 my @legend = @{$query->{NAME}}[1..$fields];
197                 $c->stash(legend => \@legend);
198                 $c->stash(data => \@fields);
199         }
200         
201 }
202
203 =head1 AUTHOR
204
205 Michael Andreen (harv@ruin.nu)
206
207 =head1 LICENSE
208
209 GPL 2.0, or later.
210
211 =cut
212
213 1;