/[Frey]/trunk/lib/Frey/jQuery/flot.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/Frey/jQuery/flot.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 876 - (hide annotations)
Thu Dec 18 13:03:22 2008 UTC (15 years, 4 months ago) by dpavlin
File size: 2822 byte(s)
cleanup
1 dpavlin 860 package Frey::jQuery::flot;
2     use Moose;
3    
4     extends 'Frey';
5     with 'Frey::Web';
6     #with 'Frey::Storage';
7     with 'Frey::jQuery';
8 dpavlin 869 with 'Frey::File'; # FIXME inline on demand?
9 dpavlin 860
10 dpavlin 868 use DateTimeX::Easy;
11    
12     use lib 'lib';
13     use Frey::Shell::sar;
14     use JSON;
15    
16 dpavlin 870 has sar_command => (
17 dpavlin 860 is => 'rw',
18     isa => 'Str',
19     required => 1,
20 dpavlin 870 default => 'ssh www.rot13.org sar -n 1',
21 dpavlin 860 );
22    
23     sub as_markup {
24     my ($self) = @_;
25    
26     my $path = 'static/js/flot';
27    
28     $self->add_js(qq|
29     <!--[if IE]><script language="javascript" type="text/javascript" src="/$path/excanvas.pack.js"></script><![endif]-->
30     <script language="javascript" type="text/javascript" src="/$path/jquery.flot.js"></script>
31     |);
32    
33 dpavlin 870 my $sponge = Frey::Shell::sar->new( sar_command => $self->sar_command )->as_sponge;
34     #warn $self->dump( $sponge );
35 dpavlin 868
36     my $by_col;
37 dpavlin 871 my $unit_by_col;
38 dpavlin 868
39     foreach my $row ( @{ $sponge->{rows} } ) {
40     my $x = DateTimeX::Easy->new( $row->[0] )->epoch * 1000; # ms
41 dpavlin 871 foreach my $col ( 1 .. $#$row ) {
42     my $v = $row->[$col];
43     $unit_by_col->{$col} = $1 if $v =~ s{([M%])$}{};
44     push @{ $by_col->{$col} }, [ $x, $v ];
45 dpavlin 868 }
46     }
47    
48 dpavlin 869 my $dataset;
49 dpavlin 868 my @names;
50     foreach my $nr ( keys %$by_col ) {
51 dpavlin 869 my $name = $sponge->{NAME}->[$nr];
52 dpavlin 871 $dataset->{ $name }->{label}
53     ||= $name
54     . ( $unit_by_col->{$nr} ? ' [' . $unit_by_col->{$nr} . ']' : '' )
55     ;
56 dpavlin 869 $dataset->{ $name }->{data} = $by_col->{$nr};
57 dpavlin 868 }
58    
59 dpavlin 873 my $placeholder = qq|<div class="frey-error">no data found</div>|;
60     my $data_js = '';
61     if ( $dataset ) {
62     $data_js = 'var datasets = ' . to_json( $dataset ) . ";\n";
63     $placeholder = qq|<div id="placeholder" style="width:600px;height:300px;"></div>|;
64     }
65 dpavlin 869
66 dpavlin 870 warn "# $data_js" if $self->debug;
67 dpavlin 868
68 dpavlin 871 my $sar = $self->sar_command;
69     my $c = $sar;
70 dpavlin 870 $c =~ s{(-n\s*\d+).*}{$1};
71    
72     my $form = qq|
73     <form method="post">
74 dpavlin 871 <b>From</b> <input type="submit" value="refresh"><br>
75 dpavlin 870 |;
76    
77     my $flags = `atsar help 2>&1`;
78     $flags =~ s{^.+flags:\s+}{}s;
79 dpavlin 873 $flags =~ s{^\s*-[AS].+$}{}gm; # remove -A and -S flags which doesn't make sense
80     $flags =~ s{^\s+}{}s;
81 dpavlin 870
82     foreach my $line ( split(/\s*\n\s*/, $flags ) ) {
83 dpavlin 871 my ( $flag, $desc ) = split(/\s+/, $line, 2 );
84 dpavlin 870 warn "# $flag | $desc";
85     my $v = "$c $flag";
86 dpavlin 871 my $checked = '';
87     $checked = " checked" if $v eq $self->sar_command;
88     $form .= qq|<input type="radio" name="sar_command" value="$v"$checked>$desc<br>\n|;
89 dpavlin 870 }
90    
91     $form .= qq|
92     </form>
93     |;
94    
95     $self->add_css(q|
96 dpavlin 871 #choices, form { float: left; }
97 dpavlin 870 |);
98    
99 dpavlin 873 return
100 dpavlin 870 qq|
101    
102 dpavlin 876 <code>$sar</code>
103    
104 dpavlin 873 $placeholder
105    
106 dpavlin 871 $form
107 dpavlin 873
108 dpavlin 871 <div id="choices"><b>Show</b></div>
109 dpavlin 860
110 dpavlin 870 | . q|
111 dpavlin 860 <script id="source" language="javascript" type="text/javascript">
112     $(function () {
113 dpavlin 868 var options = {
114 dpavlin 870 selection: { mode: "x" },
115 dpavlin 869 //yaxis: { min: 0, max: 100 },
116     xaxis: { mode: "time" }
117 dpavlin 868 };
118 dpavlin 869
119     |
120     . $data_js
121     . $self->read_file('static/Frey/jQuery/flot/dataset_checkboxes.js')
122     .
123     q|
124    
125 dpavlin 860 });
126     </script>
127 dpavlin 870
128 dpavlin 860 |;
129     }
130    
131     1;

  ViewVC Help
Powered by ViewVC 1.1.26