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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.26