/[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

Diff of /trunk/lib/Frey/jQuery/flot.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

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

Legend:
Removed from v.860  
changed lines
  Added in v.873

  ViewVC Help
Powered by ViewVC 1.1.26