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

  ViewVC Help
Powered by ViewVC 1.1.26