/[Sack]/trunk/lib/Sack/Server/Gnuplot.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/lib/Sack/Server/Gnuplot.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 267 - (hide annotations)
Thu Feb 4 20:31:34 2010 UTC (14 years, 4 months ago) by dpavlin
File size: 1365 byte(s)
save data and image as hash of all keys to work-around filename limits

1 dpavlin 215 package Sack::Server::Gnuplot;
2    
3     use warnings;
4     use strict;
5    
6     use Data::Dump qw(dump);
7 dpavlin 267 use Digest::MD5 qw(md5_hex);
8 dpavlin 215
9     sub date {
10 dpavlin 244 my ( $out, $param ) = @_;
11 dpavlin 215
12 dpavlin 240 die "out not hash but ", dump($out) unless ref($out) eq 'HASH';
13    
14 dpavlin 229 my @plot;
15     my $uid = '';
16 dpavlin 215
17 dpavlin 240 foreach my $key ( keys %$out ) {
18 dpavlin 215
19 dpavlin 244 my $title = $key;
20     $title =~ s{\+$}{};
21     next unless $title =~ s{^date,}{};
22 dpavlin 240
23 dpavlin 244 if ( my $filter = $param->{filter} ) {
24 dpavlin 245 $filter = '(' . join('|', @$filter) . ')' if ref $filter eq 'ARRAY';
25 dpavlin 252 next unless $key =~ m{$filter};
26 dpavlin 244 }
27    
28 dpavlin 267 my $hash = md5_hex $key;
29     my $path = "/tmp/sack.gnuplot.$hash.txt";
30 dpavlin 240 open( my $fh, '>', $path ) || die "$path: $!";
31     print $fh "## out key=$key\n";
32    
33     foreach my $name ( sort keys %{ $out->{$key} } ) {
34    
35     my $v = $out->{$key}->{$name};
36    
37     print $fh "$name $v\n";
38    
39     }
40    
41     close($fh);
42    
43     warn "data $path ", -s $path, " bytes\n";
44    
45 dpavlin 244 push @plot, qq|"$path" using 1:2 title "$title" with linespoints|;
46 dpavlin 240 $uid .= $key;
47 dpavlin 229 }
48 dpavlin 215
49 dpavlin 267 my $hash = md5_hex $uid;
50     my $path = "/tmp/sack.gnuplot.$hash.png";
51 dpavlin 215
52 dpavlin 229 open(my $gnuplot, '|-', 'gnuplot') || die "gnuplot $!";
53     print $gnuplot qq|
54    
55     set terminal png
56     set output '$path'
57    
58     set xdata time
59     set timefmt "%Y-%m-%d"
60     set format x "%d.%m."
61     #set xrange [ "2009-01-01":"2010-01-01" ]
62     #set yrange [ 0 : ]
63    
64     plot |, join(',', @plot);
65    
66     close($gnuplot);
67    
68 dpavlin 215 warn "gnuplot $path ", -s $path, " bytes\n";
69    
70     return $path;
71     }
72    
73     1;

  ViewVC Help
Powered by ViewVC 1.1.26