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

  ViewVC Help
Powered by ViewVC 1.1.26